Commit ccf07eb9 by yinyong

每日库存优化、库龄计算修改

parent 8ee918a8
......@@ -629,6 +629,146 @@ public class DcAutoJitInventoryExample {
return (Criteria) this;
}
public Criteria andWarehouseCodeIsNull() {
addCriterion("warehouse_code is null");
return (Criteria) this;
}
public Criteria andWarehouseCodeIsNotNull() {
addCriterion("warehouse_code is not null");
return (Criteria) this;
}
public Criteria andWarehouseCodeEqualTo(String value) {
addCriterion("warehouse_code =", value, "warehouseCode");
return (Criteria) this;
}
public Criteria andWarehouseCodeNotEqualTo(String value) {
addCriterion("warehouse_code <>", value, "warehouseCode");
return (Criteria) this;
}
public Criteria andWarehouseCodeGreaterThan(String value) {
addCriterion("warehouse_code >", value, "warehouseCode");
return (Criteria) this;
}
public Criteria andWarehouseCodeGreaterThanOrEqualTo(String value) {
addCriterion("warehouse_code >=", value, "warehouseCode");
return (Criteria) this;
}
public Criteria andWarehouseCodeLessThan(String value) {
addCriterion("warehouse_code <", value, "warehouseCode");
return (Criteria) this;
}
public Criteria andWarehouseCodeLessThanOrEqualTo(String value) {
addCriterion("warehouse_code <=", value, "warehouseCode");
return (Criteria) this;
}
public Criteria andWarehouseCodeLike(String value) {
addCriterion("warehouse_code like", value, "warehouseCode");
return (Criteria) this;
}
public Criteria andWarehouseCodeNotLike(String value) {
addCriterion("warehouse_code not like", value, "warehouseCode");
return (Criteria) this;
}
public Criteria andWarehouseCodeIn(List<String> values) {
addCriterion("warehouse_code in", values, "warehouseCode");
return (Criteria) this;
}
public Criteria andWarehouseCodeNotIn(List<String> values) {
addCriterion("warehouse_code not in", values, "warehouseCode");
return (Criteria) this;
}
public Criteria andWarehouseCodeBetween(String value1, String value2) {
addCriterion("warehouse_code between", value1, value2, "warehouseCode");
return (Criteria) this;
}
public Criteria andWarehouseCodeNotBetween(String value1, String value2) {
addCriterion("warehouse_code not between", value1, value2, "warehouseCode");
return (Criteria) this;
}
public Criteria andWarehouseNameIsNull() {
addCriterion("warehouse_name is null");
return (Criteria) this;
}
public Criteria andWarehouseNameIsNotNull() {
addCriterion("warehouse_name is not null");
return (Criteria) this;
}
public Criteria andWarehouseNameEqualTo(String value) {
addCriterion("warehouse_name =", value, "warehouseName");
return (Criteria) this;
}
public Criteria andWarehouseNameNotEqualTo(String value) {
addCriterion("warehouse_name <>", value, "warehouseName");
return (Criteria) this;
}
public Criteria andWarehouseNameGreaterThan(String value) {
addCriterion("warehouse_name >", value, "warehouseName");
return (Criteria) this;
}
public Criteria andWarehouseNameGreaterThanOrEqualTo(String value) {
addCriterion("warehouse_name >=", value, "warehouseName");
return (Criteria) this;
}
public Criteria andWarehouseNameLessThan(String value) {
addCriterion("warehouse_name <", value, "warehouseName");
return (Criteria) this;
}
public Criteria andWarehouseNameLessThanOrEqualTo(String value) {
addCriterion("warehouse_name <=", value, "warehouseName");
return (Criteria) this;
}
public Criteria andWarehouseNameLike(String value) {
addCriterion("warehouse_name like", value, "warehouseName");
return (Criteria) this;
}
public Criteria andWarehouseNameNotLike(String value) {
addCriterion("warehouse_name not like", value, "warehouseName");
return (Criteria) this;
}
public Criteria andWarehouseNameIn(List<String> values) {
addCriterion("warehouse_name in", values, "warehouseName");
return (Criteria) this;
}
public Criteria andWarehouseNameNotIn(List<String> values) {
addCriterion("warehouse_name not in", values, "warehouseName");
return (Criteria) this;
}
public Criteria andWarehouseNameBetween(String value1, String value2) {
addCriterion("warehouse_name between", value1, value2, "warehouseName");
return (Criteria) this;
}
public Criteria andWarehouseNameNotBetween(String value1, String value2) {
addCriterion("warehouse_name not between", value1, value2, "warehouseName");
return (Criteria) this;
}
public Criteria andStatusIsNull() {
addCriterion("status is null");
return (Criteria) this;
......
......@@ -128,8 +128,11 @@ public interface DcBaseStockMapper {
void supplementPurchaseSku();
void insertDailyStock();
void insertDailyStock(DcBaseStock dcBaseStock);
List<DcBaseStock> selectStock(@Param("pageIndex") Integer pageIndex, @Param("pageSize") Integer pageSize);
Integer selectStockCount();
List<DcBaseStock> listStockById(@Param("v1") int v1, @Param("v2") int v2);
......
......@@ -1147,9 +1147,8 @@
tbs.bailun_sku IS NULL;
</insert>
<insert id="insertDailyStock">
INSERT INTO dc_daily_stock (
<select id="selectStock" resultType="com.bailuntec.domain.entity.DcBaseStock">
SELECT
`bailun_sku`,
`warehouse_code`,
`owner_code`,
......@@ -1179,10 +1178,19 @@
`occupy_order`,
`gmt_create`,
`gmt_modified`,
`record_time`,
`create_time`,
`update_time`
) SELECT
FROM
dc_base_stock
limit #{pageIndex}, #{pageSize}
</select>
<select id="selectStockCount" resultType="java.lang.Integer">
select count(id) from dc_base_stock
</select>
<insert id="insertDailyStock">
INSERT INTO dc_daily_stock (
`bailun_sku`,
`warehouse_code`,
`owner_code`,
......@@ -1212,11 +1220,15 @@
`occupy_order`,
`gmt_create`,
`gmt_modified`,
DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),
`record_time`,
`create_time`,
`update_time`
FROM
dc_base_stock
)
values(
#{bailunSku}, #{warehouseCode}, #{ownerCode}, #{quantityReservation}, #{quantityTransport}, #{quantityTransfer}, #{quantityFreeze}, #{quantitySupplier}, #{quantityPresell}, #{quantityDefective}, #{quantityTransit}
,#{waitCheck}, #{waitPutaway}, #{usableStock}, #{usableSales}, #{usableSalesPrivate}, #{usableSalesShare}, #{inWarehouseShare}, #{inWarehousePrivate}, #{inWarehouse}, #{occupyStockShare}, #{occupyStockPrivate}, #{occupyStock}
,#{occupyActivity}, #{occupyOrderPrivate}, #{occupyOrderShare}, #{occupyOrder}, #{gmtCreate}, #{gmtModified}, DATE_SUB( CURDATE( ), INTERVAL 1 DAY ), #{createTime}, #{updateTime}
)
</insert>
<update id="updateSkuUnitPrice">
......
......@@ -482,7 +482,7 @@
</select>
<select id="selectCount" resultType="java.lang.Integer">
select count(quantity_stock)
select COALESCE(sum(quantity_stock),0)
from dc_base_stock_out
where bailun_sku = #{bailunSku} and warehouse_code = #{warehouseCode}
</select>
......
package com.bailuntec.mapper;
import com.bailuntec.domain.entity.DcBaseOmsPick;
import com.bailuntec.domain.entity.DcBaseStockRecord;
import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.domain.entity.*;
import com.bailuntec.domain.example.DcBaseStockRecordExample;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
public interface DcBaseStockRecordMapper {
......@@ -132,7 +131,7 @@ public interface DcBaseStockRecordMapper {
*/
List<DcBaseStockRecord> selectByStockTime(@Param("bailunSku")String bailunSku, @Param("warehouseCode")String warehouseCode);
List<DcBaseStockRecord> selectPageByGroup(JobPointLog jobPointLog);
List<DcBaseStockRecord> selectPageByGroup(@Param("pageIndex") Integer pageIndex, @Param("pageSize") Integer pageSize);
/**
* 根据仓库、sku分组计算入库数量
......@@ -141,7 +140,15 @@ public interface DcBaseStockRecordMapper {
*/
Integer selectCountByGroup(JobPointLog jobPointLog);
List<DcBaseOmsPick> selectListByPage(JobPointLog jobPointLog);
Integer selectOrderPickCount(JobPointLog jobPointLog);
Integer selectPurchaseInboundCount(JobPointLog jobPointLog);
Integer selectTransferCount(JobPointLog jobPointLog);
List<DcBasePurchaseInbound> selectPurchaseInboundByLimit(@Param("startTime")LocalDateTime startTime, @Param("endTime") LocalDateTime endTime, @Param("pageIndex") Integer pageIndex, @Param("pageSize") Integer pageSize);
List<DcBaseTransferComplete> selectTransferCompleteByLimit(@Param("startTime")LocalDateTime startTime, @Param("endTime") LocalDateTime endTime, @Param("pageIndex") Integer pageIndex, @Param("pageSize") Integer pageSize);
List<DcBaseOmsPick> selectOrderPickByLimit(@Param("startTime")LocalDateTime startTime, @Param("endTime") LocalDateTime endTime, @Param("pageIndex") Integer pageIndex, @Param("pageSize") Integer pageSize);
}
\ No newline at end of file
......@@ -481,7 +481,7 @@
limit 1
</select>
<select id="selectPageByGroup" parameterType="com.bailuntec.domain.entity.JobPointLog" resultType="com.bailuntec.domain.entity.DcBaseStockRecord">
<select id="selectPageByGroup" resultType="com.bailuntec.domain.entity.DcBaseStockRecord">
select
<include refid="Base_Column_List" />
from dc_base_stock_record
......@@ -496,7 +496,8 @@
<select id="selectByStockTime" resultType="com.bailuntec.domain.entity.DcBaseStockRecord">
select
<include refid="Base_Column_List" />
id, gmt_create, gmt_modified, bailun_sku, warehouse_code, warehouse_name, sum(quantity_stock) as quantity_stock,
stock_time, has_transfer
from dc_base_stock_record
where bailun_sku = #{bailunSku}
and warehouse_code = #{warehouseCode}
......@@ -505,7 +506,7 @@
</select>
<select id="selectListByPage" parameterType="com.bailuntec.domain.entity.JobPointLog" resultType="com.bailuntec.domain.entity.DcBaseOmsPick">
<select id="selectOrderPickByLimit" resultType="com.bailuntec.domain.entity.DcBaseOmsPick">
select
warehouse_code, warehouse_name, shipping_time, bailun_sku, quantity_shipped
from dc_base_oms_pick
......@@ -525,6 +526,27 @@
and shipping_time &gt;= #{startTime} and shipping_time &lt;= #{endTime}
</select>
<select id="selectPurchaseInboundCount" resultType="java.lang.Integer">
select count(id)
from dc_base_purchase_inbound
where update_time &gt;= #{startTime} and update_time &lt;= #{endTime} and status = 1
</select>
<select id="selectTransferCount" resultType="java.lang.Integer">
select count(id)
from dc_base_transfer_complete
where create_time &gt;= #{startTime} and create_time &lt;= #{endTime} and deleted = 0
</select>
<select id="selectPurchaseInboundByLimit" resultType="com.bailuntec.domain.entity.DcBasePurchaseInbound">
select * from dc_base_purchase_inbound where status = 1 and update_time &gt;= #{startTime} and update_time &lt;= #{endTime} limit #{pageIndex}, #{pageSize}
</select>
<select id="selectTransferCompleteByLimit" resultType="com.bailuntec.domain.entity.DcBaseTransferComplete">
select * from dc_base_transfer_complete where deleted = 0 and create_time &gt;= #{startTime} and create_time &lt;= #{endTime} limit #{pageIndex}, #{pageSize}
</select>
<!--<select id="selectByPage" parameterType="com.bailuntec.domain.entity.JobPointLog" resultType="com.bailuntec.domain.entity.DcBaseStockRecord">
select
<include refid="Base_Column_List" />
......
package com.bailuntec.job;
import com.bailuntec.domain.entity.DcBaseStock;
import com.bailuntec.mapper.DcBaseStockMapper;
import com.bailuntec.utils.SessionUtil;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
@Slf4j
public class DailyStockJob implements SimpleJob {
@Override
public void execute(ShardingContext shardingContext) {
int pageIndex = 1;
int pageSize = 1000;
try {
DcBaseStockMapper mapper = SessionUtil.getSession().getMapper(DcBaseStockMapper.class);
mapper.insertDailyStock();
Integer pickage = mapper.selectStockCount();
Integer stockPage = pickage % pageSize == 0 ? pickage/pageSize : pickage/pageSize + 1;
do{
List<DcBaseStock> dcBaseStockList = mapper.selectStock((pageIndex - 1) * pageSize, pageSize);
for(DcBaseStock dcBaseStock : dcBaseStockList) {
DcBaseStockMapper dcBaseStockMapper = SessionUtil.getSession().getMapper(DcBaseStockMapper.class);
dcBaseStockMapper.insertDailyStock(dcBaseStock);
}
pageIndex = pageIndex + 1;
}while(pageIndex <= stockPage);
mapper.updateSkuUnitPrice();
} catch (Exception e) {
e.printStackTrace();
......
FROM maven:3.6.0-alpine
RUN apk add ca-certificates && \
apk add tzdata && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# make source folder
RUN mkdir -p /usr/app
WORKDIR /usr/app
# install maven dependency packages (keep in image)
COPY data-parent /usr/app/data-parent
COPY data-common /usr/app/data-common
COPY data-base /usr/app/data-base
COPY data-mid /usr/app/data-mid
COPY data-show /usr/app/data-show
RUN cd /usr/app/data-parent && mvn -T 1C install -pl ../data-mid/mid-duration-stock -am
#指定容器启动程序及参数 <ENTRYPOINT> "<CMD>"
EXPOSE 8080
ENTRYPOINT ["java","-Xms30m","-Xmx80m","-jar","/usr/app/data-mid/mid-duration-stock/target/mid-duration-stock-1.0-SNAPSHOT.jar"]
\ No newline at end of file
import com.alibaba.druid.pool.DruidDataSource;
import com.bailuntec.job.CalculateStockRecordJob;
import com.bailuntec.job.SyncWarehouseStockJob;
import com.bailuntec.utils.PropertiesUtil;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
......@@ -25,6 +26,7 @@ public class Application {
private static final String EVENT_RDB_STORAGE_PASSWORD = propertiesUtil.getPropertyAsString("EVENT_RDB_STORAGE_PASSWORD");
public static void main(String[] args) {
new JobScheduler(createRegistryCenter(), createJobConfiguration1()).init();
new JobScheduler(createRegistryCenter(), createJobConfiguration2()).init();
}
private static CoordinatorRegistryCenter createRegistryCenter() {
......@@ -34,7 +36,14 @@ public class Application {
}
private static LiteJobConfiguration createJobConfiguration1() {
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(propertiesUtil.getPropertyAsString("JOB_NAME_BALE"), propertiesUtil.getPropertyAsString("JOB_CRON_BALE"), propertiesUtil.getPropertyAsInt("SHARDING_TOTAL_COUNT")).build();
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(propertiesUtil.getPropertyAsString("JOB_DURATION_NAME"), propertiesUtil.getPropertyAsString("JOB_DURATION_CRON"), propertiesUtil.getPropertyAsInt("SHARDING_TOTAL_COUNT")).build();
SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, CalculateStockRecordJob.class.getCanonicalName());
LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build();
return simpleJobRootConfig;
}
private static LiteJobConfiguration createJobConfiguration2() {
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(propertiesUtil.getPropertyAsString("JOB_WAREHOUSE_STOCK_NAME"), propertiesUtil.getPropertyAsString("JOB_WAREHOUSE_STOCK_CRON"), propertiesUtil.getPropertyAsInt("SHARDING_TOTAL_COUNT")).build();
SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, SyncWarehouseStockJob.class.getCanonicalName());
LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build();
return simpleJobRootConfig;
......
......@@ -5,6 +5,7 @@ import com.bailuntec.domain.entity.DcBaseStockRecord;
import com.bailuntec.domain.entity.DcMidStockDate;
import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.domain.example.DcBaseSkuExample;
import com.bailuntec.domain.example.DcMidStockDateExample;
import com.bailuntec.mapper.DcBaseSkuMapper;
import com.bailuntec.mapper.DcBaseStockOutMapper;
import com.bailuntec.mapper.DcBaseStockRecordMapper;
......@@ -24,7 +25,7 @@ public class CalculateStockRecordJob extends PointJob {
@Override
public void executeJob(ShardingContext shardingContext, JobPointLog jobPointLog) {
jobPointLog.setPageIndex(jobPointLog.getPageIndex() == 0 ? 1 : jobPointLog.getPageIndex());
jobPointLog.setPageIndex(jobPointLog.getPageIndex() != 1 ? 1 : jobPointLog.getPageIndex());
Integer pickSize = 0;
try {
// 根据仓库、sku分组分页查询sku数量
......@@ -43,7 +44,7 @@ public class CalculateStockRecordJob extends PointJob {
do{
// 根据仓库、sku分组分页查询sku
DcBaseStockRecordMapper dcBaseStockRecordMapper = SessionUtil.getSession().getMapper(DcBaseStockRecordMapper.class);
List<DcBaseStockRecord> dcBaseStockRecordList = dcBaseStockRecordMapper.selectPageByGroup(jobPointLog);
List<DcBaseStockRecord> dcBaseStockRecordList = dcBaseStockRecordMapper.selectPageByGroup((jobPointLog.getPageIndex() - 1) * jobPointLog.getPageSize(), jobPointLog.getPageSize());
for(DcBaseStockRecord dcBaseStockRecord : dcBaseStockRecordList) {
......@@ -68,10 +69,7 @@ public class CalculateStockRecordJob extends PointJob {
dcMidStockDate.setBailunSku(midDcBaseStockRecord.getBailunSku());
dcMidStockDate.setWarehouseCode(midDcBaseStockRecord.getWarehouseCode());
dcMidStockDate.setWarehouseName(midDcBaseStockRecord.getWarehouseName());
dcMidStockDate.setGmtCreate(midDcBaseStockRecord.getGmtCreate());
dcMidStockDate.setGmtModified(midDcBaseStockRecord.getGmtModified());
dcMidStockDate.setStockTime(midDcBaseStockRecord.getStockTime().toLocalDate());
dcMidStockDate.setGmtModified(localDateTime);
if(firstMatch) {
dcMidStockDate.setQuantityStock(quantityStock - stockOut);
}else{
......@@ -81,7 +79,10 @@ public class CalculateStockRecordJob extends PointJob {
dcMidStockDate.setReportDate(localDateTime.toLocalDate());
try {
DcMidStockDateMapper dcMidStockDateMapper = SessionUtil.getSession().getMapper(DcMidStockDateMapper.class);
int result = dcMidStockDateMapper.updateByExampleSelective(dcMidStockDate, DcMidStockDateExample.newAndCreateCriteria().andBailunSkuEqualTo(dcMidStockDate.getBailunSku()).andWarehouseCodeEqualTo(dcMidStockDate.getWarehouseCode()).andStockTimeEqualTo(dcMidStockDate.getStockTime()).andReportDateEqualTo(dcMidStockDate.getReportDate()).example());
if(result == 0) {
dcMidStockDateMapper.upsertSelective(dcMidStockDate);
}
firstMatch = false;
} catch (Exception e) {
e.printStackTrace();
......
PURCHASE_DETAILS_URL=http://purchase.bailuntec.com/Api/GetPurchaseSkuForDataCenter
TRANSFER_DETAILS_URL=http://api.wms.bailuntec.com/api/services/app/AllotOrderService/SearchAllotOrderSkuRecord
\ No newline at end of file
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_USERNAME=root
EVENT_RDB_STORAGE_PASSWORD=#7kfnymAM$Y9-Ntf
ZOOKEEPER_SERVER=172.31.255.120:2181
#EVENT_RDB_STORAGE_DRIVER=com.mysql.jdbc.Driver
#EVENT_RDB_STORAGE_URL=jdbc:mysql://gz-cdb-kp7s5i79.sql.tencentcdb.com:61691/bailun_datacenter?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
#EVENT_RDB_STORAGE_USERNAME=root
#EVENT_RDB_STORAGE_PASSWORD=#7kfnymAM$Y9-Ntf
#ZOOKEEPER_SERVER=94.191.111.219:2181
NAME_SPACE=data-center
JOB_WAREHOUSE_STOCK_NAME=base-sync-stock-record
JOB_WAREHOUSE_STOCK_CRON=0 0/30 * * * ? *
JOB_DURATION_NAME=mid-duration-stock
JOB_DURATION_CRON=0 0 0 * * ? *
SHARDING_TOTAL_COUNT=1
\ No newline at end of file
......@@ -53,21 +53,20 @@ public class ApplicationTest {
jobPointLog.setType(5);
jobPointLog.setIntervalTime(1);
jobPointLog.setJobName("syncPurchaseDetail");
syncWarehouseStockJob.syncPurchaseDetail(null, jobPointLog);
syncWarehouseStockJob.syncPurchaseInbound(null, jobPointLog);
}
@Test
public void syncTransferInbound() {
SyncWarehouseStockJob syncWarehouseStockJob = new SyncWarehouseStockJob();
JobPointLog jobPointLog = new JobPointLog();
jobPointLog.setStartTime(LocalDateTime.of(2019, 01, 01 , 00, 00, 00));
jobPointLog.setEndTime(LocalDateTime.of(2019, 9, 03 , 00, 00, 00));
jobPointLog.setStartTime(LocalDateTime.of(2019, 9, 10 , 14, 42, 00));
jobPointLog.setEndTime(LocalDateTime.of(2019, 9, 12 , 00, 00, 00));
jobPointLog.setPageIndex(0);
jobPointLog.setPageSize(100);
jobPointLog.setType(5);
jobPointLog.setIntervalTime(1);
jobPointLog.setJobName("syncPurchaseDetail");
syncWarehouseStockJob.syncTransferInbound(null, jobPointLog);
jobPointLog.setJobName("syncStockDetail");
syncWarehouseStockJob.executeJob(null, jobPointLog);
}
@Test
......
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