瀏覽代碼

更新知识图谱管理服务

MarkHuang 6 年之前
父節點
當前提交
a398b46978
共有 35 個文件被更改,包括 935 次插入337 次删除
  1. 455 0
      knowledgeman-service/src/main/java/com/diagbot/api/ImportExcel.java
  2. 6 1
      knowledgeman-service/src/main/java/com/diagbot/dto/LibraryInfoDTO.java
  3. 7 2
      knowledgeman-service/src/main/java/com/diagbot/dto/MedicalDTO.java
  4. 19 6
      knowledgeman-service/src/main/java/com/diagbot/entity/LibraryInfo.java
  5. 38 39
      knowledgeman-service/src/main/java/com/diagbot/entity/Medical.java
  6. 69 215
      knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  7. 51 9
      knowledgeman-service/src/main/java/com/diagbot/facade/LibraryDetailFacade.java
  8. 27 19
      knowledgeman-service/src/main/java/com/diagbot/facade/LibraryInfoFacade.java
  9. 36 26
      knowledgeman-service/src/main/java/com/diagbot/facade/MedicalFacade.java
  10. 28 6
      knowledgeman-service/src/main/java/com/diagbot/facade/RelationFacade.java
  11. 9 2
      knowledgeman-service/src/main/java/com/diagbot/facade/RelationshipFacade.java
  12. 10 0
      knowledgeman-service/src/main/java/com/diagbot/mapper/ConceptMapper.java
  13. 14 0
      knowledgeman-service/src/main/java/com/diagbot/mapper/LibraryDetailMapper.java
  14. 10 0
      knowledgeman-service/src/main/java/com/diagbot/mapper/LibraryInfoMapper.java
  15. 17 0
      knowledgeman-service/src/main/java/com/diagbot/mapper/MedicalMapper.java
  16. 13 0
      knowledgeman-service/src/main/java/com/diagbot/mapper/RelationMapper.java
  17. 4 0
      knowledgeman-service/src/main/java/com/diagbot/service/ConceptService.java
  18. 4 0
      knowledgeman-service/src/main/java/com/diagbot/service/LibraryDetailService.java
  19. 4 0
      knowledgeman-service/src/main/java/com/diagbot/service/LibraryInfoService.java
  20. 4 0
      knowledgeman-service/src/main/java/com/diagbot/service/MedicalService.java
  21. 4 0
      knowledgeman-service/src/main/java/com/diagbot/service/RelationService.java
  22. 7 0
      knowledgeman-service/src/main/java/com/diagbot/service/impl/ConceptServiceImpl.java
  23. 8 0
      knowledgeman-service/src/main/java/com/diagbot/service/impl/LibraryDetailServiceImpl.java
  24. 5 0
      knowledgeman-service/src/main/java/com/diagbot/service/impl/LibraryInfoServiceImpl.java
  25. 8 0
      knowledgeman-service/src/main/java/com/diagbot/service/impl/MedicalServiceImpl.java
  26. 7 0
      knowledgeman-service/src/main/java/com/diagbot/service/impl/RelationServiceImpl.java
  27. 3 0
      knowledgeman-service/src/main/java/com/diagbot/vo/AmendTermVo.java
  28. 2 2
      knowledgeman-service/src/main/java/com/diagbot/vo/MedicalVo.java
  29. 4 1
      knowledgeman-service/src/main/java/com/diagbot/vo/TermVo.java
  30. 3 4
      knowledgeman-service/src/main/java/com/diagbot/web/ConceptController.java
  31. 8 1
      knowledgeman-service/src/main/resources/mapper/ConceptMapper.xml
  32. 14 0
      knowledgeman-service/src/main/resources/mapper/LibraryDetailMapper.xml
  33. 11 1
      knowledgeman-service/src/main/resources/mapper/LibraryInfoMapper.xml
  34. 16 3
      knowledgeman-service/src/main/resources/mapper/MedicalMapper.xml
  35. 10 0
      knowledgeman-service/src/main/resources/mapper/RelationMapper.xml

+ 455 - 0
knowledgeman-service/src/main/java/com/diagbot/api/ImportExcel.java

@@ -0,0 +1,455 @@
+package com.diagbot.api;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.ConceptDTO;
+import com.diagbot.dto.RelationDTO;
+import com.diagbot.entity.LibraryDetail;
+import com.diagbot.entity.LibraryInfo;
+import com.diagbot.entity.Medical;
+import com.diagbot.entity.Relation;
+import com.diagbot.facade.*;
+import com.diagbot.vo.AmendTermVo;
+import com.diagbot.vo.TermVo;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ImportExcel {
+
+    private static ConceptFacade conceptFacade;
+
+    private static LibraryInfoFacade libraryinfoFacade;
+
+    private static LibraryDetailFacade libraryDetailFacade;
+
+    private static MedicalFacade medicalFacade;
+
+    private static RelationFacade relationFacade;
+
+    private static String[] catelist = {"症状","查体","化验","辅检","诊断","药品","其他史","治疗方案"};
+
+    public static void setConceptFacade(ConceptFacade conceptFacade) {
+        ImportExcel.conceptFacade = conceptFacade;
+    }
+
+    public static void setLibraryinfoFacade(LibraryInfoFacade libraryinfoFacade) {
+        ImportExcel.libraryinfoFacade = libraryinfoFacade;
+    }
+
+    public static void setLibraryDetailFacade(LibraryDetailFacade libraryDetailFacade) {
+        ImportExcel.libraryDetailFacade = libraryDetailFacade;
+    }
+
+    public static void setMedicalFacade(MedicalFacade medicalFacade) {
+        ImportExcel.medicalFacade = medicalFacade;
+    }
+
+    public static void setRelationFacade(RelationFacade relationFacade) {
+        ImportExcel.relationFacade = relationFacade;
+    }
+
+
+    /**
+     * 从文件批量导入术语信息
+     *
+     * @param file
+     * @return ConceptDTO
+     */
+    public static ConceptDTO importBatch(MultipartFile file) {
+        ConceptDTO conceptDTO = new ConceptDTO();
+        List<String> messages = new ArrayList<>();
+
+        InputStream inputStream = null;
+        Workbook wb = null;
+
+        AmendTermVo amendTermVo;
+        TermVo termVo;
+        Medical medical;
+        List<Medical> medlist;
+        RelationDTO relationDTO;
+        List<RelationDTO> rellist;
+
+        try {
+            if (!file.isEmpty()) {
+                inputStream = file.getInputStream();
+
+                if (inputStream.available() > 5120000) {
+                    messages.add("术语文件最大只支持5MB!");
+                } else {
+                    String fileName = file.getOriginalFilename();
+                    if (fileName.lastIndexOf(".") != -1) {
+                        String type = fileName.substring(fileName.lastIndexOf("."));
+                        if (type.equals(".xls")) {
+                            wb = new HSSFWorkbook(inputStream);
+                        } else if (type.equals(".xlsx")) {
+                            wb = new XSSFWorkbook(inputStream);
+                        }
+                        if (wb != null) {
+
+                            CleanupDB(fileName);
+
+                            Sheet sheet = wb.getSheetAt(0);
+                            int count = 0;
+                            String group, category, std_name, name, prop, prop1, minagestr, maxagestr;
+                            int diag_id = 0;
+                            int treat_id = 0;
+                            String diag = "";
+                            String treat = "";
+                            String diag_type = "";
+                            String treat_type = "";
+                            String gender = "";
+                            String dept = "";
+                            String note = "";
+                            int minage = 0;
+                            int maxage = 0;
+                            String grp_type = "";
+                            String cate_type = "";
+                            String std_type = "";
+
+                            if (fileName.indexOf(catelist[7]) == -1) {
+                                for (Row row : sheet) {
+                                    count++;
+
+                                    if (row != null) {
+                                        if (count == 1) {
+                                            grp_type = row.getCell(0).toString();
+                                            if (medicalFacade.getTypeInfo(grp_type) == null) {
+                                                System.out.println("术语类型-'" + grp_type + "'不存在!");
+                                                break;
+                                            }
+                                            cate_type = row.getCell(1).toString();
+                                            if (medicalFacade.getTypeInfo(cate_type) == null) {
+                                                System.out.println("术语类型-'" + cate_type + "'不存在!");
+                                                break;
+                                            }
+                                            std_type = row.getCell(2).toString().replace("标准名称", "");
+                                            if (medicalFacade.getTypeInfo(std_type) == null) {
+                                                System.out.println("术语类型-'" + std_type + "'不存在!");
+                                                break;
+                                            }
+                                        }
+
+                                        if (count > 1) {
+
+                                            group = (row.getCell(0) == null) ? "" : row.getCell(0).toString().trim();
+                                            category = (row.getCell(1) == null) ? "" : row.getCell(1).toString().trim();
+                                            std_name = (row.getCell(2) == null) ? "" : row.getCell(2).toString().trim();
+                                            name = (row.getCell(3) == null) ? "" : row.getCell(3).toString().trim();
+                                            prop = (row.getCell(4) == null) ? "" : row.getCell(4).toString().trim();
+                                            prop1 = (row.getCell(5) == null) ? "" : row.getCell(5).toString().trim();
+
+                                            System.out.println(group + "\t" + category + "\t" + std_name + "\t" +
+                                                    name + "\t" + prop + "\t" + prop1);
+
+                                            if (std_type.equals("症状")) {
+                                                gender = (row.getCell(8) == null) ? "" : row.getCell(8).toString();
+                                                gender = (gender.indexOf(".") == -1) ? gender : gender.substring(0, gender.indexOf("."));
+                                                minagestr = (row.getCell(9) == null) ? "0" : row.getCell(9).toString();
+                                                minage = Integer.valueOf((minagestr.indexOf(".") == -1) ?
+                                                        minagestr : minagestr.substring(0, minagestr.indexOf(".")));
+                                                maxagestr = (row.getCell(10) == null) ? "0" : row.getCell(10).toString();
+                                                maxage = Integer.valueOf((maxagestr.indexOf(".") == -1) ?
+                                                        maxagestr : maxagestr.substring(0, maxagestr.indexOf(".")));
+
+//                                            System.out.println(gender + "\t" + minage + "\t" + maxage);
+                                            } else if (std_type.equals("诊断")) {
+                                                dept = (row.getCell(7) == null) ? "" : row.getCell(7).toString();
+                                            } else if (std_type.equals("药品")) {
+                                                note = (row.getCell(7) == null) ? "" : row.getCell(7).toString();
+                                            }
+
+
+                                            // 设置实体
+                                            if (std_name.trim().length() > 0 && name.trim().length() > 0) {
+                                                amendTermVo = new AmendTermVo();
+                                                amendTermVo.setConcept(std_name);
+                                                amendTermVo.setNewterm(name);
+                                                amendTermVo.setOldterm("");
+                                                amendTermVo.setType(std_type);
+
+                                                medical = new Medical();
+                                                medical.setName(name);
+                                                medical.setStdName(std_name);
+                                                medical.setCateName(category);
+                                                if (std_type.equals("症状")) {
+                                                    medical.setBodypart(prop);
+                                                    medical.setSubBodypart(prop1);
+                                                    medical.setGender(gender);
+                                                    medical.setMinAge(minage);
+                                                    medical.setMaxAge(maxage);
+                                                    medical.setGrp(group);
+                                                } else if (std_type.equals("诊断")) {
+                                                    medical.setDept(dept);
+                                                } else if (std_type.equals("药品")) {
+                                                    medical.setNote(note);
+                                                    String grpname = (group.length() > 0) ? group : "";
+                                                    String catename = (category.length() > 0) ? ("(" + category + ")") : "";
+                                                    medical.setFunction(grpname + catename);
+                                                }
+                                                medlist = new ArrayList<>();
+                                                medlist.add(medical);
+                                                amendTermVo.setMedicalInfo(medlist);
+
+                                                conceptFacade.upsertConceptInfo(amendTermVo);
+                                                System.out.println(name + ":\t 已入库.");
+                                            }
+
+                                            if (category.length() > 0) {
+                                                // 设置套餐
+                                                amendTermVo = new AmendTermVo();
+                                                amendTermVo.setConcept(category);
+                                                amendTermVo.setNewterm(category);
+                                                amendTermVo.setOldterm("");
+                                                amendTermVo.setType(cate_type);
+
+                                                medical = new Medical();
+                                                medical.setName(category);
+                                                medical.setStdName(category);
+                                                medical.setCateName(group);
+                                                medical.setCode("");
+                                                medical.setNote("");
+                                                medlist = new ArrayList<>();
+                                                medlist.add(medical);
+                                                amendTermVo.setMedicalInfo(medlist);
+
+                                                conceptFacade.upsertConceptInfo(amendTermVo);
+
+                                                if (!std_name.equals(category)) {
+                                                    relationDTO = new RelationDTO();
+                                                    relationDTO.setStartId(conceptFacade.getConceptId(std_name, std_type));
+                                                    relationDTO.setStartName(std_name);
+                                                    relationDTO.setRelationId(1);
+                                                    relationDTO.setEndId(conceptFacade.getConceptId(category, cate_type));
+                                                    relationDTO.setEndName(category);
+                                                    rellist = new ArrayList<>();
+                                                    rellist.add(relationDTO);
+                                                    amendTermVo.setRelations(rellist);
+
+                                                    relationFacade.upsertRelationInfo(amendTermVo);
+                                                }
+
+                                                System.out.println(category + ":\t 已入库.");
+                                            }
+
+                                            if (group.length() > 0) {
+                                                // 设置大类
+                                                amendTermVo = new AmendTermVo();
+                                                amendTermVo.setConcept(group);
+                                                amendTermVo.setNewterm(group);
+                                                amendTermVo.setOldterm("");
+                                                amendTermVo.setType(grp_type);
+
+                                                medical = new Medical();
+                                                medical.setName(group);
+                                                medical.setStdName(group);
+                                                medical.setCateName("");
+                                                medical.setCode("");
+                                                medical.setNote("");
+                                                medlist = new ArrayList<>();
+                                                medlist.add(medical);
+                                                amendTermVo.setMedicalInfo(medlist);
+
+                                                conceptFacade.upsertConceptInfo(amendTermVo);
+
+                                                if (!category.equals(group)) {
+                                                    relationDTO = new RelationDTO();
+                                                    relationDTO.setStartId(conceptFacade.getConceptId(category, cate_type));
+                                                    relationDTO.setStartName(category);
+                                                    relationDTO.setRelationId(1);
+                                                    relationDTO.setEndId(conceptFacade.getConceptId(group, grp_type));
+                                                    relationDTO.setEndName(group);
+                                                    rellist = new ArrayList<>();
+                                                    rellist.add(relationDTO);
+                                                    amendTermVo.setRelations(rellist);
+
+                                                    relationFacade.upsertRelationInfo(amendTermVo);
+                                                }
+
+                                                System.out.println(group + ":\t 已入库.");
+                                            }
+
+//                                        if (count >= 20) break;
+                                        }
+                                    }
+                                    System.out.println(count + " 条记录添加入库.");
+                                }
+                            }
+                            else {
+                                for (Row row : sheet) {
+                                    count++;
+
+                                    if (row != null) {
+                                        if (count == 1) {
+                                            diag = row.getCell(0).toString().trim();
+                                            treat = row.getCell(3).toString().trim();
+                                            diag_type = "诊断";
+                                            treat_type = "药品";
+                                        }
+                                        else {
+                                            diag = row.getCell(0).toString().trim();
+                                            treat = row.getCell(3).toString().trim();
+
+                                            if (diag.length() > 0) {
+                                                diag_id = conceptFacade.getConceptId(diag, diag_type);
+                                                treat_id = conceptFacade.getConceptId(treat, treat_type);
+
+                                                if (diag_id > 0 && treat_id > 0) {
+                                                    amendTermVo = new AmendTermVo();
+
+                                                    relationDTO = new RelationDTO();
+                                                    relationDTO.setStartId(diag_id);
+                                                    relationDTO.setStartName(diag);
+                                                    relationDTO.setRelationId(11);
+                                                    relationDTO.setEndId(treat_id);
+                                                    relationDTO.setEndName(treat);
+                                                    rellist = new ArrayList<>();
+                                                    rellist.add(relationDTO);
+                                                    amendTermVo.setRelations(rellist);
+
+                                                    relationFacade.upsertRelationInfo(amendTermVo);
+
+                                                    System.out.println(diag + "\t治疗\t" + treat + ":\t 已入库.");
+//                                                    break;
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+
+                        } else {
+                            messages.add("非excel文件无法解析!");
+                        }
+                    } else {
+                        messages.add("未知文件无法解析!");
+                    }
+                }
+            } else {
+                messages.add("无文件上传!");
+            }
+        }
+        catch (IOException ioe) {
+            ioe.printStackTrace();
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        finally {
+            conceptDTO.setMessage(messages);
+            try {
+
+                if (inputStream != null) {
+                    inputStream.close();
+                }
+                if (wb != null) {
+                    wb.close();
+                }
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        return conceptDTO;
+    }
+
+    /**
+     * 批量导入数据前,删除相关表
+     *
+     * @param filename
+     *
+     */
+    public static void CleanupDB(String filename) {
+        String cate = "";
+        List<Integer> Ids;
+
+        try {
+            for (String item:catelist) {
+                if (filename.indexOf(item) >= 0) {
+                    cate = item;
+                    break;
+                }
+            }
+
+            if (cate.length() > 0 && !cate.equals(catelist[7])) {
+                System.out.println(cate);
+
+                // 从 LibraryInfo 中找出所有需要删除的Id
+                QueryWrapper<LibraryInfo> wrapper = new QueryWrapper<>();
+                wrapper.likeRight("type", cate);
+                List<LibraryInfo> libinfolist = libraryinfoFacade.list(wrapper);
+
+                // 删除术语信息
+                Ids = new ArrayList<>();
+                for (int i=0; i<libinfolist.size(); i++) {
+                    Ids.add(libinfolist.get(i).getId().intValue());
+//                    break;
+                }
+
+                if (Ids.size() > 0) {
+                    libraryinfoFacade.removeByIds(Ids);
+                }
+
+                // 删除术语详细信息
+                List<LibraryDetail> limbodetails = libraryDetailFacade.getLimboItems();
+                Ids = new ArrayList<>();
+                for (int i=0; i<limbodetails.size(); i++) {
+                    Ids.add(limbodetails.get(i).getId().intValue());
+//                    break;
+                }
+
+                if (Ids.size() > 0) {
+                    libraryDetailFacade.removeByIds(Ids);
+                }
+//            libraryDetailFacade.deleteDetail();
+
+                // 删除医学记录
+                List<Medical> limbomed = medicalFacade.getLimboItems();
+                Ids = new ArrayList<>();
+                for (int i=0; i<limbomed.size(); i++) {
+                    Ids.add(limbomed.get(i).getId().intValue());
+//                    break;
+                }
+
+                if (Ids.size() > 0) {
+                    medicalFacade.removeByIds(Ids);
+                }
+
+                // 删除概念
+                // 找出所有需要删除的概念
+                List<ConceptDTO> limboIds = conceptFacade.getLimboItems();
+                Ids = new ArrayList<>();
+                for (int i=0; i<limboIds.size(); i++) {
+                    Ids.add(limboIds.get(i).getId());
+                }
+
+                if (Ids.size() > 0) {
+                    conceptFacade.removeByIds(Ids);
+                }
+
+                // 删除关系
+                List<Relation> limboRelation = relationFacade.getLimboRelation();
+                Ids = new ArrayList<>();
+                for (int i=0; i<limboRelation.size(); i++) {
+                    Ids.add(limboRelation.get(i).getId());
+                }
+
+                if (Ids.size() > 0) {
+                    relationFacade.removeByIds(Ids);
+                }
+            }
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+}

+ 6 - 1
knowledgeman-service/src/main/java/com/diagbot/dto/LibraryInfoDTO.java

@@ -29,7 +29,7 @@ public class LibraryInfoDTO {
     /**
      * 记录创建时间
      */
-    private LocalDateTime gmtCreate;
+    private LocalDateTime gmtCreated;
 
     /**
      * 记录修改时间,如果时间是1970年则表示纪录未修改
@@ -51,6 +51,11 @@ public class LibraryInfoDTO {
      */
     private String name;
 
+    /**
+     * 类型
+     */
+    private String type;
+
     /**
      * 备注
      */

+ 7 - 2
knowledgeman-service/src/main/java/com/diagbot/dto/MedicalDTO.java

@@ -16,6 +16,11 @@ public class MedicalDTO {
      */
     private Integer id;
 
+    /**
+     * 名称
+     */
+    private String name;
+
     /**
      * 术语概念id
      */
@@ -24,12 +29,12 @@ public class MedicalDTO {
     /**
      * 术语类型编号,对应类型库
      */
-    private Integer typeId;
+//    private Integer typeId;
 
     /**
      * 术语类型
      */
-    private String type;
+//    private String type;
 
     /**
      * 术语标准名

+ 19 - 6
knowledgeman-service/src/main/java/com/diagbot/entity/LibraryInfo.java

@@ -32,7 +32,7 @@ public class LibraryInfo implements Serializable {
     /**
      * 记录创建时间
      */
-    private LocalDateTime gmtCreate;
+    private LocalDateTime gmtCreated;
 
     /**
      * 记录修改时间,如果时间是1970年则表示纪录未修改
@@ -54,6 +54,11 @@ public class LibraryInfo implements Serializable {
      */
     private String name;
 
+    /**
+     * 类型
+     */
+    private String type;
+
     /**
      * 备注
      */
@@ -83,12 +88,12 @@ public class LibraryInfo implements Serializable {
     public void setIsDeleted(String isDeleted) {
         this.isDeleted = isDeleted;
     }
-    public LocalDateTime getGmtCreate() {
-        return gmtCreate;
+    public LocalDateTime getGmtCreated() {
+        return gmtCreated;
     }
 
-    public void setGmtCreate(LocalDateTime gmtCreate) {
-        this.gmtCreate = gmtCreate;
+    public void setGmtCreated(LocalDateTime gmtCreated) {
+        this.gmtCreated = gmtCreated;
     }
     public LocalDateTime getGmtModified() {
         return gmtModified;
@@ -118,6 +123,13 @@ public class LibraryInfo implements Serializable {
     public void setName(String name) {
         this.name = name;
     }
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
     public String getRemark() {
         return remark;
     }
@@ -145,11 +157,12 @@ public class LibraryInfo implements Serializable {
         return "LibraryInfo{" +
         "id=" + id +
         ", isDeleted=" + isDeleted +
-        ", gmtCreate=" + gmtCreate +
+        ", gmtCreate=" + gmtCreated +
         ", gmtModified=" + gmtModified +
         ", creator=" + creator +
         ", modifier=" + modifier +
         ", name=" + name +
+        ", type=" + type +
         ", remark=" + remark +
         ", conceptId=" + conceptId +
         ", isConcept=" + isConcept +

+ 38 - 39
knowledgeman-service/src/main/java/com/diagbot/entity/Medical.java

@@ -2,7 +2,6 @@ package com.diagbot.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-
 import java.io.Serializable;
 
 /**
@@ -10,8 +9,8 @@ import java.io.Serializable;
  * 
  * </p>
  *
- * @author Weixuan Huang
- * @since 2019-01-31
+ * @author gaodm
+ * @since 2019-03-01
  */
 public class Medical implements Serializable {
 
@@ -21,34 +20,34 @@ public class Medical implements Serializable {
     private Integer id;
 
     /**
-     * 术语名称
+     * 术语概念id
      */
-    private String name;
+    private Integer conceptId;
 
     /**
-     * 术语概念id
+     * 术语名称
      */
-    private Integer concept_id;
+    private String name;
 
     /**
-     * 术语类型编号,对应类型库
+     * 术语标准名
      */
-    private Integer typeId;
+    private String stdName;
 
     /**
-     * 术语类型
+     * 术语小类名称
      */
-    private String type;
+    private String cateName;
 
     /**
-     * 术语标准名
+     * 术语类组
      */
-    private String stdName;
+    private String grp;
 
     /**
-     * 术语小类名称
+     * 作用名称
      */
-    private String cateName;
+    private String function;
 
     /**
      * 性别:1:男, 2:女, 3:通用
@@ -102,6 +101,13 @@ public class Medical implements Serializable {
     public void setId(Integer id) {
         this.id = id;
     }
+    public Integer getConceptId() {
+        return conceptId;
+    }
+
+    public void setConceptId(Integer conceptId) {
+        this.conceptId = conceptId;
+    }
     public String getName() {
         return name;
     }
@@ -109,27 +115,6 @@ public class Medical implements Serializable {
     public void setName(String name) {
         this.name = name;
     }
-    public Integer getConcept_id() {
-        return concept_id;
-    }
-
-    public void setConcept_id(Integer concept_id) {
-        this.concept_id = concept_id;
-    }
-    public Integer getTypeId() {
-        return typeId;
-    }
-
-    public void setTypeId(Integer typeId) {
-        this.typeId = typeId;
-    }
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
     public String getStdName() {
         return stdName;
     }
@@ -144,6 +129,20 @@ public class Medical implements Serializable {
     public void setCateName(String cateName) {
         this.cateName = cateName;
     }
+    public String getGrp() {
+        return grp;
+    }
+
+    public void setGrp(String grp) {
+        this.grp = grp;
+    }
+    public String getFunction() {
+        return function;
+    }
+
+    public void setFunction(String function) {
+        this.function = function;
+    }
     public String getGender() {
         return gender;
     }
@@ -212,12 +211,12 @@ public class Medical implements Serializable {
     public String toString() {
         return "Medical{" +
         "id=" + id +
+        ", conceptId=" + conceptId +
         ", name=" + name +
-        ", concept_id=" + concept_id +
-        ", typeId=" + typeId +
-        ", type=" + type +
         ", stdName=" + stdName +
         ", cateName=" + cateName +
+        ", grp=" + grp +
+        ", function=" + function +
         ", gender=" + gender +
         ", minAge=" + minAge +
         ", maxAge=" + maxAge +

+ 69 - 215
knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -1,31 +1,34 @@
 package com.diagbot.facade;
 
+//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.api.ImportExcel;
 import com.diagbot.dto.ConceptDTO;
-import com.diagbot.entity.Concept;
-import com.diagbot.entity.LibraryInfo;
-import com.diagbot.entity.Medical;
-import com.diagbot.dto.RelationDTO;
-import com.diagbot.exception.CommonErrorCode;
-import com.diagbot.exception.CommonException;
+import com.diagbot.entity.*;
+//import com.diagbot.dto.RelationDTO;
+//import com.diagbot.exception.CommonErrorCode;
+//import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.ConceptServiceImpl;
 import com.diagbot.vo.AmendTermVo;
-import com.diagbot.vo.MedicalVo;
+//import com.diagbot.vo.MedicalVo;
 import com.diagbot.vo.TermVo;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+//import org.apache.poi.ss.usermodel.Row;
+//import org.apache.poi.ss.usermodel.Cell;
+//import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+//import org.apache.poi.ss.usermodel.Sheet;
+//import org.apache.poi.ss.usermodel.Workbook;
+//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
+//import java.io.IOException;
+//import java.io.InputStream;
+import java.time.LocalDateTime;
+//import java.util.ArrayList;
+import java.util.HashMap;
+//import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -54,12 +57,15 @@ public class ConceptFacade extends ConceptServiceImpl {
      */
     public ConceptDTO getConceptInfo(@RequestBody TermVo termvo) {
 
+        LibraryInfo libraryInfo;
         ConceptDTO conceptDTO = getConcept(termvo);
         // 获取与医学术语的基本信息
         if (conceptDTO != null) {
-            termvo.setId(conceptDTO.getLibId());
-            termvo.setConcept_id(conceptDTO.getId());
-            LibraryInfo libraryInfo = libraryinfoFacade.getLibraryInfor(termvo);
+
+            Map<String, Object> params = new HashMap<>();
+            params.put("id", conceptDTO.getLibId());
+            params.put("concept_id", conceptDTO.getId());
+            libraryInfo = libraryinfoFacade.getLibraryInfor(params);
 
             if (libraryInfo.getIsConcept() != null && libraryInfo.getIsConcept() == 1) {
                 conceptDTO.setName(libraryInfo.getName());
@@ -67,11 +73,14 @@ public class ConceptFacade extends ConceptServiceImpl {
             conceptDTO.setLibraryInfo(libraryInfo);
 
             // 获取与术语相关的医学知识
-            conceptDTO.setInformation(libraryDetailFacade.getLibraryDetails(termvo));
+            params = new HashMap<>();
+            params.put("concept_id", conceptDTO.getId());
+            conceptDTO.setInformation(libraryDetailFacade.getLibraryDetails(params));
             // 获取与术语相关的临床医学信息
-            MedicalVo medicalVo = new MedicalVo();
-            medicalVo.setName(termvo.getTerm());
-            conceptDTO.setMedicalInfo(medicalFacade.getMedicalInfo(medicalVo));
+            params = new HashMap<>();
+            params.put("name", termvo.getTerm());
+            params.put("concept_id", conceptDTO.getId());
+            conceptDTO.setMedicalInfo(medicalFacade.getMedicalInfo(params));
             // 获取术语的所有上级信息
             conceptDTO.setRelations(relationFacade.getAllRelation(termvo));
         }
@@ -90,6 +99,7 @@ public class ConceptFacade extends ConceptServiceImpl {
 
         TermVo termVo = new TermVo();
         termVo.setTerm(amendTermVo.getConcept());
+        termVo.setType(amendTermVo.getType());
 
         // 如果概念术语不存在,添加新术语,然后添加新的概念
         conceptDTO = getConcept(termVo);
@@ -98,13 +108,21 @@ public class ConceptFacade extends ConceptServiceImpl {
             amendconcept.setOldterm(amendTermVo.getOldterm());
             amendconcept.setNewterm(amendTermVo.getConcept());
             amendconcept.setConcept("");
+            amendconcept.setType(amendTermVo.getType());
             libraryinfoFacade.upsertLibraryInfo(amendconcept);
 
+            Map<String, Object> params = new HashMap<>();
+            params.put("name", amendTermVo.getConcept());
+            params.put("type", amendTermVo.getType());
+            int libid = libraryinfoFacade.getLibraryInfor(params).getId().intValue();
+
+
             Concept concept = new Concept();
-            int libid = libraryinfoFacade.getLibraryInfor(termVo).getId().intValue();
             concept.setLibId(libid);
+            concept.setGmtCreated(LocalDateTime.now());
             this.saveOrUpdate(concept);
 
+            termVo.setType(amendTermVo.getType());
             conceptDTO = getConcept(termVo);
         }
 
@@ -138,204 +156,21 @@ public class ConceptFacade extends ConceptServiceImpl {
         return conceptDTO;
     }
 
+
+
     /**
-     * 从文件批量导入术语信息
+     * 获取概念Id
      *
-     * @param file
-     * @return ConceptDTO
+     * @param term
+     * @return Integer
      */
-    public ConceptDTO importBatch(MultipartFile file) {
-        ConceptDTO conceptDTO = new ConceptDTO();
-        List<String> messages = new ArrayList<>();
-
-        InputStream inputStream = null;
-        Workbook wb = null;
-
-        AmendTermVo amendTermVo;
-        Medical medical;
-        List<Medical> medlist;
-        RelationDTO relationDTO;
-        List<RelationDTO> rellist;
-
-        try {
-            if (!file.isEmpty()) {
-                inputStream = file.getInputStream();
-
-                if (inputStream.available() > 1024000) {
-                    messages.add("术语文件最大支持1MB!");
-                } else {
-                    String fileName = file.getOriginalFilename();
-                    if (fileName.lastIndexOf(".") != -1) {
-                        String type = fileName.substring(fileName.lastIndexOf("."));
-                        if (type.equals(".xls")) {
-                            wb = new HSSFWorkbook(inputStream);
-                        } else if (type.equals(".xlsx")) {
-                            wb = new XSSFWorkbook(inputStream);
-                        }
-                        if (wb != null) {
-                            Sheet sheet = wb.getSheetAt(0);
-                            int count = 0;
-                            String group, category, std_name, name, code, prop;
-                            String grp_type = "";
-                            String cate_type = "";
-                            String std_type = "";
-                            for (Row row : sheet) {
-                                count++;
-
-                                if (row != null) {
-                                    if (count == 1) {
-                                        grp_type = row.getCell(0).toString();
-                                        if (medicalFacade.getTypeInfo(grp_type) == null) {
-                                            System.out.println("术语类型-'" + grp_type + "'不存在!");
-                                            break;
-                                        }
-                                        cate_type = row.getCell(1).toString();
-                                        if (medicalFacade.getTypeInfo(cate_type) == null) {
-                                            System.out.println("术语类型-'" + cate_type + "'不存在!");
-                                            break;
-                                        }
-                                        std_type = row.getCell(2).toString().replace("标准名称", "");
-                                        if (medicalFacade.getTypeInfo(std_type) == null) {
-                                            System.out.println("术语类型-'" + std_type + "'不存在!");
-                                            break;
-                                        }
-                                    }
-
-                                    if (count > 1) {
-
-                                        group = (row.getCell(0) == null) ? "" : row.getCell(0).toString();
-                                        category = (row.getCell(1) == null) ? "" : row.getCell(1).toString();
-                                        std_name = (row.getCell(2) == null) ? "" : row.getCell(2).toString();
-                                        name = (row.getCell(3) == null) ? "" : row.getCell(3).toString();
-                                        code = category + "\"-\"" + std_name;
-                                        prop = (row.getCell(5) == null) ? "" : row.getCell(5).toString();
-
-
-                                        System.out.println(group + "\t" + category + "\t" + std_name + "\t" +
-                                                name + "\t" + code + "\t" + prop);
-
-                                        // 设置实体
-                                        amendTermVo = new AmendTermVo();
-                                        amendTermVo.setConcept(std_name);
-                                        amendTermVo.setNewterm(name);
-                                        amendTermVo.setOldterm("");
-
-                                        medical = new Medical();
-                                        medical.setName(name);
-                                        medical.setType(std_type);
-                                        medical.setStdName(std_name);
-                                        medical.setCateName(category);
-                                        medical.setCode(code);
-                                        medical.setNote(prop);
-                                        medlist = new ArrayList<>();
-                                        medlist.add(medical);
-                                        amendTermVo.setMedicalInfo(medlist);
-
-                                        this.upsertConceptInfo(amendTermVo);
-                                        System.out.println(name + ":\t 已入库.");
-
-
-                                        if (category.length() > 0) {
-                                            // 设置套餐
-                                            amendTermVo = new AmendTermVo();
-                                            amendTermVo.setConcept(category);
-                                            amendTermVo.setNewterm(category);
-                                            amendTermVo.setOldterm("");
-
-                                            medical = new Medical();
-                                            medical.setName(category);
-                                            medical.setType(cate_type);
-                                            medical.setStdName(category);
-                                            medical.setCateName(group);
-                                            medical.setCode("");
-                                            medical.setNote("");
-                                            medlist = new ArrayList<>();
-                                            medlist.add(medical);
-                                            amendTermVo.setMedicalInfo(medlist);
-
-                                            relationDTO = new RelationDTO();
-                                            relationDTO.setStartId(getConceptId(std_name));
-                                            relationDTO.setStartName(std_name);
-                                            relationDTO.setRelationId(1);
-                                            relationDTO.setEndId(getConceptId(category));
-                                            relationDTO.setEndName(category);
-                                            rellist = new ArrayList<>();
-                                            rellist.add(relationDTO);
-                                            amendTermVo.setRelations(rellist);
-
-                                            this.upsertConceptInfo(amendTermVo);
-
-                                            System.out.println(category + ":\t 已入库.");
-                                        }
-
-                                        if (group.length() > 0) {
-                                            // 设置大类
-                                            amendTermVo = new AmendTermVo();
-                                            amendTermVo.setConcept(group);
-                                            amendTermVo.setNewterm(group);
-                                            amendTermVo.setOldterm("");
-
-                                            medical = new Medical();
-                                            medical.setName(group);
-                                            medical.setType(grp_type);
-                                            medical.setStdName(group);
-                                            medical.setCateName("");
-                                            medical.setCode("");
-                                            medical.setNote("");
-                                            medlist = new ArrayList<>();
-                                            medlist.add(medical);
-                                            amendTermVo.setMedicalInfo(medlist);
-
-                                            this.upsertConceptInfo(amendTermVo);
-                                            System.out.println(group + ":\t 已入库.");
-                                        }
-    //                                            if (count >= 1)
-    //                                                break;
-                                    }
-                                }
-                                System.out.println(count + " 条记录添加入库.");
-                            }
-                        } else {
-                            messages.add("非excel文件无法解析!");
-                        }
-                    } else {
-                        messages.add("未知文件无法解析!");
-                    }
-                }
-            } else {
-                messages.add("无文件上传!");
-            }
-        }
-        catch (IOException ioe) {
-            ioe.printStackTrace();
-        }
-        catch (Exception ex) {
-            ex.printStackTrace();
-        }
-        finally {
-            try {
-
-                if (inputStream != null) {
-                    inputStream.close();
-                }
-                if (wb != null) {
-                    wb.close();
-                }
-            }
-            catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        return conceptDTO;
-    }
-
-    public int getConceptId(String term) {
+    public int getConceptId(String term, String type) {
         int id = 0;
         TermVo termVo = new TermVo();
 
         try {
             termVo.setTerm(term);
+            termVo.setType(type);
             ConceptDTO conceptDTO = getConcept(termVo);
             if (conceptDTO != null) {
                 id = conceptDTO.getId();
@@ -349,4 +184,23 @@ public class ConceptFacade extends ConceptServiceImpl {
         }
     }
 
+    /**
+     * 从文件批量导入术语信息
+     *
+     * @param file
+     * @return ConceptDTO
+     */
+    public ConceptDTO importBatch(MultipartFile file) {
+        ImportExcel.setConceptFacade(this);
+        ImportExcel.setLibraryinfoFacade(libraryinfoFacade);
+        ImportExcel.setLibraryDetailFacade(libraryDetailFacade);
+        ImportExcel.setMedicalFacade(medicalFacade);
+        ImportExcel.setRelationFacade(relationFacade);
+
+        ConceptDTO conceptDTO = ImportExcel.importBatch(file);
+
+        return conceptDTO;
+    }
+
+
 }

+ 51 - 9
knowledgeman-service/src/main/java/com/diagbot/facade/LibraryDetailFacade.java

@@ -10,7 +10,10 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Component;
 
 import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 术语基本信息查询业务层
@@ -21,20 +24,27 @@ import java.util.List;
 public class LibraryDetailFacade extends LibraryDetailServiceImpl {
 
     /**
-     * 获取医学术语知识
+     * 获取医学术语静态知识
      *
-     * @param termVo
+     * @param params
      * @result LibraryDetail
      */
-    public List<LibraryDetail> getLibraryDetails(TermVo termVo) {
+    public List<LibraryDetail> getLibraryDetails(Map<String, Object> params) {
         QueryWrapper<LibraryDetail> wrapper = new QueryWrapper();
-        wrapper.eq("concept_id", termVo.getConcept_id());
-        List<LibraryDetail> librarydetail = this.list(wrapper);
-        return librarydetail;
+        List<LibraryDetail> libraryDetails;
+
+        for (String key:params.keySet()) {
+            wrapper.eq(key, params.get(key));
+        }
+
+        libraryDetails = this.list(wrapper);
+
+        return libraryDetails;
     }
 
+
     /**
-     * 更新或添加医学术语基本信息
+     * 更新或添加医学术语静态信息
      *
      * @param amendTermVo
      * @return
@@ -43,10 +53,42 @@ public class LibraryDetailFacade extends LibraryDetailServiceImpl {
 
         if (amendTermVo.getInformation() != null && amendTermVo.getInformation().size() > 0) {
             for (int i=0; i<amendTermVo.getInformation().size(); i++) {
-                if (amendTermVo.getInformation().get(i).getId() > 0) {
-                    this.saveOrUpdate(amendTermVo.getInformation().get(i));
+                LibraryDetail detail = amendTermVo.getInformation().get(i);
+                int concept_id = detail.getConceptId().intValue();
+
+                if (concept_id > 0) {
+                    String title = detail.getTitle();
+
+//                    TermVo termVo = new TermVo();
+//                    termVo.setConcept_id(concept_id);
+
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("concept_id", concept_id);
+                    List<LibraryDetail> details = getLibraryDetails(map);
+
+                    if (details != null && details.size() > 0) {
+                        for (LibraryDetail item : details) {
+                            if (item.getTitle().equals(title)) {
+                                detail.setId(item.getId());
+                                break;
+                            }
+                        }
+                    }
+
+                    this.saveOrUpdate(detail);
                 }
             }
         }
+        else {
+            amendTermVo.setInformation(null);
+        }
+    }
+
+    /**
+     * 清空医学术语知识表
+     *
+     */
+    public void deleteDetail() {
+        truncateDetail();
     }
 }

+ 27 - 19
knowledgeman-service/src/main/java/com/diagbot/facade/LibraryInfoFacade.java

@@ -3,6 +3,7 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.dto.ConceptDTO;
 import com.diagbot.entity.LibraryInfo;
+import com.diagbot.entity.Medical;
 import com.diagbot.service.impl.LibraryInfoServiceImpl;
 import com.diagbot.vo.AmendTermVo;
 import com.diagbot.vo.TermVo;
@@ -11,6 +12,8 @@ import org.springframework.stereotype.Component;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -24,24 +27,23 @@ public class LibraryInfoFacade extends LibraryInfoServiceImpl {
 
     private DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
 
+
     /**
      * 获取医学术语基本信息
      *
-     * @param termVo
+     * @param params
      * @result LibraryInfo
      */
-    public LibraryInfo getLibraryInfor(TermVo termVo) {
+    public LibraryInfo getLibraryInfor(Map<String, Object> params) {
         QueryWrapper<LibraryInfo> wrapper = new QueryWrapper();
-        if (termVo.getConcept_id() != 0) {
-            wrapper.eq("concept_id", termVo.getConcept_id());
-        }
-        if (termVo.getId() != 0) {
-            wrapper.eq("id", termVo.getId());
-        }
-        if (termVo.getTerm() != null) {
-            wrapper.eq("name", termVo.getTerm());
+        LibraryInfo libraryinfor = null;
+
+        for (String key:params.keySet()) {
+            wrapper.eq(key, params.get(key));
         }
-        LibraryInfo libraryinfor = this.getOne(wrapper);
+
+        libraryinfor = this.getOne(wrapper);
+
         return libraryinfor;
     }
 
@@ -56,16 +58,18 @@ public class LibraryInfoFacade extends LibraryInfoServiceImpl {
 
         String oldterm = amendTermVo.getOldterm();
         String newterm = amendTermVo.getNewterm();
+        String type = amendTermVo.getType();
         String concept = amendTermVo.getConcept();
         int concept_id = amendTermVo.getConcept_id();
 
-        TermVo termVo = new TermVo();
-        termVo.setTerm(concept);
 
-        LibraryInfo conceptInfo = this.getLibraryInfor(termVo);
+        Map<String, Object> map = new HashMap<>();
+        map.put("name", concept);
+        map.put("type", type);
+        LibraryInfo conceptInfo = this.getLibraryInfor(map);
 
-        termVo.setTerm(newterm);
-        LibraryInfo libraryInfo = getLibraryInfor(termVo);
+        map.put("name", newterm);
+        LibraryInfo libraryInfo = getLibraryInfor(map);
 
         // 如果术语概念存在,而且新术语不存在
         if (libraryInfo == null) {
@@ -73,16 +77,18 @@ public class LibraryInfoFacade extends LibraryInfoServiceImpl {
             // 如果原先术语名称为空,则添加新术语
             if (oldterm.trim().length() == 0 && newterm.trim().length() > 0) {
                 libraryInfo = new LibraryInfo();
-                libraryInfo.setGmtCreate(LocalDateTime.now());
+                libraryInfo.setGmtCreated(LocalDateTime.now());
             }
             // 原先的术语名称不为空,则修改原先的术语
             else if (oldterm.trim().length() > 0 && !oldterm.trim().equals(newterm.trim())) {
-                termVo.setTerm(oldterm);
-                libraryInfo = getLibraryInfor(termVo);
+                map.put("name", oldterm);
+                libraryInfo = getLibraryInfor(map);
+
                 libraryInfo.setGmtModified(LocalDateTime.now());
             }
 
             libraryInfo.setName(newterm);
+            libraryInfo.setType(type);
         }
 
         if (conceptInfo != null) {
@@ -97,4 +103,6 @@ public class LibraryInfoFacade extends LibraryInfoServiceImpl {
 
         return libraryInfo;
     }
+
+
 }

+ 36 - 26
knowledgeman-service/src/main/java/com/diagbot/facade/MedicalFacade.java

@@ -6,12 +6,13 @@ import com.diagbot.entity.Medical;
 import com.diagbot.service.impl.MedicalServiceImpl;
 import com.diagbot.vo.AmendTermVo;
 import com.diagbot.vo.MedicalVo;
-import com.diagbot.vo.TermVo;
 import com.diagbot.vo.TypeVo;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 术语临床信息查询业务层
@@ -24,24 +25,19 @@ public class MedicalFacade extends MedicalServiceImpl {
     /**
      * 获取医学术语知识
      *
-     * @param medicalVo
+     * @param params
      * @result List<Medical>
      */
-    public List<Medical> getMedicalInfo(MedicalVo medicalVo) {
+    public List<Medical> getMedicalInfo(Map<String, Object> params) {
         QueryWrapper<Medical> wrapper = new QueryWrapper<>();
+        List<Medical> medicals;
 
-        if (medicalVo.getName() != null && medicalVo.getName().trim().length()>0) {
-            wrapper.eq("name", medicalVo.getName());
+        for (String key:params.keySet()) {
+            wrapper.eq(key, params.get(key));
         }
 
-        if (medicalVo.getType() != null && medicalVo.getType().trim().length() > 0) {
-            wrapper.eq("type", medicalVo.getType());
-        }
+        medicals = this.list(wrapper);
 
-        if (medicalVo.getConcept_id() > 0) {
-            wrapper.eq("concept_id", medicalVo.getConcept_id());
-        }
-        List<Medical> medicals = this.list(wrapper);
         return medicals;
     }
 
@@ -52,8 +48,7 @@ public class MedicalFacade extends MedicalServiceImpl {
      * @return
      */
     public void upsertMedicalInfo(AmendTermVo amendTermVo) {
-        MedicalVo medicalVo = new MedicalVo();
-        TypeDTO typeDTO;
+        Map<String, Object> map;
         Medical medical;
         List<Medical> medicals;
 
@@ -61,28 +56,36 @@ public class MedicalFacade extends MedicalServiceImpl {
             for (int i=0; i<amendTermVo.getMedicalInfo().size(); i++) {
                 medical = amendTermVo.getMedicalInfo().get(i);
 
-                medicalVo.setName(amendTermVo.getNewterm());
-                medicalVo.setType(medical.getType());
-
-                medical.setConcept_id(amendTermVo.getConcept_id());
-
-                medicals = getMedicalInfo(medicalVo);
+                map = new HashMap<>();
+                map.put("name", amendTermVo.getNewterm());
+                medicals = getMedicalInfo(map);
 
                 if (medicals.size() > 0) {
-                    Medical exist_medical = getMedicalInfo(medicalVo).get(0);
+                    Medical exist_medical = getMedicalInfo(map).get(0);
+                    /*
+                    // 如果更新数据有效
+                    if (medical.getConceptId() != null) {
+                        medical.setId(exist_medical.getId());
+                    }
+                    else {
+                        medical = exist_medical;
+                        medical.setName(amendTermVo.getNewterm());
+                    }
+                    */
                     medical.setId(exist_medical.getId());
                 }
-
-                typeDTO = getTypeInfo(medical.getType());
-
-                if (typeDTO != null) {
-                    medical.setTypeId(typeDTO.getId());
+                else {
+                    medical.setConceptId(amendTermVo.getConcept_id());
                 }
 
+
                 this.saveOrUpdate(medical);
+                amendTermVo.getMedicalInfo().set(i, medical);
             }
         }
     }
+
+
     /**
      * 获取术语类型信息
      *
@@ -109,4 +112,11 @@ public class MedicalFacade extends MedicalServiceImpl {
         }
     }
 
+    /**
+     * 清空医学术语信息表
+     *
+     */
+    public void deleteMedical() {
+        truncateMedical();
+    }
 }

+ 28 - 6
knowledgeman-service/src/main/java/com/diagbot/facade/RelationFacade.java

@@ -14,7 +14,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 术语知识查询业务层
@@ -65,20 +67,20 @@ public class RelationFacade extends RelationServiceImpl {
     public List<RelationDTO> ConvertListtoDTO (List<Relation> src) {
         List<RelationDTO> dest = new ArrayList<>();
         RelationDTO relationDTO;
-        TermVo termVo = new TermVo();
 
         for (Relation relation:src) {
             relationDTO = new RelationDTO();
             BeanUtils.copyProperties(relation, relationDTO);
 
-            termVo.setConcept_id(relationDTO.getStartId());
+            Map<String, Object> map = new HashMap<>();
+            map.put("concept_id", relationDTO.getStartId());
+            LibraryInfo libraryInfo = libraryInfoFacade.getLibraryInfor(map);
 
-            LibraryInfo libraryInfo = libraryInfoFacade.getLibraryInfor(termVo);
             relationDTO.setStartName(libraryInfo.getName());
 
-            termVo.setConcept_id(relationDTO.getEndId());
+            map.put("concept_id", relationDTO.getEndId());
+            libraryInfo = libraryInfoFacade.getLibraryInfor(map);
 
-            libraryInfo = libraryInfoFacade.getLibraryInfor(termVo);
             relationDTO.setEndName(libraryInfo.getName());
 
             LexiconRelationship lexiconRelationship = relationshipFacade.getLexiconRelationship(relationDTO);
@@ -170,7 +172,8 @@ public class RelationFacade extends RelationServiceImpl {
             for (int i=0; i<amendTermVo.getRelations().size(); i++) {
                 updated = false;
                 relnodeDTO = amendTermVo.getRelations().get(i);
-                if (relnodeDTO.getStartId() > 0 && relnodeDTO.getEndId() > 0) {
+                if (relnodeDTO.getStartId() > 0 && relnodeDTO.getEndId() > 0
+                        && relnodeDTO.getStartId() != relnodeDTO.getEndId()) {
                     relationDTO = amendTermVo.getRelations().get(i);
                     rel_id = relationDTO.getRelationId();
 
@@ -195,5 +198,24 @@ public class RelationFacade extends RelationServiceImpl {
         }
     }
 
+    /**
+     * 清空医学术语关系表
+     *
+     */
+    public void deleteRelation() {
+        truncateRelation();
+    }
 
+    /**
+     * 根据概念Id删除医学术语关系
+     *
+     */
+    public void removeRelationbyIds(List<Integer> Ids) {
+        int concept_id = 0;
+        for (int i=0; i<Ids.size(); i++) {
+            concept_id = Ids.get(i);
+
+
+        }
+    }
 }

+ 9 - 2
knowledgeman-service/src/main/java/com/diagbot/facade/RelationshipFacade.java

@@ -23,8 +23,15 @@ public class RelationshipFacade extends LexiconRelationshipServiceImpl {
     public LexiconRelationship getLexiconRelationship(RelationDTO relationDTO) {
 
         QueryWrapper<LexiconRelationship> wrapper = new QueryWrapper<>();
-        wrapper.eq("id", relationDTO.getRelationId());
-        LexiconRelationship lexiconRelationship = this.getOne(wrapper);
+        LexiconRelationship lexiconRelationship = null;
+
+        if (relationDTO.getRelationId() != 0) {
+            wrapper.eq("id", relationDTO.getRelationId());
+        }
+
+        if (wrapper.getParamNameValuePairs().size() > 0) {
+            lexiconRelationship = this.getOne(wrapper);
+        }
 
         return lexiconRelationship;
     }

+ 10 - 0
knowledgeman-service/src/main/java/com/diagbot/mapper/ConceptMapper.java

@@ -5,6 +5,8 @@ import com.diagbot.dto.ConceptDTO;
 import com.diagbot.entity.Concept;
 import com.diagbot.vo.TermVo;
 
+import java.util.List;
+
 /**
  * <p>
  *  Mapper 接口
@@ -20,4 +22,12 @@ public interface ConceptMapper extends BaseMapper<Concept> {
      * @return ConceptDTO
      */
     public ConceptDTO getConcept(TermVo termVo);
+
+    /**
+     * 获取所有没有实体关联的概念
+     *
+     * @result ConceptDTO
+     *
+     */
+    public List<ConceptDTO> getLimboItems();
 }

+ 14 - 0
knowledgeman-service/src/main/java/com/diagbot/mapper/LibraryDetailMapper.java

@@ -22,4 +22,18 @@ public interface LibraryDetailMapper extends BaseMapper<LibraryDetail> {
      * @return LibraryInfo
      */
     public List<LibraryDetail> getLibraryDetail(TermVo termVo);
+
+    /**
+     * 清空医学术语知识表
+     *
+     */
+    public void truncateDetail();
+
+    /**
+     * 获取所有没有实体关联的静态信息
+     *
+     * @result List<LibraryDetail>
+     *
+     */
+    public List<LibraryDetail> getLimboItems();
 }

+ 10 - 0
knowledgeman-service/src/main/java/com/diagbot/mapper/LibraryInfoMapper.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.diagbot.entity.LibraryInfo;
 import com.diagbot.vo.TermVo;
 
+import java.util.List;
+
 /**
  * <p>
  * 提示信息 Mapper 接口
@@ -21,4 +23,12 @@ public interface LibraryInfoMapper extends BaseMapper<LibraryInfo> {
      * @return LibraryInfo
      */
     public LibraryInfo getLibraryInfo(QueryWrapper<LibraryInfo> wrapper);
+
+    /**
+     * 获取所有没有实体关联的静态信息
+     *
+     * @result List<LibraryInfo>
+     *
+     */
+    public List<LibraryInfo> getLimboItems();
 }

+ 17 - 0
knowledgeman-service/src/main/java/com/diagbot/mapper/MedicalMapper.java

@@ -1,5 +1,6 @@
 package com.diagbot.mapper;
 
+import com.diagbot.dto.ConceptDTO;
 import com.diagbot.dto.LibraryDTO;
 import com.diagbot.dto.MedicalDTO;
 import com.diagbot.dto.TypeDTO;
@@ -33,4 +34,20 @@ public interface MedicalMapper extends BaseMapper<Medical> {
      * @result TypeDTO
      */
     public List<TypeDTO> getTypeId(TypeVo typeVo);
+
+    /**
+     * 获取所有没有实体关联的医学信息
+     *
+     * @result List<Medical>
+     *
+     */
+    public List<Medical> getLimboItems();
+
+    /**
+     * 清空医学术语关系表
+     *
+     */
+    public void truncateMedical();
+
+
 }

+ 13 - 0
knowledgeman-service/src/main/java/com/diagbot/mapper/RelationMapper.java

@@ -23,4 +23,17 @@ public interface RelationMapper extends BaseMapper<Relation> {
      * @result List<RelationDTO>
      */
     public List<RelationDTO> getRelation(RelationDTO relationDTO);
+
+    /**
+     * 删除所有术语关系信息
+     *
+     */
+    public void truncateRelation();
+
+    /**
+     * 获取所有没有实体关联的概念的关系
+     *
+     * @result List<Relation>
+     */
+    public List<Relation> getLimboRelation();
 }

+ 4 - 0
knowledgeman-service/src/main/java/com/diagbot/service/ConceptService.java

@@ -5,6 +5,8 @@ import com.diagbot.dto.ConceptDTO;
 import com.diagbot.entity.Concept;
 import com.diagbot.vo.TermVo;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务类
@@ -15,4 +17,6 @@ import com.diagbot.vo.TermVo;
  */
 public interface ConceptService extends IService<Concept> {
     public ConceptDTO getConcept(TermVo termVo);
+
+    public List<ConceptDTO> getLimboItems();
 }

+ 4 - 0
knowledgeman-service/src/main/java/com/diagbot/service/LibraryDetailService.java

@@ -16,4 +16,8 @@ import java.util.List;
  */
 public interface LibraryDetailService extends IService<LibraryDetail> {
     public List<LibraryDetail> getLibraryDetail(TermVo termVo);
+
+    public void truncateDetail();
+
+    public List<LibraryDetail> getLimboItems();
 }

+ 4 - 0
knowledgeman-service/src/main/java/com/diagbot/service/LibraryInfoService.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.entity.LibraryInfo;
 import com.diagbot.vo.TermVo;
 
+import java.util.List;
+
 /**
  * <p>
  * 提示信息 服务类
@@ -15,4 +17,6 @@ import com.diagbot.vo.TermVo;
  */
 public interface LibraryInfoService extends IService<LibraryInfo> {
     public LibraryInfo getLibraryInfor(QueryWrapper<LibraryInfo> wrapper);
+
+    public List<LibraryInfo> getLimboItems();
 }

+ 4 - 0
knowledgeman-service/src/main/java/com/diagbot/service/MedicalService.java

@@ -21,4 +21,8 @@ public interface MedicalService extends IService<Medical> {
     public List<Medical> getMedicalInfo(LibraryDTO libraryDTO);
 
     public List<TypeDTO> getTypeId(TypeVo typeVo);
+
+    public List<Medical> getLimboItems();
+
+    public void truncateMedical();
 }

+ 4 - 0
knowledgeman-service/src/main/java/com/diagbot/service/RelationService.java

@@ -17,4 +17,8 @@ import java.util.List;
  */
 public interface RelationService extends IService<Relation> {
     public List<RelationDTO> getRelation(RelationDTO relationDTO);
+
+    public void truncateRelation();
+
+    public List<Relation> getLimboRelation();
 }

+ 7 - 0
knowledgeman-service/src/main/java/com/diagbot/service/impl/ConceptServiceImpl.java

@@ -8,6 +8,8 @@ import com.diagbot.service.ConceptService;
 import com.diagbot.vo.TermVo;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -22,4 +24,9 @@ public class ConceptServiceImpl extends ServiceImpl<ConceptMapper, Concept> impl
     public ConceptDTO getConcept(TermVo termVo) {
         return baseMapper.getConcept(termVo);
     }
+
+    @Override
+    public List<ConceptDTO> getLimboItems() {
+        return baseMapper.getLimboItems();
+    }
 }

+ 8 - 0
knowledgeman-service/src/main/java/com/diagbot/service/impl/LibraryDetailServiceImpl.java

@@ -23,4 +23,12 @@ public class LibraryDetailServiceImpl extends ServiceImpl<LibraryDetailMapper, L
     public List<LibraryDetail> getLibraryDetail(TermVo termVo) {
         return baseMapper.getLibraryDetail(termVo);
     }
+
+    @Override
+    public void truncateDetail() {
+        baseMapper.truncateDetail();
+    }
+
+    @Override
+    public List<LibraryDetail> getLimboItems() { return baseMapper.getLimboItems(); }
 }

+ 5 - 0
knowledgeman-service/src/main/java/com/diagbot/service/impl/LibraryInfoServiceImpl.java

@@ -8,6 +8,8 @@ import com.diagbot.service.LibraryInfoService;
 import com.diagbot.vo.TermVo;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 提示信息 服务实现类
@@ -22,4 +24,7 @@ public class LibraryInfoServiceImpl extends ServiceImpl<LibraryInfoMapper, Libra
     public LibraryInfo getLibraryInfor(QueryWrapper<LibraryInfo> wrapper) {
         return baseMapper.getLibraryInfo(wrapper);
     }
+
+    @Override
+    public List<LibraryInfo> getLimboItems() { return baseMapper.getLimboItems(); }
 }

+ 8 - 0
knowledgeman-service/src/main/java/com/diagbot/service/impl/MedicalServiceImpl.java

@@ -22,9 +22,17 @@ import java.util.List;
  */
 @Service
 public class MedicalServiceImpl extends ServiceImpl<MedicalMapper, Medical> implements MedicalService {
+    @Override
     public List<Medical> getMedicalInfo(LibraryDTO libraryDTO) {
         return baseMapper.getMedicalInfo(libraryDTO);
     }
 
+    @Override
     public List<TypeDTO> getTypeId(TypeVo typeVo) { return baseMapper.getTypeId(typeVo); }
+
+    @Override
+    public List<Medical> getLimboItems() { return baseMapper.getLimboItems(); }
+
+    @Override
+    public void truncateMedical() { baseMapper.truncateMedical(); }
 }

+ 7 - 0
knowledgeman-service/src/main/java/com/diagbot/service/impl/RelationServiceImpl.java

@@ -20,7 +20,14 @@ import java.util.List;
  */
 @Service
 public class RelationServiceImpl extends ServiceImpl<RelationMapper, Relation> implements RelationService {
+    @Override
     public List<RelationDTO> getRelation(RelationDTO relationDTO) {
         return baseMapper.getRelation(relationDTO);
     }
+
+    @Override
+    public void truncateRelation() { baseMapper.truncateRelation(); }
+
+    @Override
+    public List<Relation> getLimboRelation() { return baseMapper.getLimboRelation(); }
 }

+ 3 - 0
knowledgeman-service/src/main/java/com/diagbot/vo/AmendTermVo.java

@@ -25,6 +25,9 @@ public class AmendTermVo {
     @NotNull(message="请输入新的医学术语")
     private String newterm;
 
+    @NotNull(message="请输入新的医学术语类型")
+    private String type;
+
     @NotNull(message="请输入医学概念名称")
     private String concept;
 

+ 2 - 2
knowledgeman-service/src/main/java/com/diagbot/vo/MedicalVo.java

@@ -16,9 +16,9 @@ public class MedicalVo {
     @NotNull(message="请输入医学术语")
     private String name;
 
-    private int type_id;
+//    private int type_id;
 
     private int concept_id;
 
-    private String type;
+//    private String type;
 }

+ 4 - 1
knowledgeman-service/src/main/java/com/diagbot/vo/TermVo.java

@@ -13,9 +13,12 @@ import javax.validation.constraints.NotNull;
 @Getter
 @Setter
 public class TermVo {
-    @NotNull(message="请输入医学术语")
+    @NotNull(message = "请输入医学术语")
     private String term;
 
+    @NotNull(message = "请输入术语类型")
+    private String type;
+
     private int id;
 
     private int concept_id;

+ 3 - 4
knowledgeman-service/src/main/java/com/diagbot/web/ConceptController.java

@@ -5,7 +5,6 @@ import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.ConceptDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.TermDTO;
-import com.diagbot.entity.Concept;
 import com.diagbot.facade.ConceptFacade;
 import com.diagbot.vo.AmendTermVo;
 import com.diagbot.vo.TermVo;
@@ -15,7 +14,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 
 /**
@@ -35,7 +33,7 @@ public class ConceptController {
     private ConceptFacade conceptFacade;
 
     @ApiOperation(value = "术语信息查询",
-            notes = "Term:术语名称必填<br>")
+            notes = "Term:术语名称, 必填<br>Type:术语类型, 必填<br>")
     @PostMapping("/getConceptInfo")
     @SysLogger("getConceptInfo")
     public RespDTO<TermDTO> getConceptInfo(@Valid @RequestBody TermVo termvo) {
@@ -45,7 +43,8 @@ public class ConceptController {
     }
 
     @ApiOperation(value = "术语修改",
-            notes = "OldTerm: 原来的术语名称,必填<br/>NewTerm: 新的术语名称,必填<br/>Concept: 概念名称,必填<br/>")
+            notes = "OldTerm: 原来的术语名称, 必填<br/>NewTerm: 新的术语名称, 必填<br/>" +
+                    "Concept: 概念名称,必填<br/>Type: 新的术语类型, 必填<br/>")
     @PostMapping("/updateConceptInfo")
     @SysLogger("updateConceptInfo")
     public RespDTO<ConceptDTO> updateConceptInfo(@Valid @RequestBody AmendTermVo amendTermVo) {

+ 8 - 1
knowledgeman-service/src/main/resources/mapper/ConceptMapper.xml

@@ -14,6 +14,13 @@
         SELECT
         a.id, a.lib_id, a.gmt_created, a.gmt_modified
         FROM concept a, library_info b
-        WHERE a.lib_id = b.id and b.name = #{term}
+        WHERE a.lib_id = b.id and b.name = #{term} and b.type = #{type}
+    </select>
+
+    <select id="getLimboItems" resultType="com.diagbot.dto.ConceptDTO">
+        SELECT * FROM concept WHERE lib_id NOT in
+        (
+            SELECT id FROM library_info WHERE is_concept = 1
+        )
     </select>
 </mapper>

+ 14 - 0
knowledgeman-service/src/main/resources/mapper/LibraryDetailMapper.xml

@@ -19,4 +19,18 @@
         <result column="is_reason" property="isReason" />
     </resultMap>
 
+    <update id="truncateDetail">
+        Truncate Table library_detail
+    </update>
+
+    <select id="getLimboItems" resultType="com.diagbot.entity.LibraryDetail">
+        SELECT * FROM library_detail WHERE concept_id in
+        (
+            SELECT id FROM concept WHERE id NOT in
+            (
+                SELECT DISTINCT(concept_id) FROM library_info
+            )
+        )
+    </select>
+
 </mapper>

+ 11 - 1
knowledgeman-service/src/main/resources/mapper/LibraryInfoMapper.xml

@@ -6,14 +6,24 @@
     <resultMap id="BaseResultMap" type="com.diagbot.entity.LibraryInfo">
         <id column="id" property="id" />
         <result column="is_deleted" property="isDeleted" />
-        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_created" property="gmtCreated" />
         <result column="gmt_modified" property="gmtModified" />
         <result column="creator" property="creator" />
         <result column="modifier" property="modifier" />
         <result column="name" property="name" />
+        <result column="type" property="type" />
         <result column="remark" property="remark" />
         <result column="concept_id" property="conceptId" />
         <result column="is_concept" property="isConcept" />
     </resultMap>
 
+    <select id="getLimboItems" resultType="com.diagbot.entity.LibraryInfo">
+        SELECT * FROM library_info WHERE concept_id in
+        (
+            SELECT id FROM concept WHERE id NOT in
+            (
+                SELECT DISTINCT(concept_id) FROM medical
+            )
+        )
+    </select>
 </mapper>

+ 16 - 3
knowledgeman-service/src/main/resources/mapper/MedicalMapper.xml

@@ -5,12 +5,12 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.diagbot.entity.Medical">
         <id column="id" property="id" />
+        <result column="concept_id" property="conceptId" />
         <result column="name" property="name" />
-        <result column="concept_id" property="concept_id" />
-        <result column="type_id" property="typeId" />
-        <result column="type" property="type" />
         <result column="std_name" property="stdName" />
         <result column="cate_name" property="cateName" />
+        <result column="grp" property="grp" />
+        <result column="function" property="function" />
         <result column="gender" property="gender" />
         <result column="min_age" property="minAge" />
         <result column="max_age" property="maxAge" />
@@ -28,4 +28,17 @@
         WHERE name = #{type}
     </select>
 
+    <select id="getLimboItems" resultType="com.diagbot.entity.Medical">
+        SELECT * FROM medical WHERE concept_id in
+        (
+            SELECT id FROM concept WHERE lib_id NOT in
+            (
+                SELECT id FROM library_info WHERE is_concept = 1
+            )
+        )
+    </select>
+
+    <update id="truncateMedical">
+        Truncate Table medical
+    </update>
 </mapper>

+ 10 - 0
knowledgeman-service/src/main/resources/mapper/RelationMapper.xml

@@ -15,4 +15,14 @@
         FROM relation
         WHERE start_id = #{startId} AND end_id = #{endId}
     </select>
+
+    <update id="truncateRelation">
+        Truncate Table relation
+    </update>
+
+    <select id="getLimboRelation" resultType="com.diagbot.entity.Relation">
+        SELECT id, start_id, relation_id, end_id FROM relation
+        WHERE start_id NOT IN ( SELECT id FROM concept )
+        OR end_id NOT IN ( SELECT id FROM concept )
+    </select>
 </mapper>