|
|
@@ -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);
|
|
|
}
|
|
|
|
|
|
/**
|