Commit 6784d946 by huluobin

采购在途 周转

parent 1a831e4f
......@@ -22,12 +22,12 @@
<groupId>com.bailuntec</groupId>
<artifactId>data-common</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>io.github.linus87</groupId>
<artifactId>ebaycalls</artifactId>
......
package com.bailuntec.job;
import com.alibaba.fastjson.JSON;
import com.bailuntec.domain.constant.CommonConstant;
import com.bailuntec.domain.constant.Constant;
import com.bailuntec.domain.entity.*;
import com.bailuntec.domain.enumerate.OrderExceptionStatus;
import com.bailuntec.domain.enumerate.OrderExceptionType;
import com.bailuntec.domain.enumerate.PlatformType;
import com.bailuntec.domain.example.*;
import com.bailuntec.domain.pojo.*;
import com.bailuntec.mapper.*;
import com.bailuntec.support.CallBailunSystem;
import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.mapper.DcBaseOmsSku30Mapper;
import com.bailuntec.support.PointJob;
import com.bailuntec.utils.ExceptionUtil;
import com.bailuntec.utils.OkHttpUtil;
import com.bailuntec.utils.PropertiesUtil;
import com.bailuntec.utils.SessionUtil;
import com.dangdang.ddframe.job.api.ShardingContext;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.SqlSession;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Slf4j
public class OrderSyncJob30 extends PointJob {
......@@ -42,7 +18,14 @@ public class OrderSyncJob30 extends PointJob {
@Override
public void executeJob(ShardingContext shardingContext, JobPointLog jobPointLog) {
String queryTime = DateTimeFormatter.ofPattern(CommonConstant.DATE_FORMAT).format(LocalDate.now());
DcBaseOmsSku30Mapper dcBaseOmsSku30Mapper = SessionUtil.getSession().getMapper(DcBaseOmsSku30Mapper.class);
dcBaseOmsSku30Mapper.upsertByOmsSku(queryTime);
SqlSession sqlSession = SessionUtil.getFactory().openSession(true);
DcBaseOmsSku30Mapper dcBaseOmsSku30Mapper = sqlSession.getMapper(DcBaseOmsSku30Mapper.class);
try {
dcBaseOmsSku30Mapper.truncateTable();
dcBaseOmsSku30Mapper.upsertByOmsSku(queryTime);
} finally {
sqlSession.close();
}
}
}
......@@ -57,9 +57,8 @@ public class OrderSyncJobTest {
@Test
public void testBigDecimal() {
BigDecimal totalCost = BigDecimal.ONE;
totalCost = this.calc(totalCost);
System.out.println(totalCost);
OrderSyncJob30 orderSyncJob30 = new OrderSyncJob30();
orderSyncJob30.executeJob(null, null);
}
......
package com.bailuntec.domain.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/11/28 3:56 下午
*/
@Data
public class SalesDetailItem {
private BigDecimal sales;
private LocalDate date;
private BigDecimal weekCoefficient;
private BigDecimal salesDayConfig;
private String bailunSku;
private String warehouseCode;
private BigDecimal showSales;
public void calcShowSales() {
this.showSales = sales;
if (salesDayConfig != null) {
this.showSales = salesDayConfig;
}
if (weekCoefficient != null) {
this.showSales = showSales.multiply(weekCoefficient);
}
}
}
package com.bailuntec.domain.entity;
import java.time.LocalDate;
import java.time.LocalDateTime;
import lombok.Data;
......@@ -77,6 +78,9 @@ public class DcBaseWeekCoefficient {
*/
private String formula;
private LocalDate weekDate;
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_week_coefficient
......@@ -149,4 +153,4 @@ public class DcBaseWeekCoefficient {
result = prime * result + ((getFormula() == null) ? 0 : getFormula().hashCode());
return result;
}
}
\ No newline at end of file
}
......@@ -123,4 +123,6 @@ public interface DcBaseOmsSku30Mapper {
int upsertSelective(DcBaseOmsSku30 record);
int upsertByOmsSku(@Param("queryTime")String queryTime);
}
\ No newline at end of file
void truncateTable();
}
......@@ -1387,7 +1387,8 @@
on t1.bailun_sku = t2.bailun_sku and t1.warehouse_code = t2.warehouse_code
where (t2.`status` = 0 or t2.`status` is null)
and t1.id % #{shardingContext.shardingTotalCount} = #{shardingContext.shardingItem}
order by t1.id desc
order by t1.id
# desc
limit #{pageStart}, #{pageOffset};
</select>
......
package com.bailuntec.mapper;
import com.bailuntec.domain.dto.SalesDetailItem;
import com.bailuntec.domain.entity.DcBaseWeekCoefficient;
import com.bailuntec.domain.example.DcBaseWeekCoefficientExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface DcBaseWeekCoefficientMapper {
/**
* This method was generated by MyBatis Generator.
......@@ -120,4 +122,9 @@ public interface DcBaseWeekCoefficientMapper {
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
int upsertSelective(DcBaseWeekCoefficient record);
}
\ No newline at end of file
List<DcBaseWeekCoefficient> selectByDays(@Param("salesDetailItemList") List<SalesDetailItem> salesDetailItemList,
@Param("bailunSku") String bailunSku,
@Param("warehouseCode") String warehouseCode);
}
......@@ -860,7 +860,7 @@
price,
transport_type
FROM dc_base_purchase
WHERE buy_status IN (0, 1, 2, 3)
WHERE buy_status IN (0, 1, 2, 3,9)
AND has_delete = 0
GROUP BY bailun_sku,
parent_id
......
package com.bailuntec.mapper;
import com.bailuntec.domain.dto.SalesDetailItem;
import com.bailuntec.domain.entity.SalesDayConfig;
import com.bailuntec.domain.example.SalesDayConfigExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface SalesDayConfigMapper {
/**
* This method was generated by MyBatis Generator.
......@@ -120,4 +122,9 @@ public interface SalesDayConfigMapper {
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
int upsertSelective(SalesDayConfig record);
}
\ No newline at end of file
List<SalesDayConfig> selectByDays(@Param("salesDetailItemList") List<SalesDetailItem> salesDetailItemList,
@Param("bailunSku") String bailunSku,
@Param("warehouseCode") String warehouseCode);
}
......@@ -98,6 +98,17 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--测试用例插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<!-- 跳过测试-->
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
......
......@@ -104,8 +104,8 @@ public class BalanceSheetServiceTest {
@Test
public void generateBalanceSheet() {
Date startDate = DateTimeUtil.stringToDate("2020-10-19", DateTimeUtil.DATE_FORMAT);
Date endDate = DateTimeUtil.stringToDate("2020-11-02", DateTimeUtil.DATE_FORMAT);
Date startDate = DateTimeUtil.stringToDate("2020-11-26", DateTimeUtil.DATE_FORMAT);
Date endDate = DateTimeUtil.stringToDate("2020-11-26", DateTimeUtil.DATE_FORMAT);
while (startDate.compareTo(endDate) == -1) {
balanceSheetService.generateBalanceSheet(0, "百伦供应链", startDate);
startDate = DateTimeUtil.addDays(startDate, 1); // 日期增加一天
......
......@@ -34,7 +34,6 @@
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
......@@ -45,8 +44,8 @@
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
......@@ -89,7 +88,8 @@
<!--镜像名称:镜像版本-->
<skipDockerBuild>false</skipDockerBuild>
<imageName>ccr.ccs.tencentyun.com/blt.data.center/dc-show-auto-turnover:${maven.build.timestamp}</imageName>
<imageName>ccr.ccs.tencentyun.com/blt.data.center/dc-show-auto-turnover:${maven.build.timestamp}
</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
......
......@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.bailuntec.domain.constant.CommonConstant;
import com.bailuntec.domain.constant.Constant;
import com.bailuntec.domain.dto.SalesDetailItem;
import com.bailuntec.domain.dto.SalesVolumeAvgDTO;
import com.bailuntec.domain.dto.SalesVolumeDTO;
import com.bailuntec.domain.entity.*;
......@@ -21,6 +22,7 @@ import com.bailuntec.utils.OkHttpUtil;
import com.bailuntec.utils.PropertiesUtil;
import com.bailuntec.utils.SessionUtil;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
......@@ -40,6 +42,8 @@ import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@Slf4j
public class AutoTurnoverJob extends PointJob {
......@@ -218,7 +222,6 @@ public class AutoTurnoverJob extends PointJob {
//库存对应的仓库
dcBaseWarehouse = baseWarehouseMapper.selectOneByExample(DcBaseWarehouseExample.newAndCreateCriteria().andWarehouseCodeEqualTo(warehouseCode).example());
BigDecimal incrementalRatio = BigDecimal.ONE;
int compareSales = 0;
//销量
DcAutoSalesMapper autoSalesMapper;
......@@ -267,7 +270,11 @@ public class AutoTurnoverJob extends PointJob {
} finally {
SessionUtil.closeSession();
}
autoTurnoverUseDcAutoSales(bailunSku, warehouseCode, dcAutoSales, dcBaseStock, dcBaseWarehouse, dcAutoWarehouseweekSales);
autoTurnoverUseDcAutoSales(bailunSku,
warehouseCode,
dcAutoSales,
dcBaseStock,
dcBaseWarehouse);
}
/**
......@@ -278,19 +285,17 @@ public class AutoTurnoverJob extends PointJob {
* 计算自动周转
* </p>
*
* @param bailunSku 百伦sku
* @param warehouseCode 仓库编码
* @param dcAutoSales 销量
* @param dcBaseStock 库存
* @param dcBaseWarehouse 仓库
* @param dcAutoWarehouseweekSales 自动周转系数
* @param bailunSku 百伦sku
* @param warehouseCode 仓库编码
* @param dcAutoSales 销量
* @param dcBaseStock 库存
* @param dcBaseWarehouse 仓库
*/
private void autoTurnoverUseDcAutoSales(String bailunSku,
String warehouseCode,
DcAutoSales dcAutoSales,
DcBaseStock dcBaseStock,
DcBaseWarehouse dcBaseWarehouse,
DcAutoWarehouseweekSales dcAutoWarehouseweekSales) throws Exception {
DcBaseWarehouse dcBaseWarehouse) throws Exception {
//记录时间
LocalDate recordTime = LocalDate.now();
......@@ -778,6 +783,50 @@ public class AutoTurnoverJob extends PointJob {
dcAutoTurnover.setIsOutStock(0);
dcAutoTurnover.setGmtModified(LocalDateTime.now());
/*周系数*/
List<String> param = new ArrayList<>(Lists.newArrayList(dcAutoTurnover.getSalesDetails()
.trim()
.substring(1)
.substring(0, dcAutoTurnover.getSalesDetails().length() - 2)
.split(",")));
List<BigDecimal> salesDetails = param.stream().map(var -> {
try {
String ss= var.trim();
return new BigDecimal(ss);
} catch (Exception ex) {
throw ex;
}
}).collect(Collectors.toList());
AtomicReference<LocalDate> localDate = new AtomicReference<>(LocalDate.now().minusDays(7));
List<SalesDetailItem> salesDetailItemList = salesDetails.stream().map(salesDetail -> {
SalesDetailItem salesDetailItem = new SalesDetailItem();
salesDetailItem.setSales(salesDetail);
salesDetailItem.setDate(localDate.get());
localDate.set(localDate.get().plusDays(1));
return salesDetailItem;
}).collect(Collectors.toList());
DcBaseWeekCoefficientMapper dcBaseWeekCoefficientMapper = SessionUtil.getSession().getMapper(DcBaseWeekCoefficientMapper.class);
SalesDayConfigMapper salesDayConfigMapper = SessionUtil.getSession().getMapper(SalesDayConfigMapper.class);
List<DcBaseWeekCoefficient> dcBaseWeekCoefficientList = dcBaseWeekCoefficientMapper.selectByDays(salesDetailItemList, dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode());
List<SalesDayConfig> salesDayConfigMapperList = salesDayConfigMapper.selectByDays(salesDetailItemList, dcAutoTurnover.getBailunSku(), dcAutoTurnover.getWarehouseCode());
Map<LocalDate, DcBaseWeekCoefficient> weekCoefficientMap = dcBaseWeekCoefficientList.stream().collect(Collectors.toMap(DcBaseWeekCoefficient::getWeekDate, dcBaseWeekCoefficient -> dcBaseWeekCoefficient));
Map<LocalDate, SalesDayConfig> salesDayConfigMap = salesDayConfigMapperList.stream().collect(Collectors.toMap(salesDayConfig -> salesDayConfig.getDate().toLocalDate(), salesDayConfig -> salesDayConfig));
salesDetailItemList.stream().peek(salesDetailItem -> {
salesDetailItem.setSalesDayConfig(salesDayConfigMap.get(salesDetailItem.getDate()).getSales());
salesDetailItem.setWeekCoefficient(new BigDecimal(weekCoefficientMap.get(salesDetailItem.getDate()).getCoefficient()));
})
.forEach(SalesDetailItem::calcShowSales);
dcAutoTurnover.setSalesDetails(salesDetailItemList.stream().map(SalesDetailItem::getShowSales).map(BigDecimal::toString).collect(Collectors.joining(",")));
int i = autoTurnoverMapper.updateByExampleSelective(dcAutoTurnover, DcAutoTurnoverExample.newAndCreateCriteria().andBailunSkuEqualTo(dcAutoTurnover.getBailunSku()).andWarehouseCodeEqualTo(dcAutoTurnover.getWarehouseCode()).example());
if (i == 0) {
......@@ -793,6 +842,7 @@ public class AutoTurnoverJob extends PointJob {
}
private void caculatePlatformAvgSales(DcAutoTurnoverWithBLOBs dcAutoTurnover) {
try {
DcAutoSalesMapper mapper = SessionUtil.getSession().getMapper(DcAutoSalesMapper.class);
......@@ -1471,10 +1521,17 @@ public class AutoTurnoverJob extends PointJob {
* @param forecastShortSupplyList 预测断货
* @param autoForecastDay 周转倍数
*/
private void initForecaseList
(List<String> forecastInboundRelationList, List<BigDecimal> forecastInventoryList, List<Integer> forecastPurchaseInboundList, List<Integer> forecastTransferInboundList, List<Integer> forecastInboundList, List<BigDecimal> forecastSalesList, List<BigDecimal> forecastShortSupplyList, Integer
autoForecastDay, List<String> forecastSalesExplainList) {
private void initForecaseList(List<String> forecastInboundRelationList,
List<BigDecimal> forecastInventoryList,
List<Integer> forecastPurchaseInboundList,
List<Integer> forecastTransferInboundList,
List<Integer> forecastInboundList,
List<BigDecimal> forecastSalesList,
List<BigDecimal> forecastShortSupplyList,
Integer autoForecastDay,
List<String> forecastSalesExplainList) {
for (int i1 = 0; i1 < autoForecastDay; i1++) {
forecastInboundList.add(0);
forecastInventoryList.add(BigDecimal.ZERO);
forecastSalesList.add(BigDecimal.ZERO);
......
......@@ -10,8 +10,9 @@ EVENT_RDB_STORAGE_PASSWORD=#7kfnymAM$Y9-Ntf
ZOOKEEPER_SERVER=172.31.255.120:2181
NAME_SPACE=data-center
JOB_NAME=show-auto-turnover8
JOB_NAME=show-auto-turnover12
JOB_CRON=0 0 3 * * ?
#JOB_CRON=0 50 9 * * ?
SHARDING_TOTAL_COUNT=8
......
......@@ -137,8 +137,8 @@ public class AutoTurnoverTest {
public void testXX() {
DcBaseStock dcBaseStock = SessionUtil.getSession().getMapper(DcBaseStockMapper.class)
.selectOneByExample(DcBaseStockExample.newAndCreateCriteria()
.andBailunSkuEqualTo("950093401")
.andWarehouseCodeEqualTo("GZBLWH")
.andBailunSkuEqualTo("LM-EO-007")
.andWarehouseCodeEqualTo("MMDUSFBA")
.example());
try {
......
......@@ -57,7 +57,7 @@ public class AutoTurnoverJobTest {
jobPointLog.setPageSize(1000);
AutoTurnoverJob autoTurnoverJob = new AutoTurnoverJob();
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "INCREMENT", new HashMap<>()), 0),
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "NORMAL", new HashMap<>()), 0),
jobPointLog);
}
......@@ -68,7 +68,7 @@ public class AutoTurnoverJobTest {
jobPointLog.setPageSize(1000);
AutoTurnoverJob autoTurnoverJob = new AutoTurnoverJob();
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "INCREMENT", new HashMap<>()), 1),
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "NORMAL", new HashMap<>()), 1),
jobPointLog);
}
......@@ -79,7 +79,7 @@ public class AutoTurnoverJobTest {
jobPointLog.setPageSize(1000);
AutoTurnoverJob autoTurnoverJob = new AutoTurnoverJob();
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "INCREMENT", new HashMap<>()), 2),
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "NORMAL", new HashMap<>()), 2),
jobPointLog);
}
......@@ -90,7 +90,7 @@ public class AutoTurnoverJobTest {
jobPointLog.setPageSize(1000);
AutoTurnoverJob autoTurnoverJob = new AutoTurnoverJob();
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "INCREMENT", new HashMap<>()), 3),
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "NORMAL", new HashMap<>()), 3),
jobPointLog);
}
......@@ -101,7 +101,7 @@ public class AutoTurnoverJobTest {
jobPointLog.setPageSize(1000);
AutoTurnoverJob autoTurnoverJob = new AutoTurnoverJob();
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "INCREMENT", new HashMap<>()), 4),
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "NORMAL", new HashMap<>()), 4),
jobPointLog);
}
......@@ -112,7 +112,7 @@ public class AutoTurnoverJobTest {
jobPointLog.setPageSize(1000);
AutoTurnoverJob autoTurnoverJob = new AutoTurnoverJob();
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "INCREMENT", new HashMap<>()), 5),
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "NORMAL", new HashMap<>()), 5),
jobPointLog);
}
......@@ -123,7 +123,7 @@ public class AutoTurnoverJobTest {
jobPointLog.setPageSize(1000);
AutoTurnoverJob autoTurnoverJob = new AutoTurnoverJob();
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "INCREMENT", new HashMap<>()), 6),
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "NORMAL", new HashMap<>()), 6),
jobPointLog);
}
......@@ -134,7 +134,7 @@ public class AutoTurnoverJobTest {
jobPointLog.setPageSize(1000);
AutoTurnoverJob autoTurnoverJob = new AutoTurnoverJob();
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "INCREMENT", new HashMap<>()), 7),
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 8, "NORMAL", new HashMap<>()), 7),
jobPointLog);
}
......@@ -145,9 +145,8 @@ public class AutoTurnoverJobTest {
jobPointLog.setPageIndex(1);
jobPointLog.setPageSize(1000);
AutoTurnoverJob autoTurnoverJob = new AutoTurnoverJob();
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", "show-auto-turnover3", 1, "INCREMENT", new HashMap<>()), 0),
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", "show-auto-turnover3", 1, "NORMAL", new HashMap<>()), 0),
jobPointLog);
}
......@@ -159,7 +158,7 @@ public class AutoTurnoverJobTest {
jobPointLog.setPageSize(1000);
AutoTurnoverJob autoTurnoverJob = new AutoTurnoverJob();
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 1, "INCREMENT", new HashMap<>()), 0),
autoTurnoverJob.executeJob(new ShardingContext(new ShardingContexts("x", null, 1, "NORMAL", new HashMap<>()), 0),
jobPointLog);
}
......
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