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)
### 解释说明
......
......@@ -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,6 +82,7 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
* 才允许生成报告
* 避免报告不完整
* 比如 7月26号12:00才允许生成7月25号的报告
*
* @param jobAccountLog
*/
private void generateReportId(JobAccountLog jobAccountLog) {
......@@ -115,7 +121,7 @@ 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))
......@@ -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);
}
}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
......@@ -191,7 +198,7 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
if (StringUtils.isBlank(param)) {
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) {
......@@ -203,7 +210,7 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
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
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);
......
......@@ -590,89 +590,75 @@
</select>
<select id="selectQuantityTransferTransit" resultType="com.bailuntec.domain.dto.TransferTransitQuantity">
SELECT
bailun_sku as bailunSku,
SELECT bailun_sku as bailunSku,
warehouse_code as warehouseCode,
sum( count ) as count,
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,
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,
tb5.count - IFNULL(tb4.count, 0)) AS count,
0 as countplan,
tb5.transport_type transport_type
FROM
(
SELECT
tb1.bailun_sku,
FROM (
SELECT tb1.bailun_sku,
tb1.warehouse_code,
sum( tb1.count ) count,
sum(tb1.count) count,
tb1.transport_type
FROM
dc_base_transfer_bale tb1
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
WHERE tb2.transfer_order_id IS NULL
AND tb1.deleted = 0
GROUP BY
bailun_sku,
GROUP BY bailun_sku,
warehouse_code
) tb5
LEFT JOIN (
SELECT
bailun_sku,
SELECT bailun_sku,
warehouse_code,
sum( count ) count
FROM
(
SELECT
t1.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
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_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
WHERE tb2.bailun_sku IS NULL
) tb3
GROUP BY
bailun_sku,
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,
WHERE (
tb5.count - IFNULL(tb4.count, 0)) > 0
UNION ALL
SELECT bailun_sku,
warehouse_code,
sum( count ) AS count,
sum( count ) AS countplan,
sum(count) AS count,
sum(count) AS countplan,
transport_type
FROM
dc_base_transfer_plan
WHERE
STATUS = 1
FROM dc_base_transfer_plan
WHERE STATUS = 1
AND deleted = 0
GROUP BY
bailun_sku,
GROUP BY bailun_sku,
warehouse_code
) t
GROUP BY
bailun_sku,
GROUP BY bailun_sku,
warehouse_code
</select>
......@@ -686,7 +672,10 @@
</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_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>
......
......@@ -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 * * ? *
......
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,28 +37,9 @@ 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() {
try {
......@@ -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