123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- package com.sagacloud.route;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.github.rjeschke.txtmark.Processor;
- import com.sagacloud.Exceptions.InvalidPostException;
- import com.sagacloud.cache.ProPasCache;
- import com.sagacloud.pojos.DPSelectPropertyResult;
- import com.sagacloud.route.processors.*;
- import com.sagacloud.route.processors.Insurance.*;
- import com.sagacloud.route.processors.Maintainance.FilterPropertyProcessor;
- import com.sagacloud.route.processors.Maintainance.QueryPropertyProcesspr;
- import com.sagacloud.route.processors.Manufacturer.MaunfacturerFilter;
- import com.sagacloud.route.processors.Manufacturer.GetVenderBySpecProcessor;
- import com.sagacloud.route.processors.PeriodTask.OnTimeTaskProcessor;
- import com.sagacloud.route.processors.PeriodTask.StatisticsProcessor;
- import com.sagacloud.route.processors.supplier.SupplierFilter;
- import com.sagacloud.route.processors.supplier.SupplyContractProcessor;
- import com.sagacloud.utils.Const;
- import org.apache.camel.Exchange;
- import org.apache.commons.io.IOUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import javax.ws.rs.core.MediaType;
- import java.io.StringWriter;
- import java.lang.reflect.ParameterizedType;
- import java.util.ArrayList;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Set;
- /**
- * Created by Xiaoyu on 2018/7/10
- */
- public class Route extends ExceptionHandlerBaseRoute {
- private static final Logger log = LoggerFactory.getLogger(Route.class);
- @Override
- public void configure() throws Exception {
- configExceptionHandler();
- fromF("timer://simpleTimer?period=1m").process(new OnTimeTaskProcessor()).to("direct:syncAllProject");
- fromF("timer://simpleTimer?period=30m").to("direct:synProjectName");
- rest().get("/doc")
- .produces("text/html;charset=UTF-8")
- .route()
- .process(msg -> {
- String docContentStr = Processor.process(Route.class.getClassLoader().getResourceAsStream("documentation.md"));
- StringWriter writer = new StringWriter();
- IOUtils.copy(Route.class.getClassLoader().getResourceAsStream("template.html"), writer, "utf-8");
- String tmplateContentStr = writer.toString();
- msg.getOut().setBody(tmplateContentStr.replace("#replaceMePlease#", docContentStr));
- });
- // 生产商查询项目下的资产
- rest("/manufacturer/property/").post("query")
- .consumes(MediaType.APPLICATION_JSON)
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .process(exchange -> {
- String jsonStr = exchange.getIn().getBody(String.class);
- JSONObject json = JSONObject.parseObject(jsonStr);
- exchange.setProperty("venderId", json.getString("venderId"));
- exchange.getIn().setBody(jsonStr);
- })
- .to("direct:getPropertiesByPj")
- .process(new GetVenderBySpecProcessor())
- .to(Const.venders + "/manufacturer/specification/query_vender")
- .process(new MaunfacturerFilter());
- // 供应商查询项目下的资产
- rest("/supplier/property/").post("query")
- .consumes(MediaType.APPLICATION_JSON)
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .process(exchange -> {
- String jsonStr = exchange.getIn().getBody(String.class);
- JSONObject json = JSONObject.parseObject(jsonStr);
- exchange.setProperty("venderId", json.getString("venderId"));
- exchange.getIn().setBody(jsonStr);
- })
- .to("direct:getPropertiesByPj")
- .process(new GetVenderBySpecProcessor())
- .to(Const.venders + "/manufacturer/specification/query_vender")
- .process(new SupplierFilter());
- // 获取指定供应商在指定项目内的所有供应合同编号(从数据平台实时获取)
- rest("/supplier/contract/").post("query")
- .consumes(MediaType.APPLICATION_JSON)
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .process(SupplyContractProcessor::getContractList);
- // 获取在保资产清单
- rest("/insurance/project/").post("query")
- .consumes(MediaType.APPLICATION_JSON)
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .process(new GetInsuranceNoListProcessor())
- .to(String.join("", InitEnvRoute.venders, "/insurance/contract/query"))
- .process(new HandleWarrantyFromVenderProcessor())
- .to("direct:getPropertiesByPj")
- //.to(String.join("", InitEnvRoute.dataPlatform, "/property/relation_query"))
- .process(new GetPropertyUnderWarrantyProcessor());
- // 获取所有保单列表
- rest("/insurance/contract/").post("query")
- .consumes(MediaType.APPLICATION_JSON)
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .process(new GetInsuranceNoListProcessor())
- .to(String.join("", InitEnvRoute.venders, "/insurance/contract/query"))
- .process(new HandleWarrantyFromVenderProcessor())
- .to("direct:getPropertiesByPj")
- .process(new GetPropertyCountInAllWarrantyProcessor());
- // 根据保单获取资产
- rest("/insurance/contract/property/").post("query")
- .consumes(MediaType.APPLICATION_JSON)
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .process(new StoreInsuranceNoProcessor())
- .to("direct:getPropertiesByPj")
- .process(new GetPropertyInCertainWarrantyProcessor());
- // 查询指定项目内合同有效期内的资产/查询指定项目内历史维护资产
- rest("/maintainance/property/").post("query")
- .consumes(MediaType.APPLICATION_JSON)
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .process(new QueryPropertyProcesspr())
- .to("direct:getEquipmentByPj")
- .process(new FilterPropertyProcessor());
- rest("/project/sync").post()
- .consumes(MediaType.APPLICATION_JSON)
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .process(exchange -> {
- String jsonStr = exchange.getIn().getBody(String.class);
- JSONObject json = JSONObject.parseObject(jsonStr);
- JSONArray projectArr = json.getJSONArray("project");
- List<String> projectList = projectArr.toJavaList(String.class);
- if (projectList == null || projectList.size() == 0) {
- throw new InvalidPostException("project不能为空");
- }
- exchange.setProperty("projectList", projectList);
- })
- .to("direct:buildVenderMap");
- rest("/project/sync_all").post()
- .consumes(MediaType.APPLICATION_JSON)
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .to("direct:syncAllProject");
- //同步全部项目的资产信息
- from("direct:syncAllProject")
- .process(exchange -> {
- System.out.println("someThing happened");
- exchange.setProperty("projectList", ProPasCache.pjList);
- log.warn("统计数据开始更新");
- })
- .to("direct:buildVenderMap");
- // 需要输入 body是Pj1101080001, getProperty("propertyData") 是 DPSelectPropertyResult类型,
- // getProperty("map") 是 Map<String, Map<String, String>>类型 说明: 信息点Name --> (厂商库该信息点的值 --> 所属厂商)
- from("direct:getPropertyStatisticsByProject").process(new StatisticsProcessor())
- .to(String.join("", InitEnvRoute.venders, "/auxiliary/property/create_by_project"));
- //body为JSONObject,含有projectId字段
- from("direct:getPropertiesByPj")
- .process(new GetPropByPjProcessor()).setHeader(Exchange.HTTP_METHOD, constant("POST"))
- .to(InitEnvRoute.dataPlatform + "/property/relation_query?bridgeEndpoint=true&method=POST");
- from("direct:getEquipmentByPj")
- .process(new GetEquipmentByPjProcessor())
- .to(Const.dataPlatform + "/object/subset_query");
- // 统计数据平台资产和设备信息(数量)
- from("direct:buildVenderMap").setHeader(Exchange.HTTP_METHOD, constant("POST"))
- .to(Const.venders + "/auxiliary/vender/query_detail?bridgeEndpoint=true&method=POST")
- .process(new VenderMapProcessor())
- .split(body())
- //.parallelProcessing()
- .process(exchange -> {
- String projectId = exchange.getIn().getBody(String.class);
- System.out.println("统计:" + projectId);
- JSONObject json = new JSONObject();
- json.put("projectId", projectId);
- exchange.setProperty("projectId" + exchange.getExchangeId(), projectId);
- exchange.getIn().setBody(json.toString());
- })
- .to("direct:getPropertiesByPj")
- .process(exchange -> {
- String jsonStr = exchange.getIn().getBody(String.class);
- DPSelectPropertyResult dpResult = JSONObject.parseObject(jsonStr, DPSelectPropertyResult.class);
- exchange.setProperty("propertyData" + exchange.getExchangeId(), dpResult);
- // 为下个路由准备输入数据
- String projectId = (String) exchange.getProperty("projectId" + exchange.getExchangeId());
- JSONObject json = new JSONObject();
- json.put("projectId", projectId);
- exchange.getIn().setBody(json.toString());
- })
- .to("direct:getEquipmentByPj")
- .process(exchange -> {
- String jsonStr = exchange.getIn().getBody(String.class);
- DPSelectPropertyResult eqResult = JSONObject.parseObject(jsonStr, DPSelectPropertyResult.class);
- exchange.setProperty("facilityData" + exchange.getExchangeId(), eqResult);
- exchange.getIn().setBody(exchange.getProperty("projectId" + exchange.getExchangeId()));
- })
- .to("direct:getPropertyStatisticsByProject");
- // 主动同步数据平台项目名接口
- rest("/project/").post("sync_name")
- .consumes(MediaType.APPLICATION_JSON)
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .to("direct:synProjectName");
- // 根据项目id获取项目的名称.
- rest("/project/names/").post("query")
- .consumes(MediaType.APPLICATION_JSON)
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .process(exchange -> {
- try {
- String body = exchange.getIn().getBody(String.class);
- JSONObject obj = JSONObject.parseObject(body);
- if(obj != null && obj.getJSONArray("project") != null && obj.getJSONArray("project").size() > 0)
- {
- // List<String> projectIds = JSONArray.parseArray(obj.getJSONArray("project").toJSONString(), String.class);
- List<String> projectIds = obj.getJSONArray("project").toJavaList(String.class);
- exchange.setProperty("projectIds", new HashSet<String>(projectIds));
- }else
- throw new InvalidPostException("输入格式错误");
- }catch (Exception ex){
- throw new InvalidPostException("输入格式错误");
- }
- exchange.getIn().setHeader(Exchange.HTTP_URI, String.join("", InitEnvRoute.dataPlatform, "/mng/project/query?bridgeEndpoint=true&secret=A123456"));
- }).setHeader(Exchange.HTTP_METHOD, constant("GET"))
- .to(InitEnvRoute.dataPlatform + "/mng/project/query?bridgeEndpoint=true&secret=A123456")
- .process(new GetNameByProjectIds());
- from("direct:synProjectName")
- .process(exchange -> {
- log.info("开始同步项目名");
- JSONArray criterias = new JSONArray();
- for (String pjId : ProPasCache.nameMap.keySet()) {
- JSONObject obj = new JSONObject();
- obj.put("projectId",pjId);
- obj.put("projectLocalName",ProPasCache.nameMap.get(pjId));
- criterias.add(obj);
- }
- JSONObject inserJson = new JSONObject();
- inserJson.put("criterias",criterias);
- log.info("数据:"+inserJson.toString());
- exchange.getIn().setBody(inserJson.toString());
- exchange.getIn().setHeader(Exchange.HTTP_URI, InitEnvRoute.venders+"/auxiliary/project/create?method=POST");
- log.info(InitEnvRoute.venders+"/auxiliary/project/create?method=POST");
- })
- .to(InitEnvRoute.venders+"/auxiliary/project/create");
- rest("/getInsuranceNum").post()
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .process(ContractMethods :: validateDPInsurerID)
- .process(ContractMethods :: preQueryEq)
- .to(InitEnvRoute.dataPlatform + "/object/subset_query?bridgeEndpoint=true")
- .process(ContractMethods :: extractInsuranceNum);
- rest("/getSupplierContractID").post()
- .produces(MediaType.APPLICATION_JSON)
- .route()
- .process(ContractMethods :: validateDPSupplierID)
- .process(ContractMethods :: preQueryEq)
- .to(InitEnvRoute.dataPlatform + "/object/subset_query?bridgeEndpoint=true")
- .process(ContractMethods :: extractSupplierContractIds);
- }
- }
|