Commit 6167df76 by huluobin

销量预测算法注释

parent 47e64c27
......@@ -11,6 +11,9 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>base-sync-cost-first</artifactId>
<properties>
<maven.build.timestamp.format>yyyyMMddHHmm</maven.build.timestamp.format>
</properties>
<dependencies>
<dependency>
......@@ -29,36 +32,61 @@
</dependency>
</dependencies>
<build>
<plugins>
<!--maven编译插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<!--指定编译jdk版本-->
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<!--资源文件插件-->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.bailuntec.Application</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<!--测试用例插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<!-- 跳过测试-->
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!--镜像名称:镜像版本-->
<imageName>ccr.ccs.tencentyun.com/bit.publish/ana-ds-order-api:${maven.build.timestamp}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<serverId>bailuntec-docker</serverId>
</configuration>
</plugin>
</plugins>
<resources>
......@@ -71,6 +99,7 @@
<!--默认是true-->
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
......@@ -78,6 +107,7 @@
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>
\ No newline at end of file
</project>
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD base-sync-cost-first-1.0-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Xms30m","-Xmx180m","-jar","/app.jar"]
......@@ -158,12 +158,14 @@ public class SyncCostFirstFinishJob extends PointJob {
.andBailunSkuEqualTo(sku.getBailunSku())
.example());
//瞬时库存
dcBaseCostFirstFinish.setSkuStockQuantity(dcBaseStock.getUsableStock() + dcBaseStock.getOccupyStock());
//sku重量
dcBaseCostFirstFinish.setSkuWeight(dcBaseSku.getWeight());
return dcBaseCostFirstFinish;
} else {
dcBaseCostFirstFinish.setOperationTime(costFirstFinishData.getOperationTime());
dcBaseCostFirstFinishMapper.updateByPrimaryKey(dcBaseCostFirstFinish);
}
return null;
} catch (Exception e) {
......
#EVENT_RDB_STORAGE_DRIVER=com.mysql.jdbc.Driver
#EVENT_RDB_STORAGE_URL=jdbc:mysql://192.168.6.140:3306/bailun_datacenter?serverTimezone=GMT%2B8&characterEncoding=utf-8
EVENT_RDB_STORAGE_URL=jdbc:mysql://gz-cdb-kp7s5i79.sql.tencentcdb.com:61691/bailun_datacenter?useUnicode=true&characterEncoding=utf-8
#EVENT_RDB_STORAGE_USERNAME=root
#EVENT_RDB_STORAGE_PASSWORD=123456
#ZOOKEEPER_SERVER=127.0.0.1:2181
EVENT_RDB_STORAGE_DRIVER=com.mysql.jdbc.Driver
EVENT_RDB_STORAGE_URL=jdbc:mysql://10.0.8.15:3306/bailun_datacenter?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
#EVENT_RDB_STORAGE_URL=jdbc:mysql://10.0.8.15:3306/bailun_datacenter?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
EVENT_RDB_STORAGE_USERNAME=root
EVENT_RDB_STORAGE_PASSWORD=#7kfnymAM$Y9-Ntf
ZOOKEEPER_SERVER=172.31.255.120:2181
NAME_SPACE=data-center
JOB_NAME=base-sync-cost-first
JOB_CRON=0 10 0/1 * * ? *
......
package com.bailuntec.job;
import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.support.PointJob;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.executor.ShardingContexts;
import org.junit.jupiter.api.Test;
import java.time.LocalDateTime;
import java.util.HashMap;
/**
* <p>
......@@ -20,9 +24,18 @@ public class SyncCostFirstFinishJobTest {
public void test() {
SyncCostFirstFinishJob syncCostFirstFinishJob = new SyncCostFirstFinishJob();
JobPointLog jobPointLog = new JobPointLog("base-sync-cost-first-finish", 1, 1000, 1, 1,
LocalDateTime.of(2020, 8, 1, 0, 0, 0),
LocalDateTime.of(2020, 9, 2, 0, 0, 0));
LocalDateTime.of(2020, 9, 7, 15, 10, 0),
LocalDateTime.of(2020, 9, 7, 16, 10, 0));
syncCostFirstFinishJob.executeJob(null, jobPointLog);
}
@Test
public void test2() {
PointJob syncCostFirstFinishJob = new SyncCostFirstFinishJob();
ShardingContext job = new ShardingContext(new ShardingContexts("1", "base-sync-cost-first-finish", 1, "", new HashMap<>()), 0);
syncCostFirstFinishJob.execute(job);
}
}
......@@ -33,6 +33,7 @@ public class Application {
new JobScheduler(createRegistryCenter(), createJobConfiguration2(), createJobEventConfiguration(), new OrderSyncJobListener()).init();
}
private static CoordinatorRegistryCenter createRegistryCenter() {
CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration(
propertiesUtil.getPropertyAsString("ZOOKEEPER_SERVER"),
......@@ -41,6 +42,7 @@ public class Application {
return regCenter;
}
private static LiteJobConfiguration createJobConfiguration() {
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(
propertiesUtil.getPropertyAsString("JOB_NAME"),
......
......@@ -21,4 +21,5 @@ JOB_CRON30=0 0 22,23,00 * * ? *
JOB_COROUTINE_NAME=base-sync-oms-order-task2
JOB_COROUTINE_CRON=0/1 * * * * ?
SHARDING_TOTAL_COUNT=1
......@@ -54,6 +54,7 @@ public class CalculateStockRecordJob extends PointJob {
// 根据仓库、sku,入库时间升序查询入库sku记录
DcBaseStockRecordMapper midDcBaseStockRecordMapper = SessionUtil.getSession().getMapper(DcBaseStockRecordMapper.class);
List<DcBaseStockRecord> baseStockRecordList = midDcBaseStockRecordMapper.selectByStockTime(dcBaseStockRecord.getBailunSku(), dcBaseStockRecord.getWarehouseCode());
Integer quantityStock = 0;
boolean firstMatch = true;
......
......@@ -390,10 +390,10 @@ public class AutoTurnoverJob extends PointJob {
* 均值, 配置安全库存法: 销量上下限 根据过去30天销量,计算出合理的销量封顶值和销量最低值
* 曲线拟合 :销量预测, 根据销量走势和上下限,计算出销量预测曲线, 如果历史销量包含0, 无法使用指数函数拟合
*/
forecastSalesList = autoTurnoverService.getAutoTurnoverSaleDetails(dcAutoTurnover, turnoverDays, autoForecastDay);
// calculateForecastSales(salesUpperLimit, autoForecastDay, dcAutoSales, forecastSalesList, turnoverSku, recordTime, bailunSku, warehouseCode, dcAutoWarehouseweekSales);
// forecastSalesList = autoTurnoverService.getAutoTurnoverSaleDetails(dcAutoTurnover, turnoverDays, autoForecastDay);
calculateForecastSales(salesUpperLimit, autoForecastDay, dcAutoSales, forecastSalesList, turnoverSku, recordTime, bailunSku, warehouseCode, dcAutoWarehouseweekSales);
List<String> forecastSalesListFormula = autoTurnoverService.getAutoTurnoverSaleDetailsFormula(dcAutoTurnover, turnoverDays, autoForecastDay);
// List<String> forecastSalesListFormula = autoTurnoverService.getAutoTurnoverSaleDetailsFormula(dcAutoTurnover, turnoverDays, autoForecastDay);
/*
* 处理矫正信息
......@@ -667,7 +667,7 @@ public class AutoTurnoverJob extends PointJob {
if (i < 7) {
avgForecastSevendaySales = avgForecastSevendaySales.add(forecastSalesList.get(i));
forecastSalesList.add(i, BigDecimal.valueOf(historySalesList.get(23 + i)));
forecastSalesListFormula.add(i, StringUtils.SPACE);
// forecastSalesListFormula.add(i, StringUtils.SPACE);
forecastSalesExplainList.add(i, "历史销量");
forecastInboundList.add(i, 0);
forecastInventoryList.add(i, BigDecimal.ZERO);
......@@ -743,7 +743,7 @@ public class AutoTurnoverJob extends PointJob {
dcAutoTurnover.setTurnoverDays(turnoverDays);
dcAutoTurnover.setQuantitySafeInventory(totalSafeInventory);
dcAutoTurnover.setHqType(dcBaseWarehouse.getHqType());
dcAutoTurnover.setSalesDetailsFormula(new Gson().toJson(forecastSalesListFormula));
// dcAutoTurnover.setSalesDetailsFormula(new Gson().toJson(forecastSalesListFormula));
/*dcBaseStock.setSkuTitleCn(turnoverSku.getSkuTitleCn());
dcBaseStock.setProductInnerCode(turnoverSku.getProductInnerCode());
......
......@@ -119,7 +119,7 @@ public class AutoTurnoverServiceImpl implements AutoTurnoverService {
log.info("没有匹配销量预测规则,采用平均销量");
for (int i = 0; i < turnoverDays; i++) {
if (autoForecastDay >= forecastSalesDetails.size()) {
forecastSalesDetails.offer(dcAutoTurnover.getDailyWeightedSales());
forecastSalesDetails.offer(dcAutoTurnover.getDailyWeightedSales() == null ? BigDecimal.ZERO : dcAutoTurnover.getDailyWeightedSales());
}
}
}
......@@ -187,11 +187,11 @@ public class AutoTurnoverServiceImpl implements AutoTurnoverService {
for (int i = 0; i < duration2; i++) {
if (autoForecastDay >= forecastSalesDetailsFormula.size()) {
forecastSalesDetailsFormula.offer("(" + dcBaseOmsSkuMapper.omsSkuSellerCount(midNight.minusDays(dcAutoSalesForecastStageConfig.getTwoN1().intValue()), midNight, bailunSku, warehouseCode, twoN1 == 0 ? 1 : twoN1).setScale(2,BigDecimal.ROUND_HALF_UP) + "*" + dcAutoSalesForecastStageConfig.getTwoN2() + ")"
forecastSalesDetailsFormula.offer("(" + dcBaseOmsSkuMapper.omsSkuSellerCount(midNight.minusDays(dcAutoSalesForecastStageConfig.getTwoN1().intValue()), midNight, bailunSku, warehouseCode, twoN1 == 0 ? 1 : twoN1).setScale(2, BigDecimal.ROUND_HALF_UP) + "*" + dcAutoSalesForecastStageConfig.getTwoN2() + ")"
+ "+"
+ "(" + Optional.ofNullable(dcBaseOmsSkuMapper.omsSkuSellerCount(midNight.minusDays(dcAutoSalesForecastStageConfig.getTwoN3().intValue()), midNight, bailunSku, warehouseCode, twoN3 == 0 ? 1 : twoN3)).orElse(BigDecimal.ZERO).setScale(2,BigDecimal.ROUND_HALF_UP) + "*" + dcAutoSalesForecastStageConfig.getTwoN4() + ")"
+ "(" + Optional.ofNullable(dcBaseOmsSkuMapper.omsSkuSellerCount(midNight.minusDays(dcAutoSalesForecastStageConfig.getTwoN3().intValue()), midNight, bailunSku, warehouseCode, twoN3 == 0 ? 1 : twoN3)).orElse(BigDecimal.ZERO).setScale(2, BigDecimal.ROUND_HALF_UP) + "*" + dcAutoSalesForecastStageConfig.getTwoN4() + ")"
+ "+"
+ "(" + Optional.ofNullable(dcBaseOmsSkuMapper.omsSkuSellerCount(midNight.minusDays(dcAutoSalesForecastStageConfig.getTwoN5().intValue()), midNight, bailunSku, warehouseCode, twoN5 == 0 ? 1 : twoN5)).orElse(BigDecimal.ZERO).setScale(2,BigDecimal.ROUND_HALF_UP) + "*" + dcAutoSalesForecastStageConfig.getTwoN6() + ")");
+ "(" + Optional.ofNullable(dcBaseOmsSkuMapper.omsSkuSellerCount(midNight.minusDays(dcAutoSalesForecastStageConfig.getTwoN5().intValue()), midNight, bailunSku, warehouseCode, twoN5 == 0 ? 1 : twoN5)).orElse(BigDecimal.ZERO).setScale(2, BigDecimal.ROUND_HALF_UP) + "*" + dcAutoSalesForecastStageConfig.getTwoN6() + ")");
}
}
......@@ -200,11 +200,11 @@ public class AutoTurnoverServiceImpl implements AutoTurnoverService {
for (int i = 0; i < duration3; i++) {
if (autoForecastDay >= forecastSalesDetailsFormula.size()) {
forecastSalesDetailsFormula.offer("(" + dcBaseOmsSkuMapper.omsSkuSellerCount(midNight.minusDays(dcAutoSalesForecastStageConfig.getThreeN1().intValue()), midNight, bailunSku, warehouseCode, threeN1 == 0 ? 1 : threeN1).setScale(2,BigDecimal.ROUND_HALF_UP) + "*" + dcAutoSalesForecastStageConfig.getThreeN2() + ")"
forecastSalesDetailsFormula.offer("(" + dcBaseOmsSkuMapper.omsSkuSellerCount(midNight.minusDays(dcAutoSalesForecastStageConfig.getThreeN1().intValue()), midNight, bailunSku, warehouseCode, threeN1 == 0 ? 1 : threeN1).setScale(2, BigDecimal.ROUND_HALF_UP) + "*" + dcAutoSalesForecastStageConfig.getThreeN2() + ")"
+ "+"
+ "(" + Optional.ofNullable(dcBaseOmsSkuMapper.omsSkuSellerCount(midNight.minusDays(dcAutoSalesForecastStageConfig.getThreeN3().intValue()), midNight, bailunSku, warehouseCode, threeN3 == 0 ? 1 : threeN3)).orElse(BigDecimal.ZERO).setScale(2,BigDecimal.ROUND_HALF_UP) + "*" + dcAutoSalesForecastStageConfig.getThreeN4() + ")"
+ "(" + Optional.ofNullable(dcBaseOmsSkuMapper.omsSkuSellerCount(midNight.minusDays(dcAutoSalesForecastStageConfig.getThreeN3().intValue()), midNight, bailunSku, warehouseCode, threeN3 == 0 ? 1 : threeN3)).orElse(BigDecimal.ZERO).setScale(2, BigDecimal.ROUND_HALF_UP) + "*" + dcAutoSalesForecastStageConfig.getThreeN4() + ")"
+ "+"
+ "(" + Optional.ofNullable(dcBaseOmsSkuMapper.omsSkuSellerCount(midNight.minusDays(dcAutoSalesForecastStageConfig.getThreeN5().intValue()), midNight, bailunSku, warehouseCode, threeN5 == 0 ? 1 : threeN5)).orElse(BigDecimal.ZERO).setScale(2,BigDecimal.ROUND_HALF_UP) + "*" + dcAutoSalesForecastStageConfig.getThreeN6() + ")");
+ "(" + Optional.ofNullable(dcBaseOmsSkuMapper.omsSkuSellerCount(midNight.minusDays(dcAutoSalesForecastStageConfig.getThreeN5().intValue()), midNight, bailunSku, warehouseCode, threeN5 == 0 ? 1 : threeN5)).orElse(BigDecimal.ZERO).setScale(2, BigDecimal.ROUND_HALF_UP) + "*" + dcAutoSalesForecastStageConfig.getThreeN6() + ")");
}
}
......
......@@ -74,7 +74,7 @@ public class AutoTurnoverJobTest {
DcBaseStockMapper dcBaseStockMapper = sqlSession.getMapper(DcBaseStockMapper.class);
DcBaseStock dcBaseStock = dcBaseStockMapper.selectOneByExample(DcBaseStockExample.newAndCreateCriteria()
.andBailunSkuEqualTo("228442801")
.andBailunSkuEqualTo("948259717")
.andWarehouseCodeEqualTo("GZBLWH")
.example());
......
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