Browse Source

推送srm调整

fenghaifu 1 week ago
parent
commit
9e9a2747ec

+ 11 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/documents/shippingDetails/entity/VO/PurchasePreDeliverDetailVo.java

@@ -1,6 +1,8 @@
 package org.jeecg.modules.documents.shippingDetails.entity.VO;
 
 import lombok.Data;
+import org.apache.commons.beanutils.locale.LocaleConvertUtils;
+import org.jeecg.modules.system.util.oConvertUtils;
 
 import java.util.Date;
 import java.util.List;
@@ -81,4 +83,13 @@ public class PurchasePreDeliverDetailVo {
     public String toFabricUnicId(){
         return purchaseOrderId+"-"+arriveDate+"-"+invCode;
     }
+
+    public Boolean fabricNeedMerge(){
+        return oConvertUtils.isNotEmpty(size);
+    }
+
+    // 根据 采购委外主表ID+发货日期,判单是否同一个单据
+    public String toBillId(){
+        return purchaseOrderId+"-"+arriveDate;
+    }
 }

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/documents/shippingDetails/mapper/xml/SyShippingDetailsMapper.xml

@@ -359,7 +359,7 @@ ${ew.customSqlSegment}
 
     <select id="getPurchasePreDeliverDetailVo" resultType="org.jeecg.modules.documents.shippingDetails.entity.VO.PurchasePreDeliverDetailVo">
         select
-        -- 'purchasePreDeliverId','downSupplier','upSupplier', 'tailoring_Gate_Width', b.size 'size',
+        b.size 'size',
         b.group_Id 'syShippingDetailGroupId',b.order_Number 'orderCode',
         b.item_number 'styleNo',b.inventory_code 'invCode',b.colour 'color',
         b.inventory_name 'invName',b.specification_and_model 'invSpec',

+ 53 - 50
jeecg-boot-module-system/src/main/java/org/jeecg/modules/documents/shippingDetails/service/impl/SyShippingDetailsServiceImpl.java

@@ -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;
     }