Commit aeedc5bc by yinyong

备货计算:JIT,广州-01仓-张莹霞,张莹霞1、广州-03仓,赵美聪

     ①日均*备货天数-在途库存-库存+缺货
     ②日均*备货天数-在途库存-库存+缺货+备安全库存
parent fc1b8dfb
......@@ -17,7 +17,9 @@ public interface Constant {
String BUYER_JIT_2 = "张莹霞1";
String BUYER_JIT_3 = "冯兆欣";
String BUYER_JIT_4 = "黄镜洁";
String BUTER_JIT_5 = "赵美聪";
String WAREHOUSE_JIT = "GZBLWH";
String WAREHOUSE_JIT1 = "BLGZ03";
BigDecimal BIGDECIMAL_THIRTY = BigDecimal.valueOf(30);
BigDecimal BIGDECIMAL_FOURTEEN = BigDecimal.valueOf(14);
BigDecimal BIGDECIMAL_SEVEN = BigDecimal.valueOf(7);
......
......@@ -513,7 +513,11 @@ public class AutoTurnoverJob extends PointJob {
dcAutoTurnover.setInventoryAvailableDays(inventoryAvailableDays);
dcAutoTurnover.setSkuTitle(turnoverSku.getSkuTitleCn());
dcAutoTurnover.setPromotions(promotionsBuilder.toString());
dcAutoTurnover.setQuantityInitAdvise(forecastPurchaseAdvisedList.get(0).add(stockUpSales));
if ((warehouseCode.equals(Constant.WAREHOUSE_JIT) && (turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_1) || turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_2))) || (warehouseCode.equals(Constant.WAREHOUSE_JIT1) && (turnoverSku.getBuyerName().equals(Constant.BUTER_JIT_5)))) {
dcAutoTurnover.setQuantityInitAdvise(forecastPurchaseAdvisedList.get(0));
}else{
dcAutoTurnover.setQuantityInitAdvise(forecastPurchaseAdvisedList.get(0).add(stockUpSales));
}
//如果初始建议数 + 备货数 > moq建议数, 那么moq建议数 + 备货数, 否则, 还是取moq建议数
BigDecimal subtract = dcAutoTurnover.getQuantityInitAdvise().subtract(moqPurchaseAdvisedList.get(0));
dcAutoTurnover.setQuantityFinalAdvise(moqPurchaseAdvisedList.get(0));
......@@ -1166,7 +1170,7 @@ public class AutoTurnoverJob extends PointJob {
*/
DcAutoStockUpRangeMapper dcAutoStockUpRangeMapper = SessionUtil.getSession().getMapper(DcAutoStockUpRangeMapper.class);
DcAutoStockUpRange dcAutoStockUpRange = dcAutoStockUpRangeMapper.selectOneByExample(DcAutoStockUpRangeExample.newAndCreateCriteria().andBailunSkuEqualTo(bailunSku).andWarehouseCodeEqualTo(warehouseCode).example());
if ((warehouseCode.equals(Constant.WAREHOUSE_JIT) && (turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_1) || turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_2) || turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_3))) || dcAutoStockUpRange != null) {
if ((warehouseCode.equals(Constant.WAREHOUSE_JIT) && (turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_1) || turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_2) || turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_3))) || dcAutoStockUpRange != null || (warehouseCode.equals(Constant.WAREHOUSE_JIT1) && (turnoverSku.getBuyerName().equals(Constant.BUTER_JIT_5)))) {
List<BigDecimal> historyThirtySalesList = JSON.parseObject(dcAutoSales.getHistorySalesDetails(), new TypeReference<List<BigDecimal>>() {
});
BigDecimal weightingAvgSales = caculateWeightingAvgSales(BigDecimal.valueOf(0.3), BigDecimal.valueOf(0.3), BigDecimal.valueOf(0.4), historyThirtySalesList);
......@@ -1428,7 +1432,7 @@ public class AutoTurnoverJob extends PointJob {
//库存 - 销量, 继续跑, 这是周转期最后一天和周转期外的
if (j >= turnoverDays) {
if (j == turnoverDays) { //周转期内总销量
if (warehouseCode.equals(Constant.WAREHOUSE_JIT) && (turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_1) || turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_2))) {
if ((warehouseCode.equals(Constant.WAREHOUSE_JIT) && (turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_1) || turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_2))) || (warehouseCode.equals(Constant.WAREHOUSE_JIT1) && (turnoverSku.getBuyerName().equals(Constant.BUTER_JIT_5)))) {
totalSales = dcAutoTurnover.getDailyWeightedSales().multiply(BigDecimal.valueOf(turnoverDays));
totalSales = dcAutoTurnover.getDailyWeightedSales().multiply(BigDecimal.valueOf(turnoverDays));
dcAutoTurnover.setTurnoverSales(totalSales);
......@@ -1532,25 +1536,40 @@ public class AutoTurnoverJob extends PointJob {
//库存 - 销量, 继续跑
if (j >= turnoverDays) {
BigDecimal totalAdvised = BigDecimal.ZERO;
Boolean firstAdvice = true;
if (j == turnoverDays) {
if (warehouseCode.equals(Constant.WAREHOUSE_JIT) && (turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_1) || turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_2))) {
if (warehouseCode.equals(Constant.WAREHOUSE_JIT) && (turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_1) || turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_2)) || (warehouseCode.equals(Constant.WAREHOUSE_JIT1) && (turnoverSku.getBuyerName().equals(Constant.BUTER_JIT_5)))) {
BigDecimal saveDays = saveDaysMap.get("saveDays");
totalSales = dcAutoTurnover.getDailyWeightedSales().multiply(BigDecimal.valueOf(turnoverDays));
dcAutoTurnover.setTurnoverSales(totalSales);
BigDecimal transNumber = BigDecimal.ZERO;
BigDecimal forecastInbound = BigDecimal.ZERO;
if(saveDays != null) {
for (int trans = 0; trans < autoForecastDay; trans++) {
forecastInbound = BigDecimal.valueOf(forecastInboundList.get(trans));
transNumber = transNumber.add(forecastInbound);
}
totalSales = dcAutoTurnover.getDailyWeightedSales().multiply(saveDays);
totalAdvised = totalSales.subtract(BigDecimal.valueOf(transNumber.doubleValue())) //累计到货
.subtract(outStock > 0 ? BigDecimal.ZERO : BigDecimal.valueOf(realInventory.longValue())) //真实库存,如果缺货就不减
.add(BigDecimal.valueOf(outStock.longValue())); //今天的实际缺货
firstAdvice = false;
}
}else{
dcAutoTurnover.setTurnoverSales(totalSales);
}
}
//采购建议 = 安全库存缺少值 + 今日的实际缺货 + 本次采购到货日期前一天的累计销量 - 本次采购到货日期累计到货数量 + 预计销量
BigDecimal totalAdvised = totalSafeInventory.subtract(forecastInventoryList.get(j > 0 ? j - 1 : 0))//安全库存缺少值= 理论安全库存 - 预测库存
.add(BigDecimal.valueOf(outStock.longValue()))//今天的实际缺货
.add(totalSales)//累计销量
.subtract(BigDecimal.valueOf(totalInbound.doubleValue()))//累计到货
.subtract(outStock > 0 ? BigDecimal.ZERO : BigDecimal.valueOf(realInventory.longValue())) //真实库存,如果缺货就不减
.add(forecastSalesList.get(j));//预计销量
if(firstAdvice){
//采购建议 = 安全库存缺少值 + 今日的实际缺货 + 本次采购到货日期前一天的累计销量 - 本次采购到货日期累计到货数量 + 预计销量
totalAdvised = totalSafeInventory.subtract(forecastInventoryList.get(j > 0 ? j - 1 : 0))//安全库存缺少值= 理论安全库存 - 预测库存
.add(BigDecimal.valueOf(outStock.longValue()))//今天的实际缺货
.add(totalSales)//累计销量
.subtract(BigDecimal.valueOf(totalInbound.doubleValue()))//累计到货
.subtract(outStock > 0 ? BigDecimal.ZERO : BigDecimal.valueOf(realInventory.longValue())) //真实库存,如果缺货就不减
.add(forecastSalesList.get(j));//预计销量
}
//采购建议数如果大于1的时候就向上取整。如果小于1就四舍五入
if (totalAdvised.compareTo(BigDecimal.ONE) == 1) {
totalAdvised = totalAdvised.setScale(0, RoundingMode.CEILING);
......@@ -1565,10 +1584,9 @@ public class AutoTurnoverJob extends PointJob {
} else {
moqPurchaseAdvisedList.add(moqDecimal);
}
firstAdvice = true;
}
totalSales = totalSales.add(forecastSalesList.get(j));
}
return inventoryAvailableDays;
}
......
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