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,6 +1147,47 @@
tbs.bailun_sku IS NULL;
</insert>
<select id="selectStock" resultType="com.bailuntec.domain.entity.DcBaseStock">
SELECT
`bailun_sku`,
`warehouse_code`,
`owner_code`,
`quantity_reservation`,
`quantity_transport`,
`quantity_transfer`,
`quantity_freeze`,
`quantity_supplier`,
`quantity_presell`,
`quantity_defective`,
`quantity_transit`,
`wait_check`,
`wait_putaway`,
`usable_stock`,
`usable_sales`,
`usable_sales_private`,
`usable_sales_share`,
`in_warehouse_share`,
`in_warehouse_private`,
`in_warehouse`,
`occupy_stock_share`,
`occupy_stock_private`,
`occupy_stock`,
`occupy_activity`,
`occupy_order_private`,
`occupy_order_share`,
`occupy_order`,
`gmt_create`,
`gmt_modified`,
`create_time`,
`update_time`
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 (
......@@ -1182,41 +1223,12 @@
`record_time`,
`create_time`,
`update_time`
) SELECT
`bailun_sku`,
`warehouse_code`,
`owner_code`,
`quantity_reservation`,
`quantity_transport`,
`quantity_transfer`,
`quantity_freeze`,
`quantity_supplier`,
`quantity_presell`,
`quantity_defective`,
`quantity_transit`,
`wait_check`,
`wait_putaway`,
`usable_stock`,
`usable_sales`,
`usable_sales_private`,
`usable_sales_share`,
`in_warehouse_share`,
`in_warehouse_private`,
`in_warehouse`,
`occupy_stock_share`,
`occupy_stock_private`,
`occupy_stock`,
`occupy_activity`,
`occupy_order_private`,
`occupy_order_share`,
`occupy_order`,
`gmt_create`,
`gmt_modified`,
DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),
`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);
dcMidStockDateMapper.upsertSelective(dcMidStockDate);
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();
......
package com.bailuntec.job;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.bailuntec.domain.constant.CommonConstant;
import com.bailuntec.domain.dto.PurchaseDetailDTO;
import com.bailuntec.domain.dto.TransferDetailsPOJO;
import com.bailuntec.domain.dto.TransferStreamPOJO;
import com.bailuntec.domain.entity.*;
import com.bailuntec.domain.example.DcBaseStockOutExample;
import com.bailuntec.domain.example.DcBaseStockRecordExample;
import com.bailuntec.domain.example.*;
import com.bailuntec.mapper.*;
import com.bailuntec.support.PointJob;
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.*;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.LinkedHashMap;
import java.util.List;
@Slf4j
public class SyncWarehouseStockJob extends PointJob {
private static PropertiesUtil propertiesUtil = PropertiesUtil.getInstance("const");
private static OkHttpClient client = OkHttpUtil.getInstance();
@Override
public void executeJob(ShardingContext shardingContext, JobPointLog jobPointLog) {
jobPointLog.setType(5);
syncPurchaseDetail(shardingContext, jobPointLog);
jobPointLog.setPageIndex(1);
syncTransferInbound(shardingContext, jobPointLog);
jobPointLog.setPageIndex(1);
syncPurchaseInbound(shardingContext, jobPointLog);
syncTransferComplete(shardingContext, jobPointLog);
syncOrderPick(shardingContext, jobPointLog);
jobPointLog.setStartTime(jobPointLog.getEndTime());
jobPointLog.setEndTime(jobPointLog.getStartTime().plusDays(jobPointLog.getIntervalTime().longValue()).isAfter(LocalDateTime.now()) ? LocalDateTime.now() : jobPointLog.getStartTime().plusDays(jobPointLog.getIntervalTime().longValue()));
}
/**
* 得到采购入库数量
* @param shardingContext
* @param jobPointLog
*/
public void syncPurchaseDetail(ShardingContext shardingContext, JobPointLog jobPointLog) {
MediaType mediaType = MediaType.parse("application/json");
LinkedHashMap<String, Object> map = new LinkedHashMap<>(5);
map.put("start", DateTimeFormatter.ofPattern(CommonConstant.TIME_FORMAT).format(jobPointLog.getStartTime().minusMinutes(1L)));
map.put("end", DateTimeFormatter.ofPattern(CommonConstant.TIME_FORMAT).format(jobPointLog.getEndTime()));
map.put("type", jobPointLog.getType());
map.put("pagesize", jobPointLog.getPageSize());
List<PurchaseDetailDTO> purchaseDetailDTOList = null;
do {
map.put("page", jobPointLog.getPageIndex() > 0? jobPointLog.getPageIndex() : 1);
RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(map));
String purchaseStr = null;
Response response = null;
if (purchaseDetailDTOList != null) purchaseDetailDTOList = null;
try {
Request request = new Request.Builder()
.url(propertiesUtil.getPropertyAsString("PURCHASE_DETAILS_URL"))
.post(body)
.addHeader("Content-Type", "application/json")
.build();
response = client.newCall(request).execute();
purchaseStr = response.body().string();
} catch (IOException e) {
log.error("调用采购单sku详细信息接口失败", e);
throw new RuntimeException("调用采购单sku详细信息接口失败", e);
} finally {
if (response != null) {
response.close();
}
}
if (StringUtils.isNotBlank(purchaseStr)) {
JSONObject jsonObject = JSON.parseObject(purchaseStr);
if (jsonObject != null) {
if (jobPointLog.getPageIndex() == 0) {
jobPointLog.setPageIndex(jsonObject.getInteger("pagetotal") + 1);
}
purchaseDetailDTOList = jsonObject.getObject("data", new TypeReference<List<PurchaseDetailDTO>>() {
});
if (purchaseDetailDTOList != null && purchaseDetailDTOList.size() > 0) {
for (PurchaseDetailDTO purchaseDetailDTO : purchaseDetailDTOList) {
if("1".equals(purchaseDetailDTO.getStatus())) {
DcBaseStockRecord dcBaseStockRecord = new DcBaseStockRecord();
try {
dcBaseStockRecord.setQuantityStock(purchaseDetailDTO.getCount());
dcBaseStockRecord.setStockTime(purchaseDetailDTO.getUpdatedTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
dcBaseStockRecord.setWarehouseCode(purchaseDetailDTO.getWarehouseCode());
dcBaseStockRecord.setWarehouseName(purchaseDetailDTO.getWarehouseName());
dcBaseStockRecord.setBailunSku(purchaseDetailDTO.getBailunSku());
} catch (Exception e) {
throw new RuntimeException("解析采购单sku流水BeanUtils.copyProperties失败", e);
}
try {
DcBaseStockRecordMapper mapper = SessionUtil.getSession().getMapper(DcBaseStockRecordMapper.class);
int i = mapper.updateByExampleSelective(dcBaseStockRecord, DcBaseStockRecordExample.newAndCreateCriteria().andBailunSkuEqualTo(dcBaseStockRecord.getBailunSku()).andWarehouseCodeEqualTo(dcBaseStockRecord.getWarehouseCode()).andStockTimeEqualTo(dcBaseStockRecord.getStockTime()).example());
if (i == 0) {
mapper.insertSelective(dcBaseStockRecord);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("MYbatis操作DB失败", e);
} finally {
SessionUtil.closeSession();
}
}
}
}
} else {
throw new RuntimeException("调用采购单sku详细信息接口失败");
}
} else {
throw new RuntimeException("调用采购单sku详细信息接口失败");
}
jobPointLog.setPageIndex(jobPointLog.getPageIndex() - 1);
} while (jobPointLog.getPageIndex() > 0);
}
/**
* 得到调拨入库、出库数量
* @param shardingContext
* @param jobPointLog
*/
public void syncTransferInbound(ShardingContext shardingContext, JobPointLog jobPointLog) {
OkHttpClient client = OkHttpUtil.getInstance();
MediaType mediaType = MediaType.parse("application/json");
LinkedHashMap<String, Object> map = new LinkedHashMap<>(5);
map.put("StartDate", DateTimeFormatter.ofPattern(CommonConstant.TIME_FORMAT).format(jobPointLog.getStartTime().minusHours(9)));
map.put("EndDate", DateTimeFormatter.ofPattern(CommonConstant.TIME_FORMAT).format(jobPointLog.getEndTime()));
map.put("State", jobPointLog.getType());
String url = propertiesUtil.getPropertyAsString("TRANSFER_DETAILS_URL");
map.put("PageRow", jobPointLog.getPageSize());
do {
map.put("CurrentPage", jobPointLog.getPageIndex() > 0?jobPointLog.getPageIndex() : 1);
Response response = null;
String responseStr = null;
try {
RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(map));
Request request = new Request.Builder()
.url(url)
.post(body)
.addHeader("Content-Type", "application/json")
.build();
response = client.newCall(request).execute();
responseStr = response.body().string();
} catch (IOException e) {
throw new RuntimeException("调用调拨单sku流水接口失败", e);
} finally {
if (response != null) {
response.close();
}
}
if (response != null && response.isSuccessful()) {
JSONObject jsonObject = JSON.parseObject(responseStr);
if (jsonObject.get("isSuccess") != null && jsonObject.getBooleanValue("isSuccess")) {
TransferDetailsPOJO transferDetailsPOJO = jsonObject.getObject("data", TransferDetailsPOJO.class);
if (jobPointLog.getPageIndex().equals(0)) {
jobPointLog.setPageIndex(transferDetailsPOJO.getPageCount() + 1);
}
if (transferDetailsPOJO != null && transferDetailsPOJO.getData() != null && transferDetailsPOJO.getData().size() > 0) {
for (TransferStreamPOJO transferStreamPOJO : transferDetailsPOJO.getData()) {
int round = Math.round(transferStreamPOJO.getCreateTime().getNano() / 1000000000.0F);
DcBaseStockRecord dcBaseStockRecord = new DcBaseStockRecord();
dcBaseStockRecord.setWarehouseCode(transferStreamPOJO.getWarehouseCode());
// dcBaseStockDuration.setWarehouseName(transferStreamPOJO.getWarehouseName());
dcBaseStockRecord.setStockTime(transferStreamPOJO.getCreateTime().withNano(0).plusSeconds(round));
dcBaseStockRecord.setBailunSku(transferStreamPOJO.getBailunSku());
dcBaseStockRecord.setQuantityStock(transferStreamPOJO.getCount());
dcBaseStockRecord.setHasTransfer(1);
try {
DcBaseStockRecordMapper mapper = SessionUtil.getSession().getMapper(DcBaseStockRecordMapper.class);
int i = mapper.updateByExampleSelective(dcBaseStockRecord, DcBaseStockRecordExample.newAndCreateCriteria()
.andBailunSkuEqualTo(dcBaseStockRecord.getBailunSku())
.andWarehouseCodeEqualTo(dcBaseStockRecord.getWarehouseCode())
.andStockTimeEqualTo(dcBaseStockRecord.getStockTime())
.example());
if (i == 0) {
mapper.insertSelective(dcBaseStockRecord);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("MYbatis操作DB失败", e);
} finally {
SessionUtil.closeSession();
}
public void syncPurchaseInbound(ShardingContext shardingContext, JobPointLog jobPointLog) {
jobPointLog.setPageIndex(jobPointLog.getPageIndex() != 1 ? 1 : jobPointLog.getPageIndex());
Integer pickSize = 0;
try {
// 查询采购入库数量
DcBaseStockRecordMapper dcBaseStockRecordMapper = SessionUtil.getSession().getMapper(DcBaseStockRecordMapper.class);
pickSize = dcBaseStockRecordMapper.selectPurchaseInboundCount(jobPointLog);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("MYbatis操作DB失败", e);
} finally {
SessionUtil.closeSession();
}
DcBaseStockOut dcBaseStockOut = new DcBaseStockOut();
if(transferStreamPOJO.getFromWarehouseCode() != null) {
dcBaseStockOut.setWarehouseCode(transferStreamPOJO.getFromWarehouseCode());
dcBaseStockOut.setStockTime(transferStreamPOJO.getCreateTime().withNano(0).plusSeconds(round));
dcBaseStockOut.setBailunSku(transferStreamPOJO.getBailunSku());
dcBaseStockOut.setQuantityStock(transferStreamPOJO.getCount());
dcBaseStockOut.setHasTransfer(1);
try {
DcBaseStockOutMapper mapper = SessionUtil.getSession().getMapper(DcBaseStockOutMapper.class);
int i = mapper.updateByExampleSelective(dcBaseStockOut, DcBaseStockOutExample.newAndCreateCriteria()
.andBailunSkuEqualTo(dcBaseStockOut.getBailunSku())
.andWarehouseCodeEqualTo(dcBaseStockOut.getWarehouseCode())
.andStockTimeEqualTo(dcBaseStockOut.getStockTime())
.example());
if (i == 0) {
mapper.insertSelective(dcBaseStockOut);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("MYbatis操作DB失败", e);
} finally {
SessionUtil.closeSession();
}
}
Integer pageSize = pickSize % jobPointLog.getPageSize() == 0 ? pickSize/jobPointLog.getPageSize() : pickSize/jobPointLog.getPageSize() + 1;
}
do{
DcBaseStockRecordMapper dcBaseStockRecordMapper = SessionUtil.getSession().getMapper(DcBaseStockRecordMapper.class);
List<DcBasePurchaseInbound> dcBasePurchaseInboundList = dcBaseStockRecordMapper.selectPurchaseInboundByLimit(jobPointLog.getStartTime(), jobPointLog.getEndTime(), (jobPointLog.getPageIndex() - 1) * jobPointLog.getPageSize(), jobPointLog.getPageSize());
for(DcBasePurchaseInbound dcBasePurchaseInbound : dcBasePurchaseInboundList) {
try {
DcBaseStockRecord dcBaseStockRecord = new DcBaseStockRecord();
dcBaseStockRecord.setStockTime(dcBasePurchaseInbound.getUpdateTime());
dcBaseStockRecord.setBailunSku(dcBasePurchaseInbound.getBailunSku());
dcBaseStockRecord.setWarehouseCode(dcBasePurchaseInbound.getWarehouseCode());
dcBaseStockRecord.setQuantityStock(dcBasePurchaseInbound.getCount());
DcBaseStockRecordMapper mapper = SessionUtil.getSession().getMapper(DcBaseStockRecordMapper.class);
int i = mapper.updateByExampleSelective(dcBaseStockRecord, DcBaseStockRecordExample.newAndCreateCriteria().andBailunSkuEqualTo(dcBaseStockRecord.getBailunSku()).andWarehouseCodeEqualTo(dcBaseStockRecord.getWarehouseCode()).andStockTimeEqualTo(dcBaseStockRecord.getStockTime()).example());
if (i == 0) {
mapper.insertSelective(dcBaseStockRecord);
}
} else {
throw new RuntimeException("调用调拨流水接口返回200但是失败");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("MYbatis操作DB失败", e);
} finally {
SessionUtil.closeSession();
}
} else {
throw new RuntimeException("调用调拨流水接口失败");
}
if (jobPointLog.getPageIndex() % 5 == 0) {
jobPointLog.setPageIndex(jobPointLog.getPageIndex() + 1);
}while (jobPointLog.getPageIndex() <= pageSize);
}
public void syncTransferComplete(ShardingContext shardingContext, JobPointLog jobPointLog) {
jobPointLog.setPageIndex(jobPointLog.getPageIndex() !=1 ? 1 : jobPointLog.getPageIndex());
Integer pickPage = 0;
try{
DcBaseStockRecordMapper dcBaseStockRecordMapper = SessionUtil.getSession().getMapper(DcBaseStockRecordMapper.class);
pickPage = dcBaseStockRecordMapper.selectTransferCount(jobPointLog);
}catch(Exception e) {
e.printStackTrace();
throw new RuntimeException("MYbatis操作失败", e);
}finally {
SessionUtil.closeSession();
}
Integer pageSize = pickPage % jobPointLog.getPageSize() == 0 ? pickPage/jobPointLog.getPageSize() : pickPage/jobPointLog.getPageSize() + 1;
do{
DcBaseStockRecordMapper dcBaseStockRecordMapper = SessionUtil.getSession().getMapper(DcBaseStockRecordMapper.class);
List<DcBaseTransferComplete> dcBaseTransferCompleteList = dcBaseStockRecordMapper.selectTransferCompleteByLimit(jobPointLog.getStartTime(), jobPointLog.getEndTime(), (jobPointLog.getPageIndex() - 1) * jobPointLog.getPageSize(), jobPointLog.getPageSize());
for(DcBaseTransferComplete dcBaseTransferComplete : dcBaseTransferCompleteList) {
try {
JobPointLogMapper mapper = SessionUtil.getSession().getMapper(JobPointLogMapper.class);
mapper.upsertSelective(jobPointLog);
DcBaseStockRecord dcBaseStockRecord = new DcBaseStockRecord();
dcBaseStockRecord.setStockTime(dcBaseTransferComplete.getCreateTime());
dcBaseStockRecord.setBailunSku(dcBaseTransferComplete.getBailunSku());
dcBaseStockRecord.setWarehouseCode(dcBaseTransferComplete.getWarehouseCode());
dcBaseStockRecord.setQuantityStock(dcBaseTransferComplete.getCount());
DcBaseStockRecordMapper mapper = SessionUtil.getSession().getMapper(DcBaseStockRecordMapper.class);
int i = mapper.updateByExampleSelective(dcBaseStockRecord, DcBaseStockRecordExample.newAndCreateCriteria().andBailunSkuEqualTo(dcBaseStockRecord.getBailunSku()).andWarehouseCodeEqualTo(dcBaseStockRecord.getWarehouseCode()).andStockTimeEqualTo(dcBaseStockRecord.getStockTime()).example());
if (i == 0) {
mapper.insertSelective(dcBaseStockRecord);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Mybatis操作DB插入任务记录失败", e);
throw new RuntimeException("MYbatis操作DB失败", e);
} finally {
SessionUtil.closeSession();
}
try{
DcBaseStockOut dcBaseStockOut = new DcBaseStockOut();
if(dcBaseTransferComplete.getSourceWarehouseCode() != null) {
dcBaseStockOut.setWarehouseCode(dcBaseTransferComplete.getSourceWarehouseCode());
dcBaseStockOut.setStockTime(dcBaseTransferComplete.getCreateTime());
dcBaseStockOut.setBailunSku(dcBaseTransferComplete.getBailunSku());
dcBaseStockOut.setQuantityStock(dcBaseTransferComplete.getCount());
dcBaseStockOut.setHasTransfer(1);
try {
DcBaseStockOutMapper mapper = SessionUtil.getSession().getMapper(DcBaseStockOutMapper.class);
int i = mapper.updateByExampleSelective(dcBaseStockOut, DcBaseStockOutExample.newAndCreateCriteria()
.andBailunSkuEqualTo(dcBaseStockOut.getBailunSku())
.andWarehouseCodeEqualTo(dcBaseStockOut.getWarehouseCode())
.andStockTimeEqualTo(dcBaseStockOut.getStockTime())
.example());
if (i == 0) {
mapper.insertSelective(dcBaseStockOut);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("MYbatis操作DB失败", e);
} finally {
SessionUtil.closeSession();
}
}
}catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("MYbatis操作DB失败", e);
}finally {
SessionUtil.closeSession();
}
}
jobPointLog.setPageIndex(jobPointLog.getPageIndex() - 1);
} while (jobPointLog.getPageIndex() > 0);
jobPointLog.setPageIndex(0);
jobPointLog.setStartTime(jobPointLog.getEndTime());
jobPointLog.setEndTime(jobPointLog.getStartTime().plusDays(jobPointLog.getIntervalTime().longValue()).isAfter(LocalDateTime.now()) ? LocalDateTime.now() : jobPointLog.getStartTime().plusDays(jobPointLog.getIntervalTime().longValue()));
jobPointLog.setPageIndex(jobPointLog.getPageIndex() + 1);
}while(jobPointLog.getPageIndex() <= pageSize);
}
public void syncOrderPick(ShardingContext shardingContext, JobPointLog jobPointLog) {
......@@ -263,15 +153,7 @@ public class SyncWarehouseStockJob extends PointJob {
Integer pageSize = pickSize % jobPointLog.getPageSize() == 0 ? pickSize/jobPointLog.getPageSize() : pickSize/jobPointLog.getPageSize() + 1;
do{
DcBaseStockRecordMapper dcBaseStockRecordMapper1 = SessionUtil.getSession().getMapper(DcBaseStockRecordMapper.class);
List<DcBaseOmsPick> dcBaseOmsPickList = null;
try {
dcBaseOmsPickList = dcBaseStockRecordMapper1.selectListByPage(jobPointLog);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("MYbatis操作DB失败", e);
} finally {
SessionUtil.closeSession();
}
List<DcBaseOmsPick> dcBaseOmsPickList = dcBaseStockRecordMapper1.selectOrderPickByLimit(jobPointLog.getStartTime(), jobPointLog.getEndTime(), (jobPointLog.getPageIndex() - 1) * jobPointLog.getPageSize(), jobPointLog.getPageSize());
for(DcBaseOmsPick dcBaseOmsPick : dcBaseOmsPickList) {
DcBaseStockOut dcBaseStockOut = new DcBaseStockOut();
dcBaseStockOut.setWarehouseCode(dcBaseOmsPick.getWarehouseCode());
......
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