Commit bfa9e6b7 by huluobin

亚马逊广告

parent ce253bdd
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
[Ebay费用开发文档](https://developer.ebay.com/api-docs/developer/analytics/overview.html) [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)
### 解释说明 ### 解释说明
...@@ -107,4 +107,4 @@ ...@@ -107,4 +107,4 @@
|-finance-balance-sheet 资产负债表 |-finance-balance-sheet 资产负债表
|-data-show show-数据价值展现 |-data-show show-数据价值展现
|-show-auto-turnover 自动周转逻辑 |-show-auto-turnover 自动周转逻辑
``` ```
\ No newline at end of file
...@@ -37,17 +37,25 @@ public class Application { ...@@ -37,17 +37,25 @@ public class Application {
} }
private static LiteJobConfiguration createJobConfiguration1() { 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()); SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, AmazonAdGenerateReportIdJob.class.getCanonicalName());
LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build(); return LiteJobConfiguration.newBuilder(simpleJobConfig).build();
return simpleJobRootConfig;
} }
private static LiteJobConfiguration createJobConfiguration2() { 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()); SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, AmazonAdDownloadReportJob.class.getCanonicalName());
LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build(); return LiteJobConfiguration.newBuilder(simpleJobConfig).build();
return simpleJobRootConfig;
} }
private static JobEventConfiguration createJobEventConfiguration() { private static JobEventConfiguration createJobEventConfiguration() {
......
package com.bailuntec.job; package com.bailuntec.job;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.util.IOUtils;
import com.bailuntec.domain.entity.DcBaseCompanyAccount; import com.bailuntec.domain.entity.DcBaseCompanyAccount;
import com.bailuntec.domain.entity.DcBaseFinanceAmazonAdProduct; import com.bailuntec.domain.entity.DcBaseFinanceAmazonAdProduct;
import com.bailuntec.domain.entity.JobAmazonAdLog; import com.bailuntec.domain.entity.JobAmazonAdLog;
...@@ -31,6 +32,7 @@ import java.io.InputStreamReader; ...@@ -31,6 +32,7 @@ import java.io.InputStreamReader;
import java.io.Reader; import java.io.Reader;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.zip.GZIPInputStream; import java.util.zip.GZIPInputStream;
...@@ -61,7 +63,7 @@ public class AmazonAdDownloadReportJob implements SimpleJob { ...@@ -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; Response response = null;
GZIPInputStream gzin = null; GZIPInputStream gzin = null;
Request request = new Request.Builder() Request request = new Request.Builder()
...@@ -76,13 +78,13 @@ public class AmazonAdDownloadReportJob implements SimpleJob { ...@@ -76,13 +78,13 @@ public class AmazonAdDownloadReportJob implements SimpleJob {
try { try {
response = client.newCall(request).execute(); response = client.newCall(request).execute();
if (response.isSuccessful()) { if (response.isSuccessful()) {
//注意这个接口是必须用gzip
gzin = new GZIPInputStream(response.body().byteStream()); gzin = new GZIPInputStream(response.body().byteStream());
log.warn("开始解析账号Id为" + jobAmazonAdLog.getAccountId() + "的Report----" + jobAmazonAdLog.getReportId() + ", 文件大小为" + response.body().contentLength()); log.warn("开始解析账号Id为" + jobAmazonAdLog.getAccountId() + "的Report----" + jobAmazonAdLog.getReportId() + ", 文件大小为" + response.body().contentLength());
Gson gson = new Gson(); Gson gson = new Gson();
Reader reader = new InputStreamReader(response.body().byteStream());
Type type = new TypeToken<List<AmazonAdProduct>>() { Type type = new TypeToken<List<AmazonAdProduct>>() {
}.getType(); }.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解析完成"); log.warn("账号Id" + jobAmazonAdLog.getAccountId() + "的Report解析完成");
gzin.close(); gzin.close();
response.close(); response.close();
...@@ -137,7 +139,7 @@ public class AmazonAdDownloadReportJob implements SimpleJob { ...@@ -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); DcBaseCompanyAccount dcBaseCompanyAccount = getToken(jobAmazonAdLog);
AmazonAdAuth amazonAdAuth = JSON.parseObject(dcBaseCompanyAccount.getAmazonAdAuthJson(), AmazonAdAuth.class); AmazonAdAuth amazonAdAuth = JSON.parseObject(dcBaseCompanyAccount.getAmazonAdAuthJson(), AmazonAdAuth.class);
handleReport(jobAmazonAdLog, amazonAdAuth, shardParam); handleReport(jobAmazonAdLog, amazonAdAuth, shardParam);
...@@ -145,14 +147,22 @@ public class AmazonAdDownloadReportJob implements SimpleJob { ...@@ -145,14 +147,22 @@ public class AmazonAdDownloadReportJob implements SimpleJob {
private DcBaseCompanyAccount getToken(JobAmazonAdLog jobAmazonAdLog) { private DcBaseCompanyAccount getToken(JobAmazonAdLog jobAmazonAdLog) {
DcBaseCompanyAccountMapper mapper = SessionUtil.getSession().getMapper(DcBaseCompanyAccountMapper.class); 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) { private List<JobAmazonAdLog> findJobAmazonAdLogList(ShardingContext shardingContext, int pageSize) {
try { try {
JobAmazonAdLogMapper mapper = SessionUtil.getSession().getMapper(JobAmazonAdLogMapper.class); 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) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return null; return null;
...@@ -164,7 +174,8 @@ public class AmazonAdDownloadReportJob implements SimpleJob { ...@@ -164,7 +174,8 @@ public class AmazonAdDownloadReportJob implements SimpleJob {
private int countJobAmazonAdLog() { private int countJobAmazonAdLog() {
try { try {
JobAmazonAdLogMapper mapper = SessionUtil.getSession().getMapper(JobAmazonAdLogMapper.class); 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) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return 0; return 0;
......
...@@ -9,8 +9,11 @@ EVENT_RDB_STORAGE_USERNAME=root ...@@ -9,8 +9,11 @@ EVENT_RDB_STORAGE_USERNAME=root
EVENT_RDB_STORAGE_PASSWORD=#7kfnymAM$Y9-Ntf EVENT_RDB_STORAGE_PASSWORD=#7kfnymAM$Y9-Ntf
ZOOKEEPER_SERVER=172.31.255.120:2181 ZOOKEEPER_SERVER=172.31.255.120:2181
NAME_SPACE=data-center 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_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_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 SHARDING_TOTAL_COUNT=2
import com.bailuntec.domain.entity.JobAccountLog; import com.bailuntec.domain.entity.JobAccountLog;
import com.bailuntec.domain.entity.JobAmazonAdLog; import com.bailuntec.domain.entity.JobAmazonAdLog;
import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.domain.example.JobAmazonAdLogExample; import com.bailuntec.domain.example.JobAmazonAdLogExample;
import com.bailuntec.job.AmazonAdDownloadReportJob;
import com.bailuntec.job.AmazonAdGenerateReportIdJob;
import com.bailuntec.mapper.JobAmazonAdLogMapper; import com.bailuntec.mapper.JobAmazonAdLogMapper;
import com.bailuntec.utils.SessionUtil; 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 lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List; import java.util.List;
@Slf4j @Slf4j
...@@ -20,10 +26,10 @@ public class AmazonAdProductTest { ...@@ -20,10 +26,10 @@ public class AmazonAdProductTest {
Method generateReportId = clazz.getDeclaredMethod("generateReportId", JobAccountLog.class); Method generateReportId = clazz.getDeclaredMethod("generateReportId", JobAccountLog.class);
generateReportId.setAccessible(true); generateReportId.setAccessible(true);
JobAccountLog jobAccountLog = new JobAccountLog(); JobAccountLog jobAccountLog = new JobAccountLog();
jobAccountLog.setStartTime(LocalDateTime.of(2019, 5, 31, 0, 0)); jobAccountLog.setStartTime(LocalDateTime.of(2020, 8, 17, 0, 0));
jobAccountLog.setEndTime(LocalDateTime.of(2019, 6, 1, 0, 0)); jobAccountLog.setEndTime(LocalDateTime.of(2020, 8, 18, 0, 0));
jobAccountLog.setCompanyId(1); jobAccountLog.setCompanyId(1);
jobAccountLog.setAccountId(572); jobAccountLog.setAccountId(1779);
jobAccountLog.setIntervalTime(1); jobAccountLog.setIntervalTime(1);
jobAccountLog.setJobName("base-amazon-ad-product-generate"); jobAccountLog.setJobName("base-amazon-ad-product-generate");
generateReportId.invoke(clazz.newInstance(), jobAccountLog); generateReportId.invoke(clazz.newInstance(), jobAccountLog);
...@@ -37,7 +43,13 @@ public class AmazonAdProductTest { ...@@ -37,7 +43,13 @@ public class AmazonAdProductTest {
generateReportId.setAccessible(true); generateReportId.setAccessible(true);
try { try {
JobAmazonAdLogMapper mapper = SessionUtil.getSession().getMapper(JobAmazonAdLogMapper.class); 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()) { if (jobAmazonAdLogList != null && !jobAmazonAdLogList.isEmpty()) {
for (JobAmazonAdLog jobAmazonAdLog : jobAmazonAdLogList) { for (JobAmazonAdLog jobAmazonAdLog : jobAmazonAdLogList) {
generateReportId.invoke(clazz.newInstance(), jobAmazonAdLog); generateReportId.invoke(clazz.newInstance(), jobAmazonAdLog);
...@@ -58,7 +70,15 @@ public class AmazonAdProductTest { ...@@ -58,7 +70,15 @@ public class AmazonAdProductTest {
generateReportId.setAccessible(true); generateReportId.setAccessible(true);
try { try {
JobAmazonAdLogMapper mapper = SessionUtil.getSession().getMapper(JobAmazonAdLogMapper.class); 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()) { if (jobAmazonAdLogList != null && !jobAmazonAdLogList.isEmpty()) {
for (JobAmazonAdLog jobAmazonAdLog : jobAmazonAdLogList) { for (JobAmazonAdLog jobAmazonAdLog : jobAmazonAdLogList) {
generateReportId.invoke(clazz.newInstance(), jobAmazonAdLog); generateReportId.invoke(clazz.newInstance(), jobAmazonAdLog);
...@@ -71,4 +91,40 @@ public class AmazonAdProductTest { ...@@ -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 { ...@@ -63,7 +63,9 @@ public class CompanyAccountSyncJob extends PointJob {
for (CompanyAccountInfo companyAccountInfo : result) { for (CompanyAccountInfo companyAccountInfo : result) {
BeanUtils.copyProperties(dcBaseCompanyAccount, companyAccountInfo); BeanUtils.copyProperties(dcBaseCompanyAccount, companyAccountInfo);
dcBaseCompanyAccount.setBjModified(LocalDateTime.now()); 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) { if (i == 0) {
mapper.insertSelective(dcBaseCompanyAccount); 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_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_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_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_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_URL=http://wms.bailuntec.com/api/services/app/LogisticsReconciliationService/GetNormalDataQuery
LOGISTICS_WMS_RECONCILIATION_URL=http://wms.bailuntec.com/api/services/app/LogisticsReconciliationService/GetBaseDataQuery LOGISTICS_WMS_RECONCILIATION_URL=http://wms.bailuntec.com/api/services/app/LogisticsReconciliationService/GetBaseDataQuery
\ No newline at end of file
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 { ...@@ -136,6 +136,7 @@ public interface DcMidTransitMapper {
List<OutStockQuantity> selectQuantityOutStock(); List<OutStockQuantity> selectQuantityOutStock();
List<PurchaseTransitQuantity> selectQuantityPurchaseTransit(); List<PurchaseTransitQuantity> selectQuantityPurchaseTransit();
List<TransferTransitQuantity> selectQuantityTransferTransit(); List<TransferTransitQuantity> selectQuantityTransferTransit();
void calculateOutStock(@Param("list") List<OutStockQuantity> list, @Param("localDateTime") LocalDateTime localDateTime); void calculateOutStock(@Param("list") List<OutStockQuantity> list, @Param("localDateTime") LocalDateTime localDateTime);
...@@ -157,4 +158,4 @@ public interface DcMidTransitMapper { ...@@ -157,4 +158,4 @@ public interface DcMidTransitMapper {
void calculateUnshipped(); void calculateUnshipped();
void updateSkuUnitPrice(); void updateSkuUnitPrice();
} }
\ No newline at end of file
...@@ -34,3 +34,5 @@ ...@@ -34,3 +34,5 @@
</root> </root>
</configuration> </configuration>
...@@ -51,7 +51,14 @@ public class CalculateCostFirstJob extends PointJob { ...@@ -51,7 +51,14 @@ public class CalculateCostFirstJob extends PointJob {
if (channelOrderIdList != null && channelOrderIdList.size() > 0) { if (channelOrderIdList != null && channelOrderIdList.size() > 0) {
for (CostFirstOrder costFirstOrder : channelOrderIdList) { for (CostFirstOrder costFirstOrder : channelOrderIdList) {
DcBaseCostFirstMapper dcBaseCostFirstMapperFor = SessionUtil.getSession().getMapper(DcBaseCostFirstMapper.class); 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); handleChannelOrderSku(dcBaseCostFirsts);
dcBaseCostFirstMapperFor = SessionUtil.getSession().getMapper(DcBaseCostFirstMapper.class); dcBaseCostFirstMapperFor = SessionUtil.getSession().getMapper(DcBaseCostFirstMapper.class);
dcBaseCostFirstMapperFor.updateHasCalculation(costFirstOrder); dcBaseCostFirstMapperFor.updateHasCalculation(costFirstOrder);
...@@ -95,7 +102,9 @@ public class CalculateCostFirstJob extends PointJob { ...@@ -95,7 +102,9 @@ public class CalculateCostFirstJob extends PointJob {
// 头程费 = (调拨计算头程费+配置头程费)/2 平均值 // 头程费 = (调拨计算头程费+配置头程费)/2 平均值
dcMidCostFirst.setCostFirst((costFirst.add(dcMidCostFirstConfig.getCostFirstConfig())).divide(BigDecimal.valueOf(2), 3, RoundingMode.HALF_EVEN)); 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) { if (i == 0) {
dcMidCostFirsMapper.insertSelective(dcMidCostFirst); 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_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_USERNAME=root
EVENT_RDB_STORAGE_PASSWORD=#7kfnymAM$Y9-Ntf EVENT_RDB_STORAGE_PASSWORD=123456
ZOOKEEPER_SERVER=172.31.255.120:2181 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 NAME_SPACE=data-center
JOB_NAME=mid-calculate-cost-first JOB_NAME=mid-calculate-cost-first
JOB_CRON=0 33 7,12,20 * * ? * JOB_CRON=0 33 7,12,20 * * ? *
SHARDING_TOTAL_COUNT=1 SHARDING_TOTAL_COUNT=1
\ No newline at end of file
import com.bailuntec.domain.constant.Constant; import com.bailuntec.domain.constant.Constant;
import com.bailuntec.domain.entity.DcBaseCostFirst;
import com.bailuntec.domain.entity.DcBaseSku; import com.bailuntec.domain.entity.DcBaseSku;
import com.bailuntec.domain.entity.DcMidCostFirst; import com.bailuntec.domain.entity.DcMidCostFirst;
import com.bailuntec.domain.entity.DcMidCostFirstConfig; 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.DcBaseSkuExample;
import com.bailuntec.domain.example.DcMidCostFirstExample; import com.bailuntec.domain.example.DcMidCostFirstExample;
import com.bailuntec.domain.pojo.CostFirstOrder;
import com.bailuntec.domain.pojo.MidCostFirst; import com.bailuntec.domain.pojo.MidCostFirst;
import com.bailuntec.job.CalculateCostFirstJob; import com.bailuntec.job.CalculateCostFirstJob;
import com.bailuntec.listener.CalculateCostFirstListener; import com.bailuntec.mapper.DcBaseSkuMapper;
import com.bailuntec.mapper.*; import com.bailuntec.mapper.DcMidCostFirstConfigMapper;
import com.bailuntec.mapper.DcMidCostFirstMapper;
import com.bailuntec.mapper.DcMidCostFirstOrderMapper;
import com.bailuntec.utils.SessionUtil; import com.bailuntec.utils.SessionUtil;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
...@@ -22,8 +22,7 @@ public class CostFirstTest { ...@@ -22,8 +22,7 @@ public class CostFirstTest {
@Test @Test
public void test11() public void test11() {
{
try { try {
DcBaseSkuMapper dcBaseSkuMapper = SessionUtil.getSession().getMapper(DcBaseSkuMapper.class); DcBaseSkuMapper dcBaseSkuMapper = SessionUtil.getSession().getMapper(DcBaseSkuMapper.class);
DcBaseSku dcBaseSku = dcBaseSkuMapper.selectOneByExample(DcBaseSkuExample.newAndCreateCriteria().andBailunSkuEqualTo("S31").example()); DcBaseSku dcBaseSku = dcBaseSkuMapper.selectOneByExample(DcBaseSkuExample.newAndCreateCriteria().andBailunSkuEqualTo("S31").example());
...@@ -38,30 +37,11 @@ public class CostFirstTest { ...@@ -38,30 +37,11 @@ public class CostFirstTest {
@Test @Test
public void test() { public void test() {
CalculateCostFirstJob costFirstJob = new CalculateCostFirstJob(); CalculateCostFirstJob costFirstJob = new CalculateCostFirstJob();
try { costFirstJob.executeJob(null, new JobPointLog("dc-mid-calculate-cost-first", 1, 100, null, null, null, null));
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);
} }
@Test @Test
public void test1() { public void test1() {
try { try {
DcMidCostFirstOrderMapper dcMidCostFirstOrderMapper = SessionUtil.getSession().getMapper(DcMidCostFirstOrderMapper.class); DcMidCostFirstOrderMapper dcMidCostFirstOrderMapper = SessionUtil.getSession().getMapper(DcMidCostFirstOrderMapper.class);
DcMidCostFirstConfigMapper dcMidCostFirstConfigMapper = SessionUtil.getSession().getMapper(DcMidCostFirstConfigMapper.class); DcMidCostFirstConfigMapper dcMidCostFirstConfigMapper = SessionUtil.getSession().getMapper(DcMidCostFirstConfigMapper.class);
...@@ -70,14 +50,14 @@ public class CostFirstTest { ...@@ -70,14 +50,14 @@ public class CostFirstTest {
int skuWarehouseTotalPage = getSkuWarehouseTotalPage(countSkuWarehouse); int skuWarehouseTotalPage = getSkuWarehouseTotalPage(countSkuWarehouse);
int index = 0; int index = 0;
do { 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) { if (midCostFirstList != null && midCostFirstList.size() > 0) {
DcMidCostFirst dcMidCostFirst = new DcMidCostFirst(); DcMidCostFirst dcMidCostFirst = new DcMidCostFirst();
for (MidCostFirst midCostFirst : midCostFirstList) { for (MidCostFirst midCostFirst : midCostFirstList) {
dcMidCostFirst.setBailunSku(midCostFirst.getBailunSku()); dcMidCostFirst.setBailunSku(midCostFirst.getBailunSku());
dcMidCostFirst.setWarehouseCode(midCostFirst.getWarehouseCode()); dcMidCostFirst.setWarehouseCode(midCostFirst.getWarehouseCode());
BigDecimal costFirst = midCostFirst.getTotalCostFirst().divide(BigDecimal.valueOf(midCostFirst.getTotalCount()), 3 , RoundingMode.HALF_EVEN); BigDecimal costFirst = midCostFirst.getTotalCostFirst().divide(BigDecimal.valueOf(midCostFirst.getTotalCount()), 3, RoundingMode.HALF_EVEN);
DcMidCostFirstConfig dcMidCostFirstConfig = dcMidCostFirstConfigMapper.getConfig(dcMidCostFirst.getBailunSku(),dcMidCostFirst.getWarehouseCode()); DcMidCostFirstConfig dcMidCostFirstConfig = dcMidCostFirstConfigMapper.getConfig(dcMidCostFirst.getBailunSku(), dcMidCostFirst.getWarehouseCode());
dcMidCostFirst.setCostFirst(costFirst); dcMidCostFirst.setCostFirst(costFirst);
if (dcMidCostFirstConfig != null) { if (dcMidCostFirstConfig != null) {
dcMidCostFirst.setCostFirst((costFirst.add(dcMidCostFirstConfig.getCostFirstConfig())).divide(BigDecimal.valueOf(2), 3, RoundingMode.HALF_EVEN)); dcMidCostFirst.setCostFirst((costFirst.add(dcMidCostFirstConfig.getCostFirstConfig())).divide(BigDecimal.valueOf(2), 3, RoundingMode.HALF_EVEN));
...@@ -96,6 +76,7 @@ public class CostFirstTest { ...@@ -96,6 +76,7 @@ public class CostFirstTest {
SessionUtil.closeSession(); SessionUtil.closeSession();
} }
} }
private int getSkuWarehouseTotalPage(int countSkuWarehouse) { private int getSkuWarehouseTotalPage(int countSkuWarehouse) {
if (countSkuWarehouse % Constant.PAGE_SIZE == 0) { if (countSkuWarehouse % Constant.PAGE_SIZE == 0) {
return countSkuWarehouse / Constant.PAGE_SIZE; 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