| 
					
				 | 
			
			
				@@ -418,70 +418,73 @@ public class SyShippingDetailsServiceImpl extends ServiceImpl<SyShippingDetailsM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String invccode = deliverDetailVoList.get(0).getInvccode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 判断是否成衣 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         boolean isCloth = invccode.startsWith("19"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 如果是成衣,根据已提交的group_id单个提交 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 如果是面辅料,判断同一订单、同一发货日期、同一物料、是否有不同尺码的还未提交;如果有,先不推送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (isCloth){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<String> groupIdList = deliverDetailVoList.stream().filter(e->"1".equals(e.getSubmitStatus())).map(PurchasePreDeliverDetailVo::getSyShippingDetailGroupId).distinct().collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (String groupId : groupIdList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                List<PurchasePreDeliverDetailVo> findDetailVoList = deliverDetailVoList.stream().filter(p->p.getSyShippingDetailGroupId().equals(groupId)).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                PurchasePreDeliverDetailVo findDetailVo = findDetailVoList.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                PurchasePreDeliverVo deliverVo = new PurchasePreDeliverVo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVo.setSyShippingId(shippingDetails.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVo.setVbilldate(DateUtils.date2Str(shippingDetails.getDocumentDate(), DateUtils.date_sdf.get())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVo.setSendDate(findDetailVo.getArriveDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVo.setQuantity(findDetailVo.getQuantity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVo.setPurchasePreDeliverDetailList(findDetailVoList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVo.setSysOrgCode(findDetailVo.getSysOrgCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                List<PurchasePreDeliverDetailSizeVo> findDetailSizeVoList = deliverDetailSizeVoList.stream().filter(p1->p1.getSyShippingDetailGroupId().equals(findDetailVo.getSyShippingDetailGroupId())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                findDetailVo.setPurchasePreDeliverDetailSizeList(findDetailSizeVoList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVoList.add(deliverVo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 如果是面辅料,去掉同一采购委外订单、同一发货日期、同一物料、有不同尺码的还未提交的。先不推送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!isCloth){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 排除的订单id+存货编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<String> excludeList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             deliverDetailVoList.forEach(e->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if ("0".equals(e.getSubmitStatus())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if ("0".equals(e.getSubmitStatus()) && e.fabricNeedMerge()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     excludeList.add(e.toFabricUnicId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<PurchasePreDeliverDetailVo> includeDetailVoList = deliverDetailVoList.stream().filter(e->!excludeList.contains(e.toFabricUnicId())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<String> includeUnicIdList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            includeDetailVoList.forEach(e->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!includeUnicIdList.contains(e.toFabricUnicId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    includeUnicIdList.add(e.toFabricUnicId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deliverDetailVoList = deliverDetailVoList.stream().filter(e->!e.fabricNeedMerge() || !excludeList.contains(e.toFabricUnicId())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 去掉未提交的明细 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        deliverDetailVoList = deliverDetailVoList.stream().filter(e->"1".equals(e.getSubmitStatus())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 如果是面辅料,如果尺码不为空给就需要合并。根据同一采购委外订单、同一发货日期、同一物料合并不同尺码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //   1)如果分组已经包含当前分组,略过; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //   2)如果尺码为空不需要合并的,直接加分组编号; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //   3)如果尺码不为空的,根据标识,吧多个分组逗号分割加入; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //   4) 对每个分组id轮询分组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!isCloth){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<String> groupIdList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (PurchasePreDeliverDetailVo purchasePreDeliverDetailVo : deliverDetailVoList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                long count = groupIdList.stream().filter(p->p.indexOf(purchasePreDeliverDetailVo.getSyShippingDetailGroupId())>-1).count(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (count>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (String unicId : includeUnicIdList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                List<PurchasePreDeliverDetailVo> findDetailVoList = deliverDetailVoList.stream().filter(p->p.toFabricUnicId().equals(unicId)).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 多个分组号逗号分隔 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                List<String> groupIdList = findDetailVoList.stream().map(PurchasePreDeliverDetailVo::getSyShippingDetailGroupId).distinct().collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                String strGroupIds = String.join(",",groupIdList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 查找匹配的尺码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                List<PurchasePreDeliverDetailSizeVo> findDetailSizeVoList = deliverDetailSizeVoList.stream().filter(p1->groupIdList.contains(p1.getSyShippingDetailGroupId())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!purchasePreDeliverDetailVo.fabricNeedMerge()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    groupIdList.add(purchasePreDeliverDetailVo.getSyShippingDetailGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<String> findGroupidList = deliverDetailVoList.stream().filter(e->e.toFabricUnicId().equals(purchasePreDeliverDetailVo.toFabricUnicId())).map(PurchasePreDeliverDetailVo::getSyShippingDetailGroupId).distinct().collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String strGroupIds = String.join(",",findGroupidList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    groupIdList.add(strGroupIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<PurchasePreDeliverDetailVo> groupDetailVoList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (String groupId : groupIdList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<PurchasePreDeliverDetailVo> findDetailVoList = deliverDetailVoList.stream().filter(p->groupId.indexOf(p.getSyShippingDetailGroupId())>-1).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 多个尺码数量相加 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 PurchasePreDeliverDetailVo findDetailVo = findDetailVoList.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (int i=1; i<findDetailVoList.size(); i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     findDetailVo.setQuantity(findDetailVo.getQuantity().add(findDetailVoList.get(i).getQuantity())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 设置分组id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                findDetailVo.setSyShippingDetailGroupId(strGroupIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 设置尺码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                findDetailVo.setPurchasePreDeliverDetailSizeList(findDetailSizeVoList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 清空集合,只保留一个 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                findDetailVoList.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                findDetailVoList.add(findDetailVo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                PurchasePreDeliverVo deliverVo = new PurchasePreDeliverVo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVo.setSyShippingId(shippingDetails.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVo.setVbilldate(DateUtils.date2Str(shippingDetails.getDocumentDate(), DateUtils.date_sdf.get())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVo.setSendDate(findDetailVo.getArriveDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVo.setPurchasePreDeliverDetailList(findDetailVoList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVo.setQuantity(findDetailVo.getQuantity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVo.setSysOrgCode(findDetailVo.getSysOrgCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deliverVoList.add(deliverVo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                findDetailVo.setSyShippingDetailGroupId(groupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                groupDetailVoList.add(findDetailVo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deliverDetailVoList = groupDetailVoList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 单据拆分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<String> billIdList = deliverDetailVoList.stream().map(PurchasePreDeliverDetailVo::toBillId).distinct().collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (String billId : billIdList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<PurchasePreDeliverDetailVo> findDetailVoList = deliverDetailVoList.stream().filter(p->p.toBillId().equals(billId)).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PurchasePreDeliverDetailVo findDetailVo = findDetailVoList.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PurchasePreDeliverVo deliverVo = new PurchasePreDeliverVo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deliverVo.setSyShippingId(shippingDetails.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deliverVo.setVbilldate(DateUtils.date2Str(shippingDetails.getDocumentDate(), DateUtils.date_sdf.get())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deliverVo.setSendDate(findDetailVo.getArriveDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deliverVo.setPurchasePreDeliverDetailList(findDetailVoList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deliverVo.setSysOrgCode(findDetailVo.getSysOrgCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deliverVo.setQuantity(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            findDetailVoList.forEach(d->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                deliverVo.setQuantity(deliverVo.getQuantity().add(d.getQuantity())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<PurchasePreDeliverDetailSizeVo> findDetailSizeVoList = deliverDetailSizeVoList.stream(). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        filter(p1->d.getSyShippingDetailGroupId().indexOf(p1.getSyShippingDetailGroupId())>-1).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                d.setPurchasePreDeliverDetailSizeList(findDetailSizeVoList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deliverVoList.add(deliverVo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return deliverVoList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 |