Commit 19303a6b by huluobin

头程

parent 21179bcd
package com.bailuntec; package com.bailuntec;
import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSource;
import com.bailuntec.listener.SyncCostFirstJobListener;
import com.bailuntec.job.SyncCostFirstJob; import com.bailuntec.job.SyncCostFirstJob;
import com.bailuntec.listener.SyncCostFirstJobListener;
import com.bailuntec.utils.PropertiesUtil; import com.bailuntec.utils.PropertiesUtil;
import com.dangdang.ddframe.job.config.JobCoreConfiguration; import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration; import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
...@@ -24,8 +24,10 @@ public class Application { ...@@ -24,8 +24,10 @@ public class Application {
private static final String EVENT_RDB_STORAGE_URL = propertiesUtil.getPropertyAsString("EVENT_RDB_STORAGE_URL"); 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_USERNAME = propertiesUtil.getPropertyAsString("EVENT_RDB_STORAGE_USERNAME");
private static final String EVENT_RDB_STORAGE_PASSWORD = propertiesUtil.getPropertyAsString("EVENT_RDB_STORAGE_PASSWORD"); private static final String EVENT_RDB_STORAGE_PASSWORD = propertiesUtil.getPropertyAsString("EVENT_RDB_STORAGE_PASSWORD");
public static void main(String[] args) { 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() { private static CoordinatorRegistryCenter createRegistryCenter() {
...@@ -35,15 +37,29 @@ public class Application { ...@@ -35,15 +37,29 @@ public class Application {
} }
private static LiteJobConfiguration createJobConfiguration() { 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()); SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, SyncCostFirstJob.class.getCanonicalName());
LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build(); LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build();
return simpleJobRootConfig; return simpleJobRootConfig;
} }
private static JobEventConfiguration createJobEventConfiguration() { private static JobEventConfiguration createJobEventConfiguration() {
JobEventConfiguration jobEventRdbConfig = new JobEventRdbConfiguration(setUpEventTraceDataSource()); return new JobEventRdbConfiguration(setUpEventTraceDataSource());
return jobEventRdbConfig;
} }
private static DataSource setUpEventTraceDataSource() { private static DataSource setUpEventTraceDataSource() {
......
package com.bailuntec.domain.pojo; package com.bailuntec.domain.pojo.costfirst;
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data; import lombok.Data;
...@@ -11,33 +11,51 @@ import java.util.List; ...@@ -11,33 +11,51 @@ import java.util.List;
public class CostFirstData { public class CostFirstData {
@JSONField(name = "channelOrderNo") @JSONField(name = "channelOrderNo")
private String channelOrderId; private String channelOrderId;
@JSONField(name = "orderCode") @JSONField(name = "orderCode")
private String transferOrderId; private String transferOrderId;
@JSONField(name = "id") @JSONField(name = "id")
private Integer channelId; private Integer channelId;
@JSONField(name = "boxCode") @JSONField(name = "boxCode")
private String boxId; private String boxId;
@JSONField(name = "wareCode") @JSONField(name = "wareCode")
private String warehouseCode; private String warehouseCode;
private List<CostFirstSku> skus; private List<CostFirstSku> skus;
//燃油附加费 //燃油附加费
@JSONField(name = "fuelFee") @JSONField(name = "fuelFee")
private BigDecimal costFuel; private BigDecimal costFuel;
//原始重量邮费 //原始重量邮费
@JSONField(name = "weightFee") @JSONField(name = "weightFee")
private BigDecimal costWeight; private BigDecimal costWeight;
//清关费 //清关费
@JSONField(name = "customsClearanceFee") @JSONField(name = "customsClearanceFee")
private BigDecimal costCustomsClearance; private BigDecimal costCustomsClearance;
//关税预付 //关税预付
@JSONField(name = "dutyFee") @JSONField(name = "dutyFee")
private BigDecimal costDuty; private BigDecimal costDuty;
//报关费 //报关费
@JSONField(name = "clearanceGoodsFee") @JSONField(name = "clearanceGoodsFee")
private BigDecimal costGoodsClearance; private BigDecimal costGoodsClearance;
//总费用 //总费用
@JSONField(name = "moneyRMB") @JSONField(name = "moneyRMB")
private BigDecimal costFirst; private BigDecimal costFirst;
@JSONField(name = "operationTime") @JSONField(name = "operationTime")
private LocalDateTime 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 com.alibaba.fastjson.annotation.JSONField;
import lombok.Data; import lombok.Data;
@Data @Data
public class CostFirstSku { public class CostFirstSku {
@JSONField(name = "sku") @JSONField(name = "sku")
private String bailunSku; private String bailunSku;
@JSONField(name = "count") @JSONField(name = "count")
private Integer quantity; 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; ...@@ -4,9 +4,9 @@ import com.alibaba.fastjson.JSON;
import com.bailuntec.domain.entity.DcBaseCostFirst; import com.bailuntec.domain.entity.DcBaseCostFirst;
import com.bailuntec.domain.entity.JobPointLog; import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.domain.example.DcBaseCostFirstExample; import com.bailuntec.domain.example.DcBaseCostFirstExample;
import com.bailuntec.domain.pojo.CostFirstData; import com.bailuntec.domain.pojo.costfirst.CostFirstData;
import com.bailuntec.domain.pojo.CostFirstResult; import com.bailuntec.domain.pojo.costfirst.CostFirstResult;
import com.bailuntec.domain.pojo.CostFirstSku; import com.bailuntec.domain.pojo.costfirst.CostFirstSku;
import com.bailuntec.mapper.DcBaseCostFirstMapper; import com.bailuntec.mapper.DcBaseCostFirstMapper;
import com.bailuntec.mapper.JobPointLogMapper; import com.bailuntec.mapper.JobPointLogMapper;
import com.bailuntec.support.PointJob; import com.bailuntec.support.PointJob;
...@@ -60,9 +60,10 @@ public class SyncCostFirstJob extends PointJob { ...@@ -60,9 +60,10 @@ public class SyncCostFirstJob extends PointJob {
CostFirstResult costFirstResult = JSON.parseObject(result, CostFirstResult.class); CostFirstResult costFirstResult = JSON.parseObject(result, CostFirstResult.class);
log.info("序列化头程费用头程费用 end"); log.info("序列化头程费用头程费用 end");
log.info("头程费用当前请求页数 :{}", jobPointLog.getPageIndex()); log.info("头程费用当前请求页数 :{} \n 头程费用当前总页数 :{} \n 头程费用当前页码大小 :{} \n",
log.info("头程费用当前总页数 :{}", costFirstResult.getPageCount()); jobPointLog.getPageIndex(),
log.info("头程费用当前页码大小 :{}", costFirstResult.getData().size()); costFirstResult.getPageCount(),
costFirstResult.getData().size());
totalPage = costFirstResult.getPageCount(); totalPage = costFirstResult.getPageCount();
if (costFirstResult.getData() != null && costFirstResult.getData().size() > 0) { if (costFirstResult.getData() != null && costFirstResult.getData().size() > 0) {
...@@ -139,7 +140,6 @@ public class SyncCostFirstJob extends PointJob { ...@@ -139,7 +140,6 @@ public class SyncCostFirstJob extends PointJob {
} }
}); });
} catch (RuntimeException e) { } catch (RuntimeException e) {
// throw new RuntimeException("MYBATIS操作DB更新插入数据失败", e);
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} finally { } finally {
SessionUtil.closeSession(); SessionUtil.closeSession();
......
COST_FIRST_URL=http://api.wms.bailuntec.com/api/services/app/AllotBoxService/DateCenterGetBoxCosts 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
...@@ -11,4 +11,8 @@ ZOOKEEPER_SERVER=172.31.255.120:2181 ...@@ -11,4 +11,8 @@ ZOOKEEPER_SERVER=172.31.255.120:2181
NAME_SPACE=data-center NAME_SPACE=data-center
JOB_NAME=base-sync-cost-first 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 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 @@ ...@@ -128,6 +128,10 @@
<version>${commons-lang3.verson}</version> <version>${commons-lang3.verson}</version>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
</dependencies> </dependencies>
......
...@@ -67,6 +67,8 @@ ...@@ -67,6 +67,8 @@
t1.daily_weighted_sales &gt;= t7.sales_lower_limit or t1.daily_weighted_sales is null or t1.daily_weighted_sales &gt;= t7.sales_lower_limit or t1.daily_weighted_sales is null or
length(trim(t1.daily_weighted_sales)) = 0)) length(trim(t1.daily_weighted_sales)) = 0))
where t5.id is not null where t5.id is not null
# and t1.warehouse_code = 'GB4PXBL'
# and t1.bailun_sku = '945104601'
ORDER BY t5.`level` desc) aaa ORDER BY t5.`level` desc) aaa
GROUP BY bailun_sku, warehouse_code; GROUP BY bailun_sku, warehouse_code;
</select> </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 { ...@@ -126,10 +126,13 @@ public interface DcBaseCostFirstMapper {
List<CostFirstOrder> listChannelOrderId(@Param("v1") Integer v1, @Param("v2") Integer v2); List<CostFirstOrder> listChannelOrderId(@Param("v1") Integer v1, @Param("v2") Integer v2);
int countChannelOrder(); int countChannelOrder();
int updateHasCalculation(CostFirstOrder costFirstOrder); int updateHasCalculation(CostFirstOrder costFirstOrder);
void upsertBatch(@Param("lists") List<DcBaseCostFirst> dcBaseCostFirstList); void upsertBatch(@Param("lists") List<DcBaseCostFirst> dcBaseCostFirstList);
/** /**
......
...@@ -145,7 +145,7 @@ public interface DcBaseOmsSkuMapper { ...@@ -145,7 +145,7 @@ public interface DcBaseOmsSkuMapper {
* @param upperTime upperTime * @param upperTime upperTime
* @return sku销量 * @return sku销量
*/ */
Integer omsSkuSellerCount(@Param("lowerTime") LocalDateTime lowerTime, BigDecimal omsSkuSellerCount(@Param("lowerTime") LocalDateTime lowerTime,
@Param("upperTime") LocalDateTime upperTime, @Param("upperTime") LocalDateTime upperTime,
@Param("bailunSku") String bailunSku, @Param("bailunSku") String bailunSku,
@Param("warehouseCode") String warehouseCode, @Param("warehouseCode") String warehouseCode,
......
...@@ -3710,7 +3710,7 @@ ...@@ -3710,7 +3710,7 @@
limit 1 limit 1
</select> </select>
<select id="omsSkuSellerCount" resultType="java.lang.Integer"> <select id="omsSkuSellerCount" resultType="java.math.BigDecimal">
select (select coalesce(sum(bailun_sku_quantity_ordered), 0) select (select coalesce(sum(bailun_sku_quantity_ordered), 0)
from dc_base_oms_sku from dc_base_oms_sku
where paid_time &gt;= #{lowerTime} 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 @@ ...@@ -55,6 +55,7 @@
<freemarker.version>2.3.28</freemarker.version> <freemarker.version>2.3.28</freemarker.version>
<curator.version>2.10.0</curator.version> <curator.version>2.10.0</curator.version>
<commons-lang3.verson>3.10</commons-lang3.verson> <commons-lang3.verson>3.10</commons-lang3.verson>
<easyexcel.version>2.1.1</easyexcel.version>
</properties> </properties>
...@@ -289,6 +290,13 @@ ...@@ -289,6 +290,13 @@
<type>pom</type> <type>pom</type>
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </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