Commit 09f94416 by wutong

自动周转修改异常提醒只存一条, 并清理停止监控的SKU-仓库.

parent 4fe27d36
...@@ -373,7 +373,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -373,7 +373,7 @@ public class AutoTurnoverJob extends PointJob {
} }
//自动下单管理的冗余-缺货等异常提醒 //自动下单管理的冗余-缺货等异常提醒
unusualFluctuation(bailunSku, warehouseCode, dcAutoTurnover, avgHistoryThreedaySales, forecastFluctuationList); unusualFluctuation(dcAutoConfigSkuWarehouse, bailunSku, warehouseCode, dcAutoTurnover, avgHistoryThreedaySales, forecastFluctuationList);
//拿一下2倍周转期内的入库总数 //拿一下2倍周转期内的入库总数
Integer quantityInbound = 0; Integer quantityInbound = 0;
...@@ -504,6 +504,11 @@ public class AutoTurnoverJob extends PointJob { ...@@ -504,6 +504,11 @@ public class AutoTurnoverJob extends PointJob {
private boolean actualForecastFluctuations(LocalDate recordTime, List<BigDecimal> forecastSalesList, Integer realInventory, BigDecimal totalSafeInventory, Integer outStock, DcAutoConfigSkuWarehouse dcAutoConfigSkuWarehouse, BigDecimal avgHistoryFourteendaySales, BigDecimal avgHistoryThreedaySales, List<DcAutoForecastFluctuation> forecastFluctuationList) { private boolean actualForecastFluctuations(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;//默认是停止了监控波动功能的
/*
* 如果没有配置停止监控
* 库存大于0或者平均销量大于0
* 那就要监控波动
*/
if ((dcAutoConfigSkuWarehouse == null && (realInventory > 0 || avgHistoryFourteendaySales.compareTo(BigDecimal.ZERO) == 1)) || (dcAutoConfigSkuWarehouse != null && dcAutoConfigSkuWarehouse.getStatus() == 0 && (realInventory > 0 || avgHistoryFourteendaySales.compareTo(BigDecimal.ZERO) == 1))) { if ((dcAutoConfigSkuWarehouse == null && (realInventory > 0 || avgHistoryFourteendaySales.compareTo(BigDecimal.ZERO) == 1)) || (dcAutoConfigSkuWarehouse != null && dcAutoConfigSkuWarehouse.getStatus() == 0 && (realInventory > 0 || avgHistoryFourteendaySales.compareTo(BigDecimal.ZERO) == 1))) {
hasMonitorFluctuation = true; hasMonitorFluctuation = true;
DcAutoForecastFluctuation dcAutoForecastFluctuationActual = null; DcAutoForecastFluctuation dcAutoForecastFluctuationActual = null;
...@@ -536,49 +541,36 @@ public class AutoTurnoverJob extends PointJob { ...@@ -536,49 +541,36 @@ public class AutoTurnoverJob extends PointJob {
* @param dcAutoTurnover * @param dcAutoTurnover
* @param forecastFluctuationList * @param forecastFluctuationList
*/ */
private void unusualFluctuation(String bailunSku, String warehouseCode, DcAutoTurnover dcAutoTurnover, BigDecimal avgHistoryThreedaySales, List<DcAutoForecastFluctuation> forecastFluctuationList) { private void unusualFluctuation(DcAutoConfigSkuWarehouse dcAutoConfigSkuWarehouse, String bailunSku, String warehouseCode, DcAutoTurnover dcAutoTurnover, BigDecimal avgHistoryThreedaySales, List<DcAutoForecastFluctuation> forecastFluctuationList) {
if (forecastFluctuationList != null && forecastFluctuationList.size() > 0) { //status` '监控状态, 默认0监控, 停止监控1',
try { try {
DcAutoForecastFluctuationMapper mapper = SessionUtil.getSession().getMapper(DcAutoForecastFluctuationMapper.class); DcAutoForecastFluctuationMapper mapper = SessionUtil.getSession().getMapper(DcAutoForecastFluctuationMapper.class);
for (DcAutoForecastFluctuation autoForecastFluctuation : forecastFluctuationList) { if (dcAutoConfigSkuWarehouse == null || dcAutoConfigSkuWarehouse.getStatus().equals(0)) {
autoForecastFluctuation.setBailunSku(bailunSku); if (forecastFluctuationList != null && forecastFluctuationList.size() > 0) {
autoForecastFluctuation.setWarehouseCode(warehouseCode); //拿最早的时间 + 最晚的时间, SKU-仓库维度只放一条
autoForecastFluctuation.setWarehouseName(dcAutoTurnover.getWarehouseName()); DcAutoForecastFluctuation dcAutoForecastFluctuation = forecastFluctuationList.get(0);
autoForecastFluctuation.setAvgSalesThree(avgHistoryThreedaySales); dcAutoForecastFluctuation.setEndTime(forecastFluctuationList.get(forecastFluctuationList.size() - 1).getEndTime());
//如果开始时间和结束时间 在表有, 就不修改 dcAutoForecastFluctuation.setBailunSku(bailunSku);
//如果开始时间和结束时间 不在表内已有的部分, 新增 dcAutoForecastFluctuation.setWarehouseCode(warehouseCode);
DcAutoForecastFluctuation dcAutoForecastFluctuationSelected = mapper.selectOneByExample(DcAutoForecastFluctuationExample.newAndCreateCriteria().andBailunSkuEqualTo(bailunSku).andWarehouseCodeEqualTo(warehouseCode).andTypeEqualTo(autoForecastFluctuation.getType()).andStartTimeGreaterThanOrEqualTo(autoForecastFluctuation.getStartTime()).andEndTimeLessThanOrEqualTo(autoForecastFluctuation.getEndTime()).example()); dcAutoForecastFluctuation.setWarehouseName(dcAutoTurnover.getWarehouseName());
//如果autoForecastFluctuation开始时间 小于 表里记录的开始时间, 小于等于 表里记录的结束时间 dcAutoForecastFluctuation.setAvgSalesThree(avgHistoryThreedaySales);
DcAutoForecastFluctuation dcAutoForecastFluctuationSelected = mapper.selectOneByExample(DcAutoForecastFluctuationExample.newAndCreateCriteria().andBailunSkuEqualTo(bailunSku).andWarehouseCodeEqualTo(warehouseCode).example());
if (dcAutoForecastFluctuationSelected != null) { if (dcAutoForecastFluctuationSelected != null) {
if (autoForecastFluctuation.getStartTime().compareTo(dcAutoForecastFluctuationSelected.getStartTime()) == -1 && autoForecastFluctuation.getEndTime().compareTo(dcAutoForecastFluctuationSelected.getEndTime()) <= 0) { dcAutoForecastFluctuation.setStartTime(dcAutoForecastFluctuationSelected.getStartTime());
autoForecastFluctuation.setEndTime(dcAutoForecastFluctuationSelected.getStartTime().isAfter(autoForecastFluctuation.getEndTime()) ? autoForecastFluctuation.getEndTime() : dcAutoForecastFluctuationSelected.getStartTime()); mapper.updateByExampleSelective(dcAutoForecastFluctuation, DcAutoForecastFluctuationExample.newAndCreateCriteria().andBailunSkuEqualTo(dcAutoForecastFluctuation.getBailunSku()).andWarehouseCodeEqualTo(dcAutoForecastFluctuation.getWarehouseCode()).example());
mapper.insertSelective(autoForecastFluctuation);
//如果autoForecastFluctuation开始时间 小于 表里记录的开始时间, 大于 表里记录的结束时间
} else if (autoForecastFluctuation.getStartTime().isBefore(dcAutoForecastFluctuationSelected.getStartTime()) && autoForecastFluctuation.getEndTime().isAfter(dcAutoForecastFluctuationSelected.getEndTime())) {
LocalDate tempEndTime = autoForecastFluctuation.getEndTime();
autoForecastFluctuation.setEndTime(dcAutoForecastFluctuationSelected.getStartTime().minusDays(1));
mapper.insertSelective(autoForecastFluctuation);
autoForecastFluctuation.setStartTime(dcAutoForecastFluctuationSelected.getEndTime().minusDays(1));
autoForecastFluctuation.setEndTime(tempEndTime);
mapper.insertSelective(autoForecastFluctuation);
//如果autoForecastFluctuation开始时间 大于等于 表里记录的开始时间, 大于 表里记录的结束时间
} else if (autoForecastFluctuation.getStartTime().compareTo(dcAutoForecastFluctuationSelected.getStartTime()) >= 0 && autoForecastFluctuation.getEndTime().isAfter(dcAutoForecastFluctuationSelected.getEndTime())) {
autoForecastFluctuation.setStartTime(dcAutoForecastFluctuationSelected.getEndTime());
autoForecastFluctuation.setEndTime(autoForecastFluctuation.getEndTime());
mapper.insertSelective(autoForecastFluctuation);
}
} else { } else {
mapper.insertSelective(autoForecastFluctuation); mapper.insertSelective(dcAutoForecastFluctuation);
}
} }
} else if(dcAutoConfigSkuWarehouse != null && dcAutoConfigSkuWarehouse.getStatus().equals(1)) {
mapper.deleteByExample(DcAutoForecastFluctuationExample.newAndCreateCriteria().andBailunSkuEqualTo(bailunSku).andWarehouseCodeEqualTo(warehouseCode).example());
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); throw new RuntimeException("MYBATIS操作DB存DcAutoForecastFluctuation失败", e);
throw new RuntimeException("MYBATIS操作DB失败", e);
} finally { } finally {
SessionUtil.closeSession(); SessionUtil.closeSession();
} }
} }
}
private Integer getTurnoverDelivery(TurnoverSkuDTO turnoverSku, DcBaseWarehouse dcBaseWarehouse,DcAutoTurnover dcAutoTurnover, DcAutoConfigDelivery dcAutoConfigDelivery, DcAveragePurchase dcAveragePurchase, DcAverageWarehouse dcAverageWarehouse) { private Integer getTurnoverDelivery(TurnoverSkuDTO turnoverSku, DcBaseWarehouse dcBaseWarehouse,DcAutoTurnover dcAutoTurnover, DcAutoConfigDelivery dcAutoConfigDelivery, DcAveragePurchase dcAveragePurchase, DcAverageWarehouse dcAverageWarehouse) {
/* /*
...@@ -1164,7 +1156,6 @@ public class AutoTurnoverJob extends PointJob { ...@@ -1164,7 +1156,6 @@ public class AutoTurnoverJob extends PointJob {
*/ */
if (j <= turnoverDays && hasMonitorFluctuation) { if (j <= turnoverDays && hasMonitorFluctuation) {
BigDecimal forecastShortSupplyDayJ = j == 0 ? forecastShortSupplyList.get(j) : forecastShortSupplyList.get(j).subtract(forecastShortSupplyList.get(j - 1)); BigDecimal forecastShortSupplyDayJ = j == 0 ? forecastShortSupplyList.get(j) : forecastShortSupplyList.get(j).subtract(forecastShortSupplyList.get(j - 1));
// if (forecastShortSupplyDayJ.doubleValue() > 0) {
if (forecastInventory.compareTo(totalSafeInventory.add(forecastSalesList.get(j))) == -1) { if (forecastInventory.compareTo(totalSafeInventory.add(forecastSalesList.get(j))) == -1) {
//预测断货, 需要检查前一天有没有预测冗余 //预测断货, 需要检查前一天有没有预测冗余
if (forecastFluctuationDays > 0) { if (forecastFluctuationDays > 0) {
......
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