zhoutg před 4 roky
rodič
revize
448a498ff0

+ 17 - 0
src/main/java/com/diagbot/entity/Ann.java

@@ -0,0 +1,17 @@
+package com.diagbot.entity;
+
+import lombok.Data;
+
+/**
+ * @author kwz
+ * @date 2020/10/15
+ * @time 14:23
+ */
+@Data
+public class Ann {
+    private String id;
+    private String type;
+    private String start;
+    private String end;
+    private String name;
+}

+ 85 - 0
src/main/java/com/diagbot/entity/SymptomFeature.java

@@ -0,0 +1,85 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-11-09
+ */
+@Data
+public class SymptomFeature implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 最小组合单元
+     */
+    private String minCombineElement;
+
+    /**
+     * 部位
+     */
+    private String bodyPart;
+
+    /**
+     * 方位
+     */
+    private String position;
+
+    /**
+     * 形状性质
+     */
+    private String shapePropety;
+
+    /**
+     * 程度
+     */
+    private String degree;
+
+    /**
+     * 颜色
+     */
+    private String color;
+
+    /**
+     * 变化
+     */
+    private String variety;
+
+    /**
+     * 放射情况
+     */
+    private String radiationSituation;
+
+    /**
+     * 频率
+     */
+    private String frequency;
+}

+ 64 - 0
src/main/java/com/diagbot/entity/SymptomFeatureList.java

@@ -0,0 +1,64 @@
+package com.diagbot.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-11-09
+ */
+@Data
+public class SymptomFeatureList implements Serializable {
+
+    /**
+     * 最小组合单元
+     */
+    private String minCombineElement;
+
+    /**
+     * 部位
+     */
+    private List<String> bodyPartList = new ArrayList<>();
+
+    /**
+     * 方位
+     */
+    private List<String> positionList = new ArrayList<>();
+
+    /**
+     * 形状性质
+     */
+    private List<String> shapePropetyList = new ArrayList<>();
+
+    /**
+     * 程度
+     */
+    private List<String> degreeList = new ArrayList<>();
+
+    /**
+     * 颜色
+     */
+    private List<String> colorList = new ArrayList<>();
+
+    /**
+     * 变化
+     */
+    private List<String> varietyList = new ArrayList<>();
+
+    /**
+     * 放射情况
+     */
+    private List<String> radiationSituationList = new ArrayList<>();
+
+    /**
+     * 频率
+     */
+    private List<String> frequencyList = new ArrayList<>();
+}

+ 121 - 0
src/main/java/com/diagbot/facade/TestwordInfoFacade.java

@@ -7,25 +7,34 @@ import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.dto.StandConvertCrfBatchDTO;
 import com.diagbot.dto.StandConvertCrfDTO;
 import com.diagbot.dto.WordCrfDTO;
+import com.diagbot.entity.Ann;
+import com.diagbot.entity.SymptomFeature;
+import com.diagbot.entity.SymptomFeatureList;
 import com.diagbot.entity.TestwordInfo;
 import com.diagbot.entity.TestwordRes;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.SymptomFeatureService;
 import com.diagbot.service.TestwordInfoService;
 import com.diagbot.service.TestwordResService;
 import com.diagbot.service.impl.TestwordInfoServiceImpl;
 import com.diagbot.util.CoreUtil;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.RetrievalVO;
 import com.diagbot.vo.SearchData;
 import com.diagbot.vo.StandConvertCrfVO;
+import com.diagbot.vo.SymptomFeatureVO;
 import com.diagbot.vo.TestwordInfoVO;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.LinkedHashMap;
@@ -54,6 +63,9 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
     @Qualifier("testwordInfoServiceImpl")
     TestwordInfoService testwordInfoService;
     @Autowired
+    @Qualifier("symptomFeatureServiceImpl")
+    SymptomFeatureService symptomFeatureService;
+    @Autowired
     TestFacade testFacade;
     @Autowired
     RetrievalFacade retrievalFacade;
@@ -429,4 +441,113 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
                 .map(r -> (String)CoreUtil.getFieldValue(r, "detailName"))
                 .collect(Collectors.toList());
     }
+
+    /**
+     * 症状生成API
+     *
+     * @param symptomFeatureVO
+     */
+    public void getSymptom(SymptomFeatureVO symptomFeatureVO) {
+        Map<String, SymptomFeatureList> listMap = new LinkedHashMap<>();
+        try {
+            // 1、获取文件目录
+            File[] files = new File(symptomFeatureVO.getPath()).listFiles();
+            for (File file : files) {
+                // 读取以“.ann”结尾的文件
+                if (!file.getName().endsWith(".ann")) {
+                    continue;
+                }
+                // 2、遍历文件
+                List<Ann> annList = new ArrayList<>();
+                FileReader fileReader = new FileReader(file);
+                BufferedReader br = new BufferedReader(fileReader);
+                String line = "";
+
+                // 3、将文件结构化
+                while (StringUtil.isNotBlank(line = br.readLine())) {
+                    String[] arr = line.split(" |\\t");
+                    Ann ann = new Ann();
+                    ann.setId(arr[0]);
+                    ann.setType(arr[1]);
+                    ann.setStart(arr[2]);
+                    ann.setEnd(arr[3]);
+                    ann.setName(arr[4]);
+                    annList.add(ann);
+                }
+                Map<String, List<Ann>> typeEntity = EntityUtil.makeEntityListMap(annList, "type");
+                Map<String, List<Ann>> endMap = EntityUtil.makeEntityListMap(annList, "end");
+
+                // 4、以最小单元为准,读取相关属性
+                List<Ann> symptomList = typeEntity.get("min_combination_unit");
+                for (Ann ann : symptomList) {
+                    String name = ann.getName();
+                    SymptomFeatureList symptomFeatureList = listMap.get(name);
+                    if (symptomFeatureList == null) {
+                        symptomFeatureList = new SymptomFeatureList();
+                        symptomFeatureList.setMinCombineElement(name);
+                    }
+                    String start = ann.getStart();
+                    List<Ann> endList = new ArrayList<>();
+                    while (ListUtil.isNotEmpty(endList = endMap.get(start))) {
+                        Ann annBean = endList.get(0);
+                        start = annBean.getStart();
+                        switch (annBean.getType()) {
+                            case "location": // 部位
+                                setSymptomFeature(symptomFeatureList.getBodyPartList(), annBean.getName());
+                                break;
+                            case "direction": // 方位
+                                setSymptomFeature(symptomFeatureList.getPositionList(), annBean.getName());
+                                break;
+                            case "property": // 形状性质
+                                setSymptomFeature(symptomFeatureList.getShapePropetyList(), annBean.getName());
+                                break;
+                            case "extent": // 程度
+                                setSymptomFeature(symptomFeatureList.getDegreeList(), annBean.getName());
+                                break;
+                            case "color": // 颜色
+                                setSymptomFeature(symptomFeatureList.getColorList(), annBean.getName());
+                                break;
+                            case "change": // 变化
+                                setSymptomFeature(symptomFeatureList.getVarietyList(), annBean.getName());
+                                break;
+                            case "rediate": // 放射情况
+                                setSymptomFeature(symptomFeatureList.getRadiationSituationList(), annBean.getName());
+                                break;
+                            case "frequency": // 频率
+                                setSymptomFeature(symptomFeatureList.getFrequencyList(), annBean.getName());
+                                break;
+                        }
+                    }
+                    listMap.put(name, symptomFeatureList);
+                }
+            }
+            // 5、数据库全部删除
+            symptomFeatureService.remove(new QueryWrapper<>());
+            // 6、批量插入
+            List<SymptomFeature> symptomFeatureList = new ArrayList<>();
+            for (String key : listMap.keySet()) {
+                SymptomFeatureList sf = listMap.get(key);
+                SymptomFeature symptomFeature = new SymptomFeature();
+                symptomFeature.setMinCombineElement(key);
+                symptomFeature.setBodyPart(StringUtils.join(sf.getBodyPartList(), "、"));
+                symptomFeature.setPosition(StringUtils.join(sf.getPositionList(), "、"));
+                symptomFeature.setBodyPart(StringUtils.join(sf.getBodyPartList(), "、"));
+                symptomFeature.setShapePropety(StringUtils.join(sf.getShapePropetyList(), "、"));
+                symptomFeature.setDegree(StringUtils.join(sf.getDegreeList(), "、"));
+                symptomFeature.setColor(StringUtils.join(sf.getColorList(), "、"));
+                symptomFeature.setVariety(StringUtils.join(sf.getVarietyList(), "、"));
+                symptomFeature.setFrequency(StringUtils.join(sf.getFrequencyList(), "、"));
+                symptomFeatureList.add(symptomFeature);
+            }
+            symptomFeatureService.saveBatch(symptomFeatureList);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void setSymptomFeature(List<String> list, String name) {
+        if (!list.contains(name)) {
+            list.add(name);
+        }
+    }
 }

+ 16 - 0
src/main/java/com/diagbot/mapper/SymptomFeatureMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.SymptomFeature;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-11-09
+ */
+public interface SymptomFeatureMapper extends BaseMapper<SymptomFeature> {
+
+}

+ 16 - 0
src/main/java/com/diagbot/service/SymptomFeatureService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.SymptomFeature;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-11-09
+ */
+public interface SymptomFeatureService extends IService<SymptomFeature> {
+
+}

+ 20 - 0
src/main/java/com/diagbot/service/impl/SymptomFeatureServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.SymptomFeature;
+import com.diagbot.mapper.SymptomFeatureMapper;
+import com.diagbot.service.SymptomFeatureService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-11-09
+ */
+@Service
+public class SymptomFeatureServiceImpl extends ServiceImpl<SymptomFeatureMapper, SymptomFeature> implements SymptomFeatureService {
+
+}

+ 23 - 0
src/main/java/com/diagbot/vo/SymptomFeatureVO.java

@@ -0,0 +1,23 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-11-09
+ */
+@Data
+public class SymptomFeatureVO implements Serializable {
+
+    /**
+     * 路径
+     */
+    private String path;
+
+}

+ 10 - 0
src/main/java/com/diagbot/web/TestwordInfoController.java

@@ -3,6 +3,7 @@ package com.diagbot.web;
 
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.TestwordInfoFacade;
+import com.diagbot.vo.SymptomFeatureVO;
 import com.diagbot.vo.TestwordInfoVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -44,4 +45,13 @@ public class TestwordInfoController {
         testwordInfoFacade.wordConvert();
         return RespDTO.onSuc("执行完毕");
     }
+
+    @ApiOperation(value = "症状生成API[zhoutg]",
+            notes = "症状生成API")
+    @PostMapping("/getSymptom")
+    public RespDTO<String> getSymptom(SymptomFeatureVO symptomFeatureVO) {
+        testwordInfoFacade.getSymptom(symptomFeatureVO);
+        return RespDTO.onSuc("执行完毕");
+    }
+
 }

+ 22 - 0
src/main/resources/mapper/SymptomFeatureMapper.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.SymptomFeatureMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.SymptomFeature">
+        <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="min_combine_element" property="minCombineElement" />
+        <result column="body_part" property="bodyPart" />
+        <result column="position" property="position" />
+        <result column="shape_propety" property="shapePropety" />
+        <result column="degree" property="degree" />
+        <result column="color" property="color" />
+        <result column="variety" property="variety" />
+        <result column="radiation_situation" property="radiationSituation" />
+        <result column="frequency" property="frequency" />
+    </resultMap>
+
+</mapper>

+ 2 - 2
src/test/java/com/diagbot/CodeGeneration.java

@@ -54,9 +54,9 @@ public class CodeGeneration {
 
         // 策略配置
         StrategyConfig strategy = new StrategyConfig();
-        strategy.setTablePrefix(new String[] { "demo_" });// 此处可以修改为您的表前缀
+        // strategy.setTablePrefix(new String[] { "demo_" });// 此处可以修改为您的表前缀
         strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
-        strategy.setInclude(new String[] { "demo_testword_info", "demo_testword_res"}); // 需要生成的表
+        strategy.setInclude(new String[] { "symptom_feature"}); // 需要生成的表
 
         strategy.setSuperServiceClass(null);
         strategy.setSuperServiceImplClass(null);