소스 검색

数据迁移

gaodm 4 년 전
부모
커밋
34273055ca

+ 63 - 0
src/main/java/com/diagbot/config/TransactionAspect.java

@@ -0,0 +1,63 @@
+package com.diagbot.config;
+import org.neo4j.ogm.session.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.DependsOn;
+import org.springframework.context.annotation.Primary;
+import org.springframework.data.neo4j.transaction.Neo4jTransactionManager;
+import org.springframework.data.transaction.ChainedTransactionManager;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionStatus;
+
+import javax.sql.DataSource;
+
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/1/19 12:39
+ */
+@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
+@Configuration
+@DependsOn("sessionFactory")
+public class TransactionAspect {
+
+    ThreadLocal<TransactionStatus> transactionStatusThreadLocal = new ThreadLocal<>();
+
+    /**
+     * 定义mysql事务管理器,必须有transactionManager作为默认事务管理器
+     *
+     * @param dataSource
+     * @return
+     */
+    @Bean("transactionManager")
+    @Primary
+    public DataSourceTransactionManager transactionManager(DataSource dataSource) {
+        return new DataSourceTransactionManager(dataSource);
+    }
+
+    /**
+     * 定义neo4j事务管理器
+     *
+     * @param sessionFactory
+     * @return
+     */
+    @Bean("neo4jTransactionManager")
+    public Neo4jTransactionManager neo4jTransactionManager(SessionFactory sessionFactory) {
+        return new Neo4jTransactionManager(sessionFactory);
+    }
+
+    @Autowired
+    @Bean(name = "multiTransactionManager")
+    public PlatformTransactionManager multiTransactionManager(
+            Neo4jTransactionManager neo4jTransactionManager,
+            DataSourceTransactionManager mysqlTransactionManager) {
+        return new ChainedTransactionManager(
+                neo4jTransactionManager, mysqlTransactionManager);
+    }
+
+}
+
+

+ 3 - 3
src/main/java/com/diagbot/entity/KlRelation.java

@@ -56,7 +56,7 @@ public class KlRelation implements Serializable {
     /**
      * 关系id
      */
-    private Long relationId;
+    private Integer relationId;
 
     /**
      * 关系终点术语id
@@ -117,11 +117,11 @@ public class KlRelation implements Serializable {
     public void setStartId(Long startId) {
         this.startId = startId;
     }
-    public Long getRelationId() {
+    public Integer getRelationId() {
         return relationId;
     }
 
-    public void setRelationId(Long relationId) {
+    public void setRelationId(Integer relationId) {
         this.relationId = relationId;
     }
     public Long getEndId() {

+ 54 - 3
src/main/java/com/diagbot/facade/ExportFacade.java

@@ -1,16 +1,21 @@
 package com.diagbot.facade;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.entity.KlConceptCommon;
 import com.diagbot.entity.KlDisease;
 import com.diagbot.entity.KlLibraryInfo;
+import com.diagbot.entity.KlRelation;
 import com.diagbot.entity.node.ExportNode;
+import com.diagbot.entity.node.ExportRelation;
+import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.repository.ExportNodeRepository;
 import com.diagbot.repository.ExportRelationRepository;
 import com.diagbot.service.KlConceptCommonService;
 import com.diagbot.service.KlConceptService;
 import com.diagbot.service.KlDiseaseService;
 import com.diagbot.service.KlLibraryInfoService;
+import com.diagbot.service.KlRelationService;
 import com.diagbot.util.Cn2SpellUtil;
 import com.diagbot.util.EntityUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,12 +44,12 @@ public class ExportFacade {
     private KlConceptCommonService klConceptCommonService;
     @Autowired
     private KlDiseaseService klDiseaseService;
+    @Autowired
+    private KlRelationService klRelationService;
 
-    public Boolean gdbExport() {
+    public Boolean gdbExportNode() {
         //图谱数据节点处理
         graphNodeDeal();
-        //图谱关系处理
-        graphRelationDeal();
         return true;
     }
 
@@ -193,7 +198,53 @@ public class ExportFacade {
         }
     }
 
+    public Boolean gdbExportRelation() {
+        //图谱关系处理
+        graphRelationDeal();
+        return true;
+    }
+
     private void graphRelationDeal() {
+        List<KlConcept> klConcepts
+                = klConceptService.list(new QueryWrapper<KlConcept>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+        );
+        Map<String, KlConcept> map
+                = EntityUtil.makeEntityMapByKeys(klConcepts, "_", "libName", "libType");
+        //药品化学物质类别树形结构
+        List<ExportRelation> exportRelations = exportRelationRepository.getDrugRelationA();
+        import2MySqlR(exportRelations, 301, 101, map);
+        //药品治疗学类别树形结构
+        exportRelations.clear();
+        exportRelations = exportRelationRepository.getDrugRelationB();
+        import2MySqlR(exportRelations, 302, 101, map);
+        //药品药理学类别树形结构
+        exportRelations.clear();
+        exportRelations = exportRelationRepository.getDrugRelationC();
+        import2MySqlR(exportRelations, 303, 101, map);
+        //药品解剖学类别树形结构
+        exportRelations.clear();
+        exportRelations = exportRelationRepository.getDrugRelationD();
+        import2MySqlR(exportRelations, 304, 101, map);
+        //实验室检查类别树形结构
+        exportRelations.clear();
+        exportRelations = exportRelationRepository.getLisRelation();
+        import2MySqlR(exportRelations, 107, 108, map);
+        //辅助检查类别树形结构
+        exportRelations.clear();
+        exportRelations = exportRelationRepository.getPacsRelation();
+        import2MySqlR(exportRelations, 109, 110, map);
+    }
 
+    private void import2MySqlR(List<ExportRelation> exportRelations, Integer stype, Integer etype, Map<String, KlConcept> map) {
+        List<KlRelation> klRelations = new ArrayList<>();
+        for (ExportRelation exportRelation : exportRelations) {
+            KlRelation klRelation = new KlRelation();
+            klRelation.setStartId(map.get(exportRelation.getSname() + "_" + stype).getId());
+            klRelation.setEndId(map.get(exportRelation.getEname() + "_" + etype).getId());
+            klRelation.setRelationId(600);
+            klRelations.add(klRelation);
+        }
+        klRelationService.saveBatch(klRelations);
     }
 }

+ 21 - 21
src/main/java/com/diagbot/repository/ExportNodeRepository.java

@@ -10,66 +10,66 @@ import java.util.List;
 
 public interface ExportNodeRepository extends Neo4jRepository<ExportNodeInfo, Long> {
 
-    @Query("MATCH (n:`医保疾病名称`)-[]->(m:`医保ICD_10代码`)RETURN distinct n.name as name ,case when n.sex is not null then n.sex else '3' end as sex,case when n.age is not null then n.age else '0-200' end as ageRange,m.name as icd10Code")
+    @Query("MATCH (n:`医保疾病名称`)-[]->(m:`医保ICD_10代码`)RETURN distinct trim(n.name) as name ,case when n.sex is not null then n.sex else '3' end as sex,case when n.age is not null then n.age else '0-200' end as ageRange,trim(m.name) as icd10Code")
     List<ExportNode> getDisease();
 
-    @Query("MATCH (n:`药品通用名称`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`药品通用名称`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getDrug();
 
-    @Query("match (n:药品通用名称)<-[r]-(m:药品代码通用名)-[r1]->(o:药品注册名称) return distinct(m.注册剂型) as name")
+    @Query("match (n:药品通用名称)<-[r]-(m:药品代码通用名)-[r1]->(o:药品注册名称) return distinct(trim(m.注册剂型)) as name")
     List<ExportNode> getDrugForm();
 
-    @Query("MATCH (n:`症状`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`症状`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getSymptom();
 
-    @Query("MATCH (n:`体征`) where id(n) > 470000 RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`体征`) where id(n) > 470000 RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getVital();
 
-    @Query("MATCH (n:`医保手术和操作名称`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`医保手术和操作名称`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getOeration();
 
-    @Query("MATCH (n:`实验室检查套餐名`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`实验室检查套餐名`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getLisPackage();
 
-    @Query("MATCH (n:`实验室检查名称`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`实验室检查名称`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getLisItem();
 
-    @Query("MATCH (n:`辅助检查名称`)  RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`辅助检查名称`)  RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getPacs();
 
-    @Query("MATCH (n:`辅助检查子项目名称`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`辅助检查子项目名称`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getPacsSubItem();
 
-    @Query("MATCH (n:`辅助检查名称描述`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`辅助检查名称描述`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getPacsDesc();
 
-    @Query("MATCH (n:`辅助检查名称结果`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`辅助检查名称结果`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getPacsResult();
 
-    @Query("MATCH (n:输血提醒指标) return distinct(n.输注类型) as name")
+    @Query("MATCH (n:输血提醒指标) return distinct(trim(n.输注类型)) as name")
     List<ExportNode> getTransfusion();
 
-    @Query("MATCH (n:`科室`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`科室`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getDept();
 
-    @Query("MATCH (n:`性别`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`性别`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getSex();
 
-    @Query("MATCH (n:`过敏原`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`过敏原`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getAllergen();
 
-    @Query("MATCH (n:`禁忌医疗器械及物品`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`禁忌医疗器械及物品`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getApparatus();
 
-    @Query("MATCH (n:`药品化学物质类别`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`药品化学物质类别`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getDrugTypeA();
 
-    @Query("MATCH (n:`药品治疗学类别`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`药品治疗学类别`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getDrugTypeB();
 
-    @Query("MATCH (n:`药品药理学类别`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`药品药理学类别`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getDrugTypeC();
 
-    @Query("MATCH (n:`药品解剖学类别`) RETURN distinct(n.name) as name")
+    @Query("MATCH (n:`药品解剖学类别`) RETURN distinct(trim(n.name)) as name")
     List<ExportNode> getDrugTypeD();
 }

+ 6 - 6
src/main/java/com/diagbot/repository/ExportRelationRepository.java

@@ -10,21 +10,21 @@ import java.util.List;
 
 public interface ExportRelationRepository extends Neo4jRepository<ExportRelationInfo, Long> {
 
-    @Query("MATCH (c:药品化学物质类别)<-[r:药品相关药品化学物质类别]-(y:药品代码通用名)-[r1:药品相关药品通用名称]->(m:药品通用名称)  RETURN DISTINCT c.name as sname,m.name as ename")
+    @Query("MATCH (c:药品化学物质类别)<-[r:药品相关药品化学物质类别]-(y:药品代码通用名)-[r1:药品相关药品通用名称]->(m:药品通用名称)  RETURN DISTINCT trim(c.name) as sname,trim(m.name) as ename")
     List<ExportRelation> getDrugRelationA();
 
-    @Query("MATCH (c:药品治疗学类别)<-[r:药品相关药品治疗学类别]-(y:药品代码通用名)-[r1:药品相关药品通用名称]->(m:药品通用名称)  RETURN DISTINCT c.name as sname,m.name as ename")
+    @Query("MATCH (c:药品治疗学类别)<-[r:药品相关药品治疗学类别]-(y:药品代码通用名)-[r1:药品相关药品通用名称]->(m:药品通用名称)  RETURN DISTINCT trim(c.name) as sname,trim(m.name) as ename")
     List<ExportRelation> getDrugRelationB();
 
-    @Query("MATCH (c:药品药理学类别)<-[r:药品相关药品药理学类别]-(y:药品代码通用名)-[r1:药品相关药品通用名称]->(m:药品通用名称)  RETURN DISTINCT c.name as sname,m.name as ename")
+    @Query("MATCH (c:药品药理学类别)<-[r:药品相关药品药理学类别]-(y:药品代码通用名)-[r1:药品相关药品通用名称]->(m:药品通用名称)  RETURN DISTINCT trim(c.name) as sname,trim(m.name) as ename")
     List<ExportRelation> getDrugRelationC();
 
-    @Query("MATCH (c:药品解剖学类别)<-[r:药品相关药品解剖学类别]-(y:药品代码通用名)-[r1:药品相关药品通用名称]->(m:药品通用名称)  RETURN DISTINCT c.name as sname,m.name as ename")
+    @Query("MATCH (c:药品解剖学类别)<-[r:药品相关药品解剖学类别]-(y:药品代码通用名)-[r1:药品相关药品通用名称]->(m:药品通用名称)  RETURN DISTINCT trim(c.name) as sname,trim(m.name) as ename")
     List<ExportRelation> getDrugRelationD();
 
-    @Query("MATCH (n:`实验室检查套餐名`)<-[r:实验室检查名称相关实验室检查套餐名]-(m:`实验室检查名称`)RETURN distinct n.name as sname ,m.name as ename")
+    @Query("MATCH (n:`实验室检查套餐名`)<-[r:实验室检查名称相关实验室检查套餐名]-(m:`实验室检查名称`) RETURN DISTINCT trim(n.name) as sname,trim(m.name) as ename")
     List<ExportRelation> getLisRelation();
 
-    @Query("MATCH (n:`辅助检查名称`)-[r:辅助检查名称包含辅助检查子项目名称]->(m:`辅助检查子项目名称`)RETURN distinct n.name as sname ,m.name as ename")
+    @Query("MATCH (n:`辅助检查名称`)-[r:辅助检查名称包含辅助检查子项目名称]->(m:`辅助检查子项目名称`) RETURN DISTINCT trim(n.name) as sname,trim(m.name) as ename")
     List<ExportRelation> getPacsRelation();
 }

+ 11 - 4
src/main/java/com/diagbot/web/ExportController.java

@@ -22,10 +22,17 @@ public class ExportController {
     @Autowired
     private ExportFacade exportFacade;
 
-    @ApiOperation(value = "图谱数据迁移[gaodm]",
+    @ApiOperation(value = "图谱数据节点迁移[gaodm]",
             notes = "")
-    @PostMapping("/gdbExport")
-    public RespDTO<Boolean> gdbExport() {
-        return RespDTO.onSuc(exportFacade.gdbExport());
+    @PostMapping("/gdbExportNode")
+    public RespDTO<Boolean> gdbExportNode() {
+        return RespDTO.onSuc(exportFacade.gdbExportNode());
+    }
+
+    @ApiOperation(value = "图谱数据关系迁移[gaodm]",
+            notes = "")
+    @PostMapping("/gdbExportRelation")
+    public RespDTO<Boolean> gdbExportRelation() {
+        return RespDTO.onSuc(exportFacade.gdbExportRelation());
     }
 }