Commit bfa9e6b7 by huluobin

亚马逊广告

parent ce253bdd
......@@ -46,7 +46,7 @@
[Ebay费用开发文档](https://developer.ebay.com/api-docs/developer/analytics/overview.html)
[Amazon广告费用接口文档](https://advertising.amazon.com/API/docs/v2/reference/reports)
[Amazon广告费用接口文档](https://advertising.amazon.com**/API/docs/v2/reference/reports)
### 解释说明
......@@ -107,4 +107,4 @@
|-finance-balance-sheet 资产负债表
|-data-show show-数据价值展现
|-show-auto-turnover 自动周转逻辑
```
\ No newline at end of file
```
......@@ -37,17 +37,25 @@ public class Application {
}
private static LiteJobConfiguration createJobConfiguration1() {
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(propertiesUtil.getPropertyAsString("JOB_NAME_AD_PRODUCT_GENERATE"), propertiesUtil.getPropertyAsString("JOB_CRON_AD_PRODUCT_GENERATE"), propertiesUtil.getPropertyAsInt("SHARDING_TOTAL_COUNT")).build();
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(
propertiesUtil.getPropertyAsString("JOB_NAME_AD_PRODUCT_GENERATE")
, propertiesUtil.getPropertyAsString("JOB_CRON_AD_PRODUCT_GENERATE")
, propertiesUtil.getPropertyAsInt("SHARDING_TOTAL_COUNT"))
.build();
SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, AmazonAdGenerateReportIdJob.class.getCanonicalName());
LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build();
return simpleJobRootConfig;
return LiteJobConfiguration.newBuilder(simpleJobConfig).build();
}
private static LiteJobConfiguration createJobConfiguration2() {
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(propertiesUtil.getPropertyAsString("JOB_NAME_AD_PRODUCT_DOWNLOAD"), propertiesUtil.getPropertyAsString("JOB_CRON_AD_PRODUCT_DOWNLOAD"), propertiesUtil.getPropertyAsInt("SHARDING_TOTAL_COUNT")).build();
JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(
propertiesUtil.getPropertyAsString("JOB_NAME_AD_PRODUCT_DOWNLOAD"),
propertiesUtil.getPropertyAsString("JOB_CRON_AD_PRODUCT_DOWNLOAD"),
propertiesUtil.getPropertyAsInt("SHARDING_TOTAL_COUNT"))
.build();
SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, AmazonAdDownloadReportJob.class.getCanonicalName());
LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build();
return simpleJobRootConfig;
return LiteJobConfiguration.newBuilder(simpleJobConfig).build();
}
private static JobEventConfiguration createJobEventConfiguration() {
......
package com.bailuntec.job;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.util.IOUtils;
import com.bailuntec.domain.entity.DcBaseCompanyAccount;
import com.bailuntec.domain.entity.DcBaseFinanceAmazonAdProduct;
import com.bailuntec.domain.entity.JobAmazonAdLog;
......@@ -31,6 +32,7 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.time.LocalDateTime;
import java.util.List;
import java.util.zip.GZIPInputStream;
......@@ -61,7 +63,7 @@ public class AmazonAdDownloadReportJob implements SimpleJob {
}
}
private void handleReport(JobAmazonAdLog jobAmazonAdLog, AmazonAdAuth amazonAdAuth, String shardParam) {
public void handleReport(JobAmazonAdLog jobAmazonAdLog, AmazonAdAuth amazonAdAuth, String shardParam) {
Response response = null;
GZIPInputStream gzin = null;
Request request = new Request.Builder()
......@@ -76,13 +78,13 @@ public class AmazonAdDownloadReportJob implements SimpleJob {
try {
response = client.newCall(request).execute();
if (response.isSuccessful()) {
//注意这个接口是必须用gzip
gzin = new GZIPInputStream(response.body().byteStream());
log.warn("开始解析账号Id为" + jobAmazonAdLog.getAccountId() + "的Report----" + jobAmazonAdLog.getReportId() + ", 文件大小为" + response.body().contentLength());
Gson gson = new Gson();
Reader reader = new InputStreamReader(response.body().byteStream());
Type type = new TypeToken<List<AmazonAdProduct>>() {
}.getType();
List<AmazonAdProduct> amazonAdProductList = gson.fromJson(new InputStreamReader(response.body().byteStream()), type);
List<AmazonAdProduct> amazonAdProductList = gson.fromJson(new InputStreamReader(gzin), type);
log.warn("账号Id" + jobAmazonAdLog.getAccountId() + "的Report解析完成");
gzin.close();
response.close();
......@@ -137,7 +139,7 @@ public class AmazonAdDownloadReportJob implements SimpleJob {
}
}
private void downloadReport(JobAmazonAdLog jobAmazonAdLog, String shardParam) {
public void downloadReport(JobAmazonAdLog jobAmazonAdLog, String shardParam) {
DcBaseCompanyAccount dcBaseCompanyAccount = getToken(jobAmazonAdLog);
AmazonAdAuth amazonAdAuth = JSON.parseObject(dcBaseCompanyAccount.getAmazonAdAuthJson(), AmazonAdAuth.class);
handleReport(jobAmazonAdLog, amazonAdAuth, shardParam);
......@@ -145,14 +147,22 @@ public class AmazonAdDownloadReportJob implements SimpleJob {
private DcBaseCompanyAccount getToken(JobAmazonAdLog jobAmazonAdLog) {
DcBaseCompanyAccountMapper mapper = SessionUtil.getSession().getMapper(DcBaseCompanyAccountMapper.class);
return mapper.selectOneByExample(DcBaseCompanyAccountExample.newAndCreateCriteria().andCompanyIdEqualTo(jobAmazonAdLog.getCompanyId()).andAccountIdEqualTo(jobAmazonAdLog.getAccountId()).example());
return mapper.selectOneByExample(DcBaseCompanyAccountExample.newAndCreateCriteria()
.andCompanyIdEqualTo(jobAmazonAdLog.getCompanyId())
.andAccountIdEqualTo(jobAmazonAdLog.getAccountId())
.example());
}
private List<JobAmazonAdLog> findJobAmazonAdLogList(ShardingContext shardingContext, int pageSize) {
try {
JobAmazonAdLogMapper mapper = SessionUtil.getSession().getMapper(JobAmazonAdLogMapper.class);
return mapper.selectByExample(JobAmazonAdLogExample.newAndCreateCriteria().andStatusEqualTo(false).andBjModifiedLessThan(LocalDateTime.now().minusMinutes(15)).example().orderBy("id").limit(shardingContext.getShardingItem() * pageSize, pageSize));
return mapper.selectByExample(JobAmazonAdLogExample.newAndCreateCriteria()
.andStatusEqualTo(false)
.andBjModifiedLessThan(LocalDateTime.now().minusMinutes(15))
.example()
.orderBy("id")
.limit(shardingContext.getShardingItem() * pageSize, pageSize));
} catch (Exception e) {
e.printStackTrace();
return null;
......@@ -164,7 +174,8 @@ public class AmazonAdDownloadReportJob implements SimpleJob {
private int countJobAmazonAdLog() {
try {
JobAmazonAdLogMapper mapper = SessionUtil.getSession().getMapper(JobAmazonAdLogMapper.class);
return (int) mapper.countByExample(JobAmazonAdLogExample.newAndCreateCriteria().andStatusEqualTo(false).example());
return (int) mapper.countByExample(JobAmazonAdLogExample.newAndCreateCriteria()
.andStatusEqualTo(false).example());
} catch (Exception e) {
e.printStackTrace();
return 0;
......
......@@ -25,7 +25,6 @@ import okhttp3.*;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
......@@ -38,13 +37,15 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
private final int platformId = 15;
private static final PropertiesUtil propertiesUtil = PropertiesUtil.getInstance("const");
private final OkHttpClient client = OkHttpUtil.getInstance();
@Override
public void executeJob(ShardingContext shardingContext, JobPointLog jobPointLog) {
int totalPage = getCount();
try {
JobAccountLogMapper jobAccountLogMapper = SessionUtil.getSession().getMapper(JobAccountLogMapper.class);
int pageSize = totalPage % shardingContext.getShardingTotalCount() == 0 ? totalPage / shardingContext.getShardingTotalCount() : totalPage / shardingContext.getShardingTotalCount() + 1;
List<JobAccountLog> listByPage = jobAccountLogMapper.getListByPageAmazon(platformId,pageSize * shardingContext.getShardingItem(), pageSize);
List<JobAccountLog> listByPage = jobAccountLogMapper.getListByPageAmazon(platformId, pageSize * shardingContext.getShardingItem(), pageSize);
if (listByPage != null && listByPage.size() > 0) {
for (JobAccountLog jobAccountLog : listByPage) {
if (jobAccountLog.getId() == null) { //Id为null在任务表无记录
......@@ -52,7 +53,7 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
jobAccountLog.setId(null);
}
LocalDateTime localDateTime = jobAccountLog.getStartTime();
for(long i = 10 ; i >= 0; i--) {
for (long i = 10; i >= 0; i--) {
jobAccountLog.setStartTime(localDateTime.minusDays(i));
generateReportId(jobAccountLog);
}
......@@ -60,13 +61,17 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
jobAccountLogMapper.insertSelective(jobAccountLog);
} else {
jobAccountLog.setBjModified(LocalDateTime.now());
jobAccountLogMapper.updateByExampleSelective(jobAccountLog, JobAccountLogExample.newAndCreateCriteria().andAccountIdEqualTo(jobAccountLog.getAccountId()).andJobNameEqualTo(jobAccountLog.getJobName()).example());
jobAccountLogMapper.updateByExampleSelective(jobAccountLog, JobAccountLogExample
.newAndCreateCriteria()
.andAccountIdEqualTo(jobAccountLog.getAccountId())
.andJobNameEqualTo(jobAccountLog.getJobName())
.example());
}
}
}
} catch (Exception e) {
e.printStackTrace();
log.warn("Amaozom定时同步广告接口错误", e);
log.warn("Amazon定时同步广告接口错误", e);
} finally {
SessionUtil.closeSession();
}
......@@ -77,12 +82,13 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
* 才允许生成报告
* 避免报告不完整
* 比如 7月26号12:00才允许生成7月25号的报告
*
* @param jobAccountLog
*/
private void generateReportId(JobAccountLog jobAccountLog) {
LocalDateTime startZeroTime = LocalDateTime.of(jobAccountLog.getStartTime().toLocalDate(), LocalTime.MIN);
LocalDateTime now = LocalDateTime.now();
// LocalDateTime localDateTime = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), now.getHour(),now.getMinute(), now.getSecond());
// LocalDateTime localDateTime = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), now.getHour(),now.getMinute(), now.getSecond());
if (Duration.between(startZeroTime, now).toHours() >= 37) {
DcBaseCompanyAccount dcBaseCompanyAccount = getToken(jobAccountLog);
if (StringUtils.isNoneBlank(dcBaseCompanyAccount.getAmazonAdAuthJson())) {
......@@ -96,12 +102,12 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
* 发请求, 存在就更新时间
*/
/*if (jobAmazonAdLog == null || (jobAmazonAdLog != null && StringUtils.isBlank(jobAmazonAdLog.getReportId()))) {*/
/**
* 授权信息存在才去调接口获取ReportId
*/
AmazonAdAuth amazonAdAuth = JSON.parseObject(dcBaseCompanyAccount.getAmazonAdAuthJson(), AmazonAdAuth.class);
//1. 先获取ReportId
postReportId(jobAccountLog, amazonAdAuth, dcBaseCompanyAccount.getSiteEn(), jobAmazonAdLogMapper);
/**
* 授权信息存在才去调接口获取ReportId
*/
AmazonAdAuth amazonAdAuth = JSON.parseObject(dcBaseCompanyAccount.getAmazonAdAuthJson(), AmazonAdAuth.class);
//1. 先获取ReportId
postReportId(jobAccountLog, amazonAdAuth, dcBaseCompanyAccount.getSiteEn(), jobAmazonAdLogMapper);
/*} else {
jobAccountLogUpdateTime(jobAccountLog);
}*/
......@@ -115,12 +121,12 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
jsonObject.put("metrics", propertiesUtil.getPropertyAsString("METRICS"));
MediaType mediaType = MediaType.parse("application/json");
Response response = null;
try{
try {
RequestBody body = RequestBody.create(mediaType, jsonObject.toJSONString());
Request request = new Request.Builder()
.url(switchSiteUrl(siteEn, null))
.post(body)
.addHeader("Authorization", amazonAdAuth.getAccessToken())
.addHeader("Authorization", amazonAdAuth.getAccessToken())
.addHeader("Amazon-Advertising-API-ClientId", amazonAdAuth.getClientId())
.addHeader("Amazon-Advertising-API-Scope", amazonAdAuth.getProfileId())
.addHeader("Content-Type", "application/json")
......@@ -129,14 +135,14 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
String string = response.body().string();
if (response.isSuccessful()) {
AmazonAdSuccessResult amazonAdSuccessResult = JSON.parseObject(string, AmazonAdSuccessResult.class);
JobAmazonAdLog jobAmazonAdLog = new JobAmazonAdLog(null, jobAccountLog.getAccountId(),amazonAdSuccessResult.getReportId(),jobAccountLog.getStartTime().toLocalDate(),false, null, LocalDateTime.now(), siteEn, jobAccountLog.getCompanyId());
JobAmazonAdLog jobAmazonAdLog = new JobAmazonAdLog(null, jobAccountLog.getAccountId(), amazonAdSuccessResult.getReportId(), jobAccountLog.getStartTime().toLocalDate(), false, null, LocalDateTime.now(), siteEn, jobAccountLog.getCompanyId());
int updateInt = jobAmazonAdLogMapper.updateByExampleSelective(jobAmazonAdLog, JobAmazonAdLogExample.newAndCreateCriteria().andAccountIdEqualTo(jobAccountLog.getAccountId()).andReportDateEqualTo(jobAccountLog.getStartTime().toLocalDate()).example());
if (updateInt == 0) {
jobAmazonAdLogMapper.insertSelective(jobAmazonAdLog);
}
jobAccountLogUpdateTime(jobAccountLog);
jobAccountLogUpdateTime(jobAccountLog);
}
}catch (Exception e){
} catch (Exception e) {
jobAccountLog.setMessage("调用获取AmazonADReportId错误:" + ExceptionUtil.transform(e));
} finally {
if (response != null) {
......@@ -162,6 +168,7 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
* 就POST _URL
* 否则GET _URL
* https://advertising.amazon.com/API/docs/v2/reference/product_ads
*
* @param siteEn
* @param param
* @return
......@@ -189,21 +196,21 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
protected static String getURL(String siteUrl, String param) {
if (StringUtils.isBlank(param)) {
return propertiesUtil.getPropertyAsString(siteUrl) + propertiesUtil.getPropertyAsString("POST_PRODUCT_ADS_REPORT_ID");
return propertiesUtil.getPropertyAsString(siteUrl) + propertiesUtil.getPropertyAsString("POST_PRODUCT_ADS_REPORT_ID");
}
return propertiesUtil.getPropertyAsString(siteUrl) + propertiesUtil.getPropertyAsString("GET_PRODUCT_ADS_REPORT_DOWNLOAD_PREFIX")+ param + propertiesUtil.getPropertyAsString("GET_PRODUCT_ADS_REPORT_DOWNLOAD_SUFFIX");
return propertiesUtil.getPropertyAsString(siteUrl) + propertiesUtil.getPropertyAsString("GET_PRODUCT_ADS_REPORT_DOWNLOAD_PREFIX") + param + propertiesUtil.getPropertyAsString("GET_PRODUCT_ADS_REPORT_DOWNLOAD_SUFFIX");
}
private DcBaseCompanyAccount getToken(JobAccountLog jobAccountLog) {
DcBaseCompanyAccountMapper mapper = SessionUtil.getSession().getMapper(DcBaseCompanyAccountMapper.class);
return mapper.selectOneByExample(DcBaseCompanyAccountExample.newAndCreateCriteria().andCompanyIdEqualTo(jobAccountLog.getCompanyId()).andAccountIdEqualTo(jobAccountLog.getAccountId()).example());
return mapper.selectOneByExample(DcBaseCompanyAccountExample.newAndCreateCriteria().andCompanyIdEqualTo(jobAccountLog.getCompanyId()).andAccountIdEqualTo(jobAccountLog.getAccountId()).example());
}
private int getCount() {
private int getCount() {
int i = 0;
try {
DcBaseCompanyAccountMapper accountMapper = SessionUtil.getSession().getMapper(DcBaseCompanyAccountMapper.class);
i = (int)accountMapper.countByExample(DcBaseCompanyAccountExample.newAndCreateCriteria().andPlatformIdEqualTo(platformId).andAmazonAdAuthJsonNotEqualTo("").example());
i = (int) accountMapper.countByExample(DcBaseCompanyAccountExample.newAndCreateCriteria().andPlatformIdEqualTo(platformId).andAmazonAdAuthJsonNotEqualTo("").example());
} catch (Exception e) {
e.printStackTrace();
} finally {
......
......@@ -9,8 +9,11 @@ EVENT_RDB_STORAGE_USERNAME=root
EVENT_RDB_STORAGE_PASSWORD=#7kfnymAM$Y9-Ntf
ZOOKEEPER_SERVER=172.31.255.120:2181
NAME_SPACE=data-center
JOB_NAME_AD_PRODUCT=base-sync-finance-amazon-ad-product
JOB_CRON_AD_PRODUCT=0 1 0/5 * * ? *
#SHARDING_TOTAL_COUNT=3
JOB_NAME_AD_PRODUCT_GENERATE=base-amazon-ad-product-generate
JOB_CRON_AD_PRODUCT_GENERATE=0 1 0/1 * * ? *
JOB_CRON_AD_PRODUCT_GENERATE=0 1 12/1 * * ? *
JOB_NAME_AD_PRODUCT_DOWNLOAD=base-amazon-ad-product-download
JOB_CRON_AD_PRODUCT_DOWNLOAD=0 2 0/1 * * ? *
JOB_CRON_AD_PRODUCT_DOWNLOAD=0 1 0/1 * * ? *
SHARDING_TOTAL_COUNT=2
import com.bailuntec.domain.entity.JobAccountLog;
import com.bailuntec.domain.entity.JobAmazonAdLog;
import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.domain.example.JobAmazonAdLogExample;
import com.bailuntec.job.AmazonAdDownloadReportJob;
import com.bailuntec.job.AmazonAdGenerateReportIdJob;
import com.bailuntec.mapper.JobAmazonAdLogMapper;
import com.bailuntec.utils.SessionUtil;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.executor.ShardingContexts;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
@Slf4j
......@@ -20,10 +26,10 @@ public class AmazonAdProductTest {
Method generateReportId = clazz.getDeclaredMethod("generateReportId", JobAccountLog.class);
generateReportId.setAccessible(true);
JobAccountLog jobAccountLog = new JobAccountLog();
jobAccountLog.setStartTime(LocalDateTime.of(2019, 5, 31, 0, 0));
jobAccountLog.setEndTime(LocalDateTime.of(2019, 6, 1, 0, 0));
jobAccountLog.setStartTime(LocalDateTime.of(2020, 8, 17, 0, 0));
jobAccountLog.setEndTime(LocalDateTime.of(2020, 8, 18, 0, 0));
jobAccountLog.setCompanyId(1);
jobAccountLog.setAccountId(572);
jobAccountLog.setAccountId(1779);
jobAccountLog.setIntervalTime(1);
jobAccountLog.setJobName("base-amazon-ad-product-generate");
generateReportId.invoke(clazz.newInstance(), jobAccountLog);
......@@ -37,7 +43,13 @@ public class AmazonAdProductTest {
generateReportId.setAccessible(true);
try {
JobAmazonAdLogMapper mapper = SessionUtil.getSession().getMapper(JobAmazonAdLogMapper.class);
List<JobAmazonAdLog> jobAmazonAdLogList = mapper.selectByExample(JobAmazonAdLogExample.newAndCreateCriteria().andStatusEqualTo(false).andBjModifiedLessThan(LocalDateTime.now().minusMinutes(15)).example().orderBy("id").limit(0 * pageSize, pageSize));
List<JobAmazonAdLog> jobAmazonAdLogList = mapper.selectByExample(JobAmazonAdLogExample.newAndCreateCriteria()
.andStatusEqualTo(false)
.andBjModifiedLessThan(LocalDateTime.now().minusMinutes(15))
.example()
.orderBy("id")
.limit(0, pageSize));
if (jobAmazonAdLogList != null && !jobAmazonAdLogList.isEmpty()) {
for (JobAmazonAdLog jobAmazonAdLog : jobAmazonAdLogList) {
generateReportId.invoke(clazz.newInstance(), jobAmazonAdLog);
......@@ -58,7 +70,15 @@ public class AmazonAdProductTest {
generateReportId.setAccessible(true);
try {
JobAmazonAdLogMapper mapper = SessionUtil.getSession().getMapper(JobAmazonAdLogMapper.class);
List<JobAmazonAdLog> jobAmazonAdLogList = mapper.selectByExample(JobAmazonAdLogExample.newAndCreateCriteria().andStatusEqualTo(false).andIdEqualTo(1969).andBjModifiedLessThan(LocalDateTime.now().minusMinutes(15)).example().orderBy("id").limit(0 * pageSize, pageSize));
List<JobAmazonAdLog> jobAmazonAdLogList = mapper.selectByExample(JobAmazonAdLogExample
.newAndCreateCriteria()
.andStatusEqualTo(false)
.andIdEqualTo(1969)
.andBjModifiedLessThan(LocalDateTime.now().minusMinutes(15))
.example()
.orderBy("id")
.limit(0, pageSize));
if (jobAmazonAdLogList != null && !jobAmazonAdLogList.isEmpty()) {
for (JobAmazonAdLog jobAmazonAdLog : jobAmazonAdLogList) {
generateReportId.invoke(clazz.newInstance(), jobAmazonAdLog);
......@@ -71,4 +91,40 @@ public class AmazonAdProductTest {
}
}
@Test
public void unDownload() {
JobAmazonAdLogMapper jobAmazonAdLogMapper = SessionUtil.getSession().getMapper(JobAmazonAdLogMapper.class);
AmazonAdDownloadReportJob amazonAdDownloadReportJob = new AmazonAdDownloadReportJob();
jobAmazonAdLogMapper.selectByExample(JobAmazonAdLogExample.newAndCreateCriteria()
.andStatusEqualTo(false)
.example())
.forEach(jobAmazonAdLog -> {
amazonAdDownloadReportJob.downloadReport(jobAmazonAdLog, null);
});
}
@Test
public void testReport() {
AmazonAdGenerateReportIdJob amazonAdGenerateReportIdJob = new AmazonAdGenerateReportIdJob();
AmazonAdDownloadReportJob amazonAdDownloadReportJob = new AmazonAdDownloadReportJob();
amazonAdGenerateReportIdJob.executeJob(new ShardingContext(
new ShardingContexts(null, "amazonAdGenerateReportIdJob", 1, null, new HashMap<>()), 0
), new JobPointLog("amazonAdGenerateReportIdJob",
1,
100,
null,
1,
LocalDateTime.of(2020, 4, 1, 0, 0),
LocalDateTime.of(2020, 4, 2, 0, 0)));
amazonAdDownloadReportJob.execute(new ShardingContext(
new ShardingContexts(null, "amazonAdDownloadReportJob", 1, null, new HashMap<>()), 0
));
}
}
package com.bailuntec.job;
import com.bailuntec.domain.pojo.AmazonAdProduct;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.executor.ShardingContexts;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.List;
import java.util.zip.GZIPInputStream;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/8/19 11:39 上午
*/
@Slf4j
class AmazonAdDownloadReportJobTest {
@Test
void execute() {
AmazonAdDownloadReportJob amazonAdDownloadReportJob = new AmazonAdDownloadReportJob();
amazonAdDownloadReportJob.execute(new ShardingContext(new ShardingContexts("x", null, 1, null, new HashMap<>()), 0));
}
@Test
public void downloadReport() throws IOException {
Request request = new Request.Builder()
.url("https://advertising-api-eu.amazon.com/v1/reports/amzn1.clicksAPI.v1.p35691.5F3CB79F.8b7bf3b1-49f4-42f5-aee3-948215758208/download/")
.get()
.addHeader("Authorization", "Atza|IwEBIECxu5mURTbJo6LfkoB9et_xNpwUemnh7Nav426JfaTwoBQYhhXzn7SzrQDLBYTz0HEYlaCQeJp4okJbRvESaovFWbzP8Hg3poV4x9_YfteilpM0WHvtYoJbZj6BGK2WcAZyncZ1qgSoTHnTPzZuMyniev8BmcEO9UZTfOULeXN86Z7Anyq6Ta_XwA8m4sPUPftUg2Fz-9O6Hm618Z9TDxDdImf4TKyRSr9PXc75XIS_ACrKlK-MjU4ILI1qYgeckI1xpns69MmPJ5G2SvXqQBKSt1CJYq-ZfAqf4-e659SYkieyODjo3qXCyDQ7B9B4LGYxzut0L-WN9SQZO9keBwPtLFPK2StaYpk85F-QIAog6LR3RIdMhzl2Wh-H_JvY4MBEVD3z7HLUfTlFeQVCVuHONgCaBnMurNj6F5VtJ49oQ8J3qxzZx8Il1Jnli5D7cQU99h1MOqmIVk5Q_P-4hqiWVnCwydA9c0G-zho_bR_-bQ")
.addHeader("Amazon-Advertising-API-ClientId", "amzn1.application-oa2-client.a68a22f3f5e44a5691e5780f1b31014c")
.addHeader("Amazon-Advertising-API-Scope", "596170210050198")
.addHeader("Content-Type", "application/json")
.build();
Response response = new OkHttpClient().newCall(request).execute();
GZIPInputStream inputStream = new GZIPInputStream(response.body().byteStream());
Type type = new TypeToken<List<AmazonAdProduct>>() {
}.getType();
List<AmazonAdProduct> amazonAdProductList = new Gson().fromJson(new InputStreamReader(inputStream), type);
log.warn("的Report解析完成");
}
}
......@@ -63,7 +63,9 @@ public class CompanyAccountSyncJob extends PointJob {
for (CompanyAccountInfo companyAccountInfo : result) {
BeanUtils.copyProperties(dcBaseCompanyAccount, companyAccountInfo);
dcBaseCompanyAccount.setBjModified(LocalDateTime.now());
int i = mapper.updateByExampleSelective(dcBaseCompanyAccount, DcBaseCompanyAccountExample.newAndCreateCriteria().andCompanyIdEqualTo(companyAccountInfo.getCompanyId()).andAccountIdEqualTo(companyAccountInfo.getAccountId()).example());
int i = mapper.updateByExampleSelective(dcBaseCompanyAccount, DcBaseCompanyAccountExample.newAndCreateCriteria()
.andCompanyIdEqualTo(companyAccountInfo.getCompanyId())
.andAccountIdEqualTo(companyAccountInfo.getAccountId()).example());
if (i == 0) {
mapper.insertSelective(dcBaseCompanyAccount);
}
......
package com.bailuntec.job;
import org.junit.jupiter.api.Test;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/8/19 11:32 上午
*/
class CompanyAccountSyncJobTest {
@Test
void executeJob() {
CompanyAccountSyncJob companyAccountSyncJob = new CompanyAccountSyncJob();
companyAccountSyncJob.executeJob(null, null);
}
}
STOCK_FBA_URL=http://172.31.255.247/api/services/app/ThirdStockFbaService/GetFbaStocks
STOCK_WMS_URL=http://172.31.255.247/api/services/app/WMSStockService/SearchAllProductStockByPage
#STOCK_FBA_URL=http://api.wms.bailuntec.com/api/services/app/ThirdStockFbaService/GetFbaStocks
#STOCK_WMS_URL=http://api.wms.bailuntec.com/api/services/app/WMSStockService/SearchAllProductStockByPage
#STOCK_FBA_URL=http://172.31.255.247/api/services/app/ThirdStockFbaService/GetFbaStocks
#STOCK_WMS_URL=http://172.31.255.247/api/services/app/WMSStockService/SearchAllProductStockByPage
STOCK_FBA_URL=http://api.wms.bailuntec.com/api/services/app/ThirdStockFbaService/GetFbaStocks
STOCK_WMS_URL=http://api.wms.bailuntec.com/api/services/app/WMSStockService/SearchAllProductStockByPage
LOGISTICS_WMS_URL=http://wms.bailuntec.com/api/services/app/LogisticsReconciliationService/GetNormalDataQuery
LOGISTICS_WMS_RECONCILIATION_URL=http://wms.bailuntec.com/api/services/app/LogisticsReconciliationService/GetBaseDataQuery
\ No newline at end of file
LOGISTICS_WMS_RECONCILIATION_URL=http://wms.bailuntec.com/api/services/app/LogisticsReconciliationService/GetBaseDataQuery
package com.bailuntec.job;
import com.bailuntec.domain.entity.JobPointLog;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.executor.ShardingContexts;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/8/18 4:49 下午
*/
class FbaStockJobTest {
@Test
void executeJob() {
FbaStockJob fbaStockJob = new FbaStockJob();
ShardingContext shardingContext = new ShardingContext(new ShardingContexts("1", "fba-stock-job", 1, "", new HashMap<>()), 0);
JobPointLog jobPointLog = new JobPointLog();
jobPointLog.setPageIndex(1);
jobPointLog.setPageSize(100);
fbaStockJob.executeJob(shardingContext, jobPointLog);
}
}
......@@ -136,6 +136,7 @@ public interface DcMidTransitMapper {
List<OutStockQuantity> selectQuantityOutStock();
List<PurchaseTransitQuantity> selectQuantityPurchaseTransit();
List<TransferTransitQuantity> selectQuantityTransferTransit();
void calculateOutStock(@Param("list") List<OutStockQuantity> list, @Param("localDateTime") LocalDateTime localDateTime);
......@@ -157,4 +158,4 @@ public interface DcMidTransitMapper {
void calculateUnshipped();
void updateSkuUnitPrice();
}
\ No newline at end of file
}
......@@ -91,8 +91,8 @@
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
id, bailun_sku, warehouse_code, quantity_purchase, gmt_purchase_modified, quantity_transfer,
gmt_transfer_modified, quantity_out_stock, gmt_out_stock_modified, quantity_unshipped,
id, bailun_sku, warehouse_code, quantity_purchase, gmt_purchase_modified, quantity_transfer,
gmt_transfer_modified, quantity_out_stock, gmt_out_stock_modified, quantity_unshipped,
gmt_unshipped_modified, company_id, amount_purchase_transit
</sql>
<select id="selectByExample" parameterType="com.bailuntec.domain.example.DcMidTransitExample" resultMap="BaseResultMap">
......@@ -126,7 +126,7 @@
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
select
select
<include refid="Base_Column_List" />
from dc_mid_transit
where id = #{id,jdbcType=INTEGER}
......@@ -154,17 +154,17 @@
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
insert into dc_mid_transit (id, bailun_sku, warehouse_code,
quantity_purchase, gmt_purchase_modified,
quantity_transfer, gmt_transfer_modified,
quantity_out_stock, gmt_out_stock_modified,
quantity_unshipped, gmt_unshipped_modified,
insert into dc_mid_transit (id, bailun_sku, warehouse_code,
quantity_purchase, gmt_purchase_modified,
quantity_transfer, gmt_transfer_modified,
quantity_out_stock, gmt_out_stock_modified,
quantity_unshipped, gmt_unshipped_modified,
company_id, amount_purchase_transit)
values (#{id,jdbcType=INTEGER}, #{bailunSku,jdbcType=VARCHAR}, #{warehouseCode,jdbcType=VARCHAR},
#{quantityPurchase,jdbcType=INTEGER}, #{gmtPurchaseModified,jdbcType=TIMESTAMP},
#{quantityTransfer,jdbcType=INTEGER}, #{gmtTransferModified,jdbcType=TIMESTAMP},
#{quantityOutStock,jdbcType=INTEGER}, #{gmtOutStockModified,jdbcType=TIMESTAMP},
#{quantityUnshipped,jdbcType=INTEGER}, #{gmtUnshippedModified,jdbcType=TIMESTAMP},
values (#{id,jdbcType=INTEGER}, #{bailunSku,jdbcType=VARCHAR}, #{warehouseCode,jdbcType=VARCHAR},
#{quantityPurchase,jdbcType=INTEGER}, #{gmtPurchaseModified,jdbcType=TIMESTAMP},
#{quantityTransfer,jdbcType=INTEGER}, #{gmtTransferModified,jdbcType=TIMESTAMP},
#{quantityOutStock,jdbcType=INTEGER}, #{gmtOutStockModified,jdbcType=TIMESTAMP},
#{quantityUnshipped,jdbcType=INTEGER}, #{gmtUnshippedModified,jdbcType=TIMESTAMP},
#{companyId,jdbcType=INTEGER}, #{amountPurchaseTransit,jdbcType=DECIMAL})
</insert>
<insert id="insertSelective" parameterType="com.bailuntec.domain.entity.DcMidTransit">
......@@ -496,7 +496,7 @@
#{amountPurchaseTransit,jdbcType=DECIMAL},
</if>
</trim>
on duplicate key update
on duplicate key update
<trim suffixOverrides=",">
<if test="id != null">
id = #{id,jdbcType=INTEGER},
......@@ -546,29 +546,29 @@
@project https://github.com/itfsw/mybatis-generator-plugin
-->
insert into dc_mid_transit
(id, bailun_sku, warehouse_code, quantity_purchase, gmt_purchase_modified, quantity_transfer,
gmt_transfer_modified, quantity_out_stock, gmt_out_stock_modified, quantity_unshipped,
(id, bailun_sku, warehouse_code, quantity_purchase, gmt_purchase_modified, quantity_transfer,
gmt_transfer_modified, quantity_out_stock, gmt_out_stock_modified, quantity_unshipped,
gmt_unshipped_modified, company_id, amount_purchase_transit)
values
(#{id,jdbcType=INTEGER}, #{bailunSku,jdbcType=VARCHAR}, #{warehouseCode,jdbcType=VARCHAR},
#{quantityPurchase,jdbcType=INTEGER}, #{gmtPurchaseModified,jdbcType=TIMESTAMP},
#{quantityTransfer,jdbcType=INTEGER}, #{gmtTransferModified,jdbcType=TIMESTAMP},
#{quantityOutStock,jdbcType=INTEGER}, #{gmtOutStockModified,jdbcType=TIMESTAMP},
#{quantityUnshipped,jdbcType=INTEGER}, #{gmtUnshippedModified,jdbcType=TIMESTAMP},
(#{id,jdbcType=INTEGER}, #{bailunSku,jdbcType=VARCHAR}, #{warehouseCode,jdbcType=VARCHAR},
#{quantityPurchase,jdbcType=INTEGER}, #{gmtPurchaseModified,jdbcType=TIMESTAMP},
#{quantityTransfer,jdbcType=INTEGER}, #{gmtTransferModified,jdbcType=TIMESTAMP},
#{quantityOutStock,jdbcType=INTEGER}, #{gmtOutStockModified,jdbcType=TIMESTAMP},
#{quantityUnshipped,jdbcType=INTEGER}, #{gmtUnshippedModified,jdbcType=TIMESTAMP},
#{companyId,jdbcType=INTEGER}, #{amountPurchaseTransit,jdbcType=DECIMAL})
on duplicate key update
id = #{id,jdbcType=INTEGER},
bailun_sku = #{bailunSku,jdbcType=VARCHAR},
warehouse_code = #{warehouseCode,jdbcType=VARCHAR},
quantity_purchase = #{quantityPurchase,jdbcType=INTEGER},
gmt_purchase_modified = #{gmtPurchaseModified,jdbcType=TIMESTAMP},
quantity_transfer = #{quantityTransfer,jdbcType=INTEGER},
gmt_transfer_modified = #{gmtTransferModified,jdbcType=TIMESTAMP},
quantity_out_stock = #{quantityOutStock,jdbcType=INTEGER},
gmt_out_stock_modified = #{gmtOutStockModified,jdbcType=TIMESTAMP},
quantity_unshipped = #{quantityUnshipped,jdbcType=INTEGER},
gmt_unshipped_modified = #{gmtUnshippedModified,jdbcType=TIMESTAMP},
company_id = #{companyId,jdbcType=INTEGER},
on duplicate key update
id = #{id,jdbcType=INTEGER},
bailun_sku = #{bailunSku,jdbcType=VARCHAR},
warehouse_code = #{warehouseCode,jdbcType=VARCHAR},
quantity_purchase = #{quantityPurchase,jdbcType=INTEGER},
gmt_purchase_modified = #{gmtPurchaseModified,jdbcType=TIMESTAMP},
quantity_transfer = #{quantityTransfer,jdbcType=INTEGER},
gmt_transfer_modified = #{gmtTransferModified,jdbcType=TIMESTAMP},
quantity_out_stock = #{quantityOutStock,jdbcType=INTEGER},
gmt_out_stock_modified = #{gmtOutStockModified,jdbcType=TIMESTAMP},
quantity_unshipped = #{quantityUnshipped,jdbcType=INTEGER},
gmt_unshipped_modified = #{gmtUnshippedModified,jdbcType=TIMESTAMP},
company_id = #{companyId,jdbcType=INTEGER},
amount_purchase_transit = #{amountPurchaseTransit,jdbcType=DECIMAL}
</insert>
<select id="selectOneByExample" parameterType="com.bailuntec.domain.example.DcMidTransitExample" resultMap="BaseResultMap">
......@@ -590,90 +590,76 @@
</select>
<select id="selectQuantityTransferTransit" resultType="com.bailuntec.domain.dto.TransferTransitQuantity">
SELECT
bailun_sku as bailunSku,
warehouse_code as warehouseCode,
sum( count ) as count,
sum(countplan) as countplan,
sum(case when transport_type = '国内陆运' then count else 0 end) as landCount,
sum(case when transport_type = '海运' then count else 0 end) as oceanCount,
sum(case when transport_type = '空运' then count else 0 end) as airCount,
sum(case when transport_type = '铁路运输' then count else 0 end) as railwayCount
FROM
(
SELECT
tb5.bailun_sku bailun_sku,
tb5.warehouse_code warehouse_code,
(
tb5.count - IFNULL( tb4.count, 0 )) AS count,
0 as countplan,
tb5.transport_type transport_type
FROM
(
SELECT
tb1.bailun_sku,
tb1.warehouse_code,
sum( tb1.count ) count,
tb1.transport_type
FROM
dc_base_transfer_bale tb1
LEFT JOIN dc_base_transfer_complete tb2 ON tb1.transfer_order_id = tb2.transfer_order_id
WHERE
tb2.transfer_order_id IS NULL
SELECT bailun_sku as bailunSku,
warehouse_code as warehouseCode,
sum(count) as count,
sum(countplan) as countplan,
sum(IF(transport_type = '国内陆运', count, 0)) as landCount,
sum(IF(transport_type = '海运', count, 0)) as oceanCount,
sum(IF(transport_type = '空运', count, 0)) as airCount,
sum(IF(transport_type = '铁路运输', count, 0)) as railwayCount
FROM (
SELECT tb5.bailun_sku bailun_sku,
tb5.warehouse_code warehouse_code,
(
tb5.count - IFNULL(tb4.count, 0)) AS count,
0 as countplan,
tb5.transport_type transport_type
FROM (
SELECT tb1.bailun_sku,
tb1.warehouse_code,
sum(tb1.count) count,
tb1.transport_type
FROM dc_base_transfer_bale tb1
LEFT JOIN dc_base_transfer_complete tb2 ON tb1.transfer_order_id = tb2.transfer_order_id
WHERE tb2.transfer_order_id IS NULL
AND tb1.deleted = 0
GROUP BY
bailun_sku,
warehouse_code
GROUP BY bailun_sku,
warehouse_code
) tb5
LEFT JOIN (
SELECT
bailun_sku,
LEFT JOIN (
SELECT bailun_sku,
warehouse_code,
sum( count ) count
FROM
(
SELECT
t1.bailun_sku,
t1.warehouse_code,
(case WHEN t2.count > tbb.count then tbb.count else t2.count end) as count,
t1.transfer_order_id
FROM
( SELECT max( create_time ) AS create_time, bailun_sku, warehouse_code, transfer_order_id FROM dc_base_transfer_inbound WHERE deleted = 0 GROUP BY bailun_sku, warehouse_code, transfer_order_id ) t1
INNER JOIN dc_base_transfer_inbound t2 ON t1.bailun_sku = t2.bailun_sku
AND t1.warehouse_code = t2.warehouse_code
AND t1.transfer_order_id = t2.transfer_order_id
AND t1.create_time = t2.create_time
LEFT JOIN dc_base_transfer_bale tbb on t1.bailun_sku = tbb.bailun_sku and t1.warehouse_code = tbb.warehouse_code and t1.transfer_order_id = tbb.transfer_order_id
LEFT JOIN dc_base_transfer_complete tb2 ON t1.transfer_order_id = tb2.transfer_order_id
WHERE
tb2.bailun_sku IS NULL
) tb3
GROUP BY
bailun_sku,
sum(count) count
FROM (
SELECT t1.bailun_sku,
t1.warehouse_code,
(case WHEN t2.count > tbb.count then tbb.count else t2.count end) as count,
t1.transfer_order_id
FROM (SELECT max(create_time) AS create_time, bailun_sku, warehouse_code, transfer_order_id
FROM dc_base_transfer_inbound
WHERE deleted = 0
GROUP BY bailun_sku, warehouse_code, transfer_order_id) t1
INNER JOIN dc_base_transfer_inbound t2 ON t1.bailun_sku = t2.bailun_sku
AND t1.warehouse_code = t2.warehouse_code
AND t1.transfer_order_id = t2.transfer_order_id
AND t1.create_time = t2.create_time
LEFT JOIN dc_base_transfer_bale tbb
on t1.bailun_sku = tbb.bailun_sku and t1.warehouse_code = tbb.warehouse_code and
t1.transfer_order_id = tbb.transfer_order_id
LEFT JOIN dc_base_transfer_complete tb2 ON t1.transfer_order_id = tb2.transfer_order_id
WHERE tb2.bailun_sku IS NULL
) tb3
GROUP BY bailun_sku,
warehouse_code
) tb4 ON tb5.bailun_sku = tb4.bailun_sku
AND tb5.warehouse_code = tb4.warehouse_code
WHERE (
tb5.count - IFNULL(tb4.count, 0)) > 0
UNION ALL
SELECT bailun_sku,
warehouse_code,
sum(count) AS count,
sum(count) AS countplan,
transport_type
FROM dc_base_transfer_plan
WHERE STATUS = 1
AND deleted = 0
GROUP BY bailun_sku,
warehouse_code
) tb4 ON tb5.bailun_sku = tb4.bailun_sku
AND tb5.warehouse_code = tb4.warehouse_code
WHERE
(
tb5.count - IFNULL( tb4.count, 0 )) > 0 UNION ALL
SELECT
bailun_sku,
warehouse_code,
sum( count ) AS count,
sum( count ) AS countplan,
transport_type
FROM
dc_base_transfer_plan
WHERE
STATUS = 1
AND deleted = 0
GROUP BY
bailun_sku,
warehouse_code
) t
GROUP BY
bailun_sku,
warehouse_code
) t
GROUP BY bailun_sku,
warehouse_code
</select>
<insert id="calculateTransferTransit">
......@@ -685,8 +671,11 @@
)
</foreach>
ON DUPLICATE KEY UPDATE quantity_transfer = values(quantity_transfer),
quantity_transfer_plan = values(quantity_transfer_plan),
quantity_land_transfer = values(quantity_land_transfer),quantity_ocean_transfer = values(quantity_ocean_transfer),quantity_air_transfer = values(quantity_air_transfer),quantity_railway_transfer = values(quantity_railway_transfer),
quantity_transfer_plan = values(quantity_transfer_plan),
quantity_land_transfer = values(quantity_land_transfer),
quantity_ocean_transfer = values(quantity_ocean_transfer),
quantity_air_transfer = values(quantity_air_transfer),
quantity_railway_transfer = values(quantity_railway_transfer),
gmt_transfer_modified = values(gmt_transfer_modified)
</insert>
......@@ -709,7 +698,7 @@
#{item.bailunSku,jdbcType=VARCHAR}, #{item.warehouseCode,jdbcType=VARCHAR}, #{item.quantityOutStock,jdbcType=INTEGER}, #{localDateTime,jdbcType=TIMESTAMP}, #{item.aliexpressQuantity, jdbcType=INTEGER}
)
</foreach>
ON DUPLICATE KEY UPDATE quantity_out_stock = values(quantity_out_stock) ,gmt_out_stock_modified = values(gmt_out_stock_modified), quantity_out_stock_aliexpress = values(quantity_out_stock_aliexpress)
ON DUPLICATE KEY UPDATE quantity_out_stock = values(quantity_out_stock) ,gmt_out_stock_modified = values(gmt_out_stock_modified), quantity_out_stock_aliexpress = values(quantity_out_stock_aliexpress)
</insert>
<insert id="insertMidDailyTransit">
......@@ -894,4 +883,4 @@
WHERE (t1.bailun_sku_quantity_ordered - t1.bailun_sku_quantity_shipped) >= 0
ON DUPLICATE KEY UPDATE quantity_unshipped = VALUES(quantity_unshipped),gmt_unshipped_modified = VALUES(gmt_unshipped_modified),bailun_order_ids = VALUES(bailun_order_ids)
</insert>
</mapper>
\ No newline at end of file
</mapper>
......@@ -34,3 +34,5 @@
</root>
</configuration>
......@@ -51,7 +51,14 @@ public class CalculateCostFirstJob extends PointJob {
if (channelOrderIdList != null && channelOrderIdList.size() > 0) {
for (CostFirstOrder costFirstOrder : channelOrderIdList) {
DcBaseCostFirstMapper dcBaseCostFirstMapperFor = SessionUtil.getSession().getMapper(DcBaseCostFirstMapper.class);
List<DcBaseCostFirst> dcBaseCostFirsts = dcBaseCostFirstMapperFor.selectByExample(DcBaseCostFirstExample.newAndCreateCriteria().andChannelOrderIdEqualTo(costFirstOrder.getChannelOrderId()).andTransferOrderIdEqualTo(costFirstOrder.getTransferOrderId()).andBoxIdEqualTo(costFirstOrder.getBoxId()).andWarehouseCodeEqualTo(costFirstOrder.getWarehouseCode()).andHasCalculationEqualTo(false).example());
List<DcBaseCostFirst> dcBaseCostFirsts = dcBaseCostFirstMapperFor.selectByExample(DcBaseCostFirstExample.newAndCreateCriteria()
.andChannelOrderIdEqualTo(costFirstOrder.getChannelOrderId())
.andTransferOrderIdEqualTo(costFirstOrder.getTransferOrderId())
.andBoxIdEqualTo(costFirstOrder.getBoxId())
.andWarehouseCodeEqualTo(costFirstOrder.getWarehouseCode())
.andHasCalculationEqualTo(false)
.example());
handleChannelOrderSku(dcBaseCostFirsts);
dcBaseCostFirstMapperFor = SessionUtil.getSession().getMapper(DcBaseCostFirstMapper.class);
dcBaseCostFirstMapperFor.updateHasCalculation(costFirstOrder);
......@@ -95,7 +102,9 @@ public class CalculateCostFirstJob extends PointJob {
// 头程费 = (调拨计算头程费+配置头程费)/2 平均值
dcMidCostFirst.setCostFirst((costFirst.add(dcMidCostFirstConfig.getCostFirstConfig())).divide(BigDecimal.valueOf(2), 3, RoundingMode.HALF_EVEN));
}*/
int i = dcMidCostFirsMapper.updateByExampleSelective(dcMidCostFirst, DcMidCostFirstExample.newAndCreateCriteria().andBailunSkuEqualTo(dcMidCostFirst.getBailunSku()).andWarehouseCodeEqualTo(dcMidCostFirst.getWarehouseCode()).example());
int i = dcMidCostFirsMapper.updateByExampleSelective(dcMidCostFirst, DcMidCostFirstExample.newAndCreateCriteria()
.andBailunSkuEqualTo(dcMidCostFirst.getBailunSku())
.andWarehouseCodeEqualTo(dcMidCostFirst.getWarehouseCode()).example());
if (i == 0) {
dcMidCostFirsMapper.insertSelective(dcMidCostFirst);
}
......
#EVENT_RDB_STORAGE_DRIVER=com.mysql.jdbc.Driver
#EVENT_RDB_STORAGE_URL=jdbc:mysql://192.168.6.140:3306/bailun_datacenter?serverTimezone=GMT%2B8&characterEncoding=utf-8
#EVENT_RDB_STORAGE_USERNAME=root
#EVENT_RDB_STORAGE_PASSWORD=123456
#ZOOKEEPER_SERVER=127.0.0.1:2181
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_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=172.31.255.120:2181
EVENT_RDB_STORAGE_PASSWORD=123456
ZOOKEEPER_SERVER=127.0.0.1:2181
#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
NAME_SPACE=data-center
JOB_NAME=mid-calculate-cost-first
JOB_CRON=0 33 7,12,20 * * ? *
SHARDING_TOTAL_COUNT=1
\ No newline at end of file
SHARDING_TOTAL_COUNT=1
import com.bailuntec.domain.constant.Constant;
import com.bailuntec.domain.entity.DcBaseCostFirst;
import com.bailuntec.domain.entity.DcBaseSku;
import com.bailuntec.domain.entity.DcMidCostFirst;
import com.bailuntec.domain.entity.DcMidCostFirstConfig;
import com.bailuntec.domain.example.DcBaseCostFirstExample;
import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.domain.example.DcBaseSkuExample;
import com.bailuntec.domain.example.DcMidCostFirstExample;
import com.bailuntec.domain.pojo.CostFirstOrder;
import com.bailuntec.domain.pojo.MidCostFirst;
import com.bailuntec.job.CalculateCostFirstJob;
import com.bailuntec.listener.CalculateCostFirstListener;
import com.bailuntec.mapper.*;
import com.bailuntec.mapper.DcBaseSkuMapper;
import com.bailuntec.mapper.DcMidCostFirstConfigMapper;
import com.bailuntec.mapper.DcMidCostFirstMapper;
import com.bailuntec.mapper.DcMidCostFirstOrderMapper;
import com.bailuntec.utils.SessionUtil;
import org.junit.jupiter.api.Test;
......@@ -22,8 +22,7 @@ public class CostFirstTest {
@Test
public void test11()
{
public void test11() {
try {
DcBaseSkuMapper dcBaseSkuMapper = SessionUtil.getSession().getMapper(DcBaseSkuMapper.class);
DcBaseSku dcBaseSku = dcBaseSkuMapper.selectOneByExample(DcBaseSkuExample.newAndCreateCriteria().andBailunSkuEqualTo("S31").example());
......@@ -38,30 +37,11 @@ public class CostFirstTest {
@Test
public void test() {
CalculateCostFirstJob costFirstJob = new CalculateCostFirstJob();
try {
DcBaseCostFirstMapper dcBaseCostFirstMapper = SessionUtil.getSession().getMapper(DcBaseCostFirstMapper.class);
//拿到物流单号, 将物流单中每个SKU的费用算出来
List<CostFirstOrder> channelOrderIdList = dcBaseCostFirstMapper.listChannelOrderId(0, 1);
if (channelOrderIdList != null && channelOrderIdList.size() > 0) {
for (CostFirstOrder costFirstOrder : channelOrderIdList) {
costFirstOrder.setChannelOrderId("GZQY20190412 ");
costFirstOrder.setTransferOrderId("DB190412112032208");
DcBaseCostFirstMapper dcBaseCostFirstMapperFor = SessionUtil.getSession().getMapper(DcBaseCostFirstMapper.class);
List<DcBaseCostFirst> dcBaseCostFirsts = dcBaseCostFirstMapperFor.selectByExample(DcBaseCostFirstExample.newAndCreateCriteria().andChannelOrderIdEqualTo(costFirstOrder.getChannelOrderId()).andTransferOrderIdEqualTo(costFirstOrder.getTransferOrderId()).example());
costFirstJob.handleChannelOrderSku(dcBaseCostFirsts);
}
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("MYBATIS操作DB失败", e);
} finally {
SessionUtil.closeSession();
}
CalculateCostFirstListener calculateCostFirstListener = new CalculateCostFirstListener();
calculateCostFirstListener.afterJobExecuted(null);
costFirstJob.executeJob(null, new JobPointLog("dc-mid-calculate-cost-first", 1, 100, null, null, null, null));
}
@Test
public void test1() {
public void test1() {
try {
DcMidCostFirstOrderMapper dcMidCostFirstOrderMapper = SessionUtil.getSession().getMapper(DcMidCostFirstOrderMapper.class);
DcMidCostFirstConfigMapper dcMidCostFirstConfigMapper = SessionUtil.getSession().getMapper(DcMidCostFirstConfigMapper.class);
......@@ -70,14 +50,14 @@ public class CostFirstTest {
int skuWarehouseTotalPage = getSkuWarehouseTotalPage(countSkuWarehouse);
int index = 0;
do {
List<MidCostFirst> midCostFirstList = dcMidCostFirstOrderMapper.listSkuWarehouse(index * Constant.PAGE_SIZE,Constant.PAGE_SIZE);
List<MidCostFirst> midCostFirstList = dcMidCostFirstOrderMapper.listSkuWarehouse(index * Constant.PAGE_SIZE, Constant.PAGE_SIZE);
if (midCostFirstList != null && midCostFirstList.size() > 0) {
DcMidCostFirst dcMidCostFirst = new DcMidCostFirst();
for (MidCostFirst midCostFirst : midCostFirstList) {
dcMidCostFirst.setBailunSku(midCostFirst.getBailunSku());
dcMidCostFirst.setWarehouseCode(midCostFirst.getWarehouseCode());
BigDecimal costFirst = midCostFirst.getTotalCostFirst().divide(BigDecimal.valueOf(midCostFirst.getTotalCount()), 3 , RoundingMode.HALF_EVEN);
DcMidCostFirstConfig dcMidCostFirstConfig = dcMidCostFirstConfigMapper.getConfig(dcMidCostFirst.getBailunSku(),dcMidCostFirst.getWarehouseCode());
BigDecimal costFirst = midCostFirst.getTotalCostFirst().divide(BigDecimal.valueOf(midCostFirst.getTotalCount()), 3, RoundingMode.HALF_EVEN);
DcMidCostFirstConfig dcMidCostFirstConfig = dcMidCostFirstConfigMapper.getConfig(dcMidCostFirst.getBailunSku(), dcMidCostFirst.getWarehouseCode());
dcMidCostFirst.setCostFirst(costFirst);
if (dcMidCostFirstConfig != null) {
dcMidCostFirst.setCostFirst((costFirst.add(dcMidCostFirstConfig.getCostFirstConfig())).divide(BigDecimal.valueOf(2), 3, RoundingMode.HALF_EVEN));
......@@ -96,6 +76,7 @@ public class CostFirstTest {
SessionUtil.closeSession();
}
}
private int getSkuWarehouseTotalPage(int countSkuWarehouse) {
if (countSkuWarehouse % Constant.PAGE_SIZE == 0) {
return countSkuWarehouse / Constant.PAGE_SIZE;
......
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