Commit e53b5dbc by yinyong

周转销量预测为昨日销量

parent deb6f1e8
...@@ -16,6 +16,7 @@ public interface Constant { ...@@ -16,6 +16,7 @@ public interface Constant {
String BUYER_JIT_1 = "张莹霞"; String BUYER_JIT_1 = "张莹霞";
String BUYER_JIT_2 = "张莹霞1"; String BUYER_JIT_2 = "张莹霞1";
String BUYER_JIT_3 = "冯兆欣"; String BUYER_JIT_3 = "冯兆欣";
String BUYER_JIT_4 = "黄镜洁";
String WAREHOUSE_JIT = "GZBLWH"; String WAREHOUSE_JIT = "GZBLWH";
BigDecimal BIGDECIMAL_THIRTY = BigDecimal.valueOf(30); BigDecimal BIGDECIMAL_THIRTY = BigDecimal.valueOf(30);
BigDecimal BIGDECIMAL_FOURTEEN = BigDecimal.valueOf(14); BigDecimal BIGDECIMAL_FOURTEEN = BigDecimal.valueOf(14);
......
...@@ -282,7 +282,7 @@ public class AutoTurnoverJob extends PointJob { ...@@ -282,7 +282,7 @@ public class AutoTurnoverJob extends PointJob {
* 均值, 配置安全库存法: 销量上下限 根据过去30天销量,计算出合理的销量封顶值和销量最低值 * 均值, 配置安全库存法: 销量上下限 根据过去30天销量,计算出合理的销量封顶值和销量最低值
* 曲线拟合 :销量预测, 根据销量走势和上下限,计算出销量预测曲线, 如果历史销量包含0, 无法使用指数函数拟合 * 曲线拟合 :销量预测, 根据销量走势和上下限,计算出销量预测曲线, 如果历史销量包含0, 无法使用指数函数拟合
*/ */
calculateForecastSales(salesUpperLimit, autoForecastDay, dcAutoSales, forecastSalesList); calculateForecastSales(salesUpperLimit, autoForecastDay, dcAutoSales, forecastSalesList, turnoverSku);
/* /*
* 处理矫正信息 * 处理矫正信息
...@@ -987,18 +987,25 @@ public class AutoTurnoverJob extends PointJob { ...@@ -987,18 +987,25 @@ public class AutoTurnoverJob extends PointJob {
* @param forecastSalesList * @param forecastSalesList
*/ */
private void calculateForecastSales(BigDecimal salesUpperLimit, Integer autoForecastDay, DcAutoSales private void calculateForecastSales(BigDecimal salesUpperLimit, Integer autoForecastDay, DcAutoSales
dcAutoSales, List<BigDecimal> forecastSalesList) { dcAutoSales, List<BigDecimal> forecastSalesList, DcBaseSku turnoverSku) {
// y = ae^bx
for (int j = 0; j < autoForecastDay; j++) { if(LocalDateTime.now().minusDays(15L).isBefore(turnoverSku.getPushTime()) && !(turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_1)) && !(turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_2)) && !(turnoverSku.getBuyerName().equals(Constant.BUYER_JIT_4))) {
double v; for(int j = 0; j < autoForecastDay; j++) {
if (dcAutoSales.getFitForecastFormula().contains("ln(x)")) { forecastSalesList.set(j, BigDecimal.valueOf(dcAutoSales.getOnedaySales()));
//y = aln(x) + b }
v = dcAutoSales.getFitAVariable().doubleValue() * Math.log1p((j + 31)) + dcAutoSales.getFitBVariable().doubleValue(); }else{
} else { // y = ae^bx
v = dcAutoSales.getFitAVariable().doubleValue() * Math.exp(dcAutoSales.getFitBVariable().doubleValue() * (j + 31)); for (int j = 0; j < autoForecastDay; j++) {
double v;
if (dcAutoSales.getFitForecastFormula().contains("ln(x)")) {
//y = aln(x) + b
v = dcAutoSales.getFitAVariable().doubleValue() * Math.log1p((j + 31)) + dcAutoSales.getFitBVariable().doubleValue();
} else {
v = dcAutoSales.getFitAVariable().doubleValue() * Math.exp(dcAutoSales.getFitBVariable().doubleValue() * (j + 31));
}
BigDecimal forecastSales = BigDecimal.valueOf(v < 0 ? 0 : v).setScale(0, RoundingMode.HALF_EVEN);
forecastSalesList.set(j, forecastSales.compareTo(salesUpperLimit) == 1 ? salesUpperLimit : forecastSales);
} }
BigDecimal forecastSales = BigDecimal.valueOf(v < 0 ? 0 : v).setScale(0, RoundingMode.HALF_EVEN);
forecastSalesList.set(j, forecastSales.compareTo(salesUpperLimit) == 1 ? salesUpperLimit : forecastSales);
} }
} }
......
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