Route.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. package com.sagacloud.route;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.github.rjeschke.txtmark.Processor;
  6. import com.sagacloud.Exceptions.InvalidPostException;
  7. import com.sagacloud.cache.ProPasCache;
  8. import com.sagacloud.pojos.DPSelectPropertyResult;
  9. import com.sagacloud.route.processors.*;
  10. import com.sagacloud.route.processors.Insurance.*;
  11. import com.sagacloud.route.processors.Maintainance.FilterPropertyProcessor;
  12. import com.sagacloud.route.processors.Maintainance.QueryPropertyProcesspr;
  13. import com.sagacloud.route.processors.Manufacturer.MaunfacturerFilter;
  14. import com.sagacloud.route.processors.Manufacturer.GetVenderBySpecProcessor;
  15. import com.sagacloud.route.processors.PeriodTask.OnTimeTaskProcessor;
  16. import com.sagacloud.route.processors.PeriodTask.StatisticsProcessor;
  17. import com.sagacloud.route.processors.supplier.SupplierFilter;
  18. import com.sagacloud.route.processors.supplier.SupplyContractProcessor;
  19. import com.sagacloud.utils.Const;
  20. import org.apache.camel.Exchange;
  21. import org.apache.commons.io.IOUtils;
  22. import org.slf4j.Logger;
  23. import org.slf4j.LoggerFactory;
  24. import javax.ws.rs.core.MediaType;
  25. import java.io.StringWriter;
  26. import java.lang.reflect.ParameterizedType;
  27. import java.util.ArrayList;
  28. import java.util.HashSet;
  29. import java.util.List;
  30. import java.util.Set;
  31. /**
  32. * Created by Xiaoyu on 2018/7/10
  33. */
  34. public class Route extends ExceptionHandlerBaseRoute {
  35. private static final Logger log = LoggerFactory.getLogger(Route.class);
  36. @Override
  37. public void configure() throws Exception {
  38. configExceptionHandler();
  39. fromF("timer://simpleTimer?period=1m").process(new OnTimeTaskProcessor()).to("direct:syncAllProject");
  40. fromF("timer://simpleTimer?period=30m").to("direct:synProjectName");
  41. rest().get("/doc")
  42. .produces("text/html;charset=UTF-8")
  43. .route()
  44. .process(msg -> {
  45. String docContentStr = Processor.process(Route.class.getClassLoader().getResourceAsStream("documentation.md"));
  46. StringWriter writer = new StringWriter();
  47. IOUtils.copy(Route.class.getClassLoader().getResourceAsStream("template.html"), writer, "utf-8");
  48. String tmplateContentStr = writer.toString();
  49. msg.getOut().setBody(tmplateContentStr.replace("#replaceMePlease#", docContentStr));
  50. });
  51. // 生产商查询项目下的资产
  52. rest("/manufacturer/property/").post("query")
  53. .consumes(MediaType.APPLICATION_JSON)
  54. .produces(MediaType.APPLICATION_JSON)
  55. .route()
  56. .process(exchange -> {
  57. String jsonStr = exchange.getIn().getBody(String.class);
  58. JSONObject json = JSONObject.parseObject(jsonStr);
  59. exchange.setProperty("venderId", json.getString("venderId"));
  60. exchange.getIn().setBody(jsonStr);
  61. })
  62. .to("direct:getPropertiesByPj")
  63. .process(new GetVenderBySpecProcessor())
  64. .to(Const.venders + "/manufacturer/specification/query_vender")
  65. .process(new MaunfacturerFilter());
  66. // 供应商查询项目下的资产
  67. rest("/supplier/property/").post("query")
  68. .consumes(MediaType.APPLICATION_JSON)
  69. .produces(MediaType.APPLICATION_JSON)
  70. .route()
  71. .process(exchange -> {
  72. String jsonStr = exchange.getIn().getBody(String.class);
  73. JSONObject json = JSONObject.parseObject(jsonStr);
  74. exchange.setProperty("venderId", json.getString("venderId"));
  75. exchange.getIn().setBody(jsonStr);
  76. })
  77. .to("direct:getPropertiesByPj")
  78. .process(new GetVenderBySpecProcessor())
  79. .to(Const.venders + "/manufacturer/specification/query_vender")
  80. .process(new SupplierFilter());
  81. // 获取指定供应商在指定项目内的所有供应合同编号(从数据平台实时获取)
  82. rest("/supplier/contract/").post("query")
  83. .consumes(MediaType.APPLICATION_JSON)
  84. .produces(MediaType.APPLICATION_JSON)
  85. .route()
  86. .process(SupplyContractProcessor::getContractList);
  87. // 获取在保资产清单
  88. rest("/insurance/project/").post("query")
  89. .consumes(MediaType.APPLICATION_JSON)
  90. .produces(MediaType.APPLICATION_JSON)
  91. .route()
  92. .process(new GetInsuranceNoListProcessor())
  93. .to(String.join("", InitEnvRoute.venders, "/insurance/contract/query"))
  94. .process(new HandleWarrantyFromVenderProcessor())
  95. .to("direct:getPropertiesByPj")
  96. //.to(String.join("", InitEnvRoute.dataPlatform, "/property/relation_query"))
  97. .process(new GetPropertyUnderWarrantyProcessor());
  98. // 获取所有保单列表
  99. rest("/insurance/contract/").post("query")
  100. .consumes(MediaType.APPLICATION_JSON)
  101. .produces(MediaType.APPLICATION_JSON)
  102. .route()
  103. .process(new GetInsuranceNoListProcessor())
  104. .to(String.join("", InitEnvRoute.venders, "/insurance/contract/query"))
  105. .process(new HandleWarrantyFromVenderProcessor())
  106. .to("direct:getPropertiesByPj")
  107. .process(new GetPropertyCountInAllWarrantyProcessor());
  108. // 根据保单获取资产
  109. rest("/insurance/contract/property/").post("query")
  110. .consumes(MediaType.APPLICATION_JSON)
  111. .produces(MediaType.APPLICATION_JSON)
  112. .route()
  113. .process(new StoreInsuranceNoProcessor())
  114. .to("direct:getPropertiesByPj")
  115. .process(new GetPropertyInCertainWarrantyProcessor());
  116. // 查询指定项目内合同有效期内的资产/查询指定项目内历史维护资产
  117. rest("/maintainance/property/").post("query")
  118. .consumes(MediaType.APPLICATION_JSON)
  119. .produces(MediaType.APPLICATION_JSON)
  120. .route()
  121. .process(new QueryPropertyProcesspr())
  122. .to("direct:getEquipmentByPj")
  123. .process(new FilterPropertyProcessor());
  124. rest("/project/sync").post()
  125. .consumes(MediaType.APPLICATION_JSON)
  126. .produces(MediaType.APPLICATION_JSON)
  127. .route()
  128. .process(exchange -> {
  129. String jsonStr = exchange.getIn().getBody(String.class);
  130. JSONObject json = JSONObject.parseObject(jsonStr);
  131. JSONArray projectArr = json.getJSONArray("project");
  132. List<String> projectList = projectArr.toJavaList(String.class);
  133. if (projectList == null || projectList.size() == 0) {
  134. throw new InvalidPostException("project不能为空");
  135. }
  136. exchange.setProperty("projectList", projectList);
  137. })
  138. .to("direct:buildVenderMap");
  139. rest("/project/sync_all").post()
  140. .consumes(MediaType.APPLICATION_JSON)
  141. .produces(MediaType.APPLICATION_JSON)
  142. .route()
  143. .to("direct:syncAllProject");
  144. //同步全部项目的资产信息
  145. from("direct:syncAllProject")
  146. .process(exchange -> {
  147. System.out.println("someThing happened");
  148. exchange.setProperty("projectList", ProPasCache.pjList);
  149. log.warn("统计数据开始更新");
  150. })
  151. .to("direct:buildVenderMap");
  152. // 需要输入 body是Pj1101080001, getProperty("propertyData") 是 DPSelectPropertyResult类型,
  153. // getProperty("map") 是 Map<String, Map<String, String>>类型 说明: 信息点Name --> (厂商库该信息点的值 --> 所属厂商)
  154. from("direct:getPropertyStatisticsByProject").process(new StatisticsProcessor())
  155. .to(String.join("", InitEnvRoute.venders, "/auxiliary/property/create_by_project"));
  156. //body为JSONObject,含有projectId字段
  157. from("direct:getPropertiesByPj")
  158. .process(new GetPropByPjProcessor()).setHeader(Exchange.HTTP_METHOD, constant("POST"))
  159. .to(InitEnvRoute.dataPlatform + "/property/relation_query?bridgeEndpoint=true&method=POST");
  160. from("direct:getEquipmentByPj")
  161. .process(new GetEquipmentByPjProcessor())
  162. .to(Const.dataPlatform + "/object/subset_query");
  163. // 统计数据平台资产和设备信息(数量)
  164. from("direct:buildVenderMap").setHeader(Exchange.HTTP_METHOD, constant("POST"))
  165. .to(Const.venders + "/auxiliary/vender/query_detail?bridgeEndpoint=true&method=POST")
  166. .process(new VenderMapProcessor())
  167. .split(body())
  168. //.parallelProcessing()
  169. .process(exchange -> {
  170. String projectId = exchange.getIn().getBody(String.class);
  171. System.out.println("统计:" + projectId);
  172. JSONObject json = new JSONObject();
  173. json.put("projectId", projectId);
  174. exchange.setProperty("projectId" + exchange.getExchangeId(), projectId);
  175. exchange.getIn().setBody(json.toString());
  176. })
  177. .to("direct:getPropertiesByPj")
  178. .process(exchange -> {
  179. String jsonStr = exchange.getIn().getBody(String.class);
  180. DPSelectPropertyResult dpResult = JSONObject.parseObject(jsonStr, DPSelectPropertyResult.class);
  181. exchange.setProperty("propertyData" + exchange.getExchangeId(), dpResult);
  182. // 为下个路由准备输入数据
  183. String projectId = (String) exchange.getProperty("projectId" + exchange.getExchangeId());
  184. JSONObject json = new JSONObject();
  185. json.put("projectId", projectId);
  186. exchange.getIn().setBody(json.toString());
  187. })
  188. .to("direct:getEquipmentByPj")
  189. .process(exchange -> {
  190. String jsonStr = exchange.getIn().getBody(String.class);
  191. DPSelectPropertyResult eqResult = JSONObject.parseObject(jsonStr, DPSelectPropertyResult.class);
  192. exchange.setProperty("facilityData" + exchange.getExchangeId(), eqResult);
  193. exchange.getIn().setBody(exchange.getProperty("projectId" + exchange.getExchangeId()));
  194. })
  195. .to("direct:getPropertyStatisticsByProject");
  196. // 主动同步数据平台项目名接口
  197. rest("/project/").post("sync_name")
  198. .consumes(MediaType.APPLICATION_JSON)
  199. .produces(MediaType.APPLICATION_JSON)
  200. .route()
  201. .to("direct:synProjectName");
  202. // 根据项目id获取项目的名称.
  203. rest("/project/names/").post("query")
  204. .consumes(MediaType.APPLICATION_JSON)
  205. .produces(MediaType.APPLICATION_JSON)
  206. .route()
  207. .process(exchange -> {
  208. try {
  209. String body = exchange.getIn().getBody(String.class);
  210. JSONObject obj = JSONObject.parseObject(body);
  211. if(obj != null && obj.getJSONArray("project") != null && obj.getJSONArray("project").size() > 0)
  212. {
  213. // List<String> projectIds = JSONArray.parseArray(obj.getJSONArray("project").toJSONString(), String.class);
  214. List<String> projectIds = obj.getJSONArray("project").toJavaList(String.class);
  215. exchange.setProperty("projectIds", new HashSet<String>(projectIds));
  216. }else
  217. throw new InvalidPostException("输入格式错误");
  218. }catch (Exception ex){
  219. throw new InvalidPostException("输入格式错误");
  220. }
  221. exchange.getIn().setHeader(Exchange.HTTP_URI, String.join("", InitEnvRoute.dataPlatform, "/mng/project/query?bridgeEndpoint=true&secret=A123456"));
  222. }).setHeader(Exchange.HTTP_METHOD, constant("GET"))
  223. .to(InitEnvRoute.dataPlatform + "/mng/project/query?bridgeEndpoint=true&secret=A123456")
  224. .process(new GetNameByProjectIds());
  225. from("direct:synProjectName")
  226. .process(exchange -> {
  227. log.info("开始同步项目名");
  228. JSONArray criterias = new JSONArray();
  229. for (String pjId : ProPasCache.nameMap.keySet()) {
  230. JSONObject obj = new JSONObject();
  231. obj.put("projectId",pjId);
  232. obj.put("projectLocalName",ProPasCache.nameMap.get(pjId));
  233. criterias.add(obj);
  234. }
  235. JSONObject inserJson = new JSONObject();
  236. inserJson.put("criterias",criterias);
  237. log.info("数据:"+inserJson.toString());
  238. exchange.getIn().setBody(inserJson.toString());
  239. exchange.getIn().setHeader(Exchange.HTTP_URI, InitEnvRoute.venders+"/auxiliary/project/create?method=POST");
  240. log.info(InitEnvRoute.venders+"/auxiliary/project/create?method=POST");
  241. })
  242. .to(InitEnvRoute.venders+"/auxiliary/project/create");
  243. rest("/getInsuranceNum").post()
  244. .produces(MediaType.APPLICATION_JSON)
  245. .route()
  246. .process(ContractMethods :: validateDPInsurerID)
  247. .process(ContractMethods :: preQueryEq)
  248. .to(InitEnvRoute.dataPlatform + "/object/subset_query?bridgeEndpoint=true")
  249. .process(ContractMethods :: extractInsuranceNum);
  250. rest("/getSupplierContractID").post()
  251. .produces(MediaType.APPLICATION_JSON)
  252. .route()
  253. .process(ContractMethods :: validateDPSupplierID)
  254. .process(ContractMethods :: preQueryEq)
  255. .to(InitEnvRoute.dataPlatform + "/object/subset_query?bridgeEndpoint=true")
  256. .process(ContractMethods :: extractSupplierContractIds);
  257. }
  258. }