Commit c2ffb8fa by wutong

下载报告失败重试3次

parent 3528fbed
...@@ -165,99 +165,102 @@ public class AmazonAdProductJob extends PointJob { ...@@ -165,99 +165,102 @@ public class AmazonAdProductJob extends PointJob {
private void handleReport(String reportLocationUrl, JobAccountLog jobAccountLog, AmazonAdAuth amazonAdAuth){ private void handleReport(String reportLocationUrl, JobAccountLog jobAccountLog, AmazonAdAuth amazonAdAuth){
Response response = null; Response response = null;
GZIPInputStream gzin = null; GZIPInputStream gzin = null;
try{ Request request = new Request.Builder()
Request request = new Request.Builder() .url(reportLocationUrl)
.url(reportLocationUrl) .get()
.get() .addHeader("Authorization", amazonAdAuth.getAccessToken())
.addHeader("Authorization", amazonAdAuth.getAccessToken()) .addHeader("Amazon-Advertising-API-ClientId", amazonAdAuth.getClientId())
.addHeader("Amazon-Advertising-API-ClientId", amazonAdAuth.getClientId()) .addHeader("Amazon-Advertising-API-Scope", amazonAdAuth.getProfileId())
.addHeader("Amazon-Advertising-API-Scope", amazonAdAuth.getProfileId()) .addHeader("Content-Type", "application/json")
.addHeader("Content-Type", "application/json") .build();
.build(); for (int i = 0; i < 3; i++) {
response = client.newCall(request).execute(); try{
if (response.isSuccessful()) { response = client.newCall(request).execute();
gzin = new GZIPInputStream(response.body().byteStream()); if (response.isSuccessful()) {
List<AmazonAdProduct> amazonAdProductList = JSON.parseObject(gzin, new TypeReference<List<AmazonAdProduct>>(){}.getType()); gzin = new GZIPInputStream(response.body().byteStream());
gzin.close(); List<AmazonAdProduct> amazonAdProductList = JSON.parseObject(gzin, new TypeReference<List<AmazonAdProduct>>() {
response.close(); }.getType());
if (amazonAdProductList != null && amazonAdProductList.size() > 0) { gzin.close();
DcBaseFinanceAmazonAdProduct dcBaseFinanceAmazonAdProduct = new DcBaseFinanceAmazonAdProduct(); response.close();
DcBaseFinanceAmazonAdProductMapper mapper = SessionUtil.getSession().getMapper(DcBaseFinanceAmazonAdProductMapper.class); if (amazonAdProductList != null && amazonAdProductList.size() > 0) {
for (AmazonAdProduct amazonAdvert : amazonAdProductList) { DcBaseFinanceAmazonAdProduct dcBaseFinanceAmazonAdProduct = new DcBaseFinanceAmazonAdProduct();
if (BigDecimal.ZERO.compareTo(amazonAdvert.getCost()) != 0) { DcBaseFinanceAmazonAdProductMapper mapper = SessionUtil.getSession().getMapper(DcBaseFinanceAmazonAdProductMapper.class);
BeanUtils.copyProperties(dcBaseFinanceAmazonAdProduct, amazonAdvert); for (AmazonAdProduct amazonAdvert : amazonAdProductList) {
dcBaseFinanceAmazonAdProduct.setAccountId(jobAccountLog.getAccountId()); if (BigDecimal.ZERO.compareTo(amazonAdvert.getCost()) != 0) {
dcBaseFinanceAmazonAdProduct.setCompanyId(jobAccountLog.getCompanyId()); BeanUtils.copyProperties(dcBaseFinanceAmazonAdProduct, amazonAdvert);
dcBaseFinanceAmazonAdProduct.setReportDate(jobAccountLog.getStartTime().toLocalDate()); dcBaseFinanceAmazonAdProduct.setAccountId(jobAccountLog.getAccountId());
dcBaseFinanceAmazonAdProduct.setExchangeRate(CallBailunSystem.getExchangeRate(dcBaseFinanceAmazonAdProduct.getCurrency(), CurrencyType.CNY.value(), jobAccountLog.getStartTime())); dcBaseFinanceAmazonAdProduct.setCompanyId(jobAccountLog.getCompanyId());
dcBaseFinanceAmazonAdProduct.setExchangeRateUsd(CallBailunSystem.getExchangeRate(dcBaseFinanceAmazonAdProduct.getCurrency(), CurrencyType.USD.value(), jobAccountLog.getStartTime())); dcBaseFinanceAmazonAdProduct.setReportDate(jobAccountLog.getStartTime().toLocalDate());
dcBaseFinanceAmazonAdProduct.setBjModifyTime(LocalDateTime.now()); dcBaseFinanceAmazonAdProduct.setExchangeRate(CallBailunSystem.getExchangeRate(dcBaseFinanceAmazonAdProduct.getCurrency(), CurrencyType.CNY.value(), jobAccountLog.getStartTime()));
DcBaseFinanceAmazonAdProductExample example = DcBaseFinanceAmazonAdProductExample.newAndCreateCriteria().andCompanyIdEqualTo(dcBaseFinanceAmazonAdProduct.getCompanyId()).andAccountIdEqualTo(dcBaseFinanceAmazonAdProduct.getAccountId()).andCampaignIdEqualTo(dcBaseFinanceAmazonAdProduct.getCampaignId()).andAdGroupIdEqualTo(dcBaseFinanceAmazonAdProduct.getAdGroupId()).andSkuEqualTo(dcBaseFinanceAmazonAdProduct.getSku()).andReportDateEqualTo(dcBaseFinanceAmazonAdProduct.getReportDate()).example(); dcBaseFinanceAmazonAdProduct.setExchangeRateUsd(CallBailunSystem.getExchangeRate(dcBaseFinanceAmazonAdProduct.getCurrency(), CurrencyType.USD.value(), jobAccountLog.getStartTime()));
int i = mapper.updateByExampleSelective(dcBaseFinanceAmazonAdProduct,example); dcBaseFinanceAmazonAdProduct.setBjModifyTime(LocalDateTime.now());
if (i == 0) { DcBaseFinanceAmazonAdProductExample example = DcBaseFinanceAmazonAdProductExample.newAndCreateCriteria().andCompanyIdEqualTo(dcBaseFinanceAmazonAdProduct.getCompanyId()).andAccountIdEqualTo(dcBaseFinanceAmazonAdProduct.getAccountId()).andCampaignIdEqualTo(dcBaseFinanceAmazonAdProduct.getCampaignId()).andAdGroupIdEqualTo(dcBaseFinanceAmazonAdProduct.getAdGroupId()).andSkuEqualTo(dcBaseFinanceAmazonAdProduct.getSku()).andReportDateEqualTo(dcBaseFinanceAmazonAdProduct.getReportDate()).example();
mapper.insertSelective(dcBaseFinanceAmazonAdProduct); int update = mapper.updateByExampleSelective(dcBaseFinanceAmazonAdProduct, example);
if (update == 0) {
mapper.insertSelective(dcBaseFinanceAmazonAdProduct);
}
} }
} }
amazonAdProductList = null;
} }
amazonAdProductList = null; /*
* 今天只能拿到昨天的广告费, 不然不完整
* 如果开始时间比今天0点晚, 就设为22点(或者你随便减几个小时都可以)
*/
LocalDateTime zeroTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
LocalDateTime overStartTime = jobAccountLog.getEndTime().isAfter(zeroTime) ? zeroTime.minusHours(8) : jobAccountLog.getEndTime();
jobAccountLog.setStartTime(overStartTime);
jobAccountLog.setEndTime(jobAccountLog.getStartTime().plusDays(jobAccountLog.getIntervalTime()).isAfter(LocalDateTime.now()) ? LocalDateTime.now() : jobAccountLog.getEndTime().plusDays(jobAccountLog.getIntervalTime()));
jobAccountLog.setMessage("执行成功");
break;
} else {
String s = response.body().string();
log.warn("下载报告不成功:" + s);
jobAccountLog.setMessage(s);
} }
/* }catch (Exception e){
* 今天只能拿到昨天的广告费, 不然不完整 e.printStackTrace();
* 如果开始时间比今天0点晚, 就设为22点(或者你随便减几个小时都可以) log.error("调用获取AmazonADReportLocation错误:", e);
*/ jobAccountLog.setMessage("第" + i +"次调用获取AmazonADReportLocation错误:"+ ExceptionUtil.transform(e));
LocalDateTime zeroTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); } finally {
LocalDateTime overStartTime = jobAccountLog.getEndTime().isAfter(zeroTime) ? zeroTime.minusHours(8) : jobAccountLog.getEndTime(); if(gzin != null) {
jobAccountLog.setStartTime(overStartTime); try {
jobAccountLog.setEndTime(jobAccountLog.getStartTime().plusDays(jobAccountLog.getIntervalTime()).isAfter(LocalDateTime.now()) ? LocalDateTime.now() : jobAccountLog.getEndTime().plusDays(jobAccountLog.getIntervalTime())); gzin.close();
jobAccountLog.setMessage("执行成功"); } catch (IOException e) {
} else { e.printStackTrace();
String s = response.body().string(); log.error("gzin关闭错误:", e);
log.warn("下载报告不成功:" + s); }
jobAccountLog.setMessage(s); }
} if (response != null) {
}catch (Exception e){ response.close();
e.printStackTrace();
log.error("调用获取AmazonADReportLocation错误:", e);
jobAccountLog.setMessage(reportLocationUrl +"调用获取AmazonADReportLocation错误:"+ ExceptionUtil.transform(e));
} finally {
if(gzin != null) {
try {
gzin.close();
} catch (IOException e) {
e.printStackTrace();
log.error("gzin关闭错误:", e);
} }
} }
if (response != null) { try {
response.close(); Thread.sleep(SLEEP_WAIT);
} catch (InterruptedException e) {
jobAccountLog.setMessage("线程异常"+ ExceptionUtil.transform(e));
e.printStackTrace();
Thread.currentThread().interrupt();
} }
} }
} }
private String getReportLocation(String reportId, JobAccountLog jobAccountLog, AmazonAdAuth amazonAdAuth, String siteEn) { private String getReportLocation(String reportId, JobAccountLog jobAccountLog, AmazonAdAuth amazonAdAuth, String siteEn) {
Response response = null; Response response = null;
Request request = new Request.Builder()
.url(switchSiteUrl(siteEn, reportId) + reportId)
.addHeader("Authorization", amazonAdAuth.getAccessToken())
.addHeader("Amazon-Advertising-API-ClientId", amazonAdAuth.getClientId())
.addHeader("Amazon-Advertising-API-Scope", amazonAdAuth.getProfileId())
.addHeader("Content-Type", "application/json")
.build();
try{ try{
Request request = new Request.Builder()
.url(switchSiteUrl(siteEn, reportId) + reportId)
.addHeader("Authorization", amazonAdAuth.getAccessToken())
.addHeader("Amazon-Advertising-API-ClientId", amazonAdAuth.getClientId())
.addHeader("Amazon-Advertising-API-Scope", amazonAdAuth.getProfileId())
.addHeader("Content-Type", "application/json")
.build();
response = client.newCall(request).execute(); response = client.newCall(request).execute();
if (response.isSuccessful()) { if (response.isSuccessful()) {
AmazonAdReportLocationResult reportLocationResult = JSON.parseObject(response.body().string(), AmazonAdReportLocationResult.class); AmazonAdReportLocationResult reportLocationResult = JSON.parseObject(response.body().string(), AmazonAdReportLocationResult.class);
if (reportLocationResult.getStatus().equals("SUCCESS")) { if (reportLocationResult.getStatus().equals("SUCCESS")) {
return reportLocationResult.getLocation(); return reportLocationResult.getLocation();
} }
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
jobAccountLog.setMessage("线程异常"+ ExceptionUtil.transform(e));
e.printStackTrace();
Thread.currentThread().interrupt();
}
return getReportLocation(reportId, jobAccountLog, amazonAdAuth, siteEn);
} else { } else {
String s = response.body().string(); String s = response.body().string();
log.warn("获取报告下载地址不成功:" + s); log.warn("获取报告下载地址不成功:" + s);
...@@ -271,7 +274,14 @@ public class AmazonAdProductJob extends PointJob { ...@@ -271,7 +274,14 @@ public class AmazonAdProductJob extends PointJob {
response.close(); response.close();
} }
} }
return null; try {
Thread.sleep(60000);
} catch (InterruptedException e) {
jobAccountLog.setMessage("线程异常" + ExceptionUtil.transform(e));
e.printStackTrace();
Thread.currentThread().interrupt();
}
return getReportLocation(reportId, jobAccountLog, amazonAdAuth, siteEn);
} }
private String postReportId(JobAccountLog jobAccountLog, AmazonAdAuth amazonAdAuth, String siteEn) { private String postReportId(JobAccountLog jobAccountLog, AmazonAdAuth amazonAdAuth, String siteEn) {
......
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