Commit e53b5dbc by yinyong

周转销量预测为昨日销量

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