VenderMapProcessor.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package com.sagacloud.route.processors;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.sagacloud.Exceptions.InvalidPostException;
  6. import com.sagacloud.pojos.venderDetail.*;
  7. import org.apache.camel.Exchange;
  8. import org.apache.camel.Processor;
  9. import java.util.*;
  10. /**
  11. * Created by Xiaoyu on 2018/7/13
  12. */
  13. public class VenderMapProcessor implements Processor {
  14. @Override
  15. public void process(Exchange exchange) throws Exception {
  16. //1.第一层为Manufacturer、Brand、Specification、Supplier、Insurer、InsuranceNum、Maintainer时
  17. //第二层map的key为厂商名称、产品名称等,指向厂商id
  18. //2.第一层为DPManufacturerID、DPSpecificationID、DPSupplierID、DPInsurerID、DPMaintainerID时
  19. //第二层为厂商id指向厂商id 或 型号id指向厂商id
  20. Map<String, Map<String, String>> nameMap = new HashMap<>();
  21. String jsonStr = exchange.getIn().getBody(String.class);
  22. System.out.println(jsonStr);
  23. JSONObject json = JSONObject.parseObject(jsonStr);
  24. if (json.getString("result").equals("failure")) {
  25. throw new InvalidPostException("请求厂商库出错");
  26. }
  27. JSONObject content = json.getJSONObject("content");
  28. AllVender venders = JSONObject.parseObject(content.toString(), AllVender.class);
  29. buildNameMap(venders,nameMap);
  30. exchange.setProperty("map",nameMap);
  31. exchange.getIn().setBody(exchange.getProperty("projectList"));
  32. }
  33. public void buildNameMap(AllVender venders, Map<String, Map<String, String>> nameMap) {
  34. initMap(nameMap);
  35. List<Manu> manuList = venders.getManuList();
  36. List<Supp> suppList = venders.getSuppList();
  37. List<Insure> insureList = venders.getInsureList();
  38. List<Maintn> maintnList = venders.getMaintnList();
  39. handleMaunfacturer(nameMap,manuList);
  40. handleSupplier(nameMap,suppList);
  41. handleInsurer(nameMap,insureList);
  42. handleMtn(nameMap,maintnList);
  43. }
  44. public void initMap(Map<String, Map<String, String>> nameMap) {
  45. String[] keyList = new String[]{"Manufacturer", "Brand", "Specification", "Supplier", "Insurer", "InsuranceNum"
  46. , "AllInsuranceNum", "Maintainer", "DPManufacturerID", "DPSpecificationID", "DPSupplierID", "DPInsurerID", "DPMaintainerID"};
  47. for (String key : keyList) {
  48. nameMap.put(key, new HashMap<String, String>());
  49. }
  50. }
  51. public void handleMtn(Map<String, Map<String, String>> nameMap, List<Maintn> maintnList){
  52. Set<String> visitedMaintainer = new HashSet<>();
  53. Set<String> conflictMaintainer = new HashSet<>();
  54. Map<String, String> maintainer = nameMap.get("Maintainer");
  55. Map<String, String> dpMaintainerID = nameMap.get("DPMaintainerID");
  56. for(Maintn m : maintnList){
  57. fillMap(maintainer,m.getName(),m.getVenderId(),visitedMaintainer,conflictMaintainer);
  58. dpMaintainerID.put(m.getVenderId(),m.getVenderId());
  59. }
  60. }
  61. public void handleInsurer(Map<String, Map<String, String>> nameMap, List<Insure> insureList){
  62. Date now = new Date();
  63. Set<String> visitedInsurer = new HashSet<>();
  64. Set<String> conflictInsurer = new HashSet<>();
  65. Map<String, String> insurer = nameMap.get("Insurer");
  66. Map<String, String> dpInsurerID = nameMap.get("DPInsurerID");
  67. Map<String, String> insuranceNum = nameMap.get("InsuranceNum");
  68. Map<String, String> allInsuranceNum = nameMap.get("AllInsuranceNum");
  69. for(Insure i : insureList ){
  70. fillMap(insurer,i.getName(),i.getVenderId(),visitedInsurer,conflictInsurer);
  71. dpInsurerID.put(i.getVenderId(),i.getVenderId());
  72. for(Contract c : i.getContract()){
  73. if(c.underWarranty(now)){
  74. insuranceNum.put(c.getInsuranceNo(),i.getVenderId());
  75. }
  76. allInsuranceNum.put(c.getInsuranceNo(),i.getVenderId());
  77. }
  78. }
  79. }
  80. public void handleSupplier(Map<String, Map<String, String>> nameMap, List<Supp> suppList){
  81. Set<String> visitedSupplier = new HashSet<>();
  82. Set<String> conflictSupplier = new HashSet<>();
  83. Map<String, String> supplier = nameMap.get("Supplier");
  84. Map<String, String> dpSupplierID = nameMap.get("DPSupplierID");
  85. for(Supp s : suppList){
  86. fillMap(supplier,s.getName(),s.getVenderId(),visitedSupplier,conflictSupplier);
  87. dpSupplierID.put(s.getVenderId(),s.getVenderId());
  88. }
  89. }
  90. public void handleMaunfacturer(Map<String, Map<String, String>> nameMap, List<Manu> manuList) {
  91. Set<String> visitedManufacturer = new HashSet<>();
  92. Set<String> conflictManufacturer = new HashSet<>();
  93. Set<String> visitedBrand = new HashSet<>();
  94. Set<String> conflictBrand = new HashSet<>();
  95. Set<String> visitedSpecification = new HashSet<>();
  96. Set<String> conflictSpecification = new HashSet<>();
  97. Map<String, String> manufacturer = nameMap.get("Manufacturer");
  98. Map<String, String> brand = nameMap.get("Brand");
  99. Map<String, String> specification = nameMap.get("Specification");
  100. Map<String, String> dpManufacturerID = nameMap.get("DPManufacturerID");
  101. Map<String, String> dpSpecificationID = nameMap.get("DPSpecificationID");
  102. for (Manu m : manuList) {
  103. String venderId = m.getVenderId();
  104. fillMap(manufacturer,m.getName(),venderId,visitedManufacturer,conflictManufacturer);
  105. dpManufacturerID.put(venderId, venderId);
  106. for (String specId : m.getSpecId()) {
  107. dpSpecificationID.put(specId,venderId);
  108. }
  109. for(String specName:m.getSpecName()){
  110. fillMap(specification,specName,venderId,visitedSpecification,conflictSpecification);
  111. }
  112. for(String brandName : m.getBrandName()){
  113. fillMap(brand,brandName,venderId,visitedBrand,conflictBrand);
  114. }
  115. }
  116. }
  117. private void fillMap(Map map, String key, String value, Set<String> visited, Set<String> conflict) {
  118. visited.add(key);
  119. if (conflict.contains(key)) {//如果之前产生过冲突,不再添加
  120. return;
  121. } else if (!map.containsKey(key)) {
  122. map.put(key, value);
  123. } else {
  124. if (!map.get(key).equals(value)) {
  125. conflict.add(key);
  126. map.remove(key);
  127. }
  128. }
  129. }
  130. }