Commit 21e7682a by huluobin

# 更新

parent 9098d8d9
......@@ -31,7 +31,9 @@ public interface DcAutoSalesForecastStageConfigMapper extends BaseMapper<DcAutoS
DcAutoSalesForecastStageConfig selectMatchStage(@Param("bailunSku") String bailunSku,
@Param("warehouseCode") String warehouseCode,
@Param("firstOrderDays") Long firstOrderDays,
@Param("avgOrderCount30") BigDecimal avgOrderCount30);
@Param("avgOrderCount30") BigDecimal avgOrderCount30,
@Param("avgOrderCount14") BigDecimal avgOrderCount14,
@Param("avgOrderCount7") BigDecimal avgOrderCount7);
/**
......@@ -46,6 +48,7 @@ public interface DcAutoSalesForecastStageConfigMapper extends BaseMapper<DcAutoS
DcBaseOmsSku firsOrder(@Param("bailunSku") String bailunSku,
@Param("warehouseCode") String warehouseCode);
BigDecimal avgOrderCount30(@Param("bailunSku") String bailunSku,
@Param("warehouseCode") String warehouseCode);
BigDecimal avgOrderCount(@Param("bailunSku") String bailunSku,
@Param("warehouseCode") String warehouseCode,
@Param("days") Integer days);
}
......@@ -28,6 +28,17 @@
<if test="avgOrderCount30!=null ">
and (t5.orders_avg_min = 0 or t5.orders_avg_min &lt;= #{avgOrderCount30})
and (t5.orders_avg_max = 0 or t5.orders_avg_max &gt;= #{avgOrderCount30})
and t5.orders_avg_sampling_days = 30
</if>
<if test="avgOrderCount14!=null ">
and (t5.orders_avg_min = 0 or t5.orders_avg_min &lt;= #{avgOrderCount14})
and (t5.orders_avg_max = 0 or t5.orders_avg_max &gt;= #{avgOrderCount14})
and t5.orders_avg_sampling_days = 14
</if>
<if test="avgOrderCount7!=null ">
and (t5.orders_avg_min = 0 or t5.orders_avg_min &lt;= #{avgOrderCount7})
and (t5.orders_avg_max = 0 or t5.orders_avg_max &gt;= #{avgOrderCount7})
and t5.orders_avg_sampling_days = 7
</if>
LEFT JOIN dc_auto_sales_forecast_stage_config t7 on t7.config_id = t5.id
and (IF(t5.screen_type = 1,
......@@ -81,8 +92,6 @@
t1.daily_weighted_sales &gt;= t7.sales_lower_limit or t1.daily_weighted_sales is null or
length(trim(t1.daily_weighted_sales)) = 0))
where t5.id is not null
# and t1.warehouse_code = 'GB4PXBL'
# and t1.bailun_sku = '945104601'
ORDER BY t5.`level` desc) aaa
GROUP BY bailun_sku, warehouse_code;
</select>
......@@ -96,12 +105,12 @@
limit 1;
</select>
<select id="avgOrderCount30" resultType="java.math.BigDecimal">
select count(DISTINCT bailun_order_id) / 30
<select id="avgOrderCount" resultType="java.math.BigDecimal">
select count(DISTINCT bailun_order_id) / #{days}
from dc_base_oms_sku_30
where bailun_sku = #{bailunSku}
and warehouse_code = #{warehouseCode}
and create_time >= date_sub(now(), interval 31 day)
and create_time >= date_sub(now(), interval #{days} + 1 day)
</select>
</mapper>
......@@ -16,7 +16,6 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Period;
import java.util.*;
import static java.time.temporal.ChronoUnit.DAYS;
......@@ -51,10 +50,14 @@ public class AutoTurnoverServiceImpl implements AutoTurnoverService {
Long day = Optional.ofNullable(orderFirstCreateTime).map(item -> DAYS.between(item.getCreateTime().toLocalDate(), LocalDate.now())).orElse(null);
BigDecimal avgOrderCount30 = dcAutoSalesForecastStageConfigMapper.avgOrderCount30(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode());
BigDecimal avgOrderCount30 = dcAutoSalesForecastStageConfigMapper.avgOrderCount(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode(), 30);
BigDecimal avgOrderCount14 = dcAutoSalesForecastStageConfigMapper.avgOrderCount(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode(), 14);
BigDecimal avgOrderCount7 = dcAutoSalesForecastStageConfigMapper.avgOrderCount(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode(), 7);
//命中的预测规则
DcAutoSalesForecastStageConfig dcAutoSalesForecastStageConfig = dcAutoSalesForecastStageConfigMapper.selectMatchStage(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode(), day, avgOrderCount30);
DcAutoSalesForecastStageConfig dcAutoSalesForecastStageConfig = dcAutoSalesForecastStageConfigMapper
.selectMatchStage(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode(), day,
avgOrderCount30, avgOrderCount14, avgOrderCount7);
//周转天数
//每个时间段的销量预测是dcAutoSalesForecastStageConfig对应时间段的三个参数对应的过去时间段的销量的加权平均*/
......@@ -172,11 +175,15 @@ public class AutoTurnoverServiceImpl implements AutoTurnoverService {
DcBaseOmsSku orderFirstCreateTime = dcAutoSalesForecastStageConfigMapper.firsOrder(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode());
Long day = Optional.ofNullable(orderFirstCreateTime).map(item -> DAYS.between(item.getCreateTime().toLocalDate(), LocalDate.now())).orElse(null);
BigDecimal avgOrderCount30 = dcAutoSalesForecastStageConfigMapper.avgOrderCount30(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode());
BigDecimal avgOrderCount30 = dcAutoSalesForecastStageConfigMapper.avgOrderCount(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode(), 30);
BigDecimal avgOrderCount14 = dcAutoSalesForecastStageConfigMapper.avgOrderCount(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode(), 14);
BigDecimal avgOrderCount7 = dcAutoSalesForecastStageConfigMapper.avgOrderCount(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode(), 7);
//命中的预测规则
DcAutoSalesForecastStageConfig dcAutoSalesForecastStageConfig = dcAutoSalesForecastStageConfigMapper.selectMatchStage(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode(), day, avgOrderCount30);
DcAutoSalesForecastStageConfig dcAutoSalesForecastStageConfig = dcAutoSalesForecastStageConfigMapper
.selectMatchStage(dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode(), day
, avgOrderCount30, avgOrderCount14, avgOrderCount7);
//今天0点
LocalDateTime midNight = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
......
......@@ -258,8 +258,8 @@ public class AutoTurnoverTest {
public void testXX2() {
DcBaseStock dcBaseStock = SessionUtil.getSession().getMapper(DcBaseStockMapper.class)
.selectOneByExample(DcBaseStockExample.newAndCreateCriteria()
.andBailunSkuEqualTo("BLGP-E1549")
.andWarehouseCodeEqualTo("BIAT74")
.andBailunSkuEqualTo("217632401")
.andWarehouseCodeEqualTo("MMDUSFBA")
.example());
try {
AutoTurnoverJob autoTurnoverJob = new AutoTurnoverJob();
......
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