SGTY 5 月之前
父節點
當前提交
7439416412

+ 5 - 7
src/main/java/com/qizhen/healsphere/repository/mapper/KgEdgeMapper.java

@@ -1,10 +1,8 @@
 package com.qizhen.healsphere.repository.mapper;
 
-import com.qizhen.healsphere.repository.mapper.entity.KgEdge;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qizhen.healsphere.repository.mapper.entity.KgEdges;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
 
 /**
  * <p>
@@ -12,8 +10,8 @@ import java.util.List;
  * </p>
  */
 @Mapper
-public interface KgEdgeMapper {
-    // 插入
+public interface KgEdgesMapper extends BaseMapper<KgEdges> {
+/*    // 插入
     int insertKgEdge(KgEdge kgEdge);
 
     // 更新
@@ -25,5 +23,5 @@ public interface KgEdgeMapper {
     KgEdge selectKgEdge(@Param("src_id") Long src_id,@Param("dest_id") Long dest_id,@Param("name") String name);
 
     // 分页查询
-    List<KgEdge> selectKgEdgesByPage(@Param("pageSize") int pageSize, @Param("offset") int offset);
+    List<KgEdge> selectKgEdgesByPage(@Param("pageSize") int pageSize, @Param("offset") int offset);*/
 }

+ 4 - 7
src/main/java/com/qizhen/healsphere/repository/mapper/KgNodeMapper.java

@@ -1,15 +1,12 @@
 package com.qizhen.healsphere.repository.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.qizhen.healsphere.repository.mapper.entity.KgNode;
+import com.qizhen.healsphere.repository.mapper.entity.KgNodes;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
 
 @Mapper
-public interface KgNodeMapper extends BaseMapper<KgNode> {
-    KgNode getKgNode(@Param("name")String name,@Param("category")String category);
+public interface KgNodesMapper extends BaseMapper<KgNodes> {
+    /*KgNode getKgNode(@Param("name")String name,@Param("category")String category);
     // 插入
     int insertKgNode(KgNode kgNode);
 
@@ -20,5 +17,5 @@ public interface KgNodeMapper extends BaseMapper<KgNode> {
     KgNode selectKgNodeById(@Param("id") Long id);
 
     // 分页查询
-    List<KgNode> selectKgNodesByPage(@Param("offset") int offset, @Param("pageSize") int pageSize);
+    List<KgNode> selectKgNodesByPage(@Param("offset") int offset, @Param("pageSize") int pageSize);*/
 }

+ 9 - 0
src/main/java/com/qizhen/healsphere/repository/mapper/KgSchemasMapper.java

@@ -0,0 +1,9 @@
+package com.qizhen.healsphere.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qizhen.healsphere.repository.mapper.entity.KgSchemas;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface KgSchemasMapper extends BaseMapper<KgSchemas> {
+}

+ 0 - 17
src/main/java/com/qizhen/healsphere/repository/mapper/entity/KgEdge.java

@@ -1,17 +0,0 @@
-package com.qizhen.healsphere.repository.mapper.entity;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-public class KgEdge implements Serializable {
-    private Long id;
-    private Long src_id;
-    private Long dest_id;
-    private String name;
-    private Integer status;
-    private String category;
-    private String version;
-
-}

+ 20 - 0
src/main/java/com/qizhen/healsphere/repository/mapper/entity/KgEdges.java

@@ -0,0 +1,20 @@
+package com.qizhen.healsphere.repository.mapper.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class KgEdges implements Serializable {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    private Integer src_id;
+    private Integer dest_id;
+    private String name;
+    private Integer status;
+    private String category;
+    private String version;
+
+}

+ 5 - 2
src/main/java/com/qizhen/healsphere/repository/mapper/entity/KgNode.java

@@ -1,12 +1,15 @@
 package com.qizhen.healsphere.repository.mapper.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
 
 import java.io.Serializable;
 
 @Data
-public class KgNode implements Serializable {
-    private Long id;
+public class KgNodes implements Serializable {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
     private String name;
     private String category;
     private String layout;

+ 18 - 0
src/main/java/com/qizhen/healsphere/repository/mapper/entity/KgSchemas.java

@@ -0,0 +1,18 @@
+package com.qizhen.healsphere.repository.mapper.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class KgSchemas implements Serializable {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    private String name;
+    private String category;
+    private String content;
+    private Integer status;
+    private String version;
+}

+ 4 - 4
src/main/resources/application-test.yml

@@ -1,10 +1,10 @@
 spring:
   datasource:
     hikari:
-      driver-class-name: com.mysql.cj.jdbc.Driver
-      username: root
-      password: dsYun8!@#
-      jdbc-url: jdbc:mysql://173.18.12.194:3306/sys-ltkg?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
+      jdbc-url: jdbc:postgresql://172.16.8.64:5432/postgres
+      driver-class-name: org.postgresql.Driver
+      username: postgres
+      password: 12345678
 
   neo4j:
     uri: bolt://173.18.12.206:7687

+ 4 - 4
src/main/resources/mapper/mysql/KgEdgeMapper.xml

@@ -1,9 +1,9 @@
 <?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.qizhen.healsphere.repository.mapper.KgEdgeMapper">
+<mapper namespace="com.qizhen.healsphere.repository.mapper.KgEdgesMapper">
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.qizhen.healsphere.repository.mapper.entity.KgEdge">
+    <resultMap id="BaseResultMap" type="com.qizhen.healsphere.repository.mapper.entity.KgEdges">
         <id column="id" property="id" />
         <result column="src_id" property="src_id" />
         <result column="dest_id" property="dest_id" />
@@ -14,13 +14,13 @@
     </resultMap>
 
     <!-- 插入 -->
-    <insert id="insertKgEdge" parameterType="com.qizhen.healsphere.repository.mapper.entity.KgEdge">
+    <insert id="insertKgEdge" parameterType="com.qizhen.healsphere.repository.mapper.entity.KgEdges">
         INSERT INTO kg_edge (id, src_id, dest_id, name, status, category, version)
         VALUES (#{id}, #{src_id}, #{dest_id}, #{name}, #{status}, #{category}, #{version})
     </insert>
 
     <!-- 更新 -->
-    <update id="updateKgEdge" parameterType="com.qizhen.healsphere.repository.mapper.entity.KgEdge">
+    <update id="updateKgEdge" parameterType="com.qizhen.healsphere.repository.mapper.entity.KgEdges">
         UPDATE kg_edge
         SET src_id = #{src_id},
             dest_id = #{dest_id},

+ 4 - 4
src/main/resources/mapper/mysql/KgNodeMapper.xml

@@ -1,8 +1,8 @@
 <?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.qizhen.healsphere.repository.mapper.KgNodeMapper">
+<mapper namespace="com.qizhen.healsphere.repository.mapper.KgNodesMapper">
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.qizhen.healsphere.repository.mapper.entity.KgNode">
+    <resultMap id="BaseResultMap" type="com.qizhen.healsphere.repository.mapper.entity.KgNodes">
         <id column="id" property="id" />
         <result column="layout" property="layout" />
         <result column="name" property="name" />
@@ -12,13 +12,13 @@
     </resultMap>
 
     <!-- 插入 -->
-    <insert id="insertKgNode" useGeneratedKeys="true" keyProperty="id" parameterType="com.qizhen.healsphere.repository.mapper.entity.KgNode">
+    <insert id="insertKgNode" useGeneratedKeys="true" keyProperty="id" parameterType="com.qizhen.healsphere.repository.mapper.entity.KgNodes">
         INSERT INTO kg_node (name, category, layout, status, version)
         VALUES (#{name}, #{category}, #{layout}, #{status}, #{version})
     </insert>
 
     <!-- 更新 -->
-    <update id="updateKgNode" parameterType="com.qizhen.healsphere.repository.mapper.entity.KgNode">
+    <update id="updateKgNode" parameterType="com.qizhen.healsphere.repository.mapper.entity.KgNodes">
         UPDATE kg_node
         SET name = #{name},
             category = #{category},

+ 223 - 0
src/test/java/com/qizhen/healsphere/DrugTest10.java

@@ -0,0 +1,223 @@
+package com.qizhen.healsphere;
+
+import com.alibaba.fastjson.JSONArray;
+import com.qizhen.healsphere.common.ai.BaidubceUtil;
+import com.qizhen.healsphere.common.ai.Knowlege;
+import com.qizhen.healsphere.repository.neo4j.entity.BaseEntity;
+import com.qizhen.healsphere.service.EntityService;
+import com.qizhen.healsphere.service.RelationshipService;
+import com.qizhen.healsphere.web.vo.CreateEntityVO;
+import com.qizhen.healsphere.web.vo.RelationshipVO;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+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.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.util.CollectionUtils;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@RunWith(SpringRunner.class)
+@ComponentScan(basePackages = {"com.qizhen.healsphere.model", "com.qizhen.healsphere.repository"})
+@SpringBootTest
+public class DrugTest10 {
+    @Autowired
+    RelationshipService relationshipService;
+    @Autowired
+    EntityService entityService;
+    private static int maxCount= 10;
+    private static String drugExcelPath = "C:\\Users\\17664\\Desktop\\药品说明书-部分字段-部分内容.xlsx";
+    static HSSFWorkbook workbook;
+    static String startLabel = "药品";
+    @Test
+    public void writeNeo4j() throws Exception {
+
+        String propertys = "成分";
+        workbook = new HSSFWorkbook();//这里也可以设置sheet的Name
+        String accessToken = BaidubceUtil.getAccessToken();
+        InputStream drugFis = new FileInputStream(drugExcelPath);
+        Workbook drugWorkbook = new XSSFWorkbook(drugFis);
+        Sheet drugSheet = drugWorkbook.getSheetAt(2);
+        String[] split = propertys.split(",");
+        for(String property:split) {
+            HSSFSheet sheet = workbook.createSheet(property);
+            List<Knowlege> knowleges = saveExecl(property, drugSheet, accessToken, sheet);
+
+            for (Knowlege temp:knowleges) {
+                String value = temp.getValue();
+                if(StringUtils.isBlank(value)){
+                    continue;
+                }
+                try{
+                    JSONArray jsonArray = JSONArray.parseArray(value);
+                    BaseEntity startEntity = createNoExists(startLabel, temp.getEntity());
+                    long startId = startEntity.getId();
+                    List<RelationshipVO> relationshipList = new ArrayList<>();
+                    for(int i=0;i<jsonArray.size();i++){
+                        String name = jsonArray.getString(i);
+                        if(StringUtils.isEmpty(name)){
+                            continue;
+                        }
+                        BaseEntity endEntity =  createNoExists(property, name);
+                        Long endId = endEntity.getId();
+                        RelationshipVO relationshipVO = new RelationshipVO();
+                        relationshipVO.setStartId(startId);
+                        relationshipVO.setEndId(endId);
+                        relationshipVO.setStartLabel(startLabel);
+                        relationshipVO.setEndLabel(property);
+                        relationshipVO.setRelationshipType(startLabel+"相关"+property);
+                        relationshipList.add(relationshipVO);
+                    }
+                    if(!CollectionUtils.isEmpty(relationshipList)) {
+                        System.out.println( relationshipService.createRelationship(relationshipList));
+                    }
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    private BaseEntity createNoExists(String labelName, String name) {
+        BaseEntity nodeByName = entityService.findNodeByName(labelName, name);
+        if(Objects.nonNull(nodeByName)){//节点不存在
+            return nodeByName;
+        }
+        CreateEntityVO createEntity = new CreateEntityVO();
+        createEntity.setName(name);
+        createEntity.setLabel(labelName);
+        return entityService.create(createEntity);
+    }
+
+    public static void main(String[] args) throws Exception {
+        String propertys = "商品名称";
+        workbook = new HSSFWorkbook();//这里也可以设置sheet的Name
+        String accessToken = BaidubceUtil.getAccessToken();
+        InputStream drugFis = new FileInputStream(drugExcelPath);
+        Workbook drugWorkbook = new XSSFWorkbook(drugFis);
+        Sheet drugSheet = drugWorkbook.getSheetAt(2);
+        String[] split = propertys.split(",");
+        for(String property:split) {
+            HSSFSheet sheet = workbook.createSheet(property);
+            saveExecl(property, drugSheet, accessToken, sheet);
+        }
+    }
+
+    private static List<Knowlege> saveExecl(String property, Sheet drugSheet, String accessToken, HSSFSheet sheet) {
+        int curCount = 0;
+        List<Knowlege> result = new ArrayList<>();
+        for (int rowNum = 1; rowNum <= drugSheet.getLastRowNum(); rowNum++) {
+            try {
+                Row row = drugSheet.getRow(rowNum);
+                String name = row.getCell(2).getStringCellValue();
+                String zhaiyao = row.getCell(7).getStringCellValue();
+                if (StringUtils.isEmpty(name) || StringUtils.isEmpty(zhaiyao)) {
+                    continue;
+                }
+
+                String value = getValues(zhaiyao, property, accessToken);
+
+                HSSFRow writeRow = sheet.createRow(curCount);
+                name = (name == null ? "" : name);
+                value = (value == null ? "" : value);
+                writeRow.createCell(0).setCellValue(name);
+                writeRow.createCell(1).setCellValue(value);
+                writeRow.createCell(2).setCellValue(zhaiyao == null ? "" : zhaiyao);
+                if (maxCount > 0) {
+                    curCount++;
+                    if (curCount >= maxCount) {
+                        break;
+                    }
+                }
+                Knowlege knowlege = new Knowlege();
+                knowlege.setEntity(name);
+                knowlege.setProperty(property);
+                knowlege.setValue(value);
+
+                result.add(knowlege);
+
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        save(property);
+        return result;
+    }
+
+    private static String getValues(String zhaiyao, String property, String accessToken) {
+        if (StringUtils.isEmpty(zhaiyao)) {
+            return "";
+        }
+        String format = "你是专门处理医药领域的专家。你将在指定的文本中抽取其中“" + property + "”。\n" +
+                "\n" +
+                "#要求\n" +
+                "1、抽取的结果将以JSON数组的形式呈现。每个抽取的“" + property + "”高度简洁、高度概括,不要要描述性的文字,文字尽量保持在12个字符以内!\n" +
+                "\n" +
+                "#示例1\n" +
+                "以抽取“分期”为例\n" +
+                "文本:\n" +
+                "肱骨骨折如果是**肱骨头坏死**则有Cruess分期,包括I期、Ⅱ期、Ⅲ期、IV期、V期^[1]^。\n" +
+                "\n" +
+                "如果是肱骨近端骨折则有Neer分型和AO分型^[3]^。\n" +
+                "输出:[\"Cruess分期I期\",\"Cruess分期Ⅱ期\",\"Cruess分期Ⅲ期\",\"Cruess分期IV期\",\"Cruess分期V期\"]\n" +
+                "\n" +
+                "#示例2\n" +
+                "以抽取“英文名称”为例\n" +
+                "文本:\n" +
+                "【药品名称】\n" +
+                "通用名称:双氯芬酸钠缓释片\n" +
+                "商品名称:迪根\n" +
+                "英文名称:DiclofenacSodium Sustained Release Tablets\n" +
+                "汉语拼音:ShuanglvfensuannaHuanshiPian\n" +
+                "\n" +
+                "输出:DiclofenacSodium Sustained Release Tablet\n\n"+
+                "2、没有可抽取的“" + property + "”,则返回空json数组。\n" +
+                "\n" +
+                "本次抽取的文本如下:\n\n";
+
+        String zhiling = format + zhaiyao;
+        System.out.println(zhiling);
+        String chatResponse = BaidubceUtil.getChatResponse(zhiling, accessToken);
+        chatResponse = filte(chatResponse);
+        System.out.println(chatResponse);
+        return chatResponse;
+    }
+
+    private static synchronized void save(String fileName) {
+        try {
+            fileName="C:\\Users\\17664\\Desktop\\"+fileName+System.currentTimeMillis()+".xlsx";
+            //文档输出
+            FileOutputStream out = new FileOutputStream(new File(fileName));
+            workbook.write(out);
+            out.close();
+            System.out.println(fileName + "存储完毕");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static String filte(String chatResponse) {
+        if (chatResponse.startsWith("```json")) {
+            chatResponse = chatResponse.substring(7);
+        }
+        if (chatResponse.endsWith("```")) {
+            chatResponse = chatResponse.substring(0, chatResponse.length() - 3);
+        }
+        return chatResponse;
+    }
+
+
+}
+

+ 137 - 0
src/test/java/com/qizhen/healsphere/DrugYfylTest.java

@@ -0,0 +1,137 @@
+package com.qizhen.healsphere;
+
+import com.qizhen.healsphere.common.ai.BaidubceUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+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.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.io.*;
+
+@RunWith(SpringRunner.class)
+@ComponentScan(basePackages = {"com.qizhen.healsphere.model", "com.qizhen.healsphere.repository"})
+@SpringBootTest
+public class DrugYfylTest {
+/*    @Autowired
+    RelationshipService relationshipService;
+    @Autowired
+    EntityService entityService;*/
+    private static int maxCount= 50;
+    private static String drugExcelPath = "C:\\Users\\17664\\Desktop\\药品说明书-部分字段-部分内容.xlsx";
+    static HSSFWorkbook workbook;
+    public static void main(String[] args) throws Exception {
+        workbook = new HSSFWorkbook();//这里也可以设置sheet的Name
+        String accessToken = BaidubceUtil.getAccessToken();
+        InputStream drugFis = new FileInputStream(drugExcelPath);
+        Workbook drugWorkbook = new XSSFWorkbook(drugFis);
+        Sheet drugSheet = drugWorkbook.getSheetAt(2);
+        String propertys = "商品名称";
+        int curCount = 0;
+        String[] split = propertys.split(",");
+        //for (int rowNum = 1; rowNum <= drugSheet.getLastRowNum(); rowNum++) {
+        for(String property:split) {
+            HSSFSheet sheet = workbook.createSheet(property);
+            for (int rowNum = 1; rowNum <= drugSheet.getLastRowNum(); rowNum++) {
+                try {
+                    Row row = drugSheet.getRow(rowNum);
+                    String name = row.getCell(2).getStringCellValue();
+                    String zhaiyao = row.getCell(7).getStringCellValue();
+                    if (StringUtils.isEmpty(name) || StringUtils.isEmpty(zhaiyao)) {
+                        continue;
+                    }
+
+                    String value = getValues(zhaiyao, property, accessToken);
+
+                    HSSFRow writeRow = sheet.createRow(curCount);
+                    writeRow.createCell(0).setCellValue(name == null ? "" : name);
+                    writeRow.createCell(1).setCellValue(value == null ? "" : value);
+                    writeRow.createCell(2).setCellValue(zhaiyao == null ? "" : zhaiyao);
+                    if (maxCount > 0) {
+                        curCount++;
+                        if (curCount >= maxCount) {
+                            break;
+                        }
+                    }
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+            save(property);
+            curCount = 0;
+        }
+    }
+
+    private static String getValues(String zhaiyao, String property, String accessToken) {
+        if (StringUtils.isEmpty(zhaiyao)) {
+            return "";
+        }
+        String format = "你是专门处理医药领域的专家。你将在指定的文本中抽取其中“" + property + "”。\n" +
+                "\n" +
+                "#要求\n" +
+                "1、抽取的结果将以JSON数组的形式呈现。每个抽取的“" + property + "”高度简洁、高度概括,不要要描述性的文字,文字尽量保持在12个字符以内!\n" +
+                "\n" +
+                "#示例1\n" +
+                "以抽取“分期”为例\n" +
+                "文本:\n" +
+                "肱骨骨折如果是**肱骨头坏死**则有Cruess分期,包括I期、Ⅱ期、Ⅲ期、IV期、V期^[1]^。\n" +
+                "\n" +
+                "如果是肱骨近端骨折则有Neer分型和AO分型^[3]^。\n" +
+                "输出:[\"Cruess分期I期\",\"Cruess分期Ⅱ期\",\"Cruess分期Ⅲ期\",\"Cruess分期IV期\",\"Cruess分期V期\"]\n" +
+                "\n" +
+                    "#示例2\n" +
+                    "以抽取“英文名称”为例\n" +
+                    "文本:\n" +
+                    "【药品名称】\n" +
+                "通用名称:双氯芬酸钠缓释片\n" +
+                "商品名称:迪根\n" +
+                "英文名称:DiclofenacSodium Sustained Release Tablets\n" +
+                "汉语拼音:ShuanglvfensuannaHuanshiPian\n" +
+                    "\n" +
+                    "输出:DiclofenacSodium Sustained Release Tablet\n\n"+
+                "2、没有可抽取的“" + property + "”,则返回空json数组。\n" +
+                "\n" +
+                "本次抽取的文本如下:\n\n";
+
+        String zhiling = format + zhaiyao;
+        System.out.println(zhiling);
+        String chatResponse = BaidubceUtil.getChatResponse(zhiling, accessToken);
+        chatResponse = filte(chatResponse);
+        System.out.println(chatResponse);
+        return chatResponse;
+    }
+
+    private static synchronized void save(String fileName) {
+        try {
+            fileName="C:\\Users\\17664\\Desktop\\"+fileName+System.currentTimeMillis()+".xlsx";
+            //文档输出
+            FileOutputStream out = new FileOutputStream(new File(fileName));
+            workbook.write(out);
+            out.close();
+            System.out.println(fileName + "存储完毕");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static String filte(String chatResponse) {
+        if (chatResponse.startsWith("```json")) {
+            chatResponse = chatResponse.substring(7);
+        }
+        if (chatResponse.endsWith("```")) {
+            chatResponse = chatResponse.substring(0, chatResponse.length() - 3);
+        }
+        return chatResponse;
+    }
+
+
+}
+

+ 101 - 47
src/test/java/com/qizhen/healsphere/MigrateDataTest.java

@@ -1,10 +1,13 @@
 package com.qizhen.healsphere;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSON;
-import com.qizhen.healsphere.repository.mapper.KgEdgeMapper;
-import com.qizhen.healsphere.repository.mapper.KgNodeMapper;
-import com.qizhen.healsphere.repository.mapper.entity.KgEdge;
-import com.qizhen.healsphere.repository.mapper.entity.KgNode;
+import com.qizhen.healsphere.repository.mapper.KgEdgesMapper;
+import com.qizhen.healsphere.repository.mapper.KgNodesMapper;
+import com.qizhen.healsphere.repository.mapper.KgSchemasMapper;
+import com.qizhen.healsphere.repository.mapper.entity.KgEdges;
+import com.qizhen.healsphere.repository.mapper.entity.KgNodes;
+import com.qizhen.healsphere.repository.mapper.entity.KgSchemas;
 import com.qizhen.healsphere.repository.neo4j.BaseRelationshipRepository;
 import com.qizhen.healsphere.repository.neo4j.entity.BaseEntity;
 import com.qizhen.healsphere.repository.neo4j.entity.Edge;
@@ -17,67 +20,118 @@ import org.springframework.test.context.junit4.SpringRunner;
 
 import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 @RunWith(SpringRunner.class)
-@ComponentScan(basePackages = {"com.qizhen.healsphere.model","com.qizhen.healsphere.repository"})
+@ComponentScan(basePackages = {"com.qizhen.healsphere"})
 @SpringBootTest
 public class MigrateDataTest {
-    String version = "knowledge_base";
+    String version = "1.1";
     @Autowired
     BaseRelationshipRepository baseRelationshipRepository;
 
     @Autowired
-    KgNodeMapper kgNodeMapper;
+    KgNodesMapper kgNodesMapper;
 
     @Autowired
-    KgEdgeMapper kgEdgeMapper;
+    KgEdgesMapper kgEdgesMapper;
+
+    @Autowired
+    KgSchemasMapper kgSchemasMapper;
+
     @Test
     public void migrateData() {
-        String name = "疾病相关分型分类";
-        String category = "disease-related subtypes";
-        List<Edge> edges = baseRelationshipRepository.triples("疾病",name,"分型分类");
-        for(Edge temp: edges){
-            Long startNodeId = addNode(temp.getStartNode());
-            Long endNodeId = addNode(temp.getStartNode());
-            KgEdge kgEdge = kgEdgeMapper.selectKgEdge(startNodeId, endNodeId, name);
-            if(kgEdge==null){
-                kgEdge = new KgEdge();
-                kgEdge.setSrc_id(startNodeId);
-                kgEdge.setDest_id(endNodeId);
-                kgEdge.setName(name);
-                kgEdge.setCategory(category);
-                kgEdge.setVersion(version);
-                kgEdgeMapper.insertKgEdge(kgEdge);
+        String endLabels = "传播途径,传染源,分期,分类,别称,危险因素,多发季节,常见并发症,并发症,接触者检疫,是否传染病,治疗药物,潜伏期,病因,英文名称,诱因,辅助检查,隔离期,高危人群,高发地区";
+        String[] split = endLabels.split(",");
+        String startLabel = "疾病";
+        for(String endLabel:split) {
+            String relationship = startLabel + "相关" + endLabel;
+            String name = "";
+
+
+            List<Edge> edges = baseRelationshipRepository.triples(startLabel, relationship, endLabel);
+            if (CollectionUtil.isEmpty(edges)) {
+                return;
+            }
+            if ("就诊科室".equals(endLabel)) {
+                name = "所属科室";
+                relationship = "belongs_to";
+            } else if ("症状".equals(endLabel)) {
+                relationship = "has_symptom";
+                name = "症状";
+            } else {
+                name = relationship;
+            }
+            addIfNotExist(endLabel);
+
+            for (Edge temp : edges) {
+                Integer startNodeId = addNode(temp.getStartNode());
+                Integer endNodeId = addNode(temp.getEndNode());
+                if (startNodeId <= 0 || endNodeId <= 0) {
+                    continue;
+                }
+                HashMap<String, Object> columnMap = new HashMap<>();
+                columnMap.put("src_id", startNodeId);
+                columnMap.put("dest_id", endNodeId);
+                columnMap.put("name", name);
+                List<KgEdges> kgEdgesList = kgEdgesMapper.selectByMap(columnMap);
+                if (CollectionUtil.isEmpty(kgEdgesList)) {
+                    KgEdges kgEdges = new KgEdges();
+                    kgEdges.setSrc_id(startNodeId);
+                    kgEdges.setDest_id(endNodeId);
+                    kgEdges.setName(name);
+                    kgEdges.setCategory(relationship);
+                    kgEdges.setVersion(version);
+                    kgEdgesMapper.insert(kgEdges);
+                }
             }
         }
-        System.out.println(JSON.toJSONString(edges));
     }
 
-    private Long addNode(BaseEntity node) {
-        String category = node.getLabel().get(0);
-        if("疾病".equals(category)){
-            category = "Disease";
-        }else if("症状".equals(category)){
-            category = "Symptom";
-        }else if("厂商".equals(category)){
-            category = "Producer";
-        }else if("检查".equals(category)){
-            category = "Check";
-        }else if("药品".equals(category)){
-            category = "Drug";
-        }else if("科室".equals(category)){
-            category = "Department";
-        }else if("食品".equals(category)){
-            category = "Food";
+    private void addIfNotExist(String label){
+        if("就诊科室".equals(label)) {
+            label = "科室";
+        }
+        HashMap<String, Object> columnMap = new HashMap<>();
+        columnMap.put("name", label);
+        List<KgSchemas> kgSchemasList = kgSchemasMapper.selectByMap(columnMap);
+        if(!CollectionUtil.isEmpty(kgSchemasList)) {
+            return;
         }
+        KgSchemas kgSchemas = new KgSchemas();
+        kgSchemas.setName(label);
+        kgSchemas.setCategory(label);
+        kgSchemas.setContent("name");
+        kgSchemas.setVersion(version);
+        kgSchemasMapper.insert(kgSchemas);
+    }
+
+    private Integer addNode(BaseEntity node) {
+        try {
+            String category = node.getLabel().get(0);
+            if("疾病".equals(category)){
+                category = "Disease";
+            }else if("就诊科室".equals(category)){
+                category = "Department";
+            }else if("症状".equals(category)){
+                category = "Symptom";
+            }
+            HashMap<String, Object> columnMap = new HashMap<>();
+            columnMap.put("name", node.getName());
+            columnMap.put("category", category);
+            List<KgNodes> kgNodesList = kgNodesMapper.selectByMap(columnMap);
+            if (!CollectionUtil.isEmpty(kgNodesList)) {
+                return kgNodesList.get(0).getId();
+            }
 
-        KgNode kgNode = kgNodeMapper.getKgNode(node.getName(), category);
-        if(kgNode!=null) {
-            return node.getId();
+            KgNodes kgNodes = new KgNodes();
+            kgNodes.setName(node.getName());
+            kgNodes.setCategory(category);
+            kgNodes.setVersion(version);
+            kgNodesMapper.insert(kgNodes);
+            return kgNodes.getId();
+        }catch (Exception e){
+            e.printStackTrace();
+            return -1;
         }
-        kgNode.setVersion(version);
-        kgNodeMapper.insertKgNode(kgNode);
-        return kgNode.getId();
     }
 }