From 121b0c399ab5fadd9cb3a46509d68fe1ba476c95 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 05 Jul 2022 09:59:41 +0800
Subject: [PATCH] fid:导航对接数据库解析

---
 src/main/java/com/xcong/farmer/cms/conversion/ColumnConversion.java                  |   27 ++++++
 src/main/java/com/xcong/farmer/cms/core/template/TemplateLoader.java                 |    1 
 src/main/java/com/xcong/farmer/cms/core/tag/data/NavData.java                        |   60 +++++++++++++++
 src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java |    2 
 src/main/resources/mapper/ArticleMapper.xml                                          |    6 +
 src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java            |   93 ++++++++++++++++++----
 src/main/resources/mapper/ColumnMapper.xml                                           |    7 +
 src/main/java/com/xcong/farmer/cms/modules/system/entity/ArticleEntity.java          |    7 +
 src/main/java/com/xcong/farmer/cms/modules/system/mapper/ArticleMapper.java          |    2 
 src/main/java/com/xcong/farmer/cms/core/node/Template.java                           |    5 
 src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java          |    4 
 src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java                           |    4 +
 src/main/java/com/xcong/farmer/cms/modules/system/mapper/ColumnMapper.java           |    6 +
 13 files changed, 196 insertions(+), 28 deletions(-)

diff --git a/src/main/java/com/xcong/farmer/cms/conversion/ColumnConversion.java b/src/main/java/com/xcong/farmer/cms/conversion/ColumnConversion.java
new file mode 100644
index 0000000..a9dd7f7
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/conversion/ColumnConversion.java
@@ -0,0 +1,27 @@
+package com.xcong.farmer.cms.conversion;
+
+import com.xcong.farmer.cms.core.tag.data.NavData;
+import com.xcong.farmer.cms.modules.system.entity.ColumnEntity;
+import com.xcong.farmer.cms.modules.test.mapper.TestUserEntityMapper;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * @author wzy
+ * @date 2022-07-04
+ **/
+@Mapper
+public abstract class ColumnConversion {
+
+    public static final ColumnConversion INSTANCE = Mappers.getMapper(ColumnConversion.class);
+
+    @Mapping(target = "title", source = "columnName")
+    @Mapping(target = "code", source = "columnCode")
+    @Mapping(target = "image", source = "pic")
+    public abstract NavData columnToNav(ColumnEntity column);
+
+    public abstract List<NavData> columnsToNavs(List<ColumnEntity> column);
+}
diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java
index 74ff8d3..f0c4db8 100644
--- a/src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java
+++ b/src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java
@@ -1,8 +1,17 @@
 package com.xcong.farmer.cms.core.handler;
 
+import cn.hutool.core.collection.CollUtil;
+import com.xcong.farmer.cms.conversion.ColumnConversion;
 import com.xcong.farmer.cms.core.node.AttrNode;
+import com.xcong.farmer.cms.core.tag.data.NavData;
+import com.xcong.farmer.cms.core.tag.model.Nav;
+import com.xcong.farmer.cms.modules.system.entity.ArticleEntity;
+import com.xcong.farmer.cms.modules.system.entity.ColumnEntity;
+import com.xcong.farmer.cms.modules.system.mapper.ArticleMapper;
 import com.xcong.farmer.cms.modules.system.mapper.ColumnMapper;
+import com.xcong.farmer.cms.modules.system.vo.AdminColumnVo;
 import com.xcong.farmer.cms.utils.SpringContextHolder;
+import lombok.extern.slf4j.Slf4j;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -13,34 +22,80 @@
  * @author wzy
  * @date 2022-06-28
  **/
+@Slf4j
 public class NavDataParserHandler implements DataParserHandler {
 
     private ColumnMapper columnMapper = SpringContextHolder.getBean(ColumnMapper.class);
-
+    private ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class);
+    private String BASE_URL = "http://192.168.0.1/";
     @Override
     public void dataParser(AttrNode node) {
-        System.out.println("NavDataParserHandler");
-        List<Map<String, Object>> list = new ArrayList<>();
-        Map<String, Object> aa = new HashMap<>();
-        aa.put("title", "导航1");
-        list.add(aa);
+        log.info("导航栏解析");
+        Long companyId = (Long) node.getSystemDataValue("companyId");
 
-        Map<String, Object> bb = new HashMap<>();
-        bb.put("title", "导航2");
+        List<ColumnEntity> columns = columnMapper.selectColumnByParentId(0L, companyId);
 
-        List<Map<String, Object>> sub = new ArrayList<>();
-        Map<String, Object> subBB = new HashMap<>();
-        subBB.put("title", "子导航1");
-        subBB.put("src", "http://1234");
-        sub.add(subBB);
-        Map<String, Object> subAA = new HashMap<>();
-        subAA.put("title", "子导航2");
-        subAA.put("src", "http://123455555");
-        sub.add(subAA);
+        if (CollUtil.isEmpty(columns)) {
+            return;
+        }
 
-        bb.put("children", sub);
-        list.add(bb);
+        List<NavData> list = new ArrayList<>();
+        for (ColumnEntity column : columns) {
+            NavData navData = columnToNav(column);
 
+            List<ColumnEntity> child = columnMapper.selectColumnByParentId(column.getId(), companyId);
+            if (CollUtil.isNotEmpty(child)) {
+                List<NavData> childNavData = columnsToNavs(child);
+                navData.setChildren(childNavData);
+            }
+            list.add(navData);
+        }
+//        List<Map<String, Object>> list = new ArrayList<>();
+//        Map<String, Object> aa = new HashMap<>();
+//        aa.put("title", "导航1");
+//        list.add(aa);
+//
+//        Map<String, Object> bb = new HashMap<>();
+//        bb.put("title", "导航2");
+//
+//        List<Map<String, Object>> sub = new ArrayList<>();
+//        Map<String, Object> subBB = new HashMap<>();
+//        subBB.put("title", "子导航1");
+//        subBB.put("src", "http://1234");
+//        sub.add(subBB);
+//        Map<String, Object> subAA = new HashMap<>();
+//        subAA.put("title", "子导航2");
+//        subAA.put("src", "http://123455555");
+//        sub.add(subAA);
+//
+//        bb.put("children", sub);
+//        list.add(bb);
         node.setData(list);
     }
+
+    public List<NavData> columnsToNavs(List<ColumnEntity> columns) {
+        List<NavData> list = new ArrayList<>();
+        for (ColumnEntity column : columns) {
+            list.add(columnToNav(column));
+        }
+
+        return list;
+    }
+
+    public NavData columnToNav(ColumnEntity column) {
+        NavData navData = ColumnConversion.INSTANCE.columnToNav(column);
+
+        navData.setUrl(BASE_URL + navData.getCode());
+        if (column.getType() == 2) {
+            if (column.getTargetType() == 1) {
+                ArticleEntity article = this.articleMapper.selectArticleById(Long.parseLong(column.getTargetUrl()));
+                navData.setUrl(BASE_URL + article.getColumnCode() + "/" + article.getId() + ".html");
+            } else if (column.getTargetType() == 2) {
+                navData.setUrl(BASE_URL + column.getTargetUrl());
+            } else {
+                navData.setUrl(column.getTargetUrl());
+            }
+        }
+        return navData;
+    }
 }
diff --git a/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java b/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
index ce47824..ebf2177 100644
--- a/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
+++ b/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
@@ -258,4 +258,8 @@
     public void systemData(Map<String, Object> systemData) {
         this.systemData = systemData;
     }
+
+    public Object getSystemDataValue(String key) {
+        return this.systemData.get(key);
+    }
 }
diff --git a/src/main/java/com/xcong/farmer/cms/core/template/Template.java b/src/main/java/com/xcong/farmer/cms/core/node/Template.java
similarity index 94%
rename from src/main/java/com/xcong/farmer/cms/core/template/Template.java
rename to src/main/java/com/xcong/farmer/cms/core/node/Template.java
index 2b389e0..d160592 100644
--- a/src/main/java/com/xcong/farmer/cms/core/template/Template.java
+++ b/src/main/java/com/xcong/farmer/cms/core/node/Template.java
@@ -1,4 +1,4 @@
-package com.xcong.farmer.cms.core.template;
+package com.xcong.farmer.cms.core.node;
 
 import cn.hutool.core.collection.CollUtil;
 import com.xcong.farmer.cms.core.node.PartNode;
@@ -23,9 +23,10 @@
 
     private Map<String, Map<String, Object>> params = new HashMap<>();
     private Map<String, Object> system;
-
     private List<PartNode> partNodes = new ArrayList<>();
 
+    private static boolean hasPaging = false;
+
     public void parser() {
         Elements children = document.body().children();
         if (CollUtil.isNotEmpty(children)) {
diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/data/NavData.java b/src/main/java/com/xcong/farmer/cms/core/tag/data/NavData.java
new file mode 100644
index 0000000..ca0b5fb
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/core/tag/data/NavData.java
@@ -0,0 +1,60 @@
+package com.xcong.farmer.cms.core.tag.data;
+
+import java.util.List;
+
+/**
+ * @author wzy
+ * @date 2022-07-04
+ **/
+public class NavData {
+
+    private String title;
+
+    private String code;
+
+    private String url;
+
+    private String image;
+
+    private List<NavData> children;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getImage() {
+        return image;
+    }
+
+    public void setImage(String image) {
+        this.image = image;
+    }
+
+    public List<NavData> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<NavData> children) {
+        this.children = children;
+    }
+}
diff --git a/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java b/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java
index b951adb..f6b078a 100644
--- a/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java
+++ b/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java
@@ -1,14 +1,12 @@
 package com.xcong.farmer.cms.core.template;
 
-import cn.hutool.core.collection.CollUtil;
 import com.xcong.farmer.cms.core.node.PartNode;
-import com.xcong.farmer.cms.core.tag.TagsEnum;
+import com.xcong.farmer.cms.core.node.Template;
 import org.jsoup.nodes.Document;
 
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
diff --git a/src/main/java/com/xcong/farmer/cms/core/template/TemplateLoader.java b/src/main/java/com/xcong/farmer/cms/core/template/TemplateLoader.java
index 6eb9068..261d7a3 100644
--- a/src/main/java/com/xcong/farmer/cms/core/template/TemplateLoader.java
+++ b/src/main/java/com/xcong/farmer/cms/core/template/TemplateLoader.java
@@ -1,5 +1,6 @@
 package com.xcong.farmer.cms.core.template;
 
+import com.xcong.farmer.cms.core.node.Template;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 
diff --git a/src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java
index 5a2579b..fe34c50 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java
@@ -25,7 +25,7 @@
     public void articleProcess(Long id, String templateName) {
         Map<String, Object> data = new HashMap<>();
         data.put("id", id);
-
+        data.put("companyId", 0L);
         if (StrUtil.isEmpty(templateName)) {
             templateName = "artile.defualt.html";
         }
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/ArticleEntity.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/ArticleEntity.java
index ab5e558..349877d 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/system/entity/ArticleEntity.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/entity/ArticleEntity.java
@@ -1,5 +1,6 @@
 package com.xcong.farmer.cms.modules.system.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.xcong.farmer.cms.common.system.base.BaseEntity;
@@ -80,4 +81,10 @@
 
     private String articleUrl;
 
+    @TableField(exist = false)
+    private String columnCode;
+
+    @TableField(exist = false)
+    private String columnName;
+
 }
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ArticleMapper.java b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ArticleMapper.java
index d8709fa..3ced7bd 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ArticleMapper.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ArticleMapper.java
@@ -16,4 +16,6 @@
     AdminSeeArticleInfoVo selectAdminArticleByid(@Param("id")Long id);
 
     ArticleEntity selectPrevOrNextArticle(@Param("id") Long id, @Param("columnId") Long columnId, @Param("type") Integer type);
+
+    ArticleEntity selectArticleById(@Param("id") Long id);
 }
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ColumnMapper.java b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ColumnMapper.java
index 8816587..ce9b2a6 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ColumnMapper.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ColumnMapper.java
@@ -11,9 +11,11 @@
 
 public interface ColumnMapper extends BaseMapper<ColumnEntity> {
 
-    IPage<AdminColumnVo> selectAdminColumnVoInPage(Page<AdminColumnVo> page, @Param("record")ColumnEntity columnEntity);
+    IPage<AdminColumnVo> selectAdminColumnVoInPage(Page<AdminColumnVo> page, @Param("record") ColumnEntity columnEntity);
 
-    List<AdminColumnVo> selectColumnInListByParentId(@Param("parentId")Long parentidDefault,@Param("belongId")Long belongId);
+    List<AdminColumnVo> selectColumnInListByParentId(@Param("parentId") Long parentidDefault, @Param("companyId") Long companyId);
 
     ColumnEntity selectByCodeAndCompanyId(@Param("code") String code, @Param("companyId") Long companyId);
+
+    List<ColumnEntity> selectColumnByParentId(@Param("parentId") Long parentId, @Param("companyId") Long companyId);
 }
diff --git a/src/main/resources/mapper/ArticleMapper.xml b/src/main/resources/mapper/ArticleMapper.xml
index 3d8f282..acc3a78 100644
--- a/src/main/resources/mapper/ArticleMapper.xml
+++ b/src/main/resources/mapper/ArticleMapper.xml
@@ -47,4 +47,10 @@
         </if>
         limit 1
     </select>
+
+    <select id="selectArticleById" resultType="com.xcong.farmer.cms.modules.system.entity.ArticleEntity">
+        select a.*, b.column_code, b.column_name
+        from t_article a, t_column b
+        where a.column_id=b.id and a.id=#{id}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/ColumnMapper.xml b/src/main/resources/mapper/ColumnMapper.xml
index ee49cf2..f5020c5 100644
--- a/src/main/resources/mapper/ColumnMapper.xml
+++ b/src/main/resources/mapper/ColumnMapper.xml
@@ -25,7 +25,7 @@
         a.*
         FROM
         t_column a
-        where a.parent_id = #{parentId} and a.company_id = #{belongId}
+        where a.parent_id = #{parentId} and a.company_id = #{companyId}
         order by a.order_num ASC,a.create_time desc
     </select>
 
@@ -33,4 +33,9 @@
         select * from t_column
         where column_code=#{code} and company_id=#{companyId}
     </select>
+
+    <select id="selectColumnByParentId" resultType="com.xcong.farmer.cms.modules.system.entity.ColumnEntity">
+        select * from t_column
+        where parent_id=#{parentId} and company_id=#{companyId}
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1