Commit 484fbd3e by huluobin

亚马逊报告

parent 31743445
package com.bailuntec.job;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.util.IOUtils;
import com.alibaba.fastjson.TypeReference;
import com.bailuntec.domain.entity.DcBaseCompanyAccount;
import com.bailuntec.domain.entity.DcBaseFinanceAmazonAdProduct;
import com.bailuntec.domain.entity.JobAmazonAdLog;
......@@ -28,19 +28,18 @@ import okhttp3.Response;
import org.apache.commons.beanutils.BeanUtils;
import java.io.IOException;
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;
@Slf4j
public class AmazonAdDownloadReportJob implements SimpleJob {
private final OkHttpClient client = OkHttpUtil.getInstance();
@Override
public void execute(ShardingContext shardingContext) {
/**
......@@ -80,11 +79,16 @@ public class AmazonAdDownloadReportJob implements SimpleJob {
if (response.isSuccessful()) {
//注意这个接口是必须用gzip
gzin = new GZIPInputStream(response.body().byteStream());
log.warn("开始解析账号Id为" + jobAmazonAdLog.getAccountId() + "的Report----" + jobAmazonAdLog.getReportId() + ", 文件大小为" + response.body().contentLength());
log.info("开始解析账号Id为 {} 的Report----{}, 文件大小为:{} 报告时间:{}",
jobAmazonAdLog.getAccountId(), jobAmazonAdLog.getReportId(), response.body().contentLength(), jobAmazonAdLog.getReportDate());
Gson gson = new Gson();
Type type = new TypeToken<List<AmazonAdProduct>>() {
}.getType();
List<AmazonAdProduct> amazonAdProductList = gson.fromJson(new InputStreamReader(gzin), type);
// List<AmazonAdProduct> amazonAdProductList = gson.fromJson(new InputStreamReader(gzin), type);
List<AmazonAdProduct> amazonAdProductList = JSON.parseObject(gzin, new TypeReference<List<AmazonAdProduct>>() {
}.getType());
log.warn("账号Id" + jobAmazonAdLog.getAccountId() + "的Report解析完成");
gzin.close();
response.close();
......@@ -102,7 +106,14 @@ public class AmazonAdDownloadReportJob implements SimpleJob {
dcBaseFinanceAmazonAdProduct.setExchangeRate(CallBailunSystem.getExchangeRate(dcBaseFinanceAmazonAdProduct.getCurrency(), CurrencyType.CNY.value(), jobAmazonAdLog.getReportDate().atStartOfDay()));
dcBaseFinanceAmazonAdProduct.setExchangeRateUsd(CallBailunSystem.getExchangeRate(dcBaseFinanceAmazonAdProduct.getCurrency(), CurrencyType.USD.value(), jobAmazonAdLog.getReportDate().atStartOfDay()));
dcBaseFinanceAmazonAdProduct.setBjModifyTime(LocalDateTime.now());
DcBaseFinanceAmazonAdProductExample example = DcBaseFinanceAmazonAdProductExample.newAndCreateCriteria().andCompanyIdEqualTo(dcBaseFinanceAmazonAdProduct.getCompanyId()).andAccountIdEqualTo(dcBaseFinanceAmazonAdProduct.getAccountId()).andCampaignIdEqualTo(dcBaseFinanceAmazonAdProduct.getCampaignId()).andAdGroupIdEqualTo(dcBaseFinanceAmazonAdProduct.getAdGroupId()).andSkuEqualTo(dcBaseFinanceAmazonAdProduct.getSku()).andReportDateEqualTo(dcBaseFinanceAmazonAdProduct.getReportDate()).example();
DcBaseFinanceAmazonAdProductExample example = DcBaseFinanceAmazonAdProductExample.newAndCreateCriteria()
.andCompanyIdEqualTo(dcBaseFinanceAmazonAdProduct.getCompanyId())
.andAccountIdEqualTo(dcBaseFinanceAmazonAdProduct.getAccountId())
.andCampaignIdEqualTo(dcBaseFinanceAmazonAdProduct.getCampaignId())
.andAdGroupIdEqualTo(dcBaseFinanceAmazonAdProduct.getAdGroupId())
.andSkuEqualTo(dcBaseFinanceAmazonAdProduct.getSku())
.andReportDateEqualTo(dcBaseFinanceAmazonAdProduct.getReportDate()).example();
int update = mapper.updateByExampleSelective(dcBaseFinanceAmazonAdProduct, example, shardParam);
if (update == 0) {
mapper.insertSelective(dcBaseFinanceAmazonAdProduct, shardParam);
......@@ -113,7 +124,11 @@ public class AmazonAdDownloadReportJob implements SimpleJob {
DcBaseFinanceAmazonAdProductMapper mapper = SessionUtil.getSession().getMapper(DcBaseFinanceAmazonAdProductMapper.class);
mapper.deleteByExample(DcBaseFinanceAmazonAdProductExample.newAndCreateCriteria().andAccountIdEqualTo(jobAmazonAdLog.getAccountId()).andCompanyIdEqualTo(jobAmazonAdLog.getCompanyId()).andReportDateEqualTo(jobAmazonAdLog.getReportDate()).andBjModifyTimeLessThan(startTime.minusHours(1)).example());
jobAmazonAdLog.setStatus(true);
jobAmazonAdLogMapper.updateByExampleSelective(jobAmazonAdLog, JobAmazonAdLogExample.newAndCreateCriteria().andCompanyIdEqualTo(jobAmazonAdLog.getCompanyId()).andAccountIdEqualTo(jobAmazonAdLog.getAccountId()).andReportDateEqualTo(jobAmazonAdLog.getReportDate()).example());
jobAmazonAdLogMapper.updateByExampleSelective(jobAmazonAdLog, JobAmazonAdLogExample
.newAndCreateCriteria()
.andCompanyIdEqualTo(jobAmazonAdLog.getCompanyId())
.andAccountIdEqualTo(jobAmazonAdLog.getAccountId())
.andReportDateEqualTo(jobAmazonAdLog.getReportDate()).example());
break;
} else {
String s = response.body().string();
......@@ -161,7 +176,7 @@ public class AmazonAdDownloadReportJob implements SimpleJob {
.andStatusEqualTo(false)
.andBjModifiedLessThan(LocalDateTime.now().minusMinutes(15))
.example()
.orderBy("id")
.orderBy("id desc")
.limit(shardingContext.getShardingItem() * pageSize, pageSize));
} catch (Exception e) {
e.printStackTrace();
......
......@@ -48,16 +48,18 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
if (listByPage != null && listByPage.size() > 0) {
for (JobAccountLog jobAccountLog : listByPage) {
if (jobAccountLog.getId() == null) { //Id为null在任务表无记录
//Id为null在任务表无记录
if (jobAccountLog.getId() == null) {
BeanUtils.copyProperties(jobAccountLog, jobPointLog);
jobAccountLog.setId(null);
}
LocalDateTime localDateTime = jobAccountLog.getStartTime();
for (long i = 10; i >= 0; i--) {
jobAccountLog.setStartTime(localDateTime.minusDays(i));
generateReportId(jobAccountLog);
this.generateReportId(jobAccountLog);
}
if (jobAccountLog.getId() == null) { //null在任务表无记录
//null在任务表无记录
if (jobAccountLog.getId() == null) {
jobAccountLogMapper.insertSelective(jobAccountLog);
} else {
jobAccountLog.setBjModified(LocalDateTime.now());
......@@ -83,7 +85,7 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
* 避免报告不完整
* 比如 7月26号12:00才允许生成7月25号的报告
*
* @param jobAccountLog
* @param jobAccountLog x
*/
private void generateReportId(JobAccountLog jobAccountLog) {
LocalDateTime startZeroTime = LocalDateTime.of(jobAccountLog.getStartTime().toLocalDate(), LocalTime.MIN);
......@@ -96,7 +98,11 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
* 先查DB里有没有jobAccountLog.getStartTime那天的ReportId
*/
JobAmazonAdLogMapper jobAmazonAdLogMapper = SessionUtil.getSession().getMapper(JobAmazonAdLogMapper.class);
JobAmazonAdLog jobAmazonAdLog = jobAmazonAdLogMapper.selectOneByExample(JobAmazonAdLogExample.newAndCreateCriteria().andCompanyIdEqualTo(jobAccountLog.getCompanyId()).andAccountIdEqualTo(jobAccountLog.getAccountId()).andReportDateEqualTo(jobAccountLog.getStartTime().toLocalDate()).example());
JobAmazonAdLog jobAmazonAdLog = jobAmazonAdLogMapper.selectOneByExample(JobAmazonAdLogExample.newAndCreateCriteria()
.andCompanyIdEqualTo(jobAccountLog.getCompanyId())
.andAccountIdEqualTo(jobAccountLog.getAccountId())
.andReportDateEqualTo(jobAccountLog.getStartTime().toLocalDate())
.example());
/**
* jobAccountLog.getStartTime那天的ReportId不存在
* 发请求, 存在就更新时间
......@@ -132,14 +138,51 @@ public class AmazonAdGenerateReportIdJob extends PointJob {
.addHeader("Content-Type", "application/json")
.build();
response = client.newCall(request).execute();
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());
int updateInt = jobAmazonAdLogMapper.updateByExampleSelective(jobAmazonAdLog, JobAmazonAdLogExample.newAndCreateCriteria().andAccountIdEqualTo(jobAccountLog.getAccountId()).andReportDateEqualTo(jobAccountLog.getStartTime().toLocalDate()).example());
if (updateInt == 0) {
jobAmazonAdLogMapper.insertSelective(jobAmazonAdLog);
// 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);
// }
JobAmazonAdLog jobAmazonAdLog = jobAmazonAdLogMapper.selectOneByExample(JobAmazonAdLogExample
.newAndCreateCriteria()
.andAccountIdEqualTo(jobAccountLog.getAccountId())
.andReportDateEqualTo(jobAccountLog.getStartTime().toLocalDate())
.example());
if (jobAmazonAdLog == null) {
jobAmazonAdLog = new JobAmazonAdLog(null,
jobAccountLog.getAccountId(),
amazonAdSuccessResult.getReportId(),
jobAccountLog.getStartTime().toLocalDate(),
false,
null,
LocalDateTime.now(),
siteEn,
jobAccountLog.getCompanyId());
}
jobAmazonAdLogMapper.upsert(jobAmazonAdLog);
jobAccountLogUpdateTime(jobAccountLog);
}
} catch (Exception e) {
......
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