Commit 19303a6b by huluobin

头程

parent 21179bcd
package com.bailuntec;
import com.alibaba.druid.pool.DruidDataSource;
import com.bailuntec.listener.SyncCostFirstJobListener;
import com.bailuntec.job.SyncCostFirstJob;
import com.bailuntec.listener.SyncCostFirstJobListener;
import com.bailuntec.utils.PropertiesUtil;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
......@@ -24,26 +24,42 @@ public class Application {
private static final String EVENT_RDB_STORAGE_URL = propertiesUtil.getPropertyAsString("EVENT_RDB_STORAGE_URL");
private static final String EVENT_RDB_STORAGE_USERNAME = propertiesUtil.getPropertyAsString("EVENT_RDB_STORAGE_USERNAME");
private static final String EVENT_RDB_STORAGE_PASSWORD = propertiesUtil.getPropertyAsString("EVENT_RDB_STORAGE_PASSWORD");
public static void main(String[] args) {
new JobScheduler(createRegistryCenter(), createJobConfiguration(),createJobEventConfiguration(), new SyncCostFirstJobListener()).init();
new JobScheduler(createRegistryCenter(), createJobConfiguration(), createJobEventConfiguration(), new SyncCostFirstJobListener()).init();
new JobScheduler(createRegistryCenter(), createJobConfiguration2(), createJobEventConfiguration()).init();
}
private static CoordinatorRegistryCenter createRegistryCenter() {
CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration(propertiesUtil.getPropertyAsString("ZOOKEEPER_SERVER"), propertiesUtil.getPropertyAsString("NAME_SPACE")));
CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration(propertiesUtil.getPropertyAsString("ZOOKEEPER_SERVER"), propertiesUtil.getPropertyAsString("NAME_SPACE")));
regCenter.init();
return regCenter;
}
private static LiteJobConfiguration createJobConfiguration() {
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(propertiesUtil.getPropertyAsString("JOB_NAME"), propertiesUtil.getPropertyAsString("JOB_CRON"), propertiesUtil.getPropertyAsInt("SHARDING_TOTAL_COUNT")).build();
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(
propertiesUtil.getPropertyAsString("JOB_NAME"),
propertiesUtil.getPropertyAsString("JOB_CRON"),
propertiesUtil.getPropertyAsInt("SHARDING_TOTAL_COUNT"))
.build();
SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, SyncCostFirstJob.class.getCanonicalName());
return LiteJobConfiguration.newBuilder(simpleJobConfig).build();
}
private static LiteJobConfiguration createJobConfiguration2() {
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(
propertiesUtil.getPropertyAsString("COST_FIRST_FINISH_JOB_NAME"),
propertiesUtil.getPropertyAsString("COST_FIRST_FINISH_JOB_CRON"),
propertiesUtil.getPropertyAsInt("SHARDING_TOTAL_COUNT"))
.build();
SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, SyncCostFirstJob.class.getCanonicalName());
LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build();
return simpleJobRootConfig;
}
private static JobEventConfiguration createJobEventConfiguration() {
JobEventConfiguration jobEventRdbConfig = new JobEventRdbConfiguration(setUpEventTraceDataSource());
return jobEventRdbConfig;
return new JobEventRdbConfiguration(setUpEventTraceDataSource());
}
private static DataSource setUpEventTraceDataSource() {
......
package com.bailuntec.domain.pojo;
package com.bailuntec.domain.pojo.costfirst;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
......@@ -11,33 +11,51 @@ import java.util.List;
public class CostFirstData {
@JSONField(name = "channelOrderNo")
private String channelOrderId;
@JSONField(name = "orderCode")
private String transferOrderId;
@JSONField(name = "id")
private Integer channelId;
@JSONField(name = "boxCode")
private String boxId;
@JSONField(name = "wareCode")
private String warehouseCode;
private List<CostFirstSku> skus;
//燃油附加费
@JSONField(name = "fuelFee")
private BigDecimal costFuel;
//原始重量邮费
@JSONField(name = "weightFee")
private BigDecimal costWeight;
//清关费
@JSONField(name = "customsClearanceFee")
private BigDecimal costCustomsClearance;
//关税预付
@JSONField(name = "dutyFee")
private BigDecimal costDuty;
//报关费
@JSONField(name = "clearanceGoodsFee")
private BigDecimal costGoodsClearance;
//总费用
@JSONField(name = "moneyRMB")
private BigDecimal costFirst;
@JSONField(name = "operationTime")
private LocalDateTime operationTime;
@JSONField(name = "stateId")
private Integer stateId;
@JSONField(name = "stateName")
private String stateName;
}
package com.bailuntec.domain.pojo;
package com.bailuntec.domain.pojo.costfirst;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class CostFirstSku {
@JSONField(name = "sku")
private String bailunSku;
@JSONField(name = "count")
private Integer quantity;
}
package com.bailuntec.domain.pojo.costfirstfinish;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class CostFirstFinishData {
@JSONField(name = "channelOrderNo")
private String channelOrderId;
@JSONField(name = "orderCode")
private String transferOrderId;
@JSONField(name = "id")
private Integer channelId;
@JSONField(name = "boxCode")
private String boxId;
@JSONField(name = "wareCode")
private String warehouseCode;
private List<CostFirstFinishSku> skus;
//燃油附加费
@JSONField(name = "fuelFee")
private BigDecimal costFuel;
//原始重量邮费
@JSONField(name = "weightFee")
private BigDecimal costWeight;
//清关费
@JSONField(name = "customsClearanceFee")
private BigDecimal costCustomsClearance;
//关税预付
@JSONField(name = "dutyFee")
private BigDecimal costDuty;
//报关费
@JSONField(name = "clearanceGoodsFee")
private BigDecimal costGoodsClearance;
//总费用
@JSONField(name = "moneyRMB")
private BigDecimal costFirst;
@JSONField(name = "operationTime")
private LocalDateTime operationTime;
@JSONField(name = "stateId")
private Integer stateId;
@JSONField(name = "stateName")
private String stateName;
}
package com.bailuntec.domain.pojo.costfirstfinish;
import lombok.Data;
import java.util.List;
@Data
public class CostFirstFinishResult {
private Integer currentPage;
private Integer pageCount;
private List<CostFirstFinishData> data;
}
package com.bailuntec.domain.pojo.costfirstfinish;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class CostFirstFinishSku {
@JSONField(name = "sku")
private String bailunSku;
@JSONField(name = "count")
private Integer quantity;
}
......@@ -4,9 +4,9 @@ import com.alibaba.fastjson.JSON;
import com.bailuntec.domain.entity.DcBaseCostFirst;
import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.domain.example.DcBaseCostFirstExample;
import com.bailuntec.domain.pojo.CostFirstData;
import com.bailuntec.domain.pojo.CostFirstResult;
import com.bailuntec.domain.pojo.CostFirstSku;
import com.bailuntec.domain.pojo.costfirst.CostFirstData;
import com.bailuntec.domain.pojo.costfirst.CostFirstResult;
import com.bailuntec.domain.pojo.costfirst.CostFirstSku;
import com.bailuntec.mapper.DcBaseCostFirstMapper;
import com.bailuntec.mapper.JobPointLogMapper;
import com.bailuntec.support.PointJob;
......@@ -60,10 +60,11 @@ public class SyncCostFirstJob extends PointJob {
CostFirstResult costFirstResult = JSON.parseObject(result, CostFirstResult.class);
log.info("序列化头程费用头程费用 end");
log.info("头程费用当前请求页数 :{}", jobPointLog.getPageIndex());
log.info("头程费用当前总页数 :{}", costFirstResult.getPageCount());
log.info("头程费用当前页码大小 :{}", costFirstResult.getData().size());
log.info("头程费用当前请求页数 :{} \n 头程费用当前总页数 :{} \n 头程费用当前页码大小 :{} \n",
jobPointLog.getPageIndex(),
costFirstResult.getPageCount(),
costFirstResult.getData().size());
totalPage = costFirstResult.getPageCount();
if (costFirstResult.getData() != null && costFirstResult.getData().size() > 0) {
handleCostFirstData(costFirstResult.getData());
......@@ -139,7 +140,6 @@ public class SyncCostFirstJob extends PointJob {
}
});
} catch (RuntimeException e) {
// throw new RuntimeException("MYBATIS操作DB更新插入数据失败", e);
log.error(e.getMessage(), e);
} finally {
SessionUtil.closeSession();
......
COST_FIRST_URL=http://api.wms.bailuntec.com/api/services/app/AllotBoxService/DateCenterGetBoxCosts
\ No newline at end of file
COST_FIRST_URL=http://api.wms.bailuntec.com/api/services/app/AllotBoxService/DateCenterGetBoxCosts
COST_FIRST_FINISH_URL=http://api.wms.bailuntec.com/api/services/app/AllotBoxService/DateCenterGetBoxCostsByCompleteTime
......@@ -10,5 +10,9 @@ EVENT_RDB_STORAGE_PASSWORD=#7kfnymAM$Y9-Ntf
ZOOKEEPER_SERVER=172.31.255.120:2181
NAME_SPACE=data-center
JOB_NAME=base-sync-cost-first
JOB_CRON=0 10 0/1 * * ? *
JOB_CRON=0 10 0/1 * * ? *
COST_FIRST_FINISH_JOB_NAME=base-sync-cost-first-finish
COST_FIRST_FINISH_JOB_CRON=0 10 0/1 * * ? *
SHARDING_TOTAL_COUNT=1
package com.bailuntec.job;
import com.bailuntec.domain.entity.JobPointLog;
import org.junit.jupiter.api.Test;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/9/2 11:54 上午
*/
public class SyncCostFirstFinishJobTest {
@Test
public void test() {
SyncCostFirstFinishJob syncCostFirstFinishJob = new SyncCostFirstFinishJob();
JobPointLog jobPointLog = new JobPointLog("base-sync-cost-first-finish", 1, 1000, 1, 1,
LocalDateTime.of(2020, 8, 1, 0, 0, 0),
LocalDateTime.of(2020, 9, 2, 0, 0, 0));
syncCostFirstFinishJob.executeJob(null, jobPointLog);
}
}
......@@ -128,6 +128,10 @@
<version>${commons-lang3.verson}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
</dependencies>
......
......@@ -67,6 +67,8 @@
t1.daily_weighted_sales &gt;= t7.sales_lower_limit or t1.daily_weighted_sales is null or
length(trim(t1.daily_weighted_sales)) = 0))
where t5.id is not null
# and t1.warehouse_code = 'GB4PXBL'
# and t1.bailun_sku = '945104601'
ORDER BY t5.`level` desc) aaa
GROUP BY bailun_sku, warehouse_code;
</select>
......
package com.bailuntec.mapper;
import com.bailuntec.domain.entity.DcBaseCostFirstFinish;
import com.bailuntec.domain.example.DcBaseCostFirstFinishExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface DcBaseCostFirstFinishMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
*/
long countByExample(DcBaseCostFirstFinishExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
*/
int deleteByExample(DcBaseCostFirstFinishExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
*/
int deleteByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
*/
int insert(DcBaseCostFirstFinish record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
*/
int insertSelective(DcBaseCostFirstFinish record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
DcBaseCostFirstFinish selectOneByExample(DcBaseCostFirstFinishExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
*/
List<DcBaseCostFirstFinish> selectByExample(DcBaseCostFirstFinishExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
*/
DcBaseCostFirstFinish selectByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
*/
int updateByExampleSelective(@Param("record") DcBaseCostFirstFinish record, @Param("example") DcBaseCostFirstFinishExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
*/
int updateByExample(@Param("record") DcBaseCostFirstFinish record, @Param("example") DcBaseCostFirstFinishExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
*/
int updateByPrimaryKeySelective(DcBaseCostFirstFinish record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
*/
int updateByPrimaryKey(DcBaseCostFirstFinish record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
int upsert(DcBaseCostFirstFinish record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_cost_first_finish
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
int upsertSelective(DcBaseCostFirstFinish record);
}
\ No newline at end of file
......@@ -126,10 +126,13 @@ public interface DcBaseCostFirstMapper {
List<CostFirstOrder> listChannelOrderId(@Param("v1") Integer v1, @Param("v2") Integer v2);
int countChannelOrder();
int updateHasCalculation(CostFirstOrder costFirstOrder);
void upsertBatch(@Param("lists") List<DcBaseCostFirst> dcBaseCostFirstList);
/**
......
......@@ -840,7 +840,7 @@
SELECT channel_order_id, transfer_order_id, box_id, warehouse_code
FROM `dc_base_cost_first`
WHERE cost_first > 0
GROUP BY channel_order_id, transfer_order_id, box_id, warehouse_code
GROUP BY channel_order_id, transfer_order_id, box_id, warehouse_code
ORDER BY operation_time desc
limit #{pageStart}, #{pageOffset}) t1
LEFT JOIN dc_base_cost_first t2
......
......@@ -145,9 +145,9 @@ public interface DcBaseOmsSkuMapper {
* @param upperTime upperTime
* @return sku销量
*/
Integer omsSkuSellerCount(@Param("lowerTime") LocalDateTime lowerTime,
@Param("upperTime") LocalDateTime upperTime,
@Param("bailunSku") String bailunSku,
@Param("warehouseCode") String warehouseCode,
@Param("days") Integer days);
BigDecimal omsSkuSellerCount(@Param("lowerTime") LocalDateTime lowerTime,
@Param("upperTime") LocalDateTime upperTime,
@Param("bailunSku") String bailunSku,
@Param("warehouseCode") String warehouseCode,
@Param("days") Integer days);
}
......@@ -3710,7 +3710,7 @@
limit 1
</select>
<select id="omsSkuSellerCount" resultType="java.lang.Integer">
<select id="omsSkuSellerCount" resultType="java.math.BigDecimal">
select (select coalesce(sum(bailun_sku_quantity_ordered), 0)
from dc_base_oms_sku
where paid_time &gt;= #{lowerTime}
......
table-name=dc_base_finance_amazon_ad_product
table-name=dc_daily_sales
package excel;
import com.alibaba.excel.EasyExcel;
import excel.costfirst.CostFirst;
import excel.costfirst.CostFirstListener;
import excel.costfirstfba.CostFirstFba;
import excel.costfirstfba.CostFirstFbaListener;
import org.junit.jupiter.api.Test;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/9/1 5:34 下午
*/
public class ExcelTest {
@Test
public void importSku() {
String filePath = "/Users/huluobin/Library/Containers/com.kingsoft.wpsoffice.mac/Data/Library/Application Support/Kingsoft/WPS Cloud Files/userdata/qing/filecache/山渐青的云文档/头程费配置0920.xlsx";
String filePath2 = "/Users/huluobin/Library/Containers/com.tencent.WeWorkMac/Data/Library/Application Support/WXWork/Data/1688853793439460/Cache/File/2020-09/fba仓库名称和账号对应关系(1)-头程初始值取值.xlsx";
EasyExcel.read(filePath, CostFirst.class, new CostFirstListener()).sheet().doRead();
EasyExcel.read(filePath2, CostFirstFba.class, new CostFirstFbaListener()).sheet().doRead();
}
}
package excel.costfirst;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/9/1 4:03 下午
*/
@Data
public class CostFirst {
public static final String TYPE_1 = "不用初始值,都动态";
public static final String TYPE_2 = "初始值 头程按照10/kg";
public static final String TYPE_3 = "广州仓的这些都不用算头程";
public static final String TYPE_4 = "国内仓无需设置";
public static final String TYPE_5 = "设置初始值1kg/10元-然后都动态";
public static final String TYPE_6 = "这些仓库无需设置";
public static final Map<String, Integer> map = new HashMap<>();
static {
map.put("不用初始值,都动态", 1);
map.put("初始值 头程按照10/kg", 2);
map.put("广州仓的这些都不用算头程", 3);
map.put("国内仓无需设置", 4);
map.put("设置初始值1kg/10元-然后都动态", 5);
map.put("这些仓库无需设置", 6);
}
@ExcelProperty("bailun_sku")
private String bailunSku;
@ExcelProperty("sku标题")
private String skuTitle;
@ExcelProperty("采购员")
private String purchaseUser;
@ExcelProperty("仓库编码")
private String warehouseCode;
@ExcelProperty("仓库名称")
private String warehouseName;
@ExcelProperty("每个sku的头程费")
private BigDecimal cost;
@ExcelProperty("type")
private String type;
}
package excel.costfirst;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.bailuntec.domain.entity.DcBaseStock;
import com.bailuntec.domain.entity.DcMidCostFirst;
import com.bailuntec.domain.example.DcBaseStockExample;
import com.bailuntec.mapper.DcBaseStockMapper;
import com.bailuntec.mapper.DcMidCostFirstMapper;
import com.bailuntec.utils.SessionUtil;
import com.google.common.collect.Lists;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/9/1 4:46 下午
*/
public class CostFirstListener extends AnalysisEventListener<CostFirst> {
private static final Logger LOGGER = LoggerFactory.getLogger(CostFirstListener.class);
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 1000;
List<CostFirst> list = new ArrayList<>();
@Override
public void invoke(CostFirst data, AnalysisContext context) {
LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data));
list.add(data);
if (list.size() >= BATCH_COUNT) {
syncData();
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
syncData();
LOGGER.info("所有数据解析完成!");
}
/**
* 加上存储数据库
*/
private void syncData() {
LOGGER.info("{}条数据,开始存储数据库!", list.size());
SqlSession sqlSession = SessionUtil.getFactory().openSession(true);
try {
DcMidCostFirstMapper dcMidCostFirstMapper = sqlSession.getMapper(DcMidCostFirstMapper.class);
DcBaseStockMapper dcBaseStockMapper = sqlSession.getMapper(DcBaseStockMapper.class);
List<DcMidCostFirst> dcMidCostFirstList =
list.stream().map(costFirst -> {
DcMidCostFirst dcMidCostFirst = new DcMidCostFirst();
dcMidCostFirst.setHasConfig(false);
dcMidCostFirst.setCompanyId(0);
if (Lists.newArrayList(1, 5).contains(CostFirst.map.get(costFirst.getType()))) {
dcMidCostFirst.setHasCalculation(true);
} else {
dcMidCostFirst.setHasCalculation(false);
}
dcMidCostFirst.setCostCount(0);
dcMidCostFirst.setWarehouseCode(costFirst.getWarehouseCode());
dcMidCostFirst.setBailunSku(costFirst.getBailunSku());
dcMidCostFirst.setCostFirst(costFirst.getCost());
return dcMidCostFirst;
})
.collect(Collectors.toList());
dcMidCostFirstMapper.upsertBatch(dcMidCostFirstList);
} finally {
sqlSession.close();
}
LOGGER.info("存储数据库成功!");
}
}
package excel.costfirstfba;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/9/1 4:13 下午
*/
@Data
public class CostFirstFba {
@ExcelProperty("帐号名称")
private String accountName;
@ExcelProperty("站点")
private String site;
@ExcelProperty("仓库名称")
private String warehouseName;
@ExcelProperty("仓库sku")
private String sku;
@ExcelProperty("调拨初始值/kg")
private BigDecimal initValue;
}
package excel.costfirstfba;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.bailuntec.domain.entity.DcBaseWarehouse;
import com.bailuntec.domain.entity.DcMidCostFirst;
import com.bailuntec.domain.example.DcBaseWarehouseExample;
import com.bailuntec.mapper.DcBaseWarehouseMapper;
import com.bailuntec.mapper.DcMidCostFirstMapper;
import com.bailuntec.utils.SessionUtil;
import excel.costfirst.CostFirstListener;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/9/1 5:37 下午
*/
public class CostFirstFbaListener extends AnalysisEventListener<CostFirstFba> {
private static final Logger LOGGER = LoggerFactory.getLogger(CostFirstListener.class);
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 1000;
List<CostFirstFba> list = new ArrayList<>();
@Override
public void invoke(CostFirstFba data, AnalysisContext context) {
LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data));
list.add(data);
if (list.size() >= BATCH_COUNT) {
syncData();
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
syncData();
LOGGER.info("所有数据解析完成!");
}
/**
* 加上存储数据库
*/
private void syncData() {
LOGGER.info("{}条数据,开始存储数据库!", list.size());
SqlSession sqlSession = SessionUtil.getFactory().openSession(true);
try {
DcMidCostFirstMapper dcMidCostFirstMapper = sqlSession.getMapper(DcMidCostFirstMapper.class);
DcBaseWarehouseMapper dcBaseWarehouseMapper = sqlSession.getMapper(DcBaseWarehouseMapper.class);
List<String> warehouseNames = list.stream().map(CostFirstFba::getWarehouseName).distinct().collect(Collectors.toList());
if (warehouseNames.contains("美国FBA-04")) {
warehouseNames.add("美国FBA-04仓");
}
List<DcBaseWarehouse> dcBaseWarehouseList = dcBaseWarehouseMapper.selectByExample(DcBaseWarehouseExample.newAndCreateCriteria()
.andWarehouseNameIn(warehouseNames)
.example());
Map<String, DcBaseWarehouse> map = dcBaseWarehouseList.stream().collect(Collectors.toMap(DcBaseWarehouse::getWarehouseName, dcBaseWarehouse -> dcBaseWarehouse));
List<DcMidCostFirst> dcMidCostFirstList =
list.stream().map(costFirstFba -> {
try {
DcMidCostFirst dcMidCostFirst = new DcMidCostFirst();
dcMidCostFirst.setHasConfig(true);
dcMidCostFirst.setCompanyId(0);
dcMidCostFirst.setHasCalculation(true);
dcMidCostFirst.setCostCount(0);
dcMidCostFirst.setWarehouseCode(map.get(costFirstFba.getWarehouseName()).getWarehouseCode());
dcMidCostFirst.setBailunSku(costFirstFba.getSku());
dcMidCostFirst.setCostFirst(costFirstFba.getInitValue());
return dcMidCostFirst;
} catch (Exception e) {
LOGGER.error(costFirstFba.getWarehouseName());
return null;
}
})
.filter(Objects::nonNull)
.collect(Collectors.toList());
dcMidCostFirstMapper.upsertBatch(dcMidCostFirstList);
} finally {
sqlSession.close();
}
LOGGER.info("存储数据库成功!");
}
}
......@@ -55,6 +55,7 @@
<freemarker.version>2.3.28</freemarker.version>
<curator.version>2.10.0</curator.version>
<commons-lang3.verson>3.10</commons-lang3.verson>
<easyexcel.version>2.1.1</easyexcel.version>
</properties>
......@@ -289,6 +290,13 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
......
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