Browse Source

获取树形分类接口

gaodm 5 years ago
parent
commit
81353efaff

+ 18 - 0
ltkg-service/src/main/java/com/diagbot/dto/Tree.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/3/18 9:55
+ */
+@Getter
+@Setter
+public class Tree {
+    private String name;
+    private List<Tree> sNode;
+}

+ 2 - 3
ltkg-service/src/main/java/com/diagbot/dto/TreeDTO.java

@@ -12,7 +12,6 @@ import java.util.List;
  */
 @Getter
 @Setter
-public class TreeDTO extends BaseNodeDTO {
-    private String icdCode;
-    private List<TreeDTO> sNode;
+public class TreeDTO {
+    private List<TreeNodeDTO> nodes;
 }

+ 25 - 0
ltkg-service/src/main/java/com/diagbot/dto/TreeNodeDTO.java

@@ -0,0 +1,25 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/3/18 9:18
+ */
+@Getter
+@Setter
+public class TreeNodeDTO {
+    private String icon;
+    private Integer id;
+    private String name;
+    private Integer pId;
+
+    public TreeNodeDTO(String icon, Integer id, String name, Integer pId) {
+        this.icon = icon;
+        this.id = id;
+        this.name = name;
+        this.pId = pId;
+    }
+}

+ 83 - 4
ltkg-service/src/main/java/com/diagbot/facade/KgFacade.java

@@ -11,12 +11,17 @@ import com.diagbot.dto.GraphLabelDTO;
 import com.diagbot.dto.Link;
 import com.diagbot.dto.LinkDTO;
 import com.diagbot.dto.Node;
+import com.diagbot.dto.Tree;
+import com.diagbot.dto.TreeDTO;
+import com.diagbot.dto.TreeNodeDTO;
 import com.diagbot.dto.Tu;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.KgServiceImpl;
 import com.diagbot.util.EntityUtil;
+import com.diagbot.util.FastJsonUtils;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
 import com.diagbot.vo.KgQueryVO;
 import com.diagbot.vo.KgTreeVO;
 import org.springframework.stereotype.Component;
@@ -97,18 +102,92 @@ public class KgFacade extends KgServiceImpl {
         return random;
     }
 
-    public String getTreeFac(KgTreeVO kgTreeVO) {
-        String tree = "";
+    public TreeDTO getTreeFac(KgTreeVO kgTreeVO) {
+        TreeDTO treeDTO = new TreeDTO();
         if (kgTreeVO.getType() == 1
                 && kgTreeVO.getSubType() == 1) {
             KgQueryVO kgQueryVO = new KgQueryVO();
             kgQueryVO.setLabelName("国icd10");
             kgQueryVO.setInputStr("国icd10");
-            tree = this.getTree(kgQueryVO);
+            String tree = this.getTree(kgQueryVO);
+            if (StringUtil.isBlank(tree)) {
+                throw new CommonException(CommonErrorCode.NOT_EXISTS);
+            } else {
+                treeDTO = getTreeDTO(tree);
+            }
         } else {
             throw new CommonException(CommonErrorCode.PARAM_IS_ERROR);
         }
-        return tree;
+        return treeDTO;
+    }
+
+    private TreeDTO getTreeDTO(String tree) {
+        TreeDTO treeDTO = new TreeDTO();
+        List<TreeNodeDTO> nodes = new ArrayList<>();
+        Tree treeObj = FastJsonUtils.getJsonToBean("{\n" +
+                "\t\"name\": \"疾病\",\n" +
+                "\t\"sNode\": [\n" +
+                "\t\t{\n" +
+                "\t\t\t\"name\": \"A00-B99-某些传染病和寄生虫病\",\n" +
+                "\t\t\t\"sNode\": [\n" +
+                "\t\t\t\t{\n" +
+                "\t\t\t\t\t\"name\": \"A00\",\n" +
+                "\t\t\t\t\t\"sNode\": [\n" +
+                "\t\t\t\t\t\t{\n" +
+                "\t\t\t\t\t\t\t\"name\": \"A00.000 霍乱,由于O1群霍乱弧菌,霍乱生物型所致\",\n" +
+                "\t\t\t\t\t\t\t\"sNode\": [\n" +
+                "\t\t\t\t\t\t\t]\n" +
+                "\t\t\t\t\t\t},\n" +
+                "\t\t\t\t\t\t{\n" +
+                "\t\t\t\t\t\t\t\"name\": \"A00.000x001 古典生物型霍乱\",\n" +
+                "\t\t\t\t\t\t\t\"sNode\": [\n" +
+                "\t\t\t\t\t\t\t]\n" +
+                "\t\t\t\t\t\t}\n" +
+                "\t\t\t\t\t]\n" +
+                "\t\t\t\t}\n" +
+                "\t\t\t]\n" +
+                "\t\t},\n" +
+                "\t\t{\n" +
+                "\t\t\t\"name\": \"A22-B22-某些传染病和寄生虫病\",\n" +
+                "\t\t\t\"sNode\": [\n" +
+                "\t\t\t\t{\n" +
+                "\t\t\t\t\t\"name\": \"A22\",\n" +
+                "\t\t\t\t\t\"sNode\": [\n" +
+                "\t\t\t\t\t\t{\n" +
+                "\t\t\t\t\t\t\t\"name\": \"胆囊炎\",\n" +
+                "\t\t\t\t\t\t\t\"sNode\": [\n" +
+                "\t\t\t\t\t\t\t]\n" +
+                "\t\t\t\t\t\t}\n" +
+                "\t\t\t\t\t]\n" +
+                "\t\t\t\t}\n" +
+                "\t\t\t]\n" +
+                "\t\t}\n" +
+                "\t]\n" +
+                "}", Tree.class);
+        if (null != treeObj) {
+            Map<String, Integer> treeMap = new HashMap<>();
+            treeMap.put("根节点", 0);
+            addTree(nodes, treeObj, treeMap, "根节点");
+        }
+
+        treeDTO.setNodes(nodes);
+        return treeDTO;
+    }
+
+    private void addTree(List<TreeNodeDTO> nodes, Tree treeObj, Map<String, Integer> treeMap, String pName) {
+        if (null == treeMap.get(treeObj.getName())) {
+            treeMap.put(treeObj.getName(), treeMap.size());
+        }
+
+        TreeNodeDTO node = new TreeNodeDTO("M", treeMap.get(treeObj.getName()), treeObj.getName(), treeMap.get(pName));
+        nodes.add(node);
+        if (ListUtil.isNotEmpty(treeObj.getSNode())) {
+            for (Tree tree : treeObj.getSNode()) {
+                addTree(nodes, tree, treeMap, treeObj.getName());
+            }
+        } else {
+            node.setIcon("E");
+        }
     }
 
     public GraDTO getTuFac(KgQueryVO kgQueryVO) {

+ 1 - 1
ltkg-service/src/main/java/com/diagbot/web/KgController.java

@@ -60,7 +60,7 @@ public class KgController {
     @PostMapping("/getTree")
     @SysLogger("getTree")
     @Cacheable(value = KGTREECACHE, key = "'kgtree:t_' + #kgTreeVO.type + '_st_' + #kgTreeVO.subType")
-    public RespDTO<String> getTree(@RequestBody @Valid KgTreeVO kgTreeVO) {
+    public RespDTO<TreeDTO> getTree(@RequestBody @Valid KgTreeVO kgTreeVO) {
         log.info("获取树形分类缓存成功");
         return RespDTO.onSuc(kgFacade.getTreeFac(kgTreeVO));
     }