Commit cc51a019 by wutong

修复自动周转持续冗余或缺货, 未记录的问题

parent 252f5ec1
...@@ -51,7 +51,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -51,7 +51,7 @@ public class AutoTurnoverJob extends PointJob {
* 根据不同分片 * 根据不同分片
* 再分页去处理数据 * 再分页去处理数据
*/ */
int shardingSize = totalPage % shardingContext.getShardingTotalCount() == 0? totalPage / shardingContext.getShardingTotalCount() : totalPage / shardingContext.getShardingTotalCount() + 1; int shardingSize = totalPage % shardingContext.getShardingTotalCount() == 0 ? totalPage / shardingContext.getShardingTotalCount() : totalPage / shardingContext.getShardingTotalCount() + 1;
if (shardingContext.getShardingItem() + 1 < shardingContext.getShardingTotalCount()) { if (shardingContext.getShardingItem() + 1 < shardingContext.getShardingTotalCount()) {
totalPage = shardingSize * (shardingContext.getShardingItem() + 1); totalPage = shardingSize * (shardingContext.getShardingItem() + 1);
} }
...@@ -81,10 +81,10 @@ public class AutoTurnoverJob extends PointJob { ...@@ -81,10 +81,10 @@ public class AutoTurnoverJob extends PointJob {
//错误记录到日志表, 任务跑完了再跑一次错误SKU //错误记录到日志表, 任务跑完了再跑一次错误SKU
try { try {
DcAutoExceptionMapper dcAutoExceptionMapper = SessionUtil.getSession().getMapper(DcAutoExceptionMapper.class); DcAutoExceptionMapper dcAutoExceptionMapper = SessionUtil.getSession().getMapper(DcAutoExceptionMapper.class);
DcAutoException dcAutoException = new DcAutoException(dcBaseStock.getBailunSku(),dcBaseStock.getWarehouseCode(),e.toString()); DcAutoException dcAutoException = new DcAutoException(dcBaseStock.getBailunSku(), dcBaseStock.getWarehouseCode(), e.toString());
dcAutoExceptionMapper.insertSelective(dcAutoException); dcAutoExceptionMapper.insertSelective(dcAutoException);
} catch (Exception ex) { } catch (Exception ex) {
log.error("保存错误SKU失败,sku="+ dcBaseStock.getBailunSku() + ",仓库=" + dcBaseStock.getWarehouseCode()); log.error("保存错误SKU失败,sku=" + dcBaseStock.getBailunSku() + ",仓库=" + dcBaseStock.getWarehouseCode());
} finally { } finally {
SessionUtil.closeSession(); SessionUtil.closeSession();
} }
...@@ -191,9 +191,9 @@ public class AutoTurnoverJob extends PointJob { ...@@ -191,9 +191,9 @@ public class AutoTurnoverJob extends PointJob {
} }
Integer bailunFirstLevelCatagoryId = getBailunCatagoryId(turnoverSku); //百伦第一级分类Id, 可以为null Integer bailunFirstLevelCatagoryId = getBailunCatagoryId(turnoverSku); //百伦第一级分类Id, 可以为null
// 获取调拨头程 + 调拨打包 + 海外仓入库天数 的配置 // 获取调拨头程 + 调拨打包 + 海外仓入库天数 的配置
DcAutoConfigDelivery dcAutoConfigDelivery = getDcAutoConfigDelivery(bailunSku,warehouseCode, dcBaseWarehouse, bailunFirstLevelCatagoryId); DcAutoConfigDelivery dcAutoConfigDelivery = getDcAutoConfigDelivery(bailunSku, warehouseCode, dcBaseWarehouse, bailunFirstLevelCatagoryId);
//获取周转天数计算配置, 数据来源于.net同事计算的均值 //获取周转天数计算配置, 数据来源于.net同事计算的均值
Integer turnoverDays = getTurnoverDelivery(turnoverSku,dcBaseWarehouse, dcAutoTurnover, dcAutoConfigDelivery, dcAveragePurchase, dcAverageWarehouse); Integer turnoverDays = getTurnoverDelivery(turnoverSku, dcBaseWarehouse, dcAutoTurnover, dcAutoConfigDelivery, dcAveragePurchase, dcAverageWarehouse);
if (paymentBeforeDelivery != null) { if (paymentBeforeDelivery != null) {
turnoverDays += paymentBeforeDelivery; turnoverDays += paymentBeforeDelivery;
} }
...@@ -261,7 +261,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -261,7 +261,7 @@ public class AutoTurnoverJob extends PointJob {
Integer purchase = 0;//采购在途 Integer purchase = 0;//采购在途
Integer transfer = 0;//调拨在途 Integer transfer = 0;//调拨在途
Integer outStock = 0 ;//缺货数 Integer outStock = 0;//缺货数
DcMidTransit dcMidTransit = null; DcMidTransit dcMidTransit = null;
try { try {
DcMidTransitMapper midTransitMapper = SessionUtil.getSession().getMapper(DcMidTransitMapper.class); DcMidTransitMapper midTransitMapper = SessionUtil.getSession().getMapper(DcMidTransitMapper.class);
...@@ -284,7 +284,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -284,7 +284,7 @@ public class AutoTurnoverJob extends PointJob {
* 还需要加上入库时长, * 还需要加上入库时长,
* 且不同交通方式的入库时长不一致 * 且不同交通方式的入库时长不一致
*/ */
ExpectedStorage(dcAutoConfigDelivery,forecastInboundRelationList, purchase, transfer, recordTime, dcAutoTurnover, forecastPurchaseInboundList, forecastTransferInboundList, forecastInboundList); ExpectedStorage(dcAutoConfigDelivery, forecastInboundRelationList, purchase, transfer, recordTime, dcAutoTurnover, forecastPurchaseInboundList, forecastTransferInboundList, forecastInboundList);
//通过SKU和仓库拿到实际库存 //通过SKU和仓库拿到实际库存
Integer realInventory = (dcBaseStock != null && dcBaseStock.getUsableStock() != null) ? dcBaseStock.getUsableStock() : 0; Integer realInventory = (dcBaseStock != null && dcBaseStock.getUsableStock() != null) ? dcBaseStock.getUsableStock() : 0;
...@@ -350,7 +350,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -350,7 +350,7 @@ public class AutoTurnoverJob extends PointJob {
*/ */
List<DcAutoForecastFluctuation> forecastFluctuationList = new ArrayList<>(turnoverDays); List<DcAutoForecastFluctuation> forecastFluctuationList = new ArrayList<>(turnoverDays);
DcAutoConfigSkuWarehouse dcAutoConfigSkuWarehouse = getAutoConfigSkuWarehouse(bailunSku, warehouseCode); DcAutoConfigSkuWarehouse dcAutoConfigSkuWarehouse = getAutoConfigSkuWarehouse(bailunSku, warehouseCode);
boolean hasMonitorFluctuation = actualForecastFluctuations(dcAutoTurnover,recordTime, forecastSalesList, realInventory, totalSafeInventory, outStock, dcAutoConfigSkuWarehouse, avgHistoryFourteendaySales, avgHistoryThreedaySales, forecastFluctuationList); boolean hasMonitorFluctuation = actualForecastFluctuations(dcAutoTurnover, recordTime, forecastSalesList, realInventory, totalSafeInventory, outStock, dcAutoConfigSkuWarehouse, avgHistoryFourteendaySales, avgHistoryThreedaySales, forecastFluctuationList);
/* /*
* 获取采购建议-FBA仓库 * 获取采购建议-FBA仓库
...@@ -377,7 +377,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -377,7 +377,7 @@ public class AutoTurnoverJob extends PointJob {
* 自动下单管理的冗余-缺货等异常提醒 * 自动下单管理的冗余-缺货等异常提醒
*/ */
if (hasMonitorFluctuation) { if (hasMonitorFluctuation) {
unusualFluctuation(totalSafeInventory,turnoverDays, recordTime, dcAutoConfigSkuWarehouse, turnoverSku, warehouseCode, dcAutoTurnover, avgHistoryThreedaySales, forecastFluctuationList, forecastShortSupplyList, forecastInventoryList); unusualFluctuation(totalSafeInventory, turnoverDays, recordTime, dcAutoConfigSkuWarehouse, turnoverSku, warehouseCode, dcAutoTurnover, avgHistoryThreedaySales, forecastFluctuationList, forecastShortSupplyList, forecastInventoryList);
} }
//拿一下2倍周转期内的入库总数 //拿一下2倍周转期内的入库总数
...@@ -412,7 +412,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -412,7 +412,7 @@ public class AutoTurnoverJob extends PointJob {
BigDecimal avgForecastFourteendaySales = BigDecimal.ZERO; BigDecimal avgForecastFourteendaySales = BigDecimal.ZERO;
BigDecimal avgForecastTurnoverDaySales = BigDecimal.ZERO; BigDecimal avgForecastTurnoverDaySales = BigDecimal.ZERO;
BigDecimal stockUpSales = BigDecimal.ZERO; BigDecimal stockUpSales = BigDecimal.ZERO;
int forturnoverDays = turnoverDays < 14? 14 : turnoverDays; int forturnoverDays = turnoverDays < 14 ? 14 : turnoverDays;
for (int i = 0; i < forturnoverDays; i++) { for (int i = 0; i < forturnoverDays; i++) {
if (i < 7) { if (i < 7) {
avgForecastSevendaySales = avgForecastSevendaySales.add(forecastSalesList.get(i)); avgForecastSevendaySales = avgForecastSevendaySales.add(forecastSalesList.get(i));
...@@ -422,7 +422,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -422,7 +422,7 @@ public class AutoTurnoverJob extends PointJob {
forecastInventoryList.add(i, BigDecimal.ZERO); forecastInventoryList.add(i, BigDecimal.ZERO);
forecastShortSupplyList.add(i, BigDecimal.ZERO); forecastShortSupplyList.add(i, BigDecimal.ZERO);
} }
if(i < 14) { if (i < 14) {
avgForecastFourteendaySales = avgForecastFourteendaySales.add(forecastSalesList.get(i)); avgForecastFourteendaySales = avgForecastFourteendaySales.add(forecastSalesList.get(i));
} }
if (i < turnoverDays) { if (i < turnoverDays) {
...@@ -506,7 +506,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -506,7 +506,7 @@ public class AutoTurnoverJob extends PointJob {
private void caculatePlatformAvgSales(DcAutoTurnover dcAutoTurnover) { private void caculatePlatformAvgSales(DcAutoTurnover dcAutoTurnover) {
try { try {
DcAutoSalesMapper mapper = SessionUtil.getSession().getMapper(DcAutoSalesMapper.class); DcAutoSalesMapper mapper = SessionUtil.getSession().getMapper(DcAutoSalesMapper.class);
SalesVolumeAvgDTO ebayAvgSales = mapper.getPlatformHistorySales(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode(),PlatformType.Ebay.value()); SalesVolumeAvgDTO ebayAvgSales = mapper.getPlatformHistorySales(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode(), PlatformType.Ebay.value());
dcAutoTurnover.setHistorySevendaySalesEbay(BigDecimal.ZERO); dcAutoTurnover.setHistorySevendaySalesEbay(BigDecimal.ZERO);
dcAutoTurnover.setHistoryFourteendaySalesEbay(BigDecimal.ZERO); dcAutoTurnover.setHistoryFourteendaySalesEbay(BigDecimal.ZERO);
dcAutoTurnover.setHistoryThirtydaySalesEbay(BigDecimal.ZERO); dcAutoTurnover.setHistoryThirtydaySalesEbay(BigDecimal.ZERO);
...@@ -544,7 +544,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -544,7 +544,7 @@ public class AutoTurnoverJob extends PointJob {
} }
} }
private boolean actualForecastFluctuations(DcAutoTurnover dcAutoTurnover,LocalDate recordTime, List<BigDecimal> forecastSalesList, Integer realInventory, BigDecimal totalSafeInventory, Integer outStock, DcAutoConfigSkuWarehouse dcAutoConfigSkuWarehouse, BigDecimal avgHistoryFourteendaySales, BigDecimal avgHistoryThreedaySales, List<DcAutoForecastFluctuation> forecastFluctuationList) { private boolean actualForecastFluctuations(DcAutoTurnover dcAutoTurnover, LocalDate recordTime, List<BigDecimal> forecastSalesList, Integer realInventory, BigDecimal totalSafeInventory, Integer outStock, DcAutoConfigSkuWarehouse dcAutoConfigSkuWarehouse, BigDecimal avgHistoryFourteendaySales, BigDecimal avgHistoryThreedaySales, List<DcAutoForecastFluctuation> forecastFluctuationList) {
boolean hasMonitorFluctuation = false;//默认是停止了监控波动功能的 boolean hasMonitorFluctuation = false;//默认是停止了监控波动功能的
/* /*
* 这个if判断单纯是为了判断实际冗余,然后存一个表给别人用 * 这个if判断单纯是为了判断实际冗余,然后存一个表给别人用
...@@ -559,12 +559,12 @@ public class AutoTurnoverJob extends PointJob { ...@@ -559,12 +559,12 @@ public class AutoTurnoverJob extends PointJob {
dcAutoDailyRedundance.setRecordTime(LocalDate.now().minusDays(1)); dcAutoDailyRedundance.setRecordTime(LocalDate.now().minusDays(1));
try { try {
DcAutoDailyRedundanceMapper mapper = SessionUtil.getSession().getMapper(DcAutoDailyRedundanceMapper.class); DcAutoDailyRedundanceMapper mapper = SessionUtil.getSession().getMapper(DcAutoDailyRedundanceMapper.class);
int i = mapper.updateByExampleSelective(dcAutoDailyRedundance,DcAutoDailyRedundanceExample.newAndCreateCriteria().andBailunSkuEqualTo(dcAutoDailyRedundance.getBailunSku()).andWarehouseCodeEqualTo(dcAutoDailyRedundance.getWarehouseCode()).andRecordTimeEqualTo(dcAutoDailyRedundance.getRecordTime()).example()); int i = mapper.updateByExampleSelective(dcAutoDailyRedundance, DcAutoDailyRedundanceExample.newAndCreateCriteria().andBailunSkuEqualTo(dcAutoDailyRedundance.getBailunSku()).andWarehouseCodeEqualTo(dcAutoDailyRedundance.getWarehouseCode()).andRecordTimeEqualTo(dcAutoDailyRedundance.getRecordTime()).example());
if (i == 0) { if (i == 0) {
mapper.insertSelective(dcAutoDailyRedundance); mapper.insertSelective(dcAutoDailyRedundance);
} }
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException("MYBATIS操作dcAutoDailyRedundance失败",e); throw new RuntimeException("MYBATIS操作dcAutoDailyRedundance失败", e);
} finally { } finally {
SessionUtil.closeSession(); SessionUtil.closeSession();
} }
...@@ -608,17 +608,22 @@ public class AutoTurnoverJob extends PointJob { ...@@ -608,17 +608,22 @@ public class AutoTurnoverJob extends PointJob {
* 波动提醒优先级 --> 实际缺货-实际冗余-预计缺货-预计冗余 * 波动提醒优先级 --> 实际缺货-实际冗余-预计缺货-预计冗余
*/ */
private void unusualFluctuation(BigDecimal totalSafeInventory, Integer turnoverDays, LocalDate recordTime, DcAutoConfigSkuWarehouse dcAutoConfigSkuWarehouse, DcBaseSku turnoverSku, String warehouseCode, DcAutoTurnover dcAutoTurnover, BigDecimal avgHistoryThreedaySales, List<DcAutoForecastFluctuation> forecastFluctuationList, List<BigDecimal> forecastShortSupplyList, List<BigDecimal> forecastInventoryList) { private void unusualFluctuation(BigDecimal totalSafeInventory, Integer turnoverDays, LocalDate recordTime, DcAutoConfigSkuWarehouse dcAutoConfigSkuWarehouse, DcBaseSku turnoverSku, String warehouseCode, DcAutoTurnover dcAutoTurnover, BigDecimal avgHistoryThreedaySales, List<DcAutoForecastFluctuation> forecastFluctuationList, List<BigDecimal> forecastShortSupplyList, List<BigDecimal> forecastInventoryList) {
int days = 0;//连续冗余或缺货天数
int index = -1;//冗余或缺货天数索引
int days = 0; if (forecastShortSupplyList.get(turnoverDays).compareTo(BigDecimal.ZERO) == 1) {
int index = -1;
for (int i = 0; i <= turnoverDays; i++) { for (int i = 0; i <= turnoverDays; i++) {
if (forecastShortSupplyList.get(i).compareTo(BigDecimal.ZERO) == 1) { if (forecastShortSupplyList.get(i).compareTo(BigDecimal.ZERO) == 1) {
if (forecastShortSupplyList.get(i).compareTo(BigDecimal.ZERO) == 1) {
days++; days++;
if (index < 0) { if (index < 0) {
index = i; index = i;
} }
} else if (index > 0) { if (i == turnoverDays && index >= 0) { //如果是最后一天
handleForecastFluctuation(2, forecastFluctuationList, recordTime, days, index);
days = 0;
index = -1;
}
} else if (index >= 0) {
handleForecastFluctuation(2, forecastFluctuationList, recordTime, days, index); handleForecastFluctuation(2, forecastFluctuationList, recordTime, days, index);
days = 0; days = 0;
index = -1; index = -1;
...@@ -627,14 +632,17 @@ public class AutoTurnoverJob extends PointJob { ...@@ -627,14 +632,17 @@ public class AutoTurnoverJob extends PointJob {
} }
} }
if (forecastInventoryList.get(turnoverDays).compareTo(totalSafeInventory) == 1) {
for (int i = 0; i <= turnoverDays; i++) { for (int i = 0; i <= turnoverDays; i++) {
if (forecastInventoryList.get(i).compareTo(BigDecimal.ZERO) == 1) {
if (i < turnoverDays && forecastInventoryList.get(i).compareTo(totalSafeInventory) == 1) { if (i < turnoverDays && forecastInventoryList.get(i).compareTo(totalSafeInventory) == 1) {
days++; days++;
if (index < 0) { if (index < 0) {
index = i; index = i;
} }
} else if (index > 0) { if (i == turnoverDays && index >= 0) { //如果是最后一天
handleForecastFluctuation(4, forecastFluctuationList, recordTime, days, index);
}
} else if (index >= 0) {
handleForecastFluctuation(4, forecastFluctuationList, recordTime, days, index); handleForecastFluctuation(4, forecastFluctuationList, recordTime, days, index);
break; break;
} }
...@@ -672,13 +680,13 @@ public class AutoTurnoverJob extends PointJob { ...@@ -672,13 +680,13 @@ public class AutoTurnoverJob extends PointJob {
} }
} }
private Integer getTurnoverDelivery(DcBaseSku turnoverSku, DcBaseWarehouse dcBaseWarehouse,DcAutoTurnover dcAutoTurnover, DcAutoConfigDelivery dcAutoConfigDelivery, DcAveragePurchase dcAveragePurchase, DcAverageWarehouse dcAverageWarehouse) { private Integer getTurnoverDelivery(DcBaseSku turnoverSku, DcBaseWarehouse dcBaseWarehouse, DcAutoTurnover dcAutoTurnover, DcAutoConfigDelivery dcAutoConfigDelivery, DcAveragePurchase dcAveragePurchase, DcAverageWarehouse dcAverageWarehouse) {
/* /*
* 供应商交期 * 供应商交期
* 先取dc_average_purchase,如果平均交期没有 * 先取dc_average_purchase,如果平均交期没有
* 再去SKUMS取, 取SKUMS数据的时候如果是国内仓,就还取dc_base_sku原来那个字段,否则就要取dc_base_sku原新字段(调拨交期) * 再去SKUMS取, 取SKUMS数据的时候如果是国内仓,就还取dc_base_sku原来那个字段,否则就要取dc_base_sku原新字段(调拨交期)
*/ */
Integer turnoverSupplierDelivery = dcAveragePurchase != null && dcAveragePurchase.getDeliveryDays() >= 0? dcAveragePurchase.getDeliveryDays() : -1; Integer turnoverSupplierDelivery = dcAveragePurchase != null && dcAveragePurchase.getDeliveryDays() >= 0 ? dcAveragePurchase.getDeliveryDays() : -1;
if (turnoverSupplierDelivery == null || turnoverSupplierDelivery.equals(-1)) { if (turnoverSupplierDelivery == null || turnoverSupplierDelivery.equals(-1)) {
turnoverSupplierDelivery = turnoverSku.getSupplierDelivery(); turnoverSupplierDelivery = turnoverSku.getSupplierDelivery();
//如果是国内仓,就还取原来那个字段,否则就要取新字段(调拨交期) //如果是国内仓,就还取原来那个字段,否则就要取新字段(调拨交期)
...@@ -1037,7 +1045,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -1037,7 +1045,7 @@ public class AutoTurnoverJob extends PointJob {
} }
private BigDecimal calculateSafeInventory(String bailunSku, String warehouseCode, Integer private BigDecimal calculateSafeInventory(String bailunSku, String warehouseCode, Integer
bailunFirstLevelCatagoryId, DcAutoSales dcAutoSales, String forecastSalesListJson,DcAutoTurnover dcAutoTurnover) { bailunFirstLevelCatagoryId, DcAutoSales dcAutoSales, String forecastSalesListJson, DcAutoTurnover dcAutoTurnover) {
/* /*
* 手动设置 * 手动设置
* 1. 根据仓库 + SKU在表里找dc_auto_config_safe_inventory * 1. 根据仓库 + SKU在表里找dc_auto_config_safe_inventory
...@@ -1095,9 +1103,9 @@ public class AutoTurnoverJob extends PointJob { ...@@ -1095,9 +1103,9 @@ public class AutoTurnoverJob extends PointJob {
dcAutoTurnover.setDailyWeightedSales(weightingAvgSales); dcAutoTurnover.setDailyWeightedSales(weightingAvgSales);
//乘倍数后的加权日均销量,小于0.8就置0 0.8-1 之间就置1 //乘倍数后的加权日均销量,小于0.8就置0 0.8-1 之间就置1
weightingAvgSales = weightingAvgSales.multiply(dcAutoConfigSafeInventory.getParam()).setScale(3, RoundingMode.HALF_EVEN); weightingAvgSales = weightingAvgSales.multiply(dcAutoConfigSafeInventory.getParam()).setScale(3, RoundingMode.HALF_EVEN);
if (weightingAvgSales.compareTo(BigDecimal.valueOf(0.8)) == -1 ){ if (weightingAvgSales.compareTo(BigDecimal.valueOf(0.8)) == -1) {
weightingAvgSales = BigDecimal.ZERO; weightingAvgSales = BigDecimal.ZERO;
} else if (weightingAvgSales.compareTo(BigDecimal.ONE) <= 0){ } else if (weightingAvgSales.compareTo(BigDecimal.ONE) <= 0) {
weightingAvgSales = BigDecimal.ONE; weightingAvgSales = BigDecimal.ONE;
} }
} else { } else {
...@@ -1291,7 +1299,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -1291,7 +1299,7 @@ public class AutoTurnoverJob extends PointJob {
dcAutoTurnover.setTurnoverSales(totalSales); dcAutoTurnover.setTurnoverSales(totalSales);
} }
//采购建议 = 安全库存缺少值 + 今日的实际缺货 + 本次采购到货日期前一天的累计销量 - 本次采购到货日期累计到货数量 + 预计销量 - 今日的实际库存 //采购建议 = 安全库存缺少值 + 今日的实际缺货 + 本次采购到货日期前一天的累计销量 - 本次采购到货日期累计到货数量 + 预计销量 - 今日的实际库存
BigDecimal totalAdvised = totalSafeInventory.subtract(forecastInventoryList.get(j>0?j - 1:0))//安全库存缺少值= 理论安全库存 - 预测库存 BigDecimal totalAdvised = totalSafeInventory.subtract(forecastInventoryList.get(j > 0 ? j - 1 : 0))//安全库存缺少值= 理论安全库存 - 预测库存
.add(BigDecimal.valueOf(outStock.longValue()))//今天的实际缺货 .add(BigDecimal.valueOf(outStock.longValue()))//今天的实际缺货
.add(totalSales)//累计销量 .add(totalSales)//累计销量
.subtract(BigDecimal.valueOf(totalInbound.doubleValue()))//累计到货 .subtract(BigDecimal.valueOf(totalInbound.doubleValue()))//累计到货
...@@ -1428,7 +1436,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -1428,7 +1436,7 @@ public class AutoTurnoverJob extends PointJob {
dcAutoTurnover.setTurnoverSales(totalSales); dcAutoTurnover.setTurnoverSales(totalSales);
} }
//采购建议 = 安全库存缺少值 + 今日的实际缺货 + 本次采购到货日期前一天的累计销量 - 本次采购到货日期累计到货数量 + 预计销量 //采购建议 = 安全库存缺少值 + 今日的实际缺货 + 本次采购到货日期前一天的累计销量 - 本次采购到货日期累计到货数量 + 预计销量
BigDecimal totalAdvised = totalSafeInventory.subtract(forecastInventoryList.get(j>0?j - 1:0))//安全库存缺少值= 理论安全库存 - 预测库存 BigDecimal totalAdvised = totalSafeInventory.subtract(forecastInventoryList.get(j > 0 ? j - 1 : 0))//安全库存缺少值= 理论安全库存 - 预测库存
.add(BigDecimal.valueOf(outStock.longValue()))//今天的实际缺货 .add(BigDecimal.valueOf(outStock.longValue()))//今天的实际缺货
.add(totalSales)//累计销量 .add(totalSales)//累计销量
.subtract(BigDecimal.valueOf(totalInbound.doubleValue()))//累计到货 .subtract(BigDecimal.valueOf(totalInbound.doubleValue()))//累计到货
...@@ -1505,7 +1513,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -1505,7 +1513,7 @@ public class AutoTurnoverJob extends PointJob {
* @param bailunFirstLevelCatagoryId * @param bailunFirstLevelCatagoryId
* @return * @return
*/ */
private DcAutoConfigDelivery getDcAutoConfigDelivery(String bailunSku,String warehouseCode, DcBaseWarehouse dcBaseWarehouse, Integer private DcAutoConfigDelivery getDcAutoConfigDelivery(String bailunSku, String warehouseCode, DcBaseWarehouse dcBaseWarehouse, Integer
bailunFirstLevelCatagoryId) { bailunFirstLevelCatagoryId) {
DcAutoConfigDelivery dcAutoConfigDelivery = null; DcAutoConfigDelivery dcAutoConfigDelivery = null;
//如果不是国内仓, 就读配置表 //如果不是国内仓, 就读配置表
......
...@@ -52,7 +52,7 @@ public class AutoTurnoverTest { ...@@ -52,7 +52,7 @@ public class AutoTurnoverTest {
// dcBaseStock = mapper.selectOneByExample(DcBaseStockExample.newAndCreateCriteria().andBailunSkuEqualTo("322572421").andWarehouseCodeEqualTo("QYBLZZ").example()); // dcBaseStock = mapper.selectOneByExample(DcBaseStockExample.newAndCreateCriteria().andBailunSkuEqualTo("322572421").andWarehouseCodeEqualTo("QYBLZZ").example());
// dcBaseStock = mapper.selectOneByExample(DcBaseStockExample.newAndCreateCriteria().andBailunSkuEqualTo("232232601").andWarehouseCodeEqualTo("CHUKFBA").example()); // dcBaseStock = mapper.selectOneByExample(DcBaseStockExample.newAndCreateCriteria().andBailunSkuEqualTo("232232601").andWarehouseCodeEqualTo("CHUKFBA").example());
// dcBaseStock = mapper.selectOneByExample(DcBaseStockExample.newAndCreateCriteria().andBailunSkuEqualTo("213789601").andWarehouseCodeEqualTo("GZBLWH").example()); // dcBaseStock = mapper.selectOneByExample(DcBaseStockExample.newAndCreateCriteria().andBailunSkuEqualTo("213789601").andWarehouseCodeEqualTo("GZBLWH").example());
dcBaseStock = mapper.selectOneByExample(DcBaseStockExample.newAndCreateCriteria().andBailunSkuEqualTo("ND016").andWarehouseCodeEqualTo("GZBLWH").example()); dcBaseStock = mapper.selectOneByExample(DcBaseStockExample.newAndCreateCriteria().andBailunSkuEqualTo("227290301").andWarehouseCodeEqualTo("AUFBACM").example());
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
......
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