123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- package com.sagacloud.route.processors;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.sagacloud.Exceptions.InvalidPostException;
- import com.sagacloud.pojos.venderDetail.*;
- import org.apache.camel.Exchange;
- import org.apache.camel.Processor;
- import java.util.*;
- /**
- * Created by Xiaoyu on 2018/7/13
- */
- public class VenderMapProcessor implements Processor {
- @Override
- public void process(Exchange exchange) throws Exception {
- //1.第一层为Manufacturer、Brand、Specification、Supplier、Insurer、InsuranceNum、Maintainer时
- //第二层map的key为厂商名称、产品名称等,指向厂商id
- //2.第一层为DPManufacturerID、DPSpecificationID、DPSupplierID、DPInsurerID、DPMaintainerID时
- //第二层为厂商id指向厂商id 或 型号id指向厂商id
- Map<String, Map<String, String>> nameMap = new HashMap<>();
- String jsonStr = exchange.getIn().getBody(String.class);
- System.out.println(jsonStr);
- JSONObject json = JSONObject.parseObject(jsonStr);
- if (json.getString("result").equals("failure")) {
- throw new InvalidPostException("请求厂商库出错");
- }
- JSONObject content = json.getJSONObject("content");
- AllVender venders = JSONObject.parseObject(content.toString(), AllVender.class);
- buildNameMap(venders,nameMap);
- exchange.setProperty("map",nameMap);
- exchange.getIn().setBody(exchange.getProperty("projectList"));
- }
- public void buildNameMap(AllVender venders, Map<String, Map<String, String>> nameMap) {
- initMap(nameMap);
- List<Manu> manuList = venders.getManuList();
- List<Supp> suppList = venders.getSuppList();
- List<Insure> insureList = venders.getInsureList();
- List<Maintn> maintnList = venders.getMaintnList();
- handleMaunfacturer(nameMap,manuList);
- handleSupplier(nameMap,suppList);
- handleInsurer(nameMap,insureList);
- handleMtn(nameMap,maintnList);
- }
- public void initMap(Map<String, Map<String, String>> nameMap) {
- String[] keyList = new String[]{"Manufacturer", "Brand", "Specification", "Supplier", "Insurer", "InsuranceNum"
- , "AllInsuranceNum", "Maintainer", "DPManufacturerID", "DPSpecificationID", "DPSupplierID", "DPInsurerID", "DPMaintainerID"};
- for (String key : keyList) {
- nameMap.put(key, new HashMap<String, String>());
- }
- }
- public void handleMtn(Map<String, Map<String, String>> nameMap, List<Maintn> maintnList){
- Set<String> visitedMaintainer = new HashSet<>();
- Set<String> conflictMaintainer = new HashSet<>();
- Map<String, String> maintainer = nameMap.get("Maintainer");
- Map<String, String> dpMaintainerID = nameMap.get("DPMaintainerID");
- for(Maintn m : maintnList){
- fillMap(maintainer,m.getName(),m.getVenderId(),visitedMaintainer,conflictMaintainer);
- dpMaintainerID.put(m.getVenderId(),m.getVenderId());
- }
- }
- public void handleInsurer(Map<String, Map<String, String>> nameMap, List<Insure> insureList){
- Date now = new Date();
- Set<String> visitedInsurer = new HashSet<>();
- Set<String> conflictInsurer = new HashSet<>();
- Map<String, String> insurer = nameMap.get("Insurer");
- Map<String, String> dpInsurerID = nameMap.get("DPInsurerID");
- Map<String, String> insuranceNum = nameMap.get("InsuranceNum");
- Map<String, String> allInsuranceNum = nameMap.get("AllInsuranceNum");
- for(Insure i : insureList ){
- fillMap(insurer,i.getName(),i.getVenderId(),visitedInsurer,conflictInsurer);
- dpInsurerID.put(i.getVenderId(),i.getVenderId());
- for(Contract c : i.getContract()){
- if(c.underWarranty(now)){
- insuranceNum.put(c.getInsuranceNo(),i.getVenderId());
- }
- allInsuranceNum.put(c.getInsuranceNo(),i.getVenderId());
- }
- }
- }
- public void handleSupplier(Map<String, Map<String, String>> nameMap, List<Supp> suppList){
- Set<String> visitedSupplier = new HashSet<>();
- Set<String> conflictSupplier = new HashSet<>();
- Map<String, String> supplier = nameMap.get("Supplier");
- Map<String, String> dpSupplierID = nameMap.get("DPSupplierID");
- for(Supp s : suppList){
- fillMap(supplier,s.getName(),s.getVenderId(),visitedSupplier,conflictSupplier);
- dpSupplierID.put(s.getVenderId(),s.getVenderId());
- }
- }
- public void handleMaunfacturer(Map<String, Map<String, String>> nameMap, List<Manu> manuList) {
- Set<String> visitedManufacturer = new HashSet<>();
- Set<String> conflictManufacturer = new HashSet<>();
- Set<String> visitedBrand = new HashSet<>();
- Set<String> conflictBrand = new HashSet<>();
- Set<String> visitedSpecification = new HashSet<>();
- Set<String> conflictSpecification = new HashSet<>();
- Map<String, String> manufacturer = nameMap.get("Manufacturer");
- Map<String, String> brand = nameMap.get("Brand");
- Map<String, String> specification = nameMap.get("Specification");
- Map<String, String> dpManufacturerID = nameMap.get("DPManufacturerID");
- Map<String, String> dpSpecificationID = nameMap.get("DPSpecificationID");
- for (Manu m : manuList) {
- String venderId = m.getVenderId();
- fillMap(manufacturer,m.getName(),venderId,visitedManufacturer,conflictManufacturer);
- dpManufacturerID.put(venderId, venderId);
- for (String specId : m.getSpecId()) {
- dpSpecificationID.put(specId,venderId);
- }
- for(String specName:m.getSpecName()){
- fillMap(specification,specName,venderId,visitedSpecification,conflictSpecification);
- }
- for(String brandName : m.getBrandName()){
- fillMap(brand,brandName,venderId,visitedBrand,conflictBrand);
- }
- }
- }
- private void fillMap(Map map, String key, String value, Set<String> visited, Set<String> conflict) {
- visited.add(key);
- if (conflict.contains(key)) {//如果之前产生过冲突,不再添加
- return;
- } else if (!map.containsKey(key)) {
- map.put(key, value);
- } else {
- if (!map.get(key).equals(value)) {
- conflict.add(key);
- map.remove(key);
- }
- }
- }
- }
|