| 
					
				 | 
			
			
				@@ -106,7 +106,6 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //循环初始化 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         liKuPoolList.forEach(liKuResourcePool -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //初始化剩余数量 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -115,7 +114,7 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             liKuResourcePool.setNumberOfNiches("0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //添加枚举标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //添加地区枚举标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (liKuResourcePool.getInvLocation().equals(AreaCodeFlagEnum.HLA2.getCode())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 liKuResourcePool.setLiKuFlag(AreaCodeFlagEnum.HLA2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else if (liKuResourcePool.getInvLocation().equals(AreaCodeFlagEnum.HLB1.getCode())) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -128,29 +127,8 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 liKuResourcePool.setLiKuFlag(AreaCodeFlagEnum.NO_PLACE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //添加标识 分组 段长数据 非段长数据 单位转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //添加标识 分组 段长数据 非段长数据 单位转换 先把千米转换为米 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (liKuResourcePool.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.M.getUnit()) || liKuResourcePool.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.KM.getUnit())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                /*if (StringUtils.isNotBlank(liKuResourcePool.getLengthOfCable())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    String[] split = liKuResourcePool.getLengthOfCable().split(";"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    for (int i = 0; i < split.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        //拆分成新的对象添加集合中 拆分段长为剩余 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        LiKuResourcePool ResourcePool = new LiKuResourcePool(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (liKuResourcePool.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.KM.getUnit())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            BeanUtils.copyProperties(liKuResourcePool, ResourcePool); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            ResourcePool.setUnitOfMeasurement(MaterialsUnitFlagEnum.M.getUnit()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            ResourcePool.setInventoryAmount(new BigDecimal(liKuResourcePool.getInventoryAmount()).multiply(new BigDecimal(1000)).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            ResourcePool.setRemaining(liKuResourcePool.getInventoryAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            ResourcePool.setRemaining(new BigDecimal(split[i]).multiply(new BigDecimal(1000)).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            ResourcePool.setLengthOfCable(new BigDecimal(split[i]).multiply(new BigDecimal(1000)).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            liKuResourcePool.setRemaining(split[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            liKuResourcePool.setLengthOfCable(split[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            BeanUtils.copyProperties(liKuResourcePool, ResourcePool); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        liKuIsSegmentPoolList.add(ResourcePool); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } else {}*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (liKuResourcePool.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.KM.getUnit())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     liKuResourcePool.setInventoryAmount(new BigDecimal(liKuResourcePool.getInventoryAmount()).multiply(new BigDecimal(1000)).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     liKuResourcePool.setLengthOfCable(liKuResourcePool.getInventoryAmount()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -167,13 +145,6 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<LiKuResourcePool> liKuIsSegmentPoolSortList = getSortLiKuPool(liKuIsSegmentPoolList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<LiKuResourcePool> liKuIsNotSegmentPoolSortList = getSortLiKuPool(liKuIsNotSegmentPoolList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /*liKuIsNotSegmentPoolSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            System.out.println(l.getLiKuFlag().getArea() + "---" + l.getMonthStorage() + "---" + l.getDaysStorage() + "---" + l.getInventoryAmount() + "---" + l.getBatch() + "---" + l.getExtendedCoding()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        });*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /*************************************************物资上报明细***************************************/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //物资上报 段长物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<MaterialReportDetails> materialIsSegmentList = new ArrayList<>(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -185,6 +156,7 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             l.setNumberOfNiches(0.0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //初始化申请数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             l.setNumberOfApplications(l.getTotal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //添加地区标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (l.getReportingArea().equals(AreaCodeFlagEnum.HLA2.getArea())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 l.setAreaCodeFlagEnum(AreaCodeFlagEnum.HLA2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else if (l.getReportingArea().equals(AreaCodeFlagEnum.HLD1.getArea())) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -212,86 +184,56 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<MaterialReportDetails> materialIsSegmentSortList = getSortMaterialReport(materialIsSegmentList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<MaterialReportDetails> materialIsNotSegmentSortList = getSortMaterialReport(materialIsNotSegmentList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /*materialIsNotSegmentSortList.forEach(m->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            System.out.println(m.getAreaCodeFlagEnum().getArea() + "-----" + m.getTotal() +"-------"+ m.getExtendedCoding()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        });*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /********************************************物资利库比较***************************************************/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /********************************************物资匹配利库比较***************************************************/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //非段长物资比较 本地库 物资匹配利库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         materialIsNotSegmentSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //优先匹配最佳 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            /*liKuIsNotSegmentPoolSortList.stream().filter(liKu -> liKu.getLiKuFlag().getArea().equals(l.getReportingArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && Double.valueOf(liKu.getRemaining()).compareTo(l.getTotal()) >= 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && l.getMaterialCode().equals(liKu.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            });*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //相同地区进行比较 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //相同地区进行比较 过滤出 地区相同 物料编码相同,扩展编码相同数据 根据筛选出结果直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 liKuIsNotSegmentPoolSortList.stream().filter(liKu -> liKu.getLiKuFlag().getArea().equals(l.getReportingArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         && l.getMaterialCode().equals(liKu.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         && l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //非段长物资比较 跨区库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //非段长物资比较 跨区库 物资匹配利库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         materialIsNotSegmentSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //需求数量与利库数量不同 去其他地区找 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            /*if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //优先匹配最佳 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                liKuIsNotSegmentPoolSortList.stream().filter(liKu -> !liKu.getLiKuFlag().getArea().equals(l.getReportingArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && Double.valueOf(liKu.getRemaining()).compareTo(l.getTotal()) >= 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && l.getMaterialCode().equals(liKu.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //如果总量与利库数量不同 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //不同地区比较 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //不同地区比较 过滤出 不地区相同 物料编码相同,扩展编码相同数据 根据筛选出结果直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 liKuIsNotSegmentPoolSortList.stream().filter(liKu -> !liKu.getLiKuFlag().getArea().equals(l.getReportingArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         && l.getMaterialCode().equals(liKu.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         && l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //非段长物资替代 本地库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         materialIsNotSegmentSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //如果本地库 区域库依旧没找到 则启用代替 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            /*if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //过滤出 本地库物料编码相同 最优选择 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                liKuIsNotSegmentPoolSortList.stream().filter(liKu -> liKu.getLiKuFlag().getArea().equals(l.getReportingArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && Double.valueOf(liKu.getRemaining()).compareTo(l.getTotal()) >= 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && l.getMaterialCode().equals(liKu.getMaterialCode())).forEach(liKuResourcePool -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //如果总量与利库数量不同 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //相同地区比较 过滤出相同地区 物料编码相同数据 扩展编码不同数据 根据筛选出结果直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 liKuIsNotSegmentPoolSortList.stream().filter(liKu -> liKu.getLiKuFlag().getArea().equals(l.getReportingArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         && l.getMaterialCode().equals(liKu.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         && !l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //非段长物资代替 库区库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         materialIsNotSegmentSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //如果本地库 区域库依旧没找到 则启用代替 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            /*if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //过滤出 本地库物料编码相同 最优选择 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                liKuIsNotSegmentPoolSortList.stream().filter(liKu -> !liKu.getLiKuFlag().getArea().equals(l.getReportingArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && Double.valueOf(liKu.getRemaining()).compareTo(l.getTotal()) >= 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && l.getMaterialCode().equals(liKu.getMaterialCode())).forEach(liKuResourcePool -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //如果总量与利库数量不同 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //不相同地区比较 过滤出不相同地区 物料编码相同数据 扩展编码不同数据 根据筛选出结果直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 liKuIsNotSegmentPoolSortList.stream().filter(liKu -> !liKu.getLiKuFlag().getArea().equals(l.getReportingArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         && l.getMaterialCode().equals(liKu.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         && !l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -299,270 +241,133 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /***********************************************本地库 段长匹配**********************************************************/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //段长物资 本地库比较 最优 上报物资匹配利库池 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         materialIsSegmentSortList.forEach(m -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //过滤 本地库 物料编码 扩展编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //相同地区进行比较 过滤出 地区相同 物料编码相同,扩展编码相同数据 根据筛选出结果直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<LiKuResourcePool> collect = liKuIsSegmentPoolSortList.stream().filter(liKu -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     liKu.getLiKuFlag().getArea().equals(m.getReportingArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             && m.getMaterialCode().equals(liKu.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            && m.getExtendedCoding().equals(liKu.getExtendedCoding()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            && m.getExtendedCoding().equals(liKu.getExtendedCoding())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OptimalUtil optimalUtil = new OptimalUtil(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //返回最优解 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //返回最优解集合直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             optimalUtil.getOptimalReverse(m.getTotal(), collect).forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //段长物资 本地库比较 最优 利库池匹配上报物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         liKuIsSegmentPoolSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<MaterialReportDetails> collect = materialIsSegmentSortList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && material.getExtendedCoding().equals(l.getExtendedCoding())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //相同地区进行比较 过滤出 地区相同 物料编码相同,扩展编码相同数据 根据筛选出结果直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MaterialReportDetails> collect = materialIsSegmentSortList.stream().filter(material -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            && material.getExtendedCoding().equals(l.getExtendedCoding())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OptimalUtil optimalUtil = new OptimalUtil(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //返回最优解集合直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             optimalUtil.getOptimal(Double.parseDouble(l.getLengthOfCable()), collect).forEach(m -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //段长物资比较 本地库 利库匹配物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        liKuIsSegmentPoolSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                materialIsSegmentSortList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && material.getExtendedCoding().equals(l.getExtendedCoding()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /***********************************************************跨区库 段长匹配***********************************************************************/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //段长物资 跨区库比较 最优 上报物资匹配利库池 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         materialIsSegmentSortList.forEach(m -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //过滤 跨区库 物料编码 扩展编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //不同地区进行比较 过滤出 地区不相同 物料编码相同,扩展编码相同数据 根据筛选出结果直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<LiKuResourcePool> collect = liKuIsSegmentPoolSortList.stream().filter(liKu -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     !liKu.getLiKuFlag().getArea().equals(m.getReportingArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             && m.getMaterialCode().equals(liKu.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             && m.getExtendedCoding().equals(liKu.getExtendedCoding()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OptimalUtil optimalUtil = new OptimalUtil(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //返回最优解 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //返回最优解集合直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             optimalUtil.getOptimalReverse(m.getTotal(), collect).forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //段长物资 跨区库比较 最优 利库池匹配上报物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         liKuIsSegmentPoolSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //不同地区进行比较 过滤出 地区不相同 物料编码相同,扩展编码相同数据 根据筛选出结果直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<MaterialReportDetails> collect = materialIsSegmentSortList.stream().filter(material -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     !material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && material.getExtendedCoding().equals(l.getExtendedCoding())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            && material.getExtendedCoding().equals(l.getExtendedCoding())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OptimalUtil optimalUtil = new OptimalUtil(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //返回最优解集合直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             optimalUtil.getOptimal(Double.parseDouble(l.getLengthOfCable()), collect).forEach(m -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //段长物资比较 跨区库 利库匹配物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        liKuIsSegmentPoolSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                materialIsSegmentSortList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && material.getExtendedCoding().equals(l.getExtendedCoding()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /*************************************************************本地库-代替 段长*******************************************************************/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //段长物资 本地库比较 最优 上报物资匹配利库池 替代 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         materialIsSegmentSortList.forEach(m -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //过滤 本地库 物料编码 扩展编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //同地区进行比较 过滤出 地区相同 物料编码相同,扩展编码不相同数据 根据筛选出结果直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<LiKuResourcePool> collect = liKuIsSegmentPoolSortList.stream().filter(liKu -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     liKu.getLiKuFlag().getArea().equals(m.getReportingArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             && m.getMaterialCode().equals(liKu.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            && !m.getExtendedCoding().equals(liKu.getExtendedCoding()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            && !m.getExtendedCoding().equals(liKu.getExtendedCoding())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OptimalUtil optimalUtil = new OptimalUtil(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //返回最优解 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //返回最优解集合直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             optimalUtil.getOptimalReverse(m.getTotal(), collect).forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL,  AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //段长物资 本地库比较 最优 利库池匹配上报物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //段长物资 本地库比较 最优 利库池匹配上报物资 替代 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         liKuIsSegmentPoolSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<MaterialReportDetails> collect = materialIsSegmentSortList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && !material.getExtendedCoding().equals(l.getExtendedCoding())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //同地区进行比较 过滤出 地区相同 物料编码相同,扩展编码不相同数据 根据筛选出结果直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MaterialReportDetails> collect = materialIsSegmentSortList.stream().filter(material -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            && !material.getExtendedCoding().equals(l.getExtendedCoding())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OptimalUtil optimalUtil = new OptimalUtil(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             optimalUtil.getOptimal(Double.parseDouble(l.getLengthOfCable()), collect).forEach(m -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL,  AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //段长物资比较 本地库 利库匹配物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        liKuIsSegmentPoolSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                materialIsSegmentSortList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && !material.getExtendedCoding().equals(l.getExtendedCoding()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.LOCAL,  AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /*****************************************************跨区库 段长 替代 ****************************************************************/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //段长物资 跨区库比较 最优 上报物资匹配利库池 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //段长物资 跨区库比较 最优 上报物资匹配利库池 替代 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         materialIsSegmentSortList.forEach(m -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //过滤 跨区库 物料编码 扩展编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //不同地区进行比较 过滤出 地区不相同 物料编码相同,扩展编码不相同数据 根据筛选出结果直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<LiKuResourcePool> collect = liKuIsSegmentPoolSortList.stream().filter(liKu -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     !liKu.getLiKuFlag().getArea().equals(m.getReportingArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             && m.getMaterialCode().equals(liKu.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            && !m.getExtendedCoding().equals(liKu.getExtendedCoding()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            && !m.getExtendedCoding().equals(liKu.getExtendedCoding())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OptimalUtil optimalUtil = new OptimalUtil(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //返回最优解 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             optimalUtil.getOptimalReverse(m.getTotal(), collect).forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //段长物资 跨区库比较 最优 利库池匹配上报物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         liKuIsSegmentPoolSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //不同地区进行比较 过滤出 地区不相同 物料编码相同,扩展编码不相同数据 根据筛选出结果直接调用计算利库做处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<MaterialReportDetails> collect = materialIsSegmentSortList.stream().filter(material -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     !material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            && !material.getExtendedCoding().equals(l.getExtendedCoding())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            && !material.getExtendedCoding().equals(l.getExtendedCoding())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OptimalUtil optimalUtil = new OptimalUtil(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             optimalUtil.getOptimal(Double.parseDouble(l.getLengthOfCable()), collect).forEach(m -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //段长物资比较 跨区库 利库匹配物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        liKuIsSegmentPoolSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                materialIsSegmentSortList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && !material.getExtendedCoding().equals(l.getExtendedCoding()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //段长物资比较 跨区库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /*liKuIsSegmentPoolSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //最优选择 过滤本地库  物料编码  扩展编码 段长大于上报物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            materialIsSegmentSortList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && material.getExtendedCoding().equals(l.getExtendedCoding()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) == 0).forEach(materialReportDetails -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                materialIsSegmentSortList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && material.getExtendedCoding().equals(l.getExtendedCoding()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //段长物资替换 本地库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        liKuIsSegmentPoolSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //最优选择 过滤本地库  物料编码  扩展编码 段长大于上报物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            materialIsSegmentSortList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) == 0).forEach(materialReportDetails -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                materialIsSegmentSortList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //段长物资替换 跨区库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        liKuIsSegmentPoolSortList.forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //最优选择 过滤本地库  物料编码  扩展编码 段长大于上报物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            materialIsSegmentSortList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) == 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && !l.getExtendedCoding().equals(material.getExtendedCoding())).forEach(materialReportDetails -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                materialIsSegmentSortList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && material.getMaterialCode().equals(l.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        && !l.getExtendedCoding().equals(material.getExtendedCoding())).forEach(materialReportDetails -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        });*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //段长非段长合并 排序 处理拆分段长 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /*List<LiKuResourcePool> tempList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        liKuIsSegmentPoolSortList.stream().map(m -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            m.setLengthOfCable(m.getRemaining() + ";"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return m; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }).forEach(l -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (tempList.size() != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                boolean flag = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                for (LiKuResourcePool temp : tempList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (l.getExtendedCoding().equals(temp.getExtendedCoding()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            && l.getMaterialCode().equals(temp.getMaterialCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            && l.getInventoryAmount().equals(temp.getInventoryAmount()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            && l.getInvLocation().equals(temp.getInvLocation()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            && l.getBatch().equals(temp.getBatch()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            && l.getFactory().equals(temp.getFactory()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            && l.getPlanner().equals(temp.getPlanner())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        //段长拼接 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        temp.setLengthOfCable(temp.getLengthOfCable() + l.getRemaining() + ";"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        //修改 剩余总量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        temp.setRemaining((new BigDecimal(temp.getRemaining()).add(new BigDecimal(l.getRemaining()))).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        //修改 利库数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        temp.setNumberOfNiches((new BigDecimal(temp.getNumberOfNiches()).add(new BigDecimal(l.getNumberOfNiches()))).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        flag = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (flag) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    tempList.add(l); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                tempList.add(l); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        });*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //利库合并 并排序 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //利库合并 并排序 将利库段长/非段长集合转换为流的形式进行合并,在此基础上对该流进行处理数据,把处理完的流转换为集合进行排序 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<LiKuResourcePool> sortLiKuPoolList = getSortLiKuPool(Stream.concat(liKuIsNotSegmentPoolSortList.stream(), liKuIsSegmentPoolSortList.stream()).map(m -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //如过单位为千米 说明该对象物资被转换为米进行操作,重新转换为千米 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (m.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.KM.getUnit())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (StringUtils.isNotBlank(m.getNumberOfNiches())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     m.setNumberOfNiches(new BigDecimal(m.getNumberOfNiches()).divide(new BigDecimal(1000)).toString()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -573,9 +378,10 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return m; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }).collect(Collectors.toList())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //上报资源合并 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<MaterialReportDetails> materialResultList = Stream.concat(materialIsNotSegmentList.stream(), materialIsSegmentList.stream()).map(m -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //处理上报资源中多余, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //上报资源合并 段长/非段长集合转换为流进行合并,在此基础上对该流进行数据处理,把处理完的流转换为集合进行排序 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MaterialReportDetails> materialResultList = getSortMaterialReport(Stream.concat(materialIsNotSegmentList.stream(), materialIsSegmentList.stream()).map(m -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //调用字符串处理方法,处理上报资源中多余, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             m.setLocalWareBatch(interceptString(m.getLocalWareBatch())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             m.setLocalWareHouse(interceptString(m.getLocalWareHouse())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             m.setNumberOfLocal(interceptString(m.getNumberOfLocal())); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -595,6 +401,7 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             m.setRegionalReplacementBatch(interceptString(m.getRegionalReplacementBatch())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             m.setRegionalReplacementHouse(interceptString(m.getRegionalReplacementHouse())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             m.setRegionalReplacementNumber(interceptString(m.getRegionalReplacementNumber())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //如过单位为千米 说明该对象物资被转换为米进行操作,重新转换为千米 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (m.getUnit().equals(MaterialsUnitFlagEnum.KM.getUnit())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 BigDecimal convert = new BigDecimal(1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (m.getTotal() != null) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -608,14 +415,14 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return m; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }).collect(Collectors.toList())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /***************************************存储数据库************************************************/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //清除利库池 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        materialReportDetailsMapper.delAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //更新利库池 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         liKuResourcePoolMapper.updateAllList(sortLiKuPoolList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果有新的上报物资导入 删除原有上报物资 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        materialReportDetailsMapper.delAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //将处理结果上报物资重新添加进数据库中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         materialResultList.forEach(DataEntity::preInsert); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         materialReportDetailsMapper.insertList(materialResultList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         j.setSuccess(true); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -673,11 +480,7 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //物资  申请数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         materialReportDetails.setNumberOfApplications(material_ApplicationCount.subtract(temp).doubleValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //物资  利库量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //if (judgingSegment == MaterialsUnitFlagEnum.IS_NOT_SEGMENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         materialReportDetails.setNumberOfNiches(material_liKuCount.add(temp).doubleValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /*} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            materialReportDetails.setNumberOfNiches(material_liKuCount.add(temp).doubleValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (materialReportDetails.getUnit().equals(MaterialsUnitFlagEnum.KM.getUnit())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             temp = temp.divide(new BigDecimal(1000)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -688,27 +491,29 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //拼接本地库批次号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 materialReportDetails.setLocalWareBatch(materialReportDetails.getLocalWareBatch() + liKuResourcePool.getBatch() + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 materialReportDetails.setLocalWareHouse(materialReportDetails.getLocalWareHouse() + liKuResourcePool.getInvLocation() + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                materialReportDetails.setNumberOfLocal(materialReportDetails.getNumberOfLocal() + temp.setScale(2, BigDecimal.ROUND_HALF_UP) + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                materialReportDetails.setNumberOfLocal(materialReportDetails.getNumberOfLocal() + temp.setScale(3, BigDecimal.ROUND_HALF_UP) + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //拼接跨区批次号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 materialReportDetails.setRegionalBatch(materialReportDetails.getRegionalBatch() + liKuResourcePool.getBatch() + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 materialReportDetails.setRegionalHouse(materialReportDetails.getRegionalHouse() + liKuResourcePool.getInvLocation() + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                materialReportDetails.setNumberOfRegional(materialReportDetails.getNumberOfRegional() + temp.setScale(2, BigDecimal.ROUND_HALF_UP) + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                materialReportDetails.setNumberOfRegional(materialReportDetails.getNumberOfRegional() + temp.setScale(3, BigDecimal.ROUND_HALF_UP) + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //区分本地利库与跨区利库替换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (AreaTypeFlagEnum.LOCAL_REPLACEMENT == replacement) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //拼接本地利库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 materialReportDetails.setLocalReplacementExtendedCoding(materialReportDetails.getLocalReplacementExtendedCoding() + liKuResourcePool.getExtendedCoding() + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 materialReportDetails.setLocalReplacementExtendedDescription(materialReportDetails.getLocalReplacementExtendedDescription() + liKuResourcePool.getExtendedDescription() + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 materialReportDetails.setLocalReplacementBatch(materialReportDetails.getLocalReplacementBatch() + liKuResourcePool.getBatch() + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 materialReportDetails.setLocalReplacementHouse(materialReportDetails.getLocalReplacementHouse() + liKuResourcePool.getInvLocation() + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                materialReportDetails.setLocalReplacementNumber(materialReportDetails.getLocalReplacementNumber() + temp.setScale(2, BigDecimal.ROUND_HALF_UP) + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                materialReportDetails.setLocalReplacementNumber(materialReportDetails.getLocalReplacementNumber() + temp.setScale(3, BigDecimal.ROUND_HALF_UP) + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //拼接跨区利库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 materialReportDetails.setRegionalReplacementExtendedCoding(materialReportDetails.getRegionalReplacementExtendedCoding() + liKuResourcePool.getExtendedCoding() + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 materialReportDetails.setRegionalReplacementExtendedDescription(materialReportDetails.getRegionalReplacementExtendedDescription() + liKuResourcePool.getExtendedDescription() + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 materialReportDetails.setRegionalReplacementBatch(materialReportDetails.getRegionalReplacementBatch() + liKuResourcePool.getBatch() + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 materialReportDetails.setRegionalReplacementHouse(materialReportDetails.getRegionalReplacementHouse() + liKuResourcePool.getInvLocation() + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                materialReportDetails.setRegionalReplacementNumber(materialReportDetails.getRegionalReplacementNumber() + temp.setScale(2, BigDecimal.ROUND_HALF_UP) + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                materialReportDetails.setRegionalReplacementNumber(materialReportDetails.getRegionalReplacementNumber() + temp.setScale(3, BigDecimal.ROUND_HALF_UP) + ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -758,8 +563,11 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private List<MaterialReportDetails> getSortMaterialReport(List<MaterialReportDetails> materialReportDetailsList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return materialReportDetailsList.stream().sorted((material1, material2) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //地区比较 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (material1.getAreaCodeFlagEnum() == material2.getAreaCodeFlagEnum()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //总量比较 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (material1.getTotal().compareTo(material2.getTotal()) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //扩展编码比较 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     return new BigDecimal(material1.getExtendedCoding()).compareTo(new BigDecimal(material2.getExtendedCoding())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     return material2.getTotal().compareTo(material1.getTotal()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -770,32 +578,4 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 贪心算法 递归组合 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param total 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param resultMap 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private Map<Integer, List<Integer>> GreedyAlgorithmRecursion(int total, List<Integer> value, Map<Integer, List<Integer>> resultMap) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (value.size() == 0 || resultMap.containsKey(total)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return resultMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        int result = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<Integer> list = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        int temp = total; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (int i = value.size() - 1; i >= 0; i--) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (temp >= value.get(i)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                temp -= value.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (temp >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    list.add(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    result += value.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        resultMap.put(result, list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return GreedyAlgorithmRecursion(total, value.stream().limit(value.size() - 1).collect(Collectors.toList()), resultMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |