فهرست منبع

Merge remote-tracking branch 'origin/beilun/dev' into beilun/master

# Conflicts:
#	dbanaly/src/main/resources/application-local.yml
wangsy 4 سال پیش
والد
کامیت
325c94b517
100فایلهای تغییر یافته به همراه7387 افزوده شده و 56 حذف شده
  1. 3 1
      dbanaly/pom.xml
  2. 36 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/config/CacheInit.java
  3. 171 1
      dbanaly/src/main/java/com/lantone/qc/dbanaly/config/RedisConfig.java
  4. 6 1
      dbanaly/src/main/java/com/lantone/qc/dbanaly/controller/DbController.java
  5. 87 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/comsis/DataExtractFacade.java
  6. 31 3
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/comsis/ModuleHelper.java
  7. 6 3
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/comsis/XmlDataAnalysisFacade.java
  8. 1 1
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/shaoyf/ShaoyfXmlUtil.java
  9. 5 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/taizhou/TzXmlUtil.java
  10. 587 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/YiWuFirstPageRecordXmlUtil.java
  11. 51 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/YiWuXmlDataAnalysisFacade.java
  12. 150 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/YiWuXmlUtil.java
  13. 7 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/AKeyedNamed.java
  14. 48 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/BehospitalWayEnum.java
  15. 48 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/BloodTypeEnum.java
  16. 45 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/DiagnoseTypeEnum.java
  17. 43 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/IsMedAllergyEnum.java
  18. 47 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/LeaveHospitalTypeEnum.java
  19. 46 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/MarriageEnum.java
  20. 45 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/RHEnum.java
  21. 43 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/SexEnum.java
  22. 147 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/util/MapUtil.java
  23. 187 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/util/YWDateUtils.java
  24. 84 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/ywzxyy/YwzxyyXmlUtil.java
  25. 117 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Clinic.java
  26. 90 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Concept.java
  27. 84 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/ConceptRelation.java
  28. 119 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Disease.java
  29. 131 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Drug.java
  30. 84 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/EntityInfo.java
  31. 102 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/LibraryInfo.java
  32. 101 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Lis.java
  33. 106 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Operation.java
  34. 95 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Pacs.java
  35. 90 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/RelationInfo.java
  36. 54 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/RelevantFeature.java
  37. 78 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Symptom.java
  38. 23 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/facade/CacheFacade.java
  39. 57 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/facade/ClinicFacade.java
  40. 29 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/facade/LibraryInfoFacade.java
  41. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/ClinicMapper.java
  42. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/ConceptMapper.java
  43. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/ConceptRelationMapper.java
  44. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/DiseaseMapper.java
  45. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/DrugMapper.java
  46. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/EntityInfoMapper.java
  47. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/LibraryInfoMapper.java
  48. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/LisMapper.java
  49. 5 1
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/ModuleInfoMapper.java
  50. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/OperationMapper.java
  51. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/PacsMapper.java
  52. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/RelationInfoMapper.java
  53. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/RelevantFeatureMapper.java
  54. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/SymptomMapper.java
  55. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/ClinicService.java
  56. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/ConceptRelationService.java
  57. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/ConceptService.java
  58. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/DiseaseService.java
  59. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/DrugService.java
  60. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/EntityInfoService.java
  61. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/LibraryInfoService.java
  62. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/LisService.java
  63. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/OperationService.java
  64. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/PacsService.java
  65. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/RelationInfoService.java
  66. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/RelevantFeatureService.java
  67. 16 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/SymptomService.java
  68. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/ClinicServiceImpl.java
  69. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/ConceptRelationServiceImpl.java
  70. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/ConceptServiceImpl.java
  71. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/DiseaseServiceImpl.java
  72. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/DrugServiceImpl.java
  73. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/EntityInfoServiceImpl.java
  74. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/LibraryInfoServiceImpl.java
  75. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/LisServiceImpl.java
  76. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/OperationServiceImpl.java
  77. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/PacsServiceImpl.java
  78. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/RelationInfoServiceImpl.java
  79. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/RelevantFeatureServiceImpl.java
  80. 20 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/SymptomServiceImpl.java
  81. 30 1
      dbanaly/src/main/java/com/lantone/qc/dbanaly/util/ModuleMappingUtil.java
  82. 5 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/util/SpecialStorageUtil.java
  83. 19 9
      dbanaly/src/main/resources/application-debug.yml
  84. 18 9
      dbanaly/src/main/resources/application-dev.yml
  85. 8 8
      dbanaly/src/main/resources/application-local.yml
  86. 17 9
      dbanaly/src/main/resources/application-master.yml
  87. 17 9
      dbanaly/src/main/resources/application-test.yml
  88. 3247 0
      dbanaly/src/main/resources/cityCode.json
  89. 5 0
      dbanaly/src/main/resources/mapper/lt/ClinicMapper.xml
  90. 5 0
      dbanaly/src/main/resources/mapper/lt/ConceptMapper.xml
  91. 5 0
      dbanaly/src/main/resources/mapper/lt/ConceptRelationMapper.xml
  92. 5 0
      dbanaly/src/main/resources/mapper/lt/DiseaseMapper.xml
  93. 5 0
      dbanaly/src/main/resources/mapper/lt/DrugMapper.xml
  94. 5 0
      dbanaly/src/main/resources/mapper/lt/EntityInfoMapper.xml
  95. 5 0
      dbanaly/src/main/resources/mapper/lt/LibraryInfoMapper.xml
  96. 5 0
      dbanaly/src/main/resources/mapper/lt/LisMapper.xml
  97. 11 0
      dbanaly/src/main/resources/mapper/lt/ModuleInfoMapper.xml
  98. 5 0
      dbanaly/src/main/resources/mapper/lt/OperationMapper.xml
  99. 5 0
      dbanaly/src/main/resources/mapper/lt/PacsMapper.xml
  100. 0 0
      dbanaly/src/main/resources/mapper/lt/RelationInfoMapper.xml

+ 3 - 1
dbanaly/pom.xml

@@ -127,7 +127,9 @@
             <resource>
                 <directory>src/main/resources</directory>
                 <includes>
-                    <include>*.yml</include>
+                    <include>**/*.yml</include>
+                    <include>**/*.xml</include>
+                    <include>**/*.json</include>
                 </includes>
             </resource>
         </resources>

+ 36 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/config/CacheInit.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.dbanaly.config;
+
+import com.lantone.qc.dbanaly.lt.facade.CacheFacade;
+import com.lantone.qc.dbanaly.lt.facade.ClinicFacade;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: 项目启动后初始化缓存
+ * @author: HUJING
+ * @time: 2020/5/13 11:20
+ */
+@Component //把类交给spring容器管理
+@Order(100)  //使用order属性,设置该类在spring容器中的加载顺序
+@Slf4j
+public class CacheInit implements CommandLineRunner {
+
+    @Autowired
+    CacheFacade cacheFacade;
+
+    @Autowired
+    ClinicFacade clinicFacade;
+
+    @Override
+    public void run(String... args) throws Exception {
+        // 服务启动清除redis缓存
+        cacheFacade.clear();
+        // 服务启动生成redis缓存
+        clinicFacade.getClinicInfo();
+
+        log.info("病历质控系统缓存启动初始化成功!");
+    }
+}

+ 171 - 1
dbanaly/src/main/java/com/lantone/qc/dbanaly/config/RedisConfig.java

@@ -8,20 +8,190 @@ package com.lantone.qc.dbanaly.config;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.PropertyAccessor;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.annotation.CachingConfigurerSupport;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.cache.interceptor.KeyGenerator;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+import org.springframework.data.redis.cache.RedisCacheManager;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
+import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
+import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
+import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializationContext;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
 
 import java.net.UnknownHostException;
+import java.time.Duration;
 
 
 @Configuration
-public class RedisConfig {
+@EnableCaching
+@Slf4j
+public class RedisConfig extends CachingConfigurerSupport {
+    @Value("${spring.redis.database.cache}")
+    private String databaseCache;
+    @Value("${spring.redis.database.token}")
+    private String databaseMr;
+    @Value("${spring.redis.host}")
+    private String host;
+    @Value("${spring.redis.password}")
+    private String password;
+    @Value("${spring.redis.port}")
+    private int port;
+    @Value("${spring.redis.timeout}")
+    private int timeout;
+    @Value("${spring.redis.lettuce.pool.max-active}")
+    private int maxActive;
+    @Value("${spring.redis.lettuce.pool.max-idle}")
+    private int maxIdle;
+    @Value("${spring.redis.lettuce.pool.max-wait}")
+    private long maxWaitMillis;
+    @Value("${spring.redis.lettuce.pool.min-idle}")
+    private int minIdle;
+
+    @Autowired
+    @Qualifier("factoryForCache")
+    private LettuceConnectionFactory lettuceConnectionFactory;
+
+    @Bean
+    public GenericObjectPoolConfig getRedisConfig() {
+        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
+        poolConfig.setMaxTotal(maxActive);
+        poolConfig.setMaxIdle(maxIdle);
+        poolConfig.setMaxWaitMillis(maxWaitMillis);
+        poolConfig.setMinIdle(minIdle);
+        return poolConfig;
+    }
+
+    @Bean
+    @Override
+    public CacheManager cacheManager() {
+        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
+                // 设置 key为string序列化
+                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
+                // 设置value为json序列化
+                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(getSerializer()))
+                // 不缓存空值
+                .disableCachingNullValues();
+        RedisCacheManager cacheManager = RedisCacheManager.builder(lettuceConnectionFactory)
+                .cacheDefaults(redisCacheConfiguration)
+                .transactionAware()
+                .build();
+        cacheManager.afterPropertiesSet();
+        log.info("RedisCacheManager config success");
+        return cacheManager;
+    }
+
+    @Bean(name = "springSessionDefaultRedisSerializer")
+    public GenericJackson2JsonRedisSerializer getGenericJackson2JsonRedisSerializer() {
+        return new GenericJackson2JsonRedisSerializer();
+    }
+
+    /**
+     * 缓存使用的redis
+     *
+     * @return
+     */
+    @Bean(name = "factoryForCache")
+    @Primary
+    public LettuceConnectionFactory redisConnectionFactory() {
+        return getRedisConnectionFactory(Integer.valueOf(databaseCache));
+    }
+
+    @Bean
+    public RedisTemplate<String, Object> redisTemplate() {
+        return getRedisTemplate(lettuceConnectionFactory);
+    }
+
+    private Jackson2JsonRedisSerializer getSerializer() {
+        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
+        ObjectMapper om = new ObjectMapper();
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(om);
+        return jackson2JsonRedisSerializer;
+    }
+
+    @Bean
+    @Override
+    public KeyGenerator keyGenerator() {
+        //  设置自动key的生成规则,配置spring boot的注解,进行方法级别的缓存
+        // 使用:进行分割,可以很多显示出层级关系
+        // 这里其实就是new了一个KeyGenerator对象
+        return (target, method, params) -> {
+            StringBuilder sb = new StringBuilder();
+            sb.append(target.getClass().getName());
+            sb.append(":");
+            sb.append(method.getName());
+            for (Object obj : params) {
+                sb.append(":" + String.valueOf(obj));
+            }
+            String rsToUse = String.valueOf(sb);
+            log.info("自动生成Redis Key -> [{}]", rsToUse);
+            return rsToUse;
+        };
+    }
+
+    /**
+     * Token使用的redis
+     *
+     * @return
+     */
+    @Bean(name = "factoryForToken")
+    public LettuceConnectionFactory redisConnectionFactoryForToken() {
+        return getRedisConnectionFactory(Integer.valueOf(databaseMr));
+    }
+
+    @Bean(name = "redisTemplateForToken")
+    public RedisTemplate<String, Object> redisTemplateForToken(@Qualifier("factoryForToken") LettuceConnectionFactory factory) {
+        return getRedisTemplate(factory);
+    }
+
+
+    private LettuceConnectionFactory getRedisConnectionFactory(Integer database) {
+        RedisStandaloneConfiguration connection = new RedisStandaloneConfiguration();
+        connection.setHostName(host);
+        connection.setPort(port);
+        connection.setPassword(password);
+        connection.setDatabase(database);
+        GenericObjectPoolConfig poolConfig = getRedisConfig();
+        LettuceClientConfiguration builder = LettucePoolingClientConfiguration.builder()
+                .commandTimeout(Duration.ofMillis(timeout))
+                .poolConfig(poolConfig)
+                .shutdownTimeout(Duration.ZERO)
+                .build();
+        LettuceConnectionFactory factory = new LettuceConnectionFactory(connection, builder);
+        return factory;
+    }
+
+    private RedisTemplate<String, Object> getRedisTemplate(LettuceConnectionFactory factory) {
+        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
+        redisTemplate.setConnectionFactory(factory);
+
+        // value值的序列化
+        redisTemplate.setValueSerializer(getSerializer());
+        redisTemplate.setHashValueSerializer(getSerializer());
+        // key的序列化采用StringRedisSerializer
+        redisTemplate.setKeySerializer(new StringRedisSerializer());
+        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+        redisTemplate.afterPropertiesSet();
+        return redisTemplate;
+    }
 
     @Bean
     @ConditionalOnMissingBean(name = "redisTemplate")

+ 6 - 1
dbanaly/src/main/java/com/lantone/qc/dbanaly/controller/DbController.java

@@ -6,7 +6,7 @@ import com.lantone.qc.dbanaly.facade.comsis.ModuleHelper;
 import com.lantone.qc.dbanaly.facade.comsis.RedisFacade;
 import com.lantone.qc.dbanaly.facade.shaoyf.ShaoyfXmlDataAnalysisFacade;
 import com.lantone.qc.dbanaly.facade.taizhou.TaiZhouXmlDataAnalysisFacade;
-import com.lantone.qc.dbanaly.util.RedisUtil;
+import com.lantone.qc.dbanaly.facade.yiwu.YiWuXmlDataAnalysisFacade;
 import com.lantone.qc.dbanaly.vo.AnalyzeXmlVO;
 import com.lantone.qc.dbanaly.vo.CrfCacheRemoveVO;
 import com.lantone.qc.pub.res.Response;
@@ -41,6 +41,8 @@ public class DbController {
     @Autowired
     private ShaoyfXmlDataAnalysisFacade shaoyfXmlDataAnalysisFacade;
     @Autowired
+    private YiWuXmlDataAnalysisFacade yiWuXmlDataAnalysisFacade;
+    @Autowired
     private RedisFacade redisFacade;
 
     @ApiOperation(value = "模板信息加载")
@@ -61,12 +63,15 @@ public class DbController {
             msgList.addAll(changxXmlDataAnalysisFacade.analyzeXml(analyzeXmlVO.getModeIds()));
             msgList.addAll(shaoyfXmlDataAnalysisFacade.analyzeXml(analyzeXmlVO.getModeIds()));
             msgList.addAll(taiZhouXmlDataAnalysisFacade.analyzeXml(analyzeXmlVO.getModeIds()));
+            msgList.addAll(yiWuXmlDataAnalysisFacade.analyzeXml(analyzeXmlVO.getModeIds()));
         } else if (hospitalId == 1) {
             msgList = changxXmlDataAnalysisFacade.analyzeXml(analyzeXmlVO.getModeIds());
         } else if (hospitalId == 2) {
             msgList = shaoyfXmlDataAnalysisFacade.analyzeXml(analyzeXmlVO.getModeIds());
         } else if (hospitalId == 3) {
             msgList = taiZhouXmlDataAnalysisFacade.analyzeXml(analyzeXmlVO.getModeIds());
+        } else if (hospitalId == 5) {
+            msgList = yiWuXmlDataAnalysisFacade.analyzeXml(analyzeXmlVO.getModeIds());
         }
         response.setData(msgList);
         return response;

+ 87 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/comsis/DataExtractFacade.java

@@ -0,0 +1,87 @@
+package com.lantone.qc.dbanaly.facade.comsis;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.lantone.qc.dbanaly.facade.changx.CxXmlUtil;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.dbanaly.lt.entity.MedicalRecord;
+import com.lantone.qc.dbanaly.lt.entity.MedicalRecordContent;
+import com.lantone.qc.dbanaly.lt.service.impl.MedicalRecordContentServiceImpl;
+import com.lantone.qc.dbanaly.lt.service.impl.MedicalRecordServiceImpl;
+import com.lantone.qc.pub.util.EncrypDES;
+import com.lantone.qc.pub.util.FileUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @author: rengb
+ * @time: 2020/8/26 9:56
+ */
+@Component
+public class DataExtractFacade {
+    @Autowired
+    private MedicalRecordServiceImpl medicalRecordService;
+    @Autowired
+    private MedicalRecordContentServiceImpl medicalRecordContentService;
+
+    public void extractCrfNeedData() throws Exception {
+        EncrypDES encrypDES = new EncrypDES();
+
+        long hospid = 3l;
+        long modid = 1l;
+        QueryWrapper<MedicalRecord> medicalRecordQueryWrapper = new QueryWrapper<>();
+        medicalRecordQueryWrapper.eq("hospital_id", hospid);
+        medicalRecordQueryWrapper.eq("mode_id", 1l);
+        medicalRecordQueryWrapper.select("rec_id,behospital_code");
+        List<MedicalRecord> medicalRecordList = medicalRecordService.list(medicalRecordQueryWrapper);
+
+        for (MedicalRecord medicalRecord : medicalRecordList) {
+            QueryWrapper<MedicalRecordContent> medicalRecordContentQueryWrapper = new QueryWrapper<>();
+            medicalRecordContentQueryWrapper.eq("hospital_id", hospid);
+            medicalRecordContentQueryWrapper.eq("rec_id", medicalRecord.getRecId());
+            medicalRecordContentQueryWrapper.select("xml_text");
+            MedicalRecordContent medicalRecordContent = medicalRecordContentService.getOne(medicalRecordContentQueryWrapper);
+            if (medicalRecordContent != null && StringUtil.isNotBlank(medicalRecordContent.getXmlText())) {
+                String dexml = encrypDES.decryptor(medicalRecordContent.getXmlText());
+                if (StringUtil.isNotBlank(dexml)) {
+                    Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(dexml);
+                    String result = sourceMap.get("专科检查");
+                    if (StringUtil.isNotBlank(result)) {
+                        FileUtil.fileWrite("C:\\Users\\Administrator\\Desktop\\专科检查\\台州", medicalRecord.getBehospitalCode(), result);
+                    }
+                }
+            }
+        }
+    }
+
+    private String concatString(String item) {
+        if (StringUtil.isBlank(item)) {
+            return "";
+        } else {
+            return item + "。";
+        }
+    }
+
+    private String concatSpecialCheck(Map<String, String> sourceMap) {
+        return concatString(sourceMap.get("一般情况")) +
+                concatString(sourceMap.get("皮肤情况")) +
+                concatString(sourceMap.get("淋巴")) +
+                concatString(sourceMap.get("头部检查")) +
+                concatString(sourceMap.get("颈部")) +
+                concatString(sourceMap.get("胸部检查")) +
+                concatString(sourceMap.get("肺部检查")) +
+                concatString(sourceMap.get("心脏检查")) +
+                concatString(sourceMap.get("血管")) +
+                concatString(sourceMap.get("腹部检查")) +
+                concatString(sourceMap.get("外生殖器")) +
+                concatString(sourceMap.get("直肠肛门")) +
+                concatString(sourceMap.get("四肢脊柱检查")) +
+                concatString(sourceMap.get("神经系统检查")) +
+                concatString(sourceMap.get("其他说明"));
+    }
+
+}

+ 31 - 3
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/comsis/ModuleHelper.java

@@ -53,16 +53,21 @@ public class ModuleHelper {
     public boolean loadModuleInfo() {
         try {
             List<String> xmlDataTypeHospitalIds = Lists.newArrayList("1", "2", "3");
+            List<String> htmlDataTypeHospitalIds = Lists.newArrayList("4", "5");
             for (String hospitalId : hospitalIds.split(",")) {
-                if (!xmlDataTypeHospitalIds.contains(hospitalId)) {
-                    continue;
+                loadStandardModule(hospitalId);
+                if (xmlDataTypeHospitalIds.contains(hospitalId)) {
+                    loadModuleInfoByHospitalId(hospitalId);
+                } else if (htmlDataTypeHospitalIds.contains(hospitalId)) {
+                    loadHtmlModuleInfoByHospitalId(hospitalId);
                 }
-                loadModuleInfoByHospitalId(hospitalId);
             }
             return true;
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             ModuleMappingUtil.xmlDataTypeModuleInfo.clear();
+            ModuleMappingUtil.htmlDataTypeModuleInfo.clear();
+            ModuleMappingUtil.standardModuleInfo.clear();
             return false;
         }
     }
@@ -113,4 +118,27 @@ public class ModuleHelper {
         ModuleMappingUtil.xmlDataTypeModuleInfo.put(hospitalId, result);
     }
 
+    private void loadHtmlModuleInfoByHospitalId(String hospitalId) {
+        Map<String, String> result = Maps.newHashMap();
+        List<String> list = moduleInfoService.getBaseMapper().getAnameModidMap(Long.parseLong(hospitalId));
+        list.forEach(i -> {
+            String[] arry = i.split("=");
+            result.put(arry[0], arry[1]);
+        });
+        ModuleMappingUtil.htmlDataTypeModuleInfo.put(hospitalId, result);
+    }
+
+    private void loadStandardModule(String hospitalId) {
+        Map<String, String> result = Maps.newHashMap();
+        QueryWrapper<ModuleInfo> moduleInfoQe = new QueryWrapper<>();
+        moduleInfoQe.eq("is_deleted", "N");
+        moduleInfoQe.eq("default_module", 1);
+        moduleInfoQe.eq("hospital_id", Long.parseLong(hospitalId));
+        Map<Long, List<ModuleInfo>> modeIdMsMap = moduleInfoService.list(moduleInfoQe).stream().collect(Collectors.groupingBy(i -> i.getModeId()));
+        modeIdMsMap.keySet().forEach(key -> {
+            result.put(key + "", modeIdMsMap.get(key).get(0).getId() + "");
+        });
+        ModuleMappingUtil.standardModuleInfo.put(hospitalId, result);
+    }
+
 }

+ 6 - 3
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/comsis/XmlDataAnalysisFacade.java

@@ -7,6 +7,7 @@ import com.google.common.collect.Sets;
 import com.lantone.qc.dbanaly.facade.changx.CxXmlUtil;
 import com.lantone.qc.dbanaly.facade.shaoyf.ShaoyfXmlUtil;
 import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import com.lantone.qc.dbanaly.facade.yiwu.YiWuXmlUtil;
 import com.lantone.qc.dbanaly.lt.entity.Abnormal;
 import com.lantone.qc.dbanaly.lt.entity.BehospitalInfo;
 import com.lantone.qc.dbanaly.lt.entity.MedicalRecord;
@@ -280,11 +281,11 @@ public class XmlDataAnalysisFacade {
         List<Map.Entry<Set<String>, String>> ret = Lists.newArrayList();
 
         QueryWrapper<MedicalRecord> medicalRecordQe = new QueryWrapper<>();
-        medicalRecordQe.eq("hospital_id",hospitalId);
-        medicalRecordQe.in("rec_id",recIds);
+        medicalRecordQe.eq("hospital_id", hospitalId);
+        medicalRecordQe.in("rec_id", recIds);
         MedicalRecord medicalRecord = new MedicalRecord();
         medicalRecord.setStatus(1);
-        medicalRecordService.update(medicalRecord,medicalRecordQe);
+        medicalRecordService.update(medicalRecord, medicalRecordQe);
 
         //根据文书记录id集合,找出文书内容,有的文书记录可能没有对应文书内容,如果文书的xml是加密过的,还需要解密
         QueryWrapper<MedicalRecordContent> medicalRecordContentQe = new QueryWrapper<>();
@@ -334,6 +335,8 @@ public class XmlDataAnalysisFacade {
             keys.addAll(ShaoyfXmlUtil.getXmlToMap(xml).keySet());
         } else if (hospitalId == 3) {
             keys.addAll(TzXmlUtil.getXmlToMapForTZ(xml).keySet());
+        } else if (hospitalId == 5) {
+            keys.addAll(YiWuXmlUtil.xmlToMap(xml).keySet());
         }
         if (keys.size() > 0) {
             if (StringUtil.isNotBlank(sex)) {

+ 1 - 1
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/shaoyf/ShaoyfXmlUtil.java

@@ -44,7 +44,7 @@ public class ShaoyfXmlUtil {
                     if (StringUtil.isBlank(text)) {
                         retMap.put(ename, setnomark);
                     } else {
-                        retMap.put(ename, text);
+                        retMap.put(ename, text + setnomark);
                     }
                 }
             }

+ 5 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/taizhou/TzXmlUtil.java

@@ -40,6 +40,11 @@ public class TzXmlUtil {
                 setnomark = setnomark == null ? "" : setnomark;
                 setnomark = setnomark.trim().replaceAll("&nbsp;", "");
                 text = emrTermElement.getStringValue().trim().replaceAll("&nbsp;", "");
+                /* 台州查房类别个性化处理 */
+                if ("查房类别".equals(ename) && StringUtil.isNotBlank(setnomark) && StringUtil.isNotBlank(text)){
+                    retMap.put(ename, text + setnomark);
+                    continue;
+                }
                 if (StringUtil.isBlank(retMap.get(ename))) {
                     if (StringUtil.isBlank(text)) {
                         retMap.put(ename, setnomark);

+ 587 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/YiWuFirstPageRecordXmlUtil.java

@@ -0,0 +1,587 @@
+package com.lantone.qc.dbanaly.facade.yiwu;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.BehospitalWayEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.BloodTypeEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.DiagnoseTypeEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.IsMedAllergyEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.LeaveHospitalTypeEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.MarriageEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.RHEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.enums.SexEnum;
+import com.lantone.qc.dbanaly.facade.yiwu.util.MapUtil;
+import com.lantone.qc.dbanaly.facade.yiwu.util.YWDateUtils;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.util.FastJsonUtils;
+import com.lantone.qc.pub.util.FileUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import springfox.documentation.spring.web.json.Json;
+
+import java.util.*;
+
+/**
+ * @Description: xml解析工具
+ * @author: rengb
+ * @time: 2020/3/28 14:23
+ */
+public class YiWuFirstPageRecordXmlUtil {
+
+    public static final Map<String, String> CITY_MAP = MapUtil.getMap("cityCode.json");
+    public static Map<String, String> leaveDiagMap = ImmutableMap.<String, String>builder()
+            .put("出院诊断", "诊断名称")
+            .put("出院诊断编码", "诊断编码")
+            .put("出院诊断_入院病情", "入院情况")
+            .put("诊断类型", "出院情况")
+            .build();
+
+    public static Map<String, String> operationMap = ImmutableMap.<String, String>builder()
+            .put("手术名称", "手术名称")
+            .put("手术开始日期", "手术日期")
+            .put("手术切口愈合等级", "愈合等级")
+            .put("手术及操作编码", "手术编码")
+            .put("手术级别", "手术级别")
+            .put("手术切口等级", "切口等级")
+            .put("主刀医师", "手术医生ID")
+            .put("Ⅰ助姓名", "一助医生ID")
+            .put("Ⅱ助姓名", "二助医生ID")
+            .put("麻醉方式", "麻醉方式")
+            .put("麻醉医师签名", "麻醉医师")
+            .build();
+
+    public static Map<String, Object> process(String xml) {
+        Map<String, Object> sourceMap = xmlToMap(xml);
+        Map<String, Object> structureMap = mapKeyContrast(sourceMap, keyContrasts);
+        newbornAge(structureMap);
+        Map<String, Object> structureExtMap = Maps.newHashMap();
+        structureExtMap.putAll(structureMap);
+        JSONArray leaveDiags = new JSONArray();
+        specialProcess(structureMap, leaveDiagMap, leaveDiags);
+        structureExtMap.put("出院诊断", leaveDiags);
+
+        JSONArray operations = new JSONArray();
+        specialProcess(structureMap, operationMap, operations);
+        structureExtMap.put("手术信息", operations);
+        structureExtMap = processToValue(structureExtMap);
+        return structureExtMap;
+    }
+
+    //新生儿年龄处理
+    public static void newbornAge(Map<String, Object> structureMap) {
+        if (structureMap != null && structureMap.size() > 0) {
+            String text = structureMap.get("原始文本").toString();
+            if (StringUtil.isNotBlank(text) && text.contains("年龄 Value1") && text.contains("新生儿出生体重克")) {
+                String substring = text.substring(text.indexOf("年龄 Value1"), text.indexOf("新生儿出生体重克"));
+                String[] split = substring.split(",");
+                if (split.length > 1) {
+                    if (split[0].contains("=") && split[0].indexOf("=") + 1 <= split[0].length()) {
+                        structureMap.put("新生儿出生月数", split[0].substring(split[0].indexOf("=") + 1));
+                    }
+                    if (split[1].contains("=") && split[1].indexOf("=") + 1 <= split[1].length()) {
+                        structureMap.put("新生儿出生天数", split[1].substring(split[1].indexOf("=") + 1));
+                    }
+                }
+            }
+        }
+    }
+
+    public static Map<String, Object> xmlToMap(String xml) {
+        Map<String, Object> map = Maps.newHashMap();
+        Map<String, Object> IDsMap = Maps.newHashMap();
+        List<String> list = new ArrayList<>();
+        try {
+            Document doc = DocumentHelper.parseText(xml);
+            Element root = (Element) doc.selectSingleNode("//XTextDocument/XElements/Element[@xsi:type='XTextBody']/XElements");
+            findElement(root, "XInputField").forEach(i -> {
+                xInputField(map, i, null, IDsMap);
+            });
+            findElement(root, "XTextTable").forEach(tableElement -> {
+                String tablePreTxt = getElementPreVal(tableElement);
+                findElement(tableElement.element("XElements"), "XTextTableRow").forEach(rowElement -> {
+                    findElement(rowElement.element("XElements"), "XTextTableCell").forEach(cellElement -> {
+                        List<Element> xTextTable = findElement(cellElement.element("XElements"), "XTextTable");
+                        if (xTextTable.size() > 0) {
+                            xTextTable.forEach(stableElement -> {
+                                Element idElement = stableElement.element("ID");
+                                String textTrim = "";
+                                if (idElement != null) {
+                                    textTrim = idElement.getTextTrim();
+                                }
+                                list.add(textTrim);
+                                String stablePreTxt = getElementPreVal(stableElement);
+                                findElement(stableElement.element("XElements"), "XTextTableRow").forEach(srowElement -> {
+                                    findElement(srowElement.element("XElements"), "XTextTableCell").forEach(scellElement -> {
+                                        findElement(scellElement.element("XElements"), "XInputField").forEach(xInputFieldElement -> {
+                                            xInputField(map, xInputFieldElement, stablePreTxt, IDsMap);
+                                        });
+                                    });
+                                });
+                            });
+                        } else {
+                            findElement(cellElement.element("XElements"), "XInputField").forEach(xInputFieldElement -> {
+                                xInputField(map, xInputFieldElement, tablePreTxt, IDsMap);
+                            });
+                            findElement(cellElement.element("XElements"), "XTextRadioBox").forEach(xTextRadioBoxElement -> {
+                                xInputField(map, xTextRadioBoxElement, tablePreTxt, IDsMap);
+                            });
+                        }
+                    });
+                });
+            });
+            Element bodyTextElement = (Element) doc.selectSingleNode("//XTextDocument/BodyText");
+            String bodyText = bodyTextElement.getText();
+            map.put("原始文本", bodyText);
+            saveLocationID(map, IDsMap, list);
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.clear();
+        }
+        //        map.keySet().forEach(key -> {
+        //            System.out.println(key + "----" + map.get(key));
+        //        });
+        return map;
+    }
+
+    //存储定位ID
+    public static void saveLocationID(Map<String, Object> map, Map<String, Object> IDsMap, List<String> list) {
+        JSONObject object = new JSONObject();
+        Map<String, Object> structureMap = mapKeyContrast(IDsMap, keyContrasts);
+        if (list.size() > 2) {
+            object.put("诊断", list.get(0));
+            object.put("手术", list.get(1));
+            object.put("重症监护", list.get(2));
+        }
+
+        for (Map.Entry<String, Object> entry : structureMap.entrySet()) {
+            object.put(entry.getKey(), entry.getValue());
+        }
+        map.put("IDs", object);
+    }
+
+    public static List<Element> findElement(Element element, String attual) {
+        List<Element> ret = Lists.newArrayList();
+        ((List<Element>) (element.elements())).forEach(i -> {
+            if (StringUtil.isNotBlank(i.attributeValue("type")) && i.attributeValue("type").equals(attual)) {
+                ret.add(i);
+            }
+        });
+        return ret;
+    }
+
+    public static void xInputField(Map<String, Object> map, Element xInputFieldElement, String tablePreTxt, Map<String, Object> IDsMap) {
+        String value = getXInputFieldValue(xInputFieldElement);
+        if (value == null) {
+            return;
+        }
+        String key = getXInputFieldKey(xInputFieldElement, tablePreTxt);
+        if (StringUtil.isNotBlank(key)) {
+            if (map.containsKey(key)) {
+                value = map.get(key) + " " + value;
+            }
+            map.put(key, value);
+        }
+        Boolean flag = getID(xInputFieldElement, tablePreTxt, IDsMap);
+        if (flag) {
+            return;
+        }
+    }
+
+    public static Boolean getID(Element xInputFieldElement, String tablePreTxt, Map<String, Object> IDsMap) {
+        String id = "";
+        Element idValueElement = xInputFieldElement.element("ID");
+        Element checkedElement = xInputFieldElement.element("Checked");
+        Element checkedValueElement = xInputFieldElement.element("CheckedValue");
+        if (idValueElement != null) {
+            id = idValueElement.getTextTrim();
+        }
+        String key = getXInputFieldKey(xInputFieldElement, tablePreTxt);
+        if (StringUtil.isNotBlank(key)) {
+            IDsMap.put(key, id);
+            if (checkedElement != null && checkedValueElement != null) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    //获取 XInputField 的键
+    private static String getXInputFieldKey(Element xInputFieldElement, String tablePreTxt) {
+        String key = null;
+        String[] elementNames = {"Name", "BackgroundText", "ToolTip"};
+        for (String elementName : elementNames) {
+            key = xInputFieldElement.elementTextTrim(elementName);
+            if (StringUtil.isNotBlank(key)) {
+                break;
+            }
+        }
+        if (StringUtil.isBlank(key)) {
+            key = getElementPreVal(xInputFieldElement);
+        }
+        if (StringUtil.isBlank(key)) {
+            key = tablePreTxt;
+        }
+        if (StringUtil.isBlank(key)) {
+            key = "病历内容";
+        }
+        return keyHandle(key);
+    }
+
+    //获取 XInputField 的值
+    private static String getXInputFieldValue(Element xInputFieldElement) {
+        String value = null;
+        Element innerValueElement = xInputFieldElement.element("InnerValue");
+        Element checkedElement = xInputFieldElement.element("Checked");
+        Element checkedValueElement = xInputFieldElement.element("CheckedValue");
+        if (innerValueElement != null) {
+            value = innerValueElement.getTextTrim();
+        } else if (checkedElement != null && checkedValueElement != null) {
+            value = checkedValueElement.getTextTrim();
+        }
+        if (StringUtil.isBlank(value)) {
+            Element xElementsElement = xInputFieldElement.element("XElements");
+            if (xElementsElement != null) {
+                List<Element> elements = findElement(xElementsElement, "XString");
+                if (elements.size() > 0) {
+                    value = "";
+                    for (Element element : elements) {
+                        Element text = element.element("Text");
+                        if (text != null) {
+                            value += text.getTextTrim();
+                        }
+                    }
+                }
+            }
+        }
+        if (StringUtil.isBlank(value)) {
+            innerValueElement = xInputFieldElement.element("BackgroundText");
+            if (innerValueElement != null) {
+                value = innerValueElement.getTextTrim();
+            }
+        }
+        if (StringUtil.isBlank(value)) {
+            value = "";
+        }
+        return value;
+    }
+
+    //获取前面文本信息作为key
+    private static String getElementPreVal(Element xInputFieldElement) {
+        String ret = "";
+        List<Element> sonElements = xInputFieldElement.getParent().elements();
+        int index = sonElements.indexOf(xInputFieldElement);
+        for (int i = index - 1; i >= 0; i--) {
+            Element sonElement = sonElements.get(i);
+            if (sonElement.attributeValue("type").equals("XTextTable") || sonElement.attributeValue("type").equals("XInputField")) {
+                break;
+            }
+            if (sonElement.attributeValue("type").equals("XString")) {
+                ret = sonElement.elementTextTrim("Text") + ret;
+            }
+        }
+        return ret;
+    }
+
+    //针对key的一些特殊处理
+    private static String keyHandle(String key) {
+        key = StringUtil.isBlank(key) ? key : key.replaceAll("[\\s\\p{Zs}]", "");
+        return key.replaceAll("[::]", "");
+    }
+
+    /**
+     * 根据给定key映射
+     *
+     * @param sourceMap
+     * @param keyContrasts
+     * @return
+     */
+    public static Map<String, Object> mapKeyContrast(Map<String, Object> sourceMap, List<String> keyContrasts) {
+        Map<String, Object> retMap = Maps.newHashMap();
+        mapKeyContrastCommon(sourceMap, keyContrasts, retMap);
+        return retMap;
+    }
+
+    public static void mapKeyContrastCommon(Map sourceMap, List<String> keyContrasts, Map<String, Object> retMap) {
+        Map<String, String> sourceMap_ = MapUtil.copyMap(sourceMap);
+        String[] arry = null;
+        String sourceKey = null, targetKey;
+        Set<String> removeKey = new HashSet<>();
+        for (String keyContrast : keyContrasts) {
+            arry = keyContrast.split("=");
+            sourceKey = arry[0];
+            if (arry.length == 1) {
+                targetKey = arry[0];
+            } else {
+                targetKey = arry[1];
+            }
+            if (StringUtil.isNotBlank(sourceMap_.get(sourceKey))
+                    && (!retMap.containsKey(targetKey) || retMap.get(targetKey) != null)) {
+                retMap.put(targetKey, sourceMap_.get(sourceKey));
+            }
+            removeKey.add(sourceKey);
+            //            sourceMap_.remove(sourceKey); // 如果直接remove,多个标准key对应xml中同一个key就会出问题
+        }
+        //        retMap.putAll(sourceMap_); //如果key相同会覆盖之前的值,存在bug
+        Set<String> keySet = retMap.keySet();
+        for (String key : sourceMap_.keySet()) {
+            if (!keySet.contains(key) && !removeKey.contains(key)) { // 如果之前已放过key就不用放了
+                retMap.put(key, sourceMap_.get(key));
+            }
+        }
+    }
+
+    /**
+     * 特殊处理病案首页中出院诊断、手术
+     *
+     * @param structureMap
+     * @param leaveDiagMap
+     * @param array
+     */
+    public static void specialProcess(Map<String, Object> structureMap, Map<String, String> leaveDiagMap, JSONArray array) {
+        JSONObject object;
+        int num = 0;
+        try {
+            for (Map.Entry<String, String> entry : leaveDiagMap.entrySet()) {
+                if (structureMap.containsKey(entry.getKey())) {
+                    String value = structureMap.get(entry.getKey()).toString();
+                    value = removeUseless(value);
+                    String[] values = value.split(" ");
+                    if (num == 0) {
+                        for (String v : values) {
+                            object = new JSONObject();
+                            object.put(entry.getValue(), v);
+                            array.add(object);
+                        }
+                    } else {
+                        boolean flag = false;
+                        if ("诊断类型".equals(entry.getKey()) && values[0].contains("诊断") && array.size() > 0) {
+                            array.getJSONObject(0).put("诊断类别", values[0].replace(":", ""));
+                            flag = true;
+                        }
+                        for (int i = 0; i < array.size(); i++) {
+                            if (flag) {
+                                array.getJSONObject(i).put(entry.getValue(), values[i + 1]);
+                            } else {
+                                array.getJSONObject(i).put(entry.getValue(), values[i]);
+                            }
+                        }
+                    }
+                }
+                num++;
+            }
+        } catch (Exception e) {
+            e.getMessage();
+        }
+    }
+
+    /**
+     * 去除末尾没用的“ -”或“ -”
+     *
+     * @param value
+     * @return
+     */
+    public static String removeUseless(String value) {
+        while (value.endsWith(" -") || value.endsWith(" -")) {
+            value = value.substring(0, value.length() - 2);
+        }
+        return value.replace(" -", "");
+    }
+
+    public static void main(String[] args) {
+        //        xmlToMap(FileUtil.fileRead("C:\\Users\\Administrator\\Desktop\\义务\\jiexi\\n5.xml"));
+        String xml = FileUtil.fileRead("C:\\Users\\lantone\\Desktop\\病案首页xml解析问题\\病案首页xml解析问题\\出院诊断和实习医师未解析成功.xml");
+//        String xml = "";
+        Map<String, Object> ret = process(xml);
+        String iDs = ret.get("IDs").toString();
+        ret.put("IDs", FastJsonUtils.getJsonToBean(iDs, Object.class));
+        System.out.println(ret);
+    }
+
+    private static List<String> keyContrasts = Lists.newArrayList(
+            "过敏源=过敏药物",
+            "患者姓名=姓名",
+            "出院日期=出院时间",
+            "颅脑损伤患者入院后昏迷时间_天=颅脑损伤患者昏迷后天数",
+            "耗材类_检查用一次性医用材料费=检查用一次性医用材料费",
+            "联系人电话号码=联系人电话",
+            "入院途径=入院途径",
+            "婚姻状况=婚姻",
+            "入院科室=入院科别",
+            "治疗类_非手术治疗项目费=非手术治疗项目费",
+            "转科科别=转科科别",
+            "Rh血型=Rh",
+            "住院总费用_自付金额=自付金额",
+            "诊断符合情况_术前与术后=术前与术后",
+            "出院科室=出院科别",
+            "康复类_康复费=康复类",
+            "户口地址邮编=户口地址邮编",
+            "病案质量=病案质量",
+            "质控护士=质控护士",
+            "离院方式=离院方式",
+            "诊断符合情况_入院与出院=入院与出院",
+            "住院医师=住院医师",
+            "联系人姓名=联系人姓名",
+            "中医治疗费=中医治疗费",
+            "诊断符合情况_门诊与住院=门诊与住院",
+            "入院病房=入院病房",
+            "质控日期=质控日期",
+            "医疗机构代码=",
+            "颅脑损伤患者入院前昏迷时间_天=颅脑损伤患者昏迷前天数",
+            "治疗类_手术治疗费_麻醉费=麻醉费",
+            "婴儿年龄=",
+            "职业=职业",
+            "户口地址_其它=户口地址其它",
+            "出院病房=出院病房",
+            "综合医疗服务类_一般治疗操作费=一般治疗服务费",
+            "质控医师=质控医师",
+            "西药类_西药费=西药费",
+            "现住址_市=",
+            "病理诊断编码=病理诊断编码",
+            "责任护士111=责任护士",
+            "出院31天内再住院目的=再住院目的",
+            "现住址_省=",
+            "损伤中毒外部因素编码=损伤中毒因素编码",
+            "诊断类_影像学诊断费=影像学诊断费",
+            "体重11111=体重",
+            "转入医疗机构科室=接收机构名称",
+            "中药类_中成药费=中成药费",
+            "身份证件号码=身份证号",
+            "入院日期=入院时间",
+            "进修医师=进修医师",
+            "治疗类_手术治疗费=手术治疗费",
+            "血液和血液制品类_血费=血费",
+            "治疗类_手术治疗费_手术费=手术治疗费",
+            "血液和血液制品类_球蛋白类制品费=球蛋白类制品费",
+            "病理诊断=病理诊断",
+            "出院31天内再住院计划=三十一天内再住院计划",
+            "血液和血液制品类_凝血因子类制品费=凝血因子类制品费",
+            "工作单位电话=工作单位电话",
+            "药物过敏标志=药物过敏",
+            "联系电话=现住址电话",
+            "损伤中毒外部因素=损伤中毒因素",
+            "诊断类_实验室诊断费=实验室诊断费",
+            "年龄新=新生儿年龄",
+            "诊断类_临床诊断项目费=临床诊断项目费",
+            "耗材类_治疗用一次性医用材料费=治疗用一次性医用材料费",
+            "诊断符合情况_临床与病理=临床与病理",
+            "诊断类_病理诊断费=病理诊断费",
+            "其他类_其他费=其他类其他费",
+            "患者工作单位地址=工作单位",
+            "死亡患者尸检标志=死亡患者尸检",
+            "现住址_其它=现住址其它",
+            "血液和血液制品类_白蛋白类制品费=白蛋白类制品费",
+            "综合医疗服务类_其他费用=其他费用",
+            "医疗付费方式代码=",
+            "医疗付费方式=",
+            "综合医疗服务类_护理费=护理费",
+            "(副)主任11=",
+            "住院总费用=总费用",
+            "门诊诊断=门急诊诊断",
+            "主治医生AAA=",
+            "现住址邮编=现住址邮编",
+            "颅脑损伤患者入院前昏迷时间_分=颅脑损伤患者昏迷前分钟",
+            "西药类_西药费_抗菌药物费用=抗菌药物费用",
+            "新生儿出生体重=新生儿出生体重",
+            "民族=民族",
+            "颅脑损伤患者入院后昏迷时间_时=颅脑损伤患者昏迷后小时",
+            "住院天数=实际住院天数",
+            "耗材类_手术用一次性医用材料费=手术用一次性医用材料费",
+            "ABO血型=血型",
+            "颅脑损伤患者入院前昏迷时间_时=颅脑损伤患者昏迷前小时",
+            "联系人住址=联系人地址",
+            "综合医疗服务类_一般医疗服务费=一般医疗服务费",
+            "血液和血液制品类_细胞因子类制品费=细胞因子类制品费",
+            "编码员=编码员",
+            "治疗类_非手术治疗项目费_临床物理治疗费=临床物理治疗费",
+            "颅脑损伤患者入院后昏迷时间_分=颅脑损伤患者昏迷后分钟",
+            "住院次数=",
+            "性别=性别",
+            "诊断符合情况_放射与病理=放射与病理",
+            "转入医疗机构_乡镇社区=接收机构名称",
+            "病案号=",
+            "中药类_中草药费=中草药费",
+            "出生日期=出生日期",
+            "联系人关系=联系人关系",
+            "科主任222=科主任",
+            "实习医师=实习医师",
+            "国籍=国籍",
+            "工作单位邮政编码=工作单位邮编",
+            "进修医师=进修医师",
+            "出院主要诊断=出院诊断"
+    );
+
+    public static Map<String, Object> processToValue(Map<String, Object> map) {
+
+        String[] provinceList = String.valueOf(map.get("省")).split(" ");
+        String[] cityList = String.valueOf(map.get("市")).split(" ");
+        String[] areaList = String.valueOf(map.get("县")).split(" ");
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("性别")))) {
+            map.put("性别", SexEnum.getName(String.valueOf(map.get("性别"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("婚姻")))) {
+            map.put("婚姻", MarriageEnum.getName(String.valueOf(map.get("婚姻"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("入院途径")))) {
+            //入院途径,1:急诊,2:门诊,3:其他医疗机构,9:其他
+            map.put("入院途径", BehospitalWayEnum.getName(String.valueOf(map.get("入院途径")).split(" ")[0]));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("血型")))) {
+            map.put("血型", BloodTypeEnum.getName(String.valueOf(map.get("血型"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("Rh")))) {
+            map.put("Rh", RHEnum.getName(String.valueOf(map.get("Rh"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("离院方式")))) {
+            map.put("离院方式", LeaveHospitalTypeEnum.getName(String.valueOf(map.get("离院方式"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("门诊与住院")))) {
+            map.put("门诊与住院", DiagnoseTypeEnum.getName(String.valueOf(map.get("门诊与住院"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("入院与出院")))) {
+            map.put("入院与出院", DiagnoseTypeEnum.getName(String.valueOf(map.get("入院与出院"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("术前与术后")))) {
+            map.put("术前与术后", DiagnoseTypeEnum.getName(String.valueOf(map.get("术前与术后"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("临床与病理")))) {
+            map.put("临床与病理", DiagnoseTypeEnum.getName(String.valueOf(map.get("临床与病理"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("放射与病理")))) {
+            map.put("放射与病理", DiagnoseTypeEnum.getName(String.valueOf(map.get("放射与病理"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("药物过敏")))) {
+            map.put("药物过敏", IsMedAllergyEnum.getName(String.valueOf(map.get("药物过敏"))));
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("三十一天内再住院计划")))) {
+            map.put("三十一天内再住院计划", IsMedAllergyEnum.getName(String.valueOf(map.get("三十一天内再住院计划"))));
+        }
+        if (provinceList.length > 0) {
+            if (provinceList[0].length() > 1) {
+                map.put("出生地", CITY_MAP.get(provinceList[0]) + CITY_MAP.get(cityList[0]) + CITY_MAP.get(areaList[0]));
+            }
+            if (provinceList[1].length() > 1) {
+                map.put("户口地址", CITY_MAP.get(provinceList[1]) + CITY_MAP.get(cityList[1]) + CITY_MAP.get(areaList[1]) + map.get("户口地址其它"));
+            }
+        }
+        if (StringUtil.isNotEmpty(String.valueOf(map.get("籍贯_省")).replaceAll("[\u4e00-\u9fa5]", ""))) {
+            map.put("籍贯", CITY_MAP.get(map.get("籍贯_省")) + CITY_MAP.get(map.get("籍贯_市")));
+        }
+        map.put("现住址", CITY_MAP.get(map.get("现住址_省")) + CITY_MAP.get(map.get("现住址_市")) + CITY_MAP.get(map.get("现住址_县")) + map.get("现住址其它"));
+        if (StringUtil.isEmpty(String.valueOf(map.get("出生日期")).replaceAll("[\u4e00-\u9fa5]", "").trim())) {
+            map.put("出生日期", "");
+        }
+        if (!YWDateUtils.isDate(String.valueOf(map.get("入院时间")), "yyyy年MM月dd日 HH时mm分")) {
+            map.put("入院日期", "");
+        }
+        if (!YWDateUtils.isDate(String.valueOf(map.get("出院时间")), "yyyy年MM月dd日 HH时mm分")) {
+            map.put("出院时间", "");
+        }
+        return map;
+    }
+
+}

+ 51 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/YiWuXmlDataAnalysisFacade.java

@@ -0,0 +1,51 @@
+package com.lantone.qc.dbanaly.facade.yiwu;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.comsis.XmlDataAnalysisFacade;
+import com.lantone.qc.dbanaly.lt.facade.ModeFacade;
+import com.lantone.qc.pub.util.ListUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @author: rengb
+ * @time: 2020/6/3 16:44
+ */
+@Slf4j
+@Component
+public class YiWuXmlDataAnalysisFacade {
+    @Autowired
+    private XmlDataAnalysisFacade xmlDataAnalysisFacade;
+    @Autowired
+    private ModeFacade modeFacade;
+
+    public List<String> analyzeXml(List<Long> modeIds) {
+        List<String> retList = Lists.newArrayList();
+        if (ListUtil.isEmpty(modeIds)) {
+            modeIds = Arrays.asList(1l, 2l, 3l, 4l, 5l, 7l, 8l, 9l, 10l, 11l, 17l, 18l, 19l, 22l, 23l, 24l, 25l, 26l, 27l, 28l, 29l, 30l, 31l, 32l, 34l, 35l);
+        }
+        Map<Long, String> modeMap = modeFacade.getModeMap();
+        List<String> recTitles = null;
+        String modeName = null;
+        for (Long modeId : modeIds) {
+            recTitles = xmlDataAnalysisFacade.getRecTitles(5l, modeId);
+            modeName = modeMap.get(modeId);
+            for (String recTitle : recTitles) {
+                try {
+                    xmlDataAnalysisFacade.analysisByRecTitle(5l, modeId, modeName, recTitle, null, "");
+                } catch (Exception e) {
+                    retList.add("[台州-" + modeId + "-" + recTitle + "]执行失败");
+                    log.error("[台州-" + modeId + "-" + recTitle + "]执行失败--" + e.getMessage(), e);
+                }
+            }
+        }
+        return retList;
+    }
+
+}

+ 150 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/YiWuXmlUtil.java

@@ -0,0 +1,150 @@
+package com.lantone.qc.dbanaly.facade.yiwu;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.lantone.qc.pub.util.FileUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: xml解析工具
+ * @author: rengb
+ * @time: 2020/3/28 14:23
+ */
+public class YiWuXmlUtil {
+
+    public static Map<String, String> xmlToMap(String xml) {
+        Map<String, String> map = Maps.newHashMap();
+        try {
+            Document doc = DocumentHelper.parseText(xml);
+            Element root = (Element) doc.selectSingleNode("//XTextDocument/XElements/Element[@xsi:type='XTextBody']/XElements");
+            findElement(root, "XInputField").forEach(i -> {
+                xInputField(map, i, null);
+            });
+            findElement(root, "XTextTable").forEach(tableElement -> {
+                String tablePreTxt = getElementPreVal(tableElement);
+                findElement(tableElement.element("XElements"), "XTextTableRow").forEach(rowElement -> {
+                    findElement(rowElement.element("XElements"), "XTextTableCell").forEach(cellElement -> {
+                        findElement(cellElement.element("XElements"), "XInputField").forEach(xInputFieldElement -> {
+                            xInputField(map, xInputFieldElement, tablePreTxt);
+                        });
+                    });
+                });
+            });
+            Element bodyTextElement = (Element) doc.selectSingleNode("//XTextDocument/BodyText");
+            String bodyText = bodyTextElement.getText();
+            map.put("原始文本", bodyText);
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.clear();
+        }
+//        map.keySet().forEach(key -> {
+//            System.out.println(key + "----" + map.get(key));
+//        });
+        return map;
+    }
+
+    public static List<Element> findElement(Element element, String attual) {
+        List<Element> ret = Lists.newArrayList();
+        ((List<Element>) (element.elements())).forEach(i -> {
+            if (StringUtil.isNotBlank(i.attributeValue("type")) && i.attributeValue("type").equals(attual)) {
+                ret.add(i);
+            }
+        });
+        return ret;
+    }
+
+    public static void xInputField(Map<String, String> map, Element xInputFieldElement, String tablePreTxt) {
+        String value = getXInputFieldValue(xInputFieldElement);
+        if (value == null) {
+            return;
+        }
+        String key = getXInputFieldKey(xInputFieldElement, tablePreTxt);
+        if (StringUtil.isNotBlank(key)) {
+            if (map.containsKey(key)) {
+                value = map.get(key) + " " + value;
+            }
+            map.put(key, value);
+        }
+    }
+
+    //获取 XInputField 的键
+    private static String getXInputFieldKey(Element xInputFieldElement, String tablePreTxt) {
+        String key = null;
+        String[] elementNames = {"Name","BackgroundText", "ToolTip" };
+        for (String elementName : elementNames) {
+            key = xInputFieldElement.elementTextTrim(elementName);
+            if (StringUtil.isNotBlank(key)) {
+                break;
+            }
+        }
+        if (StringUtil.isBlank(key)) {
+            key = getElementPreVal(xInputFieldElement);
+        }
+        if (StringUtil.isBlank(key)) {
+            key = tablePreTxt;
+        }
+        if (StringUtil.isBlank(key)) {
+            key = "病历内容";
+        }
+        return keyHandle(key);
+    }
+
+    //获取 XInputField 的值
+    private static String getXInputFieldValue(Element xInputFieldElement) {
+        String value = null;
+        Element innerValueElement = xInputFieldElement.element("InnerValue");
+        if (innerValueElement != null) {
+            value = innerValueElement.getTextTrim();
+        }
+        if (StringUtil.isBlank(value)) {
+            Element xElementsElement = xInputFieldElement.element("XElements");
+            if (xElementsElement != null) {
+                List<Element> elements = findElement(xElementsElement, "XString");
+                if (elements.size() > 0) {
+                    value = "";
+                    for (Element element : elements) {
+                        Element text = element.element("Text");
+                        if (text != null) {
+                            value += text.getTextTrim();
+                        }
+                    }
+                }
+            }
+        }
+        return value;
+    }
+
+    //获取前面文本信息作为key
+    private static String getElementPreVal(Element xInputFieldElement) {
+        String ret = "";
+        List<Element> sonElements = xInputFieldElement.getParent().elements();
+        int index = sonElements.indexOf(xInputFieldElement);
+        for (int i = index - 1; i >= 0; i--) {
+            Element sonElement = sonElements.get(i);
+            if (sonElement.attributeValue("type").equals("XTextTable") || sonElement.attributeValue("type").equals("XInputField")) {
+                break;
+            }
+            if (sonElement.attributeValue("type").equals("XString")) {
+                ret = sonElement.elementTextTrim("Text") + ret;
+            }
+        }
+        return ret;
+    }
+
+    //针对key的一些特殊处理
+    private static String keyHandle(String key) {
+        key = StringUtil.removeBlank(key).replaceAll("[::]", "");
+        return key;
+    }
+
+    public static void main(String[] args) {
+        xmlToMap(FileUtil.fileRead("C:\\Users\\Administrator\\Desktop\\义务\\jiexi\\n5.xml"));
+    }
+
+}

+ 7 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/AKeyedNamed.java

@@ -0,0 +1,7 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+public interface AKeyedNamed {
+    String getKey();
+
+    String getName();
+}

+ 48 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/BehospitalWayEnum.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum BehospitalWayEnum implements AKeyedNamed{
+    COMMON("1", "普通"),
+    TRANSFER_HOSPITAL("2", "转院"),
+    EMERGENCY_TREATMENT("3", "急诊"),
+    OBSERVATION("4", "留观"),
+    OUTPATIENT("5", "门诊"),
+    DAY_SURGERY("18", "日间手术"),
+    STIPULATE_ENTITY("12", "规定病种");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    BehospitalWayEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static BehospitalWayEnum getEnum(String key) {
+        for (BehospitalWayEnum item : BehospitalWayEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        BehospitalWayEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 48 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/BloodTypeEnum.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum BloodTypeEnum implements AKeyedNamed{
+
+    A("1", "A"),
+    B("2", "B"),
+    O("3", "O"),
+    AB("4", "AB"),
+    UN_KNOWN("5", "不详"),
+    NO_CHECK("6", "未查");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    BloodTypeEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static BloodTypeEnum getEnum(String key) {
+        for (BloodTypeEnum item : BloodTypeEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        BloodTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 45 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/DiagnoseTypeEnum.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum DiagnoseTypeEnum implements AKeyedNamed{
+    NO_DONE("0", "未做"),
+    ACCORD("1", "符合"),
+    NO_ACCORD("2", "不符合"),
+    UN_CHECK("3", "不确定");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    DiagnoseTypeEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static DiagnoseTypeEnum getEnum(String key) {
+        for (DiagnoseTypeEnum item : DiagnoseTypeEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        DiagnoseTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 43 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/IsMedAllergyEnum.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum IsMedAllergyEnum implements AKeyedNamed {
+    NO("1", "无"),
+    YES("2", "有");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    IsMedAllergyEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static IsMedAllergyEnum getEnum(String key) {
+        for (IsMedAllergyEnum item : IsMedAllergyEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        IsMedAllergyEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 47 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/LeaveHospitalTypeEnum.java

@@ -0,0 +1,47 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum LeaveHospitalTypeEnum implements AKeyedNamed{
+    LEAVE_HOSPTAIL("1", "医嘱离院"),
+    TRANSFER_MEDICAL("2", "医嘱转院"),
+    TRANSFER_COMMUNITY("3", "医嘱转社区卫生服务机构/乡镇卫生院"),
+    NO_TRANSFER_MEDICAL("4", "非医嘱离院"),
+    DEATH("5", "死亡"),
+    OTHER("9", "其他");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    LeaveHospitalTypeEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static LeaveHospitalTypeEnum getEnum(String key) {
+        for (LeaveHospitalTypeEnum item : LeaveHospitalTypeEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        LeaveHospitalTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 46 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/MarriageEnum.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum MarriageEnum implements AKeyedNamed{
+    UNMARRIED("1", "未婚"),
+    MARRIED("2", "已婚"),
+    WIDOWED("3", "丧偶"),
+    DIVORCE("4", "离婚"),
+    OTHER("9", "其他");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    MarriageEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static MarriageEnum getEnum(String key) {
+        for (MarriageEnum item : MarriageEnum.values()) {
+            if (key.equals(item.getKey()) ) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        MarriageEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 45 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/RHEnum.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum RHEnum implements AKeyedNamed{
+    NEGATIVE("1", "阴"),
+    POSITIVE("2", "阳"),
+    UN_KNOWN("3", "不详"),
+    NO_CHECK("4", "未查");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    RHEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static RHEnum getEnum(String key) {
+        for (RHEnum item : RHEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        RHEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 43 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/enums/SexEnum.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.dbanaly.facade.yiwu.enums;
+
+import lombok.Setter;
+
+public enum SexEnum implements AKeyedNamed {
+    NUM_MALE("1", "男"),
+    NUM_FEMALE("2", "女");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    SexEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static SexEnum getEnum(String key) {
+        for (SexEnum item : SexEnum.values()) {
+            if (key.equals(item.getKey())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        SexEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public String getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 147 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/util/MapUtil.java

@@ -0,0 +1,147 @@
+package com.lantone.qc.dbanaly.facade.yiwu.util;
+
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Maps;
+import org.apache.commons.io.IOUtils;
+import org.springframework.core.io.ClassPathResource;
+
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.io.InputStreamReader;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * @Description: map工具类
+ * @author: gaodm
+ * @time: 2018/9/4 9:24
+ */
+public class MapUtil {
+    private static final String SP = ";";
+    private static final String SSP = ":";
+
+    /**
+     * 把Map转换成String。注意以英文分号字符';'开始和结束
+     *
+     * @param attrs
+     * @return
+     */
+    public static String toString(Map<String, String> attrs) {
+        StringBuilder sb = new StringBuilder();
+        if (null != attrs && !attrs.isEmpty()) {
+            sb.append(SP);
+            for (String key : attrs.keySet()) {
+                String val = attrs.get(key);
+                if (val != null && !"".equals(val)) {
+                    sb.append(key).append(SSP).append(val).append(SP);
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 把key:value;key:value格式的String转换成Map
+     *
+     * @param str
+     * @return
+     */
+    public static Map<String, String> fromString(String str) {
+        Map<String, String> attrs = new HashMap<String, String>();
+        if (str != null && !"".equals(str)) {
+            String[] arr = str.split(SP);
+            if (null != arr) {
+                for (String kv : arr) {
+                    if (kv != null && !"".equals(kv)) {
+                        String[] ar = kv.split(SSP);
+                        if (null != ar && ar.length == 2) {
+                            String key = ar[0];
+                            String val = ar[1];
+                            if (val != null && !"".equals(val)) {
+                                attrs.put(key, val);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return attrs;
+    }
+
+    public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
+        if (map == null) {
+            return null;
+        }
+
+        Object obj = beanClass.newInstance();
+
+        BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
+        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+        for (PropertyDescriptor property : propertyDescriptors) {
+            Method setter = property.getWriteMethod();
+            if (setter != null) {
+                setter.invoke(obj, map.get(property.getName()));
+            }
+        }
+
+        return obj;
+    }
+
+    public static Map<String, Object> objectToMap(Object obj) throws Exception {
+        if (obj == null) {
+            return null;
+        }
+
+        Map<String, Object> map = new HashMap<String, Object>();
+
+        BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
+        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+        for (PropertyDescriptor property : propertyDescriptors) {
+            String key = property.getName();
+            if (key.compareToIgnoreCase("class") == 0) {
+                continue;
+            }
+            Method getter = property.getReadMethod();
+            Object value = getter != null ? getter.invoke(obj) : null;
+            map.put(key, value);
+        }
+        return map;
+    }
+
+    /**
+     * 复制一个map
+     *
+     * @param map
+     * @return
+     */
+    public static Map<String, Object> copyMap(Map<String, Object> map) {
+        if (map == null) {
+            return null;
+        }
+        Map<String, Object> retMap = Maps.newHashMap();
+        map.keySet().forEach(key -> {
+            retMap.put(key, map.get(key));
+        });
+        return retMap;
+    }
+
+    public static Map<String, String> getMap(String path){
+        Map<String,String> map = new LinkedHashMap();
+        try {
+            //路径
+            ClassPathResource classPathResource = new ClassPathResource(path);
+            //读取文件信息
+            String str = IOUtils.toString(new InputStreamReader(classPathResource.getInputStream(),"UTF-8"));
+            //转换为Map对象
+            map = JSONObject.parseObject(str, LinkedHashMap.class);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
+
+}

+ 187 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/yiwu/util/YWDateUtils.java

@@ -0,0 +1,187 @@
+package com.lantone.qc.dbanaly.facade.yiwu.util;
+
+import com.lantone.qc.pub.util.DateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateUtils;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+
+public class YWDateUtils {
+    public static void main(String[] args) {
+//        String strDateTime="20150206201756";
+//        System.out.println(convJsonDateToString(strDateTime,"yyyy-MM-dd HH:mm:ss"));
+        System.out.println(getCurrentTime());
+    }
+    public static String convJsonDateToString(String jsonDate,String stringTemplate){
+        String resultString=null;
+        try {
+            Calendar cldCalendar=convToCalender(jsonDate, "yyyyMMddhhmmss");
+            resultString=convToString(cldCalendar, stringTemplate);
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return resultString;
+    }
+    public static String convJsonDateToString(String jsonDate,String jsonTemplate,String stringTemplate){
+
+        String resultString=null;
+        try {
+            Calendar cldCalendar=convToCalender(jsonDate, jsonTemplate);
+            resultString=convToString(cldCalendar, stringTemplate);
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return resultString;
+    }
+    // 把指定格式的日期字符串转日期类型
+    public static Calendar convToCalender(String str,String template){
+
+        SimpleDateFormat sdf;
+        Date date;
+        Calendar cltResult = Calendar.getInstance();
+
+        sdf = new SimpleDateFormat(template, Locale.getDefault());
+        try {
+            date = sdf.parse(str);
+
+            cltResult.setTime(date);
+
+        } catch (Exception ex) {
+            // TODO Auto-generated catch block
+            ex.printStackTrace();
+        }
+
+        return cltResult;
+    }
+    // 把日期转指定格式字符串
+    public static String convToString(Calendar cld,String template){
+        String resultString=null;
+        try {
+            Date date=cld.getTime();
+            SimpleDateFormat sdf=new SimpleDateFormat(template,Locale.getDefault());
+            resultString=sdf.format(date);
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return resultString;
+    }
+    public static String getCurrentTime(){
+        DateFormat df = new SimpleDateFormat(DateUtil.DATE_TIME_FORMAT_NO_SPLIT);
+        Calendar calendar = Calendar.getInstance();
+        return df.format(calendar.getTime());
+    }
+
+    public static Date parseDateTime(String datetime) {
+        Date date = null;
+        try {
+            datetime = remove_ctl(datetime);
+
+            if (datetime.contains("至")) {
+                datetime = datetime.split("至")[1].replaceAll("[\\u4e00-\\u9fa5]", "");
+            }
+
+            if (datetime.endsWith(":")) {
+                datetime = datetime.substring(0, datetime.length() - 1);
+            }
+
+            if (datetime.length() > 0 && !"-".equals(datetime)) {
+                date = DateUtils.parseDate(datetime, dateFormats);
+            }
+        } catch (ParseException ex) {
+            ex.printStackTrace();
+        }
+        return date;
+    }
+
+    public static String remove_ctl(String str) {
+        String trim = "";
+        if (StringUtils.isNotEmpty(str)) {
+            trim = str.replaceAll("\r|\n|\r\n|/r/n", "").trim();
+        }
+        return trim;
+    }
+
+    public static String[] dateFormats = {
+            "yyyy年MM月dd日HH时mm分",
+            "yyyy年MM月dd日HH:mm",
+            "yyyy年MM月dd日H时mm分",
+            "yyyy年MM月dd日HH时m分",
+            "yyyy年MM月dd日H时m分",
+            "yyyy年M月dd日HH时mm分",
+            "yyyy年M月dd日H时mm分",
+            "yyyy年M月dd日HH时m分",
+            "yyyy年M月dd日H时m分",
+            "yyyy年MM月d日HH时mm分",
+            "yyyy年MM月d日H时mm分",
+            "yyyy年MM月d日HH时m分",
+            "yyyy年MM月d日H时m分",
+            "yyyy年M月d日HH时mm分",
+            "yyyy年M月d日H时mm分",
+            "yyyy年M月d日HH时m分",
+            "yyyy年M月d日H时m分",
+            "yyyy-MM-ddHH:mm:ss",
+            "yyyy-MM-ddHH:mm",
+            "yyyy-MM-ddHH:m",
+            "yyyy-MM-ddH:mm",
+            "yyyy-MM-ddH:m",
+            "yyyy-M-ddHH:mm",
+            "yyyy-M-ddHH:m",
+            "yyyy-M-ddH:mm",
+            "yyyy-M-ddH:m",
+            "yyyy-MM-dHH:mm",
+            "yyyy-MM-dHH:m",
+            "yyyy-MM-dH:mm",
+            "yyyy-MM-dH:m",
+            "yyyy-M-dHH:mm",
+            "yyyy-M-dHH:m",
+            "yyyy-M-dH:mm",
+            "yyyy-M-dH:m",
+            "yyyy-MM-dd",
+            "yyyy年MM月dd日H时",
+            "yyyy/MM/ddHH:mm:ss",
+            "yyyy/MM/ddHH:mm",
+            "yyyy/MM/ddHH:m",
+            "yyyy/MM/ddH:mm",
+            "yyyy/MM/ddH:m",
+            "yyyy/M/ddHH:mm",
+            "yyyy/M/ddHH:m",
+            "yyyy/M/ddH:mm",
+            "yyyy/M/ddH:m",
+            "yyyy/MM/dHH:mm",
+            "yyyy/MM/dHH:m",
+            "yyyy/MM/dH:mm",
+            "yyyy/MM/dH:m",
+            "yyyy/M/dHH:mm",
+            "yyyy/M/dHH:m",
+            "yyyy/M/dH:mm",
+            "yyyy/M/dH:m",
+            "yyyy/MM/dd",
+            "yyyy.MM.dd",
+            "yyyy-MM-ddHH:mm:ss.000",
+            "yyyyMMddHH:mm",
+            "yyyy-MM-dd'T'HH:mm:ss",
+            "yyyy"
+    };
+
+    public static boolean isDate(String dttm, String format) {
+        boolean retValue = false;
+        if (dttm != null) {
+            SimpleDateFormat formatter = new SimpleDateFormat(format);
+            try {
+                formatter.parse(dttm);
+                retValue = true;
+            } catch (ParseException e) {
+            }
+        }
+        return retValue;
+    }
+
+}

+ 84 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/ywzxyy/YwzxyyXmlUtil.java

@@ -0,0 +1,84 @@
+package com.lantone.qc.dbanaly.facade.ywzxyy;
+
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.tree.DefaultText;
+
+import java.util.Map;
+
+/**
+ * @Description: xml解析工具
+ * @author: rengb
+ * @time: 2020/3/28 14:23
+ */
+@Slf4j
+public class YwzxyyXmlUtil {
+
+    public static Map<String, String> xmlToMap(String xml) {
+        Map<String, String> map = Maps.newHashMap();
+        try {
+            Document doc = DocumentHelper.parseText(xml);
+            Element root = (Element) doc.selectSingleNode("//XTextDocument/XElements/Element[@xsi:type='XTextBody']/XElements");
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.clear();
+        }
+        return map;
+    }
+
+    public static String element2Str(Element rootElement) {
+        StringBuffer sbf = new StringBuffer();
+        if (rootElement != null) {
+            rootElement.content().forEach(ctt -> {
+                if (ctt.getClass().getName().equals("org.dom4j.tree.DefaultElement")) {
+                    Element sonElement = (Element) ctt;
+                    if (sonElement.hasContent()) {
+                        sbf.append(element2Str(sonElement));
+                    }
+                } else {
+                    DefaultText sonText = (DefaultText) ctt;
+                    sbf.append(sonText.getText());
+                }
+            });
+        }
+        return sbf.toString();
+    }
+
+    public static String bcXmlAna(String xml) {
+        String ret = null;
+        try {
+            Document doc = DocumentHelper.parseText(xml);
+            Element root = doc.getRootElement();
+            Element titleElement = root.element("病历记录标题");
+            root.remove(titleElement);
+            Element timeElement = root.element("病历记录时间");
+            root.remove(timeElement);
+            ret = "原始文本:" + element2Str(root);
+            if (titleElement != null) {
+                ret = "病历记录标题:" + titleElement.getTextTrim() + " " + ret;
+            }
+            if (timeElement != null) {
+                ret = "病历记录时间:" + timeElement.getTextTrim() + " " + ret;
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return ret;
+    }
+
+    public static String xml2Txt(String xml) {
+        String ret = null;
+        try {
+            Document doc = DocumentHelper.parseText(xml);
+            Element root = doc.getRootElement();
+            ret = element2Str(root);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return ret;
+    }
+
+}

+ 117 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Clinic.java

@@ -0,0 +1,117 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 临床表现表
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_clinic")
+public class Clinic implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 术语概念名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 术语概念id
+     */
+    @TableField("concept_id")
+    private Long conceptId;
+
+    /**
+     * 科室概念id
+     */
+    @TableField("has_bodypart")
+    private Integer hasBodypart;
+
+    /**
+     * 性质
+     */
+    @TableField("has_property")
+    private Integer hasProperty;
+
+    /**
+     * 程度
+     */
+    @TableField("has_degree")
+    private Integer hasDegree;
+
+    /**
+     * 加剧
+     */
+    @TableField("has_aggravate")
+    private Integer hasAggravate;
+
+    /**
+     * 缓解
+     */
+    @TableField("has_relieve")
+    private Integer hasRelieve;
+
+    @TableField("has_label")
+    private Integer hasLabel;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+
+}

+ 90 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Concept.java

@@ -0,0 +1,90 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 概念表
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_concept")
+public class Concept implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键,概念id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 对应术语id
+     */
+    @TableField("lib_id")
+    private Long libId;
+
+    /**
+     * 概念名称(冗余)
+     */
+    @TableField("lib_name")
+    private String libName;
+
+    /**
+     * 概念词性type(冗余)
+     */
+    @TableField("lib_type")
+    private Long libType;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+
+}

+ 84 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/ConceptRelation.java

@@ -0,0 +1,84 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 术语关系表
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_concept_relation")
+public class ConceptRelation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 关系起点术语id
+     */
+    @TableField("start_id")
+    private Long startId;
+
+    /**
+     * 关系id
+     */
+    @TableField("relation_id")
+    private Long relationId;
+
+    /**
+     * 关系终点术语id
+     */
+    @TableField("end_id")
+    private Long endId;
+
+
+}

+ 119 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Disease.java

@@ -0,0 +1,119 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 医院疾病表
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_disease")
+public class Disease implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 医院疾病唯一ID
+     */
+    @TableId("disease_id")
+    private String diseaseId;
+
+    /**
+     * 医院ID
+     */
+    @TableField("hospital_id")
+    private Long hospitalId;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 疾病名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * ICD编码
+     */
+    @TableField("icd10")
+    private String icd10;
+
+    /**
+     * 医院疾病编码
+     */
+    @TableField("hospital_dis_code")
+    private String hospitalDisCode;
+
+    /**
+     * 疾病名称首字母拼音
+     */
+    @TableField("spell")
+    private String spell;
+
+    /**
+     * 疾病分类
+     */
+    @TableField("classify")
+    private String classify;
+
+    /**
+     * 慢病标识
+     */
+    @TableField("is_chronic")
+    private String isChronic;
+
+    /**
+     * 传染病标识
+     */
+    @TableField("is_infections")
+    private String isInfections;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+
+}

+ 131 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Drug.java

@@ -0,0 +1,131 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 医院药品表
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_drug")
+public class Drug implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 医院药品唯一ID
+     */
+    @TableId("drug_id")
+    private String drugId;
+
+    /**
+     * 医院ID
+     */
+    @TableField("hospital_id")
+    private Long hospitalId;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 药品化学名称
+     */
+    @TableField("med_name")
+    private String medName;
+
+    /**
+     * 药品商品名称
+     */
+    @TableField("prd_name")
+    private String prdName;
+
+    /**
+     * 化学名首字母拼音
+     */
+    @TableField("spell")
+    private String spell;
+
+    /**
+     * 疗程
+     */
+    @TableField("course")
+    private String course;
+
+    /**
+     * 计量
+     */
+    @TableField("dosage")
+    private String dosage;
+
+    /**
+     * 单位
+     */
+    @TableField("unit")
+    private String unit;
+
+    /**
+     * 使用频次
+     */
+    @TableField("freq")
+    private String freq;
+
+    /**
+     * 使用方法
+     */
+    @TableField("method")
+    private String method;
+
+    /**
+     * 适用人群
+     */
+    @TableField("user")
+    private String user;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+
+}

+ 84 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/EntityInfo.java

@@ -0,0 +1,84 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 术语类型表
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_entity_info")
+public class EntityInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 拼音
+     */
+    @TableField("spell")
+    private String spell;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+
+}

+ 102 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/LibraryInfo.java

@@ -0,0 +1,102 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 术语表
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_library_info")
+public class LibraryInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 概念id
+     */
+    @TableField("concept_id")
+    private Long conceptId;
+
+    /**
+     * 是否标准词,1:是,0:否
+     */
+    @TableField("is_concept")
+    private Integer isConcept;
+
+    /**
+     * 词性id
+     */
+    @TableField("type_id")
+    private Long typeId;
+
+    /**
+     * 拼音
+     */
+    @TableField("spell")
+    private String spell;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+
+}

+ 101 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Lis.java

@@ -0,0 +1,101 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 医院化验表
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_lis")
+public class Lis implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 医院化验唯一ID
+     */
+    @TableId("lis_id")
+    private String lisId;
+
+    /**
+     * 医院ID
+     */
+    @TableField("hospital_id")
+    private Long hospitalId;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 化验名称
+     */
+    @TableField("lis_name")
+    private String lisName;
+
+    /**
+     * 套餐ID
+     */
+    @TableField("package_id")
+    private String packageId;
+
+    /**
+     * 所属套餐
+     */
+    @TableField("package_name")
+    private String packageName;
+
+    /**
+     * 化验类型
+     */
+    @TableField("lis_type")
+    private String lisType;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+
+}

+ 106 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Operation.java

@@ -0,0 +1,106 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 医院手术表
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_operation")
+public class Operation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 医院手术唯一ID
+     */
+    @TableField("operation_id")
+    private String operationId;
+
+    /**
+     * 医院ID
+     */
+    @TableField("hospital_id")
+    private Long hospitalId;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 手术编码
+     */
+    @TableField("operation_code")
+    private String operationCode;
+
+    /**
+     * 手术名称
+     */
+    @TableField("operation_name")
+    private String operationName;
+
+    /**
+     * 手术类别
+     */
+    @TableField("operation_type")
+    private String operationType;
+
+    /**
+     * 切口等级
+     */
+    @TableField("cut_level")
+    private String cutLevel;
+
+    /**
+     * 手术级别
+     */
+    @TableField("operation_level")
+    private String operationLevel;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+
+}

+ 95 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Pacs.java

@@ -0,0 +1,95 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 医院辅检表
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_pacs")
+public class Pacs implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 医院检查唯一ID
+     */
+    @TableId("pacs_id")
+    private String pacsId;
+
+    /**
+     * 医院ID
+     */
+    @TableField("hospital_id")
+    private Long hospitalId;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 检查编码
+     */
+    @TableField("code")
+    private String code;
+
+    /**
+     * 检查名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 性质
+     */
+    @TableField("prop")
+    private String prop;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+
+}

+ 90 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/RelationInfo.java

@@ -0,0 +1,90 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 术语关系分类表
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_relation_info")
+public class RelationInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    @TableField("entity_id_from")
+    private Long entityIdFrom;
+
+    @TableField("entity_id_to")
+    private Long entityIdTo;
+
+    /**
+     * 关系名称
+     */
+    @TableField("entity_name_from")
+    private String entityNameFrom;
+
+    @TableField("entity_name_to")
+    private String entityNameTo;
+
+    @TableField("relation_name")
+    private String relationName;
+
+    /**
+     * 关系代码
+     */
+    @TableField("code")
+    private String code;
+
+
+}

+ 54 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/RelevantFeature.java

@@ -0,0 +1,54 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 此表保存每种诊断所需的特征字段,用于后续学习分析
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_relevant_feature")
+public class RelevantFeature implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("diagnose")
+    private String diagnose;
+
+    @TableField("feature")
+    private String feature;
+
+    /**
+     * 1:直接相关特征 2.程度词等非直接相关词 3.部位
+     */
+    @TableField("feature_type")
+    private Integer featureType;
+
+    /**
+     * 1:字符类型(二值属性:阳性/阴性)
+2:数值类型
+     */
+    @TableField("value_type")
+    private Integer valueType;
+
+    @TableField("find_suspect_diagnose")
+    private Integer findSuspectDiagnose;
+
+
+}

+ 78 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/entity/Symptom.java

@@ -0,0 +1,78 @@
+package com.lantone.qc.dbanaly.lt.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("kl_symptom")
+public class Symptom implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("symptom")
+    private String symptom;
+
+    @TableField("concept_id")
+    private Integer conceptId;
+
+    @TableField("cause")
+    private String cause;
+
+    @TableField("bodypart")
+    private String bodypart;
+
+    @TableField("property")
+    private String property;
+
+    @TableField("degree")
+    private String degree;
+
+    @TableField("increase")
+    private String increase;
+
+    @TableField("relief")
+    private String relief;
+
+    @TableField("feature")
+    private String feature;
+
+    @TableField("pain_type")
+    private String painType;
+
+    @TableField("frequency")
+    private String frequency;
+
+    @TableField("period")
+    private String period;
+
+    @TableField("quantity")
+    private String quantity;
+
+    @TableField("con_symp")
+    private String conSymp;
+
+    @TableField("person_history")
+    private String personHistory;
+
+    @TableField("family_history")
+    private String familyHistory;
+
+    @TableField("op_history")
+    private String opHistory;
+
+
+}

+ 23 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/facade/CacheFacade.java

@@ -0,0 +1,23 @@
+package com.lantone.qc.dbanaly.lt.facade;
+
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description :
+ * @Author : HUJING
+ * @Date: 2020/8/13 16:52
+ */
+@Component
+public class CacheFacade {
+
+    /**
+     * 清除缓存信息
+     *
+     * @return
+     */
+    @CacheEvict(value = "cache", allEntries = true)
+    public void clear() {
+
+    }
+}

+ 57 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/facade/ClinicFacade.java

@@ -0,0 +1,57 @@
+package com.lantone.qc.dbanaly.lt.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.lantone.qc.dbanaly.lt.entity.Clinic;
+import com.lantone.qc.dbanaly.lt.service.impl.ClinicServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @author: rengb
+ * @time: 2020/7/17 11:30
+ */
+@Component
+public class ClinicFacade extends ClinicServiceImpl {
+    @Autowired
+    ClinicFacade clinicFacade;
+    @Autowired
+    private LibraryInfoFacade libraryInfoFacade;
+
+    public Map<Long, Clinic> getClinicMap() {
+        QueryWrapper<Clinic> clinicQe = new QueryWrapper<>();
+        clinicQe.eq("is_deleted", "N");
+        clinicQe.isNotNull("concept_id");
+        return list(clinicQe).stream().collect(Collectors.toMap(Clinic::getConceptId, i -> i));
+    }
+
+    public void getClinicInfo() {
+        Map<Long, Map<String, Long>> conceptIdInfo = libraryInfoFacade.getConceptIdInfo();
+        Map<String, Long> conceptIdMap = conceptIdInfo.get(1l);
+        Map<Long, Clinic> clinicMap = getClinicMap();
+        conceptIdMap.keySet().forEach(conceptName -> {
+            clinicFacade.clinicCache(conceptName, clinicMap.get(conceptIdMap.get(conceptName)));
+        });
+    }
+
+    @Cacheable(value = "clinicCache", key = "#clinicName", unless = "#result == null")
+    public Clinic clinicCache(String clinicName, Clinic clinic) {
+        return clinic;
+    }
+
+    @Cacheable(value = "clinicCache", key = "#clinicName", unless = "#result == null")
+    public Clinic clinicCache(String clinicName) {
+        QueryWrapper<Clinic> clinicQe = new QueryWrapper<>();
+        clinicQe.eq("is_deleted", "N");
+        clinicQe.isNotNull("concept_id");
+        clinicQe.eq("name", clinicName);
+        Clinic one = getOne(clinicQe, false);
+        System.out.println(one);
+        return one;
+    }
+
+}

+ 29 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/facade/LibraryInfoFacade.java

@@ -0,0 +1,29 @@
+package com.lantone.qc.dbanaly.lt.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.lantone.qc.dbanaly.lt.entity.LibraryInfo;
+import com.lantone.qc.dbanaly.lt.service.impl.LibraryInfoServiceImpl;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @author: rengb
+ * @time: 2020/7/17 11:26
+ */
+@Component
+public class LibraryInfoFacade extends LibraryInfoServiceImpl {
+
+    public Map<Long, Map<String, Long>> getConceptIdInfo() {
+        QueryWrapper<LibraryInfo> libraryInfoQe = new QueryWrapper<>();
+        libraryInfoQe.eq("is_deleted", "N");
+        libraryInfoQe.select("name", "concept_id", "type_id");
+        Map<Long, Map<String, Long>> ret = list(libraryInfoQe)
+                .stream()
+                .collect(Collectors.groupingBy(i -> i.getTypeId(), Collectors.toMap(LibraryInfo::getName, i -> i.getConceptId())));
+        return ret;
+    }
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/ClinicMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.Clinic;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 临床表现表 Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface ClinicMapper extends BaseMapper<Clinic> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/ConceptMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.Concept;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 概念表 Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface ConceptMapper extends BaseMapper<Concept> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/ConceptRelationMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.ConceptRelation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 术语关系表 Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface ConceptRelationMapper extends BaseMapper<ConceptRelation> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/DiseaseMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.Disease;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 医院疾病表 Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface DiseaseMapper extends BaseMapper<Disease> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/DrugMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.Drug;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 医院药品表 Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface DrugMapper extends BaseMapper<Drug> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/EntityInfoMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.EntityInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 术语类型表 Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface EntityInfoMapper extends BaseMapper<EntityInfo> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/LibraryInfoMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.LibraryInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 术语表 Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface LibraryInfoMapper extends BaseMapper<LibraryInfo> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/LisMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.Lis;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 医院化验表 Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface LisMapper extends BaseMapper<Lis> {
+
+}

+ 5 - 1
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/ModuleInfoMapper.java

@@ -1,7 +1,9 @@
 package com.lantone.qc.dbanaly.lt.mapper;
 
-import com.lantone.qc.dbanaly.lt.entity.ModuleInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lantone.qc.dbanaly.lt.entity.ModuleInfo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +15,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ModuleInfoMapper extends BaseMapper<ModuleInfo> {
 
+    List<String> getAnameModidMap(Long hospitalId);
+
 }

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/OperationMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.Operation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 医院手术表 Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface OperationMapper extends BaseMapper<Operation> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/PacsMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.Pacs;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 医院辅检表 Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface PacsMapper extends BaseMapper<Pacs> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/RelationInfoMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.RelationInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 术语关系分类表 Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface RelationInfoMapper extends BaseMapper<RelationInfo> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/RelevantFeatureMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.RelevantFeature;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 此表保存每种诊断所需的特征字段,用于后续学习分析 Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface RelevantFeatureMapper extends BaseMapper<RelevantFeature> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/mapper/SymptomMapper.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.mapper;
+
+import com.lantone.qc.dbanaly.lt.entity.Symptom;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface SymptomMapper extends BaseMapper<Symptom> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/ClinicService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.Clinic;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 临床表现表 服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface ClinicService extends IService<Clinic> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/ConceptRelationService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.ConceptRelation;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 术语关系表 服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface ConceptRelationService extends IService<ConceptRelation> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/ConceptService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.Concept;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 概念表 服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface ConceptService extends IService<Concept> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/DiseaseService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.Disease;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 医院疾病表 服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface DiseaseService extends IService<Disease> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/DrugService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.Drug;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 医院药品表 服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface DrugService extends IService<Drug> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/EntityInfoService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.EntityInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 术语类型表 服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface EntityInfoService extends IService<EntityInfo> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/LibraryInfoService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.LibraryInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 术语表 服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface LibraryInfoService extends IService<LibraryInfo> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/LisService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.Lis;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 医院化验表 服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface LisService extends IService<Lis> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/OperationService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.Operation;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 医院手术表 服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface OperationService extends IService<Operation> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/PacsService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.Pacs;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 医院辅检表 服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface PacsService extends IService<Pacs> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/RelationInfoService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.RelationInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 术语关系分类表 服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface RelationInfoService extends IService<RelationInfo> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/RelevantFeatureService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.RelevantFeature;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 此表保存每种诊断所需的特征字段,用于后续学习分析 服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface RelevantFeatureService extends IService<RelevantFeature> {
+
+}

+ 16 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/SymptomService.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.dbanaly.lt.service;
+
+import com.lantone.qc.dbanaly.lt.entity.Symptom;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+public interface SymptomService extends IService<Symptom> {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/ClinicServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.Clinic;
+import com.lantone.qc.dbanaly.lt.mapper.ClinicMapper;
+import com.lantone.qc.dbanaly.lt.service.ClinicService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 临床表现表 服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class ClinicServiceImpl extends ServiceImpl<ClinicMapper, Clinic> implements ClinicService {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/ConceptRelationServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.ConceptRelation;
+import com.lantone.qc.dbanaly.lt.mapper.ConceptRelationMapper;
+import com.lantone.qc.dbanaly.lt.service.ConceptRelationService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 术语关系表 服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class ConceptRelationServiceImpl extends ServiceImpl<ConceptRelationMapper, ConceptRelation> implements ConceptRelationService {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/ConceptServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.Concept;
+import com.lantone.qc.dbanaly.lt.mapper.ConceptMapper;
+import com.lantone.qc.dbanaly.lt.service.ConceptService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 概念表 服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class ConceptServiceImpl extends ServiceImpl<ConceptMapper, Concept> implements ConceptService {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/DiseaseServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.Disease;
+import com.lantone.qc.dbanaly.lt.mapper.DiseaseMapper;
+import com.lantone.qc.dbanaly.lt.service.DiseaseService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 医院疾病表 服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class DiseaseServiceImpl extends ServiceImpl<DiseaseMapper, Disease> implements DiseaseService {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/DrugServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.Drug;
+import com.lantone.qc.dbanaly.lt.mapper.DrugMapper;
+import com.lantone.qc.dbanaly.lt.service.DrugService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 医院药品表 服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class DrugServiceImpl extends ServiceImpl<DrugMapper, Drug> implements DrugService {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/EntityInfoServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.EntityInfo;
+import com.lantone.qc.dbanaly.lt.mapper.EntityInfoMapper;
+import com.lantone.qc.dbanaly.lt.service.EntityInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 术语类型表 服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class EntityInfoServiceImpl extends ServiceImpl<EntityInfoMapper, EntityInfo> implements EntityInfoService {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/LibraryInfoServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.LibraryInfo;
+import com.lantone.qc.dbanaly.lt.mapper.LibraryInfoMapper;
+import com.lantone.qc.dbanaly.lt.service.LibraryInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 术语表 服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class LibraryInfoServiceImpl extends ServiceImpl<LibraryInfoMapper, LibraryInfo> implements LibraryInfoService {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/LisServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.Lis;
+import com.lantone.qc.dbanaly.lt.mapper.LisMapper;
+import com.lantone.qc.dbanaly.lt.service.LisService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 医院化验表 服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class LisServiceImpl extends ServiceImpl<LisMapper, Lis> implements LisService {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/OperationServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.Operation;
+import com.lantone.qc.dbanaly.lt.mapper.OperationMapper;
+import com.lantone.qc.dbanaly.lt.service.OperationService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 医院手术表 服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class OperationServiceImpl extends ServiceImpl<OperationMapper, Operation> implements OperationService {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/PacsServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.Pacs;
+import com.lantone.qc.dbanaly.lt.mapper.PacsMapper;
+import com.lantone.qc.dbanaly.lt.service.PacsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 医院辅检表 服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class PacsServiceImpl extends ServiceImpl<PacsMapper, Pacs> implements PacsService {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/RelationInfoServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.RelationInfo;
+import com.lantone.qc.dbanaly.lt.mapper.RelationInfoMapper;
+import com.lantone.qc.dbanaly.lt.service.RelationInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 术语关系分类表 服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class RelationInfoServiceImpl extends ServiceImpl<RelationInfoMapper, RelationInfo> implements RelationInfoService {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/RelevantFeatureServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.RelevantFeature;
+import com.lantone.qc.dbanaly.lt.mapper.RelevantFeatureMapper;
+import com.lantone.qc.dbanaly.lt.service.RelevantFeatureService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 此表保存每种诊断所需的特征字段,用于后续学习分析 服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class RelevantFeatureServiceImpl extends ServiceImpl<RelevantFeatureMapper, RelevantFeature> implements RelevantFeatureService {
+
+}

+ 20 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/lt/service/impl/SymptomServiceImpl.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.dbanaly.lt.service.impl;
+
+import com.lantone.qc.dbanaly.lt.entity.Symptom;
+import com.lantone.qc.dbanaly.lt.mapper.SymptomMapper;
+import com.lantone.qc.dbanaly.lt.service.SymptomService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author rgb
+ * @since 2020-07-17
+ */
+@Service
+public class SymptomServiceImpl extends ServiceImpl<SymptomMapper, Symptom> implements SymptomService {
+
+}

+ 30 - 1
dbanaly/src/main/java/com/lantone/qc/dbanaly/util/ModuleMappingUtil.java

@@ -2,7 +2,9 @@ package com.lantone.qc.dbanaly.util;
 
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
+import com.lantone.qc.pub.model.vo.BehospitalInfoVO;
 import com.lantone.qc.pub.util.SpringContextUtil;
+import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.collections.MapUtils;
 
 import java.util.ArrayList;
@@ -19,9 +21,11 @@ import java.util.Set;
 public class ModuleMappingUtil {
 
     public static final Map<String, Map<Set<String>, String>> xmlDataTypeModuleInfo = Maps.newHashMap();
+    public static final Map<String, Map<String, String>> htmlDataTypeModuleInfo = Maps.newHashMap();
+    public static final Map<String, Map<String, String>> standardModuleInfo = Maps.newHashMap();
+    private static final SpecialStorageUtil specialStorageUtil = SpringContextUtil.getBean("specialStorageUtil");
 
     public static String getXmlDataTypeModuleId(Map<String, String> sourceMap) {
-        SpecialStorageUtil specialStorageUtil = SpringContextUtil.getBean("specialStorageUtil");
         if (MapUtils.isEmpty(sourceMap)
                 || MapUtils.isEmpty(xmlDataTypeModuleInfo.get(specialStorageUtil.getHospitalIdThreadLocal().get()))) {
             return null;
@@ -38,4 +42,29 @@ public class ModuleMappingUtil {
         return xmlDataTypeModuleInfo.get(specialStorageUtil.getHospitalIdThreadLocal().get()).get(set);
     }
 
+    public static String getHtmlDataTypeModuleId(String recTitle) {
+        if (MapUtils.isEmpty(htmlDataTypeModuleInfo.get(specialStorageUtil.getHospitalIdThreadLocal().get()))) {
+            return null;
+        }
+        return htmlDataTypeModuleInfo.get(specialStorageUtil.getHospitalIdThreadLocal().get()).get(recTitle);
+    }
+
+    public static String getStandardModuleId(String modeId) {
+        if (MapUtils.isEmpty(standardModuleInfo.get(specialStorageUtil.getHospitalIdThreadLocal().get()))) {
+            return null;
+        }
+        return standardModuleInfo.get(specialStorageUtil.getHospitalIdThreadLocal().get()).get(modeId);
+    }
+
+    public static String getDeptModuleId(String modeId) {
+        BehospitalInfoVO behospitalInfo = specialStorageUtil.getBehospitalInfoThreadLocal().get();
+        if (behospitalInfo != null) {
+            String behDeptId = behospitalInfo.getBehDeptId();
+            if (StringUtil.isNotBlank(behDeptId)) {
+                return getHtmlDataTypeModuleId(modeId + "-" + behDeptId);
+            }
+        }
+        return null;
+    }
+
 }

+ 5 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/util/SpecialStorageUtil.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.dbanaly.util;
 
 import com.google.common.collect.Maps;
+import com.lantone.qc.pub.model.vo.BehospitalInfoVO;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
@@ -15,6 +16,7 @@ import java.util.Map;
 public final class SpecialStorageUtil {
     private final Map<String, Map<String, Object>> hospitalCache = Maps.newHashMap();
     private final ThreadLocal<String> hospitalIdThreadLocal = new ThreadLocal<>();
+    private final ThreadLocal<BehospitalInfoVO> behospitalInfoThreadLocal = new ThreadLocal<>();
 
     public <T> T getJsonStringValue(String key) {
         return getValByHospitalId(hospitalIdThreadLocal.get(), key);
@@ -54,4 +56,7 @@ public final class SpecialStorageUtil {
         return hospitalCache;
     }
 
+    public ThreadLocal<BehospitalInfoVO> getBehospitalInfoThreadLocal() {
+        return behospitalInfoThreadLocal;
+    }
 }

+ 19 - 9
dbanaly/src/main/resources/application-debug.yml

@@ -24,18 +24,22 @@ spring:
         filters: stat
         connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
         use-global-data-source-stat: true
+
+  #redis
   redis:
-    database: 10
-    host: 192.168.2.236
-    port: 6379
-    password: lantone
-    timeout: 2000
+    database:
+      cache: 10 # cache索引
+      token: 10 # Token索引
+    host: 192.168.2.236  #Redis服务器地址
+    port: 6379 # Redis服务器连接端口(本地环境端口6378,其他环境端口是6379)
+    password: lantone # Redis服务器连接密码(默认为空)
     lettuce:
       pool:
-        max-active: 8
-        min-idle: 0
-        max-wait: -1ms
-        max-idle: 8
+        max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
+        max-idle: 5 # 连接池中的最大空闲连接
+        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
+        min-idle: 0 # 连接池中的最小空闲连接
+    timeout: 20000 # 连接超时时间(毫秒)
 
 xml-is-encryped: true
 
@@ -45,5 +49,11 @@ CRF:
 Similarity:
   url: http://192.168.2.234:3456/api/mr_info_ex/similarity
 
+NewSimilarity:
+  url: http://192.168.2.234:23232/api/similarity
+
+NewBatchSimilarity:
+  url: http://192.168.2.234:23232/api/similarity_batch
+
 ChiefPresentSimilarity:
   url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity

+ 18 - 9
dbanaly/src/main/resources/application-dev.yml

@@ -24,18 +24,21 @@ spring:
         filters: stat
         connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
         use-global-data-source-stat: true
+  #redis
   redis:
-    database: 10
-    host: 192.168.2.121
-    port: 6379
-    password: lantone
-    timeout: 2000
+    database:
+      cache: 10 # cache索引
+      token: 10 # Token索引
+    host: 192.168.2.121  #Redis服务器地址
+    port: 6379 # Redis服务器连接端口(本地环境端口6378,其他环境端口是6379)
+    password: lantone # Redis服务器连接密码(默认为空)
     lettuce:
       pool:
-        max-active: 8
-        min-idle: 0
-        max-wait: -1ms
-        max-idle: 8
+        max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
+        max-idle: 5 # 连接池中的最大空闲连接
+        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
+        min-idle: 0 # 连接池中的最小空闲连接
+    timeout: 20000 # 连接超时时间(毫秒)
 
 xml-is-encryped: true
 
@@ -45,5 +48,11 @@ CRF:
 Similarity:
   url: http://192.168.2.234:3456/api/mr_info_ex/similarity
 
+NewSimilarity:
+  url: http://192.168.2.234:23232/api/similarity
+
+NewBatchSimilarity:
+  url: http://192.168.2.234:23232/api/similarity_batch
+
 ChiefPresentSimilarity:
   url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity

+ 8 - 8
dbanaly/src/main/resources/application-local.yml

@@ -5,9 +5,9 @@ spring:
     druid:
       lantone:
         driver-class-name: com.mysql.jdbc.Driver
-        url: jdbc:mysql://10.48.45.48:3306/qc?useUnicode=true&characterEncoding=utf8&useSSL=false
+        url: jdbc:mysql://192.168.2.121:3306/qc?useUnicode=true&characterEncoding=utf8&useSSL=false
         username: root
-        password: L@ngt0ng
+        password: QuGDHNG35r
         initial-size: 8
         min-idle: 1
         max-active: 20
@@ -28,7 +28,7 @@ spring:
     database:
       cache: 10 # cache索引
       token: 10 # Token索引
-    host: 10.48.45.47  #Redis服务器地址
+    host: 192.168.2.121  #Redis服务器地址
     port: 6379 # Redis服务器连接端口(本地环境端口6378,其他环境端口是6379)
     password: lantone # Redis服务器连接密码(默认为空)
     lettuce:
@@ -42,16 +42,16 @@ spring:
 xml-is-encryped: true
 
 CRF:
-  url: http://10.48.45.48:3456/api/mr_info_ex/entity_predict
+  url: http://192.168.2.234:3456/api/mr_info_ex/entity_predict
 
 Similarity:
-  url: http://10.48.45.48:3456/api/mr_info_ex/similarity
+  url: http://192.168.2.234:3456/api/mr_info_ex/similarity
 
 NewSimilarity:
-  url: http://10.48.45.48:23232/api/similarity
+  url: http://192.168.2.234:23232/api/similarity
 
 NewBatchSimilarity:
-  url: http://10.48.45.48:23232/api/similarity_batch
+  url: http://192.168.2.234:23232/api/similarity_batch
 
 ChiefPresentSimilarity:
-  url: http://10.48.45.48:3456/api/mr_info_ex/chief_present_similarity
+  url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity

+ 17 - 9
dbanaly/src/main/resources/application-master.yml

@@ -25,17 +25,19 @@ spring:
         connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
         use-global-data-source-stat: true
   redis:
-    database: 10
-    host: 192.168.2.122
-    port: 6379
-    password: lantone
-    timeout: 2000
+    database:
+      cache: 10 # cache索引
+      token: 10 # Token索引
+    host: 192.168.2.122  #Redis服务器地址
+    port: 6379 # Redis服务器连接端口(本地环境端口6378,其他环境端口是6379)
+    password: lantone # Redis服务器连接密码(默认为空)
     lettuce:
       pool:
-        max-active: 8
-        min-idle: 0
-        max-wait: -1ms
-        max-idle: 8
+        max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
+        max-idle: 5 # 连接池中的最大空闲连接
+        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
+        min-idle: 0 # 连接池中的最小空闲连接
+    timeout: 20000 # 连接超时时间(毫秒)
 
 xml-is-encryped: true
 
@@ -45,5 +47,11 @@ CRF:
 Similarity:
   url: http://192.168.2.234:3456/api/mr_info_ex/similarity
 
+NewSimilarity:
+  url: http://192.168.2.234:23232/api/similarity
+
+NewBatchSimilarity:
+  url: http://192.168.2.234:23232/api/similarity_batch
+
 ChiefPresentSimilarity:
   url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity

+ 17 - 9
dbanaly/src/main/resources/application-test.yml

@@ -25,17 +25,19 @@ spring:
         connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
         use-global-data-source-stat: true
   redis:
-    database: 10
-    host: 192.168.2.241
-    port: 6379
-    password: lantone
-    timeout: 2000
+    database:
+      cache: 10 # cache索引
+      token: 10 # Token索引
+    host: 192.168.2.241  #Redis服务器地址
+    port: 6379 # Redis服务器连接端口(本地环境端口6378,其他环境端口是6379)
+    password: lantone # Redis服务器连接密码(默认为空)
     lettuce:
       pool:
-        max-active: 8
-        min-idle: 0
-        max-wait: -1ms
-        max-idle: 8
+        max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
+        max-idle: 5 # 连接池中的最大空闲连接
+        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
+        min-idle: 0 # 连接池中的最小空闲连接
+    timeout: 20000 # 连接超时时间(毫秒)
 
 xml-is-encryped: true
 
@@ -45,5 +47,11 @@ CRF:
 Similarity:
   url: http://192.168.2.234:3456/api/mr_info_ex/similarity
 
+NewSimilarity:
+  url: http://192.168.2.234:23232/api/similarity
+
+NewBatchSimilarity:
+  url: http://192.168.2.234:23232/api/similarity_batch
+
 ChiefPresentSimilarity:
   url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 3247 - 0
dbanaly/src/main/resources/cityCode.json


+ 5 - 0
dbanaly/src/main/resources/mapper/lt/ClinicMapper.xml

@@ -0,0 +1,5 @@
+<?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.lantone.qc.dbanaly.lt.mapper.ClinicMapper">
+
+</mapper>

+ 5 - 0
dbanaly/src/main/resources/mapper/lt/ConceptMapper.xml

@@ -0,0 +1,5 @@
+<?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.lantone.qc.dbanaly.lt.mapper.ConceptMapper">
+
+</mapper>

+ 5 - 0
dbanaly/src/main/resources/mapper/lt/ConceptRelationMapper.xml

@@ -0,0 +1,5 @@
+<?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.lantone.qc.dbanaly.lt.mapper.ConceptRelationMapper">
+
+</mapper>

+ 5 - 0
dbanaly/src/main/resources/mapper/lt/DiseaseMapper.xml

@@ -0,0 +1,5 @@
+<?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.lantone.qc.dbanaly.lt.mapper.DiseaseMapper">
+
+</mapper>

+ 5 - 0
dbanaly/src/main/resources/mapper/lt/DrugMapper.xml

@@ -0,0 +1,5 @@
+<?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.lantone.qc.dbanaly.lt.mapper.DrugMapper">
+
+</mapper>

+ 5 - 0
dbanaly/src/main/resources/mapper/lt/EntityInfoMapper.xml

@@ -0,0 +1,5 @@
+<?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.lantone.qc.dbanaly.lt.mapper.EntityInfoMapper">
+
+</mapper>

+ 5 - 0
dbanaly/src/main/resources/mapper/lt/LibraryInfoMapper.xml

@@ -0,0 +1,5 @@
+<?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.lantone.qc.dbanaly.lt.mapper.LibraryInfoMapper">
+
+</mapper>

+ 5 - 0
dbanaly/src/main/resources/mapper/lt/LisMapper.xml

@@ -0,0 +1,5 @@
+<?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.lantone.qc.dbanaly.lt.mapper.LisMapper">
+
+</mapper>

+ 11 - 0
dbanaly/src/main/resources/mapper/lt/ModuleInfoMapper.xml

@@ -2,4 +2,15 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.lantone.qc.dbanaly.lt.mapper.ModuleInfoMapper">
 
+    <select id="getAnameModidMap" parameterType="long" resultType="string">
+        SELECT
+        concat(IFNULL(c.map_type,''),'=',a.id)
+        from qc_module_info a join med_module_mapping b on a.id=b.module_id
+        join med_record_analyze c on b.record_id=c.id
+        where a.hospital_id=#{hospitalId} and a.is_deleted='N'
+        and b.hospital_id=#{hospitalId} and b.is_deleted='N'
+        and c.hospital_id=#{hospitalId} and c.is_deleted='N'
+        and c.map_type!='-1' and a.default_module=0
+    </select>
+
 </mapper>

+ 5 - 0
dbanaly/src/main/resources/mapper/lt/OperationMapper.xml

@@ -0,0 +1,5 @@
+<?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.lantone.qc.dbanaly.lt.mapper.OperationMapper">
+
+</mapper>

+ 5 - 0
dbanaly/src/main/resources/mapper/lt/PacsMapper.xml

@@ -0,0 +1,5 @@
+<?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.lantone.qc.dbanaly.lt.mapper.PacsMapper">
+
+</mapper>

+ 0 - 0
dbanaly/src/main/resources/mapper/lt/RelationInfoMapper.xml


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است