SampleTest.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. package org.jeecg;
  2. import cn.com.ctop.common.module.entity.BindAccountLogin;
  3. import cn.com.ctop.common.module.entity.CtopOauthToken;
  4. import cn.com.ctop.common.module.entity.OauthAgentToken;
  5. import cn.com.ctop.common.module.service.IBindAccountLoginService;
  6. import cn.com.ctop.common.module.service.ICtopOauthTokenService;
  7. import cn.com.ctop.common.module.service.IOauthAgentTokenService;
  8. import cn.com.ctop.common.module.service.ISendMessageService;
  9. import cn.com.ctop.common.module.utils.Check;
  10. import cn.com.ctop.common.module.utils.CtopAdConstant;
  11. import cn.com.ctop.kuaishou.modules.ai.entity.AiKuaishouUnitLevelOperationRecord;
  12. import cn.com.ctop.kuaishou.modules.ai.mapper.AiKuaishouUnitLevelOperationRecordMapper;
  13. import cn.com.ctop.kuaishou.modules.batch.entity.KuaishouOperationRecord;
  14. import cn.com.ctop.kuaishou.modules.batch.mapper.KuaishouOperationRecordMapper;
  15. import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouReportDailyMaterialService;
  16. import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
  17. import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService2;
  18. import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouProgramCreativeService;
  19. import cn.com.ctop.kuaishou.modules.dimension.service.IKuaiShouDimensionStrategyService;
  20. import cn.com.ctop.kuaishou.modules.dimension.service.IKuaiShouDimensionVariableService;
  21. import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService;
  22. import cn.com.ctop.kuaishou.modules.material.service.IEtlKuaishouVideoInfoService;
  23. import cn.com.ctop.kuaishou.modules.report.mapper.EtlKuaishouAccountMaterialReportDailyMapper;
  24. import cn.com.ctop.kuaishou.modules.report.mapper.KuaiShouDailyAgentMapper;
  25. import cn.com.ctop.kuaishou.modules.report.service.IKuaishouAudienceReportDailyService;
  26. import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportDailyImageService;
  27. import cn.com.ctop.kuaishou.modules.report.service.IRuleKuaiShouPlanService;
  28. import cn.com.ctop.oa.modules.service.IWechatNoListService;
  29. import cn.com.ctop.toutiao.modules.link.service.IETLReportBytedanceVideoService;
  30. import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
  31. import cn.com.ctop.toutiao.modules.report.entity.BytedanceCheckReportTaskInfo;
  32. import cn.com.ctop.toutiao.modules.report.service.*;
  33. import com.alibaba.fastjson.JSONArray;
  34. import com.alibaba.fastjson.JSONObject;
  35. import com.xxl.job.core.context.XxlJobHelper;
  36. import lombok.extern.slf4j.Slf4j;
  37. import org.jeecg.common.util.DateUtils;
  38. import org.junit.Test;
  39. import org.junit.runner.RunWith;
  40. import org.springframework.beans.factory.annotation.Autowired;
  41. import org.springframework.boot.test.context.SpringBootTest;
  42. import org.springframework.test.context.ActiveProfiles;
  43. import org.springframework.test.context.junit4.SpringRunner;
  44. import javax.annotation.Resource;
  45. import java.text.ParseException;
  46. import java.util.*;
  47. import java.util.concurrent.CountDownLatch;
  48. import java.util.concurrent.ExecutorService;
  49. import java.util.concurrent.Executors;
  50. @RunWith(SpringRunner.class)
  51. @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  52. @ActiveProfiles("wps")
  53. @Slf4j
  54. public class SampleTest {
  55. @Autowired
  56. private IBytedanceVideoEtlInfoService bytedanceVideoEtlInfoService;
  57. @Autowired
  58. IBytedanceVideoReportService bytedanceVideoReportService;
  59. @Autowired
  60. IETLReportBytedanceVideoService ietlReportBytedanceVideoService;
  61. @Autowired
  62. IKuaishouReportDailyImageService kuaishouReportDailyImageService;
  63. @Autowired
  64. IRuleByteDanceAccountService ruleByteDanceAccountService;
  65. @Autowired
  66. private ICtopOauthTokenService tokenService;
  67. @Autowired
  68. private IBindAccountLoginService bindAccountLoginService;
  69. @Autowired
  70. private IKuaishouWebInterfaceService kuaishouWebInterfaceService;
  71. @Autowired
  72. private IByteDanceAdvertiserDataService advertiserDataService;
  73. @Autowired
  74. private IWechatNoListService wechatNoListService;
  75. @Autowired
  76. private IETLReportBytedanceVideoService bytedanceVideoService;
  77. @Autowired
  78. private IByteDanceVideoReportDailyService videoReportDailyService;
  79. @Resource
  80. private EtlKuaishouAccountMaterialReportDailyMapper etlKuaishouAccountMaterialReportDailyMapper;
  81. @Autowired
  82. private IReportService reportService;
  83. @Resource
  84. private IBytedanceCheckReportTaskInfoService checkReportTaskInfoService;
  85. @Autowired
  86. private IEtlBytedanceReportVideoDailyService etlBytedanceReportVideoDailyService;
  87. static ExecutorService executorService = null;
  88. static CountDownLatch countDownLatch = null;
  89. @Autowired
  90. private IBytedanceReportService bytedanceReportService;
  91. @Autowired
  92. private IETLReportBytedanceVideoService etlReportBytedanceVideoService;
  93. @Autowired
  94. private IKuaishouInterfaceService iKuaishouInterfaceService;
  95. @Autowired
  96. private IKuaiShouDimensionVariableService kuaiShouDimensionVariableService;
  97. @Autowired
  98. private IKuaiShouDimensionStrategyService dimensionStrategyService;
  99. @Autowired
  100. private IKuaiShouDimensionVariableService dimensionVariableService;
  101. @Autowired
  102. IRuleKuaiShouPlanService ruleKuaiShouPlanService;
  103. @Autowired
  104. private ISendMessageService sendMessageService;
  105. @Autowired
  106. private IKuaishouProgramCreativeService kuaishouProgramCreativeService;
  107. @Autowired
  108. private IOauthAgentTokenService agentTokenService;
  109. @Autowired
  110. private KuaiShouDailyAgentMapper agentMapper;
  111. @Test
  112. public void loadKuaishouCookie() throws ParseException {
  113. List<Long> appList = new ArrayList<>();
  114. appList.add(27L);
  115. appList.add(165893351L);
  116. for (int i = 0; i < appList.size(); i++) {
  117. Long appId = appList.get(i);
  118. OauthAgentToken agentToken = agentTokenService.getTokenByAppId(appId);
  119. System.err.println(agentToken);
  120. // getAgentReport(agentToken.getAccessToken(), agentToken.getAgentId(), startDate, endDate, 1);
  121. }
  122. }
  123. @Test
  124. public void deleteKuaishouComment() {
  125. Long start = System.currentTimeMillis();
  126. List<BindAccountLogin> loginList = bindAccountLoginService.getListByParams(CtopAdConstant.PLATFORM_TYPE_KUAISHOU_PY, 1);
  127. if (loginList != null && !loginList.isEmpty()) {
  128. executorService = Executors.newFixedThreadPool(5);
  129. countDownLatch = new CountDownLatch(loginList.size());
  130. loginList.forEach(login -> executorService.submit(() -> {
  131. try {
  132. kuaishouWebInterfaceService.deleteAllComment(new HashMap<>(), login);
  133. } catch (Exception e) {
  134. log.error(e.getMessage(), e);
  135. } finally {
  136. countDownLatch.countDown();
  137. }
  138. }));
  139. try {
  140. countDownLatch.await();
  141. } catch (InterruptedException e) {
  142. e.printStackTrace();
  143. }
  144. Long end = System.currentTimeMillis();
  145. log.info("快手删评论所用时长:{}毫秒", end - start);
  146. }
  147. }
  148. @Test
  149. public void loadBytedanceVideoReportData() {
  150. CtopOauthToken token = tokenService.getTokenByAccountId(1696831659659278L);
  151. advertiserDataService.getMaterialList(token);
  152. }
  153. @Test
  154. public void etlBytedanceVideoInfo() {
  155. String startDate = "2021-02-01";
  156. for (int i = 0; i < 100; i++) {
  157. bytedanceVideoService.cleanData(DateUtils.addDay(startDate, i));
  158. }
  159. }
  160. @Test
  161. public void getData() {
  162. //汇创 人员
  163. // wechatUserInfoService.getUserList();
  164. // //考勤记录
  165. // wechatCheckinDataService.getCheckinData("2021-03-01 00:00:00", "2021-03-31 23:59:59");
  166. //异常记录
  167. wechatNoListService.getNoDateByNo("2021-03-01 00:00:00", "2021-03-31 23:59:59", "0");
  168. //优容
  169. // wechatUserInfoService.getYRUserList();
  170. // wechatCheckinDataService.getYRCheckinData("2021-03-01 00:00:00", "2021-03-31 23:59:59");
  171. wechatNoListService.getNoDateByNo("2021-03-01 00:00:00", "2021-03-31 23:59:59", "1");
  172. }
  173. @Test
  174. public void formatVideoReportData() {
  175. for (int i = 1; i < 45; i++) {
  176. Date getDate = DateUtils.addDay(new Date(), -i);
  177. String date = DateUtils.formatDate(getDate);
  178. videoReportDailyService.videoInfoList(date, date);
  179. }
  180. }
  181. @Test
  182. public void loadBDAccoutData() {
  183. Date startDate = DateUtils.addDay(new Date(), -2000);
  184. for (int i = 0; i <= 2000; i++) {
  185. Date getDate = DateUtils.addDay(startDate, i);
  186. bytedanceVideoEtlInfoService.etlBytedanceVideoInfo(getDate);
  187. }
  188. }
  189. @Test
  190. public void etlKuaishouVideoInfo() {
  191. etlKuaishouAccountMaterialReportDailyMapper.etlKuaishouAccountMaterialReportDailyData(DateUtils.formatDate());
  192. }
  193. @Test
  194. public void testLoadBytedanceCampaign() {
  195. CtopOauthToken token = tokenService.getTokenByAccountId(1681669009084429L);
  196. bytedanceReportService.bytedanceMaterialReport(token, "2021-05-01", "2021-05-06");
  197. }
  198. /*
  199. @Test
  200. public void etlBytedanceVideoReportInfo() throws Exception {
  201. etlBytedanceReportVideoDailyService.etlBytedanceVideo();
  202. }
  203. */
  204. @Test
  205. public void loadBytedanceAccountReport() {
  206. CtopOauthToken token1 = tokenService.getTokenByAccountId(1693648201498637L);
  207. reportService.getAdvertiserReport(token1, DateUtils.parseDate("2021-04-01", "yyyy-MM-dd"), DateUtils.parseDate("2021-04-12", "yyyy-MM-dd"), CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
  208. }
  209. @Test
  210. public void checkCostData() {
  211. String date = "2021-06-11";
  212. for (int i = 0; i < 7; i++) {
  213. String getDate = DateUtils.addDay(date, i);
  214. //1:初始化
  215. checkReportTaskInfoService.initTask(getDate);
  216. //2: checkCost
  217. List<BytedanceCheckReportTaskInfo> taskInfos = checkReportTaskInfoService.getListByParams(null, getDate, 0);
  218. if (null != taskInfos && !taskInfos.isEmpty()) {
  219. for (BytedanceCheckReportTaskInfo task : taskInfos) {
  220. checkReportTaskInfoService.checkCost(task);
  221. }
  222. log.info("{}:数据获取完成", getDate);
  223. }
  224. }
  225. }
  226. @Test
  227. public void refreshReportData() throws Exception {
  228. //1:查询异常任务数据
  229. List<BytedanceCheckReportTaskInfo> taskInfos = checkReportTaskInfoService.getListByParams(null, null, 50001);
  230. if (null != taskInfos && !taskInfos.isEmpty()) {
  231. countDownLatch = new CountDownLatch(taskInfos.size());
  232. taskInfos.forEach(taskInfo -> {
  233. try {
  234. checkReportTaskInfoService.reloadData(taskInfo);
  235. checkReportTaskInfoService.checkCost(taskInfo);
  236. } catch (Exception e) {
  237. } finally {
  238. countDownLatch.countDown();
  239. }
  240. });
  241. countDownLatch.await();
  242. XxlJobHelper.log("{}数据更新完成");
  243. }
  244. }
  245. /* @Test
  246. public void loadBkData(){
  247. Date startDate = DateUtils.addDay(new Date(),-60);
  248. for(int i=0;i<=60;i++){
  249. Date getDate = DateUtils.addDay(startDate,i);
  250. bytedanceVideoEtlInfoService.etlBytedanceVideoInfo(getDate);
  251. }
  252. }*/
  253. @Autowired
  254. private IEtlKuaishouVideoInfoService etlKuaishouVideoInfo;
  255. @Test
  256. public void loadkuaishouVideoData(){
  257. String startDate = "2021-05-07";
  258. for(int i=0;i<=60;i++){
  259. String getDate = DateUtils.formatDate(DateUtils.addDay(startDate,i));
  260. etlKuaishouVideoInfo.etlKuaishouVideoInfo(getDate);
  261. }
  262. }
  263. @Autowired
  264. private IKuaiShouReportDailyMaterialService kuaiShouReportDailyMaterialService;
  265. @Test
  266. public void loadKuaishouMatData() throws InterruptedException {
  267. String startDate = "2021-06-18";
  268. String endDate = "2021-06-24";
  269. //1:查询当日数据
  270. List<CtopOauthToken> tokens = tokenService.selectKuaiShouToken();
  271. countDownLatch = new CountDownLatch(tokens.size());
  272. tokens.forEach(token -> executorService.submit(() -> {
  273. try {
  274. kuaiShouReportDailyMaterialService.getMaterialReportByAccountIdAndStatDate(token.getAccountId(), token.getAccessToken(), startDate, endDate, "DAILY", 1);
  275. }catch (Exception e){
  276. }finally {
  277. countDownLatch.countDown();
  278. }
  279. }));
  280. countDownLatch.await();
  281. System.out.println("数据获取完成");
  282. }
  283. @Test
  284. public void loadKuaiShouMatHourlyData() throws InterruptedException{
  285. // kuaiShouReportDailyMaterialService.getMaterialReportByAccountIdAndStatDate(7411077l, tokenService.getOauthTokenByAccountId("7411077").getAccessToken(), "2021-07-02", "2021-07-02", "HOURLY", 1);
  286. String startDate = "2021-07-19";
  287. String endDate = "2021-07-19";
  288. System.out.println(DateUtils.now());
  289. List<CtopOauthToken> tokens = tokenService.selectKuaiShouToken();
  290. System.out.println(tokens.size());
  291. countDownLatch = new CountDownLatch(tokens.size());
  292. tokens.forEach(token -> executorService.submit(() -> {
  293. try {
  294. kuaiShouReportDailyMaterialService.getMaterialReportByAccountIdAndStatDate(token.getAccountId(), token.getAccessToken(), startDate, endDate, "HOURLY", 1);
  295. }catch (Exception e){
  296. }finally {
  297. countDownLatch.countDown();
  298. }
  299. }));
  300. countDownLatch.await();
  301. System.out.println("数据获取完成");
  302. System.out.println(DateUtils.now());
  303. }
  304. @Autowired
  305. IKuaishouInterfaceService2 kuaishouInterfaceService2;
  306. @Resource
  307. private KuaishouOperationRecordMapper kuaishouOperationRecordMapper;
  308. @Test
  309. public void dealOperationRecordData() throws InterruptedException {
  310. Date beginDate = DateUtils.parseDate("2020-04-28", "yyyy-MM-dd"); //chuangyi
  311. Date endDate = DateUtils.parseDate("2021-07-19", "yyyy-MM-dd");
  312. // Date beginDate = DateUtils.parseDate("2020-04-21", "yyyy-MM-dd");
  313. // Date endDate = DateUtils.parseDate("2021-07-17", "yyyy-MM-dd");
  314. int recordsCount = 0;
  315. int newRecordCount = 0;
  316. while (beginDate.before(endDate)){
  317. System.out.println("开始拆分数据,当前时间为:" + beginDate);
  318. List<KuaishouOperationRecord> records = kuaishouOperationRecordMapper.selectCreativeRecordByStatDate(DateUtils.formatDate(beginDate, "yyyy-MM-dd")); //开始拆分数据,当前时间为:Tue Apr 28 00:00:00 CST 2020
  319. // List<KuaishouOperationRecord> records = kuaishouOperationRecordMapper.selectAccountRecordByStatDate(DateUtils.formatDate(beginDate, "yyyy-MM-dd"));
  320. // List<KuaishouOperationRecord> records = kuaishouOperationRecordMapper.selectAppRecordByStatDate(DateUtils.formatDate(beginDate, "yyyy-MM-dd"));
  321. // List<KuaishouOperationRecord> records = kuaishouOperationRecordMapper.selectCampaignRecordByStatDate(DateUtils.formatDate(beginDate, "yyyy-MM-dd")); //已执行完毕
  322. // List<KuaishouOperationRecord> records = kuaishouOperationRecordMapper.selectPackageRecordByStatDate(DateUtils.formatDate(beginDate, "yyyy-MM-dd"));
  323. // List<KuaishouOperationRecord> records = kuaishouOperationRecordMapper.selectUnitRecordByStatDate(DateUtils.formatDate(beginDate, "yyyy-MM-dd")); //已执行完毕
  324. // List<KuaishouOperationRecord> records = kuaishouOperationRecordMapper.selectVideoRecordByStatDate(DateUtils.formatDate(beginDate, "yyyy-MM-dd"));
  325. if (!Check
  326. .isNull(records)) {
  327. recordsCount += records.size();
  328. countDownLatch = new CountDownLatch(records.size());
  329. List<KuaishouOperationRecord> newRecords = new ArrayList<>();
  330. records.forEach(record -> executorService.submit(() -> {
  331. try {
  332. String log = record.getLog();
  333. JSONArray jsonArray = JSONArray.parseArray(log);
  334. for (int i = 0; i < jsonArray.size(); i++) {
  335. JSONObject object = jsonArray.getJSONObject(i);
  336. String originalData = object.getString("original_data");
  337. String updateData = object.getString("update_data");
  338. String fieldName = object.getString("field_name");
  339. KuaishouOperationRecord newRecord = new KuaishouOperationRecord(record);
  340. newRecord.setOriginalData(originalData);
  341. newRecord.setUpdateData(updateData);
  342. newRecord.setFieldName(fieldName);
  343. if ("".equals(newRecord.getOriginalData()) && "".equals(newRecord.getUpdateData())) {
  344. continue;
  345. }
  346. newRecords.add(newRecord);
  347. }
  348. } catch (Exception e) {
  349. } finally {
  350. countDownLatch.countDown();
  351. }
  352. }));
  353. countDownLatch.await();
  354. newRecordCount += newRecords.size();
  355. this.saveOperationRecordListToDb(newRecords);
  356. beginDate = DateUtils.addDay(beginDate, 1);
  357. } else {
  358. System.out.print(" -> 今日的数据为空!!!");
  359. beginDate = DateUtils.addDay(beginDate, 1);
  360. }
  361. }
  362. System.out.println("---------------------------------------------------------------");
  363. System.out.println("------------获取数据结束"+recordsCount+"条原始数据变成了"+newRecordCount+"条数据------------");
  364. System.out.println("---------------------------------------------------------------");
  365. }
  366. private void saveOperationRecordListToDb(List<KuaishouOperationRecord> records) {
  367. if (Check.isNull(records)) {
  368. return;
  369. }
  370. List<KuaishouOperationRecord> batchList = new ArrayList<>();
  371. records.removeAll(Collections.singleton(null));
  372. Integer operationTarget = records.get(0).getOperationTarget();
  373. for (KuaishouOperationRecord sumPosition : records) {
  374. batchList.add(sumPosition);
  375. if (batchList.size() >= 1000) {
  376. if (operationTarget == 1) {
  377. kuaishouOperationRecordMapper.insertOperationRecordInfoAccountNew(batchList);
  378. } else if (operationTarget == 2) {
  379. kuaishouOperationRecordMapper.insertOperationRecordInfoCampaignNew(batchList);
  380. } else if (operationTarget == 3) {
  381. kuaishouOperationRecordMapper.insertOperationRecordInfoUnitNew(batchList);
  382. } else if (operationTarget == 4) {
  383. kuaishouOperationRecordMapper.insertOperationRecordInfoCreativeNew(batchList);
  384. } else if (operationTarget == 5) {
  385. kuaishouOperationRecordMapper.insertOperationRecordInfoVideoNew(batchList);
  386. } else if (operationTarget == 6) {
  387. kuaishouOperationRecordMapper.insertOperationRecordInfoAppNew(batchList);
  388. } else if (operationTarget == 7) {
  389. kuaishouOperationRecordMapper.insertOperationRecordInfoPackageNew(batchList);
  390. } else {
  391. System.out.println("未知的目标类型!");
  392. }
  393. batchList.clear();
  394. }
  395. }
  396. if (!batchList.isEmpty()) {
  397. if (operationTarget == 1) {
  398. kuaishouOperationRecordMapper.insertOperationRecordInfoAccountNew(batchList);
  399. } else if (operationTarget == 2) {
  400. kuaishouOperationRecordMapper.insertOperationRecordInfoCampaignNew(batchList);
  401. } else if (operationTarget == 3) {
  402. kuaishouOperationRecordMapper.insertOperationRecordInfoUnitNew(batchList);
  403. } else if (operationTarget == 4) {
  404. kuaishouOperationRecordMapper.insertOperationRecordInfoCreativeNew(batchList);
  405. } else if (operationTarget == 5) {
  406. kuaishouOperationRecordMapper.insertOperationRecordInfoVideoNew(batchList);
  407. } else if (operationTarget == 6) {
  408. kuaishouOperationRecordMapper.insertOperationRecordInfoAppNew(batchList);
  409. } else if (operationTarget == 7) {
  410. kuaishouOperationRecordMapper.insertOperationRecordInfoPackageNew(batchList);
  411. } else {
  412. System.out.println("未知的目标类型!");
  413. }
  414. batchList.clear();
  415. }
  416. }
  417. public void testfreshBytedanceUrl(){
  418. etlReportBytedanceVideoService.etlBytedanceVideoClipIdJob(null);
  419. etlReportBytedanceVideoService.etlBytedanceVideoPlanInfoJob();
  420. etlReportBytedanceVideoService.etlBytedanceVideoShotInfoJob();
  421. }
  422. @Autowired
  423. IKuaishouInterfaceService2 kuaishouInterfaceServiceImpl2;
  424. @Test
  425. public void getUnitData() throws InterruptedException {
  426. List<Long> accountIdList = new ArrayList<>();
  427. accountIdList.add(9556188l);
  428. accountIdList.add(9677284l);
  429. accountIdList.add(9677304l);
  430. accountIdList.add(10072135l);
  431. accountIdList.add(9901975l);
  432. accountIdList.add(9677344l);
  433. accountIdList.add(9901956l);
  434. accountIdList.add(9556431l);
  435. accountIdList.add(9767055l);
  436. accountIdList.add(10248827l);
  437. Date beginDate = DateUtils.parseDate("2021-06-04", "yyyy-MM-dd");
  438. Date endDate = DateUtils.parseDate("2021-07-22", "yyyy-MM-dd");
  439. List<CtopOauthToken> tokens = tokenService.selectKuaiShouToken();
  440. while (beginDate.before(endDate)){
  441. Date mulDate = beginDate;
  442. countDownLatch = new CountDownLatch(tokens.size());
  443. tokens.forEach(token -> executorService.submit(() -> {
  444. try{
  445. if(!accountIdList.contains(token.getAccountId())){
  446. kuaishouInterfaceServiceImpl2.getOperationRecord( token.getAccountId(),
  447. token.getAccessToken(),
  448. 3, //先3组 后2计划
  449. DateUtils.formatDate(mulDate,"yyyy-MM-dd"),
  450. DateUtils.formatDate(mulDate,"yyyy-MM-dd"));
  451. System.out.println("获取完毕 -> accountId:" + token.getAccountId() +",日期:" + DateUtils.formatDate(mulDate,"yyyy-MM-dd"));
  452. }
  453. }catch (Exception e){
  454. }finally {
  455. countDownLatch.countDown();
  456. }
  457. }));
  458. beginDate = DateUtils.addDay(beginDate, 1);
  459. countDownLatch.await();
  460. }
  461. System.out.println("走完了~");
  462. }
  463. @Autowired
  464. IKuaishouAudienceReportDailyService kuaishouAudienceReportDailyService;
  465. @Resource
  466. AiKuaishouUnitLevelOperationRecordMapper kuaishouUnitLevelOperationRecordMapper;
  467. @Test
  468. public void getAudienceReport() throws InterruptedException {
  469. int page = 1;
  470. int pageSize = 2000;
  471. Date beginDate = DateUtils.parseDate("2021-05-01", "yyyy-MM-dd");
  472. Date endDate = DateUtils.parseDate("2021-06-01", "yyyy-MM-dd");
  473. while (beginDate.before(endDate)){
  474. Date mulDate = beginDate;
  475. List<AiKuaishouUnitLevelOperationRecord> planIdsAndUnitIds = kuaishouUnitLevelOperationRecordMapper.selectAllByAccountId(mulDate, DateUtils.addDay(mulDate,1));
  476. countDownLatch = new CountDownLatch(planIdsAndUnitIds.size());
  477. planIdsAndUnitIds.forEach(planIdAndUnitId -> executorService.submit(() -> {
  478. try{
  479. CtopOauthToken token = tokenService.getTokenByAccountId(planIdAndUnitId.getAccountId());
  480. if(!Check.isNull(token)){
  481. Date startDate = mulDate;
  482. Date enDate = DateUtils.addDay(startDate, 30);
  483. // province: 省级地域分布, city: 地级地域分布,gender: 性别分布,ageSegment: 年龄分布clientId: 系统分布 businessInterestTags: 商业兴趣分布
  484. while (startDate.before(enDate)){
  485. kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, DateUtils.formatDate(startDate,"yyyy-MM-dd"), "ageSegment", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
  486. System.out.println("获取完毕 -> unit:" + planIdAndUnitId.getUnitId() +",日期:" + DateUtils.formatDate(startDate,"yyyy-MM-dd"));
  487. startDate = DateUtils.addDay(startDate, 1);
  488. }
  489. }else {
  490. System.out.println("token异常 -》 accountId:"+planIdAndUnitId.getAccountId());
  491. }
  492. }catch (Exception e){
  493. }finally {
  494. countDownLatch.countDown();
  495. }
  496. }));
  497. beginDate = DateUtils.addDay(beginDate, 1);
  498. countDownLatch.await();
  499. }
  500. System.out.println("走完了~");
  501. }
  502. }