Browse Source

初始化代码

攻心小虫 2 years ago
commit
83b573557d
100 changed files with 7562 additions and 0 deletions
  1. 28 0
      .gitignore
  2. 25 0
      admin-service/.gitignore
  3. 116 0
      admin-service/pom.xml
  4. 74 0
      admin-service/src/main/java/com/diagbot/AdminServiceApplication.java
  5. 26 0
      admin-service/src/main/resources/bootstrap.yml
  6. 270 0
      admin-service/src/main/resources/logback-spring.xml
  7. 25 0
      aipt-service/.gitignore
  8. 184 0
      aipt-service/pom.xml
  9. 34 0
      aipt-service/src/main/java/com/diagbot/AiptServiceApplication.java
  10. 489 0
      aipt-service/src/main/java/com/diagbot/aggregate/PushItemAggregate.java
  11. 248 0
      aipt-service/src/main/java/com/diagbot/aggregate/SearchItemAggregate.java
  12. 212 0
      aipt-service/src/main/java/com/diagbot/aggregate/TreatmentAggregate.java
  13. 102 0
      aipt-service/src/main/java/com/diagbot/aop/CryptAspect.java
  14. 41 0
      aipt-service/src/main/java/com/diagbot/client/AINeoServiceClient.java
  15. 47 0
      aipt-service/src/main/java/com/diagbot/client/AIServiceClient.java
  16. 36 0
      aipt-service/src/main/java/com/diagbot/client/NLPServiceClient.java
  17. 184 0
      aipt-service/src/main/java/com/diagbot/client/TranServiceClient.java
  18. 53 0
      aipt-service/src/main/java/com/diagbot/client/bean/AlgorithmClassify.java
  19. 17 0
      aipt-service/src/main/java/com/diagbot/client/bean/CalculateData.java
  20. 159 0
      aipt-service/src/main/java/com/diagbot/client/bean/Constants.java
  21. 202 0
      aipt-service/src/main/java/com/diagbot/client/bean/Feature.java
  22. 15 0
      aipt-service/src/main/java/com/diagbot/client/bean/HosCodeVO.java
  23. 190 0
      aipt-service/src/main/java/com/diagbot/client/bean/Response.java
  24. 25 0
      aipt-service/src/main/java/com/diagbot/client/bean/SearchData.java
  25. 132 0
      aipt-service/src/main/java/com/diagbot/client/bean/Status.java
  26. 49 0
      aipt-service/src/main/java/com/diagbot/client/hystrix/AINeoServiceHystrix.java
  27. 57 0
      aipt-service/src/main/java/com/diagbot/client/hystrix/AIServiceHystrix.java
  28. 49 0
      aipt-service/src/main/java/com/diagbot/client/hystrix/NLPServiceHystrix.java
  29. 200 0
      aipt-service/src/main/java/com/diagbot/client/hystrix/TranServiceHystrix.java
  30. 29 0
      aipt-service/src/main/java/com/diagbot/config/CryptConfiguer.java
  31. 19 0
      aipt-service/src/main/java/com/diagbot/config/CustomAccessTokenConverter.java
  32. 15 0
      aipt-service/src/main/java/com/diagbot/config/GlobalMethodSecurityConfigurer.java
  33. 48 0
      aipt-service/src/main/java/com/diagbot/config/JwtConfigurer.java
  34. 33 0
      aipt-service/src/main/java/com/diagbot/config/MybatisPlusConfigurer.java
  35. 42 0
      aipt-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  36. 70 0
      aipt-service/src/main/java/com/diagbot/config/SwaggerConfigurer.java
  37. 79 0
      aipt-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  38. 29 0
      aipt-service/src/main/java/com/diagbot/config/security/UrlConfigAttribute.java
  39. 79 0
      aipt-service/src/main/java/com/diagbot/config/security/UrlFilterSecurityInterceptor.java
  40. 40 0
      aipt-service/src/main/java/com/diagbot/config/security/UrlMetadataSourceService.java
  41. 18 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptBaseDTO.java
  42. 38 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptDetailDTO.java
  43. 20 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptIntroduceDTO.java
  44. 26 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptPushDTO.java
  45. 22 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptRes.java
  46. 30 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptRetrievalDTO.java
  47. 30 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptRetrievalExtDTO.java
  48. 16 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptWithOrderRes.java
  49. 9 0
      aipt-service/src/main/java/com/diagbot/dto/DeptInfoDTO.java
  50. 48 0
      aipt-service/src/main/java/com/diagbot/dto/DictionaryInfoDTO.java
  51. 19 0
      aipt-service/src/main/java/com/diagbot/dto/DisDTO.java
  52. 15 0
      aipt-service/src/main/java/com/diagbot/dto/DisScaleDTO.java
  53. 19 0
      aipt-service/src/main/java/com/diagbot/dto/DisTypeDTO.java
  54. 66 0
      aipt-service/src/main/java/com/diagbot/dto/DisclaimerInformationDTO.java
  55. 40 0
      aipt-service/src/main/java/com/diagbot/dto/DiseaseIcdDTO.java
  56. 23 0
      aipt-service/src/main/java/com/diagbot/dto/EvaluationDTO.java
  57. 20 0
      aipt-service/src/main/java/com/diagbot/dto/FeatureConceptDTO.java
  58. 20 0
      aipt-service/src/main/java/com/diagbot/dto/FeatureDTO.java
  59. 15 0
      aipt-service/src/main/java/com/diagbot/dto/GetDiseaseIcdDTO.java
  60. 156 0
      aipt-service/src/main/java/com/diagbot/dto/GetTopPatientInfoDTO.java
  61. 167 0
      aipt-service/src/main/java/com/diagbot/dto/GetTopPatientInfoDjDTO.java
  62. 15 0
      aipt-service/src/main/java/com/diagbot/dto/HospitalDeptInfoDTO.java
  63. 20 0
      aipt-service/src/main/java/com/diagbot/dto/IndexConfigAndDataDTO.java
  64. 29 0
      aipt-service/src/main/java/com/diagbot/dto/IndexConfigDTO.java
  65. 26 0
      aipt-service/src/main/java/com/diagbot/dto/IndexDTO.java
  66. 25 0
      aipt-service/src/main/java/com/diagbot/dto/IndexDataDTO.java
  67. 23 0
      aipt-service/src/main/java/com/diagbot/dto/Lexeme.java
  68. 19 0
      aipt-service/src/main/java/com/diagbot/dto/PartDTO.java
  69. 18 0
      aipt-service/src/main/java/com/diagbot/dto/PartSymptomDTO.java
  70. 33 0
      aipt-service/src/main/java/com/diagbot/dto/PushDTO.java
  71. 38 0
      aipt-service/src/main/java/com/diagbot/dto/RetrievalDTO.java
  72. 22 0
      aipt-service/src/main/java/com/diagbot/dto/ScaleIndexDTO.java
  73. 72 0
      aipt-service/src/main/java/com/diagbot/dto/SysSetInfoDTO.java
  74. 16 0
      aipt-service/src/main/java/com/diagbot/dto/UsualDTO.java
  75. 60 0
      aipt-service/src/main/java/com/diagbot/dto/VersionDetailDTO.java
  76. 48 0
      aipt-service/src/main/java/com/diagbot/dto/VersionWrapperDTO.java
  77. 147 0
      aipt-service/src/main/java/com/diagbot/entity/Concept.java
  78. 216 0
      aipt-service/src/main/java/com/diagbot/entity/ConceptDetail.java
  79. 88 0
      aipt-service/src/main/java/com/diagbot/entity/DictionaryInfo.java
  80. 78 0
      aipt-service/src/main/java/com/diagbot/entity/DisScale.java
  81. 78 0
      aipt-service/src/main/java/com/diagbot/entity/DisType.java
  82. 196 0
      aipt-service/src/main/java/com/diagbot/entity/DisclaimerInformation.java
  83. 196 0
      aipt-service/src/main/java/com/diagbot/entity/DiseaseIcd.java
  84. 166 0
      aipt-service/src/main/java/com/diagbot/entity/Evaluation.java
  85. 104 0
      aipt-service/src/main/java/com/diagbot/entity/HospitalDept.java
  86. 170 0
      aipt-service/src/main/java/com/diagbot/entity/IndexConfig.java
  87. 78 0
      aipt-service/src/main/java/com/diagbot/entity/KlSymptom.java
  88. 147 0
      aipt-service/src/main/java/com/diagbot/entity/LisMapping.java
  89. 36 0
      aipt-service/src/main/java/com/diagbot/entity/ScaleContent.java
  90. 24 0
      aipt-service/src/main/java/com/diagbot/entity/Symptom.java
  91. 183 0
      aipt-service/src/main/java/com/diagbot/entity/VersionDetail.java
  92. 167 0
      aipt-service/src/main/java/com/diagbot/entity/VersionInfo.java
  93. 43 0
      aipt-service/src/main/java/com/diagbot/entity/wrapper/ConceptWrapper.java
  94. 18 0
      aipt-service/src/main/java/com/diagbot/entity/wrapper/LisMappingWrapper.java
  95. 77 0
      aipt-service/src/main/java/com/diagbot/enums/ConceptTypeEnum.java
  96. 49 0
      aipt-service/src/main/java/com/diagbot/enums/DisTypeEnum.java
  97. 66 0
      aipt-service/src/main/java/com/diagbot/enums/LexiconRSTypeEnum.java
  98. 133 0
      aipt-service/src/main/java/com/diagbot/enums/LexiconTypeEnum.java
  99. 49 0
      aipt-service/src/main/java/com/diagbot/enums/LisSourceEnum.java
  100. 0 0
      aipt-service/src/main/java/com/diagbot/enums/PositionTypeEnum.java

+ 28 - 0
.gitignore

@@ -0,0 +1,28 @@
+/target/
+!.mvn/wrapper/maven-wrapper.jar
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/build/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+/logs/
+/docs/

+ 25 - 0
admin-service/.gitignore

@@ -0,0 +1,25 @@
+/target/
+!.mvn/wrapper/maven-wrapper.jar
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/build/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/

+ 116 - 0
admin-service/pom.xml

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>admin-service</artifactId>
+    <packaging>jar</packaging>
+
+    <name>admin-service</name>
+    <description>Admin Service for Spring Boot</description>
+
+    <parent>
+        <groupId>com.diagbot</groupId>
+        <artifactId>diagbotcloud</artifactId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+
+    <dependencies>
+        <!-- 配置-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-config</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+
+        <!--hystrix-dashboard-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
+        </dependency>
+        <!--hystrix -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
+        </dependency>
+        <!--spring cloud admin server-->
+        <dependency>
+            <groupId>de.codecentric</groupId>
+            <artifactId>spring-boot-admin-starter-server</artifactId>
+            <version>2.2.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>net.logstash.logback</groupId>
+            <artifactId>logstash-logback-encoder</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-tomcat</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-undertow</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jolokia</groupId>
+            <artifactId>jolokia-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+            <!-- 添加docker-maven插件 -->
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+                <configuration>
+                    <imageName>${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>
+                    <forceTags>true</forceTags>
+                    <!--镜像的FROM,使用压缩的小镜像-->
+                    <baseImage>frolvlad/alpine-oraclejre8:slim</baseImage>
+                    <entryPoint>["java", "-jar", "-Xms256m", "-Xmx1024m", "-Duser.timezone=GMT+8", "/${project.build.finalName}.jar"]</entryPoint>
+                    <resources>
+                        <resource>
+                            <targetPath>/</targetPath>
+                            <directory>${project.build.directory}</directory>
+                            <include>${project.build.finalName}.jar</include>
+                        </resource>
+                    </resources>
+                    <serverId>docker-registry</serverId>
+                    <registryUrl>${registryUrl}</registryUrl>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 74 - 0
admin-service/src/main/java/com/diagbot/AdminServiceApplication.java

@@ -0,0 +1,74 @@
+package com.diagbot;
+
+
+import de.codecentric.boot.admin.server.config.AdminServerProperties;
+import de.codecentric.boot.admin.server.config.EnableAdminServer;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.cloud.netflix.hystrix.EnableHystrix;
+import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
+import org.springframework.cloud.netflix.turbine.EnableTurbine;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
+
+/**
+ * @Description: 系统管理中心启动文件
+ * @author: gaodm
+ * @time: 2018/8/7 10:48
+ */
+@SpringBootApplication
+@EnableTurbine
+@EnableHystrixDashboard
+@EnableHystrix
+@EnableAdminServer
+@Configuration
+@RefreshScope
+@ConfigurationPropertiesScan
+public class AdminServiceApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(AdminServiceApplication.class, args);
+    }
+
+    @Profile({ "local", "dev", "test" })
+    @Configuration
+    public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
+        @Override
+        protected void configure(HttpSecurity http) throws Exception {
+            http.authorizeRequests().anyRequest().permitAll()
+                    .and().csrf().disable();
+        }
+    }
+
+    @Profile({ "pre", "pro" })
+    @Configuration
+    public static class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
+        private final String adminContextPath;
+
+        public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
+            this.adminContextPath = adminServerProperties.getContextPath();
+        }
+
+        @Override
+        protected void configure(HttpSecurity http) throws Exception {
+            SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
+            successHandler.setTargetUrlParameter("redirectTo");
+
+            http.authorizeRequests()
+                    .antMatchers(adminContextPath + "/assets/**").permitAll()
+                    .antMatchers(adminContextPath + "/login").permitAll()
+                    .anyRequest().authenticated()
+                    .and()
+                    .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
+                    .logout().logoutUrl(adminContextPath + "/logout").and()
+                    .httpBasic().and()
+                    .csrf().disable();
+        }
+    }
+
+}

+ 26 - 0
admin-service/src/main/resources/bootstrap.yml

@@ -0,0 +1,26 @@
+spring:
+  application:
+    name: admin-service
+  cloud:
+    config:
+      #uri: http://${myuri}:8769
+      fail-fast: true
+      discovery:
+        enabled: true
+        serviceId: config-server
+  profiles:
+    active: local
+
+eureka:
+  client:
+    serviceUrl:
+      defaultZone: http://${myuri}:8761/eureka/
+
+myuri: localhost
+
+
+
+
+
+
+

+ 270 - 0
admin-service/src/main/resources/logback-spring.xml

@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <!-- 项目名称 -->
+    <property name="APPDIR" value="admin-service"/>
+    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
+    <property name="LOG_PATH" value="../logs"/>
+
+    <!-- 彩色日志 -->
+    <!-- 彩色日志依赖的渲染类 -->
+    <conversionRule conversionWord="clr"
+                    converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+    <conversionRule conversionWord="wex"
+                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+    <conversionRule conversionWord="wEx"
+                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
+    <!-- 彩色日志格式 -->
+    <!--<property name="CONSOLE_LOG_PATTERN"-->
+    <!--value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(-&#45;&#45;){faint} %clr([%15.15t]){faint} %clr(%logger){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>-->
+    <!--包名输出缩进对齐-->
+    <property name="CONSOLE_LOG_PATTERN"
+              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+
+    <!--  日志记录器,日期滚动记录
+            ERROR 级别
+     -->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文件的路径及文件名 -->
+        <file>${LOG_PATH}/${APPDIR}/${APPDIR}_error.log</file>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 归档的日志文件的路径,例如今天是1992-11-06日志,当前写的日志文件路径为file节点指定,
+            可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
+            而1992-11-06的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
+            <fileNamePattern>${LOG_PATH}/${APPDIR}/error/${APPDIR}-error-%d{yyyy-MM-dd}.%i.log
+            </fileNamePattern>
+            <!--  保留日志天数 -->
+            <maxHistory>30</maxHistory>
+            <!-- 除按日志记录之外,还配置了日志文件不能超过10MB,若超过10MB,日志文件会以索引0开始,
+            命名日志文件,例如log-error-1992-11-06.0.log -->
+            <timeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <!-- 追加方式记录日志 -->
+        <append>true</append>
+        <!-- 日志文件的格式 -->
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger Line:%-3L - %msg%n
+            </pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <!-- 此日志文件记录error级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>error</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+
+    <!-- 日志记录器,日期滚动记录
+            WARN  级别
+     -->
+    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文件的路径及文件名 -->
+        <file>${LOG_PATH}/${APPDIR}/${APPDIR}_warn.log</file>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 归档的日志文件的路径,例如今天1992-11-06日志,当前写的日志文件路径为file节点指定,
+            可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
+            而1992-11-06的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
+            <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/${APPDIR}-warn-%d{yyyy-MM-dd}.%i.log
+            </fileNamePattern>
+            <!--  保留日志天数 -->
+            <maxHistory>15</maxHistory>
+            <!-- 除按日志记录之外,还配置了日志文件不能超过10MB,若超过10MB,日志文件会以索引0开始,
+            命名日志文件,例如log-warn-1992-11-06.0.log -->
+            <timeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <!-- 追加方式记录日志 -->
+        <append>true</append>
+        <!-- 日志文件的格式 -->
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger Line:%-3L - %msg%n
+            </pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <!-- 此日志文件只记录warn级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>warn</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+
+    <!-- 日志记录器,日期滚动记录
+            INFO  级别
+    -->
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文件的路径及文件名 -->
+        <file>${LOG_PATH}/${APPDIR}/${APPDIR}_info.log</file>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 归档的日志文件的路径,例如今天是1992-11-06日志,当前写的日志文件路径为file节点指定,
+            可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
+            而1992-11-06的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
+            <fileNamePattern>${LOG_PATH}/${APPDIR}/info/${APPDIR}-info-%d{yyyy-MM-dd}.%i.log
+            </fileNamePattern>
+            <!--  保留日志天数 -->
+            <maxHistory>15</maxHistory>
+            <!-- 除按日志记录之外,还配置了日志文件不能超过10MB,若超过10MB,日志文件会以索引0开始,
+            命名日志文件,例如log-info-1992-11-06.0.log -->
+            <timeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <!-- 追加方式记录日志 -->
+        <append>true</append>
+        <!-- 日志文件的格式 -->
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger Line:%-3L - %msg%n
+            </pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <!-- 此日志文件只记录info级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>info</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+
+    <!-- 日志记录器,日期滚动记录
+            DEBUG  级别
+    -->
+    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文件的路径及文件名 -->
+        <file>${LOG_PATH}/${APPDIR}/${APPDIR}_debug.log</file>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 归档的日志文件的路径,例如今天是1992-11-06日志,当前写的日志文件路径为file节点指定,
+            可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
+            而1992-11-06的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
+            <fileNamePattern>${LOG_PATH}/${APPDIR}/debug/${APPDIR}-debug-%d{yyyy-MM-dd}.%i.log
+            </fileNamePattern>
+            <!--  保留日志天数 -->
+            <maxHistory>15</maxHistory>
+            <!-- 除按日志记录之外,还配置了日志文件不能超过10MB,若超过10MB,日志文件会以索引0开始,
+            命名日志文件,例如log-debug-1992-11-06.0.log -->
+            <timeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <!-- 追加方式记录日志 -->
+        <append>true</append>
+        <!-- 日志文件的格式 -->
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger Line:%-3L - %msg%n
+            </pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <!-- 此日志文件只记录debug级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>debug</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- ConsoleAppender 控制台输出日志 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <!--encoder 默认配置为PatternLayoutEncoder-->
+        <encoder>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level -&#45;&#45; [%thread] %logger Line:%-3L - %msg%n</pattern>-->
+            <charset>utf-8</charset>
+        </encoder>
+        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>debug</level>
+        </filter>
+    </appender>
+
+
+    <!--&lt;!&ndash;输出到mysql数据库的appender配置     &ndash;&gt;-->
+    <!--<appender name="db" class="ch.qos.logback.classic.db.DBAppender">-->
+    <!--<connectionSource-->
+    <!--class="ch.qos.logback.core.db.DriverManagerConnectionSource">-->
+    <!--<driverClass>com.mysql.cj.jdbc.Driver</driverClass>-->
+    <!--<url>jdbc:mysql://120.77.222.42:3306/logback_member?characterEncoding=utf8</url>-->
+    <!--<user>root</user>-->
+    <!--<password>a123456789</password>-->
+    <!--</connectionSource>-->
+    <!--</appender>-->
+
+    <!-- FrameworkServlet日志-->
+    <logger name="org.springframework" level="WARN"/>
+
+    <!-- mybatis日志打印-->
+    <logger name="org.apache.ibatis" level="DEBUG"/>
+    <logger name="java.sql" level="DEBUG"/>
+
+    <!--  项目 mapper 路径
+            console控制台显示sql语句:STDOUT.filter.level -> debug级别
+    -->
+    <logger name="com.diagbot.mapper" level="DEBUG"/>
+
+    <!-- 本地环境下的日志配置 -->
+    <springProfile name="local">
+        <root level="INFO">
+            <appender-ref ref="ERROR"/>
+            <appender-ref ref="WARN"/>
+            <appender-ref ref="INFO"/>
+            <appender-ref ref="DEBUG"/>
+            <appender-ref ref="STDOUT"/>
+        </root>
+    </springProfile>
+
+    <!-- 开发环境下的日志配置 -->
+    <springProfile name="dev">
+        <root level="INFO">
+            <appender-ref ref="ERROR"/>
+            <appender-ref ref="WARN"/>
+            <appender-ref ref="INFO"/>
+            <appender-ref ref="DEBUG"/>
+            <appender-ref ref="STDOUT"/>
+        </root>
+    </springProfile>
+
+    <!-- 测试环境下的日志配置 -->
+    <springProfile name="test">
+        <root level="INFO">
+            <appender-ref ref="ERROR"/>
+            <appender-ref ref="WARN"/>
+            <appender-ref ref="INFO"/>
+            <appender-ref ref="DEBUG"/>
+            <appender-ref ref="STDOUT"/>
+        </root>
+    </springProfile>
+
+    <!-- 预发布环境下的日志配置 -->
+    <springProfile name="pre">
+        <root level="INFO">
+            <appender-ref ref="ERROR"/>
+            <appender-ref ref="WARN"/>
+            <appender-ref ref="INFO"/>
+            <appender-ref ref="DEBUG"/>
+            <appender-ref ref="STDOUT"/>
+        </root>
+    </springProfile>
+
+    <!-- 生产环境下的日志配置 -->
+    <springProfile name="pro">
+        <root level="INFO">
+            <appender-ref ref="ERROR"/>
+            <appender-ref ref="WARN"/>
+            <appender-ref ref="INFO"/>
+            <appender-ref ref="DEBUG"/>
+            <appender-ref ref="STDOUT"/>
+        </root>
+    </springProfile>
+</configuration>

+ 25 - 0
aipt-service/.gitignore

@@ -0,0 +1,25 @@
+/target/
+!.mvn/wrapper/maven-wrapper.jar
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/build/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/

+ 184 - 0
aipt-service/pom.xml

@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>aipt-service</artifactId>
+    <packaging>jar</packaging>
+
+    <name>aipt-service</name>
+    <description>AI and Knowledge Service for Spring Boot</description>
+
+    <parent>
+        <groupId>com.diagbot</groupId>
+        <artifactId>diagbotcloud</artifactId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.diagbot</groupId>
+            <artifactId>common</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
+
+        <!-- 配置-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-config</artifactId>
+        </dependency>
+
+        <!-- 开启web-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-tomcat</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-undertow</artifactId>
+        </dependency>
+
+        <!-- 开启feign-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+
+        <!-- dashboard -->
+        <!-- actuator-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <!--swagger-->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+        </dependency>
+        <!--database-->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
+        <!--security-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-oauth2</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- mybatis-plus begin -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+        </dependency>
+        <!-- mybatis-plus end -->
+
+        <!-- 阿里巴巴druid数据库连接池 -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+        </dependency>
+
+        <!-- springboot整合mybatis(核心就这一个) -->
+        <!-- 注意顺序,这个一定要放在最下面 -->
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.github.lvyahui8</groupId>
+            <artifactId>spring-boot-data-aggregator-starter</artifactId>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+			<plugin>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>copy</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy-dependencies</goal>
+						</goals>
+						<configuration>
+							<outputDirectory>${project.build.directory}/lib</outputDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<artifactId>maven-resources-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>copy-resources</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy-resources</goal>
+						</goals>
+						<configuration>
+							<resources>
+								<resource>
+									<directory>src/main/resources</directory>
+								</resource>
+							</resources>
+							<outputDirectory>${project.build.directory}/resources</outputDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<artifactId>maven-jar-plugin</artifactId>
+				<configuration>
+					<excludes>
+						<exclude>mapper</exclude>
+						<exclude>*.**</exclude>
+						<exclude>**/*.xml</exclude>
+						<exclude>**/*.yml</exclude>
+					</excludes>
+					<archive>
+						<manifest>
+							<mainClass>${main-class}</mainClass>
+							<addClasspath>true</addClasspath>
+							<classpathPrefix>lib/</classpathPrefix>
+							<useUniqueVersions>false</useUniqueVersions>
+						</manifest>
+					</archive>
+					<outputDirectory>${project.build.directory}</outputDirectory>
+				</configuration>
+			</plugin>
+		</plugins>
+    </build>
+
+</project>

+ 34 - 0
aipt-service/src/main/java/com/diagbot/AiptServiceApplication.java

@@ -0,0 +1,34 @@
+package com.diagbot;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
+import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
+import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration;
+import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
+import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.cloud.netflix.hystrix.EnableHystrix;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+/**
+ * @Description: 知识库服务启动文件
+ * @author: gaodm
+ * @time: 2018/8/7 9:24
+ */
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
+        JmxAutoConfiguration.class, ThymeleafAutoConfiguration.class })
+@EnableEurekaClient
+@EnableFeignClients({ "com.diagbot.client" })
+@EnableHystrix
+@EnableCircuitBreaker
+@RefreshScope
+@ConfigurationPropertiesScan
+public class AiptServiceApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(AiptServiceApplication.class, args);
+    }
+}

+ 489 - 0
aipt-service/src/main/java/com/diagbot/aggregate/PushItemAggregate.java

@@ -0,0 +1,489 @@
+package com.diagbot.aggregate;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.diagbot.biz.push.entity.FeatureRate;
+import com.diagbot.biz.push.entity.MedicalIndication;
+import com.diagbot.biz.push.entity.MedicalIndicationDetail;
+import com.diagbot.biz.push.entity.ResponseData;
+import com.diagbot.biz.push.enums.FeatureTypeEnum;
+import com.diagbot.client.bean.CalculateData;
+import com.diagbot.client.bean.HosCodeVO;
+import com.diagbot.config.CryptConfiguer;
+import com.diagbot.dto.ConceptPushDTO;
+import com.diagbot.dto.PushDTO;
+import com.diagbot.entity.Concept;
+import com.diagbot.entity.KlSymptom;
+import com.diagbot.enums.ConceptTypeEnum;
+import com.diagbot.enums.LexiconTypeEnum;
+import com.diagbot.enums.SysTypeEnum;
+import com.diagbot.facade.ClinicalFacade;
+import com.diagbot.facade.ConceptFacade;
+import com.diagbot.facade.TranEnDeFacade;
+import com.diagbot.util.CryptUtil;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.FastJsonUtils;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.ParamConvertUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.ConceptBaseVO;
+import com.diagbot.vo.LisConfigVO;
+import com.google.common.collect.Lists;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2019/10/17 11:32
+ */
+@Component
+public class PushItemAggregate {
+
+    @Autowired
+    private ConceptFacade conceptFacade;
+    @Autowired
+    private TranEnDeFacade tranEnDeFacade;
+    @Autowired
+    private ClinicalFacade clinicalFacade;
+    @Autowired
+    CryptConfiguer cryptConfiguer;
+
+    @DataProvider("setAll")
+    public PushDTO setAll(
+            @InvokeParameter("pushDTO") PushDTO pushDTO,
+            @DataConsumer("getDept") ConceptPushDTO dept,
+            @DataConsumer("setSymptom") List<ConceptPushDTO> symptom,
+            @DataConsumer("setVital") List<ConceptPushDTO> vital,
+            @DataConsumer("setLab") List<ConceptPushDTO> lab,
+            @DataConsumer("setRetPacs") List<ConceptPushDTO> pacs,
+            @DataConsumer("setDis") Map<String, List<ConceptPushDTO>> dis,
+            @DataConsumer("setMedicalIndications") List<MedicalIndication> medicalIndications) {
+        if (pushDTO == null) {
+            pushDTO = new PushDTO();
+        }
+        if (null != dept) {
+            pushDTO.setDept(dept);
+        }
+
+        if (ListUtil.isNotEmpty(symptom)) {
+            pushDTO.setSymptom(symptom);
+        }
+        if (ListUtil.isNotEmpty(vital)) {
+            pushDTO.setVital(vital);
+        }
+        if (ListUtil.isNotEmpty(lab)) {
+            pushDTO.setLab(lab);
+        }
+        if (ListUtil.isNotEmpty(pacs)) {
+            pushDTO.setPacs(pacs);
+        }
+        if (null != dis) {
+            pushDTO.setDis(dis);
+        }
+        if (ListUtil.isNotEmpty(medicalIndications)) {
+            pushDTO.setMedicalIndications(medicalIndications);
+        }
+        return pushDTO;
+    }
+
+    /**
+     * 根据诊断推送确定科室
+     *
+     * @param data
+     * @return
+     */
+    @DataProvider("getDept")
+    public ConceptPushDTO getDept(@InvokeParameter("data") ResponseData data) {
+        List<FeatureRate> dis = data.getDis();
+        String deptName = "";
+        if (ListUtil.isNotEmpty(dis)) {
+            for (FeatureRate featureRate : dis) {
+                if (StringUtil.isNotBlank(featureRate.getExtraProperty())) {
+                    deptName = featureRate.getExtraProperty();
+                    break;
+                }
+            }
+        }
+        //没有推送信息时,默认取全科模板
+        if (StringUtil.isBlank(deptName)) {
+            deptName = "全科";
+            if (cryptConfiguer.cryptFlag) {
+                deptName = CryptUtil.encrypt_char(deptName);
+            }
+        }
+        ConceptBaseVO conceptBaseVO = new ConceptBaseVO();
+        conceptBaseVO.setName(deptName);
+        conceptBaseVO.setLibType(LexiconTypeEnum.DEPARTMENT.getKey());
+        ConceptPushDTO deptDTO = new ConceptPushDTO();
+        Concept dept = conceptFacade.getConcept(conceptBaseVO);
+        if (dept == null) {
+            if (cryptConfiguer.cryptFlag) {
+                if (deptName.equals(CryptUtil.encrypt_char("全科")) == false) {
+                    deptName = CryptUtil.encrypt_char("全科");
+                }
+            } else {
+                if (deptName.equals("全科") == false) {
+                    deptName = "全科";
+                }
+            }
+            conceptBaseVO.setName(deptName);
+            dept = conceptFacade.getConcept(conceptBaseVO);
+        }
+        if (dept != null) {
+            deptDTO.setName(deptName);
+            deptDTO.setConceptId(dept.getId());
+            deptDTO.setLibType(ConceptTypeEnum.DEPARTMENT.getKey());
+        }
+        return deptDTO;
+    }
+
+    @DataProvider("setSymptom")
+    public List<ConceptPushDTO> setSymptom(@InvokeParameter("featureTypeSet") Set<String> featureTypeSet,
+                                           @InvokeParameter("data") ResponseData data,
+                                           @InvokeParameter("sysType") Integer sysType) {
+        List<ConceptPushDTO> symptomRes = ListUtil.newArrayList();
+        //症状 概念列表
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Symptom.getKey()))) {
+            List<FeatureRate> symptom = data.getSymptom();
+            if (ListUtil.isNotEmpty(symptom)) {
+                List<String> nameList = symptom
+                        .stream()
+                        .map(featureRate -> featureRate.getFeatureName())
+                        .collect(Collectors.toList());
+                if (ListUtil.isNotEmpty(nameList)) {
+                    symptomRes = getConceptDTOList(nameList, LexiconTypeEnum.SYMPTOM.getKey());
+                    if (sysType.equals(SysTypeEnum.TRIAGE_SERVICE.getKey())
+                            || sysType.equals(SysTypeEnum.PREC_SERVICE.getKey())) {
+                        Map<String, KlSymptom> klSymptomMap
+                                = conceptFacade.getSymptomWithExplain(nameList, LexiconTypeEnum.SYMPTOM.getKey());
+                        if (klSymptomMap != null) {
+                            symptomRes.forEach(conceptPushDTO -> {
+                                if (klSymptomMap.containsKey(conceptPushDTO.getName())) {
+                                    conceptPushDTO
+                                            .setDescription(klSymptomMap.get(conceptPushDTO.getName()).getDescription());
+                                    conceptPushDTO
+                                            .setExplains(klSymptomMap.get(conceptPushDTO.getName()).getExplains());
+                                    if (StringUtil.isBlank(klSymptomMap.get(conceptPushDTO.getName()).getExplains())) {
+                                        conceptPushDTO.setHasExplain(0);
+                                    } else {
+                                        conceptPushDTO.setHasExplain(1);
+                                    }
+                                }
+                            });
+                        }
+                    }
+                }
+            }
+        }
+        return symptomRes;
+    }
+
+    @DataProvider("setVital")
+    public List<ConceptPushDTO> setVital(@InvokeParameter("featureTypeSet") Set<String> featureTypeSet,
+                                         @InvokeParameter("data") ResponseData data) {
+        List<ConceptPushDTO> vitalRes = ListUtil.newArrayList();
+        //查体 查体结果
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Vital_Result.getKey()))) {
+            List<FeatureRate> vital = data.getVitals();
+            if (ListUtil.isNotEmpty(vital)) {
+                List<String> nameList = vital
+                        .stream()
+                        .map(featureRate -> featureRate.getFeatureName())
+                        .collect(Collectors.toList());
+                if (ListUtil.isNotEmpty(nameList)) {
+                    vitalRes = getConceptDTOList(nameList, LexiconTypeEnum.VITAL_RESULT.getKey());
+                }
+            }
+        }
+
+        //查体 查体指标
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Vital_Index.getKey()))) {
+            List<FeatureRate> vital = data.getVitals();
+            if (ListUtil.isNotEmpty(vital)) {
+                List<String> nameList = vital
+                        .stream()
+                        .map(featureRate -> featureRate.getFeatureName())
+                        .collect(Collectors.toList());
+                if (ListUtil.isNotEmpty(nameList)) {
+                    vitalRes = getConceptDTOList(nameList, LexiconTypeEnum.VITAL_INDEX.getKey());
+                }
+            }
+        }
+        return vitalRes;
+    }
+
+    @DataProvider("setLab")
+    public List<ConceptPushDTO> setLab(@InvokeParameter("featureTypeSet") Set<String> featureTypeSet,
+                                       @InvokeParameter("data") ResponseData data,
+                                       @InvokeParameter("isConnect") Boolean isConnect,
+                                       @InvokeParameter("hosCode") String hosCode) {
+        List<ConceptPushDTO> labRes = ListUtil.newArrayList();
+        //化验 概念列表-公表项
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Lis.getKey()))) {
+            List<FeatureRate> lis = data.getLabs();
+            if (ListUtil.isNotEmpty(lis)) {
+                List<String> nameList = lis
+                        .stream()
+                        .map(featureRate -> featureRate.getFeatureName())
+                        .collect(Collectors.toList());
+                if (ListUtil.isNotEmpty(nameList)) {
+                    List<ConceptPushDTO> lisDTO = getConceptDTOList(nameList, LexiconTypeEnum.LIS_PACKAGE.getKey());
+                    if (isConnect) {
+                        lisDTO = addClientName(lisDTO, hosCode, ConceptTypeEnum.Lis.getKey());
+                    }
+                    labRes = lisDTO;
+                }
+            }
+        }
+        return labRes;
+    }
+
+    @DataProvider("setRetPacs")
+    public List<ConceptPushDTO> setRetPacs(@InvokeParameter("featureTypeSet") Set<String> featureTypeSet,
+                                           @InvokeParameter("data") ResponseData data,
+                                           @InvokeParameter("isConnect") Boolean isConnect,
+                                           @InvokeParameter("hosCode") String hosCode) {
+        List<ConceptPushDTO> labRes = ListUtil.newArrayList();
+        //辅检 概念列表
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Pacs.getKey()))) {
+            List<FeatureRate> pacs = data.getPacs();
+            if (ListUtil.isNotEmpty(pacs)) {
+                List<String> nameList = pacs
+                        .stream()
+                        .map(featureRate -> featureRate.getFeatureName())
+                        .collect(Collectors.toList());
+                if (ListUtil.isNotEmpty(nameList)) {
+                    List<ConceptPushDTO> pacsDTO = getConceptDTOList(nameList, LexiconTypeEnum.PACS_ITEMS.getKey());
+                    if (isConnect) {
+                        pacsDTO = addClientName(pacsDTO, hosCode, ConceptTypeEnum.Pacs.getKey());
+                    }
+                    labRes = pacsDTO;
+                }
+            }
+        }
+        return labRes;
+    }
+
+    @DataProvider("setDis")
+    public Map<String, List<ConceptPushDTO>> setDis(@InvokeParameter("featureTypeSet") Set<String> featureTypeSet,
+                                                    @InvokeParameter("data") ResponseData data,
+                                                    @InvokeParameter("isConnect") Boolean isConnect,
+                                                    @InvokeParameter("hosCode") String hosCode) {
+        List<FeatureRate> dis = data.getDis();
+        Map<String, List<ConceptPushDTO>> disRes = new HashMap<>();
+        //诊断 map
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Disease.getKey()))) {
+            if (ListUtil.isNotEmpty(dis)) {
+                Map<String, List<ConceptPushDTO>> disMapDTO = new LinkedHashMap<>();
+                Map<String, List<FeatureRate>> disFeatureMap = new LinkedHashMap<>();
+                //诊断分类
+                for (FeatureRate featureRate : dis) {
+                    if (StringUtil.isBlank(featureRate.getDesc())) {
+                        featureRate.setDesc("{\"可能诊断\":\"\"}");
+                    }
+                    Map<String, Object> descMap = FastJsonUtils.getJsonToMap(featureRate.getDesc());
+                    for (String disClass : descMap.keySet()) {
+                        List<FeatureRate> featureRateList = Lists.newLinkedList();
+                        if (disFeatureMap.get(disClass) != null) {
+                            featureRateList = disFeatureMap.get(disClass);
+                        }
+                        featureRateList.add(featureRate);
+                        disFeatureMap.put(disClass, featureRateList);
+                    }
+                }
+                for (Map.Entry<String, List<FeatureRate>> entry : disFeatureMap.entrySet()) {
+                    List<String> nameListByDisClass = entry.getValue()
+                            .stream()
+                            .map(featureRate -> featureRate.getFeatureName())
+                            .collect(Collectors.toList());
+                    if (ListUtil.isNotEmpty(nameListByDisClass)) {
+                        List<ConceptPushDTO> disDTO
+                                = getConceptDTOList(nameListByDisClass, LexiconTypeEnum.DIAGNOSIS.getKey());
+                        if (isConnect) {
+                            disDTO = addClientName(disDTO, hosCode, ConceptTypeEnum.Disease.getKey());
+                        }
+                        disMapDTO.put(entry.getKey(), disDTO);
+                    }
+                }
+                disRes = disMapDTO;
+            }
+        }
+        //诊断转成明文
+        if (cryptConfiguer.cryptFlag) {
+            for (Map.Entry<String, List<ConceptPushDTO>> entry : disRes.entrySet()) {
+                if (ListUtil.isNotEmpty(entry.getValue())) {
+                    for (ConceptPushDTO conceptPushDTO : entry.getValue()) {
+                        conceptPushDTO.setName(CryptUtil.decrypt_char(conceptPushDTO.getName()));
+                    }
+                    disRes.put(entry.getKey(), entry.getValue());
+                }
+            }
+        }
+        return disRes;
+    }
+
+    @DataProvider("setMedicalIndications")
+    public List<MedicalIndication> setMedicalIndications(@InvokeParameter("featureTypeSet") Set<String> featureTypeSet,
+                                                         @InvokeParameter("data") ResponseData data) {
+        List<MedicalIndication> medicalIndicationRes = ListUtil.newArrayList();
+        //核心指标 list
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Indication.getKey()))) {
+            List<MedicalIndication> medicalIndicationList = data.getMedicalIndications();
+            ConceptBaseVO conceptBaseVO = new ConceptBaseVO();
+            if (ListUtil.isNotEmpty(medicalIndicationList)) {
+                for (MedicalIndication medicalIndication : medicalIndicationList) {
+                    medicalIndication.setLibType(LexiconTypeEnum.CORE_INDICATORS.getKey());
+                    medicalIndication.setType(ConceptTypeEnum.Indication.getKey());
+                    //关联概念,增加概念id
+                    conceptBaseVO.setName(medicalIndication.getName());
+                    conceptBaseVO.setLibType(LexiconTypeEnum.CORE_INDICATORS.getKey());
+                    Concept medConcept = conceptFacade.getConcept(conceptBaseVO);
+                    if (medConcept != null) {
+                        medicalIndication.setConceptId(medConcept.getId());
+                    }
+                    if (ListUtil.isNotEmpty(medicalIndication.getDetails())) {
+                        for (MedicalIndicationDetail detail : medicalIndication.getDetails()) {
+                            //量表,增加概念id;其他类型保留图谱返回结果
+                            if (detail.getType().equals(1)) {
+                                JSONObject scaleJson = detail.getContent();
+                                if (null != scaleJson.get("name")) {
+                                    String scaleName = scaleJson.get("name").toString();
+                                    if (cryptConfiguer.cryptFlag) {
+                                        scaleName = CryptUtil.encrypt_char(scaleName);
+                                    }
+                                    conceptBaseVO.setName(scaleName);
+                                    conceptBaseVO.setLibType(LexiconTypeEnum.GAUGE.getKey());
+                                    Concept scaleConcept = conceptFacade.getConcept(conceptBaseVO);
+                                    scaleJson.put("libType", LexiconTypeEnum.GAUGE.getKey());
+                                    scaleJson.put("type", ConceptTypeEnum.Scale.getKey());
+                                    if (scaleConcept != null) {
+                                        scaleJson.put("conceptId", scaleConcept.getId());
+                                    } else {
+                                        scaleJson.put("conceptId", null);
+                                    }
+                                    detail.setContent(scaleJson);
+                                }
+                            } else if (detail.getType().equals(2)) {
+                                JSONObject calcJson = detail.getContent();
+                                CalculateData calcData = new CalculateData();
+                                calcData.setData(JSON.parseObject(FastJsonUtils.getBeanToJson(detail)));
+                                calcData.setType(2);
+                                Map<String, Object> resultMap = clinicalFacade.scaleCalc(calcData);
+                                if (resultMap.containsKey("result") && calcJson != null) {
+                                    calcJson.put("result", resultMap.get("result"));
+                                    detail.setContent(calcJson);
+                                }
+                            }
+                        }
+                    }
+                }
+                medicalIndicationRes = medicalIndicationList;
+            }
+        }
+        return medicalIndicationRes;
+    }
+
+
+    /**
+     * 推理返回概念
+     *
+     * @param nameList
+     * @param libType
+     * @return
+     */
+    public List<ConceptPushDTO> getConceptDTOList(List<String> nameList, Integer libType) {
+        List<Concept> concepts = conceptFacade.getListByNamesAndType(nameList, libType);
+        Map<String, Concept> conceptMap = EntityUtil.makeEntityMap(concepts, "libName");
+        List<ConceptPushDTO> conceptDTOS = Lists.newLinkedList();
+        for (String name : nameList) {
+            ConceptPushDTO conceptDTO = new ConceptPushDTO();
+            conceptDTO.setName(name);
+            conceptDTO.setLibType(libType);
+            conceptDTO.setType(ParamConvertUtil.libConvert2Concept(libType));
+            if (conceptMap.containsKey(name) && conceptMap.get(name) != null) {
+                Concept concept = conceptMap.get(name);
+                conceptDTO.setConceptId(concept.getId());
+            }
+            conceptDTOS.add(conceptDTO);
+        }
+        return conceptDTOS;
+    }
+
+    /**
+     * 添加外部名称(调用方)
+     *
+     * @param concepts
+     * @param hosCode
+     * @param type
+     * @return
+     */
+    public List<ConceptPushDTO> addClientName(List<ConceptPushDTO> concepts, String hosCode, Integer type) {
+        HosCodeVO hosCodeVO = new HosCodeVO();
+        hosCodeVO.setHosCode(hosCode);
+        LisConfigVO lisConfigVO = new LisConfigVO();
+        lisConfigVO.setHosCode(hosCode);
+        List<String> uniqueNameList = concepts
+                .stream()
+                .map(concept -> concept.getName())
+                .collect(Collectors.toList());
+        //加密情况下,转成原文调trans层接口
+        if (cryptConfiguer.cryptFlag) {
+            CryptUtil.decryptList(uniqueNameList);
+        }
+        lisConfigVO.setUniqueNameList(uniqueNameList);
+        if (type.equals(ConceptTypeEnum.Lis.getKey())) {
+            Map<String, List<String>> lisMappingByUniqueName = tranEnDeFacade.getLisConfigByUniqueNameAndHosCode(lisConfigVO);
+            for (ConceptPushDTO concept : concepts) {
+                List<String> clientNames = Lists.newLinkedList();
+                if (cryptConfiguer.cryptFlag) {
+                    clientNames = lisMappingByUniqueName.get(CryptUtil.decrypt_char(concept.getName()));
+                } else {
+                    clientNames = lisMappingByUniqueName.get(concept.getName());
+                }
+                if (ListUtil.isNotEmpty(clientNames)) {
+                    concept.setClientNames(clientNames);
+                }
+            }
+        } else if (type.equals(ConceptTypeEnum.Pacs.getKey())) {
+            Map<String, List<String>> pacsConfigMapByUniqueName = tranEnDeFacade.getPacsConfigByUniqueNameAndHosCode(hosCodeVO);
+            for (ConceptPushDTO concept : concepts) {
+                List<String> clientNames = Lists.newLinkedList();
+                if (cryptConfiguer.cryptFlag) {
+                    clientNames = pacsConfigMapByUniqueName.get(CryptUtil.decrypt_char(concept.getName()));
+                } else {
+                    clientNames = pacsConfigMapByUniqueName.get(concept.getName());
+                }
+                if (ListUtil.isNotEmpty(clientNames)) {
+                    concept.setClientNames(clientNames);
+                }
+            }
+        } else if (type.equals(ConceptTypeEnum.Disease.getKey())) {
+            Map<String, String> disMap = tranEnDeFacade.getDiseaseIcdByHosCode(hosCodeVO);
+            for (ConceptPushDTO concept : concepts) {
+                String clientName = "";
+                if (cryptConfiguer.cryptFlag) {
+                    clientName = disMap.get(CryptUtil.decrypt_char(concept.getName()));
+                } else {
+                    clientName = disMap.get(concept.getName());
+                }
+                if (StringUtil.isNotBlank(clientName)) {
+                    List<String> clientNames = Lists.newLinkedList();
+                    clientNames.add(clientName);
+                    concept.setClientNames(clientNames);
+                }
+            }
+        }
+        return concepts;
+    }
+}

+ 248 - 0
aipt-service/src/main/java/com/diagbot/aggregate/SearchItemAggregate.java

@@ -0,0 +1,248 @@
+package com.diagbot.aggregate;
+
+import com.diagbot.biz.push.entity.Item;
+import com.diagbot.biz.push.entity.Lis;
+import com.diagbot.biz.push.entity.Pacs;
+import com.diagbot.biz.push.vo.SearchVO;
+import com.diagbot.enums.ConceptTypeEnum;
+import com.diagbot.enums.SysTypeEnum;
+import com.diagbot.facade.TransferFacade;
+import com.diagbot.util.ListUtil;
+import com.google.common.collect.Lists;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/11/14 16:11
+ */
+@Component
+public class SearchItemAggregate {
+    @Autowired
+    private TransferFacade transferFacade;
+
+    @DataProvider("assembleSearchData")
+    public SearchVO assembleSearchData(@InvokeParameter("searchVO") SearchVO searchVO,
+                                       @InvokeParameter("isConnect") Boolean isConnect,
+                                       @DataConsumer("setLis") List<Lis> lis,
+                                       @DataConsumer("setPacs") List<Pacs> pacs,
+                                       @DataConsumer("setDiag") List<Item> diag,
+                                       @DataConsumer("setDrug") List<Item> drug,
+                                       @DataConsumer("setLisOrder") List<Lis> lisOrder,
+                                       @DataConsumer("setPacsOrder") List<Pacs> pacsOrder,
+                                       @DataConsumer("setDiagOrder") List<Item> diagOrder,
+                                       @DataConsumer("setDrugOrder") List<Item> drugOrder,
+                                       @DataConsumer("setOperationOrder") List<Item> operationOrder,
+                                       @DataConsumer("setOtherOrder") List<Item> otherOrder,
+                                       @DataConsumer("setDiseaseName") Item diseaseName
+    ) {
+        if (isConnect) {
+            //化验数据映射公表(化验公表项)
+            searchVO.setLis(lis);
+            //辅检数据映射公表(辅检项目)
+            searchVO.setPacs(pacs);
+            //诊断数据映射公表(诊断)
+            searchVO.setDiag(diag);
+            //药品数据映射公表(药品通用名)
+            searchVO.setDrug(drug);
+            //化验开单项映射
+            searchVO.setLisOrder(lisOrder);
+            //辅检开单项映射
+            searchVO.setPacsOrder(pacsOrder);
+            //诊断开单项映射
+            searchVO.setDiagOrder(diagOrder);
+            //药品开单项映射
+            searchVO.setDrugOrder(drugOrder);
+            //手术开单项映射
+            searchVO.setOperationOrder(operationOrder);
+            //其他开单项映射
+            searchVO.setOtherOrder(otherOrder);
+            //选中诊断映射
+            searchVO.setDiseaseName(diseaseName);
+        }
+        return searchVO;
+    }
+
+    /**
+     * 化验增加公表项
+     *
+     * @param searchVO
+     * @return
+     */
+    @DataProvider("setLis")
+    public List<Lis> setLis(@InvokeParameter("searchVO") SearchVO searchVO) {
+        List<Lis> lis = searchVO.getLis();
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            lis = transferFacade.addLisUniqueName(lis, searchVO.getHosCode());
+        }
+        return lis;
+    }
+
+    /**
+     * 辅检增加公表项
+     *
+     * @param searchVO
+     * @return
+     */
+    @DataProvider("setPacs")
+    public List<Pacs> setPacs(@InvokeParameter("searchVO") SearchVO searchVO) {
+        List<Pacs> pacs = searchVO.getPacs();
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            pacs = transferFacade.addPacsUniqueName(pacs, searchVO.getHosCode());
+        }
+        return pacs;
+    }
+
+    /**
+     * 诊断增加公表项
+     *
+     * @param searchVO
+     * @return
+     */
+    @DataProvider("setDiag")
+    public List<Item> setDiag(@InvokeParameter("searchVO") SearchVO searchVO) {
+        List<Item> diag = searchVO.getDiag();
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            diag = transferFacade.addItemUniqueName(diag, ConceptTypeEnum.Disease.getKey(), searchVO.getHosCode());
+        }
+        return diag;
+    }
+
+    /**
+     * 药品增加公表项
+     *
+     * @param searchVO
+     * @return
+     */
+    @DataProvider("setDrug")
+    public List<Item> setDrug(@InvokeParameter("searchVO") SearchVO searchVO) {
+        List<Item> drug = searchVO.getDrug();
+        drug = transferFacade.addItemUniqueName(drug, ConceptTypeEnum.Drug.getKey(), searchVO.getHosCode());
+        return drug;
+    }
+
+    /**
+     * 化验开单项增加公表名称
+     *
+     * @param searchVO
+     * @return
+     */
+    @DataProvider("setLisOrder")
+    public List<Lis> setLisOrder(@InvokeParameter("searchVO") SearchVO searchVO) {
+        List<Lis> lisOrder = searchVO.getLisOrder();
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            lisOrder = transferFacade.addLisUniqueName(lisOrder, searchVO.getHosCode());
+        }
+        return lisOrder;
+    }
+
+    /**
+     * 辅检开单项增加公表项
+     *
+     * @param searchVO
+     * @return
+     */
+    @DataProvider("setPacsOrder")
+    public List<Pacs> setPacsOrder(@InvokeParameter("searchVO") SearchVO searchVO) {
+        List<Pacs> pacsOrder = searchVO.getPacsOrder();
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            pacsOrder = transferFacade.addPacsUniqueName(pacsOrder, searchVO.getHosCode());
+        }
+        return pacsOrder;
+    }
+
+    /**
+     * 诊断开单项增加公表项
+     *
+     * @param searchVO
+     * @return
+     */
+    @DataProvider("setDiagOrder")
+    public List<Item> setDiagOrder(@InvokeParameter("searchVO") SearchVO searchVO) {
+        List<Item> diagOrder = searchVO.getDiagOrder();
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            diagOrder
+                    = transferFacade.addItemUniqueName(diagOrder, ConceptTypeEnum.Disease.getKey(), searchVO.getHosCode());
+        }
+        return diagOrder;
+    }
+
+    /**
+     * 药品开单项增加公表项
+     *
+     * @param searchVO
+     * @return
+     */
+    @DataProvider("setDrugOrder")
+    public List<Item> setDrugOrder(@InvokeParameter("searchVO") SearchVO searchVO) {
+        List<Item> drugOrder = searchVO.getDrugOrder();
+        drugOrder = transferFacade.addItemUniqueName(drugOrder, ConceptTypeEnum.Drug.getKey(), searchVO.getHosCode());
+        return drugOrder;
+    }
+
+    /**
+     * 手术开单项增加公表项
+     *
+     * @param searchVO
+     * @return
+     */
+    @DataProvider("setOperationOrder")
+    public List<Item> setOperationOrder(@InvokeParameter("searchVO") SearchVO searchVO) {
+        List<Item> operationOrder = searchVO.getOperationOrder();
+        //数据引擎模式和页面推送模式对手术开单项入参做公表映射
+        if (searchVO.getSysType().intValue() == SysTypeEnum.DATA_SERVICE.getKey()
+                || searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            operationOrder
+                    = transferFacade.addItemUniqueName(operationOrder, ConceptTypeEnum.OPERATION.getKey(), searchVO.getHosCode());
+        }
+        return operationOrder;
+    }
+
+    /**
+     * 其他开单项增加公表项(暂未处理)
+     *
+     * @param searchVO
+     * @return
+     */
+    @DataProvider("setOtherOrder")
+    public List<Item> setOtherOrder(@InvokeParameter("searchVO") SearchVO searchVO) {
+        List<Item> operationOrder = searchVO.getOperationOrder();
+        return operationOrder;
+    }
+
+    /**
+     * 诊断开单项增加公表项
+     *
+     * @param searchVO
+     * @return
+     */
+    @DataProvider("setDiseaseName")
+    public Item setDiseaseName(@InvokeParameter("searchVO") SearchVO searchVO) {
+        if (searchVO.getDiseaseName() == null) {
+            return null;
+        }
+        List<Item> diseaseItem = Lists.newLinkedList();
+        diseaseItem.add(searchVO.getDiseaseName());
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            diseaseItem = transferFacade.addItemUniqueName(diseaseItem, ConceptTypeEnum.Disease.getKey(), searchVO.getHosCode());
+        }
+        if (ListUtil.isNotEmpty(diseaseItem)) {
+            return diseaseItem.get(0);
+        } else {
+            return null;
+        }
+    }
+}

+ 212 - 0
aipt-service/src/main/java/com/diagbot/aggregate/TreatmentAggregate.java

@@ -0,0 +1,212 @@
+package com.diagbot.aggregate;
+
+import com.diagbot.biz.push.dto.ConceptDetailDTO;
+import com.diagbot.biz.push.entity.AdverseReaction;
+import com.diagbot.biz.push.entity.Medicition;
+import com.diagbot.biz.push.entity.MedicitionClass;
+import com.diagbot.biz.push.entity.MeditionDetail;
+import com.diagbot.biz.push.entity.Treat;
+import com.diagbot.biz.push.entity.TreatmentPlan;
+import com.diagbot.entity.Concept;
+import com.diagbot.entity.ConceptDetail;
+import com.diagbot.enums.ConceptTypeEnum;
+import com.diagbot.enums.LexiconTypeEnum;
+import com.diagbot.enums.PositionTypeEnum;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ListUtil;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/10/24 10:01
+ */
+@Component
+public class TreatmentAggregate {
+
+    @DataProvider("setTreatmentAll")
+    public Treat setTreatmentAll(@InvokeParameter("treat") Treat treat,
+                                 @DataConsumer("setCommonTreatment") ConceptDetailDTO commonTreatment,
+                                 @DataConsumer("setSurgeryTreatment") ConceptDetailDTO surgeryTreatment,
+                                 @DataConsumer("setTreatmentPlan") List<TreatmentPlan> treatmentPlanList,
+                                 @DataConsumer("setAdverseReactions") List<AdverseReaction> adverseReactionList) {
+        if (treat == null) {
+            treat = new Treat();
+        }
+        treat.setCommonTreatment(commonTreatment);
+        treat.setSurgeryTreatment(surgeryTreatment);
+        treat.setTreatmentPlan(treatmentPlanList);
+        treat.setAdverseEvent(adverseReactionList);
+
+        return treat;
+    }
+
+    @DataProvider("setCommonTreatment")
+    public ConceptDetailDTO setCommonTreatment(@InvokeParameter("diseaseName") String diseaseName,
+                                               @InvokeParameter("hasConDetailMap") Map<String, Map<Long, List<ConceptDetail>>> hasConDetailMap) {
+        ConceptDetailDTO conceptDetailDTO = null;
+        if (hasConDetailMap != null && hasConDetailMap.get(diseaseName) != null
+                && ListUtil.isNotEmpty(hasConDetailMap
+                .get(diseaseName)
+                .get(Long.valueOf(LexiconTypeEnum.DIAGNOSIS.getKey())))) {
+            List<ConceptDetail> diseaseConDetailList
+                    = hasConDetailMap.get(diseaseName).get(Long.valueOf(LexiconTypeEnum.DIAGNOSIS.getKey()));
+            for (ConceptDetail conceptDetail : diseaseConDetailList) {
+                List<String> positionList = Arrays.asList(conceptDetail.getPosition().split(",|,"));
+                if (positionList.contains(String.valueOf(PositionTypeEnum.T3.getKey()))) {
+                    conceptDetailDTO = new ConceptDetailDTO();
+                    BeanUtil.copyProperties(conceptDetail, conceptDetailDTO);
+                    break;
+                }
+            }
+        }
+        return conceptDetailDTO;
+    }
+
+    @DataProvider("setSurgeryTreatment")
+    public ConceptDetailDTO setSurgeryTreatment(@InvokeParameter("diseaseName") String diseaseName,
+                                                @InvokeParameter("hasConDetailMap") Map<String, Map<Long, List<ConceptDetail>>> hasConDetailMap) {
+        ConceptDetailDTO conceptDetailDTO = null;
+        if (hasConDetailMap != null && hasConDetailMap.get(diseaseName) != null
+                && ListUtil.isNotEmpty(hasConDetailMap
+                .get(diseaseName)
+                .get(Long.valueOf(LexiconTypeEnum.DIAGNOSIS.getKey())))) {
+            List<ConceptDetail> diseaseConDetailList
+                    = hasConDetailMap.get(diseaseName).get(Long.valueOf(LexiconTypeEnum.DIAGNOSIS.getKey()));
+            for (ConceptDetail conceptDetail : diseaseConDetailList) {
+                List<String> positionList = Arrays.asList(conceptDetail.getPosition().split(",|,"));
+                if (positionList.contains(String.valueOf(PositionTypeEnum.T4.getKey()))) {
+                    conceptDetailDTO = new ConceptDetailDTO();
+                    BeanUtil.copyProperties(conceptDetail, conceptDetailDTO);
+                    break;
+                }
+            }
+        }
+        return conceptDetailDTO;
+    }
+
+    @DataProvider("setTreatmentPlan")
+    public List<TreatmentPlan> setTreatmentPlan(@InvokeParameter("treatmentPlan") List<TreatmentPlan> treatmentPlanList,
+                                                @InvokeParameter("conceptMap") Map<String, Map<Long, Concept>> conceptMap,
+                                                @InvokeParameter("hasConDetailMap") Map<String, Map<Long, List<ConceptDetail>>> hasConDetailMap) {
+        if (ListUtil.isNotEmpty(treatmentPlanList)) {
+            for (TreatmentPlan treatmentPlan : treatmentPlanList) {
+                List<MeditionDetail> meditionDetailList = treatmentPlan.getMeditionDetails();
+                if (ListUtil.isNotEmpty(meditionDetailList)) {
+                    for (MeditionDetail meditionDetail : meditionDetailList) {
+                        //药品推荐
+                        List<MedicitionClass> treatmentDrugList = meditionDetail.getTreatment();
+                        if (ListUtil.isNotEmpty(treatmentDrugList)) {
+                            for (MedicitionClass medicitionClass : treatmentDrugList) {
+                                if (conceptMap != null
+                                        && conceptMap.get(medicitionClass.getBigdrugsName()) != null
+                                        && conceptMap.get(medicitionClass
+                                        .getBigdrugsName())
+                                        .containsKey(Long.valueOf(LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey()))) {
+                                    Concept cateBigConcept = conceptMap
+                                            .get(medicitionClass.getBigdrugsName())
+                                            .get(Long.valueOf(LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey()));
+                                    if (cateBigConcept != null) {
+                                        medicitionClass.setBigdrugsConceptId(cateBigConcept.getId());
+                                        if (hasConDetailMap != null
+                                                && hasConDetailMap.get(cateBigConcept.getLibName()) != null
+                                                && hasConDetailMap.get(cateBigConcept.getLibName())
+                                                .containsKey(Long.valueOf(LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey()))) {
+                                            medicitionClass.setShowInfo("1");
+                                        } else {
+                                            medicitionClass.setShowInfo("0");
+                                        }
+                                    }
+                                }
+                                medicitionClass.setBigdrgusLibType(LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey());
+                                medicitionClass.setBigdrugsType(ConceptTypeEnum.Drug_Category_Big.getKey());
+                                if (conceptMap != null
+                                        && conceptMap.get(medicitionClass.getSubdrugsName()) != null
+                                        && conceptMap.get(medicitionClass.getSubdrugsName())
+                                        .containsKey(Long.valueOf(LexiconTypeEnum.DRUG_CATEGORY_SMALL.getKey()))) {
+                                    Concept cateSmallConcept = conceptMap
+                                            .get(medicitionClass.getSubdrugsName())
+                                            .get(Long.valueOf(LexiconTypeEnum.DRUG_CATEGORY_SMALL.getKey()));
+                                    if (cateSmallConcept != null) {
+                                        medicitionClass.setSubdrugsConceptId(cateSmallConcept.getId());
+                                    }
+                                }
+                                medicitionClass.setSubdrugsLibType(LexiconTypeEnum.DRUG_CATEGORY_SMALL.getKey());
+                                medicitionClass.setSubdrugsType(ConceptTypeEnum.Drug_Category_Small.getKey());
+
+                                LinkedList<Medicition> medicitionList = medicitionClass.getMedicitionsList();
+                                for (Medicition medicition : medicitionList) {
+                                    if (conceptMap != null
+                                            && conceptMap.get(medicition.getMedicitionName()) != null
+                                            && conceptMap.get(medicition.getMedicitionName())
+                                            .containsKey(Long.valueOf(LexiconTypeEnum.DRUGS.getKey()))) {
+                                        Concept drugConcept = conceptMap
+                                                .get(medicition.getMedicitionName())
+                                                .get(Long.valueOf(LexiconTypeEnum.DRUGS.getKey()));
+                                        if (drugConcept != null) {
+                                            medicition.setConceptId(drugConcept.getId());
+                                        }
+                                    }
+                                    medicition.setLibType(LexiconTypeEnum.DRUGS.getKey());
+                                    medicition.setType(ConceptTypeEnum.Drug.getKey());
+                                    if (hasConDetailMap != null
+                                            && hasConDetailMap.get(medicition.getMedicitionName()) != null
+                                            && hasConDetailMap.get(medicition.getMedicitionName())
+                                            .containsKey(Long.valueOf(LexiconTypeEnum.DRUGS.getKey()))) {
+                                        medicition.setShowInfo("1");
+                                    } else {
+                                        medicition.setShowInfo("0");
+                                    }
+                                }
+                                medicitionClass.setMedicitionsList(medicitionList);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return treatmentPlanList;
+    }
+
+    @DataProvider("setAdverseReactions")
+    public List<AdverseReaction> setAdverseReactions(@InvokeParameter("adverseReactionList") List<AdverseReaction> adverseReactionList,
+                                                     @InvokeParameter("conceptMap") Map<String, Map<Long, Concept>> conceptMap,
+                                                     @InvokeParameter("hasConDetailMap") Map<String, Map<Long, List<ConceptDetail>>> hasConDetailMap,
+                                                     @InvokeParameter("isChronic") Boolean isChronic) {
+        if (isChronic) {
+            //不良反应
+            for (AdverseReaction adverseReaction : adverseReactionList) {
+                if (conceptMap != null
+                        && conceptMap.get(adverseReaction.getName()) != null
+                        && conceptMap.get(adverseReaction.getName())
+                        .containsKey(Long.valueOf(LexiconTypeEnum.SIDE_EFFECTS.getKey()))) {
+                    Concept adConcept = conceptMap
+                            .get(adverseReaction.getName())
+                            .get(Long.valueOf(LexiconTypeEnum.SIDE_EFFECTS.getKey()));
+                    if (adConcept != null) {
+                        adverseReaction.setConceptId(adConcept.getId());
+                    }
+                }
+                adverseReaction.setLibType(LexiconTypeEnum.SIDE_EFFECTS.getKey());
+                adverseReaction.setType(ConceptTypeEnum.SIDE_EFFECTS.getKey());
+                if (hasConDetailMap != null
+                        && hasConDetailMap.get(adverseReaction.getName()) != null
+                        && hasConDetailMap.get(adverseReaction.getName())
+                        .containsKey(Long.valueOf(LexiconTypeEnum.SIDE_EFFECTS.getKey()))) {
+                    adverseReaction.setShowInfo("1");
+                } else {
+                    adverseReaction.setShowInfo("0");
+                }
+            }
+        }
+        return adverseReactionList;
+    }
+}

+ 102 - 0
aipt-service/src/main/java/com/diagbot/aop/CryptAspect.java

@@ -0,0 +1,102 @@
+package com.diagbot.aop;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.diagbot.client.bean.Response;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.util.CryptPojoUtils;
+import com.diagbot.util.RespDTOUtil;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: 数据库加解密
+ * @author: gaodm
+ * @time: 2019/12/31 13:17
+ */
+@Aspect
+@Component
+@ConditionalOnProperty(prefix = "crypt", value = { "enable" }, havingValue = "true")
+public class CryptAspect {
+
+    //切所有Controller
+    @Pointcut("execution(* com.diagbot.web..*.*(..))")
+    public void pointcutController() {
+    }
+
+    //Controller 入参加密出参解密
+    @Around("pointcutController()")
+    public Object aroundReturningController(ProceedingJoinPoint joinPoint) throws Throwable {
+        //获取方法参数
+        Object[] args = joinPoint.getArgs();
+
+        //获取参数实体类注解加密
+        CryptPojoUtils.encryptFields(args);
+        //执行方法后获取出参
+        Object proceed = joinPoint.proceed(args);
+        if (null == proceed) {
+            return null;
+        }
+        //解密
+        if (proceed instanceof RespDTO) {
+            RespDTO respDTO = (RespDTO) proceed;
+            if (RespDTOUtil.respIsOK(respDTO)) {
+                if (respDTO.data instanceof IPage) {
+                    Page page = (Page) respDTO.data;
+                    CryptPojoUtils.decryptFieldOrList(page.getRecords());
+                } else {
+                    CryptPojoUtils.decryptFieldOrList(respDTO.data);
+                }
+
+            }
+
+        }
+
+        return proceed;
+    }
+
+
+    @Pointcut("execution(* com.diagbot.client..*.*(..))")
+    public void pointcutRpcClient() {
+    }
+
+    //RpcClient 入参解密出参加密
+    @Around("pointcutRpcClient()")
+    public Object aroundReturningRpcClient(ProceedingJoinPoint joinPoint) throws Throwable {
+        //获取方法参数
+        Object[] args = joinPoint.getArgs();
+
+        //获取参数实体类解密
+        CryptPojoUtils.decryptFields(args);
+        //执行方法后获取出参
+        Object proceed = joinPoint.proceed(args);
+        if (null == proceed) {
+            return null;
+        }
+        //加密
+        if (proceed instanceof RespDTO) {
+            RespDTO respDTO = (RespDTO) proceed;
+            if (RespDTOUtil.respIsOK(respDTO)) {
+                if (respDTO.data instanceof IPage) {
+                    Page page = (Page) respDTO.data;
+                    CryptPojoUtils.encryptFieldOrList(page.getRecords());
+                } else {
+                    CryptPojoUtils.encryptFieldOrList(respDTO.data);
+                }
+
+            }
+        } else if (proceed instanceof Response) {
+            Response response = (Response) proceed;
+            if (null != response && null != response.getData()) {
+                CryptPojoUtils.encryptFieldOrList(response.getData());
+            }
+        }
+
+
+        return proceed;
+    }
+}

+ 41 - 0
aipt-service/src/main/java/com/diagbot/client/AINeoServiceClient.java

@@ -0,0 +1,41 @@
+package com.diagbot.client;
+
+import com.diagbot.biz.push.entity.ResponseDataV2;
+import com.diagbot.client.bean.Response;
+import com.diagbot.client.bean.SearchData;
+import com.diagbot.client.hystrix.AINeoServiceHystrix;
+import com.diagbot.dto.FeatureDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.vo.NLPVO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/16 16:27
+ */
+@FeignClient(name = "AINeo", url = "${aineo.server.address}", fallback = AINeoServiceHystrix.class)
+public interface AINeoServiceClient {
+
+    /**
+     * 推理
+     *
+     * @param searchData
+     * @return
+     */
+    @PostMapping(value = "/api/push")
+    Response<ResponseDataV2> push(@RequestBody SearchData searchData);
+
+    /**
+     * 特征词提取
+     *
+     * @param nlpvo
+     * @return
+     */
+    @PostMapping(value = "/api/extract")
+    RespDTO<List<FeatureDTO>> extract(@RequestBody NLPVO nlpvo);
+}

+ 47 - 0
aipt-service/src/main/java/com/diagbot/client/AIServiceClient.java

@@ -0,0 +1,47 @@
+package com.diagbot.client;
+
+import com.diagbot.biz.push.entity.ResponseData;
+import com.diagbot.client.bean.CalculateData;
+import com.diagbot.client.bean.Response;
+import com.diagbot.client.bean.SearchData;
+import com.diagbot.client.hystrix.AIServiceHystrix;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2018/11/20 13:15
+ */
+@FeignClient(name = "AI", url = "${ai.server.address}", fallback = AIServiceHystrix.class)
+public interface AIServiceClient {
+    /**
+     * 推理
+     *
+     * @param searchData
+     * @return
+     */
+    @PostMapping(value = "/push-web/algorithm/neural")
+    Response<ResponseData> bayesPageData(@RequestBody SearchData searchData);
+
+    /**
+     * 量表推理
+     *
+     * @param searchData
+     * @return
+     */
+    @PostMapping(value = "/push-web/graph/scale")
+    Map<String, Object> scale(@RequestBody SearchData searchData);
+
+    /**
+     * 计算接口
+     *
+     * @param calculateData
+     * @return
+     */
+    @PostMapping(value = "/push-web/graph/scaleCalc")
+    Map<String, Object> scaleCalc(@RequestBody CalculateData calculateData);
+}

+ 36 - 0
aipt-service/src/main/java/com/diagbot/client/NLPServiceClient.java

@@ -0,0 +1,36 @@
+package com.diagbot.client;
+
+import com.diagbot.client.bean.Response;
+import com.diagbot.client.hystrix.NLPServiceHystrix;
+import com.diagbot.dto.FeatureConceptDTO;
+import com.diagbot.dto.Lexeme;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description:调用NLP对接层服务
+ * @Author:zhaops
+ * @time: 2019/4/2 15:31
+ */
+@FeignClient(name = "NLP", url = "${nlp.server.address}", fallback = NLPServiceHystrix.class)
+public interface NLPServiceClient {
+    /**
+     * 症状特征提取
+     *
+     * @param text
+     * @return
+     */
+    @GetMapping(value = "/nlp-web/feature/find_symptom_feature")
+    Response<List<FeatureConceptDTO>> symptomFeaturePageData(@RequestParam("text") String text);
+
+    /**
+     * 分词
+     *
+     * @param text
+     * @return
+     */
+    @PostMapping(value = "/nlp-web/participle/split")
+    Response<List<Lexeme>> split(@RequestParam("content") String text);
+}

+ 184 - 0
aipt-service/src/main/java/com/diagbot/client/TranServiceClient.java

@@ -0,0 +1,184 @@
+package com.diagbot.client;
+
+import com.diagbot.client.bean.HosCodeVO;
+import com.diagbot.client.hystrix.TranServiceHystrix;
+import com.diagbot.dto.GetDiseaseIcdDTO;
+import com.diagbot.dto.GetTopPatientInfoDTO;
+import com.diagbot.dto.GetTopPatientInfoDjDTO;
+import com.diagbot.dto.HospitalDeptInfoDTO;
+import com.diagbot.dto.IndexDataDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.SysSetInfoDTO;
+import com.diagbot.vo.DiseaseIcdVO;
+import com.diagbot.vo.GetDiseaseIcdVO;
+import com.diagbot.vo.GetTopPatientInfoDjVO;
+import com.diagbot.vo.GetTopPatientInfoVO;
+import com.diagbot.vo.HospitalDeptInfoVO;
+import com.diagbot.vo.HospitalSetVO;
+import com.diagbot.vo.IndexDataSaveVO;
+import com.diagbot.vo.IndexDataiIds;
+import com.diagbot.vo.LisConfigVO;
+import com.diagbot.vo.OperationConfigVO;
+import com.diagbot.vo.PacsConfigVO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 调用信息对接层服务
+ * @author: gaodm
+ * @time: 2019/2/1 17:00
+ */
+@FeignClient(value = "tran-service", fallback = TranServiceHystrix.class)
+public interface TranServiceClient {
+    /**
+     * 获取科室信息
+     *
+     * @param hospitalDeptInfoVO
+     * @return
+     */
+    @PostMapping("/hospitalDeptInfo/getHospitalDeptInfo")
+    RespDTO<HospitalDeptInfoDTO> getHospitalDeptInfo(@RequestBody HospitalDeptInfoVO hospitalDeptInfoVO);
+
+    /**
+     * 根据医院编号疾病概念名称获取各医院对应的诊断icd
+     *
+     * @param getDiseaseIcdVO
+     * @return
+     */
+    @PostMapping("/diseaseIcd/getDiseaseIcds")
+    RespDTO<List<GetDiseaseIcdDTO>> getDiseaseIcds(@RequestBody GetDiseaseIcdVO getDiseaseIcdVO);
+
+    /**
+     * 获取页面顶部病人医生科室信息
+     *
+     * @param getTopPatientInfoVO
+     * @return
+     */
+    @PostMapping("/patientInfo/getTopPatientInfo")
+    RespDTO<GetTopPatientInfoDTO> getTopPatientInfo(@RequestBody GetTopPatientInfoVO getTopPatientInfoVO);
+
+    /**
+     * 对接-获取页面顶部病人医生科室信息
+     *
+     * @param getTopPatientInfoDjVO
+     * @return
+     */
+    @PostMapping("/patientInfo/getTopPatientInfoDj")
+    RespDTO<GetTopPatientInfoDjDTO> getTopPatientInfoDj(@RequestBody GetTopPatientInfoDjVO getTopPatientInfoDjVO);
+
+    /**
+     * 根据医院编码和套餐名称获取化验公表映射关系
+     *
+     * @param lisConfigVO
+     * @return
+     */
+    @PostMapping("/tranLisConfig/getLisConfigByMealNameAndHosCode")
+    RespDTO<Map<String, Map<String, List<String>>>> getLisConfigByMealNameAndHosCode(@RequestBody LisConfigVO lisConfigVO);
+
+    /**
+     * 根据医院编码获取辅检公表映射关系
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @PostMapping("/pacsConfig/getPacsConfigByHosCode")
+    RespDTO<Map<String, String>> getPacsConfigByHosCode(@RequestBody HosCodeVO hosCodeVO);
+
+    /**
+     * 获取辅检映射关系
+     *
+     * @param pacsConfigVO
+     * @return
+     */
+    @PostMapping("/pacsConfig/getPacsConfig")
+    RespDTO<Map<String, List<String>>> getPacsConfig(@RequestBody PacsConfigVO pacsConfigVO);
+
+    /**
+     * 获取手术映射关系
+     *
+     * @param operationConfigVO
+     * @return
+     */
+    @PostMapping("/operationConfig/getOperationConfig")
+    RespDTO<Map<String, List<String>>> getOperationConfig(@RequestBody OperationConfigVO operationConfigVO);
+
+    /**
+     * 根据医院编码获取提示信息标题映射关系
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @PostMapping("/introduceTitleConfig/getTitleMappingHosCode")
+    RespDTO<Map<String, String>> getTitleMappingHosCode(@RequestBody HosCodeVO hosCodeVO);
+
+    /**
+     * 根据医院编码查询诊断icd映射
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @PostMapping("/diseaseIcd/getDiseaseIcdByHosCode")
+    RespDTO<Map<String, String>> getDiseaseIcdByHosCode(@RequestBody HosCodeVO hosCodeVO);
+
+    /**
+     * 获取诊断名称映射map
+     *
+     * @param diseaseIcdVO
+     * @return
+     */
+    @PostMapping("/diseaseIcd/getDiseaseIcdMap")
+    RespDTO<Map<String, String>> getDiseaseIcdMap(DiseaseIcdVO diseaseIcdVO);
+
+    /**
+     * 数据服务模式是否对外对接
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @PostMapping("/dataService/isConnect")
+    RespDTO<Boolean> isConnect(HosCodeVO hosCodeVO);
+
+    /**
+     * 根据医院编码获取化验公表映射关系,公表项做key
+     *
+     * @param lisConfigVO
+     * @return
+     */
+    @PostMapping("/tranLisConfig/getLisConfigByUniqueNameAndHosCode")
+    RespDTO<Map<String, List<String>>> getLisConfigByUniqueNameAndHosCode(@RequestBody LisConfigVO lisConfigVO);
+
+    /**
+     * 根据医院编码查询辅检公表映射,公表项做key
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @PostMapping("/pacsConfig/getPacsConfigByUniqueNameAndHosCode")
+    RespDTO<Map<String, List<String>>> getPacsConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO);
+
+    /**
+     * 指标数据获取
+     *
+     * @param indexDataFindVO
+     * @return
+     */
+    @PostMapping(value = "/indexData/getIndexDatas")
+    RespDTO<List<IndexDataDTO>> getIndexDatas(@RequestBody IndexDataiIds indexDataFindVO);
+
+    /**
+     * 指标数据保存
+     *
+     * @param indexDataSaveVO
+     * @return
+     */
+    @PostMapping(value = "/indexData/saveIndexDatas")
+    RespDTO<Boolean> saveIndexDatas(@RequestBody IndexDataSaveVO indexDataSaveVO);
+
+    @PostMapping("/sysSet/getSysSetInfoDatas")
+    RespDTO<List<SysSetInfoDTO>> getSysSetInfoDatas(@Valid @RequestBody HospitalSetVO hospitalSetVO);
+}

+ 53 - 0
aipt-service/src/main/java/com/diagbot/client/bean/AlgorithmClassify.java

@@ -0,0 +1,53 @@
+package com.diagbot.client.bean;
+
+/**
+ * @Auther: fyeman
+ * @Date: 2018/7/19/019 10:37
+ * @Description:
+ */
+public enum AlgorithmClassify {
+    NEURAL("0"), BAYES("1"), EMERGENCY_NEURAL("2"), OUTPATIENT_NEURAL("3"),
+    NEURAL_SYMPTOM("11"),
+    NEURAL_DIAG("21"),
+    NEURAL_VITAL("31"),
+    NEURAL_LIS("41"),
+    NEURAL_PACS("51"),
+    NEURAL_DIAG_SYMPTOM("111"),
+    NEURAL_DIAG_VITAL("131"),
+    NEURAL_DIAG_LIS("141"),
+    NEURAL_DIAG_PACS("151");
+
+    private String value;
+
+    AlgorithmClassify(String value) {
+        this.value = value;
+    }
+
+    public String toString() {
+        return value;
+    }
+
+    public static AlgorithmClassify parse(String value) {
+        switch (value) {
+            case "11":
+                return AlgorithmClassify.NEURAL_SYMPTOM;
+            case "21":
+                return AlgorithmClassify.NEURAL_DIAG;
+            case "31":
+                return AlgorithmClassify.NEURAL_VITAL;
+            case "41":
+                return AlgorithmClassify.NEURAL_LIS;
+            case "51":
+                return AlgorithmClassify.NEURAL_PACS;
+            case "111":
+                return AlgorithmClassify.NEURAL_DIAG_SYMPTOM;
+            case "131":
+                return AlgorithmClassify.NEURAL_DIAG_VITAL;
+            case "141":
+                return AlgorithmClassify.NEURAL_DIAG_LIS;
+            case "151":
+                return AlgorithmClassify.NEURAL_DIAG_PACS;
+        }
+        return AlgorithmClassify.NEURAL_DIAG;
+    }
+}

+ 17 - 0
aipt-service/src/main/java/com/diagbot/client/bean/CalculateData.java

@@ -0,0 +1,17 @@
+package com.diagbot.client.bean;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:计算接口入参
+ * @Author:zhaops
+ * @time: 2019/4/24 15:15
+ */
+@Getter
+@Setter
+public class CalculateData {
+    private Integer type;  //1-量表,2-计算公式
+    private JSONObject data;
+}

+ 159 - 0
aipt-service/src/main/java/com/diagbot/client/bean/Constants.java

@@ -0,0 +1,159 @@
+/**
+ * @Company: 杭州朗通信息技术有限公司
+ * @Department: 系统软件部
+ * @Description: 朗通智能辅助诊疗系统
+ * @Address: 浙江省杭州市西湖区西斗门路3号 天堂软件园D-7B
+ */
+package com.diagbot.client.bean;
+
+/**
+ * @Title: Constants.java
+ * @Package org.diagbot.public
+ * @Description: 通用常数接口定义
+ * @author 楼辉荣(Fyeman)
+ * @date 2015年4月23日 下午11:25:37
+ * @version V1.0
+ */
+public interface Constants {
+    /**
+     * 操作名称
+     */
+    String OP_NAME = "op";
+    /**
+     * 消息key
+     */
+    String MESSAGE = "message";
+    /**
+     * 错误key
+     */
+    String ERROR = "error";
+    /**
+     * 上个页面地址
+     */
+    String BACK_URL = "BackURL";
+    String IGNORE_BACK_URL = "ignoreBackURL";
+    /**
+     * 当前请求的地址 带参数
+     */
+    String CURRENT_URL = "currentURL";
+    /**
+     * 当前请求的地址 不带参数
+     */
+    String NO_QUERYSTRING_CURRENT_URL = "noQueryStringCurrentURL";
+    /**
+     * 上下文
+     */
+    String CONTEXT_PATH = "ctx";
+    /**
+     * 当前登录的用户
+     */
+    String CURRENT_APPLICATION = "c_app";
+    String CURRENT_USER = "c_user";
+    String CURRENT_USERNAME = "username";
+    String USER_MENUS = "menus";
+
+    /**
+     * 管理控制台应用ID=0
+     */
+    long ADMIN_APPLICATION = 0;
+    /**
+     * 一级菜单grade标识
+     */
+    int FIRST_MENU = 1;
+    /**
+     * 二级菜单grade标识
+     */
+    int SECOND_MENU = 2;
+    /**
+     * 操作按钮等级标识
+     */
+    int MENU_GRADE = 3;
+    /**
+     * 最高级资源grade标识
+     */
+    int TOP_REC = 0;
+    /**
+     * 编码方式
+     */
+    String ENCODING = "UTF-8";
+    /**
+     * 系统用户状态--启用
+     */
+    int USER_STATUS_UNLOCK = 1;
+    /**
+     * 系统用户状态--禁用
+     */
+    int USER_STATUS_LOCK = 0;
+    /**
+     * 通用值0
+     */
+    int COMMON_INT_0 = 0;
+    /**
+     * 通用值1
+     */
+    int COMMON_INT_1 = 1;
+    /**
+     * 通用值-1
+     */
+    int COMMON_INT_NEG_1 = -1;
+    /**
+     * 通用值0
+     */
+    long COMMON_LONG_0 = 0L;
+    /**
+     * 通用值1
+     */
+    long COMMON_LONG_1 = 1L;
+    /**
+     * 通用值-1
+     */
+    long COMMON_LONG_NEG_1 = -1L;
+    /**
+     * 通用值"0"
+     */
+    String COMMON_STRING_0 = "0";
+    /**
+     * 通用值"1"
+     */
+    String COMMON_STRING_1 = "1";
+    /**
+     * 通用值"-1"
+     */
+    String COMMON_STRING_NEG_1 = "-1";
+
+    /**
+     * 通用值"-1"
+     */
+    String COMMON_STRING_99 = "99";
+    /**
+     * 登录页面
+     */
+    String LOGIN_URL = "/login";
+    /**
+     * 上传文件夹
+     */
+    String UPLOAD_FOLDER_NAME = "upload";
+    /**
+     * 临时文件夹
+     */
+    String TEMP_FOLDER_NAME = "temp";
+    /**
+     * 地域标示
+     */
+    public static final String DEFAULT_LOCALE = "zh_CN";
+    /**
+     * 缺省字符集
+     */
+    public static final String DEFAULT_ENCODE = "UTF-8";
+    /**
+     * 以下为接口返回公共属性定义常量
+     */
+    public static final String MSG_SUCCESS = "操作成功";    //操作成功
+    public static final String MSG_FALURE = "操作失败";    //操作失败
+
+    public static final long INVALIDATE_VALUE = -1;        //起止时间定义
+    public static final int RET_SUCCESS = 0;            //成功
+    public static final int RET_FAIL = 1;                //失败
+    public static final int RET_ERROR_PARAM = -1;        //参数校验失败
+    public static final int RET_NO_TOKEN = -2;    //用户token丢失
+}

+ 202 - 0
aipt-service/src/main/java/com/diagbot/client/bean/Feature.java

@@ -0,0 +1,202 @@
+package com.diagbot.client.bean;
+
+import java.io.Serializable;
+
+/**
+ * @Title: Feature.java
+ * @Package: com.zjlantone.nlp.web.doc.dao.model
+ * @Description: 数据库操作接口类
+ * @author: 楼辉荣
+ * @date: 2016年8月8日 下午17:16:23
+ * @version: V1.0
+ */
+
+@SuppressWarnings("serial")
+public class Feature implements Serializable {
+    /****/
+    private Long id;
+    /****/
+    private String rdn = "";
+    /****/
+    private String sex;
+    /****/
+    private int age;
+
+    private String partbody = "";
+
+    /****/
+    private String featureName = "";
+
+    /****/
+    private String featureType = "";
+
+    //是否推送
+    private String isPush = "0";
+
+    /**
+     * 特征顺序号
+     **/
+    private int sn;
+
+    /****/
+    private String negative = "";
+
+    private float duration;
+
+    private String property;
+
+    /****/
+    private Float threshold;
+
+    /****/
+    private String tfIdf;
+
+    /**
+     * 区分住院门诊
+     **/
+    private String resourceType;
+
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getId() {
+        return this.id;
+    }
+
+    public void setRdn(String rdn) {
+        this.rdn = rdn;
+    }
+
+    public String getRdn() {
+        return this.rdn;
+    }
+
+    public void setSex(String sex) {
+        this.sex = sex;
+    }
+
+    public String getSex() {
+        return this.sex;
+    }
+
+    public void setAge(int age) {
+        this.age = age;
+    }
+
+    public int getAge() {
+        return this.age;
+    }
+
+    public void setFeatureName(String featureName) {
+        this.featureName = featureName;
+    }
+
+    public String getFeatureName() {
+        return this.featureName;
+    }
+
+    public void setFeatureType(String featureType) {
+        this.featureType = featureType;
+    }
+
+    public String getFeatureType() {
+        return this.featureType;
+    }
+
+    public String getIsPush() {
+        return isPush;
+    }
+
+    public void setIsPush(String isPush) {
+        this.isPush = isPush;
+    }
+
+    public int getSn() {
+        return sn;
+    }
+
+    public void setSn(int sn) {
+        this.sn = sn;
+    }
+
+    public void setNegative(String negative) {
+        this.negative = negative;
+    }
+
+    public String getNegative() {
+        return this.negative;
+    }
+
+    public String getPartbody() {
+        return partbody;
+    }
+
+    public void setPartbody(String partbody) {
+        this.partbody = partbody;
+    }
+
+    public float getDuration() {
+        return duration;
+    }
+
+    public void setDuration(float duration) {
+        this.duration = duration;
+    }
+
+    public String getProperty() {
+        return property;
+    }
+
+    public void setProperty(String property) {
+        this.property = property;
+    }
+
+    public void setThreshold(Float threshold) {
+        this.threshold = threshold;
+    }
+
+    public Float getThreshold() {
+        return this.threshold;
+    }
+
+    public void setTfIdf(String tfIdf) {
+        this.tfIdf = tfIdf;
+    }
+
+    public String getTfIdf() {
+        return this.tfIdf;
+    }
+
+    public String getResourceType() {
+        return resourceType;
+    }
+
+    public void setResourceType(String resourceType) {
+        this.resourceType = resourceType;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        Feature feature = (Feature) o;
+        if (id != feature.id) {
+            return false;
+        }
+        return rdn.equals(feature.rdn) && partbody.equals(feature.partbody) && featureName.equals(feature.featureName)
+                && featureType.equals(feature.featureType) && negative.equals(feature.negative);
+    }
+
+    @Override
+    public int hashCode() {
+        int result = id.hashCode();
+        result = 31 * result + rdn.hashCode() + partbody.hashCode() + featureName.hashCode() + featureType.hashCode() + negative.hashCode();
+        return result;
+    }
+}

+ 15 - 0
aipt-service/src/main/java/com/diagbot/client/bean/HosCodeVO.java

@@ -0,0 +1,15 @@
+package com.diagbot.client.bean;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/3/12 11:05
+ */
+@Getter
+@Setter
+public class HosCodeVO {
+    private String hosCode;
+}

+ 190 - 0
aipt-service/src/main/java/com/diagbot/client/bean/Response.java

@@ -0,0 +1,190 @@
+package com.diagbot.client.bean;
+
+/**
+ * ClassName: org.diagbot.pub.api.Response
+ * Function: API接口提供标准返回数据包, 数据包格式如下:
+ * {
+ * status:"OK",
+ * startTime:8206448610408,
+ * endTime:8206448610418,
+ * version:"1.0",
+ * msg:"操作成功",
+ * ret:"0",
+ * timeConsum:10,
+ * data:{
+ * ..。
+ * }
+ * }
+ * date: 2015年7月6日 下午1:36:58
+ *
+ * @author 楼辉荣(Fyeman)
+ * @version 1.0
+ * @since JDK 1.7
+ */
+public class Response<T> implements java.io.Serializable {
+    private static final long serialVersionUID = 8206448610408409499L;
+    private Status status = Status.PENDING;  //状态
+    private long startTime = Constants.INVALIDATE_VALUE;                                  //起始时间
+    private long endTime = Constants.INVALIDATE_VALUE;                                    //结束时间
+    private String version = "1.0";
+    private String msg = Constants.MSG_SUCCESS;                                  //消息
+    private T data = null;                                                                //序列化后的结果数据
+    // 返回结果标志,默认成功0,失败 1 参数错误 -1 token丢失-2
+    private int ret = Constants.RET_SUCCESS;
+
+    private String token;
+    //耗时
+    private long timeConsum;
+
+    public int getRet() {
+        return ret;
+    }
+
+    public void setRet(int ret) {
+        this.ret = ret;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public long getTimeConsum() {
+        return timeConsum;
+    }
+
+    public void setTimeConsum(long timeConsum) {
+        this.timeConsum = timeConsum;
+    }
+
+    public Response() {
+        super();
+    }
+
+    public Status getStatus() {
+        return status;
+    }
+
+    /**
+     * 在调用end()方法时,会自动设置状态,因此,如果调用了end()方法,就不要调用这个方法
+     *
+     * @param status
+     */
+    public Response<T> setStatus(Status status) {
+        this.status = status;
+        return this;
+    }
+
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public long getStartTime() {
+        return startTime;
+    }
+
+    public Response<T> setStartTime(long startTime) {
+        this.startTime = startTime;
+        return this;
+    }
+
+    public long getEndTime() {
+        return endTime;
+    }
+
+    public Response<T> setEndTime(long endTime) {
+        this.endTime = endTime;
+        return this;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    /**
+     * 设置状态和起始时间,表示操作正在进行
+     */
+    public Response<T> start() {
+        this.setStatus(Status.RUNNING);
+        this.setStartTime(System.currentTimeMillis());
+        return this;
+    }
+
+    /**
+     * 设置状态和时间,表示操作结束,没有失败
+     */
+    public Response<T> end() {
+        this.setEndTime(System.currentTimeMillis());
+        this.setTimeConsum(this.endTime - this.startTime);
+        this.setStatus(Status.OK);
+        return this;
+    }
+
+    /**
+     * 设置状态和时间,表示操作结束,并且失败
+     */
+    public Response<T> endAndFailed() {
+        this.setStatus(Status.FAIL);
+        this.setEndTime(System.currentTimeMillis());
+        return this;
+    }
+
+    /**
+     * 非参数错误通用失败信息
+     */
+    public Response<T> failure(String msg) {
+        this.msg = msg;
+        this.ret = Constants.RET_FAIL;
+        this.end();
+        return this;
+    }
+
+    /**
+     * 参数错误信息
+     */
+    public Response<T> paramFailure(String msg) {
+        this.msg = msg;
+        this.ret = Constants.RET_ERROR_PARAM;
+        this.end();
+        return this;
+    }
+
+    /**
+     * 用户信息丢失
+     */
+    public Response<T> tokenFailure(String msg) {
+        this.msg = msg;
+        this.ret = Constants.RET_NO_TOKEN;
+        this.end();
+        return this;
+    }
+
+    /**
+     * 通用成功
+     */
+    public Response<T> success() {
+        this.end();
+        return this;
+    }
+
+}

+ 25 - 0
aipt-service/src/main/java/com/diagbot/client/bean/SearchData.java

@@ -0,0 +1,25 @@
+package com.diagbot.client.bean;
+
+import com.diagbot.biz.push.entity.SearchBaseData;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:推理相关入参
+ * @Author:zhaops
+ * @time: 2019/12/6 10:02
+ */
+@Getter
+@Setter
+public class SearchData extends SearchBaseData {
+    private int age_start = 0;
+    private int age_end = 200;
+    /**
+     * 搜索结果的贝叶斯阈值
+     */
+    private String threshold = "0";
+    /**
+     * 性别(M:男,F:女,A:通用)
+     */
+    private String sex;
+}

+ 132 - 0
aipt-service/src/main/java/com/diagbot/client/bean/Status.java

@@ -0,0 +1,132 @@
+package com.diagbot.client.bean;
+
+public enum Status {
+    /**
+     * <code>PENDING = 1;</code>
+     *
+     * <pre>
+     * 操作尚未开始
+     * </pre>
+     */
+    PENDING(1),
+    /**
+     * <code>RUNNING = 2;</code>
+     *
+     * <pre>
+     * 操作开始
+     * </pre>
+     */
+    RUNNING(2),
+    /**
+     * <code>OK = 3;</code>
+     *
+     * <pre>
+     * 操作正常结束
+     * </pre>
+     */
+    OK(3),
+    /**
+     * <code>WARN = 4;</code>
+     *
+     * <pre>
+     * 有警告,但是正常结束
+     * </pre>
+     */
+    WARN(4),
+    /**
+     * <code>ERROR = 5;</code>
+     *
+     * <pre>
+     * 有错误,但是完整结束
+     * </pre>
+     */
+    ERROR(5),
+    /**
+     * <code>FAIL = 6;</code>
+     *
+     * <pre>
+     * 操作失败
+     * </pre>
+     */
+    FAIL(6),
+    ;
+
+    /**
+     * <code>PENDING = 1;</code>
+     *
+     * <pre>
+     * 操作尚未开始
+     * </pre>
+     */
+    public static final int PENDING_VALUE = 1;
+    /**
+     * <code>RUNNING = 2;</code>
+     *
+     * <pre>
+     * 操作开始
+     * </pre>
+     */
+    public static final int RUNNING_VALUE = 2;
+    /**
+     * <code>OK = 3;</code>
+     *
+     * <pre>
+     * 操作正常结束
+     * </pre>
+     */
+    public static final int OK_VALUE = 3;
+    /**
+     * <code>WARN = 4;</code>
+     *
+     * <pre>
+     * 有警告,但是正常结束
+     * </pre>
+     */
+    public static final int WARN_VALUE = 4;
+    /**
+     * <code>ERROR = 5;</code>
+     *
+     * <pre>
+     * 有错误,但是完整结束
+     * </pre>
+     */
+    public static final int ERROR_VALUE = 5;
+    /**
+     * <code>FAIL = 6;</code>
+     *
+     * <pre>
+     * 操作失败
+     * </pre>
+     */
+    public static final int FAIL_VALUE = 6;
+
+    public final int getNumber() {
+        return value;
+    }
+
+    public static Status valueOf(int value) {
+        switch (value) {
+            case 1:
+                return PENDING;
+            case 2:
+                return RUNNING;
+            case 3:
+                return OK;
+            case 4:
+                return WARN;
+            case 5:
+                return ERROR;
+            case 6:
+                return FAIL;
+            default:
+                return null;
+        }
+    }
+
+    private final int value;
+
+    private Status(int value) {
+        this.value = value;
+    }
+
+}

+ 49 - 0
aipt-service/src/main/java/com/diagbot/client/hystrix/AINeoServiceHystrix.java

@@ -0,0 +1,49 @@
+package com.diagbot.client.hystrix;
+
+import com.diagbot.biz.push.entity.ResponseDataV2;
+import com.diagbot.client.AINeoServiceClient;
+import com.diagbot.client.bean.Response;
+import com.diagbot.client.bean.SearchData;
+import com.diagbot.dto.FeatureDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.vo.NLPVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/16 16:27
+ */
+@Component
+@Slf4j
+public class AINeoServiceHystrix implements AINeoServiceClient {
+
+    /**
+     * 推理
+     *
+     * @param searchData
+     * @return
+     */
+    @Override
+    public Response<ResponseDataV2> push(@RequestBody SearchData searchData) {
+        log.error("【hystrix】调用{}异常", "push");
+        return null;
+    }
+
+    /**
+     * 特征词提取
+     *
+     * @param nlpvo
+     * @return
+     */
+    @Override
+    public RespDTO<List<FeatureDTO>> extract(@RequestBody NLPVO nlpvo) {
+        log.error("【hystrix】调用{}异常", "extract");
+        return null;
+    }
+}

+ 57 - 0
aipt-service/src/main/java/com/diagbot/client/hystrix/AIServiceHystrix.java

@@ -0,0 +1,57 @@
+package com.diagbot.client.hystrix;
+
+import com.diagbot.biz.push.entity.ResponseData;
+import com.diagbot.client.AIServiceClient;
+import com.diagbot.client.bean.CalculateData;
+import com.diagbot.client.bean.Response;
+import com.diagbot.client.bean.SearchData;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2018/11/20 13:15
+ */
+@Component
+@Slf4j
+public class AIServiceHystrix implements AIServiceClient {
+    /**
+     * 推理
+     *
+     * @param searchData
+     * @return
+     */
+    @Override
+    public Response<ResponseData> bayesPageData(SearchData searchData) {
+        log.error("【hystrix】调用{}异常", "bayesPageData");
+        return null;
+    }
+
+    /**
+     * 量表推理
+     *
+     * @param searchData
+     * @return
+     */
+    @Override
+    public Map<String, Object> scale(@RequestBody SearchData searchData) {
+        log.error("【hystrix】调用{}异常", "scale");
+        return null;
+    }
+
+    /**
+     * 计算接口
+     *
+     * @param calculateData
+     * @return
+     */
+    @Override
+    public Map<String, Object> scaleCalc(@RequestBody CalculateData calculateData) {
+        log.error("【hystrix】调用{}异常", "scaleCalc");
+        return null;
+    }
+}

+ 49 - 0
aipt-service/src/main/java/com/diagbot/client/hystrix/NLPServiceHystrix.java

@@ -0,0 +1,49 @@
+package com.diagbot.client.hystrix;
+
+import com.diagbot.client.NLPServiceClient;
+import com.diagbot.client.bean.Feature;
+import com.diagbot.client.bean.Response;
+import com.diagbot.dto.FeatureConceptDTO;
+import com.diagbot.dto.Lexeme;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * @Description:调用NLP对接层服务
+ * @Author:zhaops
+ * @time: 2019/4/2 15:36
+ */
+@Component
+@Slf4j
+public class NLPServiceHystrix implements NLPServiceClient {
+
+    /**
+     * 症状特征提取
+     *
+     * @param text
+     * @return
+     */
+    @Override
+    public Response<List<FeatureConceptDTO>> symptomFeaturePageData(@RequestParam("text") String text) {
+        log.error("【hystrix】调用{}异常", "symptomFeaturePageData");
+        return null;
+    }
+
+    /**
+     * 分词
+     *
+     * @param text
+     * @return
+     */
+    @Override
+    public Response<List<Lexeme>> split(@PathVariable("content") String text) {
+        log.error("【hystrix】调用{}异常", "split");
+        return null;
+    }
+
+}

+ 200 - 0
aipt-service/src/main/java/com/diagbot/client/hystrix/TranServiceHystrix.java

@@ -0,0 +1,200 @@
+package com.diagbot.client.hystrix;
+
+import com.diagbot.client.TranServiceClient;
+import com.diagbot.client.bean.HosCodeVO;
+import com.diagbot.dto.GetDiseaseIcdDTO;
+import com.diagbot.dto.GetTopPatientInfoDTO;
+import com.diagbot.dto.GetTopPatientInfoDjDTO;
+import com.diagbot.dto.HospitalDeptInfoDTO;
+import com.diagbot.dto.IndexDataDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.SysSetInfoDTO;
+import com.diagbot.vo.DiseaseIcdVO;
+import com.diagbot.vo.GetDiseaseIcdVO;
+import com.diagbot.vo.GetTopPatientInfoDjVO;
+import com.diagbot.vo.GetTopPatientInfoVO;
+import com.diagbot.vo.HospitalDeptInfoVO;
+import com.diagbot.vo.HospitalSetVO;
+import com.diagbot.vo.IndexDataSaveVO;
+import com.diagbot.vo.IndexDataiIds;
+import com.diagbot.vo.LisConfigVO;
+import com.diagbot.vo.OperationConfigVO;
+import com.diagbot.vo.PacsConfigVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 调用信息对接层服务
+ * @author: gaodm
+ * @time: 2019/2/1 17:00
+ */
+@Component
+@Slf4j
+public class TranServiceHystrix implements TranServiceClient {
+    @Override
+    public RespDTO<HospitalDeptInfoDTO> getHospitalDeptInfo(HospitalDeptInfoVO hospitalDeptInfoVO) {
+        log.error("【hystrix】调用{}异常", "getHospitalDeptInfo");
+        return null;
+    }
+
+    @Override
+    public RespDTO<List<GetDiseaseIcdDTO>> getDiseaseIcds(GetDiseaseIcdVO getDiseaseIcdVO) {
+        log.error("【hystrix】调用{}异常", "getDiseaseIcds");
+        return null;
+    }
+
+    @Override
+    public RespDTO<GetTopPatientInfoDTO> getTopPatientInfo(GetTopPatientInfoVO getTopPatientInfoVO) {
+        log.error("【hystrix】调用{}异常", "getTopPatientInfo");
+        return null;
+    }
+
+    @Override
+    public RespDTO<GetTopPatientInfoDjDTO> getTopPatientInfoDj(GetTopPatientInfoDjVO getTopPatientInfoDjVO) {
+        log.error("【hystrix】调用{}异常", "getTopPatientInfoDj");
+        return null;
+    }
+
+    /**
+     * 根据医院编码和套餐名称获取化验公表映射关系
+     *
+     * @param lisConfigVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, Map<String, List<String>>>> getLisConfigByMealNameAndHosCode(@RequestBody LisConfigVO lisConfigVO) {
+        log.error("【hystrix】调用{}异常", "getLisConfigByMealNameAndHosCode");
+        return null;
+    }
+
+    /**
+     * 根据医院编码获取辅检公表映射关系
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, String>> getPacsConfigByHosCode(@RequestBody HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "getPacsConfigByHosCode");
+        return null;
+    }
+
+    /**
+     * 获取辅检映射关系
+     *
+     * @param pacsConfigVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, List<String>>> getPacsConfig(@RequestBody PacsConfigVO pacsConfigVO) {
+        log.error("【hystrix】调用{}异常", "getPacsConfig");
+        return null;
+    }
+
+    /**
+     * 获取手术映射关系
+     *
+     * @param operationConfigVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, List<String>>> getOperationConfig(@RequestBody OperationConfigVO operationConfigVO) {
+        log.error("【hystrix】调用{}异常", "getOperationConfig");
+        return null;
+    }
+
+    /**
+     * 根据医院编码获取提示信息标题映射关系
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, String>> getTitleMappingHosCode(@RequestBody HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "getTitleMappingHosCode");
+        return null;
+    }
+
+    /**
+     * 根据医院编码查询诊断icd映射
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, String>> getDiseaseIcdByHosCode(@RequestBody HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "getDiseaseIcdByHosCode");
+        return null;
+    }
+
+    /**
+     * 获取诊断名称映射map
+     *
+     * @param diseaseIcdVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, String>> getDiseaseIcdMap(DiseaseIcdVO diseaseIcdVO) {
+        log.error("【hystrix】调用{}异常", "getDiseaseIcdMap");
+        return null;
+    }
+
+    /**
+     * 数据服务模式是否对外对接
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Boolean> isConnect(HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "isConnect");
+        return null;
+    }
+
+    /**
+     * 根据医院编码获取化验公表映射关系,公表项做key
+     *
+     * @param lisConfigVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, List<String>>> getLisConfigByUniqueNameAndHosCode(@RequestBody LisConfigVO lisConfigVO) {
+        log.error("【hystrix】调用{}异常", "getLisConfigByUniqueNameAndHosCode");
+        return null;
+    }
+
+    /**
+     * 根据医院编码查询辅检公表映射,公表项做key
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, List<String>>> getPacsConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "getPacsConfigByUniqueNameAndHosCode");
+        return null;
+    }
+
+    @Override
+    public RespDTO<List<IndexDataDTO>> getIndexDatas(@Valid IndexDataiIds indexDataFindVO) {
+        log.error("【hystrix】调用{}异常", "getIndexDatas");
+        return null;
+    }
+
+    @Override
+    public RespDTO<Boolean> saveIndexDatas(@Valid IndexDataSaveVO indexDataSaveVO) {
+        log.error("【hystrix】调用{}异常", "saveIndexDatas");
+        return null;
+    }
+
+    @Override
+    public RespDTO<List<SysSetInfoDTO>> getSysSetInfoDatas(@Valid HospitalSetVO hospitalSetVO) {
+        log.error("【hystrix】调用{}异常", "getSysSetInfoDatas");
+        return null;
+    }
+}

+ 29 - 0
aipt-service/src/main/java/com/diagbot/config/CryptConfiguer.java

@@ -0,0 +1,29 @@
+package com.diagbot.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/1/2 10:59
+ */
+@Component
+public class CryptConfiguer {
+
+    @Value("${crypt.enable}")
+    public Boolean cryptFlag;
+
+    private static CryptConfiguer cryptConfiguer;
+
+    public static CryptConfiguer getInstance() {
+        if (null == cryptConfiguer) {
+            synchronized (CryptConfiguer.class) {
+                if (null == cryptConfiguer) {
+                    cryptConfiguer = new CryptConfiguer();
+                }
+            }
+        }
+        return cryptConfiguer;
+    }
+}

+ 19 - 0
aipt-service/src/main/java/com/diagbot/config/CustomAccessTokenConverter.java

@@ -0,0 +1,19 @@
+package com.diagbot.config;
+
+import org.springframework.security.oauth2.provider.OAuth2Authentication;
+import org.springframework.security.oauth2.provider.token.DefaultAccessTokenConverter;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+public class CustomAccessTokenConverter extends DefaultAccessTokenConverter {
+
+    @Override
+    public OAuth2Authentication extractAuthentication(Map<String, ?> claims) {
+        OAuth2Authentication authentication = super.extractAuthentication(claims);
+        authentication.setDetails(claims);
+        return authentication;
+    }
+
+}

+ 15 - 0
aipt-service/src/main/java/com/diagbot/config/GlobalMethodSecurityConfigurer.java

@@ -0,0 +1,15 @@
+package com.diagbot.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+
+/**
+ * @Description: 安全配置类
+ * @author: gaodm
+ * @time: 2018/8/2 13:38
+ */
+@Configuration
+@EnableGlobalMethodSecurity(prePostEnabled = true)
+public class GlobalMethodSecurityConfigurer {
+
+}

+ 48 - 0
aipt-service/src/main/java/com/diagbot/config/JwtConfigurer.java

@@ -0,0 +1,48 @@
+package com.diagbot.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.security.oauth2.provider.token.TokenStore;
+import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
+import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
+import org.springframework.util.FileCopyUtils;
+
+import java.io.IOException;
+
+/**
+ * @Description: JWT配置类
+ * @author: gaodm
+ * @time: 2018/8/2 13:38
+ */
+@Configuration
+public class JwtConfigurer {
+    @Autowired
+    private CustomAccessTokenConverter customAccessTokenConverter;
+
+    @Bean
+    @Qualifier("tokenStore")
+    public TokenStore tokenStore() {
+
+        System.out.println("Created JwtTokenStore");
+        return new JwtTokenStore(jwtTokenEnhancer());
+    }
+
+    @Bean
+    protected JwtAccessTokenConverter jwtTokenEnhancer() {
+        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
+        Resource resource = new ClassPathResource("public.cert");
+        String publicKey;
+        try {
+            publicKey = new String(FileCopyUtils.copyToByteArray(resource.getInputStream()));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        converter.setVerifierKey(publicKey);
+        converter.setAccessTokenConverter(customAccessTokenConverter);
+        return converter;
+    }
+}

+ 33 - 0
aipt-service/src/main/java/com/diagbot/config/MybatisPlusConfigurer.java

@@ -0,0 +1,33 @@
+package com.diagbot.config;
+
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * @Description: MybatisPlus配置类
+ * @author: gaodm
+ * @time: 2018/8/2 13:39
+ */
+@EnableTransactionManagement
+@Configuration
+@MapperScan("com.diagbot.mapper*")//这个注解,作用相当于下面的@Bean MapperScannerConfigurer,2者配置1份即可
+public class MybatisPlusConfigurer {
+
+    /**
+     * mybatis-plus分页插件<br>
+     * 文档:http://mp.baomidou.com<br>
+     */
+    @Bean
+    public PaginationInterceptor paginationInterceptor() {
+        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
+        // 设置请求的页面大于最大页后操作,true调回到首页,false继续请求,默认false
+        //paginationInterceptor.setOverflow(false);
+        // 设置最大单页限制数量,默认500条,-1不受限制
+        paginationInterceptor.setLimit(500L);
+        return paginationInterceptor;
+    }
+
+}

+ 42 - 0
aipt-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -0,0 +1,42 @@
+package com.diagbot.config;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
+import org.springframework.security.oauth2.provider.token.TokenStore;
+
+/**
+ * @Description: 权限资源配置类
+ * @author: gaodm
+ * @time: 2018/8/2 14:21
+ */
+@Configuration
+@EnableResourceServer
+public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
+    Logger log = LoggerFactory.getLogger(ResourceServerConfigurer.class);
+
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http
+                .csrf().disable()
+                .authorizeRequests()
+//                .regexMatchers(".*swagger.*", ".*v2.*", ".*webjars.*", "/druid.*", "/actuator.*", "/hystrix.*").permitAll()
+//                .antMatchers("/**").authenticated();
+                .antMatchers("/**").permitAll();
+    }
+
+
+    @Override
+    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
+        log.info("Configuring ResourceServerSecurityConfigurer ");
+        resources.resourceId("user-service").tokenStore(tokenStore);
+    }
+
+    @Autowired
+    TokenStore tokenStore;
+}

+ 70 - 0
aipt-service/src/main/java/com/diagbot/config/SwaggerConfigurer.java

@@ -0,0 +1,70 @@
+package com.diagbot.config;
+
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.ParameterBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Contact;
+import springfox.documentation.service.Parameter;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @Description: Swagger配置类
+ * @author: gaodm
+ * @time: 2018/8/2 14:21
+ */
+@Configuration
+@ConditionalOnProperty(prefix = "swagger", value = { "enable" }, havingValue = "true")
+@EnableSwagger2
+public class SwaggerConfigurer {
+    /**
+     * 全局参数
+     *
+     * @return
+     */
+    private List<Parameter> parameter() {
+        List<Parameter> params = new ArrayList<>();
+        params.add(new ParameterBuilder().name("Authorization")
+                .description("Authorization Bearer token")
+                .modelRef(new ModelRef("string"))
+                .parameterType("header")
+                .required(false).build());
+        return params;
+    }
+
+
+    @Bean
+    public Docket sysApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.diagbot.web"))
+                .paths(PathSelectors.any())
+                .build().globalOperationParameters(parameter());
+        //.securitySchemes(newArrayList(oauth()))
+        // .securityContexts(newArrayList(securityContext()));
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title(" aipt-service api ")
+                .description("知识库&推理 微服务")
+                .termsOfServiceUrl("")
+                .contact(new Contact("diagbot","",""))
+                .version("1.0")
+                .build();
+    }
+
+}

+ 79 - 0
aipt-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -0,0 +1,79 @@
+package com.diagbot.config.security;
+
+import org.springframework.security.access.AccessDecisionManager;
+import org.springframework.security.access.AccessDeniedException;
+import org.springframework.security.access.ConfigAttribute;
+import org.springframework.security.authentication.InsufficientAuthenticationException;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Collection;
+
+
+/**
+ * @Description: 自定义权限拦截
+ * @author: gaodm
+ * @time: 2018/8/23 13:46
+ */
+@Service
+public class UrlAccessDecisionManager implements AccessDecisionManager {
+    @Override
+    public void decide(Authentication authentication, Object object, Collection<ConfigAttribute> configAttributes) throws AccessDeniedException, InsufficientAuthenticationException {
+//        HttpServletRequest request = ((FilterInvocation) object).getHttpRequest();
+//        String url, method;
+//        if (matchPermitAllUrl(request)) {
+//            return;
+//        }
+//        if ("anonymousUser".equals(authentication.getPrincipal())) {
+//            throw new AccessDeniedException("no right");
+//        } else {
+//            for (GrantedAuthority ga : authentication.getAuthorities()) {
+//                String[] authority = ga.getAuthority().split(";");
+//                url = authority[0];
+//                method = authority[1];
+//                if (matchers(url, request)) {
+//                    if (method.equals(request.getMethod()) || "ALL".equals(method)) {
+//                        return;
+//                    }
+//                }
+//            }
+//        }
+//        throw new AccessDeniedException("no right");
+    }
+
+
+    @Override
+    public boolean supports(ConfigAttribute attribute) {
+        return true;
+    }
+
+    @Override
+    public boolean supports(Class<?> clazz) {
+        return true;
+    }
+
+    private Boolean matchPermitAllUrl(HttpServletRequest request){
+        if (matchers("/swagger/**", request)
+                || matchers("/v2/**", request)
+                || matchers("/swagger-ui.html/**", request)
+                || matchers("/swagger-resources/**", request)
+                || matchers("/web`jars/**", request)
+                || matchers("/druid/**", request)
+                || matchers("/actuator/**", request)
+                || matchers("/hystrix/**", request)
+                || matchers("/", request)) {
+            return true;
+        }
+        return false;
+    }
+
+    private boolean matchers(String url, HttpServletRequest request) {
+        AntPathRequestMatcher matcher = new AntPathRequestMatcher(url);
+        if (matcher.matches(request)) {
+            return true;
+        }
+        return false;
+    }
+}

+ 29 - 0
aipt-service/src/main/java/com/diagbot/config/security/UrlConfigAttribute.java

@@ -0,0 +1,29 @@
+package com.diagbot.config.security;
+
+import org.springframework.security.access.ConfigAttribute;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Description: 自定义权限拦截
+ * @author: gaodm
+ * @time: 2018/8/23 13:47
+ */
+public class UrlConfigAttribute implements ConfigAttribute {
+
+    private final HttpServletRequest httpServletRequest;
+
+    public UrlConfigAttribute(HttpServletRequest httpServletRequest) {
+        this.httpServletRequest = httpServletRequest;
+    }
+
+
+    @Override
+    public String getAttribute() {
+        return null;
+    }
+
+    public HttpServletRequest getHttpServletRequest() {
+        return httpServletRequest;
+    }
+}

+ 79 - 0
aipt-service/src/main/java/com/diagbot/config/security/UrlFilterSecurityInterceptor.java

@@ -0,0 +1,79 @@
+package com.diagbot.config.security;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.SecurityMetadataSource;
+import org.springframework.security.access.intercept.AbstractSecurityInterceptor;
+import org.springframework.security.access.intercept.InterceptorStatusToken;
+import org.springframework.security.web.FilterInvocation;
+import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import java.io.IOException;
+
+/**
+ * @Description: 自定义权限拦截
+ * @author: gaodm
+ * @time: 2018/8/23 13:47
+ */
+@Service
+public class UrlFilterSecurityInterceptor extends AbstractSecurityInterceptor implements Filter {
+
+
+    @Autowired
+    private FilterInvocationSecurityMetadataSource securityMetadataSource;
+
+    @Autowired
+    public void setUrlAccessDecisionManager(UrlAccessDecisionManager urlAccessDecisionManager) {
+        super.setAccessDecisionManager(urlAccessDecisionManager);
+    }
+
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+
+        FilterInvocation fi = new FilterInvocation(request, response, chain);
+        invoke(fi);
+    }
+
+
+    public void invoke(FilterInvocation fi) throws IOException, ServletException {
+        //fi里面有一个被拦截的url
+        //里面调用UrlMetadataSource的getAttributes(Object object)这个方法获取fi对应的所有权限
+        //再调用UrlAccessDecisionManager的decide方法来校验用户的权限是否足够
+        InterceptorStatusToken token = super.beforeInvocation(fi);
+        try {
+            //执行下一个拦截器
+            fi.getChain().doFilter(fi.getRequest(), fi.getResponse());
+        } finally {
+            super.afterInvocation(token, null);
+        }
+    }
+
+
+    @Override
+    public void destroy() {
+
+    }
+
+    @Override
+    public Class<?> getSecureObjectClass() {
+        return FilterInvocation.class;
+
+    }
+
+    @Override
+    public SecurityMetadataSource obtainSecurityMetadataSource() {
+        return this.securityMetadataSource;
+    }
+}

+ 40 - 0
aipt-service/src/main/java/com/diagbot/config/security/UrlMetadataSourceService.java

@@ -0,0 +1,40 @@
+package com.diagbot.config.security;
+
+import org.springframework.security.access.ConfigAttribute;
+import org.springframework.security.web.FilterInvocation;
+import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @Description: 自定义权限拦截
+ * @author: gaodm
+ * @time: 2018/8/23 13:47
+ */
+@Service
+public class UrlMetadataSourceService implements
+        FilterInvocationSecurityMetadataSource {
+
+    @Override
+    public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
+        final HttpServletRequest request = ((FilterInvocation) object).getRequest();
+        Set<ConfigAttribute> allAttributes = new HashSet<>();
+        ConfigAttribute configAttribute = new UrlConfigAttribute(request);
+        allAttributes.add(configAttribute);
+        return allAttributes;
+    }
+
+    @Override
+    public Collection<ConfigAttribute> getAllConfigAttributes() {
+        return null;
+    }
+
+    @Override
+    public boolean supports(Class<?> clazz) {
+        return true;
+    }
+}

+ 18 - 0
aipt-service/src/main/java/com/diagbot/dto/ConceptBaseDTO.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 概念出参基础实体类
+ * @author: gaodm
+ * @time: 2019/5/7 9:44
+ */
+@Getter
+@Setter
+public class ConceptBaseDTO {
+    private Long conceptId; // 概念id
+    @CryptField
+    private String name;    //概念名称
+}

+ 38 - 0
aipt-service/src/main/java/com/diagbot/dto/ConceptDetailDTO.java

@@ -0,0 +1,38 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:提示信息明细
+ * @Author:zhaops
+ * @time: 2019/5/6 16:33
+ */
+@Getter
+@Setter
+public class ConceptDetailDTO {
+    /**
+     * 提示明细标题
+     */
+    private String title;
+
+    /**
+     * 提示明细内容
+     */
+    private String content;
+
+    /**
+     * 纯文本
+     */
+    private String text;
+
+    /**
+     * 是否诊断依据(1-是,0-否)
+     */
+    private Integer isReason;
+
+    /**
+     * 显示位置(多选):1-推送展示,2-更多展示,3-一般治疗展示,4-手术治疗展示,5-药品说明书,6-不良反应,7-症状描述信息(智能分诊)
+     */
+    private String position;
+}

+ 20 - 0
aipt-service/src/main/java/com/diagbot/dto/ConceptIntroduceDTO.java

@@ -0,0 +1,20 @@
+package com.diagbot.dto;
+
+import com.diagbot.util.ListUtil;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:提示信息返回
+ * @Author:zhaops
+ * @time: 2019/5/6 16:32
+ */
+@Getter
+@Setter
+public class ConceptIntroduceDTO extends ConceptBaseDTO {
+    private List<ConceptDetailDTO> details = ListUtil.newArrayList();
+    private Long libType;
+    private Integer type;
+}

+ 26 - 0
aipt-service/src/main/java/com/diagbot/dto/ConceptPushDTO.java

@@ -0,0 +1,26 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/5/7 20:06
+ */
+@Getter
+@Setter
+public class ConceptPushDTO extends ConceptBaseDTO {
+    private Integer libType;
+    //数据服务模式调用方名称
+    private List<String> clientNames;
+    private Integer type;
+    //客户端界面描述
+    private String description;
+    //是否详细阐述
+    private Integer hasExplain = 0;
+    //详细阐述
+    private String explains;
+}

+ 22 - 0
aipt-service/src/main/java/com/diagbot/dto/ConceptRes.java

@@ -0,0 +1,22 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2019/5/6 15:59
+ */
+@Getter
+@Setter
+public class ConceptRes {
+    //关系起点术语id
+    private Long startId;
+    //关系起点术语名称
+    private String startName;
+    //关系终点术语id
+    private Long endId;
+    //关系终点术语名称
+    private String endName;
+}

+ 30 - 0
aipt-service/src/main/java/com/diagbot/dto/ConceptRetrievalDTO.java

@@ -0,0 +1,30 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/5/10 10:20
+ */
+@Getter
+@Setter
+public class ConceptRetrievalDTO {
+    private Long selfId;//本身概念id
+    @CryptField
+    private String selfName;//本身名称
+    private Long parentId;//父级id
+    @CryptField
+    private String parentName;//父级名称
+    @CryptField
+    private String sameName;//同义词名称
+    private Long showType;//显示类型(1本体,0同义词)
+    private Long libTypeId;//标签类型id
+    private String libTypeName;//标签类型名称
+    private Integer type;//questionType
+    private Long uniqueId;//公表id
+    @CryptField
+    private String uniqueName;//公表名称
+}

+ 30 - 0
aipt-service/src/main/java/com/diagbot/dto/ConceptRetrievalExtDTO.java

@@ -0,0 +1,30 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/5/10 10:20
+ */
+@Getter
+@Setter
+public class ConceptRetrievalExtDTO {
+
+    private Long selfId;//本身概念id
+    @CryptField
+    private String selfName;//本身名称
+    private Long parentId;//父级id
+    @CryptField
+    private String parentName;//父级名称
+    @CryptField
+    private String sameName;//同义词名称
+    private Long showType;//显示类型(1本体,0同义词)
+    private Long libTypeId;//标签类型id
+    private String libTypeName;//标签类型名称
+    private Integer type;//questionType
+    private String description;
+    private String explains;
+}

+ 16 - 0
aipt-service/src/main/java/com/diagbot/dto/ConceptWithOrderRes.java

@@ -0,0 +1,16 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2019/5/6 16:02
+ */
+@Getter
+@Setter
+public class ConceptWithOrderRes extends ConceptRes{
+    //排序号
+    private Integer orderNo;
+}

+ 9 - 0
aipt-service/src/main/java/com/diagbot/dto/DeptInfoDTO.java

@@ -0,0 +1,9 @@
+package com.diagbot.dto;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2019/5/8 13:51
+ */
+public class DeptInfoDTO extends ConceptBaseDTO {
+}

+ 48 - 0
aipt-service/src/main/java/com/diagbot/dto/DictionaryInfoDTO.java

@@ -0,0 +1,48 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * icss字典表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-25
+ */
+@Getter
+@Setter
+public class DictionaryInfoDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 分组(值自定义)
+     */
+    private Long groupType;
+
+    /**
+     * 内容
+     */
+    private String name;
+
+    /**
+     * 值
+     */
+    private String val;
+
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 19 - 0
aipt-service/src/main/java/com/diagbot/dto/DisDTO.java

@@ -0,0 +1,19 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 返回诊断基本信息
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Getter
+@Setter
+public class DisDTO extends ConceptBaseDTO{
+    @CryptField
+    @JsonIgnore
+    private String typeName;//类型:慢病,急诊
+}

+ 15 - 0
aipt-service/src/main/java/com/diagbot/dto/DisScaleDTO.java

@@ -0,0 +1,15 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 返回诊断量表列表
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Getter
+@Setter
+public class DisScaleDTO extends ConceptBaseDTO{
+
+}

+ 19 - 0
aipt-service/src/main/java/com/diagbot/dto/DisTypeDTO.java

@@ -0,0 +1,19 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 返回诊断类型
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Getter
+@Setter
+public class DisTypeDTO {
+    private List<DisDTO> chronic = new ArrayList<>();
+    private List<DisDTO> emergency = new ArrayList<>();
+}

+ 66 - 0
aipt-service/src/main/java/com/diagbot/dto/DisclaimerInformationDTO.java

@@ -0,0 +1,66 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2018年11月21日 下午4:23:48
+ */
+@Setter
+@Getter
+public class DisclaimerInformationDTO {
+	private Long id;
+
+//    /**
+//     * 记录创建时间
+//     */
+//    private Date gmtCreate;
+//
+//
+//
+//    /**
+//     * 创建人,0表示无创建人值
+//     */
+//    private String creator;
+//
+//    /**
+//     * 主表id
+//     */
+//    private Long versionId;
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 排序号
+     */
+    private String orderNo;
+
+//    /**
+//     * 1:启动,0:不启用
+//     */
+//    private String status;
+
+    /**
+     * 免责申明编号
+     */
+    private String disclaimerCode;
+
+//    /**
+//     * 备注
+//     */
+//    private String remark;
+
+}

+ 40 - 0
aipt-service/src/main/java/com/diagbot/dto/DiseaseIcdDTO.java

@@ -0,0 +1,40 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/2/14 14:59
+ */
+@Getter
+@Setter
+public class DiseaseIcdDTO  {
+    /**
+     * 医院编码
+     */
+    private String hospitalCode;
+
+    /**
+     * HIS疾病名称
+     */
+    private String diseaseName;
+
+    /**
+     * icd编码
+     */
+    private String icd;
+
+    /**
+     * 朗通疾病概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 朗通疾病名称
+     */
+    @CryptField
+    private String conceptDisName;
+}

+ 23 - 0
aipt-service/src/main/java/com/diagbot/dto/EvaluationDTO.java

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2019年5月6日 下午5:14:02
+ */
+@Getter
+@Setter
+public class EvaluationDTO {
+	@CryptField
+	private String diseaseName;// 对应术语疾病名
+	private Long conceptId;// 术语概念id
+	private String regionName; // 区域名
+	private String regionType; // 区域类型
+	private Integer orderNo; // 区域顺序
+	private Object data;
+}

+ 20 - 0
aipt-service/src/main/java/com/diagbot/dto/FeatureConceptDTO.java

@@ -0,0 +1,20 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/5/13 15:41
+ */
+@Getter
+@Setter
+public class FeatureConceptDTO extends ConceptBaseDTO {
+    private Integer libType;
+    private Integer type;
+    private Integer chronicLabel; //是否慢病复诊标志
+    @CryptField
+    private String origin;
+}

+ 20 - 0
aipt-service/src/main/java/com/diagbot/dto/FeatureDTO.java

@@ -0,0 +1,20 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/26 13:42
+ */
+@Getter
+@Setter
+public class FeatureDTO {
+    private Long conceptId;
+    @CryptField
+    private String standard;
+    private Integer type;
+    private String origin;
+}

+ 15 - 0
aipt-service/src/main/java/com/diagbot/dto/GetDiseaseIcdDTO.java

@@ -0,0 +1,15 @@
+package com.diagbot.dto;
+
+import com.diagbot.entity.DiseaseIcd;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/2/14 14:59
+ */
+@Getter
+@Setter
+public class GetDiseaseIcdDTO extends DiseaseIcd {
+}

+ 156 - 0
aipt-service/src/main/java/com/diagbot/dto/GetTopPatientInfoDTO.java

@@ -0,0 +1,156 @@
+package com.diagbot.dto;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description
+ * @author rgb
+ * @time 2018年11月19日下午4:57:43
+ */
+@ApiModel(value="页面顶部病人医生科室信息查询接口出参")
+@Getter
+@Setter
+public class GetTopPatientInfoDTO {
+	
+	/**
+	 * 医院id
+	 */
+	@ApiModelProperty(value="医院id")
+	private Long hospitalId;
+	
+	/**
+     * 医院编码
+     */
+	@ApiModelProperty(value="医院编码")
+    private String hospitalCode;
+
+    /**
+     * 医院名称
+     */
+	@ApiModelProperty(value="医院名称")
+    private String hospitalName;
+    
+    /**
+	 * 医院科室id
+	 */
+	@ApiModelProperty(value="医院科室id")
+	private Long hospitalDeptId;
+	
+    /**
+	 * 自己科室id
+	 */
+	@ApiModelProperty(value="自己科室id")
+	private Long selfDeptId;
+	
+	/**
+	 * 自己科室名称
+	 */
+	@ApiModelProperty(value="自己科室名称")
+	private String selfDeptName;
+    
+    /**
+     * 医院科室编码
+     */
+	@ApiModelProperty(value="医院科室编码")
+    private String hospitalDeptCode;
+
+    /**
+     * 医院科室名称
+     */
+	@ApiModelProperty(value="医院科室名称")
+    private String hospitalDeptName;
+    
+    /**
+	 * 医生id
+	 */
+	@ApiModelProperty(value="医生id")
+	private Long doctorId;
+	
+	/**
+     * 医生编码
+     */
+	@ApiModelProperty(value="医生编码")
+    private String doctorCode;
+
+    /**
+     * 医生姓名
+     */
+	@ApiModelProperty(value="医生姓名")
+    private String doctorName;
+    
+    /**
+   	 * 病人id
+   	 */
+	@ApiModelProperty(value="病人id")
+   	private Long patientId;
+   	
+   	/**
+     * 病人编号
+     */
+	@ApiModelProperty(value="病人编号")
+    private String patientCode;
+
+    /**
+     * 病人姓名
+     */
+	@ApiModelProperty(value="病人姓名")
+    private String patientName;
+
+    /**
+     * 病人性别
+     */
+	@ApiModelProperty(value="病人性别")
+    private String patientSex;
+    
+    /**
+     * 病人年龄
+     */
+	@ApiModelProperty(value="病人年龄")
+    private Integer patientAge;
+    
+    /**
+     * 病人证件号码
+     */
+	@ApiModelProperty(value="病人证件号码")
+    private String patientIdNo;
+
+	/**
+	 * 患者身份证号
+	 */
+	@ApiModelProperty(value = "患者身份证号")
+	private String patientIdentityNum;
+
+	/**
+	 * 患者联系电话
+	 */
+	@ApiModelProperty(value = "患者联系电话")
+	private String patientPhone;
+
+	/**
+	 * 系统时间
+	 */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+	@ApiModelProperty(value="系统时间")
+	private Date systemTime;
+	
+	/**
+     * 出生日期
+     */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+	@ApiModelProperty(value="出生日期")
+    private Date birthday;
+	
+	/**
+     * 门诊号
+     */
+	@ApiModelProperty(value="门诊号")
+	private String recordId;
+	
+}

+ 167 - 0
aipt-service/src/main/java/com/diagbot/dto/GetTopPatientInfoDjDTO.java

@@ -0,0 +1,167 @@
+package com.diagbot.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @author rgb
+ * @Description
+ * @time 2018年11月19日下午4:57:43
+ */
+@ApiModel(value = "页面顶部病人医生科室信息查询接口出参")
+@Getter
+@Setter
+public class GetTopPatientInfoDjDTO {
+
+    /**
+     * 医院id
+     */
+    @ApiModelProperty(value = "医院id")
+    private Long hospitalId;
+
+    /**
+     * 医院编码
+     */
+    @ApiModelProperty(value = "医院编码")
+    private String hospitalCode;
+
+    /**
+     * 医院名称
+     */
+    @ApiModelProperty(value = "医院名称")
+    private String hospitalName;
+
+    /**
+     * 子医院id
+     */
+    @ApiModelProperty(value = "子医院id")
+    private Long sonHospitalId;
+
+    /**
+     * 子医院编码
+     */
+    @ApiModelProperty(value = "子医院编码")
+    private String sonHospitalCode;
+
+    /**
+     * 子医院名称
+     */
+    @ApiModelProperty(value = "子医院名称")
+    private String sonHospitalName;
+
+    /**
+     * 医院科室id
+     */
+    @ApiModelProperty(value = "医院科室id")
+    private Long hospitalDeptId;
+
+    /**
+     * 自己科室id
+     */
+    @ApiModelProperty(value = "自己科室id")
+    private Long selfDeptId;
+
+    /**
+     * 自己科室名称
+     */
+    @ApiModelProperty(value = "自己科室名称")
+    private String selfDeptName;
+
+    /**
+     * 医院科室编码
+     */
+    @ApiModelProperty(value = "医院科室编码")
+    private String hospitalDeptCode;
+
+    /**
+     * 医院科室名称
+     */
+    @ApiModelProperty(value = "医院科室名称")
+    private String hospitalDeptName;
+
+    /**
+     * 医生id
+     */
+    @ApiModelProperty(value = "医生id")
+    private Long doctorId;
+
+    /**
+     * 医生编码
+     */
+    @ApiModelProperty(value = "医生编码")
+    private String doctorCode;
+
+    /**
+     * 医生姓名
+     */
+    @ApiModelProperty(value = "医生姓名")
+    private String doctorName;
+
+    /**
+     * 病人id
+     */
+    @ApiModelProperty(value = "病人id")
+    private Long patientId;
+
+    /**
+     * 病人编号
+     */
+    @ApiModelProperty(value = "病人编号")
+    private String patientCode;
+
+    /**
+     * 病人姓名
+     */
+    @ApiModelProperty(value = "病人姓名")
+    private String patientName;
+
+    /**
+     * 病人性别
+     */
+    @ApiModelProperty(value = "病人性别")
+    private String patientSex;
+
+    /**
+     * 病人年龄
+     */
+    @ApiModelProperty(value = "病人年龄")
+    private Integer patientAge;
+
+    /**
+     * 病人证件号码
+     */
+    @ApiModelProperty(value = "病人证件号码")
+    private String patientIdNo;
+
+    /**
+     * 患者联系电话
+     */
+    @ApiModelProperty(value = "患者联系电话")
+    private String patientPhone;
+
+    /**
+     * 系统时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    @ApiModelProperty(value = "系统时间")
+    private Date systemTime;
+
+    /**
+     * 出生日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    @ApiModelProperty(value = "出生日期")
+    private Date birthday;
+
+    /**
+     * 门诊号
+     */
+    @ApiModelProperty(value = "门诊号")
+    private String recordId;
+
+}

+ 15 - 0
aipt-service/src/main/java/com/diagbot/dto/HospitalDeptInfoDTO.java

@@ -0,0 +1,15 @@
+package com.diagbot.dto;
+
+import com.diagbot.entity.HospitalDept;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/2/12 17:23
+ */
+@Setter
+@Getter
+public class HospitalDeptInfoDTO extends HospitalDept {
+}

+ 20 - 0
aipt-service/src/main/java/com/diagbot/dto/IndexConfigAndDataDTO.java

@@ -0,0 +1,20 @@
+package com.diagbot.dto;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2019年5月6日 下午8:08:22
+ */
+@Getter
+@Setter
+public class IndexConfigAndDataDTO {
+
+	private List<IndexDTO> IndexData;
+	private List<IndexConfigDTO> IndexConfigData;
+}

+ 29 - 0
aipt-service/src/main/java/com/diagbot/dto/IndexConfigDTO.java

@@ -0,0 +1,29 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2019年5月6日 下午6:45:29
+ */
+@Getter
+@Setter
+public class IndexConfigDTO {
+	
+	private Long uniqueId;// 指标公表概念id
+	
+	private Long diseaseId;// 疾病概念id
+
+	private Integer groupType;// 指标项组别
+	
+	private Integer orderNo;// 显示顺序
+	@CryptField
+	private String indexUnique;// 指标公表名
+	@CryptField
+	private String diseaseName;// 疾病概念名
+
+}

+ 26 - 0
aipt-service/src/main/java/com/diagbot/dto/IndexDTO.java

@@ -0,0 +1,26 @@
+package com.diagbot.dto;
+
+import java.util.Date;
+import java.util.List;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2019年5月6日 下午8:09:16
+ */
+@Getter
+@Setter
+public class IndexDTO {
+	private String itemName; // 指标名称
+	private Long uniqueId;
+	private Integer groupType;
+	private List<String> indexUnit;//单位
+	private List<Integer> isAbnormal;//是否异常
+	private List<String> indexValue; 
+	private List<Date> creatTime;
+}

+ 25 - 0
aipt-service/src/main/java/com/diagbot/dto/IndexDataDTO.java

@@ -0,0 +1,25 @@
+package com.diagbot.dto;
+
+import java.util.Date;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2019年5月7日 上午10:22:12
+ */
+@Setter
+@Getter
+public class IndexDataDTO {
+	private Long uniqueId;// 指标id
+	private String indexValue;// 指标值
+	private String indexUnit;// 指标单位
+	private Integer isAbnormal;// 是否异常
+	private Date creatTime;// 化验时间
+	private Long patientId;// 患者id
+	private String inquiryCode;// 就诊号
+	private String indexUnique;// 指标名
+}

+ 23 - 0
aipt-service/src/main/java/com/diagbot/dto/Lexeme.java

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 词元定义.
+ */
+@Getter
+@Setter
+public class Lexeme {
+    private int offset = 0;
+    private int length = 0;
+
+    private String text;
+    private String property;
+    //段落分割 成句 '。',';',';','?' = -1 , ',',',',':',':' = -2
+    private String flag;
+
+    private float threshold;
+
+    private String concept;
+}

+ 19 - 0
aipt-service/src/main/java/com/diagbot/dto/PartDTO.java

@@ -0,0 +1,19 @@
+package com.diagbot.dto;
+
+import com.diagbot.entity.Symptom;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 部位症状关联信息
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Getter
+@Setter
+public class PartDTO extends ConceptBaseDTO{
+    private List<Symptom> symptomList = new ArrayList<>(); //症状列表
+}

+ 18 - 0
aipt-service/src/main/java/com/diagbot/dto/PartSymptomDTO.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 部位症状关联信息
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Getter
+@Setter
+public class PartSymptomDTO extends ConceptBaseDTO{
+    private List<PartDTO> partDTO = new ArrayList<>(); //部位信息
+}

+ 33 - 0
aipt-service/src/main/java/com/diagbot/dto/PushDTO.java

@@ -0,0 +1,33 @@
+package com.diagbot.dto;
+
+import com.diagbot.biz.push.entity.MedicalIndication;
+import com.diagbot.biz.push.entity.Treat;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2018/11/20 13:44
+ */
+@Getter
+@Setter
+public class PushDTO {
+    private List<ConceptPushDTO> symptom;
+    private List<ConceptPushDTO> other;
+    private List<ConceptPushDTO> vital;
+    private List<ConceptPushDTO> moduleVital;
+    private List<ConceptPushDTO> lab;
+    private List<ConceptPushDTO> pacs;
+    private Map<String, List<ConceptPushDTO>> dis;
+    private ConceptPushDTO dept;
+    private List<MedicalIndication> medicalIndications;
+    private Treat treat;
+    /**
+     * 有无病情提示标志(0:无,1:有)
+     */
+    private String hasIndications;
+}

+ 38 - 0
aipt-service/src/main/java/com/diagbot/dto/RetrievalDTO.java

@@ -0,0 +1,38 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2018/11/27 14:58
+ */
+@Getter
+@Setter
+public class RetrievalDTO {
+    //标签名称
+    @CryptField
+    private String name;
+    //标签id
+    private Long questionId;
+    //显示类型(静态知识出参时:0.同义词 1.本体 11.子项推出父项 21.(父项--子项)公表名)
+    private Long showType;
+    //Tag名称
+    @CryptField
+    private String retrievalName;
+    //概念id
+    private Long conceptId;
+    //标签类型id
+    private Long libTypeId;
+    //标签类型名称
+    private String libTypeName;
+    //icss标签type
+    private Integer type;
+    //公表名称
+    @CryptField
+    private String uniqueName;
+    //公表ID
+    private Long uniqueId;
+}

+ 22 - 0
aipt-service/src/main/java/com/diagbot/dto/ScaleIndexDTO.java

@@ -0,0 +1,22 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @description: 量表检索出参
+ * @author: zhoutg
+ * @date: 2019/7/8 11:27
+ */
+@Getter
+@Setter
+public class ScaleIndexDTO {
+    private Long conceptId; // 概念id
+    @CryptField
+    private String name;    //概念名称
+    @CryptField
+    private String searchName; // 检索名称
+    private Integer showType; // 显示类型
+    private Integer fromDis; // 结果是否来自诊断
+}

+ 72 - 0
aipt-service/src/main/java/com/diagbot/dto/SysSetInfoDTO.java

@@ -0,0 +1,72 @@
+package com.diagbot.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ * 
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2019年6月12日 下午3:31:22
+ */
+@Setter
+@Getter
+public class SysSetInfoDTO {
+	  /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 记录创建时间
+     */
+    private LocalDateTime gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private LocalDateTime gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院编码
+     */
+    private String hospitalCode;
+
+    /**
+     * 访问的系统类型 1:user-service,2:diagbotman-service,3:uaa-service,4:log-service,5:bi-service,6:knowledge-service,7:feedback-service,8:icss-web
+     */
+    private Integer sysType;
+
+    /**
+     * 配置名称
+     */
+    private String name;
+    
+    /**
+     * 配置编码
+     */
+    private String code;
+    /**
+     * 配置值
+     */
+    private String value;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 16 - 0
aipt-service/src/main/java/com/diagbot/dto/UsualDTO.java

@@ -0,0 +1,16 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 概念出参基础实体类
+ * @author: zhoutg
+ * @time: 2019/5/7 9:44
+ */
+@Getter
+@Setter
+public class UsualDTO extends ConceptBaseDTO{
+    private String description; // 描述
+    private String explains;   // 详细说明
+}

+ 60 - 0
aipt-service/src/main/java/com/diagbot/dto/VersionDetailDTO.java

@@ -0,0 +1,60 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2018年11月21日 上午11:12:12
+ */
+@Getter
+@Setter
+public class VersionDetailDTO {
+	
+	private Long id;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+   // private String creator;
+
+  
+    /**
+     * 版本主表id
+     */
+    private Long versionId;
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 排序号
+     */
+    private String orderNo;
+
+    /**
+     * 1:启动,0:不启用
+     */
+  //  private String status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 48 - 0
aipt-service/src/main/java/com/diagbot/dto/VersionWrapperDTO.java

@@ -0,0 +1,48 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2018年11月21日 上午11:09:33
+ */
+@Getter
+@Setter
+public class VersionWrapperDTO {
+	
+	private Long id;
+	/**
+	 * 记录创建时间
+	 */
+	private Date gmtCreate;
+
+	/**
+	 * 创建人,0表示无创建人值
+	 */
+	private String creator;
+
+	/**
+	 * 名称
+	 */
+	private String name;
+
+	private Date refreshTime;
+
+	/**
+	 * 1:启动,0:不启用
+	 */
+	private String status;
+
+	private List<VersionDetailDTO> detail;
+	/**
+	 * 备注
+	 */
+	private String remark;
+
+}

+ 147 - 0
aipt-service/src/main/java/com/diagbot/entity/Concept.java

@@ -0,0 +1,147 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 概念表
+ * </p>
+ *
+ * @author zhaops
+ * @since 2019-05-06
+ */
+@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:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 对应术语id
+     */
+    private Long libId;
+
+    /**
+     * 概念名称(冗余)
+     */
+    private String libName;
+
+    /**
+     * 概念词性type(冗余)
+     */
+    private Long libType;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getLibId() {
+        return libId;
+    }
+
+    public void setLibId(Long libId) {
+        this.libId = libId;
+    }
+    public String getLibName() {
+        return libName;
+    }
+
+    public void setLibName(String libName) {
+        this.libName = libName;
+    }
+    public Long getLibType() {
+        return libType;
+    }
+
+    public void setLibType(Long libType) {
+        this.libType = libType;
+    }
+
+    @Override
+    public String toString() {
+        return "Concept{" +
+        "id=" + id +
+        ", isDeleted=" + isDeleted +
+        ", gmtCreate=" + gmtCreate +
+        ", gmtModified=" + gmtModified +
+        ", creator=" + creator +
+        ", modifier=" + modifier +
+        ", libId=" + libId +
+        ", libName=" + libName +
+        ", libType=" + libType +
+        "}";
+    }
+}

+ 216 - 0
aipt-service/src/main/java/com/diagbot/entity/ConceptDetail.java

@@ -0,0 +1,216 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.diagbot.annotation.CryptField;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 提示信息明细表
+ * </p>
+ *
+ * @author zhaops
+ * @since 2019-05-06
+ */
+@TableName("kl_concept_detail")
+public class ConceptDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 提示概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 提示明细标题
+     */
+    @CryptField
+    private String title;
+
+    /**
+     * 提示明细内容
+     */
+    @CryptField
+    private String content;
+
+    /**
+     * 纯文本
+     */
+    @CryptField
+    private String text;
+
+    /**
+     * 提示明细序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 显示位置(多选):1-推送展示,2-更多展示,3-一般治疗展示,4-手术治疗展示,5-药品说明书,6-不良反应,7-症状描述信息(智能分诊)
+     */
+    private String position;
+
+    /**
+     * 是否诊断依据(1-是,0-否)
+     */
+    private Integer isReason;
+
+    /**
+     * 静态知识来源
+     */
+    private String source;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getConceptId() {
+        return conceptId;
+    }
+
+    public void setConceptId(Long conceptId) {
+        this.conceptId = conceptId;
+    }
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+    public Integer getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(Integer orderNo) {
+        this.orderNo = orderNo;
+    }
+    public String getPosition() {
+        return position;
+    }
+
+    public void setPosition(String position) {
+        this.position = position;
+    }
+    public Integer getIsReason() {
+        return isReason;
+    }
+
+    public void setIsReason(Integer isReason) {
+        this.isReason = isReason;
+    }
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    @Override
+    public String toString() {
+        return "ConceptDetail{" +
+        "id=" + id +
+        ", isDeleted=" + isDeleted +
+        ", gmtCreate=" + gmtCreate +
+        ", gmtModified=" + gmtModified +
+        ", creator=" + creator +
+        ", modifier=" + modifier +
+        ", conceptId=" + conceptId +
+        ", title=" + title +
+        ", content=" + content +
+        ", text=" + text +
+        ", orderNo=" + orderNo +
+        ", position=" + position +
+        ", isReason=" + isReason +
+        ", source=" + source +
+        "}";
+    }
+}

+ 88 - 0
aipt-service/src/main/java/com/diagbot/entity/DictionaryInfo.java

@@ -0,0 +1,88 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * icss字典表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-25
+ */
+@TableName("kl_dictionary_info")
+@Getter
+@Setter
+public class DictionaryInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 分组(值自定义)
+     */
+    private Long groupType;
+
+    /**
+     * 内容
+     */
+    private String name;
+
+    /**
+     * 值
+     */
+    private String val;
+
+    /**
+     * 返回类型(0: 都返回,1:后台维护返回 2:icss界面返回)
+     */
+    private Integer returnType;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 78 - 0
aipt-service/src/main/java/com/diagbot/entity/DisScale.java

@@ -0,0 +1,78 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 诊断量表映射表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2019-03-11
+ */
+@TableName("icss_dis_scale")
+@Getter
+@Setter
+public class DisScale implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 诊断标签id
+     */
+    private Long disId;
+
+    /**
+     * 量表标签id
+     */
+    private Long scaleId;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 78 - 0
aipt-service/src/main/java/com/diagbot/entity/DisType.java

@@ -0,0 +1,78 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 诊断类型表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2019-03-08
+ */
+@TableName("icss_dis_type")
+@Getter
+@Setter
+public class DisType implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 诊断标签id
+     */
+    private Long disId;
+
+    /**
+     * parentId
+     */
+    private Long parentId;
+
+    /**
+     * 0:慢病,1:急诊
+     */
+    private Integer type;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 196 - 0
aipt-service/src/main/java/com/diagbot/entity/DisclaimerInformation.java

@@ -0,0 +1,196 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 免责申明详情
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2018-11-20
+ */
+@TableName("kl_disclaimer_information")
+public class DisclaimerInformation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 主表id
+     */
+    private Long versionId;
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 排序号
+     */
+    private String orderNo;
+
+    /**
+     * 1:启动,0:不启用
+     */
+    private String status;
+
+    /**
+     * 免责申明编号
+     */
+    private String disclaimerCode;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getVersionId() {
+        return versionId;
+    }
+
+    public void setVersionId(Long versionId) {
+        this.versionId = versionId;
+    }
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    public String getDisclaimerCode() {
+        return disclaimerCode;
+    }
+
+    public void setDisclaimerCode(String disclaimerCode) {
+        this.disclaimerCode = disclaimerCode;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "DisclaimerInformation{" +
+        "id=" + id +
+        ", isDeleted=" + isDeleted +
+        ", gmtCreate=" + gmtCreate +
+        ", gmtModified=" + gmtModified +
+        ", creator=" + creator +
+        ", modifier=" + modifier +
+        ", versionId=" + versionId +
+        ", title=" + title +
+        ", description=" + description +
+        ", orderNo=" + orderNo +
+        ", status=" + status +
+        ", disclaimerCode=" + disclaimerCode +
+        ", remark=" + remark +
+        "}";
+    }
+}

+ 196 - 0
aipt-service/src/main/java/com/diagbot/entity/DiseaseIcd.java

@@ -0,0 +1,196 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.diagbot.annotation.CryptField;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 各医院对应的诊断icd
+ * </p>
+ *
+ * @author wangyu
+ * @since 2019-02-14
+ */
+@TableName("tran_disease_icd")
+public class DiseaseIcd implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院编码
+     */
+    private String hospitalCode;
+
+    /**
+     * HIS疾病名称
+     */
+    private String diseaseName;
+
+    /**
+     * icd编码
+     */
+    private String icd;
+
+    /**
+     * 状态(1:有效)
+     */
+    private String status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 朗通疾病名称
+     */
+    @CryptField
+    private String conceptDisName;
+
+    public String getConceptDisName() {
+        return conceptDisName;
+    }
+
+    public void setConceptDisName(String conceptDisName) {
+        this.conceptDisName = conceptDisName;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    public String getHospitalCode() {
+        return hospitalCode;
+    }
+
+    public void setHospitalCode(String hospitalCode) {
+        this.hospitalCode = hospitalCode;
+    }
+
+    public String getDiseaseName() {
+        return diseaseName;
+    }
+
+    public void setDiseaseName(String diseaseName) {
+        this.diseaseName = diseaseName;
+    }
+
+    public String getIcd() {
+        return icd;
+    }
+
+    public void setIcd(String icd) {
+        this.icd = icd;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "DiseaseIcd{" +
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", hospitalCode=" + hospitalCode +
+                ", diseaseName=" + diseaseName +
+                ", icd=" + icd +
+                ", status=" + status +
+                ", remark=" + remark +
+                ",conceptDisName" + conceptDisName +
+                "}";
+    }
+}

+ 166 - 0
aipt-service/src/main/java/com/diagbot/entity/Evaluation.java

@@ -0,0 +1,166 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 管理与评估模板表
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2019-05-06
+ */
+@TableName("kl_evaluation")
+public class Evaluation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private LocalDateTime gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private LocalDateTime gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 区域名
+     */
+    private String regionName;
+
+    /**
+     * 区域类型(0默认自定义,1大数据,2内部数据)
+     */
+    private String regionType;
+
+    /**
+     * 区域顺序
+     */
+    private Integer orderNo;
+
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public LocalDateTime getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(LocalDateTime gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public LocalDateTime getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(LocalDateTime gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getConceptId() {
+        return conceptId;
+    }
+
+    public void setConceptId(Long conceptId) {
+        this.conceptId = conceptId;
+    }
+    public String getRegionName() {
+        return regionName;
+    }
+
+    public void setRegionName(String regionName) {
+        this.regionName = regionName;
+    }
+    public String getRegionType() {
+        return regionType;
+    }
+
+    public void setRegionType(String regionType) {
+        this.regionType = regionType;
+    }
+    public Integer getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(Integer orderNo) {
+        this.orderNo = orderNo;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "Evaluation{" +
+        "id=" + id +
+        ", isDeleted=" + isDeleted +
+        ", gmtCreate=" + gmtCreate +
+        ", gmtModified=" + gmtModified +
+        ", creator=" + creator +
+        ", modifier=" + modifier +
+        ", conceptId=" + conceptId +
+        ", regionName=" + regionName +
+        ", regionType=" + regionType +
+        ", orderNo=" + orderNo +
+        ", remark=" + remark +
+        "}";
+    }
+}

+ 104 - 0
aipt-service/src/main/java/com/diagbot/entity/HospitalDept.java

@@ -0,0 +1,104 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 医院科室信息表
+ * </p>
+ *
+ * @author rengb
+ * @since 2018-11-19
+ */
+@TableName("tran_hospital_dept")
+@Getter
+@Setter
+public class HospitalDept implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院科室编码
+     */
+    private String code;
+
+    /**
+     * 医院科室名称
+     */
+    private String name;
+
+    /**
+     * 医院编码
+     */
+    private String hospitalCode;
+
+    /**
+     * 医院名称
+     */
+    private String hospitalName;
+
+    /**
+     * 朗通科室名称
+     */
+    @CryptField
+    private String conceptDeptName;
+
+    /**
+     * 状态:0.禁用1.启用
+     */
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 医院科室地址
+     */
+    private String url;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+}

+ 170 - 0
aipt-service/src/main/java/com/diagbot/entity/IndexConfig.java

@@ -0,0 +1,170 @@
+package com.diagbot.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+ * <p>
+ * 指标配置
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2019-05-06
+ */
+@TableName("kl_index_config")
+public class IndexConfig implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 指标公表名概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 疾病概念id
+     */
+    private Long diseaseId;
+
+    /**
+     * 指标描述
+     */
+    private Integer indexDesc;
+
+    /**
+     * 显示顺序
+     */
+    private Integer orderNo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getConceptId() {
+        return conceptId;
+    }
+
+    public void setConceptId(Long conceptId) {
+        this.conceptId = conceptId;
+    }
+    public Long getDiseaseId() {
+        return diseaseId;
+    }
+
+    public void setDiseaseId(Long diseaseId) {
+        this.diseaseId = diseaseId;
+    }
+    public Integer getIndexDesc() {
+        return indexDesc;
+    }
+
+    public void setIndexDesc(Integer indexDesc) {
+        this.indexDesc = indexDesc;
+    }
+    public Integer getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(Integer orderNo) {
+        this.orderNo = orderNo;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "IndexConfig{" +
+        "id=" + id +
+        ", isDeleted=" + isDeleted +
+        ", gmtCreate=" + gmtCreate +
+        ", gmtModified=" + gmtModified +
+        ", creator=" + creator +
+        ", modifier=" + modifier +
+        ", conceptId=" + conceptId +
+        ", diseaseId=" + diseaseId +
+        ", indexDesc=" + indexDesc +
+        ", orderNo=" + orderNo +
+        ", remark=" + remark +
+        "}";
+    }
+}

+ 78 - 0
aipt-service/src/main/java/com/diagbot/entity/KlSymptom.java

@@ -0,0 +1,78 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 症状扩展表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-20
+ */
+@TableName("kl_symptom")
+@Getter
+@Setter
+public class KlSymptom implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 详细阐述
+     */
+    private String explains;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 147 - 0
aipt-service/src/main/java/com/diagbot/entity/LisMapping.java

@@ -0,0 +1,147 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 化验项目公表映射
+ * </p>
+ *
+ * @author zhaops
+ * @since 2019-09-20
+ */
+@TableName("kl_lis_mapping")
+public class LisMapping implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 化验套餐术语id
+     */
+    private Long mealId;
+
+    /**
+     * 化验明细术语id
+     */
+    private Long itemId;
+
+    /**
+     * 化验公表术语id
+     */
+    private Long uniqueId;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getMealId() {
+        return mealId;
+    }
+
+    public void setMealId(Long mealId) {
+        this.mealId = mealId;
+    }
+    public Long getItemId() {
+        return itemId;
+    }
+
+    public void setItemId(Long itemId) {
+        this.itemId = itemId;
+    }
+    public Long getUniqueId() {
+        return uniqueId;
+    }
+
+    public void setUniqueId(Long uniqueId) {
+        this.uniqueId = uniqueId;
+    }
+
+    @Override
+    public String toString() {
+        return "LisMapping{" +
+        "id=" + id +
+        ", isDeleted=" + isDeleted +
+        ", gmtCreate=" + gmtCreate +
+        ", gmtModified=" + gmtModified +
+        ", creator=" + creator +
+        ", modifier=" + modifier +
+        ", mealId=" + mealId +
+        ", itemId=" + itemId +
+        ", uniqueId=" + uniqueId +
+        "}";
+    }
+}

+ 36 - 0
aipt-service/src/main/java/com/diagbot/entity/ScaleContent.java

@@ -0,0 +1,36 @@
+package com.diagbot.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 量表内容表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2019-03-11
+ */
+@Getter
+@Setter
+public class ScaleContent implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 量表概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+    /**
+     * 0:文本,1:大数据接口填充
+     */
+    private Integer type;
+}

+ 24 - 0
aipt-service/src/main/java/com/diagbot/entity/Symptom.java

@@ -0,0 +1,24 @@
+package com.diagbot.entity;
+
+import com.diagbot.dto.ConceptBaseDTO;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 症状信息扩展表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-09-17
+ */
+@Getter
+@Setter
+public class Symptom extends ConceptBaseDTO {
+
+    @JsonIgnore
+    private Long partConceptId;
+    private String description;
+    private String explains;
+}

+ 183 - 0
aipt-service/src/main/java/com/diagbot/entity/VersionDetail.java

@@ -0,0 +1,183 @@
+package com.diagbot.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+ * <p>
+ * 版本详情(关于)
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2018-11-20
+ */
+@TableName("kl_version_detail")
+public class VersionDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 版本主表id
+     */
+    private Long versionId;
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 排序号
+     */
+    private String orderNo;
+
+    /**
+     * 1:启动,0:不启用
+     */
+    private String status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getVersionId() {
+        return versionId;
+    }
+
+    public void setVersionId(Long versionId) {
+        this.versionId = versionId;
+    }
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "VersionDetail{" +
+        "id=" + id +
+        ", isDeleted=" + isDeleted +
+        ", gmtCreate=" + gmtCreate +
+        ", gmtModified=" + gmtModified +
+        ", creator=" + creator +
+        ", modifier=" + modifier +
+        ", versionId=" + versionId +
+        ", title=" + title +
+        ", description=" + description +
+        ", orderNo=" + orderNo +
+        ", status=" + status +
+        ", remark=" + remark +
+        "}";
+    }
+}

+ 167 - 0
aipt-service/src/main/java/com/diagbot/entity/VersionInfo.java

@@ -0,0 +1,167 @@
+package com.diagbot.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+ * <p>
+ * 版本信息(关于)
+ * </p>
+ *
+ * @author gaodm
+ * @since 2019-08-07
+ */
+@TableName("kl_version_info")
+public class VersionInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 产品类型(1:云平台内部;2:云平台外部;3:icss;4:智能分诊;5:数据服务模式;6:智能预问诊)
+     */
+    private Integer productType;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    private Date refreshTime;
+
+    /**
+     * 1:启动,0:不启用
+     */
+    private String status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Integer getProductType() {
+        return productType;
+    }
+
+    public void setProductType(Integer productType) {
+        this.productType = productType;
+    }
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+    public Date getRefreshTime() {
+        return refreshTime;
+    }
+
+    public void setRefreshTime(Date refreshTime) {
+        this.refreshTime = refreshTime;
+    }
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "VersionInfo{" +
+        "id=" + id +
+        ", isDeleted=" + isDeleted +
+        ", gmtCreate=" + gmtCreate +
+        ", gmtModified=" + gmtModified +
+        ", creator=" + creator +
+        ", modifier=" + modifier +
+        ", productType=" + productType +
+        ", name=" + name +
+        ", refreshTime=" + refreshTime +
+        ", status=" + status +
+        ", remark=" + remark +
+        "}";
+    }
+}

+ 43 - 0
aipt-service/src/main/java/com/diagbot/entity/wrapper/ConceptWrapper.java

@@ -0,0 +1,43 @@
+package com.diagbot.entity.wrapper;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description: 概念查询参数
+ * @author: gaodm
+ * @time: 2019/5/6 16:05
+ */
+@Getter
+@Setter
+public class ConceptWrapper {
+    //关系起点术语id
+    private Long startId;
+    //关系起点术语名称
+    private String startName;
+    //关系起点术语性别类型
+    private Integer startSex;
+    //关系起点术语年龄
+    private Integer startAge;
+    //关系起点术语类型
+    private Integer startType;
+    //关系类型
+    private Integer relationType;
+    //关系终点术语id
+    private Long endId;
+    //关系终点术语名称
+    private String endName;
+    //关系终点术语性别类型
+    private Integer endSex;
+    //关系终点术语年龄
+    private Integer endAge;
+    //关系终点术语类型
+    private Integer endType;
+    //关系起点术语名称列表
+    private List<String> startNameList;
+    //关系终点术语名称列表
+    private List<String> endNameList;
+
+}

+ 18 - 0
aipt-service/src/main/java/com/diagbot/entity/wrapper/LisMappingWrapper.java

@@ -0,0 +1,18 @@
+package com.diagbot.entity.wrapper;
+
+import com.diagbot.entity.LisMapping;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/9/20 13:42
+ */
+@Getter
+@Setter
+public class LisMappingWrapper extends LisMapping {
+    private String mealName;
+    private String itemName;
+    private String uniqueName;
+}

+ 77 - 0
aipt-service/src/main/java/com/diagbot/enums/ConceptTypeEnum.java

@@ -0,0 +1,77 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/5/7 14:06
+ */
+public enum ConceptTypeEnum implements KeyedNamed {
+    Symptom(1, "症状"),
+    Past(2, "既往史"),
+    Other(3, "其他史"),
+    Vital(4, "查体"),
+    Lis(5, "化验"),
+    Pacs(6, "辅检"),
+    Disease(7, "诊断"),
+    Drug(8, "药品"),
+    Drug_Category_Big(9, "药品分类-大类"),
+    SIDE_EFFECTS(10, "不良反应"),
+    Drug_Category_Small(11, "药品分类-小类"),
+    LIS_TABLES(12, "化验公表项"),
+    DEPARTMENT(15, "科室"),
+    Scale(21, "量表"),
+    Indication(22, "指标"),
+    OPERATION(25, "手术"),
+    LisDetail(51, "化验明细"),
+    // GUIDELINES_OUTPATIENT(72,"诊疗指南(门诊)"),
+    // GUIDELINES_HOS(73,"诊疗指南(住院)"),
+    NURSE(74,"护理"),
+    CLINICAL_PATHWAY(75,"临床路径"),
+    BLOOD(76,"血液"),
+    ANESTHESIA(77,"麻醉"),
+    TUTELAGE(78,"监护"),
+    TCM(79,"中医"),
+    THE_DIVISION_PROCESS(80,"入科流程"),
+    CENSORSHIP_RULES(81,"审查规则"),
+    E_BOOK (82,"电子书"),
+    VIDEO(83,"视频");
+
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    ConceptTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static ConceptTypeEnum getEnum(int key) {
+        for (ConceptTypeEnum item : ConceptTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        ConceptTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 49 - 0
aipt-service/src/main/java/com/diagbot/enums/DisTypeEnum.java

@@ -0,0 +1,49 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description: 推送类型
+ * @Author:zhaops
+ * @time: 2019/3/14 11:28
+ */
+public enum DisTypeEnum implements KeyedNamed {
+    CHRONIC(1, "慢病"),
+    EMERGENCY(2, "急诊");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    DisTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static DisTypeEnum getEnum(int key) {
+        for (DisTypeEnum item : DisTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        DisTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 66 - 0
aipt-service/src/main/java/com/diagbot/enums/LexiconRSTypeEnum.java

@@ -0,0 +1,66 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description: 术语关系分类枚举
+ * @author: gaodm
+ * @time: 2019/5/6 13:58
+ */
+public enum LexiconRSTypeEnum implements KeyedNamed {
+    IS_A(1, "是"),
+    EQUAL_TO(2, "同义于"),
+    INCLUDE_OF(3, "包含于"),
+    ASSOCIATED_WITH(4, "与相关"),
+    CAUSE(5, "引起"),
+    LOCATED_AT(6, "位于"),
+    AKA(7, "别名"),
+    INSURE_LEVEL(8, "医保"),
+    APPLIED_TO(9, "适用于"),
+    PREFERRED_MEDS(10, "首选药物"),
+    TREAT(11, "治疗"),
+    USAGE(12, "用法"),
+    REACTION(13, "不良反应"),
+    DO_AND_DONOT(14, "注意事项"),
+    SPEC(15, "规格"),
+    HAS(16, "有"),
+    ORDER_BY(17, "包含排列于"),
+    SUBITEM(18, "包含子项"),
+    PUSH(19, "推送");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    LexiconRSTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static LexiconRSTypeEnum getEnum(int key) {
+        for (LexiconRSTypeEnum item : LexiconRSTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        LexiconRSTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 133 - 0
aipt-service/src/main/java/com/diagbot/enums/LexiconTypeEnum.java

@@ -0,0 +1,133 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description: 术语分类枚举
+ * @author: gaodm
+ * @time: 2019/5/6 13:58
+ */
+public enum LexiconTypeEnum implements KeyedNamed {
+    SYMPTOM(1, "症状"),
+    TIME(2, "时间"),
+    BODYPART(3, "部位"),
+    NATURE(4, "性质"),
+    CAUSE(5, "诱因"),
+    DEGREE(6, "程度"),
+    NEGATIVE(7, "阴性"),
+    POSITIVE(8, "阳性"),
+    COMPANY(9, "单位"),
+    DRUGS(10, "药品通用名"),
+    TREATMENT(11, "治疗"),
+    LIS_PACKAGE(12, "化验套餐"),
+    LIS_DETAILS(13, "化验明细"),
+    LIS_RESULTS(14, "化验结果"),
+    PACS_PACKAGE(15, "辅检套餐"),
+    PACS_ITEMS(16, "辅检项目"),
+    PACS_RESULTS(17, "辅检结果"),
+    DIAGNOSIS(18, "诊断"),
+    CONNECTIVES(19, "连接词"),
+    POSITION(20, "方位"),
+    RELATIVES(21, "亲属"),
+    MARRIAGE(22, "婚姻"),
+    FOOD(23, "食品"),
+    HISTORY(24, "历史"),
+    OPERATION(25, "手术"),
+    SYMPTOM_MANIFESTATION(26, "症状表现"),
+    DIGITAL_QUANTIFIER(27, "数字量词"),
+    NUMBER(28, "数字"),
+    DRUG_CATEGORY_BIG(29, "药品大类"),
+    DRUG_CATEGORY_SMALL(30, "药品小类"),
+    PACS_CATEGORY_BIG(31, "辅检大类"),
+    PACS_CATEGORY_SMALL(32, "辅检小类"),
+    VITAL_INDEX(33, "体征指标"),
+    VITAL_INDEX_VALUE(34, "体征指标值"),
+    VITAL_RESULT(35, "体征结果"),
+    PLACE(36, "地点"),
+    OCCUPATION(37, "职业"),
+    PERSONAL_HISTORY(38, "个人史"),
+    PERSONAL_HISTORY_DESCRIPTION(39, "个人史描述"),
+    TIME_DESCRIPTION(40, "时间描述"),
+    SYMPTOM_INDEX(41, "症状指标"),
+    MEDICAL_SUPPLIES(42, "医用耗材 "),
+    DEGREE_CLASSIFIER(43, "程度量词"),
+    OTHER(44, "其他"),
+    DELETE(45, "删除"),
+    LIS_TABLES(46, "化验公表项"),
+    DEPARTMENT(47, "科室"),
+    GAUGE(48, "量表"),
+    SIDE_EFFECTS(49, "不良反应"),
+    CORE_INDICATORS(50, "核心指标"),
+    TYPES_OF_DISEASE(51, "疾病类型(慢病|急诊)"),
+    PART_AREA(52, "部位区域"),
+    LOCATION_AREA(52, "部位区域"),
+    CHEMICAL_NAME_OF_DRUG(53, "药品化学名"),
+    DRUG_TRADE_NAMES(54, "药品商品名"),
+    HISTORY_OF_PAST_DISEASES(55, "既往疾病史"),
+    HISTORY_OF_TRAUMA(56, "外伤史"),
+    HISTORY_OF_SURGERY(57, "手术史"),
+    HISTORY_OF_BLOOD_TRANSFUSION(58, "输血史"),
+    INFECTIOUS_DISEASE_HISTORY(59, "传染病史"),
+    BAD_HABITS(60, "不良习惯"),
+    MARITAL_HISTORY(61, "冶游史"),
+    HISTORY_OF_MARRIAGE_AND_CHILDBEARING(62, "婚育史"),
+    BIRTH_HISTORY(63, "生育史"),
+    FAMILY_HISTORY(64, "家族史"),
+    FOOD_ALLERGY_HISTORY(65, "过敏史"),
+    HISTORY_OF_DRUG_ALLERGY(66, "药物过敏史"),
+    FAMILY_RELATED_INFECTIOUS_DISEASE_HISTORY(67, "家族相关传染病史"),
+    FURTHER_CONSULTATION(68, "复诊"),
+    DIAGNOSTIC_CRITERIA(69, "诊断依据条件"),
+    OTHER_DIAGNOSTIC_CRITERIA(70, "诊断依据其他"),
+    PACS_ROOT_DIRECTORY(71,"辅检根目录"),
+    // GUIDELINES_OUTPATIENT(72,"诊疗指南(门诊)"),
+    // GUIDELINES_HOS(73,"诊疗指南(住院)"),
+    NURSE(74,"护理"),
+    CLINICAL_PATHWAY(75,"临床路径"),
+    BLOOD(76,"血液"),
+    ANESTHESIA(77,"麻醉"),
+    TUTELAGE(78,"监护"),
+    TCM(79,"中医"),
+    THE_DIVISION_PROCESS(80,"入科流程"),
+    CENSORSHIP_RULES(81,"审查规则"),
+    E_BOOK (82,"电子书"),
+    VIDEO(83,"视频");
+
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    LexiconTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static LexiconTypeEnum getEnum(int key) {
+        for (LexiconTypeEnum item : LexiconTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        LexiconTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}
+

+ 49 - 0
aipt-service/src/main/java/com/diagbot/enums/LisSourceEnum.java

@@ -0,0 +1,49 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description:化验数据来源
+ * @Author:zhaops
+ * @time: 2018/12/26 16:37
+ */
+public enum LisSourceEnum implements KeyedNamed {
+    Inner(0, "ICSS-内部"),
+    Outer(1, "外部");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    LisSourceEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static LisSourceEnum getEnum(int key) {
+        for (LisSourceEnum item : LisSourceEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        LisSourceEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 0 - 0
aipt-service/src/main/java/com/diagbot/enums/PositionTypeEnum.java


Some files were not shown because too many files changed in this diff