Jelajahi Sumber

Merge branch 'master' of http://192.168.1.220:10080/esb/esb

# Conflicts:
#	README.md
调整README说明
airhead 8 tahun lalu
induk
melakukan
758248d159
100 mengubah file dengan 4215 tambahan dan 1041 penghapusan
  1. 2 0
      README.md
  2. 29 0
      hos-agent/src/main/resources/application.yml
  3. 4 1
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ServiceFlowService.java
  4. 3 5
      hos-arbiter/src/main/resources/application.yml
  5. 16 1
      hos-broker/pom.xml
  6. 2 0
      hos-broker/src/main/java/com/yihu/hos/broker/common/constants/BrokerConstant.java
  7. 29 4
      hos-broker/src/main/java/com/yihu/hos/broker/controllers/ESBCamelController.java
  8. 30 22
      hos-broker/src/main/java/com/yihu/hos/broker/services/camel/CamelCompiler.java
  9. 50 21
      hos-broker/src/main/java/com/yihu/hos/broker/services/camel/ESBCamelService.java
  10. 369 369
      hos-broker/src/main/java/com/yihu/hos/broker/util/SigarUtil.java
  11. 8 9
      hos-broker/src/main/resources/application.yml
  12. 36 6
      hos-camel2/pom.xml
  13. 4 0
      hos-camel2/src/main/java/camel/api1/route/ApiRouteBulider.java
  14. 1 1
      hos-camel2/src/main/java/camel/api7/processor/TestClient.java
  15. 13 1
      hos-camel2/src/main/java/camel/api7/processor/TestWService.java
  16. 0 25
      hos-camel2/src/main/java/camel/api7/processor/TestWServiceImpl.java
  17. 10 13
      hos-camel2/src/main/java/camel/api7/processor/TestWsConfig.java
  18. 101 20
      hos-camel2/src/main/java/camel/api7/processor/ToWsProcessor.java
  19. 0 64
      hos-camel2/src/main/java/camel/api7/processor/WsProcessor.java
  20. 39 45
      hos-camel2/src/main/java/camel/api7/route/CxfConsumerTest.java
  21. 1 1
      hos-camel2/src/main/java/camel/collect/processor/CollectProcessor0.java
  22. 4 0
      hos-camel2/src/main/java/camel/crawler/processor/DefaultHttpProcessor.java
  23. 3 1
      hos-camel2/src/main/java/camel/crawler/processor/Split.java
  24. 4 0
      hos-camel2/src/main/java/camel/crawler/route/CrawlerQuartzRoute.java
  25. 19 8
      hos-camel2/src/main/java/camel/gateway/processor/ErrorHandle.java
  26. 23 5
      hos-camel2/src/main/java/camel/gateway/processor/GatewayProcessor.java
  27. 171 0
      hos-camel2/src/main/java/camel/gateway/processor/WsProcessor.java
  28. 32 0
      hos-camel2/src/main/java/camel/gateway/processor/WsService.java
  29. 14 4
      hos-camel2/src/main/java/camel/gateway/route/GatewayRouterBuilder.java
  30. 20 0
      hos-camel2/src/main/java/camel/qcrule/processor/PatientProcessor.java
  31. 159 0
      hos-camel2/src/main/java/camel/qcrule/processor/QcHttpProcessor.java
  32. 63 0
      hos-camel2/src/main/java/camel/qcrule/router/QcCrawlerRoute.java
  33. 20 0
      hos-camel2/src/main/java/camel/quartz2/processor/Quartz2Processor.java
  34. 11 0
      hos-camel2/src/main/java/camel/quartz2/route/Quartz2Route.java
  35. 24 0
      hos-central-rest/.gitignore
  36. TEMPAT SAMPAH
      hos-central-rest/.mvn/wrapper/maven-wrapper.jar
  37. 1 0
      hos-central-rest/.mvn/wrapper/maven-wrapper.properties
  38. 225 0
      hos-central-rest/mvnw
  39. 143 0
      hos-central-rest/mvnw.cmd
  40. 50 0
      hos-central-rest/pom.xml
  41. 12 0
      hos-central-rest/src/main/java/com/yihu/hos/central/rest/HosCentralRestApplication.java
  42. 0 0
      hos-central-rest/src/main/resources/application.properties
  43. 16 0
      hos-central-rest/src/test/java/com/yihu/hos/central/rest/HosCentralRestApplicationTests.java
  44. 10 0
      hos-core/src/main/java/com/yihu/hos/core/datatype/ClassFileUtil.java
  45. 33 0
      hos-core/src/main/java/com/yihu/hos/core/datatype/DateUtil.java
  46. 2 0
      hos-core/src/main/java/com/yihu/hos/core/http/DefaultClientImpl.java
  47. 1 1
      hos-dfs/src/main/java/com/yihu/hos/dfs/controller/DFSController.java
  48. 1 1
      hos-dfs/src/main/resources/application.yml
  49. 19 0
      hos-rest/pom.xml
  50. 185 6
      hos-rest/src/main/java/com/yihu/hos/rest/common/format/DataSetTransformer.java
  51. 21 0
      hos-rest/src/main/java/com/yihu/hos/rest/common/format/StdBase.java
  52. 9 5
      hos-rest/src/main/java/com/yihu/hos/rest/common/http/EHRHttpHelper.java
  53. 79 12
      hos-rest/src/main/java/com/yihu/hos/rest/controllers/CrawlerController.java
  54. 4 0
      hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/adapter/AdapterDataSet.java
  55. 90 0
      hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/adapter/StdDataSet.java
  56. 3 1
      hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/config/SysConfig.java
  57. 9 0
      hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/patient/Patient.java
  58. 138 0
      hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/qc/QcDaily.java
  59. 42 0
      hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/qc/QcPatientIndex.java
  60. 68 0
      hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/qc/QcRuleModel.java
  61. 11 0
      hos-rest/src/main/java/com/yihu/hos/rest/models/standard/adapter/AdapterMetadataModel.java
  62. 8 2
      hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/CrawlerFlowManager.java
  63. 251 127
      hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/CrawlerManager.java
  64. 158 14
      hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/DataCollectDispatcher.java
  65. 1 0
      hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/DatacollectService.java
  66. 52 15
      hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/EsbHttp.java
  67. 7 2
      hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/PatientCDAUpload.java
  68. 138 0
      hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/QCDataIndex.java
  69. 167 0
      hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/QCDataUpload.java
  70. 36 0
      hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/QcRuleService.java
  71. 17 1
      hos-rest/src/main/java/com/yihu/hos/rest/services/standard/adapter/AdapterDatasetService.java
  72. 27 1
      hos-rest/src/main/java/com/yihu/hos/rest/services/standard/standard/StdMetadataService.java
  73. 10 0
      hos-rest/src/main/resources/application.yml
  74. 2 2
      hos-rest/src/main/resources/config/dbhelper.properties
  75. 4 1
      hos-rest/src/main/resources/config/http.properties
  76. 1 1
      hos-rest/src/main/resources/config/sys.config.xml
  77. 37 0
      hos-rest/src/main/resources/hibernate/QcRule.hbm.xml
  78. 7 0
      hos-rest/src/test/java/com/yihu/hos/rest/HosRestApplicationTests.java
  79. 14 0
      hos-web-framework/src/main/java/com/yihu/hos/web/framework/constant/QcResultConstant.java
  80. 11 1
      hos-web-framework/src/main/java/com/yihu/hos/web/framework/dao/SQLGeneralDAO.java
  81. 15 10
      hos-web-framework/src/main/java/com/yihu/hos/web/framework/util/springutil/SpringBeanUtil.java
  82. 9 1
      pom.xml
  83. 12 1
      src/main/java/com/yihu/hos/ESBApplication.java
  84. 1 1
      src/main/java/com/yihu/hos/ServletInitializer.java
  85. 11 4
      src/main/java/com/yihu/hos/common/CommonPageController.java
  86. 4 2
      src/main/java/com/yihu/hos/crawler/controller/CrawlerController.java
  87. 9 6
      src/main/java/com/yihu/hos/datacollect/controller/DataCollectController.java
  88. 177 162
      src/main/java/com/yihu/hos/datacollect/model/RsJobConfig.java
  89. 29 27
      src/main/java/com/yihu/hos/datacollect/service/DatacollectManager.java
  90. 7 6
      src/main/java/com/yihu/hos/filter/SessionOutTimeFilter.java
  91. 205 0
      src/main/java/com/yihu/hos/qc/controller/RuleController.java
  92. 48 0
      src/main/java/com/yihu/hos/qc/dao/RuleDao.java
  93. 82 0
      src/main/java/com/yihu/hos/qc/model/RuleModel.java
  94. 88 0
      src/main/java/com/yihu/hos/qc/service/RuleService.java
  95. 1 1
      src/main/java/com/yihu/hos/standard/controller/AdapterDictController.java
  96. 1 1
      src/main/java/com/yihu/hos/standard/controller/AdapterMetadataController.java
  97. 41 0
      src/main/java/com/yihu/hos/standard/controller/InitController.java
  98. 29 0
      src/main/java/com/yihu/hos/standard/dao/IStdAdapterMetadataDao.java
  99. 12 0
      src/main/java/com/yihu/hos/standard/dao/IStdDataSetModelDao.java
  100. 0 0
      src/main/java/com/yihu/hos/standard/dao/IStdDictionaryEntryModelDao.java

+ 2 - 0
README.md

@ -11,6 +11,7 @@ Cosharp统一使用Maven管理进行版本库管理。
## TODO:
- Hos-parent还比较乱,需要进一步去除无用的依赖
- Hos-admin和Hos-rest还存在部分有版本号的依赖
- Hos-rest需要区分出来中心端还是前置端的服务,这样才能地部署时不出现问题。
# 代码结构
模块| 说明
@ -33,3 +34,4 @@ sdk | 开发包
---|---
控制管理系统 | hos-admin,hos-dfs
终端交换系统 | hos-arbiter,hos-broker,hos-rest

+ 29 - 0
hos-agent/src/main/resources/application.yml

@ -36,6 +36,35 @@ agent:
    name: jzkl
  proxy:
    port: 9090
  jcraft:
    host:
    port: 22
    user:
    password:
---
spring:
  profiles: test
  activemq:
      broker-url: tcp://172.19.103.58:61616
      user: admin
      password: admin
  data:
    mongodb:
      host: 172.19.103.58
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: log
      gridFsDatabase: dfs
agent:
  zbus:
    url: 172.19.103.58:9020
  tenant:
    name: jzkl
  proxy:
    port: 9090
  jcraft:
    host:
    port: 22

+ 4 - 1
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ServiceFlowService.java

@ -142,7 +142,7 @@ public class ServiceFlowService {
        try {
            ServiceFlow serviceFlow = getServiceFlow(msg);
            serviceFlow = this.save(serviceFlow);
            System.out.println("流程添加serviceFlowAdd开始!");
            boolean one = ServiceFlowConstant.JAVA.equals(serviceFlow.getFlowType());//java类型为采集任务
            if (one) {
                BrokerServer brokerServer = brokerServerService.get();
@ -349,6 +349,7 @@ public class ServiceFlowService {
                    return true;
                }
                System.out.println("post error,url: "+brokerServer.getURL() + path);
                return false;
            }
@ -359,6 +360,7 @@ public class ServiceFlowService {
                    logger.debug(body);
                    return true;
                }
                System.out.println("put error,url: "+brokerServer.getURL() + path);
                return false;
            }
@ -371,6 +373,7 @@ public class ServiceFlowService {
                    logger.debug(body);
                    return true;
                }
                System.out.println("delete error,url: "+brokerServer.getURL() + path);
                return false;
            }

+ 3 - 5
hos-arbiter/src/main/resources/application.yml

@ -31,25 +31,23 @@ spring:
  profiles: test
  data:
    mongodb:
      host: 172.19.103.67
      host: 172.19.103.42
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: runtime
  activemq:
    broker-url: tcp://172.19.103.67:61616
    broker-url: tcp://172.19.103.42:61616
    user: admin
    password: admin
arbiter:
  timer:
    period: 10000
  central:
    url: 172.19.103.57:9020
    url: 172.19.103.37:9020
  tenant:
    name: jkzl
  mycat:
    name: mycat172.19.103.67    ##mycat 服务器标识,规则:“mycat"+ 本机IP
---
spring:
  profiles: prod

+ 16 - 1
hos-broker/pom.xml

@ -21,6 +21,12 @@
        <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>
@ -37,7 +43,7 @@
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <!--<scope>provided</scope>-->
            <scope>provided</scope>
        </dependency>
        <dependency>
@ -132,6 +138,15 @@
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <!-- camel end -->
        <dependency>
            <groupId>com.yihu.hos</groupId>
            <artifactId>hos-core</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>

+ 2 - 0
hos-broker/src/main/java/com/yihu/hos/broker/common/constants/BrokerConstant.java

@ -4,6 +4,8 @@ package com.yihu.hos.broker.common.constants;
 * Created by Administrator on 2016/4/13.
 */
public class BrokerConstant {
    public static String CLASS_SUFFIX = ".class";
    public static String JAVA_SUFFIX = ".java";
    public static String CLASS = "class";
    public static String ROUTE = "route";

+ 29 - 4
hos-broker/src/main/java/com/yihu/hos/broker/controllers/ESBCamelController.java

@ -1,14 +1,17 @@
package com.yihu.hos.broker.controllers;
import com.yihu.hos.broker.services.camel.ESBCamelService;
import com.yihu.hos.broker.services.camel.SystemCamelContext;
import com.yihu.hos.web.framework.model.Result;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.camel.Route;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by lingfeng on 2016/8/4.
@ -73,4 +76,26 @@ public class ESBCamelController {
            @RequestBody() String msg) {
        return esbCamelService.onServiceFlowStop(msg);
    }
    @RequestMapping(value = "/serviceFlow/status", produces = "application/json;charset=UTF-8", method = RequestMethod.GET)
    @ApiOperation(value = "服务流程运行状态", produces = "application/json", notes = "查看服务流程的运行状态,运行中/停止")
    public String serviceFlowStatus(
            @ApiParam(name = "routeId", value = "routeId", required = true)
            @RequestParam String routeId) {
        return esbCamelService.getRouteStatus(routeId);
    }
        @RequestMapping(value = "/allFlow/status", produces = "application/json;charset=UTF-8", method = RequestMethod.GET)
    @ApiOperation(value = "所有服务流程运行状态", produces = "application/json", notes = "查看所有服务流程的运行状态,运行中/停止")
    public Map<String,String > allFlowStatus() {
        List<Route> routes = SystemCamelContext.getContext().getRoutes();
        Map<String,String > map = new HashMap<>();
        for (Route route : routes){
            System.out.println("routId: "+route.getId() + " : " +SystemCamelContext.getContext().getRouteStatus(route.getId()));
            map.put(route.getId(),SystemCamelContext.getContext().getRouteStatus(route.getId()).name());
        }
        return map;
    }
}

+ 30 - 22
hos-broker/src/main/java/com/yihu/hos/broker/services/camel/CamelCompiler.java

@ -4,7 +4,7 @@ import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import javax.tools.*;
import java.io.IOException;
import java.io.File;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.List;
@ -19,31 +19,39 @@ import java.util.List;
public class CamelCompiler {
    private static final Logger logger = LoggerFactory.getLogger(CamelCompiler.class);
    public static boolean compile(String sourcePath, String targetPath) throws IOException {
    public static boolean compile(String sourcePath, String targetPath) {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        // 建立DiagnosticCollector对象
        DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
        StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, Charset.forName("UTF-8"));
        // 建立源文件对象,根据java模板文件生成要加载的java类
        Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects(sourcePath);
        Iterable<String> options = Arrays.asList("-d", targetPath, "-sourcepath", targetPath);// 指定的路径一定要存在,javac不会自己创建文件夹
        JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, options, null, compilationUnits);
        // 编译源程序
        boolean success = task.call();
        fileManager.close();
        if (!success) {
            logger.error("compile source file failed.");
            //错误信息打印
            List diagnosticList = diagnostics.getDiagnostics();
            for (Object aDiagnosticList : diagnosticList) {
                System.out.println(aDiagnosticList.toString());
                logger.error(aDiagnosticList.toString());
        boolean success = false;
        try {
            // 建立DiagnosticCollector对象
            DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
            StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, Charset.forName("UTF-8"));
            // 建立源文件对象,根据java模板文件生成要加载的java类
            Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects(sourcePath);
            String classPath = CamelCompiler.class.getResource("/").getPath();
            String libPath = new File(classPath).getParent() + File.separator + "lib";//指定需要导入的包路径
            Iterable<String> options = Arrays.asList("-d", targetPath, "-sourcepath", targetPath, "-extdirs", libPath);// 指定的路径一定要存在,javac不会自己创建文件夹
            JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, options, null, compilationUnits);
            // 编译源程序
            success = task.call();
            fileManager.close();
            if (!success) {
                //错误信息打印
                List diagnosticList = diagnostics.getDiagnostics();
                System.out.println("编译失败:lib包路径:"+libPath);
                for (Object aDiagnosticList : diagnosticList) {
                    logger.error(aDiagnosticList.toString());
                }
            } else {
                System.out.println("编译成功" + sourcePath);
            }
        }else {
            System.out.println("编译成功"+sourcePath);
        }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return success;
    }

+ 50 - 21
hos-broker/src/main/java/com/yihu/hos/broker/services/camel/ESBCamelService.java

@ -12,6 +12,7 @@ import com.yihu.hos.web.framework.constant.ServiceFlowConstant;
import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.model.bo.ServiceFlow;
import org.apache.camel.Route;
import org.apache.camel.ServiceStatus;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.bson.Document;
@ -19,7 +20,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
@ -61,6 +61,7 @@ public class ESBCamelService {
    public Result onServiceFlowAdd(String msg) {
        try {
            System.out.println("hos-broker 流程添加开始,onServiceFlowModifyAdd");
            ServiceFlowValid serviceFlowValid = new ServiceFlowValid(msg).invoke();
            if (serviceFlowValid.is()) return Result.error("必要的入参数据不正确,请检查!");
@ -79,6 +80,7 @@ public class ESBCamelService {
                });
                if (!created[0]) {
                    System.out.println("onServiceFlowAdd ,生成processor文件失败,");
                    return Result.error("服务流程启动失败!");
                }
@ -91,6 +93,7 @@ public class ESBCamelService {
                    }
                });
                if (!created[0]) {
                    System.out.println("onServiceFlowAdd ,生成route文件失败,");
                    return Result.error("服务流程启动失败!");
                }
            } else {
@ -122,6 +125,7 @@ public class ESBCamelService {
     */
    public Result onServiceFlowModifyAdd(String msg) {
        try {
            System.out.println("hos-broker 流程修改开始,onServiceFlowModifyAdd");
            ServiceFlowValid serviceFlowValid = new ServiceFlowValid(msg).invoke();
            if (serviceFlowValid.is()) return Result.error("必要的入参数据不正确,请检查!");
            List<Route> routes = SystemCamelContext.getContext().getRoutes();
@ -207,15 +211,15 @@ public class ESBCamelService {
            if (serviceFlowValid.is()) return Result.error("必要的入参数据不正确,请检查!");
            ServiceFlow serviceFlow = serviceFlowValid.getServiceFlow();
            String routeCode = serviceFlow.getRouteCode();
            SystemCamelContext.getContext().stopRoute(routeCode);
            boolean b = SystemCamelContext.getContext().removeRoute(routeCode);
            ArrayList<ServiceFlow.HandleFile> handleFiles = serviceFlowValid.getHandleFiles();
            if (handleFiles != null) {
                for (ServiceFlow.HandleFile handleFile : handleFiles) {
                    String routeCode = serviceFlow.getRouteCode();
                    SystemCamelContext.getContext().stopRoute(routeCode);
                    SystemCamelContext.getContext().removeRoute(routeCode);
                    this.deleteClassFile(handleFile);
                    this.deleteServiceFlow(handleFile.getRouteCode());//删除mongo中serviceFlow信息
                    //TODO 删除mongodb中文件
                }
            }
            return Result.success("服务流程删除成功!");
@ -233,7 +237,6 @@ public class ESBCamelService {
            if (serviceFlowValid.is()) return Result.error("必要的入参数据不正确,请检查!");
            ServiceFlow serviceFlow = serviceFlowValid.getServiceFlow();
            String routeCode = serviceFlow.getRouteCode();
            ArrayList<ServiceFlow.HandleFile> handleFiles = serviceFlowValid.getHandleFiles();
            if ("java".equals(serviceFlowValid.getServiceFlow().getFlowType())) {
@ -249,7 +252,10 @@ public class ESBCamelService {
                });
                if (!created[0]) {
                    System.out.println("processor 生成失败!");
                    return Result.error("服务流程启动失败!");
                } else {
                    System.out.println("processor 生成成功!");
                }
                handleFiles.stream().filter(handleFile -> ServiceFlowConstant.FLOW_TYPE_ROUTE.equals(handleFile.getUsage())).forEach(handleFile -> {
@ -261,7 +267,10 @@ public class ESBCamelService {
                    }
                });
                if (!created[0]) {
                    System.out.println("route文件 生成失败!");
                    return Result.error("服务流程启动失败!");
                } else {
                    System.out.println("route文件 生成成功!");
                }
            } else {
                for (ServiceFlow.HandleFile handleFile : handleFiles) {
@ -325,6 +334,7 @@ public class ESBCamelService {
    private boolean generateClassFile(ServiceFlow.HandleFile handleFile) throws Exception {
        if (handleFile == null) {
            System.out.println("=====handleFile is null...");
            return false;
        }
        SystemCamelContext.putClassMapping(handleFile.getRouteCode(), handleFile.getPackageName(), handleFile.getUsage(), handleFile.getClassName());
@ -335,6 +345,7 @@ public class ESBCamelService {
        String sourcePath = ClassFileUtil.downFile(downUrl, resource, handleFile.getPackageName(), handleFile.getClassName(), ClassFileUtil.JAVA_FILE);
        if (sourcePath == null) {
            System.out.println("下载java文件失败,downUrl:" + downUrl);
            return false;
        }
@ -342,27 +353,36 @@ public class ESBCamelService {
        boolean succ = CamelCompiler.compile(sourcePath, resource.getPath());
        if (succ) {
            //编译成功后将class文件上传至mongodb;文件名为类名+ routeCode
            String packagePath = StringUtil.replaceStrAll(handleFile.getPackageName(), ".", "/");
            String classPath = resource.getPath() + packagePath + "/" + handleFile.getClassName() + ClassFileUtil.CLASS_FILE;
            //上传文件
            String fileName = handleFile.getClassName() + ClassFileUtil.CLASS_FILE;
            String uploadUrl = fsUrl + "/" + handleFile.getFilePath();
            ClassFileUtil.uploadFile(uploadUrl, new File(classPath), fileName);
//            String packagePath = StringUtil.replaceStrAll(handleFile.getPackageName(), ".", "/");
//            String classPath = this.getClass().getResource("/").getPath() + packagePath + "/" + handleFile.getClassName() + ClassFileUtil.CLASS_FILE;
//
//            //上传文件
//            String fileName = handleFile.getClassName() + ClassFileUtil.CLASS_FILE;
//            ClassFileUtil.upload(fsUrl, classPath);
        } else {
            System.out.println("编译失败,sourcePath:" + sourcePath);
        }
        return succ;
    }
    private void deleteClassFile(ServiceFlow.HandleFile handleFile) throws Exception {
        String packagePath = StringUtil.replaceStrAll(handleFile.getPackageName(), ".", "/");
        String classPath = ClassLoader.getSystemResource("").getPath() + "/" + packagePath + "/" + handleFile.getClassName() + ".class";
        ClassFileUtil.deleteClassfile(classPath);
    private void deleteClassFile(ServiceFlow.HandleFile handleFile) {
        try {
        String delJavaUrl = fsUrl + "/" + handleFile.getFilePath();
        ClassFileUtil.deleteFile(delJavaUrl);
            String packagePath = StringUtil.replaceStrAll(handleFile.getPackageName(), ".", "/");
            String classPath = this.getClass().getResource("/").getPath() + "/" + packagePath + "/" + handleFile.getClassName() + ".class";
            String javaPath = this.getClass().getResource("/").getPath() + "/" + packagePath + "/" + handleFile.getClassName() + ".java";
            Boolean aBoolean = ClassFileUtil.deleteClassfile(javaPath);
            Boolean bBoolean = ClassFileUtil.deleteClassfile(classPath);
            //删除mongodb中文件
            String delJavaUrl = fsUrl + "/" + handleFile.getFilePath();
            ClassFileUtil.deleteFile(delJavaUrl);
        // 完成
        logger.info("===================" + handleFile.getPackageName() + CoreConstant.DOT + handleFile.getClassName() + ".class 删除过程结束");
            // 完成
            logger.info("===================" + handleFile.getPackageName() + CoreConstant.DOT + handleFile.getClassName() + ".class 删除过程结束");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
@ -407,6 +427,15 @@ public class ESBCamelService {
    }
    public String getRouteStatus(String routeId){
        ServiceStatus routeStatus = SystemCamelContext.getContext().getRouteStatus(routeId);
        if (routeStatus!=null){
            return routeStatus.name();
        }else {
            return null;
        }
    }
    private class ServiceFlowValid {
        private boolean myResult;
        private String msg;

+ 369 - 369
hos-broker/src/main/java/com/yihu/hos/broker/util/SigarUtil.java

@ -1,407 +1,407 @@
package com.yihu.hos.broker.util;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import org.hyperic.sigar.*;
import java.net.InetAddress;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.*;
/**
 * sigar 服务器硬件指标 工具类
 *
 * @author HZY
 * @vsrsion 1.0
 * Created at 2016/10/10.
 */
public class SigarUtil {
    
    static private final Logger logger = LoggerFactory.getLogger(SigarUtil.class);
    public final static Sigar sigar = initSigar();
    private static Sigar initSigar() {
        try {
            //此处只为得到依赖库文件的目录,可根据实际项目自定义
            String sigarLibPath = SigarUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath() ;
            String path = System.getProperty("java.library.path");
            //为防止java.library.path重复加,此处判断了一下
            if (!path.contains(sigarLibPath)) {
                if (isOSWin()) {
                    path += ";" + sigarLibPath;
                } else {
                    path += ":" + sigarLibPath;
                }
                System.setProperty("java.library.path", path);
            }
            return new Sigar();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    package com.yihu.hos.broker.util;
    public URL getUrl() {
        return this.getClass().getResource("/");
    }
    import com.yihu.hos.core.log.Logger;
    import com.yihu.hos.core.log.LoggerFactory;
    import org.hyperic.sigar.*;
//    public static void main(String[] args) {
//        DecimalFormat df = new DecimalFormat("#0.00");
//        double d = 0;
//        String f = df.format(d);
//        double e = Double.parseDouble(String.format("%.2f", d));
//        logger.info(e);
//    }
    import java.net.InetAddress;
    import java.net.URL;
    import java.net.UnknownHostException;
    import java.util.*;
    /**
     * 是否是windows系统
     * sigar 服务器硬件指标 工具类
     *
     * @return
     * @author HZY
     * @vsrsion 1.0
     * Created at 2016/10/10.
     */
    public static boolean isOSWin() {//OS 版本判断
        String OS = System.getProperty("os.name").toLowerCase();
        if (OS.indexOf("win") >= 0) {
            return true;
        } else return false;
    }
    public class SigarUtil {
        static private final Logger logger = LoggerFactory.getLogger(SigarUtil.class);
        public final static Sigar sigar = initSigar();
        private static Sigar initSigar() {
            try {
                //此处只为得到依赖库文件的目录,可根据实际项目自定义
                String sigarLibPath = SigarUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath() ;
                String path = System.getProperty("java.library.path");
                //为防止java.library.path重复加,此处判断了一下
                if (!path.contains(sigarLibPath)) {
                    if (isOSWin()) {
                        path += ";" + sigarLibPath;
                    } else {
                        path += ":" + sigarLibPath;
                    }
                    System.setProperty("java.library.path", path);
                }
                return new Sigar();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    /* ==================================================   以下是打印测试   ========================================================================== */
        public URL getUrl() {
            return this.getClass().getResource("/");
        }
    /**
     * 系统信息  jvm等
     *
     * @throws UnknownHostException
     */
    //    public static void main(String[] args) {
    //        DecimalFormat df = new DecimalFormat("#0.00");
    //        double d = 0;
    //        String f = df.format(d);
    //        double e = Double.parseDouble(String.format("%.2f", d));
    //        logger.info(e);
    //    }
        /**
         * 是否是windows系统
         *
         * @return
         */
        public static boolean isOSWin() {//OS 版本判断
            String OS = System.getProperty("os.name").toLowerCase();
            if (OS.indexOf("win") >= 0) {
                return true;
            } else return false;
        }
    public static String getHostName(){
        try {
            NetInfo netInfo = sigar.getNetInfo();
            String hostName = netInfo.getHostName();
            return hostName;
        } catch (SigarException e) {
            e.printStackTrace();
        /* ==================================================   以下是打印测试   ========================================================================== */
        /**
         * 系统信息  jvm等
         *
         * @throws UnknownHostException
         */
        public static String getHostName(){
            try {
                NetInfo netInfo = sigar.getNetInfo();
                String hostName = netInfo.getHostName();
                return hostName;
            } catch (SigarException e) {
                e.printStackTrace();
            }
            return "";
        }
        return "";
    }
    public static String getHost(){
        try {
            NetInterfaceConfig netInterfaceConfig = sigar.getNetInterfaceConfig(null);
            String ip = netInterfaceConfig.getAddress();
            return ip;
        } catch (SigarException e) {
            e.printStackTrace();
        public static String getHost(){
            try {
                NetInterfaceConfig netInterfaceConfig = sigar.getNetInterfaceConfig(null);
                String ip = netInterfaceConfig.getAddress();
                return ip;
            } catch (SigarException e) {
                e.printStackTrace();
            }
            return "unknowHost";
        }
        return "unknowHost";
    }
    private static void property() throws UnknownHostException {
        Runtime r = Runtime.getRuntime();
        Properties props = System.getProperties();
        InetAddress addr;
        addr = InetAddress.getLocalHost();
        String ip = addr.getHostAddress();
        Map<String, String> map = System.getenv();
        String userName = map.get("USERNAME");// 获取用户名
        String computerName = map.get("COMPUTERNAME");// 获取计算机名
        String userDomain = map.get("USERDOMAIN");// 获取计算机域名
        logger.info("用户名:    " + userName);
        logger.info("计算机名:    " + computerName);
        logger.info("计算机域名:    " + userDomain);
        logger.info("本地ip地址:    " + ip);
        logger.info("本地主机名:    " + addr.getHostName());
        logger.info("JVM可以使用的总内存:    " + r.totalMemory());
        logger.info("JVM可以使用的剩余内存:    " + r.freeMemory());
        logger.info("JVM可以使用的处理器个数:    " + r.availableProcessors());
        logger.info("Java的运行环境版本:    " + props.getProperty("java.version"));
        logger.info("Java的运行环境供应商:    " + props.getProperty("java.vendor"));
        logger.info("Java供应商的URL:    " + props.getProperty("java.vendor.url"));
        logger.info("Java的安装路径:    " + props.getProperty("java.home"));
        logger.info("Java的虚拟机规范版本:    " + props.getProperty("java.vm.specification.version"));
        logger.info("Java的虚拟机规范供应商:    " + props.getProperty("java.vm.specification.vendor"));
        logger.info("Java的虚拟机规范名称:    " + props.getProperty("java.vm.specification.name"));
        logger.info("Java的虚拟机实现版本:    " + props.getProperty("java.vm.version"));
        logger.info("Java的虚拟机实现供应商:    " + props.getProperty("java.vm.vendor"));
        logger.info("Java的虚拟机实现名称:    " + props.getProperty("java.vm.name"));
        logger.info("Java运行时环境规范版本:    " + props.getProperty("java.specification.version"));
        logger.info("Java运行时环境规范供应商:    " + props.getProperty("java.specification.vender"));
        logger.info("Java运行时环境规范名称:    " + props.getProperty("java.specification.name"));
        logger.info("Java的类格式版本号:    " + props.getProperty("java.class.version"));
        logger.info("Java的类路径:    " + props.getProperty("java.class.path"));
        logger.info("加载库时搜索的路径列表:    " + props.getProperty("java.library.path"));
        logger.info("默认的临时文件路径:    " + props.getProperty("java.io.tmpdir"));
        logger.info("一个或多个扩展目录的路径:    " + props.getProperty("java.ext.dirs"));
        logger.info("操作系统的名称:    " + props.getProperty("os.name"));
        logger.info("操作系统的构架:    " + props.getProperty("os.arch"));
        logger.info("操作系统的版本:    " + props.getProperty("os.version"));
        logger.info("文件分隔符:    " + props.getProperty("file.separator"));
        logger.info("路径分隔符:    " + props.getProperty("path.separator"));
        logger.info("行分隔符:    " + props.getProperty("line.separator"));
        logger.info("用户的账户名称:    " + props.getProperty("user.name"));
        logger.info("用户的主目录:    " + props.getProperty("user.home"));
        logger.info("用户的当前工作目录:    " + props.getProperty("user.dir"));
    }
        private static void property() throws UnknownHostException {
            Runtime r = Runtime.getRuntime();
            Properties props = System.getProperties();
            InetAddress addr;
            addr = InetAddress.getLocalHost();
            String ip = addr.getHostAddress();
            Map<String, String> map = System.getenv();
            String userName = map.get("USERNAME");// 获取用户名
            String computerName = map.get("COMPUTERNAME");// 获取计算机名
            String userDomain = map.get("USERDOMAIN");// 获取计算机域名
            logger.info("用户名:    " + userName);
            logger.info("计算机名:    " + computerName);
            logger.info("计算机域名:    " + userDomain);
            logger.info("本地ip地址:    " + ip);
            logger.info("本地主机名:    " + addr.getHostName());
            logger.info("JVM可以使用的总内存:    " + r.totalMemory());
            logger.info("JVM可以使用的剩余内存:    " + r.freeMemory());
            logger.info("JVM可以使用的处理器个数:    " + r.availableProcessors());
            logger.info("Java的运行环境版本:    " + props.getProperty("java.version"));
            logger.info("Java的运行环境供应商:    " + props.getProperty("java.vendor"));
            logger.info("Java供应商的URL:    " + props.getProperty("java.vendor.url"));
            logger.info("Java的安装路径:    " + props.getProperty("java.home"));
            logger.info("Java的虚拟机规范版本:    " + props.getProperty("java.vm.specification.version"));
            logger.info("Java的虚拟机规范供应商:    " + props.getProperty("java.vm.specification.vendor"));
            logger.info("Java的虚拟机规范名称:    " + props.getProperty("java.vm.specification.name"));
            logger.info("Java的虚拟机实现版本:    " + props.getProperty("java.vm.version"));
            logger.info("Java的虚拟机实现供应商:    " + props.getProperty("java.vm.vendor"));
            logger.info("Java的虚拟机实现名称:    " + props.getProperty("java.vm.name"));
            logger.info("Java运行时环境规范版本:    " + props.getProperty("java.specification.version"));
            logger.info("Java运行时环境规范供应商:    " + props.getProperty("java.specification.vender"));
            logger.info("Java运行时环境规范名称:    " + props.getProperty("java.specification.name"));
            logger.info("Java的类格式版本号:    " + props.getProperty("java.class.version"));
            logger.info("Java的类路径:    " + props.getProperty("java.class.path"));
            logger.info("加载库时搜索的路径列表:    " + props.getProperty("java.library.path"));
            logger.info("默认的临时文件路径:    " + props.getProperty("java.io.tmpdir"));
            logger.info("一个或多个扩展目录的路径:    " + props.getProperty("java.ext.dirs"));
            logger.info("操作系统的名称:    " + props.getProperty("os.name"));
            logger.info("操作系统的构架:    " + props.getProperty("os.arch"));
            logger.info("操作系统的版本:    " + props.getProperty("os.version"));
            logger.info("文件分隔符:    " + props.getProperty("file.separator"));
            logger.info("路径分隔符:    " + props.getProperty("path.separator"));
            logger.info("行分隔符:    " + props.getProperty("line.separator"));
            logger.info("用户的账户名称:    " + props.getProperty("user.name"));
            logger.info("用户的主目录:    " + props.getProperty("user.home"));
            logger.info("用户的当前工作目录:    " + props.getProperty("user.dir"));
        }
    /**
     * 内存信息
     *
     * @return 返回单位 :G
     * @throws SigarException
     */
    public static Map<String, Object> memory() throws SigarException {
        Mem mem = sigar.getMem();
        Swap swap = sigar.getSwap();
        Map<String, Object> memory = new HashMap<>();
        memory.put("total", getDouble((double)mem.getTotal() / 1024L / 1024L / 1024L));
        memory.put("used",  getDouble((double)mem.getUsed() / 1024L / 1024L / 1024L));
        memory.put("free",  getDouble((double)mem.getFree() / 1024L / 1024L / 1024L));
        memory.put("freePerc", getDouble(mem.getFreePercent()));
        memory.put("usedPerc", getDouble(mem.getUsedPercent()));
        //交换区
        memory.put("swapTotal", getDouble((double)swap.getTotal() / 1024L / 1024L / 1024L));
        memory.put("swapUsed",  getDouble((double)swap.getUsed() / 1024L / 1024L / 1024L));
        memory.put("swapFree", getDouble((double) swap.getFree() / 1024L / 1024L / 1024L));
        return memory;
    }
        /**
         * 内存信息
         *
         * @return 返回单位 :G
         * @throws SigarException
         */
        public static Map<String, Object> memory() throws SigarException {
            Mem mem = sigar.getMem();
            Swap swap = sigar.getSwap();
            Map<String, Object> memory = new HashMap<>();
            memory.put("total", getDouble((double)mem.getTotal() / 1024L / 1024L / 1024L));
            memory.put("used",  getDouble((double)mem.getUsed() / 1024L / 1024L / 1024L));
            memory.put("free",  getDouble((double)mem.getFree() / 1024L / 1024L / 1024L));
            memory.put("freePerc", getDouble(mem.getFreePercent()));
            memory.put("usedPerc", getDouble(mem.getUsedPercent()));
            //交换区
            memory.put("swapTotal", getDouble((double)swap.getTotal() / 1024L / 1024L / 1024L));
            memory.put("swapUsed",  getDouble((double)swap.getUsed() / 1024L / 1024L / 1024L));
            memory.put("swapFree", getDouble((double) swap.getFree() / 1024L / 1024L / 1024L));
            return memory;
        }
    /**
     * cpu使用情况
     *
     * @return
     * @throws SigarException
     */
    public static Map<String, Object> cpu()  {
        Map<String, Object> cpuMap = new HashMap<>();
        try {
            Cpu timer = sigar.getCpu();
            CpuInfo infos[] = sigar.getCpuInfoList();
            Cpu cpu = sigar.getCpu();
            ThreadCpu threadCpu = sigar.getThreadCpu();
            CpuInfo[] cpuInfoList = sigar.getCpuInfoList();
            CpuPerc cpuPerc = sigar.getCpuPerc();
            CpuInfo info1 = infos[0];
            //cpu信息
            cpuMap.put("quantity", infos.length);
            cpuMap.put("model", info1.getModel());// CPU型号
            cpuMap.put("totalCores", info1.getTotalCores());// CPU逻辑个数
            cpuMap.put("totalSockets", info1.getTotalSockets());// CPU物理个数
            cpuMap.put("Mhz", info1.getMhz());
            cpuMap.put("cores",info1.getCoresPerSocket());//核数
            long cacheSize = info1.getCacheSize();
            if (cacheSize != Sigar.FIELD_NOTIMPL) {
                cpuMap.put("cache",info1.getCacheSize());//核数
        /**
         * cpu使用情况
         *
         * @return
         * @throws SigarException
         */
        public static Map<String, Object> cpu()  {
            Map<String, Object> cpuMap = new HashMap<>();
            try {
                Cpu timer = sigar.getCpu();
                CpuInfo infos[] = sigar.getCpuInfoList();
                Cpu cpu = sigar.getCpu();
                ThreadCpu threadCpu = sigar.getThreadCpu();
                CpuInfo[] cpuInfoList = sigar.getCpuInfoList();
                CpuPerc cpuPerc = sigar.getCpuPerc();
                CpuInfo info1 = infos[0];
                //cpu信息
                cpuMap.put("quantity", infos.length);
                cpuMap.put("model", info1.getModel());// CPU型号
                cpuMap.put("totalCores", info1.getTotalCores());// CPU逻辑个数
                cpuMap.put("totalSockets", info1.getTotalSockets());// CPU物理个数
                cpuMap.put("Mhz", info1.getMhz());
                cpuMap.put("cores",info1.getCoresPerSocket());//核数
                long cacheSize = info1.getCacheSize();
                if (cacheSize != Sigar.FIELD_NOTIMPL) {
                    cpuMap.put("cache",info1.getCacheSize());//核数
                }
                //cpu使用率
                cpuMap.put("timer",timer.getUser());//核数
                cpuMap.put("totalPerc", getDouble(cpuPerc.getCombined() * 100));
                cpuMap.put("userPerc", getDouble(cpuPerc.getUser() * 100));
                cpuMap.put("sysPerc", getDouble(cpuPerc.getSys() * 100));
                cpuMap.put("wait", getDouble(cpuPerc.getWait() * 100));
                cpuMap.put("nice", getDouble(cpuPerc.getNice() * 100));
                cpuMap.put("freePerc", getDouble(cpuPerc.getIdle() * 100));
            } catch (SigarException e){
                e.printStackTrace();
            }
            //cpu使用率
            cpuMap.put("timer",timer.getUser());//核数
            cpuMap.put("totalPerc", getDouble(cpuPerc.getCombined() * 100));
            cpuMap.put("userPerc", getDouble(cpuPerc.getUser() * 100));
            cpuMap.put("sysPerc", getDouble(cpuPerc.getSys() * 100));
            cpuMap.put("wait", getDouble(cpuPerc.getWait() * 100));
            cpuMap.put("nice", getDouble(cpuPerc.getNice() * 100));
            cpuMap.put("freePerc", getDouble(cpuPerc.getIdle() * 100));
        } catch (SigarException e){
            e.printStackTrace();
            return cpuMap;
        }
        return cpuMap;
    }
    /**
     * 操作系统信息
     */
    private static void os() {
        OperatingSystem OS = OperatingSystem.getInstance();
        // 操作系统内核类型如: 386、486、586等x86
        logger.info("操作系统:    " + OS.getArch());
        logger.info("操作系统CpuEndian():    " + OS.getCpuEndian());//
        logger.info("操作系统DataModel():    " + OS.getDataModel());//
        // 系统描述
        logger.info("操作系统的描述:    " + OS.getDescription());
        // 操作系统类型
        // logger.info("OS.getName():    " + OS.getName());
        // logger.info("OS.getPatchLevel():    " + OS.getPatchLevel());//
        // 操作系统的卖主
        logger.info("操作系统的卖主:    " + OS.getVendor());
        // 卖主名称
        logger.info("操作系统的卖主名:    " + OS.getVendorCodeName());
        // 操作系统名称
        logger.info("操作系统名称:    " + OS.getVendorName());
        // 操作系统卖主类型
        logger.info("操作系统卖主类型:    " + OS.getVendorVersion());
        // 操作系统的版本号
        logger.info("操作系统的版本号:    " + OS.getVersion());
    }
        /**
         * 操作系统信息
         */
        private static void os() {
            OperatingSystem OS = OperatingSystem.getInstance();
            // 操作系统内核类型如: 386、486、586等x86
            logger.info("操作系统:    " + OS.getArch());
            logger.info("操作系统CpuEndian():    " + OS.getCpuEndian());//
            logger.info("操作系统DataModel():    " + OS.getDataModel());//
            // 系统描述
            logger.info("操作系统的描述:    " + OS.getDescription());
            // 操作系统类型
            // logger.info("OS.getName():    " + OS.getName());
            // logger.info("OS.getPatchLevel():    " + OS.getPatchLevel());//
            // 操作系统的卖主
            logger.info("操作系统的卖主:    " + OS.getVendor());
            // 卖主名称
            logger.info("操作系统的卖主名:    " + OS.getVendorCodeName());
            // 操作系统名称
            logger.info("操作系统名称:    " + OS.getVendorName());
            // 操作系统卖主类型
            logger.info("操作系统卖主类型:    " + OS.getVendorVersion());
            // 操作系统的版本号
            logger.info("操作系统的版本号:    " + OS.getVersion());
        }
    private static void who() throws SigarException {
        Who who[] = sigar.getWhoList();
        if (who != null && who.length > 0) {
            for (int i = 0; i < who.length; i++) {
                // logger.info("当前系统进程表中的用户名" + String.valueOf(i));
                Who _who = who[i];
                logger.info("用户控制台:    " + _who.getDevice());
                logger.info("用户host:    " + _who.getHost());
                // logger.info("getTime():    " + _who.getTime());
                // 当前系统进程表中的用户名
                logger.info("当前系统进程表中的用户名:    " + _who.getUser());
        private static void who() throws SigarException {
            Who who[] = sigar.getWhoList();
            if (who != null && who.length > 0) {
                for (int i = 0; i < who.length; i++) {
                    // logger.info("当前系统进程表中的用户名" + String.valueOf(i));
                    Who _who = who[i];
                    logger.info("用户控制台:    " + _who.getDevice());
                    logger.info("用户host:    " + _who.getHost());
                    // logger.info("getTime():    " + _who.getTime());
                    // 当前系统进程表中的用户名
                    logger.info("当前系统进程表中的用户名:    " + _who.getUser());
                }
            }
        }
    }
    /**
     * 硬盘信息
     */
    public static List<Map<String, Object>> file() {
        List<Map<String, Object>> files = new ArrayList<>();
        Map<String, Object> fileMap = null;
        FileSystem fslist[] = new FileSystem[0];
        try {
            fslist = sigar.getFileSystemList();
            for (int i = 0; i < fslist.length; i++) {
                FileSystem fs = fslist[i];
                fileMap = new HashMap<>();
                switch (fs.getType()) {
                    case 0: // TYPE_UNKNOWN :未知
                        break;
                    case 1: // TYPE_NONE
                        break;
                    case 2: // TYPE_LOCAL_DISK : 本地硬盘
                        FileSystemUsage usage = sigar.getFileSystemUsage(fs.getDirName());
                        fileMap.put("devName", fs.getDevName());
                        fileMap.put("dirName", fs.getDirName());
                        fileMap.put("flags", fs.getFlags());
                        fileMap.put("sysTypeName", fs.getSysTypeName());
                        fileMap.put("typeName", fs.getTypeName());
                        fileMap.put("type", fs.getType());
                        fileMap.put("total", usage.getTotal() / 1024L / 1024L);
                        fileMap.put("free", usage.getFree() / 1024L / 1024L);
                        fileMap.put("aVall", usage.getAvail() / 1024L / 1024L);//可用大小
                        fileMap.put("used", usage.getUsed() / 1024L / 1024L);
                        fileMap.put("usePercent", usage.getUsePercent() * 100D);
                        fileMap.put("diskRead", usage.getDiskReads());
                        fileMap.put("diskWrite", usage.getDiskWrites());
                        files.add(fileMap);
                        break;
                    case 3:// TYPE_NETWORK :网络
                        break;
                    case 4:// TYPE_RAM_DISK :闪存
                        break;
                    case 5:// TYPE_CDROM :光驱
                        break;
                    case 6:// TYPE_SWAP :页面交换
                        break;
                }
        /**
         * 硬盘信息
         */
        public static List<Map<String, Object>> file() {
            List<Map<String, Object>> files = new ArrayList<>();
            Map<String, Object> fileMap = null;
            FileSystem fslist[] = new FileSystem[0];
            try {
                fslist = sigar.getFileSystemList();
                for (int i = 0; i < fslist.length; i++) {
                    FileSystem fs = fslist[i];
                    fileMap = new HashMap<>();
                    switch (fs.getType()) {
                        case 0: // TYPE_UNKNOWN :未知
                            break;
                        case 1: // TYPE_NONE
                            break;
                        case 2: // TYPE_LOCAL_DISK : 本地硬盘
                            FileSystemUsage usage = sigar.getFileSystemUsage(fs.getDirName());
                            fileMap.put("devName", fs.getDevName());
                            fileMap.put("dirName", fs.getDirName());
                            fileMap.put("flags", fs.getFlags());
                            fileMap.put("sysTypeName", fs.getSysTypeName());
                            fileMap.put("typeName", fs.getTypeName());
                            fileMap.put("type", fs.getType());
                            fileMap.put("total", usage.getTotal() / 1024L / 1024L);
                            fileMap.put("free", usage.getFree() / 1024L / 1024L);
                            fileMap.put("aVall", usage.getAvail() / 1024L / 1024L);//可用大小
                            fileMap.put("used", usage.getUsed() / 1024L / 1024L);
                            fileMap.put("usePercent", usage.getUsePercent() * 100D);
                            fileMap.put("diskRead", usage.getDiskReads());
                            fileMap.put("diskWrite", usage.getDiskWrites());
                            files.add(fileMap);
                            break;
                        case 3:// TYPE_NETWORK :网络
                            break;
                        case 4:// TYPE_RAM_DISK :闪存
                            break;
                        case 5:// TYPE_CDROM :光驱
                            break;
                        case 6:// TYPE_SWAP :页面交换
                            break;
                    }
                }
            } catch (SigarException e) {
                e.printStackTrace();
            }
        } catch (SigarException e) {
            e.printStackTrace();
            return files;
        }
        return files;
    }
    /**
     * 网络信息
     *
     * @throws Exception
     */
    public static Map<String, Object> net() {
        Map<String, Object> netMap = new HashMap<>();
        NetInterfaceConfig netConfig = null;
        try {
            netConfig = sigar.getNetInterfaceConfig(null);
            NetInterfaceStat netIfStat = sigar.getNetInterfaceStat(netConfig.getName());
            Map<String, Object> bps = populate(netConfig.getName());//bps
            netMap.put("name", netConfig.getName());
            netMap.put("address", netConfig.getAddress());
            netMap.put("mac", netConfig.getHwaddr());
            netMap.put("type", netConfig.getType());
            netMap.put("broadcast", netConfig.getBroadcast());
            netMap.put("netmask", netConfig.getNetmask());
            netMap.put("rxPackets", netIfStat.getRxPackets());
            netMap.put("txPackets", netIfStat.getTxPackets());
            netMap.put("rxBytes", netIfStat.getRxBytes());
            netMap.put("txBytes", netIfStat.getTxBytes());
            netMap.put("txPackets", netIfStat.getTxPackets());
            netMap.put("txbps", bps.get("txbps"));
            netMap.put("rxbps", bps.get("rxbps"));
        } catch (SigarException e) {
            e.printStackTrace();
        /**
         * 网络信息
         *
         * @throws Exception
         */
        public static Map<String, Object> net() {
            Map<String, Object> netMap = new HashMap<>();
            NetInterfaceConfig netConfig = null;
            try {
                netConfig = sigar.getNetInterfaceConfig(null);
                NetInterfaceStat netIfStat = sigar.getNetInterfaceStat(netConfig.getName());
                Map<String, Object> bps = populate(netConfig.getName());//bps
                netMap.put("name", netConfig.getName());
                netMap.put("address", netConfig.getAddress());
                netMap.put("mac", netConfig.getHwaddr());
                netMap.put("type", netConfig.getType());
                netMap.put("broadcast", netConfig.getBroadcast());
                netMap.put("netmask", netConfig.getNetmask());
                netMap.put("rxPackets", netIfStat.getRxPackets());
                netMap.put("txPackets", netIfStat.getTxPackets());
                netMap.put("rxBytes", netIfStat.getRxBytes());
                netMap.put("txBytes", netIfStat.getTxBytes());
                netMap.put("txPackets", netIfStat.getTxPackets());
                netMap.put("txbps", bps.get("txbps"));
                netMap.put("rxbps", bps.get("rxbps"));
            } catch (SigarException e) {
                e.printStackTrace();
            }
            return netMap;
        }
        return netMap;
    }
    private static void ethernet() throws SigarException {
        String[] ifaces = sigar.getNetInterfaceList();
        for (int i = 0; i < ifaces.length; i++) {
            NetInterfaceConfig cfg = sigar.getNetInterfaceConfig(ifaces[i]);
            if (NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress()) || (cfg.getFlags() & NetFlags.IFF_LOOPBACK) != 0
                    || NetFlags.NULL_HWADDR.equals(cfg.getHwaddr())
                    || NetFlags.ANY_ADDR.equals(cfg.getAddress())) {
                continue;
            }
            if ((cfg.getFlags() & 1L) <= 0L) {
                System.out.println("!IFF_UP...skipping getNetInterfaceStat");
                continue;
            }
            logger.info(cfg.getName() + "IP地址:" + cfg.getAddress());// IP地址
            logger.info(cfg.getName() + "网关广播地址:" + cfg.getBroadcast());// 网关广播地址
            logger.info(cfg.getName() + "网卡MAC地址:" + cfg.getHwaddr());// 网卡MAC地址
            logger.info(cfg.getName() + "子网掩码:" + cfg.getNetmask());// 子网掩码
            logger.info(cfg.getName() + "网卡描述信息:" + cfg.getDescription());// 网卡描述信息
            logger.info(cfg.getName() + "网卡类型" + cfg.getType());//
        private static void ethernet() throws SigarException {
            String[] ifaces = sigar.getNetInterfaceList();
            for (int i = 0; i < ifaces.length; i++) {
                NetInterfaceConfig cfg = sigar.getNetInterfaceConfig(ifaces[i]);
                if (NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress()) || (cfg.getFlags() & NetFlags.IFF_LOOPBACK) != 0
                        || NetFlags.NULL_HWADDR.equals(cfg.getHwaddr())
                        || NetFlags.ANY_ADDR.equals(cfg.getAddress())) {
                    continue;
                }
                if ((cfg.getFlags() & 1L) <= 0L) {
                    System.out.println("!IFF_UP...skipping getNetInterfaceStat");
                    continue;
                }
                logger.info(cfg.getName() + "IP地址:" + cfg.getAddress());// IP地址
                logger.info(cfg.getName() + "网关广播地址:" + cfg.getBroadcast());// 网关广播地址
                logger.info(cfg.getName() + "网卡MAC地址:" + cfg.getHwaddr());// 网卡MAC地址
                logger.info(cfg.getName() + "子网掩码:" + cfg.getNetmask());// 子网掩码
                logger.info(cfg.getName() + "网卡描述信息:" + cfg.getDescription());// 网卡描述信息
                logger.info(cfg.getName() + "网卡类型" + cfg.getType());//
            }
        }
    }
    /**
     * 網絡傳輸速率 bps
     *
     * @param name
     * @throws SigarException
     */
    public static Map<String, Object> populate(String name)
            throws SigarException {
        Map<String, Object> bps = new HashMap<>();
        try {
            long start = System.currentTimeMillis();
            NetInterfaceStat statStart = sigar.getNetInterfaceStat(name);
            long rxBytesStart = statStart.getRxBytes();
            long txBytesStart = statStart.getTxBytes();
            Thread.sleep(1000);
            long end = System.currentTimeMillis();
            NetInterfaceStat statEnd = sigar.getNetInterfaceStat(name);
            long rxBytesEnd = statEnd.getRxBytes();
            long txBytesEnd = statEnd.getTxBytes();
            long rxbps = ((rxBytesEnd - rxBytesStart) * 8 / 1024) / ((end - start) / 1000);
            long txbps = ((txBytesEnd - txBytesStart) * 8 / 1024) / ((end - start) / 1000);
            bps.put("rxbps", rxbps);
            bps.put("txbps", txbps);
            logger.info("#######rxbps: " + rxbps + " txbps: " + txbps);
        } catch (SigarException e) {
        } catch (Exception e) {
        /**
         * 網絡傳輸速率 bps
         *
         * @param name
         * @throws SigarException
         */
        public static Map<String, Object> populate(String name)
                throws SigarException {
            Map<String, Object> bps = new HashMap<>();
            try {
                long start = System.currentTimeMillis();
                NetInterfaceStat statStart = sigar.getNetInterfaceStat(name);
                long rxBytesStart = statStart.getRxBytes();
                long txBytesStart = statStart.getTxBytes();
                Thread.sleep(1000);
                long end = System.currentTimeMillis();
                NetInterfaceStat statEnd = sigar.getNetInterfaceStat(name);
                long rxBytesEnd = statEnd.getRxBytes();
                long txBytesEnd = statEnd.getTxBytes();
                long rxbps = ((rxBytesEnd - rxBytesStart) * 8 / 1024) / ((end - start) / 1000);
                long txbps = ((txBytesEnd - txBytesStart) * 8 / 1024) / ((end - start) / 1000);
                bps.put("rxbps", rxbps);
                bps.put("txbps", txbps);
                logger.info("#######rxbps: " + rxbps + " txbps: " + txbps);
            } catch (SigarException e) {
            } catch (Exception e) {
            }
            return bps;
        }
        return bps;
    }
    /**
     * 获取两位小数的double值
     * @param value
     * @return
     */
    public static double getDouble(double value){
        String total = String.format("%.2f", value );
        return Double.parseDouble(total);
    }
        /**
         * 获取两位小数的double值
         * @param value
         * @return
         */
        public static double getDouble(double value){
            String total = String.format("%.2f", value );
            return Double.parseDouble(total);
        }
}
    }

+ 8 - 9
hos-broker/src/main/resources/application.yml

@ -65,12 +65,12 @@ hos:
spring:
  profiles: test
  activemq:
      broker-url: tcp://172.19.103.67:61616
      broker-url: tcp://172.19.103.42:61616
      user: admin
      password: admin
  data:
    mongodb:
      host: 172.19.103.67
      host: 172.19.103.42
      port: 27017
      username: esb
      password: esb
@ -85,27 +85,26 @@ eureka:
    serviceUrl:
      defaultZone: http://192.168.1.221:8761/eureka/
log:
  path: /usr/local/esb/logs/broker
  path: /usr/local/logs/logback/broker
  level: info
hos:
  filesystem:
    url: http://172.19.103.57:9010/dfs/file
    url: http://172.19.103.37:9010/dfs/file
  arbiter:
    enable: true
    url: http://172.19.103.67:10135
    url: http://172.19.103.37:10135
  rest:
    url: http://172.19.103.67:8088
    url: http://172.19.103.37:8088
  timer:
      period: 10000
  tenant:
    name: jkzl
  mycat:
    path: /opt/mycat/   ##mycat的安装目录
    path: /usr/local/mycat/   ##mycat的安装目录
  #jcraft shell操作
  jcraft:
    host: 172.19.103.70
    host: 172.19.103.37
    port: 22
    user: root
    password: ceshi

+ 36 - 6
hos-camel2/pom.xml

@ -85,12 +85,6 @@
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.camel/camel-spring-ws-starter -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-ws-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-cxf</artifactId>
@ -100,6 +94,42 @@
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.1.10</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.hos</groupId>
            <artifactId>hos-web-framework</artifactId>
            <version>${hos-version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-data-jpa</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.yihu.core</groupId>
            <artifactId>api-dict</artifactId>
            <version>1.6.0</version>
        </dependency>
        <dependency>
            <groupId>com.yihu.core</groupId>
            <artifactId>core-rpc</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.yihu.core</groupId>
            <artifactId>api-config</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.yihu.core</groupId>
            <artifactId>core-db</artifactId>
            <version>1.3.0</version>
        </dependency>
    </dependencies>

+ 4 - 0
hos-camel2/src/main/java/camel/api1/route/ApiRouteBulider.java

@ -9,5 +9,9 @@ public class ApiRouteBulider extends RouteBuilder {
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v7").routeId("camel/api1")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
        from("jetty:http://0.0.0.0:9097/rest").routeId("restTest")
                .to("restlet:http://192.168.1.221:10000/api/v1.0/admin/doctors/admin/13?autoCloseStream=true");
    }
}

+ 1 - 1
hos-camel2/src/main/java/camel/api7/processor/TestClient.java

@ -11,7 +11,7 @@ public class TestClient {
    public static void main(String args[]) throws Exception{
                 JaxWsDynamicClientFactory dcf =JaxWsDynamicClientFactory.newInstance();
                 org.apache.cxf.endpoint.Client client =dcf.createClient("http://127.0.0.1:8001/esb/ws?wsdl");
                 org.apache.cxf.endpoint.Client client =dcf.createClient("http://192.168.131.101:3333/soap/ws?wsdl");
                 //getUser 为接口中定义的方法名称  张三为传递的参数   返回一个Object数组
                 Object[] objects=client.invoke("test");
                 //输出调用结果

+ 13 - 1
hos-camel2/src/main/java/camel/api7/processor/TestWService.java

@ -1,6 +1,7 @@
package camel.api7.processor;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
/**
@ -13,8 +14,19 @@ public interface TestWService {
    @WebMethod
    public Object test();
    @WebMethod
    public Object requestWs (
            @WebParam(name = "api") String api,
            @WebParam(name = "param") String param,
            @WebParam(name = "timestamp") String timestamp,
            @WebParam(name = "v") String v,
            @WebParam(name = "appKey") String appKey,
            @WebParam(name = "sign") String sign
    );
    @WebMethod
    public int jian(int a, int b);
    public Object AddProvider (@WebParam(name = "doctor_id") long doctor_id );
}

+ 0 - 25
hos-camel2/src/main/java/camel/api7/processor/TestWServiceImpl.java

@ -1,25 +0,0 @@
package camel.api7.processor;
import org.apache.camel.component.cxf.CxfEndpoint;
import org.springframework.stereotype.Component;
import javax.jws.WebService;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/4/20.
 */
@WebService(serviceName = "esbWService",targetNamespace="http://processor.api7.camel",endpointInterface = "camel.api7.processor.TestWService")
@Component("testWService")
public class TestWServiceImpl extends CxfEndpoint implements TestWService {
    @Override
    public Object test() {
        return "ESB 中的webservice。。。。。";
    }
    @Override
    public int jian(int a, int b) {
        return a+b;
    }
}

+ 10 - 13
hos-camel2/src/main/java/camel/api7/processor/TestWsConfig.java

@ -2,13 +2,10 @@ package camel.api7.processor;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import javax.xml.ws.Endpoint;
/**
 * @author HZY
 * @vsrsion 1.0
@ -26,15 +23,15 @@ public class TestWsConfig {
        return new SpringBus();
    }
    @Bean
    public TestWService testWService() {
        return new TestWServiceImpl();
    }
//    @Bean
//    public TestWService testWService() {
//        return new TestWServiceImpl();
//    }
    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(), testWService());
        endpoint.publish("/ws");
        return endpoint;
    }
//    @Bean
//    public Endpoint endpoint() {
//        EndpointImpl endpoint = new EndpointImpl(springBus(), testWService());
//        endpoint.publish("/ws");
//        return endpoint;
//    }
}

+ 101 - 20
hos-camel2/src/main/java/camel/api7/processor/ToWsProcessor.java

@ -1,43 +1,124 @@
package camel.api7.processor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.message.MessageContentsList;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import javax.xml.soap.SOAPMessage;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.soap.*;
import java.io.StringReader;
import java.util.List;
import java.util.Map;
@Component
@Component("toWsProcessor")
public class ToWsProcessor implements Processor {
    public void process(final Exchange exchange) {
        SOAPMessage soapMessage = (SOAPMessage)exchange.getIn().getBody();
    public void process(Exchange exchange) throws Exception {
        MessageContentsList args = exchange.getIn().getBody(MessageContentsList.class);
        exchange.getOut().setHeader("api", args.get(0));
        exchange.getOut().setHeader("param", args.get(1));
        exchange.getOut().setHeader("timestamp", args.get(2));
        exchange.getOut().setHeader("v", args.get(3));
        exchange.getOut().setHeader("appKey", args.get(4));
        exchange.getOut().setHeader("sign", args.get(5));
    }
    public SOAPBody responseWs(Exchange exchange) {
        try {
            XmlMapper xmlMapper = new XmlMapper();
            ObjectMapper objectMapper = new ObjectMapper();
            Map<String,Object> map = objectMapper.readValue(exchange.getIn().getBody().toString(),Map.class);
            String xmlResponse = xmlMapper.writeValueAsString(map);
            return createDefaultSoapMessage(xmlResponse);
        } catch (Exception e) {
            e.printStackTrace();
            return createDefaultSoapMessage(e.getClass().getName());
        }
    }
    public SOAPBody request(Exchange exchange) {
        String wsdl = "http://127.0.0.1:8001/esb/ws?wsdl";
        SOAPMessage soapMessage = (SOAPMessage) exchange.getIn().getBody(List.class).get(0);
        if (soapMessage == null) {
            System.out.println("Incoming null message detected...");
            return createDefaultSoapMessage("null");
        }
        try {
            String requestText = requestWs(exchange, wsdl, "plus");
            return createDefaultSoapMessage(requestText);
        } catch (Exception e) {
            e.printStackTrace();
            return createDefaultSoapMessage(e.getClass().getName());
        }
    }
    public void requestWs(Exchange exchange) throws Exception {
        JaxWsDynamicClientFactory dcf =JaxWsDynamicClientFactory.newInstance();
        org.apache.cxf.endpoint.Client client =dcf.createClient("http://127.0.0.1:2222/soap/ws?wsdl");
    /**
     * 请求ws
     *
     * @param exchange
     * @param method
     * @return
     * @throws Exception
     */
    public String requestWs(Exchange exchange, String wsdl, String method) throws Exception {
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        org.apache.cxf.endpoint.Client client = dcf.createClient(wsdl);
        //getUser 为接口中定义的方法名称  张三为传递的参数   返回一个Object数组
        Object[] objects=client.invoke("test");
        Object[] objects = client.invoke(method);
        //输出调用结果
        System.out.println("*****"+objects[0].toString());
//        SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
//        SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody();
//        QName payloadName = new QName("http://processor.api7.camel/", "esbWService", "test");
//        SOAPBodyElement payload = body.addBodyElement(payloadName);
//        SOAPElement message = payload.addChildElement("responseType");
        System.out.println("*****" + objects[0].toString());
        return objects[0].toString();
    }
    public void responseWs(Exchange exchange) throws Exception {
    /**
     * 生成ws返回内容
     *
     * @param requestMessage
     * @return
     */
    public static SOAPBody createDefaultSoapMessage(String requestMessage) {
        try {
            SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
            SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody();
//            QName payloadName = new QName("http://gateway.api", "test", "ns1");
//            SOAPBodyElement payload = body.addBodyElement(payloadName);
//            SOAPElement message = payload.addChildElement("body");
            body.addDocument(parseXMLDocument(requestMessage));
            return body;
        } catch (SOAPException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    /**
     * 解析XML字符串
     * @param xmlString
     * @return
     */
    public static Document parseXMLDocument(String xmlString) {
        if (xmlString == null) {
            throw new IllegalArgumentException();
        }
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setNamespaceAware(true);
            DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
            return documentBuilder.parse(
                    new InputSource(new StringReader(xmlString)));
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
    }
}

+ 0 - 64
hos-camel2/src/main/java/camel/api7/processor/WsProcessor.java

@ -1,64 +0,0 @@
package camel.api7.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.component.cxf.CxfPayload;
import org.apache.cxf.binding.soap.SoapHeader;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.springframework.stereotype.Component;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.transform.Source;
import java.util.List;
@Component("wsProcessor")
public class WsProcessor implements Processor {
    public void process(final Exchange exchange) throws SOAPException {
        CxfPayload<SoapHeader> payload = exchange.getIn().getBody(CxfPayload.class);
        List<Source> elements = payload.getBodySources();
        SOAPMessage soapMessage = (SOAPMessage)exchange.getIn().getBody();
        SOAPBody soapBody = soapMessage.getSOAPBody();
        String method = exchange.getIn().getHeader("operatioNname", String.class);
        if("test".equals(method))
        {
        }else {
        }
    }
    public void requestWs(Exchange exchange) throws Exception {
        JaxWsDynamicClientFactory dcf =JaxWsDynamicClientFactory.newInstance();
        org.apache.cxf.endpoint.Client client =dcf.createClient("http://127.0.0.1:2222/soap/ws?wsdl");
        //getUser 为接口中定义的方法名称  张三为传递的参数   返回一个Object数组
        Object[] objects=client.invoke("test");
        //输出调用结果
        System.out.println("*****"+objects[0].toString());
//        SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
//        SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody();
//        QName payloadName = new QName("http://processor.api7.camel/", "esbWService", "test");
//        SOAPBodyElement payload = body.addBodyElement(payloadName);
//        SOAPElement message = payload.addChildElement("responseType");
    }
    public void responseWs(Exchange exchange) throws Exception {
    }
}

+ 39 - 45
hos-camel2/src/main/java/camel/api7/route/CxfConsumerTest.java

@ -1,60 +1,54 @@
package camel.api7.route;
import camel.api7.processor.ToWsProcessor;
import camel.gateway.processor.GatewayProcessor;
import camel.log.TracerFormatter;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.processor.interceptor.Tracer;
import org.springframework.stereotype.Component;
@Component
public class CxfConsumerTest extends RouteBuilder {
    protected static final String SIMPLE_ENDPOINT_ADDRESS = "http://192.168.131.101:3333/soap/ws";
    protected static final String SIMPLE_ENDPOINT_ADDRESS = "http://127.0.0.1:4445/soap/ws";
    protected static final String SIMPLE_ENDPOINT_URI = "cxf:" + SIMPLE_ENDPOINT_ADDRESS
            + "?serviceClass=camel.api7.processor.TestWServiceImpl"
            + "&dataFormat=PAYLOAD";
            + "?serviceClass=camel.api7.processor.TestWService"
//            + "&dataFormat=CXF_MESSAGE"
            ;
    // START SNIPPET: example
            public void configure() {
                from(SIMPLE_ENDPOINT_URI).log("log:msg")
                .to("cxf:bean:testWService?dataFormat=CXF_MESSAGE");
            }
        };
    // END SNIPPET: example
//    @Test
//    public void testInvokingServiceFromCXFClient() throws Exception {
//        ClientProxyFactoryBean proxyFactory = new ClientProxyFactoryBean();
//        ClientFactoryBean clientBean = proxyFactory.getClientFactoryBean();
//        clientBean.setAddress(SIMPLE_ENDPOINT_ADDRESS);
//        clientBean.setServiceClass(HelloService.class);
//        clientBean.setBus(BusFactory.newInstance().createBus());
//
//        HelloService client = (HelloService) proxyFactory.create();
//
//        String result = client.echo(TEST_MESSAGE);
//        assertEquals("We should get the echo string result from router", result, "echo " + TEST_MESSAGE);
//
//        Boolean bool = client.echoBoolean(Boolean.TRUE);
//        assertNotNull("The result should not be null", bool);
//        assertEquals("We should get the echo boolean result from router ", bool.toString(), "true");
//    }
//
//    @Test
//    public void testXmlDeclaration() throws Exception {
//        String response = template.requestBody(SIMPLE_ENDPOINT_ADDRESS, ECHO_REQUEST, String.class);
//        assertTrue("Can't find the xml declaration.", response.startsWith("<?xml version='1.0' encoding="));
//    }
//
//    @Test
//    public void testPublishEndpointUrl() throws Exception {
//        String response = template.requestBody(SIMPLE_ENDPOINT_ADDRESS + "?wsdl", null, String.class);
//        assertTrue("Can't find the right service location.", response.indexOf("http://www.simple.com/services/test") > 0);
//    }
    public void configure() {
        this.getContext().setUseMDCLogging(true);
        this.getContext().setTracing(true);
        Tracer tracer = new Tracer();
        TracerFormatter formatter = new TracerFormatter();
        formatter.setShowHeaders(true);
        formatter.setShowBody(true);
        formatter.setShowBodyType(true);
        formatter.setShowOutHeaders(true);
        formatter.setShowOutBody(true);
        formatter.setShowOutBodyType(true);
        formatter.setMultiline(true);
        tracer.setFormatter(formatter);
        this.getContext().addInterceptStrategy(tracer);
        this.getContext().getProperties().put(Exchange.LOG_DEBUG_BODY_STREAMS, "true");
        this.getContext().getProperties().put(Exchange.BEAN_MULTI_PARAMETER_ARRAY, "true");
        from(SIMPLE_ENDPOINT_URI)
                .setHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY, constant(true))
                .process(new ToWsProcessor())
                .routingSlip(method(GatewayProcessor.class, "route"))
                .to("bean:toWsProcessor?method=responseWs")
        ;
    }
};

+ 1 - 1
hos-camel2/src/main/java/camel/collect/processor/CollectProcessor0.java

@ -10,6 +10,6 @@ import org.apache.camel.Processor;
public class CollectProcessor0 implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        outMessage.setHeader(Exchange.HTTP_QUERY, "jobId=5ad5c11655d443c30155d477a6b10000");
        outMessage.setHeader(Exchange.HTTP_QUERY, "jobId=jobId");
    }
}

+ 4 - 0
hos-camel2/src/main/java/camel/crawler/processor/DefaultHttpProcessor.java

@ -8,6 +8,10 @@ import org.apache.camel.Processor;
import java.util.Iterator;
/**
 *  采集上传流程操作类
 *  用于参数解析
 */
public class DefaultHttpProcessor implements Processor {
    private String paramJson;

+ 3 - 1
hos-camel2/src/main/java/camel/crawler/processor/Split.java

@ -3,9 +3,11 @@ package camel.crawler.processor;
import net.sf.json.JSONArray;
import org.apache.camel.Body;
import java.io.IOException;
public class Split {
    public JSONArray splitJsonArray(@Body String jsonArrayStr) {
    public JSONArray splitJsonArray(@Body String jsonArrayStr) throws IOException {
        return JSONArray.fromObject(jsonArrayStr);
    }
}

+ 4 - 0
hos-camel2/src/main/java/camel/crawler/route/CrawlerQuartzRoute.java

@ -5,6 +5,10 @@ import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
/**
 * 采集上传流程
 *  此类为camel-quartz 采集使用的模板类,
 *  格式要求:1.routeId("routeId")
 *            2."{\"jobId\": \"jobId\"}"
 * @author HZY * @vsrsion 1.0 * Created at 2016/11/17.
 */
public class CrawlerQuartzRoute extends RouteBuilder {

+ 19 - 8
hos-camel2/src/main/java/camel/gateway/processor/ErrorHandle.java

@ -1,5 +1,6 @@
package camel.gateway.processor;
import org.apache.camel.Exchange;
import org.springframework.stereotype.Component;
/**
@ -8,19 +9,29 @@ import org.springframework.stereotype.Component;
 */
@Component("errorHandle")
public class ErrorHandle {
    public String paramError() {
        return "paramError";
    public void paramError(Exchange exchange) {
        exchange.getOut().setHeader("errorCode","{\"successFlg\":false,\"pageSize\":10,\"currPage\":0,\"totalPage\":0,\"totalCount\":0,\"detailModelList\":null,\"obj\":null,\"errorMsg\":\"paramError!\",\"errorCode\":0}");
        exchange.getOut().setBody("paramError");
    }
    public String outdataError() {
        return "outdataError";
    public void outdataError(Exchange exchange) {
        exchange.getOut().setHeader("errorCode","{\"successFlg\":false,\"pageSize\":10,\"currPage\":0,\"totalPage\":0,\"totalCount\":0,\"detailModelList\":null,\"obj\":null,\"errorMsg\":\"outdataError!\",\"errorCode\":0}");
        exchange.getOut().setBody("outdataError");
    }
    public String signValidError() {
        return "signValidError";
    public void signValidError(Exchange exchange) {
        exchange.getOut().setHeader("errorCode","{\"successFlg\":false,\"pageSize\":10,\"currPage\":0,\"totalPage\":0,\"totalCount\":0,\"detailModelList\":null,\"obj\":null,\"errorMsg\":\"signValidError!\",\"errorCode\":0}");
        exchange.getOut().setBody("signValidError");
    }
    public String unauthorizedError() {
        return "unauthorizedError";
    public void unauthorizedError(Exchange exchange) {
        exchange.getOut().setHeader("errorCode","{\"successFlg\":false,\"pageSize\":10,\"currPage\":0,\"totalPage\":0,\"totalCount\":0,\"detailModelList\":null,\"obj\":null,\"errorMsg\":\"unauthorizedError!\",\"errorCode\":0}");
        exchange.getOut().setBody("unauthorizedError");
    }
}

+ 23 - 5
hos-camel2/src/main/java/camel/gateway/processor/GatewayProcessor.java

@ -12,6 +12,8 @@ import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
@ -25,7 +27,7 @@ import java.util.stream.Stream;
public class GatewayProcessor implements Processor {
    static Map<String, AppApi> apiMap = new HashMap<>();
    static final String agUrl = "http://192.168.1.221:10000";
    static final String brokerUrl = "http://127.0.0.1:8099";
    static final String brokerUrl = "http://172.19.103.37:8099";
    @Autowired
    private DiscoveryClient discoveryClient;
@ -37,7 +39,6 @@ public class GatewayProcessor implements Processor {
        exchange.getOut().setHeader("v", headers.get("v"));
        exchange.getOut().setHeader("appKey", headers.get("appKey"));
        exchange.getOut().setHeader("sign", headers.get("sign"));
    }
@ -184,7 +185,7 @@ public class GatewayProcessor implements Processor {
                return "";
            }
            final String[] endPoint = {"restlet:" + url + appApi.getMsMethodName() + "?socketTimeout=60000&connectionTimeout=60000&restletMethod=" + methodMap.get(appApi.getMethod())};
            final String[] endPoint = {"restlet:" + appApi.getMicroServiceUri() + appApi.getMsMethodName() + "?socketTimeout=60000&connectionTimeout=60000&restletMethod=" + methodMap.get(appApi.getMethod())};
            final String[] body = {""};
            appApi.getParameters().forEach(p -> {
                JsonNode paramNode = jsonNode.get(p.getName());
@ -192,9 +193,9 @@ public class GatewayProcessor implements Processor {
                    return;
                }
                String value = paramNode.asText();
                Object value = nodeValue(paramNode);
                if (p.getType().equals("0")) { //path param
                    endPoint[0] = endPoint[0].replaceAll("\\{[^}]*\\}", value);
                    endPoint[0] = endPoint[0].replaceAll("\\{[^}]*\\}", value.toString());
                } else if (p.getType().equals("2")) { //head param
                    exchange.getOut().setHeader(p.getName(), value);
                } else {
@ -279,7 +280,24 @@ public class GatewayProcessor implements Processor {
        }
        return response.getBody();
    }
    public String nodeValue(JsonNode node){
        Object value = null;
        try {
            switch (node.getNodeType().name()){
                case "NUMBER" : value = node.asInt();break;
                case "STRING" : value = node.asText();break;
                case "BOOLEAN" : value = node.asBoolean();break;
                case "OBJECT" : value = node.toString();break;
                default:value = "";break;
            }
            return URLEncoder.encode(value.toString(), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return "";
    }
}

+ 171 - 0
hos-camel2/src/main/java/camel/gateway/processor/WsProcessor.java

@ -0,0 +1,171 @@
package camel.gateway.processor;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.message.MessageContentsList;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Component("wsProcessor")
public class WsProcessor implements Processor {
    private XmlMapper xmlMapper = new XmlMapper();
    private ObjectMapper objectMapper = new ObjectMapper();
    public void process(Exchange exchange) throws Exception {
        MessageContentsList args = exchange.getIn().getBody(MessageContentsList.class);
        exchange.getOut().setHeader("api", args.get(0));
        String xmlParam = args.get(1).toString();
        String rootName = parseXMLDocument(xmlParam).getDocumentElement().getLocalName();//获取根节点
        ObjectNode param = xmlMapper.readValue(xmlParam, ObjectNode.class);//解析参数内容
        ObjectNode paramNode = objectMapper.createObjectNode();
        paramNode.set(rootName, param);
        exchange.getOut().setHeader("param", paramNode);
        exchange.getOut().setHeader("timestamp", args.get(2));
        exchange.getOut().setHeader("v", args.get(3));
        exchange.getOut().setHeader("appKey", args.get(4));
        exchange.getOut().setHeader("sign", args.get(5));
    }
    public  String convertXmlToJson(String xml) {
        StringWriter w = new StringWriter();
        try {
            JsonParser jp = xmlMapper.getFactory().createParser(xml);
            JsonGenerator jg = objectMapper.getFactory().createGenerator(w);
            while (jp.nextToken() != null) {
                jg.copyCurrentEvent(jp);
            }
            jp.close();
            jg.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return w.toString();
    }
    //webservice 接口请求返回
    public SOAPBody responseWs(Exchange exchange) {
        XmlMapper xmlMapper = new XmlMapper();
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            Object errorCode = exchange.getIn().getHeader("errorCode");
            if (errorCode!=null){
                //错误信息返回
//                Map<Object, Object> errorMap = objectMapper.readValue(errorCode.toString(),Map.class);
                LinkedHashMap<Object, Object> errorMap = new LinkedHashMap<>();
                errorMap.put("errorCode",errorCode);
                String xmlResponse = xmlMapper.writeValueAsString(errorMap);
                return createDefaultSoapMessage(xmlResponse);
            }
            //返回请求结果
            Map<String,Object> map = objectMapper.readValue(exchange.getIn().getBody().toString(),Map.class);
            String xmlResponse = xmlMapper.writeValueAsString(map);
            return createDefaultSoapMessage(xmlResponse);
        } catch (Exception e) {
                e.printStackTrace();
            return createDefaultSoapMessage(e.getClass().getName());
        }
    }
    public SOAPBody request(Exchange exchange) {
        String wsdl = "http://127.0.0.1:8001/esb/ws?wsdl";
        SOAPMessage soapMessage = (SOAPMessage) exchange.getIn().getBody(List.class).get(0);
        if (soapMessage == null) {
            System.out.println("Incoming null message detected...");
            return createDefaultSoapMessage("null");
        }
        try {
            String requestText = requestWs(exchange, wsdl, "plus");
            return createDefaultSoapMessage(requestText);
        } catch (Exception e) {
            e.printStackTrace();
            return createDefaultSoapMessage(e.getClass().getName());
        }
    }
    /**
     * 请求ws
     *
     * @param exchange
     * @param method
     * @return
     * @throws Exception
     */
    public String requestWs(Exchange exchange, String wsdl, String method) throws Exception {
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        org.apache.cxf.endpoint.Client client = dcf.createClient(wsdl);
        //getUser 为接口中定义的方法名称  张三为传递的参数   返回一个Object数组
        Object[] objects = client.invoke(method);
        //输出调用结果
        System.out.println("*****" + objects[0].toString());
        return objects[0].toString();
    }
    /**
     * 生成ws返回内容
     *
     * @param requestMessage
     * @return
     */
    public static SOAPBody createDefaultSoapMessage(String requestMessage) {
        try {
            SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
            SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody();
//            QName payloadName = new QName("http://gateway.api", "test", "ns1");
//            SOAPBodyElement payload = body.addBodyElement(payloadName);
//            SOAPElement message = payload.addChildElement("body");
            body.addDocument(parseXMLDocument(requestMessage));
            return body;
        } catch (SOAPException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    /**
     * 解析XML字符串
     * @param xmlString
     * @return
     */
    public static Document parseXMLDocument(String xmlString) {
        if (xmlString == null) {
            throw new IllegalArgumentException();
        }
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setNamespaceAware(true);
            DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
            return documentBuilder.parse(
                    new InputSource(new StringReader(xmlString)));
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
    }
}

+ 32 - 0
hos-camel2/src/main/java/camel/gateway/processor/WsService.java

@ -0,0 +1,32 @@
package camel.gateway.processor;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/4/14.
 */
@WebService(name = "esbWService")
public interface WsService {
    @WebMethod
    public Object test();
    @WebMethod
    public Object requestWs(
            @WebParam(name = "api") String api,
            @WebParam(name = "param") String param,
            @WebParam(name = "timestamp") String timestamp,
            @WebParam(name = "v") String v,
            @WebParam(name = "appKey") String appKey,
            @WebParam(name = "sign") String sign
    );
    @WebMethod
    public Object AddProvider(@WebParam(name = "doctor_id") long doctor_id);
}

+ 14 - 4
hos-camel2/src/main/java/camel/gateway/route/GatewayRouterBuilder.java

@ -1,9 +1,10 @@
package camel.gateway.route;
import camel.log.TracerFormatter;
import camel.gateway.processor.ErrorHandle;
import camel.gateway.processor.GatewayProcessor;
import camel.gateway.processor.SignProcessor;
import camel.gateway.processor.WsProcessor;
import camel.log.TracerFormatter;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.processor.interceptor.Tracer;
@ -16,7 +17,11 @@ import org.springframework.stereotype.Component;
 */
@Component
public class GatewayRouterBuilder extends RouteBuilder {
    protected static final String SIMPLE_ENDPOINT_ADDRESS = "http://0.0.0.0:3333/ws/api";
    protected static final String SIMPLE_ENDPOINT_URI = "cxf:" + SIMPLE_ENDPOINT_ADDRESS
            + "?serviceClass=camel.gateway.processor.WsService"
//            + "&dataFormat=CXF_MESSAGE"
            ;
    @Override
    public void configure() throws Exception {
        this.getContext().setUseMDCLogging(true);
@ -36,6 +41,7 @@ public class GatewayRouterBuilder extends RouteBuilder {
        this.getContext().addInterceptStrategy(tracer);
        this.getContext().getProperties().put(Exchange.LOG_DEBUG_BODY_STREAMS, "true");
        this.getContext().getProperties().put(Exchange.BEAN_MULTI_PARAMETER_ARRAY, "true");
        from("jetty:http://0.0.0.0:9998?matchOnUriPrefix=true").routeId("proxy")
                .to("jetty:http://192.168.1.221:10000?bridgeEndpoint=true&throwExceptionOnFailure=false");
@ -58,8 +64,12 @@ public class GatewayRouterBuilder extends RouteBuilder {
        from("jetty:http://0.0.0.0:9999/sign").routeId("sign")
                .process(new SignProcessor());
        from("jetty:http://0.0.0.0:9999/rest").routeId("restTest")
                .to("restlet:http://192.168.1.221:10000/api/v1.0/admin/doctors/admin/13?autoCloseStream=true");
        from(SIMPLE_ENDPOINT_URI)
                .setHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY, constant(true))
                .process(new WsProcessor())
                .routingSlip(method(GatewayProcessor.class, "route"))
        .to("bean:wsProcessor?method=responseWs")
        ;
    }
}

+ 20 - 0
hos-camel2/src/main/java/camel/qcrule/processor/PatientProcessor.java

@ -0,0 +1,20 @@
package camel.qcrule.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class PatientProcessor implements Processor {
    public PatientProcessor() {
    }
    public void process(Exchange exchange) throws Exception {
        Message inMessage = exchange.getIn();
        Message outMessage = exchange.getOut();
        String body = inMessage.getBody(String.class);
        outMessage.setBody(body);
    }
}

+ 159 - 0
hos-camel2/src/main/java/camel/qcrule/processor/QcHttpProcessor.java

@ -0,0 +1,159 @@
package camel.qcrule.processor;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.core.datatype.StringUtil;
import net.sf.json.JSONObject;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.net.URLEncoder;
import java.text.ParseException;
import java.util.Iterator;
import java.util.Map;
/**
 * 采集上传流程操作类
 * 用于参数解析
 */
@Component
public class QcHttpProcessor implements Processor {
    private String paramJson;
    public QcHttpProcessor() {
    }
    public QcHttpProcessor(String paramJson) {
        this.paramJson = paramJson;
    }
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        JSONObject jsonObject = JSONObject.fromObject(paramJson);
        Iterator iterator = jsonObject.keys();
        String queryStr = "";
        while (iterator.hasNext()) {
            String name = (String) iterator.next();
            String value = (String) jsonObject.get(name);
            queryStr += name + "=" + value + "&&";
        }
        queryStr = StringUtil.substring(queryStr, 0, queryStr.length() - 2);
        outMessage.setHeader(Exchange.HTTP_QUERY, queryStr);
    }
    //跳转到质控采集接口
    public String toQc(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        JSONObject jsonObject = JSONObject.fromObject(paramJson);
        Iterator iterator = jsonObject.keys();
        String queryStr = "jetty:http://0.0.0.0:8088/crawler/qc/patient";
        while (iterator.hasNext()) {
            String name = (String) iterator.next();
            String value = (String) jsonObject.get(name);
            queryStr += name + "=" + value + "&&";
        }
        queryStr = StringUtil.substring(queryStr, 0, queryStr.length() - 2);
        return queryStr;
//        outMessage.setHeader(Exchange.HTTP_QUERY, queryStr);
    }
    public void patient(Exchange exchange) throws Exception {
        Message inMessage = exchange.getIn();
        JSONObject jsonObject = JSONObject.fromObject(inMessage.getBody());
        exchange.getOut().setBody(jsonObject.toString());
        System.out.println(inMessage.getBody());
    }
    public String routeUploadPatient(Exchange exchange) throws IOException, ParseException {
//        body = URLDecoder.decode(body, "UTF-8");
        Map<String, Object> params = exchange.getIn().getHeaders();
//        String api = params.get("api").toString();                     // API接口名称
        String param = params.get("param").toString();
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            JsonNode jsonNode = objectMapper.readValue(param, JsonNode.class);
            String url = "jetty:http://0.0.0.0:8088/crawler/patient";
            final String[] endPoint = {url};
            final String[] body = {""};
//            body[0] += ("&" + p.getName() + "=" + value);
            if (body[0].length() != 0) {
                exchange.getOut().setHeader(Exchange.REST_HTTP_QUERY, body[0].substring(1));
            }
//            exchange.getOut().setBody(null);
            return endPoint[0];
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    public String routeUploadQc(Exchange exchange) throws IOException, ParseException {
//        body = URLDecoder.decode(body, "UTF-8");
        Map<String, Object> params = exchange.getIn().getHeaders();
        String patient = URLEncoder.encode(params.get("patient").toString(), "UTF-8"); //病人信息
        String rules = exchange.getIn().getBody(String.class);//规则队列
        try {
            String endPoint = "jetty:http://0.0.0.0:8088/crawler/qc/patient";
            final String queryParams = "checkType=" + rules + "&patient=" + patient;
            exchange.getOut().setHeader(Exchange.REST_HTTP_QUERY, queryParams);
            return endPoint;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    /**
     * 根据job上传质控数据和档案包
     * @param exchange
     * @return
     * @throws IOException
     * @throws ParseException
     */
    public String routeUploadQcByJob(Exchange exchange) throws IOException, ParseException {
//        body = URLDecoder.decode(body, "UTF-8");
        Map<String, Object> params = exchange.getIn().getHeaders();
        String jobId = (String) exchange.getIn().getHeader(Exchange.HTTP_QUERY);
        String rules = exchange.getIn().getBody(String.class);//规则队列
        try {
            String endPoint = "jetty:http://0.0.0.0:8088/crawler/qc/crawlerPatientList";
            final String queryParams = "checkType=" + rules + "&" + jobId;
            exchange.getOut().setHeader(Exchange.REST_HTTP_QUERY, queryParams);
            return endPoint;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    /**
     * 统计规则,返回规则列表
     *
     * @param exchange
     * @throws Exception
     */
    public void coutType(Exchange exchange) throws Exception {
        Message inMessage = exchange.getIn();
        String newType = (String) inMessage.getHeader("checkType");
        Object countType = inMessage.getHeader("countType");
        if (countType != null && !StringUtil.isEmpty(countType)) {
            newType = newType + "," + countType;
        }
        exchange.getOut().setHeader("countType", newType);
        exchange.getOut().setBody(inMessage.getBody());
    }
}

+ 63 - 0
hos-camel2/src/main/java/camel/qcrule/router/QcCrawlerRoute.java

@ -0,0 +1,63 @@
package camel.qcrule.router;
import camel.crawler.processor.Split;
import camel.qcrule.processor.PatientProcessor;
import camel.qcrule.processor.QcHttpProcessor;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
/**
 * 采集上传流程
 *  此类为camel-quartz 采集使用的模板类,
 *  格式要求:1.routeId("routeId")
 *            2."{\"jobId\": \"jobId\"}"
 * @author HZY * @vsrsion 1.0 * Created at 2016/11/17.
 */
@Component
public class QcCrawlerRoute extends RouteBuilder {
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:8888/qc/crawler").routeId("creawrouteId").process(new QcHttpProcessor("{\"jobId\": \"4028cb815c7c0770015c7c0bbc3f0000\"}"))
                .setHeader(Exchange.HTTP_METHOD, constant("POST"))
                .to("jetty:http://0.0.0.0:8088/crawler/qc/patientList")
                .split().method(Split.class, "splitJsonArray")//循环
                .to("direct:splitPatient");
        from("direct:splitPatient")
                .process(new PatientProcessor())
                .multicast().parallelProcessing()//多播
                //新增规则
                .to("direct:uploadQc", "direct:uploadPatient")
        .end();
        from("direct:uploadQc")
                .setHeader("patient", body())
                .to("jetty:http://0.0.0.0:8088/crawler/qc/rules")//获取规则列表
                .routingSlip(method(QcHttpProcessor.class, "routeUploadQc"))//质控采集路由
                .to("jetty:http://0.0.0.0:8088/crawler/test");
        from("direct:uploadPatient")
//                .routingSlip(method(QcHttpProcessor.class, "routeUploadPatient"));
                .to("jetty:http://0.0.0.0:8088/crawler/test2");
        from("jetty:http://0.0.0.0:7777/qc/{checkType}")
                .choice()
                .when(header(Exchange.HTTP_URI).contains("checkNull")).setHeader("checkType", constant("emptry")).bean(method(QcHttpProcessor.class, "coutType"))
                .when(header(Exchange.HTTP_URI).contains("checkRight")).setHeader("checkType", constant("error")).bean(method(QcHttpProcessor.class, "coutType"))
                .endChoice();
        //通过任务直接采集质控数据和档案数据
        from("jetty:http://0.0.0.0:8999/qc/crawler").routeId("crawlerQcList").process(new QcHttpProcessor("{\"jobId\": \"4028cb815c7c0770015c7c0bbc3f0000\"}"))
                .setHeader(Exchange.HTTP_METHOD, constant("POST"))
                .to("jetty:http://0.0.0.0:8088/crawler/qc/rules")//获取规则列表
                .routingSlip(method(QcHttpProcessor.class, "routeUploadQcByJob"))//根据job采集质控路由
                ;
    }
}

+ 20 - 0
hos-camel2/src/main/java/camel/quartz2/processor/Quartz2Processor.java

@ -0,0 +1,20 @@
package camel.quartz2.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
/**
 * Created by Zdm on 2016/7/13.
 */
public class Quartz2Processor extends ClassLoader implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        System.out.println("测试,quartz ####################################");
        for (int i=0;i<30;i++){
            Thread.sleep(1000*3);
            System.out.println(i);
        }
        outMessage.setBody("hello,quartz========================");
    }
}

+ 11 - 0
hos-camel2/src/main/java/camel/quartz2/route/Quartz2Route.java

@ -0,0 +1,11 @@
package camel.quartz2.route;
import camel.quartz2.processor.Quartz2Processor;
import org.apache.camel.builder.RouteBuilder;
public class Quartz2Route  extends RouteBuilder {
    public void configure() throws Exception {
        from("quartz://myGroup2/quartz2?cron=0 0/1 * * * ?").routeId("routeId").process(new Quartz2Processor())
               ;
    }
}

+ 24 - 0
hos-central-rest/.gitignore

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

TEMPAT SAMPAH
hos-central-rest/.mvn/wrapper/maven-wrapper.jar


+ 1 - 0
hos-central-rest/.mvn/wrapper/maven-wrapper.properties

@ -0,0 +1 @@
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip

+ 225 - 0
hos-central-rest/mvnw

@ -0,0 +1,225 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 Start Up Batch script
#
# Required ENV vars:
# ------------------
#   JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
#   M2_HOME - location of maven2's installed home dir
#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
#     e.g. to debug Maven itself, use
#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
  if [ -f /etc/mavenrc ] ; then
    . /etc/mavenrc
  fi
  if [ -f "$HOME/.mavenrc" ] ; then
    . "$HOME/.mavenrc"
  fi
fi
# OS specific support.  $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
  CYGWIN*) cygwin=true ;;
  MINGW*) mingw=true;;
  Darwin*) darwin=true
    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
    if [ -z "$JAVA_HOME" ]; then
      if [ -x "/usr/libexec/java_home" ]; then
        export JAVA_HOME="`/usr/libexec/java_home`"
      else
        export JAVA_HOME="/Library/Java/Home"
      fi
    fi
    ;;
esac
if [ -z "$JAVA_HOME" ] ; then
  if [ -r /etc/gentoo-release ] ; then
    JAVA_HOME=`java-config --jre-home`
  fi
fi
if [ -z "$M2_HOME" ] ; then
  ## resolve links - $0 may be a link to maven's home
  PRG="$0"
  # need this for relative symlinks
  while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
      PRG="$link"
    else
      PRG="`dirname "$PRG"`/$link"
    fi
  done
  saveddir=`pwd`
  M2_HOME=`dirname "$PRG"`/..
  # make it fully qualified
  M2_HOME=`cd "$M2_HOME" && pwd`
  cd "$saveddir"
  # echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
  [ -n "$M2_HOME" ] &&
    M2_HOME=`cygpath --unix "$M2_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Migwn, ensure paths are in UNIX format before anything is touched
if $mingw ; then
  [ -n "$M2_HOME" ] &&
    M2_HOME="`(cd "$M2_HOME"; pwd)`"
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
  # TODO classpath?
fi
if [ -z "$JAVA_HOME" ]; then
  javaExecutable="`which javac`"
  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
    # readlink(1) is not available as standard on Solaris 10.
    readLink=`which readlink`
    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
      if $darwin ; then
        javaHome="`dirname \"$javaExecutable\"`"
        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
      else
        javaExecutable="`readlink -f \"$javaExecutable\"`"
      fi
      javaHome="`dirname \"$javaExecutable\"`"
      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
      JAVA_HOME="$javaHome"
      export JAVA_HOME
    fi
  fi
fi
if [ -z "$JAVACMD" ] ; then
  if [ -n "$JAVA_HOME"  ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
      # IBM's JDK on AIX uses strange locations for the executables
      JAVACMD="$JAVA_HOME/jre/sh/java"
    else
      JAVACMD="$JAVA_HOME/bin/java"
    fi
  else
    JAVACMD="`which java`"
  fi
fi
if [ ! -x "$JAVACMD" ] ; then
  echo "Error: JAVA_HOME is not defined correctly." >&2
  echo "  We cannot execute $JAVACMD" >&2
  exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
  echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
  if [ -z "$1" ]
  then
    echo "Path not specified to find_maven_basedir"
    return 1
  fi
  basedir="$1"
  wdir="$1"
  while [ "$wdir" != '/' ] ; do
    if [ -d "$wdir"/.mvn ] ; then
      basedir=$wdir
      break
    fi
    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
    if [ -d "${wdir}" ]; then
      wdir=`cd "$wdir/.."; pwd`
    fi
    # end of workaround
  done
  echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
  if [ -f "$1" ]; then
    echo "$(tr -s '\n' ' ' < "$1")"
  fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
  exit 1;
fi
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
echo $MAVEN_PROJECTBASEDIR
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
  [ -n "$M2_HOME" ] &&
    M2_HOME=`cygpath --path --windows "$M2_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
  $MAVEN_OPTS \
  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 143 - 0
hos-central-rest/mvnw.cmd

@ -0,0 +1,143 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements.  See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership.  The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License.  You may obtain a copy of the License at
@REM
@REM    http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied.  See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM     e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%

+ 50 - 0
hos-central-rest/pom.xml

@ -0,0 +1,50 @@
<?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>
	<groupId>com.yihu.hos</groupId>
	<artifactId>hos-central-rest</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>hos-central-rest</name>
	<description>Demo project for Spring Boot</description>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

+ 12 - 0
hos-central-rest/src/main/java/com/yihu/hos/central/rest/HosCentralRestApplication.java

@ -0,0 +1,12 @@
package com.yihu.hos.central.rest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HosCentralRestApplication {
	public static void main(String[] args) {
		SpringApplication.run(HosCentralRestApplication.class, args);
	}
}

+ 0 - 0
hos-central-rest/src/main/resources/application.properties


+ 16 - 0
hos-central-rest/src/test/java/com/yihu/hos/central/rest/HosCentralRestApplicationTests.java

@ -0,0 +1,16 @@
package com.yihu.hos.central.rest;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class HosCentralRestApplicationTests {
	@Test
	public void contextLoads() {
	}
}

+ 10 - 0
hos-core/src/main/java/com/yihu/hos/core/datatype/ClassFileUtil.java

@ -112,6 +112,7 @@ public class ClassFileUtil {
            }
            return succ;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
@ -269,6 +270,15 @@ public class ClassFileUtil {
        return response.getBody();
    }
    public static String upload(String url, String filePath) {
        HTTPResponse response = HttpClientKit.postFile(url, "file", filePath, "text/plain");
        if (response.getStatusCode() != 200) {
            System.out.println("上传文件失败,status:"+response.getStatusCode()+" body: "+response.getBody());
            return null;
        }
        return response.getBody();
    }
    /**
     * http 上传文件到中心请求
     *

+ 33 - 0
hos-core/src/main/java/com/yihu/hos/core/datatype/DateUtil.java

@ -46,6 +46,7 @@ public class DateUtil {
    public static final String DEFAULT_NOW_STRING_FORMAT = "yyyyMMddHHmmssSSS";
    public static final String DATE_MDY_FORMAT = "MMddyyyy";
    public static final String DATE_MY_FORMAT = "MMyyyy";
    public static final String DATE_WORLD_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
    public static String changeFormat(String changeDate, String beforeFormat, String afterFormat) {
@ -1412,4 +1413,36 @@ public class DateUtil {
        return  cal.getTime();
    }
    public static String getUtcDate(String dateStr,String format){
        SimpleDateFormat sdf1 = new SimpleDateFormat(DATE_WORLD_FORMAT);
        SimpleDateFormat sdf2 = new SimpleDateFormat(format);
        String date= null;
        try {
            date = sdf1.format(sdf2.parse(dateStr));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    public static String getUtcDate(java.util.Date date){
        SimpleDateFormat sdf1 = new SimpleDateFormat(DATE_WORLD_FORMAT);
        String utcDate = sdf1.format(date);
        return utcDate;
    }
    //utc时间转换
    public static String utcToDate(String utcTime,String format){
        SimpleDateFormat utcSdf = new SimpleDateFormat(DATE_WORLD_FORMAT);
        SimpleDateFormat newSdf = new SimpleDateFormat(format);
        String date= null;
        try {
            if (!StringUtil.isEmpty(utcTime))
                date = newSdf.format(utcSdf.parse(utcTime));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}

+ 2 - 0
hos-core/src/main/java/com/yihu/hos/core/http/DefaultClientImpl.java

@ -47,6 +47,7 @@ class DefaultClientImpl implements HTTPClient {
            return new HTTPResponse(response.code(), response.body().string());
        } catch (IOException ex) {
            ex.printStackTrace();
            log.error(ex.getMessage());
        }
@ -198,6 +199,7 @@ class DefaultClientImpl implements HTTPClient {
            return new HTTPResponse(response.code(), response.body().string());
        } catch (IOException ex) {
            ex.printStackTrace();
            log.error(ex.getMessage());
        }

+ 1 - 1
hos-dfs/src/main/java/com/yihu/hos/dfs/controller/DFSController.java

@ -10,7 +10,7 @@ import javax.servlet.http.HttpServletResponse;
/**
 * 基于Mongo的文件系统
 * <p>
 * <p>跨域注解
 * Created by l4qiang on 2017-04-10.
 */
@CrossOrigin

+ 1 - 1
hos-dfs/src/main/resources/application.yml

@ -25,7 +25,7 @@ spring:
  profiles: test
  data:
    mongodb:
      host: 172.19.103.67
      host: 172.19.103.42
      port: 27017
      username: esb
      password: esb

+ 19 - 0
hos-rest/pom.xml

@ -102,4 +102,23 @@
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>com.yihu.hos.rest.HosRestApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

+ 185 - 6
hos-rest/src/main/java/com/yihu/hos/rest/common/format/DataSetTransformer.java

@ -1,16 +1,21 @@
package com.yihu.hos.rest.common.format;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.ehr.dbhelper.jdbc.DBHelper;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.rest.models.crawler.adapter.AdapterDataSet;
import com.yihu.hos.rest.models.crawler.adapter.AdapterDict;
import com.yihu.hos.rest.models.crawler.adapter.AdapterMetaData;
import com.yihu.hos.rest.models.crawler.adapter.StdDataSet;
import com.yihu.hos.rest.models.crawler.patient.Patient;
import com.yihu.hos.rest.models.crawler.transform.DictDataType;
import com.yihu.hos.rest.models.crawler.transform.TransformType;
import com.yihu.hos.rest.models.standard.standard.StdMetaDataModel;
import com.yihu.hos.web.framework.constant.QcResultConstant;
import com.yihu.hos.web.framework.constant.SqlConstants;
import java.util.Iterator;
@ -32,10 +37,16 @@ import java.util.Map;
 * <p>
 * Created by Air on 2015/6/4.
 */
public class DataSetTransformer implements IDataTransformer{
public class DataSetTransformer implements IDataTransformer {
    private JsonNode jsonObject;
    private Patient patient;
    private static DBHelper db;
    private JsonNode qcObject;
    public JsonNode getQcObject() {
        return qcObject;
    }
    public JsonNode getJsonObject() {
        return jsonObject;
    }
@ -59,6 +70,54 @@ public class DataSetTransformer implements IDataTransformer{
        return false;
    }
    /**
     * 转换时间格式为utc、
     *
     * @param dataSetMap
     * @return
     */
    public boolean transferTimeFormat(Map<String, StdDataSet> dataSetMap) {
        if (jsonObject != null) {
            try {
                String dataSetCode = jsonObject.get("code").asText();
                ArrayNode jsonArray = (ArrayNode) jsonObject.get("data");
                StdDataSet stdDataSet = dataSetMap.get(dataSetCode);
                Map<Integer, Map<String, StdMetaDataModel>> stdDataSetMetasMap = stdDataSet.getStdDataSetMetasMap();
                Map<String, StdMetaDataModel> stdMetaDataModelMap = stdDataSetMetasMap.get(stdDataSet.getStdDataSetId());
                for (Object objectRow : jsonArray) {
                    if (objectRow instanceof JsonNode) {
                        ObjectNode jsonObject = (ObjectNode) objectRow;
                        Iterator<Map.Entry<String, JsonNode>> fields = jsonObject.fields();
                        while (fields.hasNext()) {
                            Map.Entry<String, JsonNode> next = fields.next();
                            String key = next.getKey();
                            JsonNode jsonNode = next.getValue();
                            String value = jsonNode.asText();
                            String stdValue = transferElemTime(stdMetaDataModelMap, key, value);
                            if (stdValue==null){
                                stdValue="";
                            }
                            jsonObject.put(key, stdValue);
//                            if (jsonNode instanceof ObjectNode) {
//                                ObjectNode objectNode = (ObjectNode) next;
//                                objectNode.put(key, stdValue);
//                            }
                        }
                    }
                }
                return true;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return false;
        }
        return false;
    }
    public String getData() {
        //确保文档有版本信息
        return jsonObject.asText();
@ -66,6 +125,7 @@ public class DataSetTransformer implements IDataTransformer{
    public void setData(JsonNode data) {
        jsonObject = data;
        qcObject = data;
        setPatient();
    }
@ -105,23 +165,25 @@ public class DataSetTransformer implements IDataTransformer{
    public void transferJsonRow(ObjectNode jsonObject, AdapterDataSet adapterDataSet) {
        Iterator<Map.Entry<String, JsonNode>> fields = jsonObject.fields();
        while (fields.hasNext()) {
            Map.Entry<String, JsonNode> next = fields.next();
            String key = next.getKey();
            JsonNode jsonNode = next.getValue();
            String value = jsonNode.asText();
            String stdValue = transferElem(adapterDataSet, key, value);
            jsonObject.put(key, stdValue);
            if (jsonNode instanceof ObjectNode) {
                ObjectNode objectNode = (ObjectNode) next;
                objectNode.put(key, stdValue);
            }
//            if (jsonNode instanceof ObjectNode) {
//                ObjectNode objectNode = (ObjectNode) next;
//                objectNode.put(key, stdValue);
//            }
        }
    }
    /**
     * @param adapterDataSet 数据集编码
     * @param code        数据元编码
     * @param code           数据元编码
     * @param esbData        数据
     * @return String 标准值
     * @modify 2015.09.16 airhead 增加值与编码转换
@ -147,6 +209,28 @@ public class DataSetTransformer implements IDataTransformer{
        return ehrData;
    }
    public String transferElemTime(Map<String, StdMetaDataModel> stdMetaDataModelMap, String code, String esbData) {
        StdMetaDataModel stdMetaData = stdMetaDataModelMap.get(code);
        if (stdMetaData == null ||stdMetaData.getColumnType() == null) {
            return esbData;
        }
        String columnType = stdMetaData.getColumnType();
        try{
            if ("DATE".equals(columnType) || "DATETIME".equals(columnType)) {
                //时间转换
                String utcDate = DateUtil.getUtcDate(esbData, DateUtil.DEFAULT_YMDHMSDATE_FORMAT);
                return utcDate;
            } else {
                return esbData;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return "";
    }
    /**
     * 根据DataSet信息构造Patient
     */
@ -156,4 +240,99 @@ public class DataSetTransformer implements IDataTransformer{
        patient.setEventNo(jsonObject.get("event_no").asText());
        patient.setOrgCode(jsonObject.get("org_code").asText());
    }
    /* *************************** 以下为质控规则逻辑相关 **************************** add by hzy */
    public boolean genQcData(Map<String, AdapterDataSet> dataSetMap,String checkType) {
        if (jsonObject != null) {
            String dataSetCode = jsonObject.get("code").asText();
            ArrayNode jsonArray = (ArrayNode) jsonObject.get("data");
            AdapterDataSet adapterDataSet = dataSetMap.get(dataSetCode);
            //TODO 根据条件判断执行的规则
            switch (checkType){
                case  QcResultConstant.VALUE_EMPTY :checkDataIsNull(jsonArray,checkType);
                    break;
                case  QcResultConstant.VALUE_ERROR :checkDataTransfer(jsonArray, adapterDataSet, checkType);
                    break;
                default:
                    break;
            }
            return true;
        }
        return false;
    }
    //检测医院数据为空
    public void checkDataIsNull(ArrayNode jsonArray,String checkType) {
        ObjectMapper objectMapper = new ObjectMapper();
        ArrayNode arrayNode = objectMapper.createArrayNode();
        int realCount=0;
        for (Object objectRow : jsonArray) {
            if (objectRow instanceof JsonNode) {
                ObjectNode jsonObject = (ObjectNode) objectRow;
                Iterator<Map.Entry<String, JsonNode>> fields = jsonObject.fields();
                ObjectNode objectNode = objectMapper.createObjectNode();
                objectNode.put("total",jsonObject.size());
                while (fields.hasNext()) {
                    Map.Entry<String, JsonNode> next = fields.next();
                    String key = next.getKey();
                    JsonNode jsonNode = next.getValue();
                    String value = jsonNode.asText();
                    if (!StringUtil.isEmpty(value)) {
                        //医院数据是空
//                        jsonObject.remove(key);
                        System.out.println("value:" + value);
                    }else {
                        realCount++;
                        objectNode.put(key,checkType);
                    }
                }
                objectNode.put("error",realCount);
                arrayNode.add(objectNode);
                realCount=0;
            }
        }
        jsonArray.removeAll();
        jsonArray.addAll(arrayNode);
    }
    //检测是否转换异常
    public void checkDataTransfer(ArrayNode jsonArray, AdapterDataSet adapterDataSet,String checkType) {
        ObjectMapper objectMapper = new ObjectMapper();
        ArrayNode arrayNode = objectMapper.createArrayNode();
        int realCount=0;
        for (Object objectRow : jsonArray) {
            if (objectRow instanceof JsonNode) {
                ObjectNode jsonObject = (ObjectNode) objectRow;
                Iterator<Map.Entry<String, JsonNode>> fields = jsonObject.fields();
                ObjectNode objectNode = objectMapper.createObjectNode();
                objectNode.put("total",jsonObject.size());
                while (fields.hasNext()) {
                    Map.Entry<String, JsonNode> next = fields.next();
                    String key = next.getKey();
                    JsonNode jsonNode = next.getValue();
                    String value = jsonNode.asText();
                    String stdValue = transferElem(adapterDataSet, key, value);
                    if (!StringUtil.isEmpty(value) && StringUtil.isEmpty(stdValue)) {
                        //转换后数据异常
                        objectNode.put(key, checkType+": org_value: " + value + " stdValue: " + stdValue);
                        System.out.println("value: " + value + " stdValue:" + stdValue);
                        realCount++;
                    }
                }
                objectNode.put("error",realCount);
                arrayNode.add(objectNode);
                realCount=0;
            }
        }
        jsonArray.removeAll();
        jsonArray.addAll(arrayNode);
    }
}

+ 21 - 0
hos-rest/src/main/java/com/yihu/hos/rest/common/format/StdBase.java

@ -0,0 +1,21 @@
package com.yihu.hos.rest.common.format;
import com.yihu.hos.rest.services.standard.standard.StdMetadataService;
/**
 * 适配器基类,DAO缓存
 *
 * @created Created by Air on 2015/6/10.
 */
public class StdBase {
    private static StdMetadataService stdMetadataService;
    public static StdMetadataService getStdMetadataService() {
        return stdMetadataService;
    }
    public static void setStdMetadataService(StdMetadataService stdMetadataService) {
        StdBase.stdMetadataService = stdMetadataService;
    }
}

+ 9 - 5
hos-rest/src/main/java/com/yihu/hos/rest/common/http/EHRHttpHelper.java

@ -19,6 +19,8 @@ import java.util.Properties;
//TODO:对于Basic认证内容,暂时未验证,可以使用http://user:password@host的方式尝试访问
public class EHRHttpHelper {
    public static String defaultHttpUrl;
    public static String httpCouldUrl;
    public static String httpAdminUrl;
    public static String clientId;
    public static String clientKey;
    private static SSLConnectionSocketFactory defaultSSL;
@ -32,8 +34,9 @@ public class EHRHttpHelper {
            Resource resource = new ClassPathResource(defaultPropertiesPath);
            EncodedResource encRes = new EncodedResource(resource, "UTF-8");
            Properties props = PropertiesLoaderUtils.loadProperties(encRes);
            httpCouldUrl = props.getProperty("httpCouldUrl");
            defaultHttpUrl = props.getProperty("httpUrl");
            httpAdminUrl = props.getProperty("httpAdminUrl");
            defaultHttpUser = props.getProperty("httpUser");
            defaultHttpPassword = props.getProperty("httpPassword");
            clientId = props.getProperty("clientId");
@ -121,12 +124,13 @@ public class EHRHttpHelper {
        return HttpClientKit.request("POST", url, params, header);
    }
    public static HTTPResponse postFile(String url, Map<String, String> formParams, String filePath, Map<String, String> header) {
        return HttpClientKit.postFile(url, filePath, formParams);
    public static HTTPResponse postFile(String url, Map<String, String> formParams, String filePath, Map<String, String> headers) {
        return HttpClientKit.postFile(url, filePath, formParams,headers);
    }
    public static HTTPResponse postFile(String url, Map<String, String> formParams, File file, Map<String, String> header) {
        return HttpClientKit.postFile(url, file.getAbsolutePath(), formParams);
    public static HTTPResponse postFile(String url, Map<String, String> formParams, File file, Map<String, String> headers) {
        return HttpClientKit.postFile(url, file.getAbsolutePath(), formParams,headers);
    }
    /**************************

+ 79 - 12
hos-rest/src/main/java/com/yihu/hos/rest/controllers/CrawlerController.java

@ -2,9 +2,7 @@ package com.yihu.hos.rest.controllers;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.rest.models.crawler.patient.Patient;
import com.yihu.hos.rest.services.crawler.CrawlerFlowManager;
import com.yihu.hos.rest.services.crawler.CrawlerManager;
import com.yihu.hos.rest.services.crawler.CrawlerService;
import com.yihu.hos.rest.services.crawler.*;
import com.yihu.hos.rest.services.standard.adapter.AdapterSchemeService;
import com.yihu.hos.web.framework.model.ActionResult;
import com.yihu.hos.web.framework.model.DetailModelResult;
@ -12,16 +10,13 @@ import com.yihu.hos.web.framework.model.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Date;
import java.util.List;
/**
@ -30,12 +25,13 @@ import java.util.Date;
 * Created by Airhead on 2015/12/16.
 */
@RequestMapping("/crawler")
@Controller("crawlerController")
@RestController("crawlerController")
@Api(protocols = "http", value = "CrawlerController", description = "档案采集接口", tags = {"采集"})
public class CrawlerController {
    @Resource
    CrawlerService crawlerService;
    @Resource
    CrawlerManager crawlerManager;
    @Resource
@ -45,11 +41,16 @@ public class CrawlerController {
    @Resource(name = AdapterSchemeService.BEAN_ID)
    private AdapterSchemeService adapterSchemeService;
    @Resource(name = QcRuleService.BEAN_ID)
    private QcRuleService qcRuleService;
    @RequestMapping(value = "/test", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ApiOperation(value = "测试服务器可以正常连接", produces = "application/json", notes = "测试服务器可以正常连接")
    public String test() {
        System.out.println("test1111111111111111");
        return "test";
    }
    /**
    任务编排
    */
@ -94,7 +95,7 @@ public class CrawlerController {
        Patient patient = crawlerManager.parsePatient(patientInfo);
        if (patient != null) {
            Boolean result = crawlerManager.collectProcess(patient);
            Boolean result = crawlerManager.collectProcess(patient,null);
            if (result) {
                return Result.success("采集上传成功");
            } else {
@ -126,13 +127,13 @@ public class CrawlerController {
    }
    @RequestMapping(value = "patientList", method = RequestMethod.POST)
    @ApiOperation(value = "采集病人健康档案", produces = "application/json", notes = "采集病人健康档案")
    @ApiOperation(value = "上传病人健康档案", produces = "application/json", notes = "采集病人健康档案")
    @ResponseBody
    public Result crawlerPatientList(
            @ApiParam(name = "jobId", value = "任务jobId", required = true)
            @RequestParam(value = "jobId") String jobId) {
        try {
            return crawlerManager.dataCrawlerByJobId(jobId);
            return crawlerManager.dataCrawlerByJobId(jobId,null);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("采集上传失败");
@ -320,4 +321,70 @@ public class CrawlerController {
    }
    /* ***************************************** 以下为 质控校验规则添加后的采集逻辑 接口*********************************************** */
    @RequestMapping(value = "/qc/patientList", method = RequestMethod.POST)
    @ApiOperation(value = "采集病人事件列表", produces = "application/json", notes = "采集病人事件列表")
    @ResponseBody
    public List<Patient> getPatientList(
            @ApiParam(name = "jobId", value = "任务jobId", required = true)
            @RequestParam(value = "jobId") String jobId) {
        try {
            return crawlerManager.PatientListByJobId(jobId);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    @RequestMapping(value = "qc/crawlerPatientList", method = RequestMethod.POST)
    @ApiOperation(value = "按任务采集质控数据", produces = "application/json", notes = "按任务采集质控数据")
    @ResponseBody
    public Result crawlerQCDataList(
            @ApiParam(name = "jobId", value = "任务jobId", required = true)
            @RequestParam(value = "jobId") String jobId,
            @ApiParam(name = "checkType", value = "质控规则类型集合,以“,”分割", required = false)
            @RequestParam(value = "checkType", required = false) String checkType) {
        try {
            return crawlerManager.dataCrawlerByJobId(jobId,checkType);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("采集上传失败");
        }
    }
    @RequestMapping(value = "/qc/patient", method = RequestMethod.POST)
    @ApiOperation(value = "采集单份档案质控数据", produces = "application/json", notes = "采集病人档案质控数据")
    public Result crawlerQcData(
            @ApiParam(name = "patient", value = "病人索引信息", required = false)
            @RequestParam(value = "patient") String patientInfo,
            @ApiParam(name = "checkType", value = "质控规则类型集合,以“,”分割", required = false)
            @RequestParam(value = "checkType") String checkType) {
        Patient patient = crawlerManager.parsePatient(patientInfo);
        //TODO 通过获取规则,获取规则类型,进行校验
        if (patient != null) {
            Boolean result = crawlerManager.collectProcess(patient, checkType);
            if (result) {
                return Result.success("上传档案质控数据成功");
            } else {
                return Result.error("上传档案质控数据失败");
            }
        } else {
            return Result.error("病人索引实体,参数转换失败!");
        }
    }
    @RequestMapping(value = "qc/rules", method = RequestMethod.POST)
    @ApiOperation(value = "获取质控规则列表", produces = "application/json", notes = "获取质控规则列表")
    public String qcRules() {
        try {
            return qcRuleService.getRuleNames();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

+ 4 - 0
hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/adapter/AdapterDataSet.java

@ -8,6 +8,7 @@ import com.yihu.hos.rest.models.standard.adapter.AdapterDatasetModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterDictEntryModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterMetadataModel;
import com.yihu.hos.rest.models.standard.bo.AdapterVersion;
import com.yihu.hos.rest.models.standard.standard.StdMetaDataModel;
import java.util.*;
@ -22,6 +23,7 @@ public class AdapterDataSet extends AdapterBase {
    private List<AdapterMetaData> adapterMetaDataList;
    private AdapterDatasetModel adapterDatasetModel;
    private Map<String, AdapterMetaData> adapterMetaDataMap;
    private Map<String, StdMetaDataModel> stdMetaDataMap;
    private String eventNoCode;
    private AdapterVersion adapterVersion;
@ -44,6 +46,8 @@ public class AdapterDataSet extends AdapterBase {
            ObjectMapper objectMapper = new ObjectMapper();
            List<StdMetaDataModel> stdMetaDataModelList = getAdapterMetadataService().getAdapterMetadataNotNullList(adapterVersion, adapterDatasetModel.getStdDatasetId(),objectMapper.writeValueAsString(condition));
            List<AdapterMetadataModel> adapterMetaDataModelList = getAdapterMetadataService().getAdapterMetadataNotNullList(adapterVersion, adapterDatasetModel.getStdDatasetId(),objectMapper.writeValueAsString(condition));
            List<Integer> stdMetaDataIdList = new ArrayList<>();
            if (!CollectionUtil.isEmpty(adapterMetaDataModelList)) {

+ 90 - 0
hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/adapter/StdDataSet.java

@ -0,0 +1,90 @@
package com.yihu.hos.rest.models.crawler.adapter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.core.datatype.CollectionUtil;
import com.yihu.hos.rest.common.format.StdBase;
import com.yihu.hos.rest.models.standard.bo.StandardVersion;
import com.yihu.hos.rest.models.standard.standard.StdMetaDataModel;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author Air
 * @version 1.0
 * @created 2015.08.11 11:29
 */
public class StdDataSet extends StdBase {
    private  Map<Integer, Map<String,StdMetaDataModel>> stdDataSetMetasMap;
    private  Map<String, StdMetaDataModel> stdMetaDataMap;
    private List<StdMetaDataModel> stdMetaDataModelList;
    private StandardVersion standardVersion;
    private Integer stdDataSetId;
    public StdDataSet(Integer  stdDataSetId,StandardVersion standardVersion) {
        this.stdDataSetId = stdDataSetId;
        this.standardVersion = standardVersion;
        prepareData();
    }
    public void prepareData() {
        try {
            stdMetaDataModelList = new ArrayList<>();
            stdDataSetMetasMap = new HashMap<>();
            stdMetaDataMap = new HashMap<>();
            Map<String, Object> condition = new HashMap<>();
            condition.put("column", "code");
            ObjectMapper objectMapper = new ObjectMapper();
             stdMetaDataModelList = getStdMetadataService().getStdMetadataNotNullList(standardVersion, stdDataSetId, objectMapper.writeValueAsString(condition));
            if (!CollectionUtil.isEmpty(stdMetaDataModelList)) {
                for (StdMetaDataModel stdMetadataModel : stdMetaDataModelList) {
                    stdMetaDataMap.put(stdMetadataModel.getCode(),stdMetadataModel);
                }
                if (!stdDataSetMetasMap.containsKey(stdDataSetId)){
                    stdDataSetMetasMap.put(stdDataSetId,stdMetaDataMap);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public Map<Integer, Map<String, StdMetaDataModel>> getStdDataSetMetasMap() {
        return stdDataSetMetasMap;
    }
    public void setStdDataSetMetasMap(Map<Integer, Map<String, StdMetaDataModel>> stdDataSetMetasMap) {
        this.stdDataSetMetasMap = stdDataSetMetasMap;
    }
    public List<StdMetaDataModel> getStdMetaDataModelList() {
        return stdMetaDataModelList;
    }
    public void setStdMetaDataModelList(List<StdMetaDataModel> stdMetaDataModelList) {
        this.stdMetaDataModelList = stdMetaDataModelList;
    }
    public Map<String, StdMetaDataModel> getStdMetaDataMap() {
        return stdMetaDataMap;
    }
    public void setStdMetaDataMap(Map<String, StdMetaDataModel> stdMetaDataMap) {
        this.stdMetaDataMap = stdMetaDataMap;
    }
    public Integer getStdDataSetId() {
        return stdDataSetId;
    }
    public void setStdDataSetId(Integer stdDataSetId) {
        this.stdDataSetId = stdDataSetId;
    }
}

+ 3 - 1
hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/config/SysConfig.java

@ -126,6 +126,7 @@ public class SysConfig {
            this.initCrawler(rootElement);
            this.initEventNo(rootElement);
            this.initVersion(rootElement);
            String tempFile = rootElement.elementTextTrim("temp_file");
//            this.initPatientIndex(rootElement);
        } catch (Exception e) {
            logger.error(e.getCause().toString());
@ -146,8 +147,9 @@ public class SysConfig {
            if (obj instanceof Element) {
                Element element = (Element) obj;
                String dataSetCode = element.attributeValue("code");
                orgcode = element.attributeValue("code");
                String version = element.elementTextTrim("version");
                orgcode= element.attributeValue("code");
                String ehrVersion=new String(version);
                versionMap.put(dataSetCode,ehrVersion);
            }

+ 9 - 0
hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/patient/Patient.java

@ -16,11 +16,20 @@ public class Patient {
    private String reUploadFlg;
    private String jobTimeStamp;
    private String failType; //采集失败类型
    private String dataSet; //从哪个数据集采集
    public Patient() {
    }
    public String getDataSet() {
        return dataSet;
    }
    public void setDataSet(String dataSet) {
        this.dataSet = dataSet;
    }
    public String getPatientId() {
        return patientId;
    }

+ 138 - 0
hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/qc/QcDaily.java

@ -0,0 +1,138 @@
package com.yihu.hos.rest.models.crawler.qc;
import java.util.ArrayList;
import java.util.List;
/**
 * 质控-日报
 *
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/6/1.
 */
public class QcDaily {
    private String org_code;
    private String create_date;
    private String inner_version;
    private Integer total_outpatient_num;
    private Integer real_outpatient_num;
    private Integer total_hospital_num;
    private Integer real_hospital_num;
    private List<QcPatientIndex> total_outpatient = new ArrayList<>();
    private List<QcPatientIndex> real_outpatient = new ArrayList<>();
    private List<QcPatientIndex> total_hospital = new ArrayList<>();
    private List<QcPatientIndex> real_hospital = new ArrayList<>();
    ;
    public void addTotal(QcPatientIndex patientIndex, String dataSet) {
        if ("HDSC01_02".equals(dataSet)) {
            this.total_outpatient.add(patientIndex);
        } else if ("HDSC02_09".equals(dataSet)) {
            this.total_hospital.add(patientIndex);
        } else {
            return;
        }
    }
    public void addReal(QcPatientIndex patientIndex, String dataSet) {
        if ("HDSC01_02".equals(dataSet)) {//门诊
            this.real_outpatient.add(patientIndex);
        } else if ("HDSC02_09".equals(dataSet)) {//住院
            this.real_hospital.add(patientIndex);
        } else {
            return;
        }
    }
    public String getOrg_code() {
        return org_code;
    }
    public void setOrg_code(String org_code) {
        this.org_code = org_code;
    }
    public String getCreate_date() {
        return create_date;
    }
    public void setCreate_date(String create_date) {
        this.create_date = create_date;
    }
    public String getInner_version() {
        return inner_version;
    }
    public void setInner_version(String inner_version) {
        this.inner_version = inner_version;
    }
    public Integer getTotal_outpatient_num() {
        return total_outpatient_num;
    }
    public void setTotal_outpatient_num(Integer total_outpatient_num) {
        this.total_outpatient_num = total_outpatient_num;
    }
    public Integer getReal_outpatient_num() {
        return real_outpatient_num;
    }
    public void setReal_outpatient_num(Integer real_outpatient_num) {
        this.real_outpatient_num = real_outpatient_num;
    }
    public Integer getTotal_hospital_num() {
        return total_hospital_num;
    }
    public void setTotal_hospital_num(Integer total_hospital_num) {
        this.total_hospital_num = total_hospital_num;
    }
    public Integer getReal_hospital_num() {
        return real_hospital_num;
    }
    public void setReal_hospital_num(Integer real_hospital_num) {
        this.real_hospital_num = real_hospital_num;
    }
    public List<QcPatientIndex> getTotal_outpatient() {
        return total_outpatient;
    }
    public void setTotal_outpatient(List<QcPatientIndex> total_outpatient) {
        this.total_outpatient = total_outpatient;
    }
    public List<QcPatientIndex> getReal_outpatient() {
        return real_outpatient;
    }
    public void setReal_outpatient(List<QcPatientIndex> real_outpatient) {
        this.real_outpatient = real_outpatient;
    }
    public List<QcPatientIndex> getTotal_hospital() {
        return total_hospital;
    }
    public void setTotal_hospital(List<QcPatientIndex> total_hospital) {
        this.total_hospital = total_hospital;
    }
    public List<QcPatientIndex> getReal_hospital() {
        return real_hospital;
    }
    public void setReal_hospital(List<QcPatientIndex> real_hospital) {
        this.real_hospital = real_hospital;
    }
}

+ 42 - 0
hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/qc/QcPatientIndex.java

@ -0,0 +1,42 @@
package com.yihu.hos.rest.models.crawler.qc;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/6/1.
 */
public class QcPatientIndex {
    private String patient_id;
    private String event_no;
    private String event_time;
    public QcPatientIndex(String patient_id, String event_no, String event_time) {
        this.patient_id = patient_id;
        this.event_time = event_time;
        this.event_no = event_no;
    }
    public String getPatient_id() {
        return patient_id;
    }
    public void setPatient_id(String patient_id) {
        this.patient_id = patient_id;
    }
    public String getEvent_no() {
        return event_no;
    }
    public void setEvent_no(String event_no) {
        this.event_no = event_no;
    }
    public String getEvent_time() {
        return event_time;
    }
    public void setEvent_time(String event_time) {
        this.event_time = event_time;
    }
}

+ 68 - 0
hos-rest/src/main/java/com/yihu/hos/rest/models/crawler/qc/QcRuleModel.java

@ -0,0 +1,68 @@
package com.yihu.hos.rest.models.crawler.qc;
import java.io.Serializable;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/6/6.
 */
public class QcRuleModel implements Serializable {
    private String id;
    private String name;
    private String type;
    private String description;
    private String rule;
    private String errorCode;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getRule() {
        return rule;
    }
    public void setRule(String rule) {
        this.rule = rule;
    }
    public String getErrorCode() {
        return errorCode;
    }
    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }
}

+ 11 - 0
hos-rest/src/main/java/com/yihu/hos/rest/models/standard/adapter/AdapterMetadataModel.java

@ -42,6 +42,17 @@ public class AdapterMetadataModel extends Result implements Serializable {
    @Column(name = "adapter_dict_id")
    private Integer adapterDictId;
    @Column(name = "adapter_info")
    private String adapterInfo;
    public String getAdapterInfo() {
        return adapterInfo;
    }
    public void setAdapterInfo(String adapterInfo) {
        this.adapterInfo = adapterInfo;
    }
    public Integer getId() {
        return id;
    }

+ 8 - 2
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/CrawlerFlowManager.java

@ -135,7 +135,12 @@ public class CrawlerFlowManager {
                 */
                String datasetCode = crawlerFlowHeadModel.getDatasetCode();
                AdapterDataSet adapterDataSet = adapterDataSetMap.get(datasetCode);
                JsonNode data = dispatch.fecthData(patient, adapterDataSet);
                String stdVersion = adapterDatasetService.getStdVersionByAdapterDataSet(this.schemeVersion);
                JsonNode data = null;
                if (!StringUtil.isEmpty(stdVersion)){
                    data = dispatch.fecthData(patient, adapterDataSet,stdVersion);
                }
                if (StringUtil.isEmpty(data)) {
                    continue;
                }
@ -160,7 +165,8 @@ public class CrawlerFlowManager {
             */
            try {
                if (!CollectionUtil.isEmpty(dataMap.keySet())) {
                    if (!dispatch.upload(dataMap, patient, adapterDataSetMap)) {
                    //TODO set stdDatasetMap 2017/05/02
                    if (!dispatch.upload(dataMap, patient, adapterDataSetMap,null)) {
                        logger.error("上传档案失败");
                        return false;
                    }

+ 251 - 127
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/CrawlerManager.java

@ -2,34 +2,41 @@ package com.yihu.hos.rest.services.crawler;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.hos.core.datatype.CollectionUtil;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.rest.common.dao.DatacollectDao;
import com.yihu.hos.rest.common.format.AdapterBase;
import com.yihu.hos.rest.common.format.StdBase;
import com.yihu.hos.rest.models.crawler.adapter.AdapterDataSet;
import com.yihu.hos.rest.models.crawler.adapter.StdDataSet;
import com.yihu.hos.rest.models.crawler.config.SysConfig;
import com.yihu.hos.rest.models.crawler.patient.Patient;
import com.yihu.hos.rest.models.crawler.qc.QcDaily;
import com.yihu.hos.rest.models.crawler.qc.QcPatientIndex;
import com.yihu.hos.rest.models.rs.RsJobConfig;
import com.yihu.hos.rest.models.standard.adapter.AdapterDatasetModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterDictEntryModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterSchemeModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterSchemeVersionModel;
import com.yihu.hos.rest.models.standard.bo.AdapterVersion;
import com.yihu.hos.rest.models.standard.bo.StandardVersion;
import com.yihu.hos.rest.models.standard.standard.StdMetaDataModel;
import com.yihu.hos.rest.services.standard.adapter.*;
import com.yihu.hos.rest.services.standard.standard.StdMetadataService;
import com.yihu.hos.web.framework.model.DataGridResult;
import com.yihu.hos.web.framework.model.DictItem;
import com.yihu.hos.web.framework.model.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
@Service("CrawlerManager")
@Service("qCCrawlerManager")
public class CrawlerManager {
    public static final String BEAN_ID = "CrawlerManager";
    public static final String BEAN_ID = "qCCrawlerManager";
    private static String unstructured = "unstructured";
    private static Logger logger = LoggerFactory.getLogger(CrawlerManager.class);
    @Resource
@ -42,12 +49,25 @@ public class CrawlerManager {
    private AdapterSchemeVersionService adapterSchemeVersionService;
    @Resource
    private DatacollectManager datacollect;
    @Resource
    private StdMetadataService StdMetadataService;
    @Resource(name = AdapterSchemeService.BEAN_ID)
    private AdapterSchemeService adapterSchemeService;
    @Resource
    private ObjectMapper objectMapper;
    private static DataCollectDispatcher dispatch = DataCollectDispatcher.getInstance();
    private static SysConfig sysConfig=SysConfig.getInstance();
    private static SysConfig sysConfig = SysConfig.getInstance();
    private static Map<String, Map<String, AdapterDataSet>> adapterDataSetVersionMap = new HashMap<>();
    private static Map<String, Map<String, StdDataSet>> stdDataSetVersionMap = new HashMap<>();
    private static Map<Integer, List<StdMetaDataModel>> stdMetaDataMap = new HashMap<>();
    private Map<String, AdapterDataSet> adapterDataSetMap;
    private Map<String, StdDataSet> stdDataSetMap;
    private Boolean adapterFlg = false;
    private Boolean stdFlg = false;
    private String schemeVersion;
    private List<DictItem> datasetList;
@ -55,35 +75,132 @@ public class CrawlerManager {
    }
    public Result dataCrawlerByJobId(String jobId) throws Exception {
    /**
     * 病人事件列表
     *
     * @param jobId
     * @return
     * @throws Exception
     */
    public List<Patient> PatientListByJobId(String jobId) throws Exception {
        RsJobConfig rsJobConfig = datacollect.getJobById(jobId);
        logger.info("质控服务-病人列表获取jobId:" + jobId);
        Date begin = rsJobConfig.getRepeatStartTime();
        Date end = rsJobConfig.getRepeatEndTime();
        if (end == null) {
            int totalOffset = rsJobConfig.getDelayTime();
            Calendar instance = Calendar.getInstance();
            instance.setTime(new Date(DateUtil.getSysDateTime().getTime()));
            instance.add(Calendar.SECOND, -totalOffset);    //调整截止时间,当前时间-偏移量
            end = instance.getTime();
        }
        if ((end.getTime() - begin.getTime()) <= 0) {
            System.out.println("质控服务-错误:采集结束时间小于开始时间!"); //结束时间小于开始时间时,不获取
            return null;
        }
        end = DateUtil.fromatDateToTimestamp(end);
        if (!rsJobConfig.getJobType().equals("0")) {
            //调整截止时间,当前时间-偏移量
            end = DateUtil.addDate(-rsJobConfig.getDelayTime(), DateUtil.getSysDateTime());
            if ((end.getTime() - begin.getTime()) <= 0) {
                System.out.println("质控服务-错误:采集结束时间小于开始时间!"); //结束时间小于开始时间时,不获取
                return null;
            }
        }
        if (DateUtil.getDifferenceOfDays(begin, end) > 1) {
            end = DateUtil.addDate(1, begin);
            end = DateUtil.fromatDateToTimestamp(end);
        }
        DataGridResult dataGridResult = datacollect.getJobDatasetByJobId(jobId);
        this.datasetList = dataGridResult.getDetailModelList();
        this.schemeVersion = rsJobConfig.getSchemeVersion();
        List<Patient> patientList = getPatientList(begin, end);
        return patientList;
    }
    public List<Patient> getPatientList(Date beginDate, Date endDate) {
        Map<String, Object> condition = new HashMap<>();
        condition.put("beginDate", beginDate);
        condition.put("endDate", endDate);
        Integer count = 0;
        Integer totalCount = 0;
        String message;
        /**
         * 适配基本数据准备
         */
        if (!getDataForPrepare()) {
            message = "适配数据尚未准备";
            logger.error(message);
            return null;
        }
        List<Patient> patientList = dispatch.getPatientList(condition, adapterDataSetMap);
            return patientList;
    }
    /**
     * 上传档案/质控上传
     * @param jobId
     * @param checkType
     * @return
     * @throws Exception
     */
    public Result dataCrawlerByJobId(String jobId,String checkType) throws Exception {
        RsJobConfig rsJobConfig = datacollect.getJobById(jobId);
        String random = UUID.randomUUID().toString();
        logger.info("档案采集上传开始,流水号:" + random + ",jobId:"+jobId);
        logger.info("质控数据采集上传开始,流水号:" + random + ",jobId:"+jobId);
        Date begin = rsJobConfig.getRepeatStartTime();
        Date end = rsJobConfig.getRepeatEndTime();
        if (end == null) {
            int totalOffset = rsJobConfig.getDelayTime();
            Calendar instance = Calendar.getInstance();
            instance.setTime(new Date(DateUtil.getSysDateTime().getTime()));
            instance.add(Calendar.SECOND, - totalOffset);    //调整截止时间,当前时间-偏移量
            end = instance.getTime();
        }
        if ((end.getTime() - begin.getTime()) <= 0) {
            return Result.error("错误:采集上传结束时间小于开始时间!jobId: "+jobId +",start:"+begin.toString()+" end: "+end.toString()); //结束时间小于开始时间时,不获取
        }
        end = DateUtil.fromatDateToTimestamp(end);
        if (!rsJobConfig.getJobType().equals("0")) {
            //调整截止时间,当前时间-偏移量
            end = DateUtil.addDate(-rsJobConfig.getDelayTime(), DateUtil.getSysDateTime());
            if ((end.getTime() - begin.getTime()) <= 0) {
                return Result.success(""); //结束时间小于开始时间时,不获取
                return Result.error("调整截止时间偏移量错误:采集上传结束时间小于开始时间!jobId: " + jobId + ",start:" + begin.toString() + " end: " + end.toString()); //结束时间小于开始时间时,不获取
            }
        }
        if (DateUtil.getDifferenceOfDays(begin, end) > 1) {
            end = DateUtil.addDate(1, begin);
            end = DateUtil.fromatDateToTimestamp(end);
        }
        DataGridResult dataGridResult = datacollect.getJobDatasetByJobId(jobId);
        this.datasetList = dataGridResult.getDetailModelList();
        this.schemeVersion = rsJobConfig.getSchemeVersion();
        Result result = dataCrawler(begin, end);
        Result result = dataCrawler(begin, end,checkType);
        if (!rsJobConfig.getJobType().equals("0")) {
            rsJobConfig.setRepeatStartTime(end);
            rsJobConfig.setRepeatEndTime(DateUtil.formatYMDToYMDHMS(DateUtil.getSysDateTime().toString()));
//            rsJobConfig.setRepeatEndTime(DateUtil.formatYMDToYMDHMS(DateUtil.getSysDateTime().toString()));
        }
        datacollect.updateJob(rsJobConfig);
        logger.info("档案采集上传结束,流水号:" + random + ",jobId:" + jobId + ",message:" + result.getMessage());
        logger.info("质控采集上传结束,流水号:" + random + ",jobId:" + jobId + ",message:" + result.getMessage());
        return result;
    }
    public Result dataCrawler(Date beginDate, Date endDate) {
    public Result dataCrawler(Date beginDate, Date endDate,String checkType) {
        Map<String, Object> condition = new HashMap<>();
        condition.put("beginDate", beginDate);
        condition.put("endDate", endDate);
@ -102,162 +219,127 @@ public class CrawlerManager {
        List<Patient> patientList = dispatch.getPatientList(condition, adapterDataSetMap);
        if (!CollectionUtil.isEmpty(patientList)) {
            totalCount = patientList.size();
            QcDaily qcDaily = genQcDaily(patientList);
            QcPatientIndex qcPatientIndex =null;
            for (Patient patient : patientList) {
                Boolean result = collectProcess(patient);
                if (result) {
                    count++;
                Boolean result = collectProcess(patient,checkType);
                String utcTime = DateUtil.getUtcDate(patient.getReferenceTime(),DateUtil.DEFAULT_YMDHMSDATE_FORMAT);
                qcPatientIndex = new QcPatientIndex(patient.getPatientId(),patient.getEventNo(),utcTime);
                    qcDaily.addTotal(qcPatientIndex,patient.getDataSet());
                    if (result) {
                        count++;
                        qcDaily.addReal(qcPatientIndex,patient.getDataSet());
                    }
                }
            if (qcDaily!=null){
                qcDaily.setOrg_code(patientList.get(0).getOrgCode());
                qcDaily.setInner_version(this.schemeVersion);
                qcDaily.setCreate_date(DateUtil.getCurrentString(DateUtil.DATE_WORLD_FORMAT));
                qcDaily.setTotal_outpatient_num(qcDaily.getTotal_outpatient().size());
                qcDaily.setTotal_hospital_num(qcDaily.getTotal_hospital().size());
                qcDaily.setReal_outpatient_num(qcDaily.getReal_outpatient().size());
                qcDaily.setReal_hospital_num(qcDaily.getReal_hospital().size());
                boolean b = dispatch.uploadQcDaily(objectMapper.convertValue(qcDaily, JsonNode.class),patientList.get(0));
                if (!b){
                    logger.debug("质控服务-日报包上传失败!!!");
                }
            }
        }
        message = "本次采集病人共" + totalCount + "条,成功采集信息"+ count + "条";
        message = "本次上传病人共" + totalCount + "条,成功上传信息"+ count + "条";
        return Result.success(message);
    }
    //单个病人采集上传
    public Boolean collectProcess(Patient patient) {
    //单个病人质控数据采集上传
    public Boolean collectProcess(Patient patient, String collectType) {
        if (!getDataForPrepare()) {
            logger.error("适配数据尚未准备");
            return false;
        }
        patient.setReUploadFlg(StringUtil.toString(false));
        logger.trace("采集->注册->打包上传,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
        logger.trace("采集->质控分析->打包上传,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
        try {
            //getToken
            if (!dispatch.getToken()) {
                logger.error("token获取失败");
                return false;
            }
            //getRemoteVersion
            if (!dispatch.getRemoteVersion(patient.getOrgCode())) {
                logger.error("远程版本获取失败");
                return false;
            }
            if(StringUtil.isEmpty(sysConfig.getVersionMap().get(patient.getOrgCode()))){
                logger.error("版本获取失败");
                return false;
            if (StringUtil.isEmpty(sysConfig.getVersionMap().get(patient.getOrgCode()))) {
                Map.Entry<String, AdapterDataSet> next = adapterDataSetMap.entrySet().iterator().next();
                Integer schemeId = next.getValue().getAdapterDataSetT().getSchemeId();
                AdapterSchemeModel schemeModel = adapterSchemeService.getEntity(AdapterSchemeModel.class, schemeId);
                if (schemeModel.getStdVersion() != null) {
                    SysConfig.getInstance().getVersionMap().put(patient.getOrgCode(), schemeModel.getStdVersion());
                } else {
                    logger.error("版本获取失败");
                    return false;
                }
            }
            Map<String, AdapterDataSet> dataSetMap = new HashMap<>();
            Map<String, JsonNode> dataMap = new HashMap<>();
            int realCount = 0;
            List<String> realList = new ArrayList<>();
            ObjectNode qcDataSet = dispatch.genQcDataSet(patient);//获取质控数据结构
            qcDataSet.put("total_num",adapterDataSetMap.size());
            for (String key : adapterDataSetMap.keySet()) {
                /**
                 * 获取数据
                 */
                AdapterDataSet adapterDataSet = adapterDataSetMap.get(key);
                JsonNode jsonObject = dispatch.fecthData(patient, adapterDataSet);
                String stdVersion = adapterDatasetService.getStdVersionByAdapterDataSet(this.schemeVersion);
                JsonNode jsonObject = dispatch.fecthData(patient, adapterDataSet,stdVersion);
                if (StringUtil.isEmpty(jsonObject)) {
                    continue;
                }
                dataSetMap.put(adapterDataSet.getAdapterDataSetT().getStdDatasetCode(), adapterDataSet);
                dataMap.put(key, jsonObject);
                realCount++;
                realList.add(key);
                /**
                 * 注册病人
                 */
                if (SysConfig.getInstance().getRegisterDataSet().equals(adapterDataSet.getAdapterDataSetT().getStdDatasetCode())) {
                    if (!StringUtil.isEmpty(jsonObject.get("data")) && !StringUtil.isEmpty(jsonObject.get("data").get(0))) {
                        if (!StringUtil.isEmpty(jsonObject.get("data").get(0).get(SysConfig.getInstance().getRegisterIdCardNo()))) {
                            logger.info("注册病人");
                            dispatch.register(patient, jsonObject.toString());
                        }
                    }
                }
//                if (SysConfig.getInstance().getRegisterDataSet().equals(adapterDataSet.getAdapterDataSetT().getStdDatasetCode())) {
//                    if (!StringUtil.isEmpty(jsonObject.get("data")) && !StringUtil.isEmpty(jsonObject.get("data").get(0))) {
//                        if (!StringUtil.isEmpty(jsonObject.get("data").get(0).get(SysConfig.getInstance().getRegisterIdCardNo()))) {
//                            logger.info("注册病人");
//                            dispatch.register(patient, jsonObject.toString());
//                        }
//                    }
//                }
            }
            logger.info("采集病人成功,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
            ObjectMapper objectMapper = new ObjectMapper();
            qcDataSet.put("real_num",realCount);
            qcDataSet.set("total", objectMapper.convertValue(adapterDataSetMap.keySet().toArray(), JsonNode.class));
            qcDataSet.set("real", objectMapper.convertValue(realList, JsonNode.class));
            boolean b = dispatch.toQcDataSetFile(qcDataSet, patient);//生成数据集质控文件
            logger.info("上传档案流程-获取病人信息成功,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
            //上传档案
            logger.info("上传病人档案");
            logger.info("上传病人档案及质控数据");
            try {
                if (!CollectionUtil.isEmpty(dataMap.keySet())) {
                    if (!dispatch.upload(dataMap, patient, dataSetMap)) {
                        logger.error("上传档案失败");
                        return false;
                    }
                }
            } catch (Exception e) {
                logger.error("档案上传失败,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
                return false;
            }
        } catch (Exception e) {
            logger.error("采集病人失败,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo(), e);
            return false;
        }
        return true;
    }
    //TOADD 单个病人采集上传(包含blob)
    public Boolean collectProcess2(Patient patient) {
        if (!getDataForPrepare()) {
            logger.error("适配数据尚未准备");
            return false;
        }
        patient.setReUploadFlg(StringUtil.toString(false));
        logger.trace("采集->注册->打包上传,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
        try {
            //getToken
            if (!dispatch.getToken()) {
                logger.error("token获取失败");
                return false;
            }
            //getRemoteVersion
//            if (!dispatch.getRemoteVersion(patient.getOrgCode())) {
//                logger.error("远程版本获取失败");
//                return false;
//            }
            if(StringUtil.isEmpty(sysConfig.getVersionMap().get(patient.getOrgCode()))){
                logger.error("版本获取失败");
                return false;
            }
            Map<String, AdapterDataSet> dataSetMap = new HashMap<>();
            Map<String, JsonNode> dataMap = new HashMap<>();
                    if (StringUtil.isEmpty(collectType)) {
                        //采集档案
                        if (!dispatch.upload(dataMap, patient, dataSetMap, stdDataSetMap)) {
                            logger.error("上传档案失败");
                            return false;
                        }
                    } else {
                        //TODO 规则检验
                        if (!dispatch.uploadQcData(dataMap, patient, dataSetMap, stdDataSetMap,collectType)) {
                            logger.error("上传质控包失败");
                            return false;
                        }
            if (adapterDataSetMap.containsKey(unstructured)){
                //TODO 非结构化档处理
            }else {
                //TODO 结构化档案处理
            }
            for (String key : adapterDataSetMap.keySet()) {
                /**
                 * 获取数据
                 */
                AdapterDataSet adapterDataSet = adapterDataSetMap.get(key);
                JsonNode jsonObject = dispatch.fecthData(patient, adapterDataSet);
                if (StringUtil.isEmpty(jsonObject)) {
                    continue;
                }
                dataSetMap.put(adapterDataSet.getAdapterDataSetT().getStdDatasetCode(), adapterDataSet);
                dataMap.put(key, jsonObject);
                /**
                 * 注册病人
                 */
                if (SysConfig.getInstance().getRegisterDataSet().equals(adapterDataSet.getAdapterDataSetT().getStdDatasetCode())) {
                    if (!StringUtil.isEmpty(jsonObject.get("data")) && !StringUtil.isEmpty(jsonObject.get("data").get(0))) {
                        if (!StringUtil.isEmpty(jsonObject.get("data").get(0).get(SysConfig.getInstance().getRegisterIdCardNo()))) {
                            logger.info("注册病人");
                            dispatch.register(patient, jsonObject.toString());
                        if (!dispatch.upload(dataMap, patient, dataSetMap, stdDataSetMap)) {
                            logger.error("上传档案失败");
                            return false;
                        }
                    }
                }
            }
            logger.info("采集病人成功,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
            //上传档案
            logger.info("上传病人档案");
            try {
                if (!CollectionUtil.isEmpty(dataMap.keySet())) {
                    if (!dispatch.upload(dataMap, patient, dataSetMap)) {
                        logger.error("上传档案失败");
                        return false;
                    }
                }
            } catch (Exception e) {
                logger.error("档案上传失败,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
                logger.error("质控数据上传失败,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo());
                return false;
            }
        } catch (Exception e) {
            logger.error("采集病人失败,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo(), e);
            logger.error("采集质控数据失败,patient_id:" + patient.getPatientId() + ", event_no:" + patient.getEventNo(), e);
            return false;
        }
        return true;
@ -265,16 +347,19 @@ public class CrawlerManager {
    public Boolean getDataForPrepare() {
        if (adapterFlg) {
        if (adapterFlg && stdFlg) {
            return true;
        }
        AdapterBase.setAdapterMetadataService(adapterMetadataService);
        AdapterBase.setAdapterDictService(adapterDictService);
        AdapterBase.setAdapterSchemeVersionService(adapterSchemeVersionService);
        StdBase.setStdMetadataService(StdMetadataService);
        logger.info("适配基本相关数据准备");
        try {
            adapterDataSetMap = new HashMap<>();
            stdDataSetMap = new HashMap<>();
            AdapterVersion adapterVersion;
            StandardVersion standardVersion = null;
            List<AdapterDatasetModel> adapterDataSetModelList;
            if (!CollectionUtil.isEmpty(datasetList)) {
                /**
@ -283,14 +368,27 @@ public class CrawlerManager {
                adapterVersion = new AdapterVersion(schemeVersion);
                List<Integer> datasetIdList = new ArrayList<>();
                for (DictItem dictItem : datasetList) {
                    datasetIdList.add(Integer.parseInt(dictItem.getCode()));
                    Integer dataSetId = Integer.parseInt(dictItem.getCode());
                    datasetIdList.add(dataSetId);
                }
                adapterDataSetModelList = adapterDatasetService.getAdapterDatasetByAdapterIdList(adapterVersion, datasetIdList);
                if (adapterDataSetModelList != null && !adapterDataSetModelList.isEmpty()) {
                    AdapterSchemeModel adapterScheme = adapterSchemeService.getEntity(AdapterSchemeModel.class, adapterDataSetModelList.get(0).getSchemeId());
                    standardVersion = new StandardVersion(adapterScheme.getStdVersion());
                    for (DictItem dictItem : datasetList) {
                        Integer dataSetId = Integer.parseInt(dictItem.getCode());
                        if (!stdMetaDataMap.containsKey(dataSetId)) {
                            stdMetaDataMap.put(dataSetId, new StdDataSet(dataSetId, standardVersion).getStdMetaDataModelList());
                        }
                    }
                }
            } else {
                /**
                 * 推模式接口调用,默认只使用最新版本的适配
                 */
                AdapterSchemeVersionModel adapterSchemeVersionModel = adapterSchemeVersionService.getEhrAdapterVersionLasted();
                if (adapterSchemeVersionModel == null) {
                    logger.error("获取最新ehr适配版本错误");
                    return false;
@ -301,8 +399,17 @@ public class CrawlerManager {
                if (adapterDataSetVersionMap.get(schemeVersion) != null) {
                    adapterDataSetMap = adapterDataSetVersionMap.get(schemeVersion);
                    adapterFlg = true;
                }
                if (stdDataSetVersionMap.get(schemeVersion) != null) {
                    stdDataSetMap = stdDataSetVersionMap.get(schemeVersion);
                    stdFlg = true;
                }
                if (adapterFlg && stdFlg) {
                    return true;
                }
                Map<String, String> condition = new HashMap<>();
                condition.put("column", "adapter_dataset_code");
                ObjectMapper mapper = new ObjectMapper();
@ -328,9 +435,12 @@ public class CrawlerManager {
             */
            for (AdapterDatasetModel adapterDatasetModel : adapterDataSetModelList) {
                adapterDataSetMap.put(adapterDatasetModel.getStdDatasetCode(), new AdapterDataSet(adapterDatasetModel, adapterVersion, adapterDictEntryModelMap));
                stdDataSetMap.put(adapterDatasetModel.getStdDatasetCode(), new StdDataSet(adapterDatasetModel.getStdDatasetId(), standardVersion));
            }
            adapterDataSetVersionMap.put(schemeVersion, adapterDataSetMap);
            stdDataSetVersionMap.put(schemeVersion, stdDataSetMap);
            adapterFlg = true;
            stdFlg = true;
            return true;
        } catch (Exception e) {
            return false;
@ -361,4 +471,18 @@ public class CrawlerManager {
    public void setDatasetList(List<DictItem> datasetList) {
        this.datasetList = datasetList;
    }
    public QcDaily genQcDaily(List<Patient> patients){
        QcDaily qcDaily = new QcDaily();
        if (patients!=null && patients.isEmpty()){
            qcDaily.setOrg_code(patients.get(0).getOrgCode());
            qcDaily.setInner_version(SysConfig.getInstance().getVersionMap().get(patients.get(0).getOrgCode()));
            qcDaily.setCreate_date(DateUtil.getUtcDate(new Date()));
        }
        return qcDaily;
    }
}

+ 158 - 14
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/DataCollectDispatcher.java

@ -16,6 +16,7 @@ import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.rest.common.format.DataSetTransformer;
import com.yihu.hos.rest.models.crawler.adapter.AdapterDataSet;
import com.yihu.hos.rest.models.crawler.adapter.AdapterMetaData;
import com.yihu.hos.rest.models.crawler.adapter.StdDataSet;
import com.yihu.hos.rest.models.crawler.config.SysConfig;
import com.yihu.hos.rest.models.crawler.patient.Patient;
import com.yihu.hos.rest.models.crawler.patient.PatientIdentity;
@ -43,6 +44,7 @@ public class DataCollectDispatcher {
    private static String unstructured_main = "unstructured_main";
    private static String unstructured_thin = "unstructured_thin";
    private static String gridFsDB = "files";
    private DataCollectDispatcher() {
    }
@ -54,7 +56,7 @@ public class DataCollectDispatcher {
    }
    public Boolean getToken () {
    public Boolean getToken() {
        try {
            token = EsbHttp.getToken();
            if (StringUtil.isEmpty(token)) {
@ -67,7 +69,7 @@ public class DataCollectDispatcher {
        }
    }
    public Boolean getRemoteVersion (String orgCode) {
    public Boolean getRemoteVersion(String orgCode) {
        try {
            if (StringUtil.isEmpty(SysConfig.getInstance().getVersionMap().get(orgCode))) {
                String stdVersion = EsbHttp.getRemoteVersion(orgCode);
@ -137,6 +139,7 @@ public class DataCollectDispatcher {
                        patient.setEventNo(eventNo);
                        patient.setReferenceTime(refTime);
                        patient.setOrgCode(orgCode);
                        patient.setDataSet(key);
                        patientList.add(patient);
                    }
                }
@ -163,7 +166,7 @@ public class DataCollectDispatcher {
        if (adapterDataSet.isHaveEventNo()) {
            AdapterMetaData adapterMetaData = adapterDataSet.getAdapterMetaDataMap().get(patientIdentity.getEventNoCode());
            propertyMap.put(SqlConstants.EVENT_NO,  adapterMetaData.getAdapterMetadataModel().getStdMetadataCode().toUpperCase());
            propertyMap.put(SqlConstants.EVENT_NO, adapterMetaData.getAdapterMetadataModel().getStdMetadataCode().toUpperCase());
        } else {
            logger.error("采集病人列表数据集必须有event_no.");
            return null;
@ -223,11 +226,12 @@ public class DataCollectDispatcher {
    /**
     * 根据编排任务进行采集
     *
     * @param patient
     * @param adapterDataSet
     * @return
     */
    public JsonNode fecthData(Patient patient, AdapterDataSet adapterDataSet) {
    public JsonNode fecthData(Patient patient, AdapterDataSet adapterDataSet,String stdVersion) {
        try {
            ObjectMapper mapper = new ObjectMapper();
            List<EhrCondition> queryParams = new ArrayList<>();
@ -274,9 +278,9 @@ public class DataCollectDispatcher {
                jsonObject.put("event_no", patient.getEventNo());
                String agencyCode = patient.getOrgCode();
                jsonObject.put("org_code", agencyCode);
                jsonObject.put("inner_version", SysConfig.getInstance().getVersionMap().get(patient.getOrgCode()));
                jsonObject.put("create_date", DateUtil.toString(new Date(), DateUtil.DEFAULT_YMDHMSDATE_FORMAT));
                jsonObject.put("event_time", patient.getReferenceTime());//DateUtil.toString(patient.getReferenceTime(), DateUtil.DEFAULT_YMDHMSDATE_FORMAT)
                jsonObject.put("inner_version", stdVersion);
                jsonObject.put("create_date", DateUtil.getUtcDate(new Date()));
                jsonObject.put("event_time", DateUtil.getUtcDate(patient.getReferenceTime(), DateUtil.DEFAULT_YMDHMSDATE_FORMAT));//DateUtil.toString(patient.getReferenceTime(), DateUtil.DEFAULT_YMDHMSDATE_FORMAT)
                if (StringUtil.isEmpty(patient.getReUploadFlg())) {
                    jsonObject.put("reUploadFlg", LogicValues.LOGIC_FALSE);
                } else {
@ -318,12 +322,13 @@ public class DataCollectDispatcher {
        return EsbHttp.register(patient, data, token);
    }
    public Boolean upload(Map<String, JsonNode> dataMap, Patient patient, Map<String, AdapterDataSet> dataSetMap) {
    public Boolean upload(Map<String, JsonNode> dataMap, Patient patient, Map<String, AdapterDataSet> dataSetMap, Map<String, StdDataSet> stdDataSetMap) {
        Boolean result = true;
        try {
            DataSetTransformer dataTransformer = new DataSetTransformer();
            for (String key : dataMap.keySet()) {
                dataTransformer.setData(dataMap.get(key));
                dataTransformer.transferTimeFormat(stdDataSetMap);
                if (!toFile(dataTransformer, patient, "origin")) {
                    logger.info("存储原始文件失败:patient_id=" + patient.getPatientId()
                            + "event_no=" + patient.getEventNo());
@ -343,6 +348,7 @@ public class DataCollectDispatcher {
                result = false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            result = false;
        }
        return result;
@ -406,11 +412,12 @@ public class DataCollectDispatcher {
            MongodbQuery mdbSecond = new MongodbQuery("origin");
            DBList listSecond = mdbSecond.query(qe);
            JSONObject jo=new JSONObject();
            JSONObject jo = new JSONObject();
            jo.put("detailModelList", list.getList().toString());
            jo.put("originList",listSecond.getList().toString());
            jo.put("originList", listSecond.getList().toString());
            return jo.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
@ -447,7 +454,7 @@ public class DataCollectDispatcher {
            paramsNode.put("tableCode", adapterDataSet.getAdapterDataSetT().getStdDatasetCode());
            paramsNode.put("condition", mapper.writeValueAsString(queryParams));
            Map<String,String> formParams = new HashMap<>();
            Map<String, String> formParams = new HashMap<>();
//            formParams.add(new BasicNameValuePair("secret", secret));
            formParams.put("api", "collectionData");
            formParams.put("param", mapper.writeValueAsString(paramsNode));
@ -487,6 +494,7 @@ public class DataCollectDispatcher {
    /**
     * 生成非结构化索引文件document.json
     *
     * @param dataTransformer
     * @param patient
     * @param fileName
@ -506,13 +514,149 @@ public class DataCollectDispatcher {
        return writeFile;
    }
    public List<ObjectId> getObjectIds(JsonNode jsonNode){
    public List<ObjectId> getObjectIds(JsonNode jsonNode) {
        List<ObjectId> objectIds = new ArrayList<>();
        if (jsonNode.isArray()){
            for (JsonNode data:jsonNode){
        if (jsonNode.isArray()) {
            for (JsonNode data : jsonNode) {
                objectIds.add(new ObjectId(data.get("CONTENT").toString()));
            }
        }
        return objectIds;
    }
    /* ******************************* 以下为质控规则执行的相关逻辑 ************************************** */
    /**
     * 质控数据生成&上传
     *
     * @param dataMap       数据集-数据元数据
     * @param patient       病人索引信息
     * @param dataSetMap    适配数据集列表
     * @param stdDataSetMap 标准数据集列表
     * @param checkType     规则检验类型
     * @return
     */
    public Boolean uploadQcData(Map<String, JsonNode> dataMap, Patient patient, Map<String, AdapterDataSet> dataSetMap, Map<String, StdDataSet> stdDataSetMap, String checkType) {
        Boolean result = true;
        try {
            DataSetTransformer dataTransformer = new DataSetTransformer();
            String[] split = checkType.split(",");
            for (String type : split) {
                for (String key : dataMap.keySet()) {
                    dataTransformer.setData(dataMap.get(key).deepCopy());
                    dataTransformer.transferTimeFormat(stdDataSetMap);
                    dataTransformer.genQcData(dataSetMap, type);
                    if (!toQcFile(dataTransformer, patient, type)) {
                        logger.info("存储标准文件失败:patient_id=" + patient.getPatientId()
                                + "event_no=" + patient.getEventNo());
                        result = false;
                        break;
                    }
                }
            }
            QCDataUpload qcDatapload = new QCDataUpload();
            if (!qcDatapload.uploadQc(patient, QCDataIndex.IndexType.QC_TYPE_DATASET)) {
                result = false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            result = false;
        }
        return result;
    }
    /**
     * 生成质控详情文件
     * @param dataTransformer
     * @param patient
     * @param ckeckType
     * @return
     */
    public boolean toQcFile(DataSetTransformer dataTransformer, Patient patient, String ckeckType) {
        JsonNode jsonObject = dataTransformer.getQcObject();
        QCDataIndex qcDataIndex = new QCDataIndex(patient, DateUtil.getCurrentString(DateUtil.DEFAULT_NOW_STRING_FORMAT));
        String filePath = qcDataIndex.createDataIndex(ckeckType, PatientCDAIndex.FileType.JSON);
        boolean writeFile = false;
        try {
            writeFile = FileUtil.writeFile(filePath, jsonObject.toString(), "UTF-8");
        } catch (IOException e) {
            logger.info("存储临时文件失败.");
            logger.error("", e);
        }
        return writeFile;
    }
    /**
     * 生成质控日报文件
     * @param jsonObject    采集的数据内容
     * @param patient
     * @return
     */
    public boolean toQcDataSetFile(JsonNode jsonObject, Patient patient) {
        QCDataIndex qcDataSetIndex = new QCDataIndex(patient , DateUtil.getCurrentString(DateUtil.DEFAULT_NOW_STRING_FORMAT));
        String filePath = qcDataSetIndex.createQcDataSetIndex(PatientCDAIndex.FileType.JSON);
        boolean writeFile = false;
        try {
            writeFile = FileUtil.writeFile(filePath, jsonObject.toString(), "UTF-8");
        } catch (IOException e) {
            logger.info("存储质控-数据集实收/应收情况临时文件失败.");
            logger.error("", e);
        }
        return writeFile;
    }
    public boolean toDailyFile(JsonNode jsonObject, Patient patient,String createDate) {
        QCDataIndex qcDaliyIndex = new QCDataIndex(patient,createDate);
        String filePath = qcDaliyIndex.createQcDaliyIndex(PatientCDAIndex.FileType.JSON);
        boolean writeFile = false;
        try {
            writeFile = FileUtil.writeFile(filePath, jsonObject.toString(), "UTF-8");
        } catch (IOException e) {
            logger.info("存储质控-生成日报包临时文件失败.");
            logger.error("", e);
        }
        return writeFile;
    }
    /**
     * 上传日报包
     * @param jsonObject
     * @param patient
     * @return
     */
    public Boolean uploadQcDaily(JsonNode jsonObject, Patient patient) {
        boolean result = false;
        String currentString = DateUtil.getCurrentString(DateUtil.DEFAULT_NOW_STRING_FORMAT);
        boolean b = toDailyFile(jsonObject, patient,currentString);
        QCDataUpload qcDatapload = new QCDataUpload();
        if (b) {
            result = qcDatapload.uploadQcDailyZip(patient, QCDataIndex.IndexType.QC_TYPE_DAILY,currentString);
        }else {
            logger.debug("质控服务-日报包文件生成失败!");
        }
        return result;
    }
    public ObjectNode genQcDataSet(Patient patient) {
        try {
            ObjectMapper mapper = new ObjectMapper();
            ObjectNode jsonObject = mapper.createObjectNode();
            jsonObject.put("patient_id", patient.getPatientId());
            jsonObject.put("event_no", patient.getEventNo());
            String agencyCode = patient.getOrgCode();
            jsonObject.put("org_code", agencyCode);
            jsonObject.put("inner_version", SysConfig.getInstance().getVersionMap().get(patient.getOrgCode()));
            jsonObject.put("create_date", DateUtil.getUtcDate(new Date()));
            jsonObject.put("event_time", DateUtil.getUtcDate(patient.getReferenceTime(), DateUtil.DEFAULT_YMDHMSDATE_FORMAT));//DateUtil.toString(patient.getReferenceTime(), DateUtil.DEFAULT_YMDHMSDATE_FORMAT)
            return jsonObject;
        } catch (Exception e) {
            logger.error("", e);
        }
        return null;
    }
}//end DataCollectDispatcher

+ 1 - 0
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/DatacollectService.java

@ -118,6 +118,7 @@ public class DatacollectService {
                        logStr.append(message);
                        success++;
                    } catch (Exception ex) {
                        ex.printStackTrace();
                        logger.info("异常:" + ex.getMessage());
                        logStr.append(ex.getMessage() + "\n");
                    }

+ 52 - 15
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/EsbHttp.java

@ -159,29 +159,29 @@ public class EsbHttp {
     */
    public static String getPublicKey(String orgCode) {
        try {
            String token = getToken();
//            String token = getToken();
            if (!StringUtil.isEmpty(SysConfig.getInstance().getPublicKeyMap().get(orgCode))) {
                return SysConfig.getInstance().getPublicKeyMap().get(orgCode);
            }
            Map<String, String> header = new HashMap<>();
            header.put("Authorization", "Basic " + EHRHttpHelper.clientKey);
            Map<String, String> paramMap = new HashMap<>();
            paramMap.put("org_code", orgCode);
            paramMap.put("token", token);
            String publicKeyMethod = EHRHttpHelper.defaultHttpUrl + "/organizations/" + orgCode + "/key";
            paramMap.put("org_code", SysConfig.orgcode);
//            paramMap.put("token", token);
            String publicKeyMethod = EHRHttpHelper.httpCouldUrl + "/organizations/" + SysConfig.orgcode + "/key";
            HTTPResponse response = EHRHttpHelper.get(publicKeyMethod, paramMap, header);
            if (response != null && response.getStatusCode() == HttpStatus.SC_OK) {
                JSONObject json = new JSONObject(response.getBody());
                if (json.has("publicKey")) {
                    String publicKey = json.getString("publicKey");
                    SysConfig.getInstance().getPublicKeyMap().put(orgCode, publicKey);
                    SysConfig.getInstance().getPublicKeyMap().put(SysConfig.orgcode, publicKey);
                    return publicKey;
                } else {
                    logger.info("获取公钥失败,返回未包含publicKey。");
                    logger.info("获取公钥失败,返回未包含publicKey。机构代码:"+SysConfig.orgcode);
                    return null;
                }
            } else {
                String msg = "获取公钥失败。";
                String msg = "获取公钥失败。机构代码:"+SysConfig.orgcode;
                if (response != null) {
                    msg += "(错误代码:" + response.getStatusCode() + ",错误信息:" + response.getBody() + ")";
@ -191,6 +191,7 @@ public class EsbHttp {
            }
        } catch (Exception e) {
            logger.info(e.getMessage());
            e.printStackTrace();
            return null;
        }
    }
@ -245,7 +246,7 @@ public class EsbHttp {
                    return false;
                } else {
                    String idCord = p.getString(colName);
                    String registerMethod = EHRHttpHelper.defaultHttpUrl + "/patients/" + idCord;
                    String registerMethod = EHRHttpHelper.httpCouldUrl + "/patients/" + idCord;
                    if (StringUtil.isEmpty(data)) {
                        logger.info("注册病人信息请求失败:无具体病人信息,patient_id=" + patient.getPatientId() + ", event_no=" + patient.getEventNo());
                        return false;
@ -253,7 +254,7 @@ public class EsbHttp {
                    Map<String, String> paramMap = new HashMap<>();
                    paramMap.put("demographic_id", idCord);
                    paramMap.put("json", data);
                    paramMap.put("token", token);
//                    paramMap.put("token", token);
                    HTTPResponse response = EHRHttpHelper.post(registerMethod, paramMap, header);
                    if (response != null && response.getStatusCode() == HttpStatus.SC_OK) {
@ -275,6 +276,7 @@ public class EsbHttp {
            }
        } catch (Exception e) {
            logger.info("注册病人信息请求失败." + e.getMessage());
            e.printStackTrace();
            return false;
        }
    }
@ -289,8 +291,8 @@ public class EsbHttp {
            Map<String, String> formParams = new HashMap<>();
            formParams.put("md5", fileMd5);
            formParams.put("package_crypto", encryptPwd);
            formParams.put("org_code", patient.getOrgCode());
            formParams.put("token", token);
            formParams.put("org_code", SysConfig.orgcode);
//            formParams.put("token", token);
            Map<String, String> header = new HashMap<>();
            header.put("Authorization", "Basic " + EHRHttpHelper.clientKey);
            header.put("User-Agent", "client " + EHRHttpHelper.clientId);
@ -311,6 +313,45 @@ public class EsbHttp {
        } catch (Exception e) {
            logger.info("上传病人档案异常,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
            logger.error(e.getCause().toString());
            e.printStackTrace();
            return false;
        }
    }
    /**
     *
     * 上传质控包/日报包
     */
    public static boolean uploadQC(Patient patient, File file, String encryptPwd, String type) {
        try {
            String uploadMethod = EHRHttpHelper.httpAdminUrl + "/admin/report/receiveReportFile";
            String fileMd5 = MD5.getMd5ByFile(file);
            Map<String, String> formParams = new HashMap<>();
            formParams.put("md5", fileMd5);
            formParams.put("package_crypto", encryptPwd);
            formParams.put("org_code", SysConfig.orgcode);
            formParams.put("type", type);// 文件包类型 1 质控包, 2 日报包
            Map<String, String> header = new HashMap<>();
            header.put("Authorization", "Basic " + EHRHttpHelper.clientKey);
            header.put("User-Agent", "client " + EHRHttpHelper.clientId);
            HTTPResponse response = EHRHttpHelper.postFile(uploadMethod, formParams, file.getAbsolutePath(), header);
            if (response != null && response.getStatusCode() == HttpStatus.SC_OK) {
                logger.info("上传质控数据成功,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
                return true;
            } else {
                String msg = "上传质控数据请求失败,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo();
                if (response != null) {
                    msg += "(错误代码:" + response.getStatusCode() + ",错误信息:" + response.getBody() + ")";
                }
                logger.info(msg);
                return false;
            }
        } catch (Exception e) {
            logger.info("上传质控数据异常,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
            logger.error(e.getCause().toString());
            e.printStackTrace();
            return false;
        }
    }
@ -405,8 +446,4 @@ public class EsbHttp {
        }
    }
}

+ 7 - 2
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/PatientCDAUpload.java

@ -42,6 +42,7 @@ public class PatientCDAUpload {
            boolean result = upload(patient, zipFile, token);
            if (!result) {
                logger.info("上传病人档案失败,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
                 FileUtil.deleteDirectory(new File(zipFile.directory));
                return result;
            }
@ -72,7 +73,11 @@ public class PatientCDAUpload {
            String pwd = uuidPwd.toString();
            String publicKey = SysConfig.getInstance().getPublicKeyMap().get(patient.getOrgCode());
            if(publicKey== null ||  publicKey.length() == 0) {
                publicKey = EsbHttp.getPublicKey(patient.getOrgCode());
                publicKey = EsbHttp.getPublicKey(SysConfig.orgcode);
                if (publicKey==null){
                    System.out.println("公钥获取失败,公钥为空.请检查机构代码和请求地址的正确性!,orgCode:"+SysConfig.orgcode);
                    return null;
                }
                SysConfig.getInstance().getPublicKeyMap().put(patient.getOrgCode(), publicKey);
            }
@ -93,7 +98,7 @@ public class PatientCDAUpload {
            return zipFile;
        } catch (Exception e) {
            logger.error("从data目录生成zip数据时,压缩文件异常");
            logger.error(e.getCause().toString());
            e.printStackTrace();
        }
        return null;

+ 138 - 0
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/QCDataIndex.java

@ -0,0 +1,138 @@
package com.yihu.hos.rest.services.crawler;
import com.yihu.hos.rest.models.crawler.config.SysConfig;
import com.yihu.hos.rest.models.crawler.patient.Patient;
import java.util.UUID;
/**
 * 自控文件索引类,用于生成文件路径,不确保文件路径存在
 *
 * @author Air
 * @version 1.0
 * @created 2015.07.01 18:06
 */
public class QCDataIndex {
    private Patient patient;
    private String createDate;
    public QCDataIndex(Patient patient,String createDate) {
        this.patient = patient;
        this.createDate = createDate;
    }
    public String getDirectory() {
        String dir = SysConfig.getInstance().getTempFile();
        return dir + "/qc_data/" + patient.getOrgCode() + "/" + patient.getOrgCode() + "-" + patient.getPatientId() + "-" + patient.getEventNo();
    }
    /**
     * 生成自控数据目录
     * orgCode-pateintId-eventNo/data
     *
     * @return
     */
    public String getDataDirectory() {
        return getDirectory() + "/" + IndexType.DATA;
    }
    public String createIndex(String indexType, String fileType) {
        UUID uuid = UUID.randomUUID();
        String index = uuid.toString();
        String dir = getDirectory() + "/" + indexType;
        return dir + "/" + index + fileType;
    }
    public String createDataSetIndex(String fileType) {
        String index = "qc_datasets";
        String dir = getDirectory() + "/" + IndexType.DATA;
        return dir + "/" + index + fileType;
    }
    /**
     * 生成最终档案包目录
     * qc_data/empty
     * qc_data/error
     * qc_data/other
     *
     * @param indexType
     * @param fileType
     * @return
     */
    public String createDataIndex(String indexType, String fileType) {
        return createIndex(IndexType.DATA + "/" + indexType, fileType);
    }
    /**
     * 质控-数据集实收应收情况
     *
     * @param fileType
     * @return
     */
    public String createQcDataSetIndex(String fileType) {
        return createDataSetIndex(fileType);
    }
    /* ************************* 日报包路径 *************************** */
    //基础目录
    public String getDailyDir() {
        String dir = SysConfig.getInstance().getTempFile();
        return dir + "/qc_daliy/" + createDate ;
    }
    public String getDataDailyDir() {
        return getDailyDir() + "/" + IndexType.DATA;
    }
    /**
     *  data 文件目录
     * @param fileType
     * @return
     */
    public String createQcDaliyIndex(String fileType) {
        String index = "qc_events";
        String dir = getDailyDir()+ "/" + IndexType.DATA;
        return dir + "/" + index + fileType;
    }
    /**
     * 生成日报质控包目录
     *
     * @param indexType
     * @param fileType
     * @return
     */
    public String createQcDailyIndex(String indexType, String fileType) {
        return createDailyIndex( indexType, fileType);
    }
    public String createDailyIndex(String indexType, String fileType) {
        UUID uuid = UUID.randomUUID();
        String index = uuid.toString();
        String dir = getDailyDir() + "/" + indexType;
        return dir + "/" + index + fileType;
    }
    public class FileType {
        public final static String XML = ".xml";
        public final static String JSON = ".json";
        public final static String ZIP = ".zip";
    }
    public class IndexType {
        public final static String QC_TYPE_DATASET = "1";//质控包类型-数据集
        public final static String QC_TYPE_DAILY = "2";//质控包类型-日报
        public final static String DATA = "data";   //病人档案数据目录
        public final static String CDA = "cda";     //病人cda档案目录
        public final static String STANDARD = "standard";   //病人标准档案目录
        public final static String ORIGIN = "origin";   //病人原始档案目录
        public final static String ZIP = "zip";         //病人压缩包目录
        public final static String DOCUMENT = "document";
    }
}

+ 167 - 0
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/QCDataUpload.java

@ -0,0 +1,167 @@
package com.yihu.hos.rest.services.crawler;
import com.yihu.hos.core.compress.Zipper;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.core.encrypt.RSA;
import com.yihu.hos.core.file.FileUtil;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.rest.models.crawler.config.SysConfig;
import com.yihu.hos.rest.models.crawler.patient.Patient;
import java.io.File;
import java.security.Key;
import java.util.UUID;
/**
 * 质控包上传
 *
 * @author Air
 * @version 1.0
 * @created 2015.07.06 15:58
 */
public class QCDataUpload {
    private static Logger logger = LoggerFactory.getLogger(QCDataUpload.class);
    /**
     * 上传质控 日报包
     * @param patient
     * @param type      质控包类型  1 质控包, 2 日报包
     * @param currentString      文件夹随机码
     * @return
     */
    public Boolean uploadQcDailyZip(Patient patient, String type,String currentString) {
        ZipFile zipFile = zip(patient,type,currentString);
        try {
            if (zipFile == null || zipFile.file == null) {
                logger.info("压缩质控日报数据失败,质控日报数据未生成,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
                return false;
            }
            boolean result = uploadQc(patient, zipFile, type);
            if (!result) {
                logger.info("上传质控日报数据失败,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
                result = FileUtil.deleteDirectory(new File(zipFile.directory));
                return result;
            }
            logger.trace(zipFile.directory);
            result = FileUtil.deleteDirectory(new File(zipFile.directory));
            if (!result) {
                logger.info("删除质控日报临时文件失败,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
                return result;
            }
        } catch (Exception e) {
            logger.error("质控服务-日报包上传异常",e);
            FileUtil.deleteDirectory(new File(zipFile.directory));
            return false;
        }
        return true;
    }
    /**
     *  上传自控数据档案包
     * @param patient   病人信息
     * @param type      文件包类型 1 质控包, 2 日报包
     * @return
     */
    public Boolean uploadQc(Patient patient, String type) {
        ZipFile zipFile = zip(patient,type, DateUtil.getCurrentString(DateUtil.DEFAULT_NOW_STRING_FORMAT));
        try {
            if (zipFile == null || zipFile.file == null) {
                logger.info("压缩质控数据失败,质控数据未生成,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
                return false;
            }
            boolean result = uploadQc(patient, zipFile, type);
            if (!result) {
                logger.info("上传质控数据失败,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
                result = FileUtil.deleteDirectory(new File(zipFile.directory));
                return result;
            }
            logger.trace(zipFile.directory);
            result = FileUtil.deleteDirectory(new File(zipFile.directory));
            if (!result) {
                logger.info("删除质控临时文件失败,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
                return result;
            }
        } catch (Exception e) {
            FileUtil.deleteDirectory(new File(zipFile.directory));
            return false;
        }
        return true;
    }
    /**
     * @param patient
     * @return
     * @modify 从质控数据目录生成zip数据
     */
    public ZipFile zip(Patient patient,String type,String currentString) {
        try {
            QCDataIndex qcDataIndex = new QCDataIndex(patient, currentString);
            String dataDirectory = null;
            String filePath = null;
            String directory = null;
            if (QCDataIndex.IndexType.QC_TYPE_DATASET.equals(type)){
                dataDirectory = qcDataIndex.getDataDirectory();
                directory = qcDataIndex.getDirectory();
                filePath = qcDataIndex.createIndex(PatientCDAIndex.IndexType.ZIP, PatientCDAIndex.FileType.ZIP);
            }else if (QCDataIndex.IndexType.QC_TYPE_DAILY.equals(type)){
                dataDirectory = qcDataIndex.getDataDailyDir();
                directory = qcDataIndex.getDailyDir();
                filePath = qcDataIndex.createQcDailyIndex(PatientCDAIndex.IndexType.ZIP, PatientCDAIndex.FileType.ZIP);
            }
            UUID uuidPwd = UUID.randomUUID();
            String pwd = uuidPwd.toString();
            String publicKey = SysConfig.getInstance().getPublicKeyMap().get(patient.getOrgCode());
            if(publicKey== null ||  publicKey.length() == 0) {
                publicKey = EsbHttp.getPublicKey(patient.getOrgCode());
                SysConfig.getInstance().getPublicKeyMap().put(patient.getOrgCode(), publicKey);
            }
            Key key = RSA.genPublicKey(publicKey);
            if (key == null) {
                logger.info("压缩质控文件错误,获取公钥错误.");
                return null;
            }
            ZipFile zipFile = new ZipFile();
            zipFile.encryptPwd = RSA.encrypt(pwd, key);
            Zipper zipper = new Zipper();
            zipFile.file = zipper.zipFileForAll(new File(dataDirectory), filePath, pwd);
            zipFile.dataDirectory = dataDirectory;
            zipFile.directory = directory;
            return zipFile;
        } catch (Exception e) {
            logger.error("从质控目录生成zip数据时,压缩文件异常");
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 上传质控包/日报包
     * @param patient
     * @param zipFile
     * @param type      文件类型 :1-质控包,2-日报包
     * @return
     */
    private boolean uploadQc(Patient patient, ZipFile zipFile, String type) {
        return EsbHttp.uploadQC(patient, zipFile.file, zipFile.encryptPwd, type);
    }
    private class ZipFile {
        public File file;
        public String encryptPwd;
        public String directory;
        public String dataDirectory;
    }
}

+ 36 - 0
hos-rest/src/main/java/com/yihu/hos/rest/services/crawler/QcRuleService.java

@ -0,0 +1,36 @@
package com.yihu.hos.rest.services.crawler;
import com.yihu.hos.rest.models.crawler.qc.QcRuleModel;
import com.yihu.hos.web.framework.dao.SQLGeneralDAO;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("QcRuleService")
public class QcRuleService extends SQLGeneralDAO {
    public static final String BEAN_ID = "QcRuleService";
    public QcRuleService() {
    }
    public void finalize() throws Throwable {
        super.finalize();
    }
    public String getRuleNames() throws Exception {
        StringBuilder stringBuilder =new StringBuilder();
        String hql = "from QcRuleModel";
        List<QcRuleModel> rules = super.getEntityList(QcRuleModel.class,hql);
        if (rules!=null && rules.size()>0){
            for (QcRuleModel rule:rules){
                stringBuilder.append(rule.getRule()).append(",");
            }
        }
        String names= stringBuilder.toString();
        return names.substring(0,names.lastIndexOf(",") );
    }
}

+ 17 - 1
hos-rest/src/main/java/com/yihu/hos/rest/services/standard/adapter/AdapterDatasetService.java

@ -8,6 +8,7 @@ import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.rest.models.standard.adapter.AdapterDatasetModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterDictModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterMetadataModel;
import com.yihu.hos.rest.models.standard.adapter.AdapterSchemeModel;
import com.yihu.hos.rest.models.standard.bo.AdapterVersion;
import com.yihu.hos.rest.models.standard.bo.StandardVersion;
import com.yihu.hos.rest.models.standard.standard.StdDataSetModel;
@ -24,7 +25,6 @@ import com.yihu.hos.web.framework.util.sql.SqlCreator;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@Service("AdapterDatasetService")
@ -604,4 +604,20 @@ public class AdapterDatasetService extends SQLGeneralDAO {
        }
    }
    public String  getStdVersionByAdapterDataSet(String adapterVersion) {
        try {
            SqlCreator sqlCreator = new SqlCreator(AdapterSchemeModel.class);
            String sql = "select a.* from adapter_scheme a " +
                    "WHERE a.id =(SELECT b.scheme_id from adapter_scheme_version b WHERE b.version='"+ adapterVersion +"');";
            AdapterSchemeModel model = super.queryObjBySql(sql,AdapterSchemeModel.class);
//            query.setParameter(0,adapterVersion);
//            List<String> list = query.list();
            return model.getStdVersion();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

+ 27 - 1
hos-rest/src/main/java/com/yihu/hos/rest/services/standard/standard/StdMetadataService.java

@ -8,10 +8,12 @@ import com.yihu.hos.rest.models.standard.bo.StandardVersion;
import com.yihu.hos.rest.models.standard.standard.StdDictionaryEntryModel;
import com.yihu.hos.rest.models.standard.standard.StdMetaDataModel;
import com.yihu.hos.web.framework.constant.ErrorCode;
import com.yihu.hos.web.framework.constant.SqlConstants;
import com.yihu.hos.web.framework.dao.SQLGeneralDAO;
import com.yihu.hos.web.framework.exception.ApiException;
import com.yihu.hos.web.framework.model.DetailModelResult;
import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.util.sql.BeanTransformer;
import com.yihu.hos.web.framework.util.sql.RequestParamTransformer;
import com.yihu.hos.web.framework.util.sql.SqlCreator;
import org.hibernate.Query;
@ -21,7 +23,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 * 数据元管理接口实现。
@ -296,4 +301,25 @@ public class StdMetadataService extends SQLGeneralDAO {
        Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
        return count;
    }
    public List getStdMetadataNotNullList(StandardVersion stdVersion, Integer stdDatasetId, String condition) {
        try {
            StringBuffer sql = new StringBuffer();
            sql.append("SELECT * FROM ").append(stdVersion.getMetaDataTableName());
            ObjectMapper objectMapper = new ObjectMapper();
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String column = jsonNode.get("column").asText();
                sql.append(" WHERE dataset_id = " + stdDatasetId + SqlConstants.AND);
                sql.append(column).append(" IS NOT NULL");
            }
            Query query = getCurrentSession().createSQLQuery(sql.toString());
            query.setResultTransformer(new BeanTransformer(StdMetaDataModel.class));
            return query.list();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

+ 10 - 0
hos-rest/src/main/resources/application.yml

@ -40,6 +40,14 @@ service-gateway:
---
spring:
  profiles: test
  data:
    mongodb:
      host: 172.19.103.42
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: runtime
qlc:
  rpc:
    ip: 172.18.20.21
@ -55,6 +63,8 @@ crawler:
    ip: localhost
    port: 8088
    api: crawler/datapush
service-gateway:
  url:
---
spring:

+ 2 - 2
hos-rest/src/main/resources/config/dbhelper.properties

@ -1,7 +1,7 @@
defaultName = hos-mysql
defaultUri = jdbc:mysql://172.19.103.57:3306/esb?useUnicode=true&characterEncoding=UTF-8
defaultUser = hos
defaultPassword = hos
defaultUser = esb
defaultPassword = esb
mongodbUri=mongodb://esb:esb@172.19.103.57:27017/?authSource=admin
mongodbName=hos

+ 4 - 1
hos-rest/src/main/resources/config/http.properties

@ -1,5 +1,8 @@
httpUrl = https://172.19.103.221:10140/api/v1.0
httpUrl = http://192.168.1.221:10140/api/v1.0
httpCouldUrl = http://192.168.1.221:10400/api/v1.0
httpAdminUrl = http://192.168.131.134:10000/api/v1.0
#  http://172.19.103.73:1443/api/v1.0
#\uFFFD\uFFFDhttps://192.168.131.15:4432/api/v1.0
  #https://172.19.103.73:443/api/v1.0

+ 1 - 1
hos-rest/src/main/resources/config/sys.config.xml

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<config>
    <temp_file>D:\temp</temp_file>
    <temp_file>D:/temp</temp_file>
    <ehr_version>
        <org_code code="jkzl">
            <version>56395d75b854</version>

+ 37 - 0
hos-rest/src/main/resources/hibernate/QcRule.hbm.xml

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.yihu.hos.rest.models.crawler.qc.QcRuleModel" table="qc_rule">
        <id name="id" type="java.lang.String">
            <column name="id" length="50" />
            <generator class="uuid" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="255" not-null="true">
                <comment>名称</comment>
            </column>
        </property>
        <property name="type" type="java.lang.String">
            <column name="type" length="20" not-null="true">
                <comment>类型:完整性-1,及时性-2,准确性-3</comment>
            </column>
        </property>
        <property name="description" type="java.lang.String">
            <column name="description" length="1000" not-null="false">
                <comment>描述</comment>
            </column>
        </property>
        <property name="rule" type="java.lang.String">
            <column name="rule" length="255" not-null="true">
                <comment>规则:脚本/接口</comment>
            </column>
        </property>
        <property name="errorCode" type="java.lang.String">
            <column name="error_code" length="50" not-null="false">
                <comment>统一错误代码</comment>
            </column>
        </property>
    </class>
</hibernate-mapping>

+ 7 - 0
hos-rest/src/test/java/com/yihu/hos/rest/HosRestApplicationTests.java

@ -1,18 +1,25 @@
package com.yihu.hos.rest;
import com.yihu.hos.rest.services.standard.adapter.AdapterDatasetService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import javax.annotation.Resource;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = HosRestApplication.class)
@WebAppConfiguration
public class HosRestApplicationTests {
	@Resource(name = AdapterDatasetService.BEAN_ID)
	private AdapterDatasetService adapterDatasetService;
	@Test
	public void contextLoads() {
		String stdVersionByAdapterDataSet = adapterDatasetService.getStdVersionByAdapterDataSet("592fe4e5be63");
		System.out.println(stdVersionByAdapterDataSet);
	}
}

+ 14 - 0
hos-web-framework/src/main/java/com/yihu/hos/web/framework/constant/QcResultConstant.java

@ -0,0 +1,14 @@
package com.yihu.hos.web.framework.constant;
/**
 *  质控-规则检验-常量类
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/5/16.
 */
public interface QcResultConstant {
    String VALUE_EMPTY = "empty";//空
    String VALUE_ILLEGAL = "illegal";//非法
    String VALUE_ERROR = "error";//错误
}

+ 11 - 1
hos-web-framework/src/main/java/com/yihu/hos/web/framework/dao/SQLGeneralDAO.java

@ -3,6 +3,7 @@ package com.yihu.hos.web.framework.dao;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.JsonNodeType;
import com.yihu.hos.core.datatype.CollectionUtil;
import com.yihu.hos.core.datatype.NumberUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.log.Logger;
@ -26,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigInteger;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Collection;
@ -90,7 +92,7 @@ public class SQLGeneralDAO implements XSQLGeneralDAO {
        return dataGridResult;
    }
    public DataGridResult getDataGridResult( Query query , Integer page, Integer rows) {
    public DataGridResult getDataGridResult(Query query, Integer page, Integer rows) {
        DataGridResult dataGridResult = new DataGridResult();
        if (page != null && rows != null) {
            dataGridResult.setPageSize(rows.intValue());
@ -457,6 +459,14 @@ public class SQLGeneralDAO implements XSQLGeneralDAO {
        return query;
    }
    public Boolean tableIsExist(String sql) {
        BigInteger tableNum = (BigInteger) this.getCurrentSession().createSQLQuery(sql).uniqueResult();
        if (tableNum.intValue() > 0) {
            return true;
        }
        return false;
    }
    protected void doClose(Session session, Statement stmt, ResultSet rs) {
        if (rs != null) {
            try {

+ 15 - 10
hos-web-framework/src/main/java/com/yihu/hos/web/framework/util/springutil/SpringBeanUtil.java

@ -4,8 +4,8 @@ package com.yihu.hos.web.framework.util.springutil;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ContextLoader;
/**
 * 服务管理器。服务管理器是所有顶级服务的生成器。若是单元测试使用此服务工厂,Spring Context会被ServiceFactory创建。
@ -15,8 +15,8 @@ import org.springframework.stereotype.Component;
 * @version 1.0
 * @created 12-05-2015 17:47:55
 */
public class SpringBeanUtil implements ApplicationContextAware {
@Component
public class SpringBeanUtil  implements ApplicationContextAware {
    private static ApplicationContext springContext = null;
    /**
@ -29,10 +29,18 @@ public class SpringBeanUtil implements ApplicationContextAware {
    }
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        springContext = applicationContext;
    public  void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(SpringBeanUtil.springContext == null) {
            SpringBeanUtil.springContext = applicationContext;
        }
    }
    public static <T> T getBean(String beanName){
        return (T) springContext.getBean(beanName);
    }
    /**
     * 获取服务。
     *
@ -42,11 +50,8 @@ public class SpringBeanUtil implements ApplicationContextAware {
     */
    public static <T> T getService(String serviceName) {
        if (springContext == null) {
            springContext = new ClassPathXmlApplicationContext(new String[]
                    {
                            "spring/applicationContext.xml"
                    }
            );
            springContext = ContextLoader.getCurrentWebApplicationContext();
            System.out.println("=======springContext=:"+(springContext==null));
        }
        return (T) springContext.getBean(serviceName);

+ 9 - 1
pom.xml

@ -27,7 +27,10 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
@ -197,6 +200,11 @@
            <version>3.15-beta1</version>
        </dependency>
        <!-- swagger end -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3.0</version>
        </dependency>
    </dependencies>
    <build>

+ 12 - 1
src/main/java/com/yihu/hos/ESBApplication.java

@ -1,16 +1,23 @@
package com.yihu.hos;
import com.yihu.hos.interceptor.WebMvcInterceptor;
import com.yihu.hos.web.framework.util.springutil.SpringBeanUtil;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@SpringBootApplication
@EnableCaching
public class ESBApplication extends WebMvcConfigurerAdapter {
    public static void main(String[] args) throws Exception {
        SpringApplication application = new SpringApplication(ESBApplication.class);
        application.run(args);
        ApplicationContext run = application.run(args);
//        SpringBeanUtil.setContext(run);
    }
    // 增加拦截器
@ -18,4 +25,8 @@ public class ESBApplication extends WebMvcConfigurerAdapter {
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new WebMvcInterceptor());
    }
    @Bean
    public SpringBeanUtil springBeanUtil(){return new SpringBeanUtil();}
}

+ 1 - 1
src/main/java/com/yihu/hos/ServletInitializer.java

@ -7,7 +7,7 @@ public class ServletInitializer extends SpringBootServletInitializer {
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(ESBApplication.class);
		return application.sources(ESBApplication.class)           ;
	}
}

+ 11 - 4
src/main/java/com/yihu/hos/common/CommonPageController.java

@ -62,6 +62,10 @@ public class CommonPageController extends BaseController {
    @RequestMapping("loginPage")
    public String login(Model model, HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession();
        String urlType = (String) request.getSession().getAttribute("attachment");
        request.getSession().removeAttribute("attachment");
        //租户类型
        model.addAttribute("urlType", urlType);
        try {
            boolean auth = authenticateService.auth(session, saasAdmin);
            if (!auth) {
@ -143,10 +147,13 @@ public class CommonPageController extends BaseController {
    public String index(HttpServletRequest request, Model model) {
        HttpSession session = request.getSession();
        SystemUser user = (SystemUser) session.getAttribute("userInfo");
        TenantSession tenantSession = (TenantSession) session.getAttribute(ContextAttributes.TENANT_SESSION);
        if (session.getAttribute(ContextAttributes.TENANT_SESSION)!=null){
            TenantSession tenantSession = (TenantSession) session.getAttribute(ContextAttributes.TENANT_SESSION);
            model.addAttribute("tenant", tenantSession.getTenant());
        }
;
        model.addAttribute("userName", user.getUserName());
        model.addAttribute("tenant", tenantSession.getTenant());
        //获取菜单
        String menu = "[{id: 1, text: '任务管理',icon:'${staticRoot}/images/index/menu2_icon.png'},\n" +
                "        {id: 11, pid: 1, text: '任务跟踪', url: '${contextRoot}/datacollect/trackJob',targetType:'1'},\n" +
@ -177,7 +184,6 @@ public class CommonPageController extends BaseController {
                "        {id: 99, pid: 9, text: '<spring:message code=\"title.app.manage\"/>', url: '${contextRoot}/app/initial'}]";
        model.addAttribute("menu", menu);
        model.addAttribute("contentPage", "/common/index");
        return "pageView";
    }
@ -248,7 +254,8 @@ public class CommonPageController extends BaseController {
        model.addAttribute("contentPage", "/common/index");
        //从此处登入不显示logo(标识showLogo==false)
        model.addAttribute("showLogo", "false");
        return "pageView";
    }

+ 4 - 2
src/main/java/com/yihu/hos/crawler/controller/CrawlerController.java

@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@ -135,12 +136,13 @@ public class CrawlerController {
        }
    }
    @RequestMapping("getRelations")
    @RequestMapping(value = "getRelations", produces = "text/html; charset=utf-8")
    @ResponseBody
    public String getRelations(
            @RequestParam(value = "versionId", required = true) Integer versionId,
            @RequestParam(value = "datasetIdStr", required = false) String datasetIdStr,
            @RequestParam(value = "lines", required = false) String lines) {
            @RequestParam(value = "lines", required = false) String lines,
            HttpServletResponse response) {
        try {
            return crawlerService.getRelations(versionId, datasetIdStr, lines);
        } catch (Exception e) {

+ 9 - 6
src/main/java/com/yihu/hos/datacollect/controller/DataCollectController.java

@ -73,8 +73,8 @@ public class DataCollectController extends BaseController {
                //获取任务信息
                RsJobConfig job = datacollect.getJobById(jobId);
                model.addAttribute("model", job);
                String cron = datacollect.getCronByJobId(jobId);
                model.addAttribute("cronExpression", cron);
                //String cron = datacollect.getCronByJobId(jobId);
                //model.addAttribute("cronExpression", cron);
            }
            //获取方案列表
@ -155,17 +155,18 @@ public class DataCollectController extends BaseController {
    @ResponseBody
    public Result addJob(HttpServletRequest request) {
        try {
            String cron = request.getParameter("cronExpression");
            String jobDataset = request.getParameter("jobDataset");
            RsJobConfig obj = new RsJobConfig();
            BeanUtils.populate(obj, request.getParameterMap());
            obj.setValid("1");
            obj.setJobCron(cron);
            String time=request.getParameter("jobNextTime");
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            if(df.parse(time).before(new Date())) {
                return Result.error("任务开始时间不能小于当前时间");
            }
            String cron = request.getParameter("cronExpression");
            String jobDataset = request.getParameter("jobDataset");
            return datacollect.addJob(obj, cron, jobDataset);
        } catch (Exception ex) {
            ex.printStackTrace();
@ -181,7 +182,10 @@ public class DataCollectController extends BaseController {
    public Result updateJob(HttpServletRequest request) {
        try {
            String cron = request.getParameter("cronExpression");
            String jobDataset = request.getParameter("jobDataset");
            RsJobConfig obj = new RsJobConfig();
            obj.setJobCron(cron);
//            ConvertUtils.register(new DateLocaleConverter(), Date.class);
            BeanUtils.populate(obj, request.getParameterMap());
            String time=request.getParameter("jobNextTime");
@ -189,8 +193,7 @@ public class DataCollectController extends BaseController {
            if(df.parse(time).before(new Date())) {
                return Result.error("任务开始时间不能小于当前时间");
            }
            String cron = request.getParameter("cronExpression");
            String jobDataset = request.getParameter("jobDataset");
            return datacollect.updateJob(obj, cron, jobDataset);
        } catch (Exception ex) {
            ex.printStackTrace();

+ 177 - 162
src/main/java/com/yihu/hos/datacollect/model/RsJobConfig.java

@ -8,166 +8,181 @@ import java.util.Date;
public class RsJobConfig implements java.io.Serializable {
	// Fields
	private String id;
	private String jobName;
	private String jobInfo;
	private String jobType;
	private String schemeId;
	private String schemeVersion;
	private Date jobNextTime;
	private String valid;
	private String jobContent;
	private String jobContentType;
	private Date repeatStartTime;
	private Date repeatEndTime;
	private Integer delayTime;
	private Integer flowId;
	private Integer flowTempId;
	// Constructors
	/** default constructor */
	public RsJobConfig() {
	}
	public Integer getFlowTempId() {
		return flowTempId;
	}
	public void setFlowTempId(Integer flowTempId) {
		this.flowTempId = flowTempId;
	}
	public Integer getFlowId() {
		return flowId;
	}
	public void setFlowId(Integer flowId) {
		this.flowId = flowId;
	}
	public String getJobContent() {
		return jobContent;
	}
	public void setJobContent(String jobContent) {
		this.jobContent = jobContent;
	}
	public String getJobContentType() {
		return jobContentType;
	}
	public void setJobContentType(String jobContentType) {
		this.jobContentType = jobContentType;
	}
	/** minimal constructor */
	public RsJobConfig(String jobName, String valid) {
		this.jobName = jobName;
		this.valid = valid;
	}
	/** full constructor */
	public RsJobConfig(String jobName, String jobInfo, String jobType, String schemeId,String schemeVersion, String jobTimeInterval, Date jobNextTime, String valid) {
		this.jobName = jobName;
		this.jobInfo = jobInfo;
		this.jobType = jobType;
		this.schemeId = schemeId;
		this.schemeVersion = schemeVersion;
		this.jobNextTime = jobNextTime;
		this.valid = valid;
	}
	// Property accessors
	public String getId() {
		return this.id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getJobName() {
		return this.jobName;
	}
	public void setJobName(String jobName) {
		this.jobName = jobName;
	}
	public String getJobInfo() {
		return this.jobInfo;
	}
	public void setJobInfo(String jobInfo) {
		this.jobInfo = jobInfo;
	}
	public String getJobType() {
		return this.jobType;
	}
	public void setJobType(String jobType) {
		this.jobType = jobType;
	}
	public String getSchemeId() {
		return schemeId;
	}
	public void setSchemeId(String schemeId) {
		this.schemeId = schemeId;
	}
	public String getSchemeVersion() {
		return schemeVersion;
	}
	public void setSchemeVersion(String schemeVersion) {
		this.schemeVersion = schemeVersion;
	}
	public Date getJobNextTime() {
		return this.jobNextTime;
	}
	public void setJobNextTime(Date jobNextTime) {
		this.jobNextTime = jobNextTime;
	}
	public String getValid() {
		return this.valid;
	}
	public void setValid(String valid) {
		this.valid = valid;
	}
	public Date getRepeatStartTime() {
		return repeatStartTime;
	}
	public void setRepeatStartTime(Date repeatStartTime) {
		this.repeatStartTime = repeatStartTime;
	}
	public Date getRepeatEndTime() {
		return repeatEndTime;
	}
	public void setRepeatEndTime(Date repeatEndTime) {
		this.repeatEndTime = repeatEndTime;
	}
	public Integer getDelayTime() {
		return delayTime;
	}
	public void setDelayTime(Integer delayTime) {
		this.delayTime = delayTime;
	}
    // Fields
    private String id;
    private String jobName;
    private String jobInfo;
    private String jobType;
    private String schemeId;
    private String schemeVersion;
    private Date jobNextTime;
    private String valid;
    private String jobContent;
    private String jobContentType;
    private Date repeatStartTime;
    private Date repeatEndTime;
    private Integer delayTime;
    private Integer flowId;
    private Integer flowTempId;
    private String jobCron;
    // Constructors
    /**
     * default constructor
     */
    public RsJobConfig() {
    }
    /**
     * minimal constructor
     */
    public RsJobConfig(String jobName, String valid) {
        this.jobName = jobName;
        this.valid = valid;
    }
    /**
     * full constructor
     */
    public RsJobConfig(String jobName, String jobInfo, String jobType, String schemeId, String schemeVersion, String jobTimeInterval, Date jobNextTime, String valid) {
        this.jobName = jobName;
        this.jobInfo = jobInfo;
        this.jobType = jobType;
        this.schemeId = schemeId;
        this.schemeVersion = schemeVersion;
        this.jobNextTime = jobNextTime;
        this.valid = valid;
    }
    public Integer getFlowTempId() {
        return flowTempId;
    }
    public void setFlowTempId(Integer flowTempId) {
        this.flowTempId = flowTempId;
    }
    public Integer getFlowId() {
        return flowId;
    }
    public void setFlowId(Integer flowId) {
        this.flowId = flowId;
    }
    public String getJobContent() {
        return jobContent;
    }
    public void setJobContent(String jobContent) {
        this.jobContent = jobContent;
    }
    public String getJobContentType() {
        return jobContentType;
    }
    public void setJobContentType(String jobContentType) {
        this.jobContentType = jobContentType;
    }
    // Property accessors
    public String getId() {
        return this.id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getJobName() {
        return this.jobName;
    }
    public void setJobName(String jobName) {
        this.jobName = jobName;
    }
    public String getJobInfo() {
        return this.jobInfo;
    }
    public void setJobInfo(String jobInfo) {
        this.jobInfo = jobInfo;
    }
    public String getJobType() {
        return this.jobType;
    }
    public void setJobType(String jobType) {
        this.jobType = jobType;
    }
    public String getSchemeId() {
        return schemeId;
    }
    public void setSchemeId(String schemeId) {
        this.schemeId = schemeId;
    }
    public String getSchemeVersion() {
        return schemeVersion;
    }
    public void setSchemeVersion(String schemeVersion) {
        this.schemeVersion = schemeVersion;
    }
    public Date getJobNextTime() {
        return this.jobNextTime;
    }
    public void setJobNextTime(Date jobNextTime) {
        this.jobNextTime = jobNextTime;
    }
    public String getValid() {
        return this.valid;
    }
    public void setValid(String valid) {
        this.valid = valid;
    }
    public Date getRepeatStartTime() {
        return repeatStartTime;
    }
    public void setRepeatStartTime(Date repeatStartTime) {
        this.repeatStartTime = repeatStartTime;
    }
    public Date getRepeatEndTime() {
        return repeatEndTime;
    }
    public void setRepeatEndTime(Date repeatEndTime) {
        this.repeatEndTime = repeatEndTime;
    }
    public Integer getDelayTime() {
        return delayTime;
    }
    public void setDelayTime(Integer delayTime) {
        this.delayTime = delayTime;
    }
    public String getJobCron() {
        return jobCron;
    }
    public void setJobCron(String jobCron) {
        this.jobCron = jobCron;
    }
}

+ 29 - 27
src/main/java/com/yihu/hos/datacollect/service/DatacollectManager.java

@ -105,8 +105,9 @@ public class DatacollectManager{
                    dto.setJobDataset(ds);
                }
                String cron = datacollectDao.getCronByJobId(job.getId());
                //执行计划翻译
//                String cron = datacollectDao.getCronByJobId(job.getId());
                String cron = job.getJobCron();
                ////执行计划翻译
                dto.setJobPlan(translationCron(cron));
                dtoList.add(dto);
@ -249,6 +250,7 @@ public class DatacollectManager{
    public ActionResult updateJob(RsJobConfig obj, String cron, String jobDataset) throws Exception {
        Integer flowId = flowManage.updateCamelFile(obj.getId(),obj.getFlowTempId(), obj.getFlowId(), cron);
        if (flowId!=null){
            obj.setFlowId(flowId);
            datacollectDao.updateEntity(obj);
            saveJobDataset(obj.getId(), jobDataset);
@ -351,31 +353,31 @@ public class DatacollectManager{
    @Transactional
    public ActionResult saveDatasetSource(String json) throws Exception {
        //TODO: Use jackson
//        JSONArray jsonList = JSONArray.fromObject(json);
//
//
//        for (Object item : jsonList) {
//            JSONObject obj = JSONObject.fromObject(item);
//            if (obj.containsKey("id") && obj.getString("id").length() > 0) {
//                String id = obj.getString("id");
//                //修改
//                RsDatasourceDataset dd = (RsDatasourceDataset) JSONObject.toBean(obj, RsDatasourceDataset.class);
//                datacollectDao.updateEntity(dd);
////                if(obj.containsKey("datasourceId") && obj.getString("datasourceId").length()>0)
////                {
////                    RsDatasourceDataset dd = (RsDatasourceDataset)JSONObject.toBean(obj,RsDatasourceDataset.class);
////                    datacollectDao.updateEntity(dd);
////                }
////                //删除
////                else{
////                    datacollectDao.deleteEntity(RsDatasourceDataset.class,id);
////                }
//            } else {
//                //新增
//                RsDatasourceDataset dd = (RsDatasourceDataset) JSONObject.toBean(obj, RsDatasourceDataset.class);
//                datacollectDao.saveEntity(dd);
//            }
//        }
        JSONArray jsonList = JSONArray.fromObject(json);
        for (Object item : jsonList) {
            JSONObject obj = JSONObject.fromObject(item);
            if (obj.containsKey("id") && obj.getString("id").length() > 0) {
                String id = obj.getString("id");
                //修改
                RsDatasourceDataset dd = (RsDatasourceDataset) JSONObject.toBean(obj, RsDatasourceDataset.class);
                datacollectDao.updateEntity(dd);
//                if(obj.containsKey("datasourceId") && obj.getString("datasourceId").length()>0)
//                {
//                    RsDatasourceDataset dd = (RsDatasourceDataset)JSONObject.toBean(obj,RsDatasourceDataset.class);
//                    datacollectDao.updateEntity(dd);
//                }
//                //删除
//                else{
//                    datacollectDao.deleteEntity(RsDatasourceDataset.class,id);
//                }
            } else {
                //新增
                RsDatasourceDataset dd = (RsDatasourceDataset) JSONObject.toBean(obj, RsDatasourceDataset.class);
                datacollectDao.saveEntity(dd);
            }
        }
        return new ActionResult(true, "保存成功!");

+ 7 - 6
src/main/java/com/yihu/hos/filter/SessionOutTimeFilter.java

@ -49,12 +49,13 @@ public class SessionOutTimeFilter extends OncePerRequestFilter {
                    || httpServletRequest.getSession().getAttribute("userInfo") == null) {
                // AJAX REQUEST PROCESS
                String attachment = LocalContext.getContext().getAttachment(ContextAttributes.TENANT_NAME);
                if ("XMLHttpRequest".equalsIgnoreCase(httpServletRequest.getHeader("X-Requested-With"))) {
                    httpServletResponse.setHeader("sessionStatus", "timeOut");
                    httpServletResponse.getWriter().print("{}");
                    httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/logoutAction");
                    return;
                }
//                if ("XMLHttpRequest".equalsIgnoreCase(httpServletRequest.getHeader("X-Requested-With"))) {
//                    httpServletResponse.setHeader("sessionStatus", "timeOut");
//                    httpServletResponse.getWriter().print("{}");
//                    httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/logoutAction");
//                    return;
//                }
                httpServletRequest.getSession().setAttribute("attachment",attachment);
                httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/" + attachment + "/loginPage");
                return;
            }

+ 205 - 0
src/main/java/com/yihu/hos/qc/controller/RuleController.java

@ -0,0 +1,205 @@
package com.yihu.hos.qc.controller;
import com.google.common.base.Splitter;
import com.yihu.hos.qc.model.RuleModel;
import com.yihu.hos.qc.service.RuleService;
import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.util.controller.BaseController;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 质控规则管理
 *
 * @author CD
 * @vsrsion 1.0
 * Created at 2017/05/05.
 */
@RequestMapping("/rule")
@Controller
public class RuleController extends BaseController {
    @Resource(name = RuleService.BEAN_ID)
    private RuleService ruleService;
    /**
     * 质控规则管理界面
     *
     * @param model
     * @return
     */
    @RequestMapping("/initial")
    public String ruleInitial(Model model) {
        model.addAttribute("contentPage", "qc/rule");
        return "partView";
    }
    /**
     * 质控规则列表
     *
     * @param request
     * @return
     */
    @RequestMapping("/getRuleList")
    @ResponseBody
    public Result getAppList(HttpServletRequest request, String name, String valid) {
        try {
            Map<String, Object> params = new HashMap<>();
            params.put("name", name);
            String page = StringUtils.isEmpty(request.getParameter("page")) ? "1" : request.getParameter("page");
            String rows = StringUtils.isEmpty(request.getParameter("rows")) ? "10" : request.getParameter("rows");
            params.put("page", page);
            params.put("rows", rows);
            Result result = ruleService.getRuleList(params);
            return result;
        } catch (Exception ex) {
            ex.printStackTrace();
            return Result.error(ex.getMessage());
        }
    }
    /**
     * 质控规则修改页面
     *
     * @param model
     * @param id
     * @return
     */
    @RequestMapping("/editorRule")
    public String editoruleRule(Model model, String id) {
        try {
            RuleModel ruleModel = null;
            if (id != null) {
                ruleModel = ruleService.getRuleById(id);
            } else {
                ruleModel = new RuleModel();
            }
            model.addAttribute("model", ruleModel);
            model.addAttribute("contentPage", "/qc/editorRule");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "pageView";
    }
    /**
     * 质控规则详情页
     *
     * @param model
     * @param id
     * @return
     */
    @RequestMapping("/ruleDetail")
    public String ruleDetail(Model model, String id) {
        try {
            RuleModel ruleModel = null;
            if (id != null) {
                ruleModel = ruleService.getRuleById(id);
            } else {
                ruleModel = new RuleModel();
            }
            model.addAttribute("model", ruleModel);
            model.addAttribute("contentPage", "/rule/ruleDetail");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "pageView";
    }
    /**
     * 新增质控规则s信息
     *
     * @param request
     * @return
     */
    @RequestMapping("addRule")
    @ResponseBody
    public Result addRule(HttpServletRequest request) {
        try {
            RuleModel obj = new RuleModel();
            BeanUtils.populate(obj, request.getParameterMap());
            return ruleService.addRule(obj);
        } catch (Exception ex) {
            ex.printStackTrace();
            return Result.error(ex.getMessage());
        }
    }
    /**
     * 删除质控规则信息
     *
     * @param request
     * @return
     */
    @RequestMapping("/deleteRule")
    @ResponseBody
    public Result deleteRule(HttpServletRequest request) {
        try {
            String id = request.getParameter("id");
            ruleService.deleteRule(id);
            return Result.success("删除成功!");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("删除失败!");
        }
    }
    /**
     * 批量删除质控规则信息
     *
     * @param request
     * @return
     */
    @RequestMapping("/deleteRuleBatch")
    @ResponseBody
    public Result deleteRuleBatch(HttpServletRequest request) {
        try {
            String idList = request.getParameter("idList");
            List<String> ids = Splitter.on(",").trimResults().splitToList(idList);
            if (!CollectionUtils.isEmpty(ids)) {
                for (String id :
                        ids) {
                    ruleService.deleteRule(id);
                }
            }
            return Result.success("删除成功!");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("删除失败!");
        }
    }
    /**
     * 修改质控规则信息
     */
    @RequestMapping("updateRule")
    @ResponseBody
    public Result updateRule(HttpServletRequest request) {
        try {
            RuleModel obj = new RuleModel();
            BeanUtils.populate(obj, request.getParameterMap());
            return ruleService.updateRule(obj);
        } catch (Exception ex) {
            ex.printStackTrace();
            return Result.error(ex.getMessage());
        }
    }
}

+ 48 - 0
src/main/java/com/yihu/hos/qc/dao/RuleDao.java

@ -0,0 +1,48 @@
package com.yihu.hos.qc.dao;
import com.yihu.hos.qc.model.RuleModel;
import com.yihu.hos.web.framework.dao.SQLGeneralDAO;
import com.yihu.hos.web.framework.model.Result;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
/**
 * @author CD
 * @vsrsion 1.0
 * Created at 2017/05/05.
 */
@Repository("ruleDao")
public class RuleDao extends SQLGeneralDAO {
    public static final String BEAN_ID = "ruleDao";
    public Result getRuleList(Map<String, Object> params) throws Exception {
        StringBuilder sb = new StringBuilder("from RuleModel r where 1=1 ");
        Object name = params.get("name");
        if (!StringUtils.isEmpty(name)) {
            sb.append(" and r.name like '%" + name + "%'");
        }
        return super.getDataGridResult(sb.toString(), Integer.valueOf(params.get("page").toString()), Integer.valueOf(params.get("rows").toString()));
    }
    public List<RuleModel> getRuleList(String name) throws Exception {
        StringBuilder sb = new StringBuilder("from RuleModel r where 1=1 ");
        if (!StringUtils.isEmpty(name)) {
            sb.append(" and r.name like '%" + name + "%'");
        }
        return (List<RuleModel>) super.hibernateTemplate.getSessionFactory().getCurrentSession().createQuery(sb.toString());
    }
    public List<RuleModel> getAllByIdList(List<String> idList) {
        Session session = getCurrentSession();
        Criteria criteria = session.createCriteria(RuleModel.class);
        criteria.add(Restrictions.in("id", idList));
        return criteria.list();
    }
}

+ 82 - 0
src/main/java/com/yihu/hos/qc/model/RuleModel.java

@ -0,0 +1,82 @@
package com.yihu.hos.qc.model;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
/**
 * ss
 * 质控表
 *
 * @author CD
 * @vsrsion 1.0
 * Created at 2017/05/05.
 */
@Entity
@Table(name = "qc_rule")
public class RuleModel implements java.io.Serializable {
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "uuid")
    @Column(name = "id")
    private String id;
    @Column(name = "name")
    private String name;
    @Column(name = "type")
    private String type;//分类
    @Column(name = "description")
    private String describe;//描述
    @Column(name = "rule")
    private String rule;//规则
    @Column(name = "error_code")
    private String error_code;//统一错误代码
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getDescribe() {
        return describe;
    }
    public void setDescribe(String describe) {
        this.describe = describe;
    }
    public String getRule() {
        return rule;
    }
    public void setRule(String rule) {
        this.rule = rule;
    }
    public String getError_code() {
        return error_code;
    }
    public void setError_code(String error_code) {
        this.error_code = error_code;
    }
}

+ 88 - 0
src/main/java/com/yihu/hos/qc/service/RuleService.java

@ -0,0 +1,88 @@
package com.yihu.hos.qc.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.config.MongoConfig;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.qc.dao.RuleDao;
import com.yihu.hos.qc.model.RuleModel;
import com.yihu.hos.web.framework.model.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.zbus.broker.ZbusBroker;
import javax.annotation.Resource;
import java.util.Map;
/**
 * @author CD
 * @vsrsion 1.0
 * Created at 2017/05/05.
 */
@Service("ruleService")
public class RuleService {
    public static final String BEAN_ID = "ruleService";
    static final Logger logger = LoggerFactory.getLogger(RuleService.class);
    @Resource(name = RuleDao.BEAN_ID)
    private RuleDao ruleDao;
    @Value("${spring.data.mongodb.gridFsDatabase}")
    private String dbName;
    @Autowired
    private MongoConfig mongoConfig;
    @Autowired
    private ObjectMapper objectMapper;
    private ZbusBroker zbusBroker;
    @Autowired
    public void setZbusBroker(ZbusBroker zbusBroker) {
        this.zbusBroker = zbusBroker;
    }
    public Result getRuleList(Map<String, Object> params) throws Exception {
        return ruleDao.getRuleList(params);
    }
    public RuleModel getRuleById(String id) throws Exception {
        return ruleDao.getEntity(RuleModel.class, id);
    }
    @Transactional
    public Result addRule(RuleModel obj) throws Exception {
        ruleDao.saveEntity(obj);
        return Result.success("保存成功");
    }
    @Transactional
    public Result updateRule(RuleModel obj) throws Exception {
        RuleModel ruleModel = ruleDao.getEntity(RuleModel.class, obj.getId());
        ruleModel.setName(obj.getName());
        ruleModel.setType(obj.getType());
        ruleModel.setDescribe(obj.getDescribe());
        ruleModel.setRule(obj.getRule());
        ruleModel.setError_code(obj.getError_code());
        return Result.success("更新成功");
    }
    @Transactional
    public Result deleteRule(String id) throws Exception {
        RuleModel ruleModel = ruleDao.getEntity(RuleModel.class, id);
        ruleDao.deleteEntity(ruleModel);
        return Result.success("删除成功");
    }
    /* ==============================服务模块=================================  */
    public Result getRuleServiceList(Map<String, Object> params) throws Exception {
        return ruleDao.getRuleList(params);
    }
}

+ 1 - 1
src/main/java/com/yihu/hos/standard/controller/AdapterDictController.java

@ -129,7 +129,7 @@ public class AdapterDictController extends BaseController {
                    return actionResult;
                }
            }
            dictService.strategy(version,adapter_std_version);
            dictService.strategy(version,std_version,adapter_std_version);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(e.getMessage());

+ 1 - 1
src/main/java/com/yihu/hos/standard/controller/AdapterMetadataController.java

@ -149,7 +149,7 @@ public class AdapterMetadataController extends BaseController {
                    return actionResult;
                }
            }
            adapterDatasetService.strategy(version,adapter_std_version);
            adapterDatasetService.strategy(version,std_version,adapter_std_version);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(e.getMessage());

+ 41 - 0
src/main/java/com/yihu/hos/standard/controller/InitController.java

@ -0,0 +1,41 @@
package com.yihu.hos.standard.controller;
import com.yihu.hos.standard.service.adapter.AdapterDictService;
import com.yihu.hos.web.framework.model.DetailModelResult;
import com.yihu.hos.web.framework.util.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * Created by LLH on 2016/1/6.
 */
@RestController("InitController")
@RequestMapping("/init")
@Api(protocols = "https", value = "AdapterDictController", description = "适配字典管理", tags = {"适配字典"})
public class InitController extends BaseController {
    @Resource(name = AdapterDictService.BEAN_ID)
    private AdapterDictService dictService;
    @RequestMapping(value = "/searchDictList")
    @ApiOperation(value = "获取字典列表", response = DetailModelResult.class, produces = "application/json", notes = "获取字典列表")
    public DetailModelResult searchDictList(
            @ApiParam(name = "adapterVersion", value = "适配标准版本号")
            @RequestParam(value = "adapterVersion") String adapterVersion,
            @ApiParam(name = "condition", value = "查询条件:编码或名称")
            @RequestParam(value = "condition", required = false) String condition,
            @ApiParam(name = "order", value = "Order param,Must be json.ascending:asc,descending:desc")
            @RequestParam(value = "order", required = false) String order,
            @ApiParam(name = "rows", value = "Limit the size of result set. Must be an integer")
            @RequestParam(value = "rows", required = false) Integer rows,
            @ApiParam(name = "page", value = "Start position of result set. Must be an integer")
            @RequestParam(value = "page", required = false) Integer page) {
        return dictService.getDetailResult(adapterVersion, condition, order, rows, page);
    }
}

+ 29 - 0
src/main/java/com/yihu/hos/standard/dao/IStdAdapterMetadataDao.java

@ -0,0 +1,29 @@
package com.yihu.hos.standard.dao;
import com.yihu.hos.standard.model.adapter.AdapterMetadataModel;
import com.yihu.hos.web.framework.dao.XSQLGeneralDAO;
import java.util.List;
/**
 * Created by Administrator on 2016/5/4.
 */
public interface IStdAdapterMetadataDao extends XSQLGeneralDAO {
    List<AdapterMetadataModel> getAdapterMetadataByMetadateId(String metedataId) throws Exception;
    List<AdapterMetadataModel> getAdapterMetadataByDatasetIdAndStatus(String id, String s) throws Exception;
    void updateAdapterMetadataStatus(String id, String s) throws Exception;
    List<AdapterMetadataModel> getAdapterMetadataByAdaptMetadateId(String AdaptMetadateId)throws Exception;
    List<AdapterMetadataModel> getAdapterMetadataByMetadateIdAndStatus(String id, String type)throws Exception;
    List<AdapterMetadataModel> getAdapterMetadataByAdaptMetadateIdAndStdDataSetId(String AdaptMetadateId, String stdDataSetId)throws Exception;
    List<AdapterMetadataModel> getAdapterMetadataByProjectId(String id)throws Exception;
    List<AdapterMetadataModel> getAdapterMetadataByDatasetId(String dataSetId)throws Exception;
}

+ 12 - 0
src/main/java/com/yihu/hos/standard/dao/IStdDataSetModelDao.java

@ -0,0 +1,12 @@
package com.yihu.hos.standard.dao;
import com.yihu.hos.standard.model.standard.StdDataSetModel;
import com.yihu.hos.web.framework.dao.XSQLGeneralDAO;
/**
 * Created by Administrator on 2016/5/4.
 */
public interface IStdDataSetModelDao extends XSQLGeneralDAO {
    public StdDataSetModel getDatasetName(String version ,Integer id);
}

+ 0 - 0
src/main/java/com/yihu/hos/standard/dao/IStdDictionaryEntryModelDao.java


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini