Route.java 14 KB

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