| 
					
				 | 
			
			
				@@ -16,9 +16,6 @@ import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.math.BigDecimal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.concurrent.atomic.AtomicReference; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.stream.Stream; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @author 杜 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -38,12 +35,14 @@ public class PlanSummaryService extends CrudService<PlanSummaryMapper, Agricultu 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<String, BigDecimal> processTrackingMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //提报人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<String, String> reportPersonMap = getPerson(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, String> flagMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 去重统计各个部门需求数量(配农网) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         agriculturalDistributionNetworkList.forEach(agriculturalDistributionNetwork -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //物料编码+提报人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             String key = agriculturalDistributionNetwork.getRequiredMaterialCode() + "-" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     reportPersonMap.get(agriculturalDistributionNetwork.getPlanSubmitter()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String value= agriculturalDistributionNetwork.getMaterialDescription(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            flagMap.put(key,value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //如果包含key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (agriculturalDistributionNetworkMap.containsKey(key)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 agriculturalDistributionNetworkMap.put(key,agriculturalDistributionNetworkMap.get(key). 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -58,72 +57,43 @@ public class PlanSummaryService extends CrudService<PlanSummaryMapper, Agricultu 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //去重统计各个部门需求数量(流程表) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         processTrackingList.forEach(processTracking -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             String key = processTracking.getMaterialCode() + "-" + reportPersonMap.get(processTracking.getApplicant()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String value= processTracking.getMaterialDescription(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            flagMap.put(key,value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (processTrackingMap.containsKey(key)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 processTrackingMap.put(key,processTrackingMap.get(key).add(new BigDecimal(processTracking.getDemandQuantity()))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        keyList.forEach(list->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            String[] split = list.split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        flagMap.forEach((k,v)->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] split = k.split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             PlanSummary planSummary = new PlanSummary(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //物料编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           //物料编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             planSummary.setMaterialCoding(split[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //查找部门 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           //查找部门 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             String dictLabels = DictUtils.getDictLabel(split[1], "report_department", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //把部门赋值给planSummary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           //把部门赋值给planSummary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             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"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //过滤物料编码相同,部门相同取第一个,取物料描述 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                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.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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(StringUtils.isNotBlank(planSummary.getAmountOfDemand())&&!"0".equals(planSummary.getAmountOfDemand())){ 
			 |