Commit 8866309e by wutong

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

parent d4dcf7f4
...@@ -32,8 +32,11 @@ import org.apache.commons.lang3.StringUtils; ...@@ -32,8 +32,11 @@ import org.apache.commons.lang3.StringUtils;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
import java.util.zip.GZIPInputStream; import java.util.zip.GZIPInputStream;
...@@ -175,35 +178,48 @@ public class AmazonAdProductJob extends PointJob { ...@@ -175,35 +178,48 @@ public class AmazonAdProductJob extends PointJob {
GZIPInputStream gzin = new GZIPInputStream(response.body().byteStream()); GZIPInputStream gzin = new GZIPInputStream(response.body().byteStream());
InputStreamReader isr = new InputStreamReader(gzin, "utf8"); InputStreamReader isr = new InputStreamReader(gzin, "utf8");
BufferedReader bufferedReader = new BufferedReader(isr); BufferedReader bufferedReader = new BufferedReader(isr);
String str = null;
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) { String str = null;
sb.append(str); try {
} while ((str = bufferedReader.readLine()) != null) {
List<AmazonAdProduct> amazonAdProductList = JSON.parseArray(sb.toString(), AmazonAdProduct.class); sb.append(str);
if (amazonAdProductList != null && amazonAdProductList.size() > 0) { }
DcBaseFinanceAmazonAdProduct dcBaseFinanceAmazonAdProduct = new DcBaseFinanceAmazonAdProduct(); List<AmazonAdProduct> amazonAdProductList = JSON.parseArray(sb.toString(), AmazonAdProduct.class);
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 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.setEndTime(jobAccountLog.getStartTime().plusDays(jobAccountLog.getIntervalTime()).isAfter(LocalDateTime.now()) ? LocalDateTime.now() : jobAccountLog.getEndTime().plusDays(jobAccountLog.getIntervalTime()));
jobAccountLog.setMessage("执行成功"); jobAccountLog.setMessage("执行成功");
} else { } else {
......
...@@ -12,7 +12,9 @@ import com.dangdang.ddframe.job.executor.ShardingContexts; ...@@ -12,7 +12,9 @@ import com.dangdang.ddframe.job.executor.ShardingContexts;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.HashMap; import java.util.HashMap;
...@@ -42,9 +44,9 @@ public class AmazonAdProductTest { ...@@ -42,9 +44,9 @@ public class AmazonAdProductTest {
public void test2() { public void test2() {
AmazonAdProductJob amazonAdProductJob = new AmazonAdProductJob(); AmazonAdProductJob amazonAdProductJob = new AmazonAdProductJob();
JobAccountLogMapper mapper = SessionUtil.getSession().getMapper(JobAccountLogMapper.class); JobAccountLogMapper mapper = SessionUtil.getSession().getMapper(JobAccountLogMapper.class);
JobAccountLog dcBaseCompanyAccount = mapper.selectOneByExample(JobAccountLogExample.newAndCreateCriteria().andAccountIdEqualTo(572).example()); JobAccountLog dcBaseCompanyAccount = mapper.selectOneByExample(JobAccountLogExample.newAndCreateCriteria().andAccountIdEqualTo(785).example());
dcBaseCompanyAccount.setStartTime(LocalDateTime.of(2019, 5, 21, 0, 0)); dcBaseCompanyAccount.setStartTime(LocalDateTime.of(2019, 7, 24, 10, 0));
dcBaseCompanyAccount.setEndTime(LocalDateTime.of(2019, 5, 22, 0, 0)); dcBaseCompanyAccount.setEndTime(LocalDateTime.of(2019, 7, 24, 11, 0));
while (dcBaseCompanyAccount.getStartTime().isBefore(LocalDateTime.now().plusDays(1L))) { while (dcBaseCompanyAccount.getStartTime().isBefore(LocalDateTime.now().plusDays(1L))) {
try { try {
Thread.sleep(10000); 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