Browse Source

fix(应收对账): 明细数据按订单号聚合整理返回

hejq 7 years ago
parent
commit
7f5d100d64

+ 25 - 8
src/main/java/com/uas/platform/b2b/service/impl/ErpProdIODetailServiceImpl.java

@@ -4,11 +4,8 @@ import com.alibaba.fastjson.JSON;
 import com.uas.platform.b2b.core.util.BoundedExecutor;
 import com.uas.platform.b2b.core.util.DateFormatUtils;
 import com.uas.platform.b2b.core.util.DateUtils;
-import com.uas.platform.b2b.core.util.StringUtil;
-import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.dao.CommonDao;
-import com.uas.platform.b2b.dao.PurchaseApCheckDao;
 import com.uas.platform.b2b.dao.PurchaseApCheckItemInfoDao;
 import com.uas.platform.b2b.dao.VendorDao;
 import com.uas.platform.b2b.model.ApcheckKeyWord;
@@ -16,15 +13,13 @@ 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;
 import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
 import com.uas.platform.b2b.service.ErpProdIODetailService;
-import com.uas.platform.b2b.service.OrderRedDotService;
 import com.uas.platform.b2b.service.PurchaseApCheckService;
-import com.uas.platform.b2b.service.SnapshotService;
 import com.uas.platform.b2b.support.CollectionUtil;
+import com.uas.platform.b2b.support.DecimalUtils;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.task.ApCheckTask;
 import com.uas.platform.core.exception.IllegalOperatorException;
@@ -155,9 +150,7 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
             List<ErpProdIODetail> detailList = covertApCheckToErpIo(apCheckList);
             erpProdIo.getDetails().addAll(detailList);
         }
-        Long start = System.currentTimeMillis();
         groupByOrderCode(erpProdIo);
-        System.out.println("group cost: " + (System.currentTimeMillis() - start));
         return erpProdIo;
 	}
 
@@ -168,10 +161,34 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
     @Override
     public void groupByOrderCode(ErpProdIo erpProdIo) {
         Set<String> codeSet = erpProdIo.getDetails().parallelStream().map(ErpProdIODetail::getOrdercode).collect(Collectors.toSet());
+        List<ProductIoGroup> groupList = new ArrayList<>();
         codeSet.forEach(code -> {
+            ProductIoGroup group = new ProductIoGroup();
+            group.setOrderCode(code);
+            // 筛选单号一样的明细
             List<ErpProdIODetail> details = erpProdIo.getDetails().parallelStream()
                 .filter(detail -> code.equals(detail.getOrdercode())).collect(Collectors.toList());
+            group.setDetails(details);
+            // 统计发货数量
+            Double sendQty = details.stream().mapToDouble(ErpProdIODetail::getQty).sum();
+            group.setSendQty(sendQty);
+            // 明细筛选币别
+            Set<String> currencySet = details.stream().map(ErpProdIODetail::getCurrency).collect(Collectors.toSet());
+            // 根据币别统计金额
+            currencySet.forEach(currency -> {
+                List<ApCheckAmount> amounts = new ArrayList<>();
+                Double amount = details.stream().filter(tradeCount -> null != tradeCount && currency.equals(tradeCount.getCurrency()))
+                    .mapToDouble(ErpProdIODetail::getMoney).sum();
+                if (amount > 0) {
+                    amounts.add(new ApCheckAmount(currency, DecimalUtils.decimalPoint(amount, 2)));
+                }
+                group.setCheckAmountList(amounts);
+            });
+            // 按照是否已对账排序
+            group.getDetails().sort(comparing(ErpProdIODetail::getHaveChecked));
+            groupList.add(group);
         });
+        erpProdIo.setGroupList(groupList);
     }
 
     /**

+ 1 - 6
src/main/java/com/uas/platform/b2b/service/impl/PurchaseApBillServiceImpl.java

@@ -1,9 +1,7 @@
 package com.uas.platform.b2b.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.uas.platform.b2b.constant.StringConstant;
 import com.uas.platform.b2b.core.util.BoundedExecutor;
-import com.uas.platform.b2b.core.util.SplitArray;
 import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.dao.EnterpriseDao;
 import com.uas.platform.b2b.dao.PurchaseApBillDao;
@@ -19,19 +17,15 @@ import com.uas.platform.b2b.model.ErpProdIo;
 import com.uas.platform.b2b.model.Product;
 import com.uas.platform.b2b.model.PurchaseApBill;
 import com.uas.platform.b2b.model.PurchaseApBillItem;
-import com.uas.platform.b2b.model.PurchaseApCheck;
 import com.uas.platform.b2b.model.PurchaseApCheckItemInfo;
 import com.uas.platform.b2b.model.SearchFilter;
 import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.ps.ProductUtils;
-import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.ErpProdIODetailService;
 import com.uas.platform.b2b.service.PurchaseApBillService;
 import com.uas.platform.b2b.service.PurchaseApCheckService;
-import com.uas.platform.b2b.support.CollectionUtil;
 import com.uas.platform.b2b.support.SystemSession;
-import com.uas.platform.b2b.task.ApCheckTask;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
@@ -362,6 +356,7 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
             Enterprise enterprise = enterpriseDao.findOne(searchKeyWord.getVendorUU());
             erpProdIo.setVendorName(enterprise.getEnName());
         }
+        erpProdIODetailService.groupByOrderCode(erpProdIo);
         return erpProdIo;
     }