Commit 8866309e by wutong

修复流未及时关闭和亚马逊时间参数问题

parent d4dcf7f4
......@@ -32,8 +32,11 @@ import org.apache.commons.lang3.StringUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.zip.GZIPInputStream;
......@@ -175,35 +178,48 @@ public class AmazonAdProductJob extends PointJob {
GZIPInputStream gzin = new GZIPInputStream(response.body().byteStream());
InputStreamReader isr = new InputStreamReader(gzin, "utf8");
BufferedReader bufferedReader = new BufferedReader(isr);
String str = null;
StringBuffer sb = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) {
sb.append(str);
}
List<AmazonAdProduct> amazonAdProductList = JSON.parseArray(sb.toString(), AmazonAdProduct.class);
if (amazonAdProductList != null && amazonAdProductList.size() > 0) {
DcBaseFinanceAmazonAdProduct dcBaseFinanceAmazonAdProduct = new DcBaseFinanceAmazonAdProduct();
DcBaseFinanceAmazonAdProductMapper mapper = SessionUtil.getSession().getMapper(DcBaseFinanceAmazonAdProductMapper.class);
for (AmazonAdProduct amazonAdvert : amazonAdProductList) {
if (BigDecimal.ZERO.compareTo(amazonAdvert.getCost()) != 0) {
BeanUtils.copyProperties(dcBaseFinanceAmazonAdProduct, amazonAdvert);
dcBaseFinanceAmazonAdProduct.setAccountId(jobAccountLog.getAccountId());
dcBaseFinanceAmazonAdProduct.setCompanyId(jobAccountLog.getCompanyId());
dcBaseFinanceAmazonAdProduct.setReportDate(jobAccountLog.getStartTime().toLocalDate());
dcBaseFinanceAmazonAdProduct.setExchangeRate(CallBailunSystem.getExchangeRate(dcBaseFinanceAmazonAdProduct.getCurrency(), CurrencyType.CNY.value(), jobAccountLog.getStartTime()));
dcBaseFinanceAmazonAdProduct.setExchangeRateUsd(CallBailunSystem.getExchangeRate(dcBaseFinanceAmazonAdProduct.getCurrency(), CurrencyType.USD.value(), jobAccountLog.getStartTime()));
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();
int i = mapper.updateByExampleSelective(dcBaseFinanceAmazonAdProduct,example);
if (i == 0) {
mapper.insertSelective(dcBaseFinanceAmazonAdProduct);
String str = null;
try {
while ((str = bufferedReader.readLine()) != null) {
sb.append(str);
}
List<AmazonAdProduct> amazonAdProductList = JSON.parseArray(sb.toString(), AmazonAdProduct.class);
if (amazonAdProductList != null && amazonAdProductList.size() > 0) {
DcBaseFinanceAmazonAdProduct dcBaseFinanceAmazonAdProduct = new DcBaseFinanceAmazonAdProduct();
DcBaseFinanceAmazonAdProductMapper mapper = SessionUtil.getSession().getMapper(DcBaseFinanceAmazonAdProductMapper.class);
for (AmazonAdProduct amazonAdvert : amazonAdProductList) {
if (BigDecimal.ZERO.compareTo(amazonAdvert.getCost()) != 0) {
BeanUtils.copyProperties(dcBaseFinanceAmazonAdProduct, amazonAdvert);
dcBaseFinanceAmazonAdProduct.setAccountId(jobAccountLog.getAccountId());
dcBaseFinanceAmazonAdProduct.setCompanyId(jobAccountLog.getCompanyId());
dcBaseFinanceAmazonAdProduct.setReportDate(jobAccountLog.getStartTime().toLocalDate());
dcBaseFinanceAmazonAdProduct.setExchangeRate(CallBailunSystem.getExchangeRate(dcBaseFinanceAmazonAdProduct.getCurrency(), CurrencyType.CNY.value(), jobAccountLog.getStartTime()));
dcBaseFinanceAmazonAdProduct.setExchangeRateUsd(CallBailunSystem.getExchangeRate(dcBaseFinanceAmazonAdProduct.getCurrency(), CurrencyType.USD.value(), jobAccountLog.getStartTime()));
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();
int i = mapper.updateByExampleSelective(dcBaseFinanceAmazonAdProduct,example);
if (i == 0) {
mapper.insertSelective(dcBaseFinanceAmazonAdProduct);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
jobAccountLog.setMessage("解析Gzip格式的Report错误:" + ExceptionUtil.transform(e));
} finally {
bufferedReader.close();
isr.close();
gzin.close();
}
gzin.close();
isr.close();
jobAccountLog.setStartTime(jobAccountLog.getEndTime());
/*
* 今天只能拿到昨天的广告费, 不然不完整
* 如果开始时间比今天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("执行成功");
} else {
......
......@@ -12,7 +12,9 @@ import com.dangdang.ddframe.job.executor.ShardingContexts;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
......@@ -42,9 +44,9 @@ public class AmazonAdProductTest {
public void test2() {
AmazonAdProductJob amazonAdProductJob = new AmazonAdProductJob();
JobAccountLogMapper mapper = SessionUtil.getSession().getMapper(JobAccountLogMapper.class);
JobAccountLog dcBaseCompanyAccount = mapper.selectOneByExample(JobAccountLogExample.newAndCreateCriteria().andAccountIdEqualTo(572).example());
dcBaseCompanyAccount.setStartTime(LocalDateTime.of(2019, 5, 21, 0, 0));
dcBaseCompanyAccount.setEndTime(LocalDateTime.of(2019, 5, 22, 0, 0));
JobAccountLog dcBaseCompanyAccount = mapper.selectOneByExample(JobAccountLogExample.newAndCreateCriteria().andAccountIdEqualTo(785).example());
dcBaseCompanyAccount.setStartTime(LocalDateTime.of(2019, 7, 24, 10, 0));
dcBaseCompanyAccount.setEndTime(LocalDateTime.of(2019, 7, 24, 11, 0));
while (dcBaseCompanyAccount.getStartTime().isBefore(LocalDateTime.now().plusDays(1L))) {
try {
Thread.sleep(10000);
......
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