Browse Source

feat(应收对账): 明细单据按采购单号聚合

hejq 7 years ago
parent
commit
637bca6520

+ 1 - 1
src/main/java/com/uas/platform/b2b/model/ErpProdIODetail.java

@@ -212,7 +212,7 @@ public class ErpProdIODetail implements Serializable {
     /**
      * 是否已对账
      */
-    private Short haveChecked;
+    private Short haveChecked = Constant.NO;
 
     /**
      * 对账主表id

+ 4 - 0
src/main/java/com/uas/platform/b2b/model/ErpProdIo.java

@@ -1,6 +1,8 @@
 package com.uas.platform.b2b.model;
 
 import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -43,6 +45,8 @@ public class ErpProdIo {
      */
     private String vendorName;
 
+    @Getter@Setter List<ProductIoGroup> groupList;
+
     public List<ErpProdIODetail> getDetails() {
         return details;
     }

+ 42 - 0
src/main/java/com/uas/platform/b2b/model/ProductIoGroup.java

@@ -0,0 +1,42 @@
+package com.uas.platform.b2b.model;
+
+import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 应收对账明细单据分组
+ *
+ * @author hejq
+ * @date 2018-12-29 14:53
+ */
+@Data
+public class ProductIoGroup {
+
+    /**
+     * 采购单号
+     */
+    private String orderCode;
+
+    /**
+     * 发货数量
+     */
+    private Double sendQty;
+
+    /**
+     * 应收金额
+     */
+    private List<ApCheckAmount> checkAmountList;
+
+    /**
+     * 发货金额
+     */
+    private List<ApCheckAmount> sendAmountList;
+
+    /**
+     * 明细
+     */
+    private List<ErpProdIODetail> details = new ArrayList<>();
+}

+ 7 - 1
src/main/java/com/uas/platform/b2b/service/ErpProdIODetailService.java

@@ -60,7 +60,6 @@ public interface ErpProdIODetailService {
      */
     List<ErpProdIODetail> covertApCheckToErpIo(List<PurchaseApCheckItemInfo> apCheckList);
 
-
     /**
      * 设置对账金额信息
      *
@@ -73,4 +72,11 @@ public interface ErpProdIODetailService {
      * @throws InterruptedException 线程中断异常
      */
     void setCheckAmount(ErpProdIo erpProdIo, Long vendorUU, Long customerUU, String checkDate, Long fromDate, Long endDate) throws InterruptedException;
+
+    /**
+     * 按订单明细分组
+     *
+     * @param erpProdIo 出入库单信息
+     */
+    void groupByOrderCode(ErpProdIo erpProdIo);
 }

+ 23 - 5
src/main/java/com/uas/platform/b2b/service/impl/ErpProdIODetailServiceImpl.java

@@ -15,6 +15,7 @@ import com.uas.platform.b2b.model.ApcheckKeyWord;
 import com.uas.platform.b2b.model.DateFilter;
 import com.uas.platform.b2b.model.ErpProdIODetail;
 import com.uas.platform.b2b.model.ErpProdIo;
+import com.uas.platform.b2b.model.ProductIoGroup;
 import com.uas.platform.b2b.model.PurchaseApCheck;
 import com.uas.platform.b2b.model.PurchaseApCheckItemInfo;
 import com.uas.platform.b2b.model.Vendor;
@@ -41,9 +42,13 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.stream.Collectors;
+
+import static java.util.Comparator.comparing;
 
 
 /**
@@ -61,19 +66,16 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
 
     private final VendorDao vendorDao;
 
-    private final PurchaseApCheckDao apCheckDao;
-
     private final BoundedExecutor executor;
 
     private final PurchaseApCheckItemInfoDao apCheckItemInfoDao;
 
     @Autowired
     public ErpProdIODetailServiceImpl(CommonDao commonDao, PurchaseApCheckService apCheckService,
-                                      VendorDao vendorDao, PurchaseApCheckDao apCheckDao, PurchaseApCheckItemInfoDao apCheckItemInfoDao) {
+                                      VendorDao vendorDao, PurchaseApCheckItemInfoDao apCheckItemInfoDao) {
         this.commonDao = commonDao;
         this.apCheckService = apCheckService;
         this.vendorDao = vendorDao;
-        this.apCheckDao = apCheckDao;
         this.apCheckItemInfoDao = apCheckItemInfoDao;
         ExecutorService executorService = Executors.newCachedThreadPool();
         executor = new BoundedExecutor(executorService, 1600);
@@ -153,9 +155,25 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
             List<ErpProdIODetail> detailList = covertApCheckToErpIo(apCheckList);
             erpProdIo.getDetails().addAll(detailList);
         }
-		return erpProdIo;
+        Long start = System.currentTimeMillis();
+        groupByOrderCode(erpProdIo);
+        System.out.println("group cost: " + (System.currentTimeMillis() - start));
+        return erpProdIo;
 	}
 
+    /**
+     * 按订单明细分组
+     * @param erpProdIo 出入库单信息
+     */
+    @Override
+    public void groupByOrderCode(ErpProdIo erpProdIo) {
+        Set<String> codeSet = erpProdIo.getDetails().parallelStream().map(ErpProdIODetail::getOrdercode).collect(Collectors.toSet());
+        codeSet.forEach(code -> {
+            List<ErpProdIODetail> details = erpProdIo.getDetails().parallelStream()
+                .filter(detail -> code.equals(detail.getOrdercode())).collect(Collectors.toList());
+        });
+    }
+
     /**
      * 设置对账金额信息
      *