| 
															
																@@ -16,9 +16,6 @@ import org.springframework.transaction.annotation.Transactional; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 import java.math.BigDecimal; 
															 | 
															
															 | 
															
																 import java.math.BigDecimal; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 import java.util.*; 
															 | 
															
															 | 
															
																 import java.util.*; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 import java.util.concurrent.atomic.AtomicReference; 
															 | 
															
															 | 
															
																 import java.util.concurrent.atomic.AtomicReference; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-import java.util.stream.Collectors; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-import java.util.stream.Stream; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 /** 
															 | 
															
															 | 
															
																 /** 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  * @author 杜 
															 | 
															
															 | 
															
																  * @author 杜 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  */ 
															 | 
															
															 | 
															
																  */ 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -38,12 +35,14 @@ public class PlanSummaryService extends CrudService<PlanSummaryMapper, Agricultu 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         Map<String, BigDecimal> processTrackingMap = new HashMap<>(); 
															 | 
															
															 | 
															
																         Map<String, BigDecimal> processTrackingMap = new HashMap<>(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         //提报人 
															 | 
															
															 | 
															
																         //提报人 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         Map<String, String> reportPersonMap = getPerson(); 
															 | 
															
															 | 
															
																         Map<String, String> reportPersonMap = getPerson(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        Map<String, String> flagMap = new HashMap<>(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         // 去重统计各个部门需求数量(配农网) 
															 | 
															
															 | 
															
																         // 去重统计各个部门需求数量(配农网) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         agriculturalDistributionNetworkList.forEach(agriculturalDistributionNetwork -> { 
															 | 
															
															 | 
															
																         agriculturalDistributionNetworkList.forEach(agriculturalDistributionNetwork -> { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //物料编码+提报人 
															 | 
															
															 | 
															
																             //物料编码+提报人 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             String key = agriculturalDistributionNetwork.getRequiredMaterialCode() + "-" + 
															 | 
															
															 | 
															
																             String key = agriculturalDistributionNetwork.getRequiredMaterialCode() + "-" + 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     reportPersonMap.get(agriculturalDistributionNetwork.getPlanSubmitter()); 
															 | 
															
															 | 
															
																                     reportPersonMap.get(agriculturalDistributionNetwork.getPlanSubmitter()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            String value= agriculturalDistributionNetwork.getMaterialDescription(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            flagMap.put(key,value); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //如果包含key 
															 | 
															
															 | 
															
																             //如果包含key 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if (agriculturalDistributionNetworkMap.containsKey(key)) { 
															 | 
															
															 | 
															
																             if (agriculturalDistributionNetworkMap.containsKey(key)) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 agriculturalDistributionNetworkMap.put(key,agriculturalDistributionNetworkMap.get(key). 
															 | 
															
															 | 
															
																                 agriculturalDistributionNetworkMap.put(key,agriculturalDistributionNetworkMap.get(key). 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -58,72 +57,43 @@ public class PlanSummaryService extends CrudService<PlanSummaryMapper, Agricultu 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         //去重统计各个部门需求数量(流程表) 
															 | 
															
															 | 
															
																         //去重统计各个部门需求数量(流程表) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         processTrackingList.forEach(processTracking -> { 
															 | 
															
															 | 
															
																         processTrackingList.forEach(processTracking -> { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             String key = processTracking.getMaterialCode() + "-" + reportPersonMap.get(processTracking.getApplicant()); 
															 | 
															
															 | 
															
																             String key = processTracking.getMaterialCode() + "-" + reportPersonMap.get(processTracking.getApplicant()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            String value= processTracking.getMaterialDescription(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            flagMap.put(key,value); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if (processTrackingMap.containsKey(key)) { 
															 | 
															
															 | 
															
																             if (processTrackingMap.containsKey(key)) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 processTrackingMap.put(key,processTrackingMap.get(key).add(new BigDecimal(processTracking.getDemandQuantity()))); 
															 | 
															
															 | 
															
																                 processTrackingMap.put(key,processTrackingMap.get(key).add(new BigDecimal(processTracking.getDemandQuantity()))); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             }else{ 
															 | 
															
															 | 
															
																             }else{ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 processTrackingMap.put(key,new BigDecimal(processTracking.getDemandQuantity())); 
															 | 
															
															 | 
															
																                 processTrackingMap.put(key,new BigDecimal(processTracking.getDemandQuantity())); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             } 
															 | 
															
															 | 
															
																             } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         }); 
															 | 
															
															 | 
															
																         }); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        //获取所有的key(物料编码,部门),使用stream流拼接获取两表keyset转换stream流合并去重 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        List<String> keyList = Stream.concat(processTrackingMap.keySet().stream(), agriculturalDistributionNetworkMap.keySet().stream()).distinct().collect(Collectors.toList()); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         //配农网V / 跟踪Q 
															 | 
															
															 | 
															
																         //配农网V / 跟踪Q 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        keyList.forEach(list->{ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            String[] split = list.split("-"); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        flagMap.forEach((k,v)->{ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            String[] split = k.split("-"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             PlanSummary planSummary = new PlanSummary(); 
															 | 
															
															 | 
															
																             PlanSummary planSummary = new PlanSummary(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            //物料编码 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+           //物料编码 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             planSummary.setMaterialCoding(split[0]); 
															 | 
															
															 | 
															
																             planSummary.setMaterialCoding(split[0]); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            //查找部门 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+           //查找部门 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             String dictLabels = DictUtils.getDictLabel(split[1], "report_department", ""); 
															 | 
															
															 | 
															
																             String dictLabels = DictUtils.getDictLabel(split[1], "report_department", ""); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            //把部门赋值给planSummary 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+           //把部门赋值给planSummary 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             planSummary.setProjectDepartment(dictLabels); 
															 | 
															
															 | 
															
																             planSummary.setProjectDepartment(dictLabels); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //如果两个表有相同的物料编码部门, 
															 | 
															
															 | 
															
																             //如果两个表有相同的物料编码部门, 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            if(processTrackingMap.containsKey(list)&&agriculturalDistributionNetworkMap.containsKey(list)){ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                //赋值 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                planSummary.setAmountOfDemand(processTrackingMap.get(list).toString()); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                //上报数量(物料编码,部门) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                planSummary.setNumberOfReports(agriculturalDistributionNetworkMap.get(list).toString()); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                //过滤物料编码相同,部门相同取第一个,取物料描述 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                Optional<String> materialCoding = processTrackingList.stream().filter(processTracking -> processTracking.getMaterialCode().equals(split[0]) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                        ).findFirst().map(ProcessTracking::getMaterialDescription); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                //如果Optional为空或没有值 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                if(materialCoding.isPresent()){ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                    //赋值 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                    planSummary.setDescriptionOfMaterials(materialCoding.get()); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                }else{ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                    planSummary.setDescriptionOfMaterials(null); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if(processTrackingMap.containsKey(k)&&agriculturalDistributionNetworkMap.containsKey(k)){ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                //赋值 上报数量(物料编码,部门) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                planSummary.setAmountOfDemand(processTrackingMap.get(k).toString()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                planSummary.setNumberOfReports(agriculturalDistributionNetworkMap.get(k).toString()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                planSummary.setDescriptionOfMaterials(v); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 //如果流程表有而配农网没有 
															 | 
															
															 | 
															
																                 //如果流程表有而配农网没有 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            }else if(processTrackingMap.containsKey(list)&&!agriculturalDistributionNetworkMap.containsKey(list)){ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            }else if(processTrackingMap.containsKey(k)&&!agriculturalDistributionNetworkMap.containsKey(k)){ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 //赋值 
															 | 
															
															 | 
															
																                 //赋值 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                planSummary.setAmountOfDemand(processTrackingMap.get(list).toString()); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                planSummary.setAmountOfDemand(processTrackingMap.get(k).toString()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 planSummary.setNumberOfReports("0"); 
															 | 
															
															 | 
															
																                 planSummary.setNumberOfReports("0"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                //过滤物料编码相同,部门相同取第一个,取物料描述 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                Optional<String> materialCoding = processTrackingList.stream().filter(p -> p.getMaterialCode().equals(split[0]) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                        ).findFirst().map(ProcessTracking::getMaterialDescription); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                //如果Optional为空或没有值 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                if(materialCoding.isPresent()){ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                    planSummary.setDescriptionOfMaterials(materialCoding.get()); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                }else{ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                    planSummary.setDescriptionOfMaterials(null); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                planSummary.setDescriptionOfMaterials(v); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 //流程表没有配农网有 
															 | 
															
															 | 
															
																                 //流程表没有配农网有 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            }else if(!processTrackingMap.containsKey(list)&&agriculturalDistributionNetworkMap.containsKey(list)){ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            }else if(!processTrackingMap.containsKey(k)&&agriculturalDistributionNetworkMap.containsKey(k)){ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 //赋值 
															 | 
															
															 | 
															
																                 //赋值 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 planSummary.setAmountOfDemand("0"); 
															 | 
															
															 | 
															
																                 planSummary.setAmountOfDemand("0"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 //上报数量(物料编码,部门) 
															 | 
															
															 | 
															
																                 //上报数量(物料编码,部门) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                planSummary.setNumberOfReports(agriculturalDistributionNetworkMap.get(list).toString()); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                Optional<String> materialCoding = agriculturalDistributionNetworkList.stream(). 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                        filter(a -> a.getRequiredMaterialCode().equals(split[0]) ).findFirst().map(AgriculturalDistributionNetwork::getMaterialDescription); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                //如果Optional为空或没有值 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                if(materialCoding.isPresent()){ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                    planSummary.setDescriptionOfMaterials(materialCoding.get()); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                }else{ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                    planSummary.setDescriptionOfMaterials(null); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                planSummary.setNumberOfReports(agriculturalDistributionNetworkMap.get(k).toString()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                planSummary.setDescriptionOfMaterials(v); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             } 
															 | 
															
															 | 
															
																             } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //如果需求数量不是空并且不等于0 
															 | 
															
															 | 
															
																             //如果需求数量不是空并且不等于0 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if(StringUtils.isNotBlank(planSummary.getAmountOfDemand())&&!"0".equals(planSummary.getAmountOfDemand())){ 
															 | 
															
															 | 
															
																             if(StringUtils.isNotBlank(planSummary.getAmountOfDemand())&&!"0".equals(planSummary.getAmountOfDemand())){ 
															 |