Commit cfff1274 by huluobin

头程费用计算

亚马逊广告
parent 56e48859
...@@ -46,10 +46,10 @@ public class AmazonAdGenerateReportIdJob implements SimpleJob { ...@@ -46,10 +46,10 @@ public class AmazonAdGenerateReportIdJob implements SimpleJob {
dcBaseCompanyAccountList.forEach(dcBaseCompanyAccount -> { dcBaseCompanyAccountList.forEach(dcBaseCompanyAccount -> {
try { try {
//
LocalDateTime reportDate = LocalDateTime.now().minusDays(1).minusHours(12);
// LocalDateTime reportDate = LocalDateTime.now().minusDays(1).minusHours(12); // LocalDateTime reportDate = LocalDateTime.of(2020, 8, 22, 0, 0);
LocalDateTime reportDate =LocalDateTime.of(2020,8,21,0,0);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("reportDate", reportDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"))); jsonObject.put("reportDate", reportDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
jsonObject.put("metrics", propertiesUtil.getPropertyAsString("METRICS")); jsonObject.put("metrics", propertiesUtil.getPropertyAsString("METRICS"));
......
import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.job.CompanyAccountSyncJob;
import com.bailuntec.job.CompanyInfoSyncJob;
import com.bailuntec.job.CompanyStaffSyncJob;
import org.junit.jupiter.api.Test;
import java.time.LocalDateTime;
public class CompanyTest {
@Test
public void test() {
CompanyInfoSyncJob skuSyncJob = new CompanyInfoSyncJob();
skuSyncJob.executeJob(null, new JobPointLog("", 0, 100, 1, 1, LocalDateTime.now().minusMonths(1), LocalDateTime.now().minusDays(29)));
}
@Test
public void test2() {
CompanyStaffSyncJob skuSyncJob = new CompanyStaffSyncJob();
skuSyncJob.executeJob(null, new JobPointLog("", 0, 100, 1, 1, LocalDateTime.now().minusMonths(1), LocalDateTime.now().minusDays(29)));
}
@Test
public void test3() {
CompanyAccountSyncJob skuSyncJob = new CompanyAccountSyncJob();
skuSyncJob.execute(null);
}
}
...@@ -139,5 +139,5 @@ public interface DcBaseCostFirstMapper { ...@@ -139,5 +139,5 @@ public interface DcBaseCostFirstMapper {
* @param pageOffset 分页参数 * @param pageOffset 分页参数
* @return 未计算的基础头程费用 * @return 未计算的基础头程费用
*/ */
List<DcBaseCostFirst> listUnCalc(@Param("pageStart") Integer pageStart, @Param("pageOffset") Integer pageOffset); List<DcBaseCostFirst> dcBaseCostGroupList(@Param("pageStart") Integer pageStart, @Param("pageOffset") Integer pageOffset);
} }
...@@ -834,7 +834,7 @@ ...@@ -834,7 +834,7 @@
# and has_calculation = 0 # and has_calculation = 0
GROUP BY channel_order_id, transfer_order_id, box_id, warehouse_code) tb; GROUP BY channel_order_id, transfer_order_id, box_id, warehouse_code) tb;
</select> </select>
<select id="listUnCalc" resultType="com.bailuntec.domain.entity.DcBaseCostFirst"> <select id="dcBaseCostGroupList" resultType="com.bailuntec.domain.entity.DcBaseCostFirst">
SELECT t2.* SELECT t2.*
from ( from (
SELECT channel_order_id, transfer_order_id, box_id, warehouse_code SELECT channel_order_id, transfer_order_id, box_id, warehouse_code
...@@ -857,7 +857,6 @@ ...@@ -857,7 +857,6 @@
and transfer_order_id = #{transferOrderId} and transfer_order_id = #{transferOrderId}
and box_id = #{boxId} and box_id = #{boxId}
and warehouse_code = #{warehouseCode} and warehouse_code = #{warehouseCode}
# and has_calculation = 0
</update> </update>
......
...@@ -121,4 +121,12 @@ public interface DcMidCostFirstMapper { ...@@ -121,4 +121,12 @@ public interface DcMidCostFirstMapper {
* @project https://github.com/itfsw/mybatis-generator-plugin * @project https://github.com/itfsw/mybatis-generator-plugin
*/ */
int upsertSelective(DcMidCostFirst record); int upsertSelective(DcMidCostFirst record);
/**
* 批量插入更细
*
* @param dcMidCostFirstList
*/
void upsertBatch(@Param("lists") List<DcMidCostFirst> dcMidCostFirstList);
} }
...@@ -6,14 +6,14 @@ ...@@ -6,14 +6,14 @@
WARNING - @mbg.generated WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify. This element is automatically generated by MyBatis Generator, do not modify.
--> -->
<id column="id" jdbcType="INTEGER" property="id" /> <id column="id" jdbcType="INTEGER" property="id"/>
<result column="cost_first" jdbcType="DECIMAL" property="costFirst" /> <result column="cost_first" jdbcType="DECIMAL" property="costFirst"/>
<result column="bailun_sku" jdbcType="VARCHAR" property="bailunSku" /> <result column="bailun_sku" jdbcType="VARCHAR" property="bailunSku"/>
<result column="warehouse_code" jdbcType="VARCHAR" property="warehouseCode" /> <result column="warehouse_code" jdbcType="VARCHAR" property="warehouseCode"/>
<result column="company_id" jdbcType="INTEGER" property="companyId" /> <result column="company_id" jdbcType="INTEGER" property="companyId"/>
<result column="has_calculation" jdbcType="BIT" property="hasCalculation" /> <result column="has_calculation" jdbcType="BIT" property="hasCalculation"/>
<result column="cost_count" jdbcType="INTEGER" property="costCount" /> <result column="cost_count" jdbcType="INTEGER" property="costCount"/>
<result column="has_config" jdbcType="BIT" property="hasConfig" /> <result column="has_config" jdbcType="BIT" property="hasConfig"/>
</resultMap> </resultMap>
<sql id="Example_Where_Clause"> <sql id="Example_Where_Clause">
<!-- <!--
...@@ -37,7 +37,8 @@ ...@@ -37,7 +37,8 @@
</when> </when>
<when test="criterion.listValue"> <when test="criterion.listValue">
and ${criterion.condition} and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=","> <foreach close=")" collection="criterion.value" item="listItem" open="("
separator=",">
#{listItem} #{listItem}
</foreach> </foreach>
</when> </when>
...@@ -70,7 +71,8 @@ ...@@ -70,7 +71,8 @@
</when> </when>
<when test="criterion.listValue"> <when test="criterion.listValue">
and ${criterion.condition} and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=","> <foreach close=")" collection="criterion.value" item="listItem" open="("
separator=",">
#{listItem} #{listItem}
</foreach> </foreach>
</when> </when>
...@@ -89,7 +91,8 @@ ...@@ -89,7 +91,8 @@
id, cost_first, bailun_sku, warehouse_code, company_id, has_calculation, cost_count, id, cost_first, bailun_sku, warehouse_code, company_id, has_calculation, cost_count,
has_config has_config
</sql> </sql>
<select id="selectByExample" parameterType="com.bailuntec.domain.example.DcMidCostFirstExample" resultMap="BaseResultMap"> <select id="selectByExample" parameterType="com.bailuntec.domain.example.DcMidCostFirstExample"
resultMap="BaseResultMap">
<!-- <!--
WARNING - @mbg.generated WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify. This element is automatically generated by MyBatis Generator, do not modify.
...@@ -98,10 +101,10 @@ ...@@ -98,10 +101,10 @@
<if test="distinct"> <if test="distinct">
distinct distinct
</if> </if>
<include refid="Base_Column_List" /> <include refid="Base_Column_List"/>
from dc_mid_cost_first from dc_mid_cost_first
<if test="_parameter != null"> <if test="_parameter != null">
<include refid="Example_Where_Clause" /> <include refid="Example_Where_Clause"/>
</if> </if>
<if test="orderByClause != null"> <if test="orderByClause != null">
order by ${orderByClause} order by ${orderByClause}
...@@ -121,7 +124,7 @@ ...@@ -121,7 +124,7 @@
This element is automatically generated by MyBatis Generator, do not modify. This element is automatically generated by MyBatis Generator, do not modify.
--> -->
select select
<include refid="Base_Column_List" /> <include refid="Base_Column_List"/>
from dc_mid_cost_first from dc_mid_cost_first
where id = #{id,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER}
</select> </select>
...@@ -140,7 +143,7 @@ ...@@ -140,7 +143,7 @@
--> -->
delete from dc_mid_cost_first delete from dc_mid_cost_first
<if test="_parameter != null"> <if test="_parameter != null">
<include refid="Example_Where_Clause" /> <include refid="Example_Where_Clause"/>
</if> </if>
</delete> </delete>
<insert id="insert" parameterType="com.bailuntec.domain.entity.DcMidCostFirst"> <insert id="insert" parameterType="com.bailuntec.domain.entity.DcMidCostFirst">
...@@ -214,14 +217,15 @@ ...@@ -214,14 +217,15 @@
</if> </if>
</trim> </trim>
</insert> </insert>
<select id="countByExample" parameterType="com.bailuntec.domain.example.DcMidCostFirstExample" resultType="java.lang.Long"> <select id="countByExample" parameterType="com.bailuntec.domain.example.DcMidCostFirstExample"
resultType="java.lang.Long">
<!-- <!--
WARNING - @mbg.generated WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify. This element is automatically generated by MyBatis Generator, do not modify.
--> -->
select count(*) from dc_mid_cost_first select count(*) from dc_mid_cost_first
<if test="_parameter != null"> <if test="_parameter != null">
<include refid="Example_Where_Clause" /> <include refid="Example_Where_Clause"/>
</if> </if>
</select> </select>
<update id="updateByExampleSelective" parameterType="map"> <update id="updateByExampleSelective" parameterType="map">
...@@ -257,7 +261,7 @@ ...@@ -257,7 +261,7 @@
</if> </if>
</set> </set>
<if test="_parameter != null"> <if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" /> <include refid="Update_By_Example_Where_Clause"/>
</if> </if>
</update> </update>
<update id="updateByExample" parameterType="map"> <update id="updateByExample" parameterType="map">
...@@ -275,7 +279,7 @@ ...@@ -275,7 +279,7 @@
cost_count = #{record.costCount,jdbcType=INTEGER}, cost_count = #{record.costCount,jdbcType=INTEGER},
has_config = #{record.hasConfig,jdbcType=BIT} has_config = #{record.hasConfig,jdbcType=BIT}
<if test="_parameter != null"> <if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" /> <include refid="Update_By_Example_Where_Clause"/>
</if> </if>
</update> </update>
<update id="updateByPrimaryKeySelective" parameterType="com.bailuntec.domain.entity.DcMidCostFirst"> <update id="updateByPrimaryKeySelective" parameterType="com.bailuntec.domain.entity.DcMidCostFirst">
...@@ -324,6 +328,39 @@ ...@@ -324,6 +328,39 @@
has_config = #{hasConfig,jdbcType=BIT} has_config = #{hasConfig,jdbcType=BIT}
where id = #{id,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER}
</update> </update>
<update id="upsertBatch">
insert into dc_mid_cost_first
(
cost_first,
bailun_sku,
warehouse_code,
company_id,
has_calculation,
cost_count,
has_config)
values
<foreach collection="lists" item="item" index="index" separator=",">
(
#{item.costFirst,jdbcType=DECIMAL},
#{item.bailunSku,jdbcType=VARCHAR},
#{item.warehouseCode,jdbcType=VARCHAR},
#{item.companyId,jdbcType=INTEGER},
#{item.hasCalculation,jdbcType=BIT},
#{item.costCount,jdbcType=INTEGER},
#{item.hasConfig,jdbcType=BIT}
)
</foreach>
on duplicate key update
cost_first = values(cost_first),
bailun_sku = values(bailun_sku),
warehouse_code = values(warehouse_code),
company_id = values(company_id),
has_calculation = values(has_calculation),
cost_count = values(cost_count),
has_config = values(has_config)
</update>
<insert id="upsertSelective" parameterType="com.bailuntec.domain.entity.DcMidCostFirst"> <insert id="upsertSelective" parameterType="com.bailuntec.domain.entity.DcMidCostFirst">
<!-- <!--
WARNING - @mbg.generated WARNING - @mbg.generated
...@@ -435,17 +472,18 @@ ...@@ -435,17 +472,18 @@
cost_count = #{costCount,jdbcType=INTEGER}, cost_count = #{costCount,jdbcType=INTEGER},
has_config = #{hasConfig,jdbcType=BIT} has_config = #{hasConfig,jdbcType=BIT}
</insert> </insert>
<select id="selectOneByExample" parameterType="com.bailuntec.domain.example.DcMidCostFirstExample" resultMap="BaseResultMap"> <select id="selectOneByExample" parameterType="com.bailuntec.domain.example.DcMidCostFirstExample"
resultMap="BaseResultMap">
<!-- <!--
WARNING - @mbg.generated WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify. This element is automatically generated by MyBatis Generator, do not modify.
@project https://github.com/itfsw/mybatis-generator-plugin @project https://github.com/itfsw/mybatis-generator-plugin
--> -->
select select
<include refid="Base_Column_List" /> <include refid="Base_Column_List"/>
from dc_mid_cost_first from dc_mid_cost_first
<if test="_parameter != null"> <if test="_parameter != null">
<include refid="Example_Where_Clause" /> <include refid="Example_Where_Clause"/>
</if> </if>
<if test="orderByClause != null"> <if test="orderByClause != null">
order by ${orderByClause} order by ${orderByClause}
......
...@@ -129,6 +129,5 @@ public interface DcMidCostFirstOrderMapper { ...@@ -129,6 +129,5 @@ public interface DcMidCostFirstOrderMapper {
List<MidCostFirst> listSkuWarehouse(@Param("v1") int v1, @Param("v2") int v2); List<MidCostFirst> listSkuWarehouse(@Param("v1") int v1, @Param("v2") int v2);
int updateHasCalculation(MidCostFirst midCostFirst);
} }
...@@ -577,28 +577,26 @@ ...@@ -577,28 +577,26 @@
limit 1 limit 1
</select> </select>
<!---->
<select id="countSkuWarehouse" resultType="int"> <select id="countSkuWarehouse" resultType="int">
select count(*) select count(*)
from (SELECT * FROM dc_mid_cost_first_order where has_calculation = 0 GROUP BY bailun_sku, warehouse_code) tb; from (SELECT *
FROM dc_mid_cost_first_order
GROUP BY bailun_sku, warehouse_code) tb;
</select> </select>
<!---->
<select id="listSkuWarehouse" resultType="com.bailuntec.domain.pojo.MidCostFirst"> <select id="listSkuWarehouse" resultType="com.bailuntec.domain.pojo.MidCostFirst">
SELECT bailun_sku, SELECT bailun_sku,
warehouse_code, warehouse_code,
sum(cost_first) as total_cost_first, sum(cost_first) as total_cost_first,
sum(quantity) as total_count sum(quantity) as total_count
FROM dc_mid_cost_first_order FROM dc_mid_cost_first_order
where has_calculation = 0
GROUP BY bailun_sku, warehouse_code GROUP BY bailun_sku, warehouse_code
order by id asc order by id
limit #{v1}, #{v2} limit #{v1}, #{v2}
</select> </select>
<update id="updateHasCalculation">
update dc_mid_cost_first_order
set has_calculation = 1
where bailun_sku = #{bailunSku}
and warehouse_code = #{warehouseCode}
</update>
</mapper> </mapper>
...@@ -2,16 +2,19 @@ package com.bailuntec.job; ...@@ -2,16 +2,19 @@ package com.bailuntec.job;
import com.bailuntec.domain.entity.DcBaseCostFirst; import com.bailuntec.domain.entity.DcBaseCostFirst;
import com.bailuntec.domain.entity.DcBaseSku; import com.bailuntec.domain.entity.DcBaseSku;
import com.bailuntec.domain.entity.DcMidCostFirst;
import com.bailuntec.domain.entity.DcMidCostFirstOrder; import com.bailuntec.domain.entity.DcMidCostFirstOrder;
import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.domain.example.DcBaseSkuExample; import com.bailuntec.domain.example.DcBaseSkuExample;
import com.bailuntec.domain.example.DcMidCostFirstExample;
import com.bailuntec.domain.pojo.MidCostFirst;
import com.bailuntec.mapper.DcBaseCostFirstMapper; import com.bailuntec.mapper.DcBaseCostFirstMapper;
import com.bailuntec.mapper.DcBaseSkuMapper; import com.bailuntec.mapper.DcBaseSkuMapper;
import com.bailuntec.mapper.DcMidCostFirstMapper;
import com.bailuntec.mapper.DcMidCostFirstOrderMapper; import com.bailuntec.mapper.DcMidCostFirstOrderMapper;
import com.bailuntec.support.PointJob;
import com.bailuntec.utils.ListUtil; import com.bailuntec.utils.ListUtil;
import com.bailuntec.utils.SessionUtil; import com.bailuntec.utils.SessionUtil;
import com.dangdang.ddframe.job.api.ShardingContext; import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSession;
...@@ -23,45 +26,138 @@ import java.util.Optional; ...@@ -23,45 +26,138 @@ import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
public class CalculateCostFirstJob extends PointJob { public class CalculateCostFirstJob implements SimpleJob {
@Override @Override
public void executeJob(ShardingContext shardingContext, JobPointLog jobPointLog) { public void execute(ShardingContext shardingContext) {
int countChannelOrder;
try (SqlSession sqlSession = SessionUtil.getFactory().openSession(true)) { try (SqlSession sqlSession = SessionUtil.getFactory().openSession(true)) {
DcBaseCostFirstMapper dcBaseCostFirstMapper = sqlSession.getMapper(DcBaseCostFirstMapper.class); DcBaseCostFirstMapper dcBaseCostFirstMapper = sqlSession.getMapper(DcBaseCostFirstMapper.class);
DcMidCostFirstOrderMapper dcMidCostFirstOrderMapper = sqlSession.getMapper(DcMidCostFirstOrderMapper.class); DcMidCostFirstOrderMapper dcMidCostFirstOrderMapper = sqlSession.getMapper(DcMidCostFirstOrderMapper.class);
DcBaseSkuMapper dcBaseSkuMapper = SessionUtil.getSession().getMapper(DcBaseSkuMapper.class); DcBaseSkuMapper dcBaseSkuMapper = sqlSession.getMapper(DcBaseSkuMapper.class);
DcMidCostFirstMapper dcMidCostFirstMapper = sqlSession.getMapper(DcMidCostFirstMapper.class);
countChannelOrder = dcBaseCostFirstMapper.countChannelOrder(); int currentPage = 1;
int pageSize = 1000;
int countChannelOrder = dcBaseCostFirstMapper.countChannelOrder();
int totalPage = getTotalPage(countChannelOrder, pageSize);
int totalPage = getChannelOrderPage(countChannelOrder, jobPointLog);
do { do {
log.info("当前第:{}页", jobPointLog.getPageIndex()); log.info("当前第:{}页", currentPage);
log.info("总共:{}页", totalPage); log.info("总共:{}页", totalPage);
Integer pageStart = (jobPointLog.getPageIndex() - 1) * jobPointLog.getPageSize(); Integer pageStart = (currentPage - 1) * currentPage;
Integer pageOffset = jobPointLog.getPageSize(); Integer pageOffset = currentPage;
List<DcBaseCostFirst> dcBaseCostFirstList = dcBaseCostFirstMapper.listUnCalc(pageStart, pageOffset); List<DcBaseCostFirst> dcBaseCostFirstList = dcBaseCostFirstMapper.dcBaseCostGroupList(pageStart, pageOffset);
if (ListUtil.isNotEmpty(dcBaseCostFirstList)) { if (ListUtil.isNotEmpty(dcBaseCostFirstList)) {
List<DcBaseSku> dcBaseSkuList = dcBaseSkuMapper.selectByExample(DcBaseSkuExample.newAndCreateCriteria()
.andBailunSkuIn(dcBaseCostFirstList.stream().map(DcBaseCostFirst::getBailunSku).collect(Collectors.toList())).example());
//聚合base头程费sku信息 //聚合base头程费sku信息
List<DcBaseSku> dcBaseSkuList = dcBaseSkuMapper.selectByExample(DcBaseSkuExample
.newAndCreateCriteria()
.andBailunSkuIn(dcBaseCostFirstList
.stream()
.map(DcBaseCostFirst::getBailunSku)
.collect(Collectors.toList()))
.example());
Map<String, DcBaseSku> dcBaseSkuMap = dcBaseSkuList.stream().collect(Collectors.toMap(DcBaseSku::getBailunSku, dcBaseSku -> dcBaseSku)); Map<String, DcBaseSku> dcBaseSkuMap = dcBaseSkuList.stream().collect(Collectors.toMap(DcBaseSku::getBailunSku, dcBaseSku -> dcBaseSku));
dcBaseCostFirstList.forEach(dcBaseCostFirst -> dcBaseCostFirst.setDcBaseSku(Optional.ofNullable(dcBaseSkuMap.get(dcBaseCostFirst.getBailunSku())))); dcBaseCostFirstList.forEach(dcBaseCostFirst -> dcBaseCostFirst.setDcBaseSku(Optional.ofNullable(dcBaseSkuMap.get(dcBaseCostFirst.getBailunSku()))));
//头程费用 按订单维度(boxId,channelOrderId ,transferOrderId,warehouseCode)分组
Map<String, List<DcBaseCostFirst>> dcBaseCostFirstMap = dcBaseCostFirstList.stream().collect( Map<String, List<DcBaseCostFirst>> dcBaseCostFirstMap = dcBaseCostFirstList.stream().collect(
Collectors.groupingBy(val -> val.getChannelOrderId() + val.getTransferOrderId() + val.getBoxId() + val.getWarehouseCode())); Collectors.groupingBy(val -> val.getChannelOrderId() + val.getTransferOrderId() + val.getBoxId() + val.getWarehouseCode()));
//生成订单维度DcMidCostFirstOrder列表
List<DcMidCostFirstOrder> dcMidCostFirstOrderList = dcBaseCostFirstMap.values() List<DcMidCostFirstOrder> dcMidCostFirstOrderList = dcBaseCostFirstMap.values()
.stream() .stream()
.map(dcBaseCostFirstGroup -> { .map(dcBaseCostFirstGroup -> {
//计算sku权重
this.calcBaseFirstCostSkuWeightRatio(dcBaseCostFirstGroup);
return dcBaseCostFirstGroup
.stream()
.map(dcBaseCostFirst -> {
BigDecimal skuCostFirst = dcBaseCostFirst.getCostFirst().multiply(dcBaseCostFirst.getSkuWeightRatio()).setScale(3, RoundingMode.HALF_EVEN);
DcMidCostFirstOrder dcMidCostFirstOrder = new DcMidCostFirstOrder();
dcMidCostFirstOrder.setBailunSku(dcBaseCostFirst.getBailunSku());
dcMidCostFirstOrder.setWarehouseCode(dcBaseCostFirst.getWarehouseCode());
dcMidCostFirstOrder.setChannelOrderId(dcBaseCostFirst.getChannelOrderId());
dcMidCostFirstOrder.setTransferOrderId(dcBaseCostFirst.getTransferOrderId());
dcMidCostFirstOrder.setQuantity(dcBaseCostFirst.getQuantity());
dcMidCostFirstOrder.setBoxId(dcBaseCostFirst.getBoxId());
dcMidCostFirstOrder.setWeightRatio(dcBaseCostFirst.getSkuWeightRatio());
dcMidCostFirstOrder.setCostFirst(skuCostFirst);
dcMidCostFirstOrder.setCompanyId(dcBaseCostFirst.getCompanyId());
dcMidCostFirstOrder.setHasCalculation(true);
return dcMidCostFirstOrder;
}).collect(Collectors.toList());
})
.flatMap(List::stream)
.collect(Collectors.toList());
//批量插入更新订单维度
dcMidCostFirstOrderMapper.upsertBatch(dcMidCostFirstOrderList);
}
currentPage = currentPage + 1;
}
while (currentPage <= totalPage);
int dcMidCostFirstIndex = 1;
int dcMidCostFirstPageSize = 1000;
int countSkuWarehouse = dcMidCostFirstOrderMapper.countSkuWarehouse();
int dcMidCostFirstTotalPage = this.getTotalPage(countSkuWarehouse, dcMidCostFirstPageSize);
do {
List<MidCostFirst> midCostFirstList = dcMidCostFirstOrderMapper.listSkuWarehouse((dcMidCostFirstIndex - 1) * dcMidCostFirstPageSize, dcMidCostFirstPageSize);
List<DcMidCostFirst> dcMidCostFirstList = midCostFirstList.stream().map(midCostFirst -> {
DcMidCostFirst dcMidCostFirst = dcMidCostFirstMapper.selectOneByExample(DcMidCostFirstExample.newAndCreateCriteria()
.andBailunSkuEqualTo(midCostFirst.getBailunSku())
.andWarehouseCodeEqualTo(midCostFirst.getWarehouseCode())
.example());
if (dcMidCostFirst == null) {
dcMidCostFirst = new DcMidCostFirst();
dcMidCostFirst.setBailunSku(midCostFirst.getBailunSku());
dcMidCostFirst.setWarehouseCode(midCostFirst.getWarehouseCode());
dcMidCostFirst.setCompanyId(0);
dcMidCostFirst.setHasConfig(false);
}
dcMidCostFirst.setCostFirst(midCostFirst.getTotalCostFirst().divide(new BigDecimal(midCostFirst.getTotalCount()), 2, BigDecimal.ROUND_HALF_UP));
dcMidCostFirst.setCostCount(midCostFirst.getTotalCount());
dcMidCostFirst.setHasCalculation(true);
return dcMidCostFirst;
}
)
.collect(Collectors.toList());
dcMidCostFirstMapper.upsertBatch(dcMidCostFirstList);
dcMidCostFirstIndex = dcMidCostFirstIndex + 1;
} while (dcMidCostFirstIndex < dcMidCostFirstTotalPage);
} catch (Exception e) {
throw new RuntimeException("任务失败", e);
}
}
/**
* <p>
* 按照sku重量计算组别内每个订单维度的头程费用权重
* </p>
*
* @param dcBaseCostFirstGroup 基础头程费用 按订单维度(boxId,channelOrderId ,transferOrderId,warehouseCode)分组后的组别
*/
private void calcBaseFirstCostSkuWeightRatio(List<DcBaseCostFirst> dcBaseCostFirstGroup) {
//总重量 //总重量
BigDecimal totalWeight = dcBaseCostFirstGroup.stream().map(dcBaseCostFirst -> dcBaseCostFirst.getDcBaseSku().map(DcBaseSku::getWeight).orElse(BigDecimal.ZERO) BigDecimal totalWeight = dcBaseCostFirstGroup.stream().map(dcBaseCostFirst -> dcBaseCostFirst.getDcBaseSku().map(DcBaseSku::getWeight).orElse(BigDecimal.ZERO)
.multiply(new BigDecimal(dcBaseCostFirst.getQuantity() == null ? 0 : dcBaseCostFirst.getQuantity()))) .multiply(new BigDecimal(dcBaseCostFirst.getQuantity() == null ? 0 : dcBaseCostFirst.getQuantity())))
...@@ -101,52 +197,14 @@ public class CalculateCostFirstJob extends PointJob { ...@@ -101,52 +197,14 @@ public class CalculateCostFirstJob extends PointJob {
} }
List<DcMidCostFirstOrder> dcMidCostFirstOrderGroup = dcBaseCostFirstGroup
.stream()
.map(dcBaseCostFirst -> {
BigDecimal skuCostFirst = dcBaseCostFirst.getCostFirst().multiply(dcBaseCostFirst.getSkuWeightRatio()).setScale(3, RoundingMode.HALF_EVEN);
DcMidCostFirstOrder dcMidCostFirstOrder = new DcMidCostFirstOrder();
dcMidCostFirstOrder.setBailunSku(dcBaseCostFirst.getBailunSku());
dcMidCostFirstOrder.setWarehouseCode(dcBaseCostFirst.getWarehouseCode());
dcMidCostFirstOrder.setChannelOrderId(dcBaseCostFirst.getChannelOrderId());
dcMidCostFirstOrder.setTransferOrderId(dcBaseCostFirst.getTransferOrderId());
dcMidCostFirstOrder.setQuantity(dcBaseCostFirst.getQuantity());
dcMidCostFirstOrder.setBoxId(dcBaseCostFirst.getBoxId());
dcMidCostFirstOrder.setWeightRatio(dcBaseCostFirst.getSkuWeightRatio());
dcMidCostFirstOrder.setCostFirst(skuCostFirst);
dcMidCostFirstOrder.setCompanyId(dcBaseCostFirst.getCompanyId());
dcMidCostFirstOrder.setHasCalculation(false);
return dcMidCostFirstOrder;
}).collect(Collectors.toList());
return dcMidCostFirstOrderGroup;
})
.flatMap(List::stream)
.collect(Collectors.toList());
dcMidCostFirstOrderMapper.upsertBatch(dcMidCostFirstOrderList);
}
jobPointLog.setPageIndex(jobPointLog.getPageIndex() + 1);
}
while (jobPointLog.getPageIndex() <= totalPage);
jobPointLog.setPageIndex(0);
} catch (Exception e) {
throw new RuntimeException("任务失败", e);
}
} }
private int getChannelOrderPage(int countChannelOrder, JobPointLog jobPointLog) { private int getTotalPage(int count, int pageSize) {
if (countChannelOrder % jobPointLog.getPageSize() == 0) { if (count % pageSize == 0) {
return countChannelOrder / jobPointLog.getPageSize(); return count / pageSize;
} }
return countChannelOrder / jobPointLog.getPageSize() + 1; return count / pageSize + 1;
} }
} }
...@@ -2,7 +2,6 @@ import com.bailuntec.domain.constant.Constant; ...@@ -2,7 +2,6 @@ import com.bailuntec.domain.constant.Constant;
import com.bailuntec.domain.entity.DcBaseSku; import com.bailuntec.domain.entity.DcBaseSku;
import com.bailuntec.domain.entity.DcMidCostFirst; import com.bailuntec.domain.entity.DcMidCostFirst;
import com.bailuntec.domain.entity.DcMidCostFirstConfig; import com.bailuntec.domain.entity.DcMidCostFirstConfig;
import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.domain.example.DcBaseSkuExample; import com.bailuntec.domain.example.DcBaseSkuExample;
import com.bailuntec.domain.example.DcMidCostFirstExample; import com.bailuntec.domain.example.DcMidCostFirstExample;
import com.bailuntec.domain.pojo.MidCostFirst; import com.bailuntec.domain.pojo.MidCostFirst;
...@@ -37,7 +36,7 @@ public class CostFirstTest { ...@@ -37,7 +36,7 @@ public class CostFirstTest {
@Test @Test
public void test() { public void test() {
CalculateCostFirstJob costFirstJob = new CalculateCostFirstJob(); CalculateCostFirstJob costFirstJob = new CalculateCostFirstJob();
costFirstJob.executeJob(null, new JobPointLog("dc-mid-calculate-cost-first", 1, 100, null, null, null, null)); costFirstJob.execute(null);
} }
@Test @Test
......
...@@ -20,6 +20,6 @@ class CalculateCostFirstJobTest { ...@@ -20,6 +20,6 @@ class CalculateCostFirstJobTest {
JobPointLog jobPointLog = new JobPointLog(); JobPointLog jobPointLog = new JobPointLog();
jobPointLog.setPageSize(1000); jobPointLog.setPageSize(1000);
jobPointLog.setPageIndex(1); jobPointLog.setPageIndex(1);
calculateCostFirstJob.executeJob(null, jobPointLog); calculateCostFirstJob.execute(null);
} }
} }
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