浏览代码

实现医学知识库术语服务管理接口的所有功能, 并添加数据批量导入功能

MarkHuang 6 年之前
父节点
当前提交
6fd89b4eaa
共有 43 个文件被更改,包括 1184 次插入94 次删除
  1. 2 2
      knowledge-service/src/main/java/com/diagbot/dto/ConceptDTO.java
  2. 24 24
      knowledge-service/src/main/java/com/diagbot/entity/Medical.java
  3. 10 6
      knowledge-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  4. 2 2
      knowledge-service/src/main/java/com/diagbot/facade/LibraryInfoFacade.java
  5. 16 5
      knowledge-service/src/main/java/com/diagbot/facade/MedicalFacade.java
  6. 10 2
      knowledge-service/src/main/java/com/diagbot/facade/RelationFacade.java
  7. 2 2
      knowledge-service/src/main/java/com/diagbot/mapper/MedicalMapper.java
  8. 1 1
      knowledge-service/src/main/java/com/diagbot/service/MedicalService.java
  9. 1 1
      knowledge-service/src/main/java/com/diagbot/service/impl/MedicalServiceImpl.java
  10. 24 0
      knowledge-service/src/main/java/com/diagbot/vo/MedicalVo.java
  11. 2 0
      knowledge-service/src/main/java/com/diagbot/web/LibraryController.java
  12. 20 0
      knowledge-service/src/main/java/com/diagbot/web/LibraryDetailController.java
  13. 20 0
      knowledge-service/src/main/java/com/diagbot/web/LibraryInfoController.java
  14. 2 2
      knowledge-service/src/main/resources/mapper/MedicalMapper.xml
  15. 185 0
      knowledgeman-service/src/main/java/com/diagbot/api/ExcelAPI.java
  16. 7 2
      knowledgeman-service/src/main/java/com/diagbot/dto/ConceptDTO.java
  17. 27 0
      knowledgeman-service/src/main/java/com/diagbot/dto/TypeDTO.java
  18. 30 0
      knowledgeman-service/src/main/java/com/diagbot/entity/Medical.java
  19. 23 0
      knowledgeman-service/src/main/java/com/diagbot/entity/Relation.java
  20. 303 12
      knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  21. 21 0
      knowledgeman-service/src/main/java/com/diagbot/facade/LibraryDetailFacade.java
  22. 71 3
      knowledgeman-service/src/main/java/com/diagbot/facade/LibraryInfoFacade.java
  23. 89 6
      knowledgeman-service/src/main/java/com/diagbot/facade/MedicalFacade.java
  24. 70 5
      knowledgeman-service/src/main/java/com/diagbot/facade/RelationFacade.java
  25. 3 2
      knowledgeman-service/src/main/java/com/diagbot/mapper/LibraryInfoMapper.java
  26. 12 2
      knowledgeman-service/src/main/java/com/diagbot/mapper/MedicalMapper.java
  27. 2 2
      knowledgeman-service/src/main/java/com/diagbot/mapper/RelationMapper.java
  28. 2 1
      knowledgeman-service/src/main/java/com/diagbot/service/LibraryInfoService.java
  29. 5 1
      knowledgeman-service/src/main/java/com/diagbot/service/MedicalService.java
  30. 1 1
      knowledgeman-service/src/main/java/com/diagbot/service/RelationService.java
  31. 3 2
      knowledgeman-service/src/main/java/com/diagbot/service/impl/LibraryInfoServiceImpl.java
  32. 5 1
      knowledgeman-service/src/main/java/com/diagbot/service/impl/MedicalServiceImpl.java
  33. 2 2
      knowledgeman-service/src/main/java/com/diagbot/service/impl/RelationServiceImpl.java
  34. 51 0
      knowledgeman-service/src/main/java/com/diagbot/vo/AmendTermVo.java
  35. 24 0
      knowledgeman-service/src/main/java/com/diagbot/vo/MedicalVo.java
  36. 2 0
      knowledgeman-service/src/main/java/com/diagbot/vo/TermVo.java
  37. 19 0
      knowledgeman-service/src/main/java/com/diagbot/vo/TypeVo.java
  38. 23 4
      knowledgeman-service/src/main/java/com/diagbot/web/ConceptController.java
  39. 1 1
      knowledgeman-service/src/main/resources/mapper/ConceptMapper.xml
  40. 22 0
      knowledgeman-service/src/main/resources/mapper/LibraryDetailMapper.xml
  41. 19 0
      knowledgeman-service/src/main/resources/mapper/LibraryInfoMapper.xml
  42. 8 0
      knowledgeman-service/src/main/resources/mapper/MedicalMapper.xml
  43. 18 0
      knowledgeman-service/src/main/resources/mapper/RelationMapper.xml

+ 2 - 2
knowledge-service/src/main/java/com/diagbot/dto/ConceptDTO.java

@@ -48,7 +48,7 @@ public class ConceptDTO {
     /**
      * 术语基本信息
      */
-    private List<LibraryInfo> libraryInfo;
+    private LibraryInfo libraryInfo;
 
     /**
      * 术语相关医学知识
@@ -58,7 +58,7 @@ public class ConceptDTO {
     /**
      * 医学临床信息
      */
-    private Medical medicalInfo;
+    private List<Medical> medicalInfo;
 
     /**
      * 术语所有上级信息

+ 24 - 24
knowledge-service/src/main/java/com/diagbot/entity/Medical.java

@@ -22,7 +22,7 @@ public class Medical implements Serializable {
     /**
      * 术语名称
      */
-//    private String name;
+    private String name;
 
     /**
      * 术语概念id
@@ -47,7 +47,7 @@ public class Medical implements Serializable {
     /**
      * 术语小类名称
      */
-//    private String cateName;
+    private String cateName;
 
     /**
      * 术语类组
@@ -106,16 +106,16 @@ public class Medical implements Serializable {
     public void setId(Integer id) {
         this.id = id;
     }
-//    public String getName() {
-//        return name;
-//    }
-//
-//    public void setName(String name) {
-//        this.name = name;
-//    }
-//    public Integer getConcept_id() {
-//        return concept_id;
-//    }
+    public String getName() {
+        return name;
+    }
+
+    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;
@@ -141,13 +141,13 @@ public class Medical implements Serializable {
     public void setStdName(String stdName) {
         this.stdName = stdName;
     }
-//    public String getCateName() {
-//        return cateName;
-//    }
-//
-//    public void setCateName(String cateName) {
-//        this.cateName = cateName;
-//    }
+    public String getCateName() {
+        return cateName;
+    }
+
+    public void setCateName(String cateName) {
+        this.cateName = cateName;
+    }
 //    public String getGroup() {
 //        return group;
 //    }
@@ -155,9 +155,9 @@ public class Medical implements Serializable {
 //    public void setGroup(String group) {
 //        this.group = group;
 //    }
-//    public String getGender() {
-//        return gender;
-//    }
+    public String getGender() {
+        return gender;
+    }
 
     public void setGender(String gender) {
         this.gender = gender;
@@ -223,11 +223,11 @@ public class Medical implements Serializable {
     public String toString() {
         return "Medical{" +
         "id=" + id +
-//        ", name=" + name +
+        ", name=" + name +
         ", typeId=" + typeId +
         ", type=" + type +
         ", stdName=" + stdName +
-//        ", cateName=" + cateName +
+        ", cateName=" + cateName +
 //        ", group=" + group +
         ", gender=" + gender +
         ", minAge=" + minAge +

+ 10 - 6
knowledge-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -1,9 +1,11 @@
 package com.diagbot.facade;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.dto.ConceptDTO;
 import com.diagbot.entity.LibraryInfo;
 import java.util.List;
 import com.diagbot.service.impl.ConceptServiceImpl;
+import com.diagbot.vo.MedicalVo;
 import com.diagbot.vo.TermVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -37,20 +39,22 @@ public class ConceptFacade extends ConceptServiceImpl {
 
         ConceptDTO conceptDTO = getConcept(termvo);
         // 获取与医学术语的基本信息
+        QueryWrapper<LibraryInfo> wrapper = new QueryWrapper<>();
         termvo.setId(conceptDTO.getLibId());
         termvo.setConcept_id(conceptDTO.getId());
-        List<LibraryInfo> libraryInfo = libraryinfoFacade.getLibraryInfor(termvo);
-        for (LibraryInfo libinfo : libraryInfo) {
-            if (libinfo.getIsConcept() != null && libinfo.getIsConcept() == 1) {
-                conceptDTO.setName(libinfo.getName());
-            }
+        LibraryInfo libraryInfo = libraryinfoFacade.getLibraryInfor(termvo);
+        if (libraryInfo.getIsConcept() != null && libraryInfo.getIsConcept() == 1) {
+            conceptDTO.setName(libraryInfo.getName());
         }
+
         conceptDTO.setLibraryInfo(libraryInfo);
 
         // 获取与术语相关的医学知识
         conceptDTO.setInformation(libraryDetailFacade.getLibraryDetails(termvo));
         // 获取与术语相关的临床医学信息
-        conceptDTO.setMedicalInfo(medicalFacade.getMedicalInfo(termvo));
+        MedicalVo medicalVo = new MedicalVo();
+        medicalVo.setName(termvo.getTerm());
+        conceptDTO.setMedicalInfo(medicalFacade.getMedicalInfo(medicalVo));
         // 获取术语的所有上级信息
         conceptDTO.setRelations(relationFacade.getRelation(termvo));
 

+ 2 - 2
knowledge-service/src/main/java/com/diagbot/facade/LibraryInfoFacade.java

@@ -25,10 +25,10 @@ public class LibraryInfoFacade extends LibraryInfoServiceImpl {
      * @param termVo
      * @result LibraryInfo
      */
-    public List<LibraryInfo> getLibraryInfor(TermVo termVo) {
+    public LibraryInfo getLibraryInfor(TermVo termVo) {
         QueryWrapper<LibraryInfo> wrapper = new QueryWrapper();
         wrapper.eq("concept_id", termVo.getConcept_id());
-        List<LibraryInfo> libraryinfor = this.list(wrapper);
+        LibraryInfo libraryinfor = this.getOne(wrapper);
         return libraryinfor;
     }
 

+ 16 - 5
knowledge-service/src/main/java/com/diagbot/facade/MedicalFacade.java

@@ -3,6 +3,7 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.entity.Medical;
 import com.diagbot.service.impl.MedicalServiceImpl;
+import com.diagbot.vo.MedicalVo;
 import com.diagbot.vo.TermVo;
 import org.springframework.stereotype.Component;
 
@@ -19,13 +20,23 @@ public class MedicalFacade extends MedicalServiceImpl {
     /**
      * 获取医学术语知识
      *
-     * @param termVo
-     * @result Medical
+     * @param medicalVo
+     * @result List<Medical>
      */
-    public Medical getMedicalInfo(TermVo termVo) {
+    public List<Medical> getMedicalInfo(MedicalVo medicalVo) {
         QueryWrapper<Medical> wrapper = new QueryWrapper<>();
-        wrapper.eq("concept_id", termVo.getConcept_id());
-        Medical medical = this.getOne(wrapper);
+        if (medicalVo.getName() != null && medicalVo.getName().trim().length()>0) {
+            wrapper.eq("name", medicalVo.getName());
+        }
+
+        if (medicalVo.getType() != null && medicalVo.getType().trim().length() > 0) {
+            wrapper.eq("type", medicalVo.getType());
+        }
+
+        if (medicalVo.getConcept_id() > 0) {
+            wrapper.eq("concept_id", medicalVo.getConcept_id());
+        }
+        List<Medical> medical = this.list(wrapper);
         return medical;
     }
 }

+ 10 - 2
knowledge-service/src/main/java/com/diagbot/facade/RelationFacade.java

@@ -4,10 +4,12 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.dto.RelationDTO;
 import com.diagbot.entity.LexiconRelationship;
+import com.diagbot.entity.Library;
 import com.diagbot.entity.LibraryInfo;
 import com.diagbot.entity.Relation;
 import com.diagbot.service.impl.RelationServiceImpl;
 import com.diagbot.vo.TermVo;
+import net.sf.jsqlparser.expression.WindowRange;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -48,17 +50,23 @@ public class RelationFacade extends RelationServiceImpl {
         List<RelationDTO> dest = new ArrayList<>();
         RelationDTO relationDTO;
         TermVo termVo = new TermVo();
+        LibraryInfo libraryInfo = null;
+//        QueryWrapper<LibraryInfo> wrapper = new QueryWrapper<>();
 
         for (Relation relation:src) {
             relationDTO = new RelationDTO();
             BeanUtils.copyProperties(relation, relationDTO);
 
             termVo.setConcept_id(relationDTO.getStartId());
+//            wrapper.eq("concept_id", relationDTO.getStartId());
 
-            LibraryInfo libraryInfo = libraryInfoFacade.getLibraryInfor(termVo).get(0);
+            libraryInfo = libraryInfoFacade.getLibraryInfor(termVo);
             relationDTO.setStartName(libraryInfo.getName());
+
             termVo.setConcept_id(relationDTO.getEndId());
-            libraryInfo = libraryInfoFacade.getLibraryInfor(termVo).get(0);
+//            wrapper.eq("concept_id", relationDTO.getEndId());
+
+            libraryInfo = libraryInfoFacade.getLibraryInfor(termVo);
             relationDTO.setEndName(libraryInfo.getName());
 
             LexiconRelationship lexiconRelationship = relationshipFacade.getLexiconRelationship(relationDTO);

+ 2 - 2
knowledge-service/src/main/java/com/diagbot/mapper/MedicalMapper.java

@@ -20,7 +20,7 @@ public interface MedicalMapper extends BaseMapper<Medical> {
      * 获取术语临床医学信息
      *
      * @param termVo
-     * @result Medical
+     * @result List<Medical>
      */
-    public Medical getMedicalInfo(TermVo termVo);
+    public List<Medical> getMedicalInfo(TermVo termVo);
 }

+ 1 - 1
knowledge-service/src/main/java/com/diagbot/service/MedicalService.java

@@ -16,5 +16,5 @@ import java.util.List;
  * @since 2019-01-16
  */
 public interface MedicalService extends IService<Medical> {
-    public Medical getMedicalInfo(TermVo termVo);
+    public List<Medical> getMedicalInfo(TermVo termVo);
 }

+ 1 - 1
knowledge-service/src/main/java/com/diagbot/service/impl/MedicalServiceImpl.java

@@ -21,7 +21,7 @@ import java.util.List;
  */
 @Service
 public class MedicalServiceImpl extends ServiceImpl<MedicalMapper, Medical> implements MedicalService {
-    public Medical getMedicalInfo(TermVo termVo) {
+    public List<Medical> getMedicalInfo(TermVo termVo) {
         return baseMapper.getMedicalInfo(termVo);
     }
 }

+ 24 - 0
knowledge-service/src/main/java/com/diagbot/vo/MedicalVo.java

@@ -0,0 +1,24 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @author: Weixuan Huang
+ * @time: 2019/2/15 17:21
+ */
+@Getter
+@Setter
+public class MedicalVo {
+    @NotNull(message="请输入医学术语")
+    private String name;
+
+    private int type_id;
+
+    private int concept_id;
+
+    private String type;
+}

+ 2 - 0
knowledge-service/src/main/java/com/diagbot/web/LibraryController.java

@@ -32,6 +32,7 @@ import javax.validation.Valid;
 @Api(value = "医学术语API", tags = { "医学术语API" })
 
 public class LibraryController {
+    /*
     @Autowired
     private LibraryFacade libraryFacade;
 
@@ -54,4 +55,5 @@ public class LibraryController {
 
         return RespDTO.onSuc(libraryDTO);
     }
+    */
 }

+ 20 - 0
knowledge-service/src/main/java/com/diagbot/web/LibraryDetailController.java

@@ -0,0 +1,20 @@
+package com.diagbot.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 提示信息明细 前端控制器
+ * </p>
+ *
+ * @author Weixuan Huang
+ * @since 2019-01-30
+ */
+@Controller
+@RequestMapping("/libraryDetail")
+public class LibraryDetailController {
+
+}

+ 20 - 0
knowledge-service/src/main/java/com/diagbot/web/LibraryInfoController.java

@@ -0,0 +1,20 @@
+package com.diagbot.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 提示信息 前端控制器
+ * </p>
+ *
+ * @author Weixuan Huang
+ * @since 2019-01-30
+ */
+@Controller
+@RequestMapping("/libraryInfo")
+public class LibraryInfoController {
+
+}

+ 2 - 2
knowledge-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="name" property="name" />-->
+        <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="cate_name" property="cateName" />
         <!--<result column="group" property="group" />-->
         <result column="gender" property="gender" />
         <result column="min_age" property="minAge" />

+ 185 - 0
knowledgeman-service/src/main/java/com/diagbot/api/ExcelAPI.java

@@ -0,0 +1,185 @@
+package com.diagbot.api;
+
+import jxl.Sheet;
+import jxl.Workbook;
+import jxl.read.biff.BiffException;
+import jxl.write.Label;
+import jxl.write.WritableSheet;
+import jxl.write.WritableWorkbook;
+import jxl.write.WriteException;
+import org.bson.Document;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class ExcelAPI {
+    private static final String EXCEL_XLS = "xls";
+    private static final String EXCEL_XLSX = "xlsx";
+
+    public List readExcel(String filepath) {
+        try {
+            File file = new File(filepath);
+            // 创建输入流,读取Excel
+            InputStream is = new FileInputStream(file.getAbsolutePath());
+
+            // jxl提供的Workbook类
+            Workbook wb = Workbook.getWorkbook(is);
+            // Excel的页签数量
+            int sheet_size = wb.getNumberOfSheets();
+            for (int index = 0; index < sheet_size; index++) {
+                List<List> outerList=new ArrayList<List>();
+                // 每个页签创建一个Sheet对象
+                Sheet sheet = wb.getSheet(index);
+                // sheet.getRows()返回该页的总行数
+                for (int i = 0; i < sheet.getRows(); i++) {
+                    List innerList=new ArrayList();
+                    // sheet.getColumns()返回该页的总列数
+                    for (int j = 0; j < sheet.getColumns(); j++) {
+                        String cellinfo = sheet.getCell(j, i).getContents();
+                        if(cellinfo.isEmpty()){
+                            continue;
+                        }
+                        innerList.add(cellinfo);
+                        System.out.print(cellinfo);
+                    }
+                    outerList.add(i, innerList);
+                    System.out.println();
+                }
+                return outerList;
+            }
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (BiffException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public void writeExcel(OutputStream os, ArrayList<String> column, Map<String, Document> Res) throws WriteException,IOException {
+        Document doc;
+        int idx;
+        int cnt = 1;
+        /*
+        //创建工作薄
+        WritableWorkbook workbook = Workbook.createWorkbook(os);
+        //创建新的一页
+        WritableSheet sheet = workbook.createSheet("First Sheet", 0);
+        //构造表头
+        sheet.mergeCells(0, 0, 4, 0);//添加合并单元格,第一个参数是起始列,第二个参数是起始行,第三个参数是终止列,第四个参数是终止行
+        WritableFont bold = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//设置字体种类和黑体显示,字体为Arial,字号大小为10,采用黑体显示
+        WritableCellFormat titleFormate = new WritableCellFormat(bold);//生成一个单元格样式控制对象
+        titleFormate.setAlignment(jxl.format.Alignment.CENTRE);//单元格中的内容水平方向居中
+        titleFormate.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//单元格的内容垂直方向居中
+        Label title = new Label(0,0,"JExcelApi支持数据类型详细说明",titleFormate);
+        sheet.setRowView(0, 600, false);//设置第一行的高度
+        sheet.addCell(title);
+
+        //创建要显示的具体内容
+        WritableFont color = new WritableFont(WritableFont.ARIAL);//选择字体
+        color.setColour(Colour.GOLD);//设置字体颜色为金黄色
+        WritableCellFormat colorFormat = new WritableCellFormat(color);
+        Label formate = new Label(0,1,"数据格式",colorFormat);
+        sheet.addCell(formate);
+        Label floats = new Label(1,1,"浮点型");
+        sheet.addCell(floats);
+        Label integers = new Label(2,1,"整型");
+        sheet.addCell(integers);
+        Label booleans = new Label(3,1,"布尔型");
+        sheet.addCell(booleans);
+        Label dates = new Label(4,1,"日期格式");
+        sheet.addCell(dates);
+
+        Label example = new Label(0,2,"数据示例",colorFormat);
+        sheet.addCell(example);
+        //浮点数据
+        //设置下划线
+        WritableFont underline= new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.NO_BOLD,false,UnderlineStyle.SINGLE);
+        WritableCellFormat greyBackground = new WritableCellFormat(underline);
+        greyBackground.setBackground(Colour.GRAY_25);//设置背景颜色为灰色
+        Number number = new Number(1,2,3.1415926535,greyBackground);
+        sheet.addCell(number);
+        //整形数据
+        WritableFont boldNumber = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//黑体
+        WritableCellFormat boldNumberFormate = new WritableCellFormat(boldNumber);
+        Number ints = new Number(2,2,15042699,boldNumberFormate);
+        sheet.addCell(ints);
+        //布尔型数据
+        Boolean bools = new Boolean(3,2,true);
+        sheet.addCell(bools);
+        //日期型数据
+        //设置黑体和下划线
+        WritableFont boldDate = new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.BOLD,false,UnderlineStyle.SINGLE);
+        WritableCellFormat boldDateFormate = new WritableCellFormat(boldDate,DateFormats.FORMAT1);
+        Calendar c = Calendar.getInstance();
+        Date date = c.getTime();
+        DateTime dt = new DateTime(4,2,date,boldDateFormate);
+        sheet.addCell(dt);
+        //把创建的内容写入到输出流中,并关闭输出流
+        workbook.write();
+        workbook.close();
+        os.close();
+        */
+
+        //创建工作薄
+        WritableWorkbook workbook = Workbook.createWorkbook(os);
+        //创建新的一页
+        WritableSheet sheet = workbook.createSheet("药品",0);
+
+        //创建要显示的内容,创建一个单元格,第一个参数为列坐标,第二个参数为行坐标,第三个参数为内容
+        Label lbl;
+        for (int i=0; i<column.size(); i++) {
+            lbl = new Label(i, 0, column.get(i));
+            sheet.addCell(lbl);
+        }
+
+        for (String id:Res.keySet()) {
+            doc = Res.get(id);
+            for (String key:doc.keySet()) {
+                String val = doc.getString(key);
+                idx = column.indexOf(key);
+                lbl = new Label(idx, cnt, val);
+                sheet.addCell(lbl);
+            }
+            cnt += 1;
+        }
+        /*
+        Label xuexiao = new Label(0,0,"学校");
+        sheet.addCell(xuexiao);
+        Label zhuanye = new Label(1,0,"专业");
+        sheet.addCell(zhuanye);
+        Label jingzhengli = new Label(2,0,"专业竞争力");
+        sheet.addCell(jingzhengli);
+
+        Label qinghua = new Label(0,1,"清华大学");
+        sheet.addCell(qinghua);
+        Label jisuanji = new Label(1,1,"计算机专业");
+        sheet.addCell(jisuanji);
+        Label gao = new Label(2,1,"高");
+        sheet.addCell(gao);
+
+        Label beida = new Label(0,2,"北京大学");
+        sheet.addCell(beida);
+        Label falv = new Label(1,2,"法律专业");
+        sheet.addCell(falv);
+        Label zhong = new Label(2,2,"中");
+        sheet.addCell(zhong);
+
+        Label ligong = new Label(0,3,"北京理工大学");
+        sheet.addCell(ligong);
+        Label hangkong = new Label(1,3,"航空专业");
+        sheet.addCell(hangkong);
+        Label di = new Label(2,3,"低");
+        sheet.addCell(di);
+        */
+
+        //把创建的内容写入到输出流中,并关闭输出流
+        workbook.write();
+        workbook.close();
+        os.close();
+    }
+}
+

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

@@ -48,7 +48,7 @@ public class ConceptDTO {
     /**
      * 术语基本信息
      */
-    private List<LibraryInfo> libraryInfo;
+    private LibraryInfo libraryInfo;
 
     /**
      * 术语相关医学知识
@@ -58,10 +58,15 @@ public class ConceptDTO {
     /**
      * 医学临床信息
      */
-    private Medical medicalInfo;
+    private List<Medical> medicalInfo;
 
     /**
      * 术语所有上级信息
      */
     private List<RelationDTO> relations;
+
+    /**
+     * 提示信息
+     */
+    private List<String> message;
 }

+ 27 - 0
knowledgeman-service/src/main/java/com/diagbot/dto/TypeDTO.java

@@ -0,0 +1,27 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: Weixuan Huang
+ * @time: 2019/2/15 15:43
+ */
+@Getter
+@Setter
+public class TypeDTO {
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 序列号
+     */
+    private int id;
+
+}

+ 30 - 0
knowledgeman-service/src/main/java/com/diagbot/entity/Medical.java

@@ -20,6 +20,11 @@ public class Medical implements Serializable {
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
+    /**
+     * 术语名称
+     */
+    private String name;
+
     /**
      * 术语概念id
      */
@@ -40,6 +45,11 @@ public class Medical implements Serializable {
      */
     private String stdName;
 
+    /**
+     * 术语小类名称
+     */
+    private String cateName;
+
     /**
      * 性别:1:男, 2:女, 3:通用
      */
@@ -92,6 +102,16 @@ public class Medical implements Serializable {
     public void setId(Integer id) {
         this.id = id;
     }
+    public String getName() {
+        return name;
+    }
+
+    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;
@@ -117,6 +137,13 @@ public class Medical implements Serializable {
     public void setStdName(String stdName) {
         this.stdName = stdName;
     }
+    public String getCateName() {
+        return cateName;
+    }
+
+    public void setCateName(String cateName) {
+        this.cateName = cateName;
+    }
     public String getGender() {
         return gender;
     }
@@ -185,9 +212,12 @@ public class Medical implements Serializable {
     public String toString() {
         return "Medical{" +
         "id=" + id +
+        ", name=" + name +
+        ", concept_id=" + concept_id +
         ", typeId=" + typeId +
         ", type=" + type +
         ", stdName=" + stdName +
+        ", cateName=" + cateName +
         ", gender=" + gender +
         ", minAge=" + minAge +
         ", maxAge=" + maxAge +

+ 23 - 0
knowledgeman-service/src/main/java/com/diagbot/entity/Relation.java

@@ -35,6 +35,15 @@ public class Relation implements Serializable {
      */
     private Integer endId;
 
+    /**
+     * 子节点
+     */
+//    private Relation nextNode;
+
+    /**
+     * 父节点
+     */
+//    private Relation prevNode;
 
 
     public Integer getId() {
@@ -65,7 +74,21 @@ public class Relation implements Serializable {
     public void setEndId(Integer endId) {
         this.endId = endId;
     }
+    /*
+    public Relation next() {
+        return nextNode;
+    }
+    public void setNext(Relation node) {
+        nextNode = node;
+    }
 
+    public Relation prev() {
+        return prevNode;
+    }
+    public void setPrev(Relation node) {
+        prevNode = node;
+    }
+    */
 
     @Override
     public String toString() {

+ 303 - 12
knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -1,15 +1,33 @@
 package com.diagbot.facade;
 
 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.service.impl.ConceptServiceImpl;
+import com.diagbot.vo.AmendTermVo;
+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.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;
 
+
 /**
  * @Description: 术语查询业务层
  * @author: Weixuan Huang
@@ -38,24 +56,297 @@ public class ConceptFacade extends ConceptServiceImpl {
 
         ConceptDTO conceptDTO = getConcept(termvo);
         // 获取与医学术语的基本信息
-        termvo.setId(conceptDTO.getLibId());
-        termvo.setConcept_id(conceptDTO.getId());
-        List<LibraryInfo> libraryInfo = libraryinfoFacade.getLibraryInfor(termvo);
-        for (LibraryInfo libinfo : libraryInfo) {
-            if (libinfo.getIsConcept() != null && libinfo.getIsConcept() == 1) {
-                conceptDTO.setName(libinfo.getName());
+        if (conceptDTO != null) {
+            termvo.setId(conceptDTO.getLibId());
+            termvo.setConcept_id(conceptDTO.getId());
+            LibraryInfo libraryInfo = libraryinfoFacade.getLibraryInfor(termvo);
+
+            if (libraryInfo.getIsConcept() != null && libraryInfo.getIsConcept() == 1) {
+                conceptDTO.setName(libraryInfo.getName());
             }
+            conceptDTO.setLibraryInfo(libraryInfo);
+
+            // 获取与术语相关的医学知识
+            conceptDTO.setInformation(libraryDetailFacade.getLibraryDetails(termvo));
+            // 获取与术语相关的临床医学信息
+            MedicalVo medicalVo = new MedicalVo();
+            medicalVo.setName(termvo.getTerm());
+            conceptDTO.setMedicalInfo(medicalFacade.getMedicalInfo(medicalVo));
+            // 获取术语的所有上级信息
+            conceptDTO.setRelations(relationFacade.getAllRelation(termvo));
+        }
+
+        return conceptDTO;
+    }
+
+    /**
+     * 更新医学术语信息
+     *
+     * @param amendTermVo
+     * @return ConceptDTO
+     */
+    public ConceptDTO upsertConceptInfo(@RequestBody AmendTermVo amendTermVo) {
+        ConceptDTO conceptDTO = new ConceptDTO();
+
+        TermVo termVo = new TermVo();
+        termVo.setTerm(amendTermVo.getConcept());
+
+        // 如果概念术语不存在,添加新术语,然后添加新的概念
+        conceptDTO = getConcept(termVo);
+        if (conceptDTO == null) {
+            AmendTermVo amendconcept = new AmendTermVo();
+            amendconcept.setOldterm(amendTermVo.getOldterm());
+            amendconcept.setNewterm(amendTermVo.getConcept());
+            amendconcept.setConcept("");
+            libraryinfoFacade.upsertLibraryInfo(amendconcept);
+
+            Concept concept = new Concept();
+            int libid = libraryinfoFacade.getLibraryInfor(termVo).getId().intValue();
+            concept.setLibId(libid);
+            this.saveOrUpdate(concept);
+
+            conceptDTO = getConcept(termVo);
         }
+
+        amendTermVo.setConcept_id(conceptDTO.getId());
+        LibraryInfo libraryInfo = libraryinfoFacade.upsertLibraryInfo(amendTermVo);
         conceptDTO.setLibraryInfo(libraryInfo);
 
-        // 获取与术语相关的医学知识
-        conceptDTO.setInformation(libraryDetailFacade.getLibraryDetails(termvo));
-        // 获取与术语相关的临床医学信息
-        conceptDTO.setMedicalInfo(medicalFacade.getMedicalInfo(termvo));
-        // 获取术语的所有上级信息
-        conceptDTO.setRelations(relationFacade.getRelation(termvo));
+        conceptDTO = updateConceptInfo(amendTermVo, conceptDTO);
+
+        return conceptDTO;
+    }
+
+    /**
+     * 更新或添加医学术语信息
+     *
+     * @param amendTermVo
+     * @param conceptDTO
+     * @return ConceptDTO
+     */
+    public ConceptDTO updateConceptInfo(AmendTermVo amendTermVo, ConceptDTO conceptDTO) {
+
+        libraryDetailFacade.upsertLibraryInfo(amendTermVo);
+        conceptDTO.setInformation(amendTermVo.getInformation());
+
+        medicalFacade.upsertMedicalInfo(amendTermVo);
+        conceptDTO.setMedicalInfo(amendTermVo.getMedicalInfo());
+
+        relationFacade.upsertRelationInfo(amendTermVo);
+        conceptDTO.setRelations(amendTermVo.getRelations());
+
+        return conceptDTO;
+    }
+
+    /**
+     * 从文件批量导入术语信息
+     *
+     * @param file
+     * @return ConceptDTO
+     */
+    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) {
+        int id = 0;
+        TermVo termVo = new TermVo();
+
+        try {
+            termVo.setTerm(term);
+            ConceptDTO conceptDTO = getConcept(termVo);
+            if (conceptDTO != null) {
+                id = conceptDTO.getId();
+            }
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        finally {
+            return id;
+        }
+    }
+
 }

+ 21 - 0
knowledgeman-service/src/main/java/com/diagbot/facade/LibraryDetailFacade.java

@@ -2,10 +2,14 @@ package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.entity.LibraryDetail;
+import com.diagbot.entity.LibraryInfo;
 import com.diagbot.service.impl.LibraryDetailServiceImpl;
+import com.diagbot.vo.AmendTermVo;
 import com.diagbot.vo.TermVo;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Component;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -28,4 +32,21 @@ public class LibraryDetailFacade extends LibraryDetailServiceImpl {
         List<LibraryDetail> librarydetail = this.list(wrapper);
         return librarydetail;
     }
+
+    /**
+     * 更新或添加医学术语基本信息
+     *
+     * @param amendTermVo
+     * @return
+     */
+    public void upsertLibraryInfo(AmendTermVo amendTermVo) {
+
+        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));
+                }
+            }
+        }
+    }
 }

+ 71 - 3
knowledgeman-service/src/main/java/com/diagbot/facade/LibraryInfoFacade.java

@@ -1,12 +1,18 @@
 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.service.impl.LibraryInfoServiceImpl;
+import com.diagbot.vo.AmendTermVo;
 import com.diagbot.vo.TermVo;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Component;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 术语基本信息查询业务层
@@ -16,17 +22,79 @@ import java.util.List;
 @Component
 public class LibraryInfoFacade extends LibraryInfoServiceImpl {
 
+    private DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
+
     /**
      * 获取医学术语基本信息
      *
      * @param termVo
      * @result LibraryInfo
      */
-    public List<LibraryInfo> getLibraryInfor(TermVo termVo) {
+    public LibraryInfo getLibraryInfor(TermVo termVo) {
         QueryWrapper<LibraryInfo> wrapper = new QueryWrapper();
-        wrapper.eq("concept_id", termVo.getConcept_id());
-        List<LibraryInfo> libraryinfor = this.list(wrapper);
+        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 = this.getOne(wrapper);
         return libraryinfor;
     }
 
+
+    /**
+     * 更新或添加医学术语基本信息
+     *
+     * @param amendTermVo
+     * @return LibraryInfo
+     */
+    public LibraryInfo upsertLibraryInfo(AmendTermVo amendTermVo) {
+
+        String oldterm = amendTermVo.getOldterm();
+        String newterm = amendTermVo.getNewterm();
+        String concept = amendTermVo.getConcept();
+        int concept_id = amendTermVo.getConcept_id();
+
+        TermVo termVo = new TermVo();
+        termVo.setTerm(concept);
+
+        LibraryInfo conceptInfo = this.getLibraryInfor(termVo);
+
+        termVo.setTerm(newterm);
+        LibraryInfo libraryInfo = getLibraryInfor(termVo);
+
+        // 如果术语概念存在,而且新术语不存在
+        if (libraryInfo == null) {
+
+            // 如果原先术语名称为空,则添加新术语
+            if (oldterm.trim().length() == 0 && newterm.trim().length() > 0) {
+                libraryInfo = new LibraryInfo();
+                libraryInfo.setGmtCreate(LocalDateTime.now());
+            }
+            // 原先的术语名称不为空,则修改原先的术语
+            else if (oldterm.trim().length() > 0 && !oldterm.trim().equals(newterm.trim())) {
+                termVo.setTerm(oldterm);
+                libraryInfo = getLibraryInfor(termVo);
+                libraryInfo.setGmtModified(LocalDateTime.now());
+            }
+
+            libraryInfo.setName(newterm);
+        }
+
+        if (conceptInfo != null) {
+            libraryInfo.setConceptId(concept_id);
+
+            if (newterm.trim().equals(concept.trim())) {
+                libraryInfo.setIsConcept(1);
+            }
+        }
+
+        this.saveOrUpdate(libraryInfo);
+
+        return libraryInfo;
+    }
 }

+ 89 - 6
knowledgeman-service/src/main/java/com/diagbot/facade/MedicalFacade.java

@@ -1,11 +1,18 @@
 package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.TypeDTO;
 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.List;
+
 /**
  * @Description: 术语临床信息查询业务层
  * @author: Weixuan Huang
@@ -17,13 +24,89 @@ public class MedicalFacade extends MedicalServiceImpl {
     /**
      * 获取医学术语知识
      *
-     * @param termVo
-     * @result Medical
+     * @param medicalVo
+     * @result List<Medical>
      */
-    public Medical getMedicalInfo(TermVo termVo) {
+    public List<Medical> getMedicalInfo(MedicalVo medicalVo) {
         QueryWrapper<Medical> wrapper = new QueryWrapper<>();
-        wrapper.eq("concept_id", termVo.getConcept_id());
-        Medical medical = this.getOne(wrapper);
-        return medical;
+
+        if (medicalVo.getName() != null && medicalVo.getName().trim().length()>0) {
+            wrapper.eq("name", medicalVo.getName());
+        }
+
+        if (medicalVo.getType() != null && medicalVo.getType().trim().length() > 0) {
+            wrapper.eq("type", medicalVo.getType());
+        }
+
+        if (medicalVo.getConcept_id() > 0) {
+            wrapper.eq("concept_id", medicalVo.getConcept_id());
+        }
+        List<Medical> medicals = this.list(wrapper);
+        return medicals;
+    }
+
+    /**
+     * 更新或添加医学术语信息
+     *
+     * @param amendTermVo
+     * @return
+     */
+    public void upsertMedicalInfo(AmendTermVo amendTermVo) {
+        MedicalVo medicalVo = new MedicalVo();
+        TypeDTO typeDTO;
+        Medical medical;
+        List<Medical> medicals;
+
+        if (amendTermVo.getMedicalInfo() != null && amendTermVo.getMedicalInfo().size() > 0) {
+            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);
+
+                if (medicals.size() > 0) {
+                    Medical exist_medical = getMedicalInfo(medicalVo).get(0);
+                    medical.setId(exist_medical.getId());
+                }
+
+                typeDTO = getTypeInfo(medical.getType());
+
+                if (typeDTO != null) {
+                    medical.setTypeId(typeDTO.getId());
+                }
+
+                this.saveOrUpdate(medical);
+            }
+        }
+    }
+    /**
+     * 获取术语类型信息
+     *
+     * @param type
+     * @return TypeDTO
+     */
+    public TypeDTO getTypeInfo(String type) {
+        TypeDTO typeDTO = null;
+        TypeVo typeVo = new TypeVo();
+
+        try {
+            typeVo.setType(type);
+            List<TypeDTO> typelist = getTypeId(typeVo);
+
+            if (typelist.size() > 0) {
+                typeDTO = getTypeId(typeVo).get(0);
+            }
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        finally {
+            return typeDTO;
+        }
     }
+
 }

+ 70 - 5
knowledgeman-service/src/main/java/com/diagbot/facade/RelationFacade.java

@@ -7,6 +7,7 @@ import com.diagbot.entity.LexiconRelationship;
 import com.diagbot.entity.LibraryInfo;
 import com.diagbot.entity.Relation;
 import com.diagbot.service.impl.RelationServiceImpl;
+import com.diagbot.vo.AmendTermVo;
 import com.diagbot.vo.TermVo;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,14 +30,29 @@ public class RelationFacade extends RelationServiceImpl {
     private RelationshipFacade relationshipFacade;
 
     /**
+     * 获取指定医学术语的关联关系
      *
+     * @param relation
      *
-     * 获取医学术语上级信息
+     * @return List<RelationDTO>
+     */
+    public List<RelationDTO> getRelationInfo(RelationDTO relation) {
+        List<RelationDTO> rellist = new ArrayList<>();
+
+        rellist = getRelation(relation);
+
+        return rellist;
+    }
+
+    /**
+     *
+     *
+     * 获取指定医学术语的所有信息
      *
      * @param termVo
      * @result List<Relation>
      */
-    public List<RelationDTO> getRelation(TermVo termVo) {
+    public List<RelationDTO> getAllRelation(TermVo termVo) {
         List<RelationDTO> relationDTOs = new ArrayList<>();
 
         List<Relation> relations = new ArrayList<>();
@@ -57,10 +73,12 @@ public class RelationFacade extends RelationServiceImpl {
 
             termVo.setConcept_id(relationDTO.getStartId());
 
-            LibraryInfo libraryInfo = libraryInfoFacade.getLibraryInfor(termVo).get(0);
+            LibraryInfo libraryInfo = libraryInfoFacade.getLibraryInfor(termVo);
             relationDTO.setStartName(libraryInfo.getName());
+
             termVo.setConcept_id(relationDTO.getEndId());
-            libraryInfo = libraryInfoFacade.getLibraryInfor(termVo).get(0);
+
+            libraryInfo = libraryInfoFacade.getLibraryInfor(termVo);
             relationDTO.setEndName(libraryInfo.getName());
 
             LexiconRelationship lexiconRelationship = relationshipFacade.getLexiconRelationship(relationDTO);
@@ -123,7 +141,10 @@ public class RelationFacade extends RelationServiceImpl {
         Boolean Exist = false;
 
         for (Relation item:relations) {
-            if (item.getStartId().intValue() == relation.getEndId().intValue() && item.getEndId().intValue() == relation.getStartId().intValue()) {
+
+            if (item.getEndId().intValue() == relation.getStartId().intValue()
+                    && item.getStartId().intValue() == relation.getEndId().intValue()
+                    && item.getRelationId().intValue() == relation.getRelationId().intValue()) {
                 Exist = true;
             }
         }
@@ -131,4 +152,48 @@ public class RelationFacade extends RelationServiceImpl {
         return Exist;
     }
 
+    /**
+     * 更新或添加医学术语关系信息
+     *
+     * @param amendTermVo
+     * @return
+     */
+    public void upsertRelationInfo(AmendTermVo amendTermVo) {
+        Relation relation = new Relation();
+        RelationDTO relnodeDTO;
+        RelationDTO relationDTO;
+        List<RelationDTO> rellist;
+        boolean updated = false;
+        int rel_id = 0;
+
+        if (amendTermVo.getRelations() != null && amendTermVo.getRelations().size() > 0) {
+            for (int i=0; i<amendTermVo.getRelations().size(); i++) {
+                updated = false;
+                relnodeDTO = amendTermVo.getRelations().get(i);
+                if (relnodeDTO.getStartId() > 0 && relnodeDTO.getEndId() > 0) {
+                    relationDTO = amendTermVo.getRelations().get(i);
+                    rel_id = relationDTO.getRelationId();
+
+                    rellist = getRelationInfo(relationDTO);
+
+                    if (rellist.size() > 0) {
+                        for (RelationDTO reldto:rellist) {
+                            if (reldto.getRelationId() == rel_id) {
+                                updated = true;
+
+                                break;
+                            }
+                        }
+                    }
+
+                    if (!updated) {
+                        BeanUtils.copyProperties(relationDTO, relation);
+                        this.saveOrUpdate(relation);
+                    }
+                }
+            }
+        }
+    }
+
+
 }

+ 3 - 2
knowledgeman-service/src/main/java/com/diagbot/mapper/LibraryInfoMapper.java

@@ -1,5 +1,6 @@
 package com.diagbot.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.diagbot.entity.LibraryInfo;
 import com.diagbot.vo.TermVo;
@@ -16,8 +17,8 @@ public interface LibraryInfoMapper extends BaseMapper<LibraryInfo> {
     /**
      * 获取术语基本信息
      *
-     * @param termVo
+     * @param wrapper
      * @return LibraryInfo
      */
-    public LibraryInfo getLibraryInfo(TermVo termVo);
+    public LibraryInfo getLibraryInfo(QueryWrapper<LibraryInfo> wrapper);
 }

+ 12 - 2
knowledgeman-service/src/main/java/com/diagbot/mapper/MedicalMapper.java

@@ -2,8 +2,10 @@ package com.diagbot.mapper;
 
 import com.diagbot.dto.LibraryDTO;
 import com.diagbot.dto.MedicalDTO;
+import com.diagbot.dto.TypeDTO;
 import com.diagbot.entity.Medical;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.vo.TypeVo;
 
 import java.util.List;
 
@@ -19,8 +21,16 @@ public interface MedicalMapper extends BaseMapper<Medical> {
     /**
      * 获取术语临床医学信息
      *
-     * @param LibraryDTO
+     * @param libraryDTO
      * @result MedicalDTO
      */
-    public List<MedicalDTO> getMedicalInfo(LibraryDTO libraryDTO);
+    public List<Medical> getMedicalInfo(LibraryDTO libraryDTO);
+
+    /**
+     * 获取实体类型Id
+     *
+     * @param typeVo
+     * @result TypeDTO
+     */
+    public List<TypeDTO> getTypeId(TypeVo typeVo);
 }

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

@@ -19,8 +19,8 @@ public interface RelationMapper extends BaseMapper<Relation> {
     /**
      * 获取术语上级信息
      *
-     * @param termVo
+     * @param relationDTO
      * @result List<RelationDTO>
      */
-    public List<RelationDTO> getRelation(TermVo termVo);
+    public List<RelationDTO> getRelation(RelationDTO relationDTO);
 }

+ 2 - 1
knowledgeman-service/src/main/java/com/diagbot/service/LibraryInfoService.java

@@ -1,5 +1,6 @@
 package com.diagbot.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.entity.LibraryInfo;
 import com.diagbot.vo.TermVo;
@@ -13,5 +14,5 @@ import com.diagbot.vo.TermVo;
  * @since 2019-01-30
  */
 public interface LibraryInfoService extends IService<LibraryInfo> {
-    public LibraryInfo getLibraryInfo(TermVo termVo);
+    public LibraryInfo getLibraryInfor(QueryWrapper<LibraryInfo> wrapper);
 }

+ 5 - 1
knowledgeman-service/src/main/java/com/diagbot/service/MedicalService.java

@@ -2,8 +2,10 @@ package com.diagbot.service;
 
 import com.diagbot.dto.LibraryDTO;
 import com.diagbot.dto.MedicalDTO;
+import com.diagbot.dto.TypeDTO;
 import com.diagbot.entity.Medical;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.TypeVo;
 
 import java.util.List;
 
@@ -16,5 +18,7 @@ import java.util.List;
  * @since 2019-01-16
  */
 public interface MedicalService extends IService<Medical> {
-    public List<MedicalDTO> getMedicalInfo(LibraryDTO libraryDTO);
+    public List<Medical> getMedicalInfo(LibraryDTO libraryDTO);
+
+    public List<TypeDTO> getTypeId(TypeVo typeVo);
 }

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

@@ -16,5 +16,5 @@ import java.util.List;
  * @since 2019-01-31
  */
 public interface RelationService extends IService<Relation> {
-    public List<RelationDTO> getRelation(TermVo termVo);
+    public List<RelationDTO> getRelation(RelationDTO relationDTO);
 }

+ 3 - 2
knowledgeman-service/src/main/java/com/diagbot/service/impl/LibraryInfoServiceImpl.java

@@ -1,5 +1,6 @@
 package com.diagbot.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.entity.LibraryInfo;
 import com.diagbot.mapper.LibraryInfoMapper;
@@ -18,7 +19,7 @@ import org.springframework.stereotype.Service;
 @Service
 public class LibraryInfoServiceImpl extends ServiceImpl<LibraryInfoMapper, LibraryInfo> implements LibraryInfoService {
     @Override
-    public LibraryInfo getLibraryInfo(TermVo termVo) {
-        return baseMapper.getLibraryInfo(termVo);
+    public LibraryInfo getLibraryInfor(QueryWrapper<LibraryInfo> wrapper) {
+        return baseMapper.getLibraryInfo(wrapper);
     }
 }

+ 5 - 1
knowledgeman-service/src/main/java/com/diagbot/service/impl/MedicalServiceImpl.java

@@ -2,10 +2,12 @@ package com.diagbot.service.impl;
 
 import com.diagbot.dto.LibraryDTO;
 import com.diagbot.dto.MedicalDTO;
+import com.diagbot.dto.TypeDTO;
 import com.diagbot.entity.Medical;
 import com.diagbot.mapper.MedicalMapper;
 import com.diagbot.service.MedicalService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.TypeVo;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -20,7 +22,9 @@ import java.util.List;
  */
 @Service
 public class MedicalServiceImpl extends ServiceImpl<MedicalMapper, Medical> implements MedicalService {
-    public List<MedicalDTO> getMedicalInfo(LibraryDTO libraryDTO) {
+    public List<Medical> getMedicalInfo(LibraryDTO libraryDTO) {
         return baseMapper.getMedicalInfo(libraryDTO);
     }
+
+    public List<TypeDTO> getTypeId(TypeVo typeVo) { return baseMapper.getTypeId(typeVo); }
 }

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

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

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

@@ -0,0 +1,51 @@
+package com.diagbot.vo;
+
+import com.diagbot.dto.RelationDTO;
+import com.diagbot.entity.LibraryDetail;
+import com.diagbot.entity.LibraryInfo;
+import com.diagbot.entity.Medical;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: Weixuan Huang
+ * @time: 2019/1/14 17:03
+ */
+@Getter
+@Setter
+public class AmendTermVo {
+    @NotNull(message="请输入现有的医学术语")
+    private String oldterm;
+
+    @NotNull(message="请输入新的医学术语")
+    private String newterm;
+
+    @NotNull(message="请输入医学概念名称")
+    private String concept;
+
+    private int concept_id;
+    /**
+     * 术语基本信息
+     */
+    private List<LibraryInfo> libraryInfo;
+
+    /**
+     * 术语相关医学知识
+     */
+    private List<LibraryDetail> information;
+
+    /**
+     * 医学临床信息
+     */
+    private List<Medical> medicalInfo;
+
+    /**
+     * 术语关系信息
+     */
+    private List<RelationDTO> relations;
+}

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

@@ -0,0 +1,24 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @author: Weixuan Huang
+ * @time: 2019/2/15 17:21
+ */
+@Getter
+@Setter
+public class MedicalVo {
+    @NotNull(message="请输入医学术语")
+    private String name;
+
+    private int type_id;
+
+    private int concept_id;
+
+    private String type;
+}

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

@@ -19,4 +19,6 @@ public class TermVo {
     private int id;
 
     private int concept_id;
+
+    private String conecpt_name;
 }

+ 19 - 0
knowledgeman-service/src/main/java/com/diagbot/vo/TypeVo.java

@@ -0,0 +1,19 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @author: Weixuan Huang
+ * @time: 2019/2/15 15:41
+ */
+@Getter
+@Setter
+public class TypeVo {
+    private String type;
+
+    private int type_id;
+}

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

@@ -5,16 +5,17 @@ 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;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 
 /**
@@ -43,4 +44,22 @@ public class ConceptController {
         return RespDTO.onSuc(data);
     }
 
+    @ApiOperation(value = "术语修改",
+            notes = "OldTerm: 原来的术语名称,必填<br/>NewTerm: 新的术语名称,必填<br/>Concept: 概念名称,必填<br/>")
+    @PostMapping("/updateConceptInfo")
+    @SysLogger("updateConceptInfo")
+    public RespDTO<ConceptDTO> updateConceptInfo(@Valid @RequestBody AmendTermVo amendTermVo) {
+        ConceptDTO data = conceptFacade.upsertConceptInfo(amendTermVo);
+
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "术语导入", notes = "导入术语信息")
+    @PostMapping("/importTermExcel")
+    public RespDTO<ConceptDTO> lisExcelAnalysis(@RequestParam("uploadfile") MultipartFile file) {
+        ConceptDTO data = conceptFacade.importBatch(file);
+
+        return RespDTO.onSuc(data);
+    }
+
 }

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

@@ -14,6 +14,6 @@
         SELECT
         a.id, a.lib_id, a.gmt_created, a.gmt_modified
         FROM concept a, library_info b
-        WHERE a.id = b.concept_id and b.name = #{term}
+        WHERE a.lib_id = b.id and b.name = #{term}
     </select>
 </mapper>

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

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.LibraryDetailMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.LibraryDetail">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="concept_id" property="conceptId" />
+        <result column="title" property="title" />
+        <result column="content" property="content" />
+        <result column="text" property="text" />
+        <result column="order_no" property="orderNo" />
+        <result column="position" property="position" />
+        <result column="is_reason" property="isReason" />
+    </resultMap>
+
+</mapper>

+ 19 - 0
knowledgeman-service/src/main/resources/mapper/LibraryInfoMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.LibraryInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <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_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="name" property="name" />
+        <result column="remark" property="remark" />
+        <result column="concept_id" property="conceptId" />
+        <result column="is_concept" property="isConcept" />
+    </resultMap>
+
+</mapper>

+ 8 - 0
knowledgeman-service/src/main/resources/mapper/MedicalMapper.xml

@@ -5,10 +5,12 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.diagbot.entity.Medical">
         <id column="id" property="id" />
+        <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="gender" property="gender" />
         <result column="min_age" property="minAge" />
         <result column="max_age" property="maxAge" />
@@ -20,4 +22,10 @@
         <result column="note" property="note" />
     </resultMap>
 
+    <select id="getTypeId" parameterType="com.diagbot.vo.TypeVo" resultType="com.diagbot.dto.TypeDTO">
+        SELECT id, name
+        FROM lexicon
+        WHERE name = #{type}
+    </select>
+
 </mapper>

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

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.RelationMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.Relation">
+        <id column="id" property="id" />
+        <result column="start_id" property="startId" />
+        <result column="relation_id" property="relationId" />
+        <result column="end_id" property="endId" />
+    </resultMap>
+
+    <select id="getRelation" parameterType="com.diagbot.dto.RelationDTO" resultType="com.diagbot.dto.RelationDTO">
+        SELECT id, start_id, relation_id, end_id
+        FROM relation
+        WHERE start_id = #{startId} AND end_id = #{endId}
+    </select>
+</mapper>