Commit 170a7fba by huluobin

调拨在途 入库大于发货 取0

parent 15936fda
......@@ -163,6 +163,8 @@ public class DcBaseCostFirst {
private Optional<DcBaseSku> dcBaseSku;
private BigDecimal skuWeightRatio;
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first
......
......@@ -680,7 +680,7 @@
SELECT t1.targetwareno as warehouse_code,
t2.sku as bailun_sku,
t1.transporttype as transport_type,
t2.deliverycount - t2.storagecount as `count`,
if(t2.deliverycount - t2.storagecount &lt; 0 ,0,t2.deliverycount - t2.storagecount) as `count`,
0 as countplan
FROM dc_base_transfer_info t1
LEFT JOIN dc_base_transfer_info_skus t2 on t1.dataid = t2.dataid
......
package com.bailuntec.job;
import com.bailuntec.domain.constant.Constant;
import com.bailuntec.domain.entity.DcBaseCostFirst;
import com.bailuntec.domain.entity.DcBaseSku;
import com.bailuntec.domain.entity.DcMidCostFirstOrder;
......@@ -34,46 +33,29 @@ public class CalculateCostFirstJob extends PointJob {
DcBaseCostFirstMapper dcBaseCostFirstMapper = sqlSession.getMapper(DcBaseCostFirstMapper.class);
DcMidCostFirstOrderMapper dcMidCostFirstOrderMapper = sqlSession.getMapper(DcMidCostFirstOrderMapper.class);
// DcMidCostFirstMapper dcMidCostFirsMapper = sqlSession.getMapper(DcMidCostFirstMapper.class);
// DcBaseStockMapper dcBaseStockMapper = sqlSession.getMapper(DcBaseStockMapper.class);
DcBaseSkuMapper dcBaseSkuMapper = SessionUtil.getSession().getMapper(DcBaseSkuMapper.class);
countChannelOrder = dcBaseCostFirstMapper.countChannelOrder();
int totalPage = getChannelOrderPage(countChannelOrder, jobPointLog);
do {
log.info("当前第:{}页", jobPointLog.getPageIndex());
log.info("总共:{}页", totalPage);
Integer pageStart = jobPointLog.getPageIndex() * jobPointLog.getPageSize();
Integer pageStart = (jobPointLog.getPageIndex() - 1) * jobPointLog.getPageSize();
Integer pageOffset = jobPointLog.getPageSize();
List<DcBaseCostFirst> dcBaseCostFirstList = dcBaseCostFirstMapper.listUnCalc(pageStart, pageOffset);
if (ListUtil.isNotEmpty(dcBaseCostFirstList)) {
//更新对应的DcBaseCostFirst状态已计算
// List<DcBaseCostFirst> dcBaseCostFirstList = costFirstOrderList
// .stream()
// .map(costFirstOrder ->
// dcBaseCostFirstMapper.selectByExample(DcBaseCostFirstExample.newAndCreateCriteria()
// .andChannelOrderIdEqualTo(costFirstOrder.getChannelOrderId())
// .andTransferOrderIdEqualTo(costFirstOrder.getTransferOrderId())
// .andBoxIdEqualTo(costFirstOrder.getBoxId())
// .andWarehouseCodeEqualTo(costFirstOrder.getWarehouseCode())
// .example())
// )
// .flatMap(List::stream)
// .collect(Collectors.toList());
// dcBaseCostFirstList.forEach(dcBaseCostFirst -> dcBaseCostFirst.setHasCalculation(true));
// dcBaseCostFirstMapper.upsertBatch(dcBaseCostFirstList);
List<DcBaseSku> dcBaseSkuList = dcBaseSkuMapper.selectByExample(DcBaseSkuExample.newAndCreateCriteria()
.andBailunSkuIn(dcBaseCostFirstList.stream().map(DcBaseCostFirst::getBailunSku).collect(Collectors.toList())).example());
//聚合base头程费sku信息
Map<String, DcBaseSku> dcBaseSkuMap = dcBaseSkuList.stream().collect(Collectors.toMap(DcBaseSku::getBailunSku, dcBaseSku -> dcBaseSku));
dcBaseCostFirstList.forEach(dcBaseCostFirst -> dcBaseCostFirst.setDcBaseSku(Optional.ofNullable(dcBaseSkuMap.get(dcBaseCostFirst.getBailunSku()))));
// List<DcBaseSku> dcBaseSkuList = dc
Map<String, List<DcBaseCostFirst>> dcBaseCostFirstMap = dcBaseCostFirstList.stream().collect(
Collectors.groupingBy(val -> val.getChannelOrderId() + val.getTransferOrderId() + val.getBoxId() + val.getWarehouseCode())
);
......@@ -81,21 +63,50 @@ public class CalculateCostFirstJob extends PointJob {
List<DcMidCostFirstOrder> dcMidCostFirstOrderList = dcBaseCostFirstMap.values()
.stream()
.map(dcBaseCostFirstGroup -> {
//总重量
BigDecimal totalWeight = dcBaseCostFirstGroup.stream().map(dcBaseCostFirst -> dcBaseCostFirst.getDcBaseSku().map(DcBaseSku::getWeight).orElse(BigDecimal.ZERO)
.multiply(new BigDecimal(dcBaseCostFirst.getQuantity() == null ? 0 : dcBaseCostFirst.getQuantity())))
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal leftRatio = BigDecimal.ONE;
if (totalWeight.equals(BigDecimal.ZERO)) {
for (int i = 0; i < dcBaseCostFirstGroup.size(); i++) {
DcBaseCostFirst dcBaseCostFirst = dcBaseCostFirstGroup.get(i);
//最后一个元素用减法计算
if (dcBaseCostFirstGroup.size() - 1 == i) {
dcBaseCostFirst.setSkuWeightRatio(leftRatio);
}
//前面用除法计算
else {
BigDecimal skuWeightRatio = BigDecimal.ONE.divide(new BigDecimal(dcBaseCostFirstGroup.size()), 2, BigDecimal.ROUND_HALF_UP);
dcBaseCostFirst.setSkuWeightRatio(skuWeightRatio);
leftRatio = leftRatio.subtract(skuWeightRatio);
}
}
} else {
for (int i = 0; i < dcBaseCostFirstGroup.size(); i++) {
DcBaseCostFirst dcBaseCostFirst = dcBaseCostFirstGroup.get(i);
//最后一个元素用减法计算
if (dcBaseCostFirstGroup.size() - 1 == i) {
dcBaseCostFirst.setSkuWeightRatio(leftRatio);
}
//前面用除法计算
else {
BigDecimal skuWeightRatio = new BigDecimal(dcBaseCostFirst.getQuantity()).multiply(dcBaseCostFirst.getDcBaseSku().map(DcBaseSku::getWeight).orElse(BigDecimal.ZERO))
.divide(totalWeight, 2, BigDecimal.ROUND_HALF_UP);
dcBaseCostFirst.setSkuWeightRatio(skuWeightRatio);
leftRatio = leftRatio.subtract(skuWeightRatio);
}
}
}
List<DcMidCostFirstOrder> dcMidCostFirstOrderGroup = dcBaseCostFirstGroup
.stream()
.map(dcBaseCostFirst -> {
// BigDecimal skuWeightRatio = dcBaseCostFirst.getDcBaseSku().map(DcBaseSku::getWeight).orElse(BigDecimal.ZERO)
// .multiply(new BigDecimal(dcBaseCostFirst.getQuantity())).divide(totalWeight, 3, RoundingMode.HALF_EVEN);
BigDecimal skuWeightRatio = BigDecimal.ONE.divide(new BigDecimal(dcBaseCostFirstGroup.size()), 2, BigDecimal.ROUND_HALF_UP);
BigDecimal skuCostFirst = dcBaseCostFirst.getCostFirst().multiply(skuWeightRatio).setScale(3, RoundingMode.HALF_EVEN);
BigDecimal skuCostFirst = dcBaseCostFirst.getCostFirst().multiply(dcBaseCostFirst.getSkuWeightRatio()).setScale(3, RoundingMode.HALF_EVEN);
DcMidCostFirstOrder dcMidCostFirstOrder = new DcMidCostFirstOrder();
dcMidCostFirstOrder.setBailunSku(dcBaseCostFirst.getBailunSku());
......@@ -104,7 +115,7 @@ public class CalculateCostFirstJob extends PointJob {
dcMidCostFirstOrder.setTransferOrderId(dcBaseCostFirst.getTransferOrderId());
dcMidCostFirstOrder.setQuantity(dcBaseCostFirst.getQuantity());
dcMidCostFirstOrder.setBoxId(dcBaseCostFirst.getBoxId());
dcMidCostFirstOrder.setWeightRatio(skuWeightRatio);
dcMidCostFirstOrder.setWeightRatio(dcBaseCostFirst.getSkuWeightRatio());
dcMidCostFirstOrder.setCostFirst(skuCostFirst);
dcMidCostFirstOrder.setCompanyId(dcBaseCostFirst.getCompanyId());
dcMidCostFirstOrder.setHasCalculation(false);
......@@ -126,62 +137,6 @@ public class CalculateCostFirstJob extends PointJob {
jobPointLog.setPageIndex(0);
// int countSkuWarehouse = dcMidCostFirstOrderMapper.countSkuWarehouse();
// int skuWarehouseTotalPage = getSkuWarehouseTotalPage(countSkuWarehouse);
// int index = 0;
// do {
// List<MidCostFirst> midCostFirstList = dcMidCostFirstOrderMapper.listSkuWarehouse(index * Constant.PAGE_SIZE, Constant.PAGE_SIZE);
//
// if (midCostFirstList != null && midCostFirstList.size() > 0) {
// DcMidCostFirst dcMidCostFirst = new DcMidCostFirst();
// for (MidCostFirst midCostFirst : midCostFirstList) {
//
// DcBaseStock dcBaseStock = dcBaseStockMapper.selectOneByExample(DcBaseStockExample
// .newAndCreateCriteria()
// .andBailunSkuEqualTo(midCostFirst.getBailunSku())
// .andWarehouseCodeEqualTo(midCostFirst.getWarehouseCode())
// .example());
//
// DcMidCostFirst dcMidCostFirst1 = dcMidCostFirsMapper.selectOneByExample(DcMidCostFirstExample
// .newAndCreateCriteria()
// .andBailunSkuEqualTo(midCostFirst.getBailunSku())
// .andWarehouseCodeEqualTo(midCostFirst.getWarehouseCode()).example());
//
// dcMidCostFirst.setBailunSku(midCostFirst.getBailunSku());
// dcMidCostFirst.setWarehouseCode(midCostFirst.getWarehouseCode());
// BigDecimal costFirst;
//
// if (dcMidCostFirst1 != null) {
// costFirst = (midCostFirst.getTotalCostFirst()
// .add(dcMidCostFirst1.getCostFirst()
// .multiply(BigDecimal.valueOf(dcMidCostFirst1.getCostCount()))))
// .divide(BigDecimal.valueOf(midCostFirst.getTotalCount())
// .add(BigDecimal.valueOf(dcMidCostFirst1.getCostCount())), 3, RoundingMode.HALF_EVEN);
// } else {
// costFirst = midCostFirst.getTotalCostFirst().divide(BigDecimal.valueOf(midCostFirst.getTotalCount()), 3, RoundingMode.HALF_EVEN);
// }
// dcMidCostFirst.setCostFirst(costFirst);
//
// if (dcBaseStock != null) {
// dcMidCostFirst.setCostCount(dcBaseStock.getUsableStock() + dcBaseStock.getOccupyStock());
// } else {
// dcMidCostFirst.setCostCount(midCostFirst.getTotalCount());
// }
//
// int i = dcMidCostFirsMapper.updateByExampleSelective(dcMidCostFirst, DcMidCostFirstExample
// .newAndCreateCriteria()
// .andBailunSkuEqualTo(dcMidCostFirst.getBailunSku())
// .andWarehouseCodeEqualTo(dcMidCostFirst.getWarehouseCode()).example());
// if (i == 0) {
// dcMidCostFirsMapper.insertSelective(dcMidCostFirst);
// }
// dcMidCostFirstOrderMapper.updateHasCalculation(midCostFirst);
// }
// }
// index++;
// }
// while (index < skuWarehouseTotalPage);
} catch (Exception e) {
throw new RuntimeException("任务失败", e);
}
......@@ -195,10 +150,4 @@ public class CalculateCostFirstJob extends PointJob {
return countChannelOrder / jobPointLog.getPageSize() + 1;
}
private int getSkuWarehouseTotalPage(int countSkuWarehouse) {
if (countSkuWarehouse % Constant.PAGE_SIZE == 0) {
return countSkuWarehouse / Constant.PAGE_SIZE;
}
return countSkuWarehouse / Constant.PAGE_SIZE + 1;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment