Procházet zdrojové kódy

Merge branch 'test'

syh před 4 roky
rodič
revize
e4a5e2b966
22 změnil soubory, kde provedl 996 přidání a 4 odebrání
  1. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/config/WebMvcConfiguration.java
  2. 157 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/KuaishouEffectVideoInfoController.java
  3. 222 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectTransferRecordController.java
  4. 34 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java
  5. 74 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/KuaishouEffectVideoInfo.java
  6. 51 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ProjectTransferRecord.java
  7. 18 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/KuaishouEffectVideoInfoMapper.java
  8. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/ProjectTransferRecordMapper.java
  9. 45 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/KuaishouEffectVideoInfoMapper.xml
  10. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectTransferRecordMapper.xml
  11. 17 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IKuaishouEffectVideoInfoService.java
  12. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IProjectTransferRecordService.java
  13. 39 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/KuaishouEffectVideoInfoServiceImpl.java
  14. 29 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectTransferRecordServiceImpl.java
  15. 2 2
      jeecg-boot-module-system/src/main/resources/application-wps.yml
  16. 19 0
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  17. 2 1
      module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialCutFrameService.java
  18. 5 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/KuaishouInterfaceConstant.java
  19. 72 0
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceDailyMaterialReportJob.java
  20. 81 0
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceDailyMaterialReportRetryJob.java
  21. 8 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaishouInterfaceService.java
  22. 87 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/config/WebMvcConfiguration.java

@@ -9,7 +9,6 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.web.cors.CorsConfiguration;
 import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
 import org.springframework.web.filter.CorsFilter;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -38,6 +37,7 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
 //		registry.addInterceptor(browseLogHandelInterceptor);
 //	}
 
+
 	@Bean
 	public CorsFilter corsFilter() {
 		final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();

+ 157 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/KuaishouEffectVideoInfoController.java

@@ -0,0 +1,157 @@
+package org.jeecg.modules.ctop.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.ctop.entity.KuaishouEffectVideoInfo;
+import org.jeecg.modules.ctop.service.IKuaishouEffectVideoInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+
+ /**
+ * 快手视频数据清洗信息
+ * @author jeecg-boot
+ * @date   2020-07-23
+ * @version V1.0
+ */
+@Slf4j
+@Api(tags="快手视频数据清洗信息")
+@RestController
+@RequestMapping("/ctop/kuaishouEffectVideoInfo")
+public class KuaishouEffectVideoInfoController {
+	@Autowired
+	private IKuaishouEffectVideoInfoService kuaishouEffectVideoInfoService;
+
+	/**
+	  * 分页列表查询
+	 * @param kuaishouEffectVideoInfo
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "快手视频数据清洗信息-分页列表查询")
+	@ApiOperation(value="快手视频数据清洗信息-分页列表查询", notes="快手视频数据清洗信息-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<KuaishouEffectVideoInfo>> queryPageList(KuaishouEffectVideoInfo kuaishouEffectVideoInfo,
+																@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+																@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+																HttpServletRequest req) {
+		Result<IPage<KuaishouEffectVideoInfo>> result = new Result<>();
+		QueryWrapper<KuaishouEffectVideoInfo> queryWrapper = QueryGenerator.initQueryWrapper(kuaishouEffectVideoInfo, req.getParameterMap());
+		Page<KuaishouEffectVideoInfo> page = new Page<>(pageNo, pageSize);
+		IPage<KuaishouEffectVideoInfo> pageList = kuaishouEffectVideoInfoService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	  *   添加
+	 * @param kuaishouEffectVideoInfo
+	 * @return
+	 */
+	@AutoLog(value = "快手视频数据清洗信息-添加")
+	@ApiOperation(value="快手视频数据清洗信息-添加", notes="快手视频数据清洗信息-添加")
+	@PostMapping(value = "/add")
+	public Result<KuaishouEffectVideoInfo> add(@RequestBody KuaishouEffectVideoInfo kuaishouEffectVideoInfo) {
+		Result<KuaishouEffectVideoInfo> result = new Result<>();
+		try {
+			kuaishouEffectVideoInfoService.save(kuaishouEffectVideoInfo);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 * @param kuaishouEffectVideoInfo
+	 * @return
+	 */
+	@AutoLog(value = "快手视频数据清洗信息-编辑")
+	@ApiOperation(value="快手视频数据清洗信息-编辑", notes="快手视频数据清洗信息-编辑")
+	@PutMapping(value = "/edit")
+	public Result<KuaishouEffectVideoInfo> edit(@RequestBody KuaishouEffectVideoInfo kuaishouEffectVideoInfo) {
+		Result<KuaishouEffectVideoInfo> result = new Result<>();
+		KuaishouEffectVideoInfo kuaishouEffectVideoInfoEntity = kuaishouEffectVideoInfoService.getById(kuaishouEffectVideoInfo.getId());
+		if(kuaishouEffectVideoInfoEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = kuaishouEffectVideoInfoService.updateById(kuaishouEffectVideoInfo);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手视频数据清洗信息-通过id删除")
+	@ApiOperation(value="快手视频数据清洗信息-通过id删除", notes="快手视频数据清洗信息-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<Object> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			kuaishouEffectVideoInfoService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "快手视频数据清洗信息-批量删除")
+	@ApiOperation(value="快手视频数据清洗信息-批量删除", notes="快手视频数据清洗信息-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<KuaishouEffectVideoInfo> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<KuaishouEffectVideoInfo> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.kuaishouEffectVideoInfoService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手视频数据清洗信息-通过id查询")
+	@ApiOperation(value="快手视频数据清洗信息-通过id查询", notes="快手视频数据清洗信息-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<KuaishouEffectVideoInfo> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<KuaishouEffectVideoInfo> result = new Result<>();
+		KuaishouEffectVideoInfo kuaishouEffectVideoInfo = kuaishouEffectVideoInfoService.getById(id);
+		if(kuaishouEffectVideoInfo==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(kuaishouEffectVideoInfo);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+}

+ 222 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectTransferRecordController.java

@@ -0,0 +1,222 @@
+package org.jeecg.modules.ctop.controller;
+
+import cn.com.ctop.common.module.service.ISysRoleService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.ctop.entity.ProjectTransferRecord;
+import org.jeecg.modules.ctop.service.IProjectTransferRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+
+ /**
+ * 账户转项目记录
+ * @author jeecg-boot
+ * @date   2020-07-22
+ * @version V1.0
+ */
+@Slf4j
+@Api(tags="账户转项目记录")
+@RestController
+@RequestMapping("/ctop/projectTransferRecord")
+public class ProjectTransferRecordController {
+	@Autowired
+	private IProjectTransferRecordService projectTransferRecordService;
+	@Autowired
+	private ISysRoleService sysRoleService;
+	/**
+	  * 我发起的
+	 * @param projectTransferRecord
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "账户转项目记录-分页列表查询")
+	@ApiOperation(value="账户转项目记录-分页列表查询", notes="账户转项目记录-分页列表查询")
+	@GetMapping(value = "/initiatedList")
+	public Result<IPage<ProjectTransferRecord>> initiatedList(ProjectTransferRecord projectTransferRecord,
+									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  HttpServletRequest req) {
+		Integer status = projectTransferRecord.getStatus();
+		if(null == status||status.equals(0)){
+			projectTransferRecord.setStatus(null);
+		}
+		Result<IPage<ProjectTransferRecord>> result = new Result<>();
+		QueryWrapper<ProjectTransferRecord> queryWrapper = QueryGenerator.initQueryWrapper(projectTransferRecord, req.getParameterMap());
+		LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		String rodeCode = sysRoleService.getRoleCodeByUserId(sysUser.getId());
+		if(null!=rodeCode&&rodeCode.trim().equals("admin")){
+			queryWrapper.eq("user_id",sysUser.getId());
+		}
+		queryWrapper.ne("status",0);
+		Page<ProjectTransferRecord> page = new Page<>(pageNo, pageSize);
+		IPage<ProjectTransferRecord> pageList = projectTransferRecordService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	 /**
+	  * 待审核的
+	  * @param projectTransferRecord
+	  * @param pageNo
+	  * @param pageSize
+	  * @param req
+	  * @return
+	  */
+	 @AutoLog(value = "账户转项目记录-分页列表查询")
+	 @ApiOperation(value="账户转项目记录-分页列表查询", notes="账户转项目记录-分页列表查询")
+	 @GetMapping(value = "/auditList")
+	 public Result<IPage<ProjectTransferRecord>> auditList(ProjectTransferRecord projectTransferRecord,
+															   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+															   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+															   HttpServletRequest req) {
+		 Integer status = projectTransferRecord.getStatus();
+		 if(null == status||status.equals(0)){
+			 projectTransferRecord.setStatus(null);
+		 }
+		 Result<IPage<ProjectTransferRecord>> result = new Result<>();
+		 QueryWrapper<ProjectTransferRecord> queryWrapper = QueryGenerator.initQueryWrapper(projectTransferRecord, req.getParameterMap());
+		 LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		 String rodeCode = sysRoleService.getRoleCodeByUserId(sysUser.getId());
+		 if(null!=rodeCode&&rodeCode.trim().equals("admin")){
+			 queryWrapper.eq("reviewer_id",sysUser.getId());
+		 }
+		 queryWrapper.ne("status",0);
+		 Page<ProjectTransferRecord> page = new Page<>(pageNo, pageSize);
+		 IPage<ProjectTransferRecord> pageList = projectTransferRecordService.page(page, queryWrapper);
+		 result.setSuccess(true);
+		 result.setResult(pageList);
+		 return result;
+	 }
+
+	/**
+	  *  添加
+	 * @param projectTransferRecord
+	 * @return
+	 */
+	@AutoLog(value = "账户转项目记录-添加")
+	@ApiOperation(value="账户转项目记录-添加", notes="账户转项目记录-添加")
+	@PostMapping(value = "/add")
+	public Result<ProjectTransferRecord> add(@RequestBody ProjectTransferRecord projectTransferRecord) {
+		Result<ProjectTransferRecord> result = new Result<>();
+		try {
+			projectTransferRecordService.save(projectTransferRecord);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 * @param projectTransferRecord
+	 * @return
+	 */
+	@AutoLog(value = "账户转项目记录-编辑")
+	@ApiOperation(value="账户转项目记录-编辑", notes="账户转项目记录-编辑")
+	@PutMapping(value = "/edit")
+	public Result<ProjectTransferRecord> edit(@RequestBody ProjectTransferRecord projectTransferRecord) {
+		Result<ProjectTransferRecord> result = new Result<>();
+		ProjectTransferRecord projectTransferRecordEntity = projectTransferRecordService.getById(projectTransferRecord.getId());
+		if(projectTransferRecordEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = projectTransferRecordService.updateById(projectTransferRecord);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+	 /**
+	  *  修改状态
+	  * @return
+	  */
+	 @AutoLog(value = "账户转项目记录-编辑")
+	 @ApiOperation(value="账户转项目记录-编辑", notes="账户转项目记录-编辑")
+	 @PutMapping(value = "/editStatus")
+	 public Result<Object> editStatus(@RequestParam(name="id",required=true) Long id,@RequestParam(name = "status",defaultValue = "0") Integer status){
+		 try {
+			 projectTransferRecordService.updateStatus(id,status);
+		 } catch (Exception e) {
+			 log.error("操作失败",e.getMessage());
+			 return Result.error("操作失败!");
+		 }
+		 return Result.ok("操作成功!");
+	 }
+
+	/**
+	 * 通过id删除
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "账户转项目记录-通过id删除")
+	@ApiOperation(value="账户转项目记录-通过id删除", notes="账户转项目记录-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<Object> delete(@RequestParam(name="id",required=true) Long id,@RequestParam(name = "status",defaultValue = "0") Integer status) {
+		try {
+			projectTransferRecordService.updateStatus(id,status);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "账户转项目记录-批量删除")
+	@ApiOperation(value="账户转项目记录-批量删除", notes="账户转项目记录-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<ProjectTransferRecord> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<ProjectTransferRecord> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.projectTransferRecordService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	 * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "账户转项目记录-通过id查询")
+	@ApiOperation(value="账户转项目记录-通过id查询", notes="账户转项目记录-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<ProjectTransferRecord> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<ProjectTransferRecord> result = new Result<>();
+		ProjectTransferRecord projectTransferRecord = projectTransferRecordService.getById(id);
+		if(projectTransferRecord==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(projectTransferRecord);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+}

+ 34 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java

@@ -774,4 +774,38 @@ public class TestController {
         ResultMapUtils.setResultMap(result,StatusCode.COMMON_SUCCESS);
         return result;
     }
+
+
+
+    @GetMapping(value = "/getAppList")
+    public void getAppList() throws JobExecutionException {
+        try {
+            //1:查询当日数据
+            QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("media_id", 2);
+            queryWrapper.orderByDesc("create_time");
+            List<CtopOauthToken> tokens = tokenService.list(queryWrapper);
+            if (null == tokens || tokens.size() <= 0) {
+                log.info("定时获取快手数据异常:未获取到可用的token");
+                return;
+            }
+
+            tokens.forEach(token -> {
+
+                kuaishouInterfaceService.getAppList2(token.getAccountId(),token.getAccessToken());
+                //suzhaoService.submit(new Runnable() {
+                //    @Override
+                //    public void run() {
+                //        //1: 获取广告主信息数据
+                //        log.info("获取素造素材:accountId:{}", token.getAccountId());
+                //        kuaishouInterfaceService.getSuZaoList(token.getAccessToken(), token.getAccountId(), 1, null, null);
+                //    }
+                //});
+            });
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+
+    }
 }

+ 74 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/KuaishouEffectVideoInfo.java

@@ -0,0 +1,74 @@
+package org.jeecg.modules.ctop.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.util.Date;
+
+/**
+ * 快手视频数据清洗信息
+ * @author jeecg-boot
+ * @date   2020-07-23
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_kuaishou_effect_video_info")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ctop_kuaishou_effect_video_info对象", description="快手视频数据清洗信息")
+public class KuaishouEffectVideoInfo {
+
+	/**id*/
+	@TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+	private Integer id;
+	/**signature*/
+	@Excel(name = "signature", width = 15)
+    @ApiModelProperty(value = "signature")
+	private String signature;
+	/**url*/
+	@Excel(name = "url", width = 15)
+    @ApiModelProperty(value = "url")
+	private String url;
+	/**coverUrl*/
+	@Excel(name = "coverUrl", width = 15)
+    @ApiModelProperty(value = "coverUrl")
+	private String coverUrl;
+	/**materialType*/
+	@Excel(name = "materialType", width = 15)
+    @ApiModelProperty(value = "materialType")
+	private Integer materialType;
+	/**channelType*/
+	@Excel(name = "channelType", width = 15)
+    @ApiModelProperty(value = "channelType")
+	private Integer channelType;
+	/**initialCostDate*/
+	@Excel(name = "initialCostDate", width = 15)
+    @ApiModelProperty(value = "initialCostDate")
+	private String initialCostDate;
+	/**finalCostDate*/
+	@Excel(name = "finalCostDate", width = 15)
+    @ApiModelProperty(value = "finalCostDate")
+	private String finalCostDate;
+	/**twoWeekCost*/
+	@Excel(name = "twoWeekCost", width = 15)
+    @ApiModelProperty(value = "twoWeekCost")
+	private java.math.BigDecimal twoWeekCost;
+	/**totalCost*/
+	@Excel(name = "totalCost", width = 15)
+    @ApiModelProperty(value = "totalCost")
+	private java.math.BigDecimal totalCost;
+	/**createTime*/
+    @ApiModelProperty(value = "createTime")
+	private Date createTime;
+	/**updateTime*/
+    @ApiModelProperty(value = "updateTime")
+	private Date updateTime;
+}

+ 51 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ProjectTransferRecord.java

@@ -0,0 +1,51 @@
+package org.jeecg.modules.ctop.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
+
+import java.util.Date;
+
+/**
+ * 账户转项目记录
+ * @author jeecg-boot
+ * @date   2020-07-22
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_project_transfer_record")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ctop_project_transfer_record对象", description="账户转项目记录")
+public class ProjectTransferRecord {
+
+	@TableId(type = IdType.AUTO)
+	private Long id;
+	/**账户id*/
+	@Dict(dicCode = "account_id",dictTable="ctop_user_allocation",dicText="auth_name")
+	private Long accountId;
+	@Dict(dicCode = "id",dictTable="ctop_project",dicText="project_name")
+	private Long soucreProject;
+	@Dict(dicCode = "id",dictTable="ctop_project",dicText="project_name")
+	private Long targetProject;
+	/**申请人*/
+	@Dict(dicCode = "id",dictTable="sys_user",dicText="realname")
+	private String userId;
+	@Dict(dicCode = "item_value", dictTable = "sys_dict_item", dicText = "item_text",extendsKey = "dict_id",extendsValue = "18922b5d04bfcb1b5ded1a17dfdd9510")
+	private Integer status;
+	/**审核人*/
+	@Dict(dicCode = "id",dictTable="sys_user",dicText="realname")
+	private String reviewerId;
+	/**createTime*/
+    @ApiModelProperty(value = "createTime")
+	private Date createTime;
+	/**updateTime*/
+    @ApiModelProperty(value = "updateTime")
+	private Date updateTime;
+}

+ 18 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/KuaishouEffectVideoInfoMapper.java

@@ -0,0 +1,18 @@
+package org.jeecg.modules.ctop.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.ctop.entity.KuaishouEffectVideoInfo;
+
+/**
+ * 快手视频数据清洗信息
+ * @author: jeecg-boot
+ * @date:   2020-07-23
+ * @cersion: V1.0
+ */
+public interface KuaishouEffectVideoInfoMapper extends BaseMapper<KuaishouEffectVideoInfo> {
+    void updateInitialCostDateBySignature(@Param(value = "signature") String signature);
+    void updateFinalCostDateBySignature(@Param(value = "signature") String signature);
+    void updateTotalCostBySignature(@Param(value = "signature") String signature);
+    void updateTowWeekCostBySignature(@Param(value = "signature") String signature);
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/ProjectTransferRecordMapper.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.ctop.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.ctop.entity.ProjectTransferRecord;
+
+/**
+ * 账户转项目记录
+ * @author: jeecg-boot
+ * @date:   2020-07-22
+ * @cersion: V1.0
+ */
+public interface ProjectTransferRecordMapper extends BaseMapper<ProjectTransferRecord> {
+
+}

+ 45 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/KuaishouEffectVideoInfoMapper.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.KuaishouEffectVideoInfoMapper">
+
+    <update id="updateInitialCostDateBySignature">
+        update ctop_kuaishou_effect_video_info a
+        set a.initial_cost_date = (select min(report.stat_date)
+                           from ctop_kuaishou_report_daily_creative report
+                                    left join ctop_kuaishou_creative creative
+                                              on creative.creative_id = report.creative_id
+                                    left join ctop_kuaishou_video_get video on video.photo_id = creative.photo_id
+                           where video.signature = #{signature})
+        where a.signature = #{signature}
+    </update>
+    <update id="updateFinalCostDateBySignature">
+        update ctop_kuaishou_effect_video_info a
+        set a.final_cost_date = (select max(report.stat_date)
+                           from ctop_kuaishou_report_daily_creative report
+                                    left join ctop_kuaishou_creative creative
+                                              on creative.creative_id = report.creative_id
+                                    left join ctop_kuaishou_video_get video on video.photo_id = creative.photo_id
+                           where video.signature = #{signature})
+        where a.signature = #{signature}
+    </update>
+    <update id="updateTotalCostBySignature">
+        update ctop_kuaishou_effect_video_info a
+        set a.total_cost = (select sum(report.charge)
+                           from ctop_kuaishou_report_daily_creative report
+                                    left join ctop_kuaishou_creative creative
+                                              on creative.creative_id = report.creative_id
+                                    left join ctop_kuaishou_video_get video on video.photo_id = creative.photo_id
+                           where video.signature = #{signature})
+        where a.signature = #{signature}
+    </update>
+    <update id="updateTowWeekCostBySignature">
+        update ctop_kuaishou_effect_video_info a
+        set a.two_week_cost = (select sum(report.charge)
+                from ctop_kuaishou_report_daily_creative report
+                left join ctop_kuaishou_creative creative
+                    on creative.creative_id = report.creative_id
+        left join ctop_kuaishou_video_get video on video.photo_id = creative.photo_id
+        where video.signature = #{signature} and report.stat_date &gt; DATE_ADD(a.initial_cost_date,INTERVAL 14 DAY))
+        where a.signature = #{signature}
+    </update>
+</mapper>

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectTransferRecordMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.ProjectTransferRecordMapper">
+
+</mapper>

+ 17 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IKuaishouEffectVideoInfoService.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.ctop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.ctop.entity.KuaishouEffectVideoInfo;
+
+/**
+ * 快手视频数据清洗信息
+ * @author jeecg-boot
+ * @date   2020-07-23
+ * @version V1.0
+ */
+public interface IKuaishouEffectVideoInfoService extends IService<KuaishouEffectVideoInfo> {
+    void updateInitialCostDateBySignature(String signature);
+    void updateFinalCostDateBySignature(String signature);
+    void updateTotalCostBySignature(String signature);
+    void updateTowWeekCostBySignature(String signature);
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IProjectTransferRecordService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.ctop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.ctop.entity.ProjectTransferRecord;
+
+/**
+ * 账户转项目记录
+ * @author jeecg-boot
+ * @date   2020-07-22
+ * @version V1.0
+ */
+public interface IProjectTransferRecordService extends IService<ProjectTransferRecord> {
+    void updateStatus(Long id,Integer status);
+}

+ 39 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/KuaishouEffectVideoInfoServiceImpl.java

@@ -0,0 +1,39 @@
+package org.jeecg.modules.ctop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.ctop.entity.KuaishouEffectVideoInfo;
+import org.jeecg.modules.ctop.mapper.KuaishouEffectVideoInfoMapper;
+import org.jeecg.modules.ctop.service.IKuaishouEffectVideoInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 快手视频数据清洗信息
+ * @author jeecg-boot
+ * @date   2020-07-23
+ * @version V1.0
+ */
+@Service
+public class KuaishouEffectVideoInfoServiceImpl extends ServiceImpl<KuaishouEffectVideoInfoMapper, KuaishouEffectVideoInfo> implements IKuaishouEffectVideoInfoService {
+    @Autowired
+    private KuaishouEffectVideoInfoMapper effectVideoInfoMapper;
+    @Override
+    public void updateInitialCostDateBySignature(String signature) {
+        effectVideoInfoMapper.updateInitialCostDateBySignature(signature);
+    }
+
+    @Override
+    public void updateFinalCostDateBySignature(String signature) {
+        effectVideoInfoMapper.updateFinalCostDateBySignature(signature);
+    }
+
+    @Override
+    public void updateTotalCostBySignature(String signature) {
+        effectVideoInfoMapper.updateTotalCostBySignature(signature);
+    }
+
+    @Override
+    public void updateTowWeekCostBySignature(String signature) {
+        effectVideoInfoMapper.updateTowWeekCostBySignature(signature);
+    }
+}

+ 29 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectTransferRecordServiceImpl.java

@@ -0,0 +1,29 @@
+package org.jeecg.modules.ctop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.ctop.entity.ProjectTransferRecord;
+import org.jeecg.modules.ctop.mapper.ProjectTransferRecordMapper;
+import org.jeecg.modules.ctop.service.IProjectTransferRecordService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+/**
+ * 账户转项目记录
+ * @author jeecg-boot
+ * @date   2020-07-22
+ * @version V1.0
+ */
+@Service
+public class ProjectTransferRecordServiceImpl extends ServiceImpl<ProjectTransferRecordMapper, ProjectTransferRecord> implements IProjectTransferRecordService {
+
+    @Override
+    public void updateStatus(Long id,Integer status) {
+        ProjectTransferRecord record = this.getById(id);
+        if(null!=record){
+            record.setStatus(status);
+            record.setUpdateTime(new Date());
+            this.updateById(record);
+        }
+    }
+}

+ 2 - 2
jeecg-boot-module-system/src/main/resources/application-wps.yml

@@ -96,8 +96,8 @@ spring:
         connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
       datasource:
         master:
-#          url: jdbc:mysql://139.186.27.96:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
-          url: jdbc:mysql://39.106.184.70:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          url: jdbc:mysql://139.186.27.96:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+#          url: jdbc:mysql://39.106.184.70:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
           username: hcst
           password: test@20190531
           driver-class-name: com.mysql.jdbc.Driver

+ 19 - 0
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -17,6 +17,8 @@ import cn.com.ctop.toutiao.modules.report.service.IReportService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.ctop.entity.KuaishouEffectVideoInfo;
+import org.jeecg.modules.ctop.service.IKuaishouEffectVideoInfoService;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -150,6 +152,23 @@ public class SampleTest {
         CtopOauthToken token = oauthTokenService.getOauthTokenByAccountId("1649600126891015");
         campaignService.getAdvertiserCampaign(token,"1672261893872756",null);
     }
+
+    @Autowired
+    private IKuaishouEffectVideoInfoService effectVideoInfoService;
+    @Test
+    public void loadKuaishouEffectVideoInfo(){
+        List<KuaishouEffectVideoInfo>videoInfos = effectVideoInfoService.list();
+        for (KuaishouEffectVideoInfo video:videoInfos) {
+            if(null!=video.getSignature()&&!"".equals(video.getSignature())){
+//                effectVideoInfoService.updateFinalCostDateBySignature(video.getSignature());
+//                effectVideoInfoService.updateInitialCostDateBySignature(video.getSignature());
+//                effectVideoInfoService.updateTotalCostBySignature(video.getSignature());
+                if(null==video.getTwoWeekCost()){
+                    effectVideoInfoService.updateTowWeekCostBySignature(video.getSignature());
+                }
+            }
+        }
+    }
 }
 
 

+ 2 - 1
module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialCutFrameService.java

@@ -27,7 +27,8 @@ public interface IMaterialCutFrameService extends IService<MaterialCutFrame> {
 
     void getTencentCutFrame(String videoUrl,String materialId,String coveUrl);
 
+    boolean updateTencentCutFrame(String videoMD5);
+
     MaterialCutFrame getCutFrameByCode(String code);
 
-    boolean updateTencentCutFrame(String videoMD5);
 }

+ 5 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/KuaishouInterfaceConstant.java

@@ -83,12 +83,17 @@ public class KuaishouInterfaceConstant {
      * 创建广告获取应用列表
      */
     public static final String APP_LIST = "/rest/openapi/v1/file/ad/app/list";
+    /**
+     * 创建广告获取应用列表(新版本)
+     */
+    public static final String APP_LIST_v2 = "/rest/openapi/v2/file/ad/app/list";
 
     /**
      * 账户日预算查询
      */
     public static final String ACCOUNT_BUDGET = "/rest/openapi/v1/advertiser/budget/get";
 
+
     /**
      * 获取账户余额
      */

+ 72 - 0
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceDailyMaterialReportJob.java

@@ -0,0 +1,72 @@
+package cn.com.ctop.job.bytedance.handler;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.CtopAdConstant;
+import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
+import cn.com.ctop.toutiao.modules.report.service.IBytedanceReportService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
+import org.jeecg.common.util.DateUtils;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Component
+public class BytedanceDailyMaterialReportJob {
+
+    static ExecutorService executorService = Executors.newFixedThreadPool(4);
+    @Autowired
+    private ICtopOauthTokenService tokenService;
+    @Autowired
+    private IBytedanceReportService bytedanceReportService;
+
+    @XxlJob("bytedanceDailyMaterialReportJob")
+    public ReturnT<String> execute(String param) throws Exception {
+        Date getDate2 = DateUtils.addDay(new Date(), -2);
+        String date2 = DateUtils.formatDate(getDate2);
+
+        Date getDate = DateUtils.addDay(new Date(), -1);
+        String date = DateUtils.formatDate(getDate);
+        XxlJobLogger.log("头条获取素材报表数据任务开始,任务时间:" + date2 + "~" + date);
+
+        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
+        if (null == tokens || tokens.size() <= 0) {
+            XxlJobLogger.log("头条获取素材报表数据任务执行失败:未获取到可用的token");
+            return ReturnT.FAIL;
+        }
+
+        tokens.forEach(token -> {
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        //获取头条素材报表两天前的数据
+                        XxlJobLogger.log("账户"+token.getAccountId() + "素材报表数据任务开始,任务时间:" + date2 + "~" + date2);
+                        bytedanceReportService.bytedanceMaterialReport(token, date2, date2);
+                        XxlJobLogger.log("账户"+token.getAccountId() + "素材报表数据任务完成,任务时间:" + date2 + "~" + date2);
+
+                        //获取头条素材报表数据
+                        XxlJobLogger.log("账户"+token.getAccountId() + "素材报表数据任务开始,任务时间:" + date + "~" + date);
+                        bytedanceReportService.bytedanceMaterialReport(token, date, date);
+                        XxlJobLogger.log("账户"+token.getAccountId() + "素材报表数据任务完成,任务时间:" + date + "~" + date);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                    }
+                }
+            });
+        });
+        return ReturnT.SUCCESS;
+    }
+
+
+
+}

+ 81 - 0
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceDailyMaterialReportRetryJob.java

@@ -0,0 +1,81 @@
+package cn.com.ctop.job.bytedance.handler;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.CtopAdConstant;
+import cn.com.ctop.toutiao.modules.report.entity.BytedanceReportMaterialRetry;
+import cn.com.ctop.toutiao.modules.report.service.IByteDanceVideoReportDailyService;
+import cn.com.ctop.toutiao.modules.report.service.IBytedanceReportService;
+import cn.com.ctop.toutiao.modules.report.service.IReportService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
+import org.jeecg.common.util.DateUtils;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Component
+public class BytedanceDailyMaterialReportRetryJob {
+    static ExecutorService executorService = Executors.newFixedThreadPool(4);
+    @Autowired
+    private ICtopOauthTokenService tokenService;
+    @Autowired
+    private IBytedanceReportService bytedanceReportService;
+    @Autowired
+    private IByteDanceVideoReportDailyService byteDanceVideoReportDailyService;
+
+    @XxlJob("bytedanceDailyMaterialReportRetryJob")
+    public ReturnT<String> execute(String param) throws Exception {
+        XxlJobLogger.log("头条素材报表重试定时任务开始");
+
+        List<BytedanceReportMaterialRetry> retryList = bytedanceReportService.getRetryList();
+        retryList.forEach(retry -> {
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        String startDate = retry.getStartDate();
+                        String endDate = retry.getEndDate();
+                        Long accountId = retry.getAccountId();
+                        Integer type = retry.getType();
+                        CtopOauthToken token = tokenService.getOauthTokenByAccountId(String.valueOf(accountId));
+                        XxlJobLogger.log("头条素材报表重试定时任务开始,当前accountId为:" + token.getAccountId());
+                        Long days = DateUtils.getDiscrepantDays(startDate, endDate); //间隔天数
+                        String start = null;
+                        String end = null;
+                        for (int i = 0; i <= days; i++) {
+                            start = DateUtils.addDay(startDate, i);
+                            end = start;
+                            //获取头条素材报表数据
+                            int code = bytedanceReportService.bytedanceMaterialReportRetry(type, token, start, end);
+                            XxlJobLogger.log("头条素材报表重试定时任务完成,当前accountId为:" + token.getAccountId() + "code:" + code);
+                            if (code == 200 || code == 1) {
+                                if (type == 1) {
+                                    XxlJobLogger.log("头条素材报表重试定时任务清洗数据开始,当前accountId为:" + token.getAccountId());
+                                    //重试成功清洗数据
+                                    byteDanceVideoReportDailyService.videoInfoListByAccountId(start, end, accountId);
+                                    XxlJobLogger.log("头条素材报表重试定时任务清洗数据完成,当前accountId为:" + token.getAccountId());
+                                }
+                            }
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                    }
+                }
+            });
+        });
+
+        return ReturnT.SUCCESS;
+    }
+
+
+
+}

+ 8 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaishouInterfaceService.java

@@ -266,6 +266,14 @@ public interface IKuaishouInterfaceService {
     void getAppList(Long advertiserId, String accessToken);
 
     /**
+     * 获取应用列表
+     *
+     * @param advertiserId
+     * @param accessToken
+     */
+    void getAppList2(Long advertiserId, String accessToken);
+
+    /**
      * 文件上传 发送请求
      *
      * @param url

+ 87 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java

@@ -3235,4 +3235,91 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         return returnArr;
     }
 
+    /**
+     * 获取应用列表(新)
+     *
+     * @param advertiserId
+     * @param accessToken
+     */
+    @Override
+    public void getAppList2(Long advertiserId, String accessToken) {
+        Integer pageSize = 20;
+        Integer page = 1;
+        getAppList2ByPage(advertiserId, accessToken, page, pageSize);
+    }
+
+    private void getAppList2ByPage(Long advertiserId, String accessToken, Integer page, Integer pageSize) {
+        try {
+            String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.APP_LIST_v2;
+            Map<String, String> headers = new HashMap<>();
+            headers.put("Access-Token", accessToken);
+            headers.put("Content-Type", " application/json");
+            JSONObject json = new JSONObject();
+            json.put("advertiser_id", advertiserId);
+            json.put("page", page);
+            json.put("page_size", pageSize);
+            String result = HttpUtils.kuaiShouhttpPostRequest(url, json.toJSONString(), headers);
+            JSONObject resultJson = JSONObject.parseObject(result);
+            if (!Check.isNull(resultJson)) {
+                Integer code = resultJson.getInteger("code");
+                if (code == 0) {
+                    if(page == 1){ //分页保存数据,如果页数为1,删除之前的数据重新入库
+                        Map<String, Object> deleteMap = new HashMap<>();
+                        deleteMap.put("account_id", advertiserId);
+                        appListMapper.deleteByMap(deleteMap);
+                    }
+                    JSONObject data = resultJson.getJSONObject("data");
+                    if (!Check.isNull(data)) {
+                        Integer totalCount = data.getInteger("total_count");
+                        JSONArray dataArr = data.getJSONArray("details");
+                        for (int i = 0; i < dataArr.size(); i++) {
+                            JSONObject dataJson = JSONObject.parseObject(dataArr.get(i).toString());
+                            if (!Check.isNull(dataJson)) {
+                                KuaiShouAppList appList = new KuaiShouAppList();
+                                appList.setAccountId(advertiserId);
+                                appList.setPlatform(dataJson.getInteger("platform"));
+                                appList.setUrl(dataJson.getString("url"));
+                                appList.setAppId(dataJson.getLong("app_id"));
+                                appList.setAppVersion(dataJson.getString("app_version"));
+                                appList.setAppName(dataJson.getString("app_name"));
+                                appList.setAppIconUrl(dataJson.getString("app_icon_url"));
+                                appList.setImageToken(dataJson.getString("image_token"));
+                                appList.setPackageName(dataJson.getString("package_name"));
+                                appList.setReturnTime(DateUtils.timeStamp2Date(dataJson.getTimestamp("update_time")));
+                                appListMapper.insert(appList);
+                            }
+                        }
+                        Integer totalPage = (totalCount-1)/pageSize + 1;
+                        if(page < totalPage ){
+                            getAppList2ByPage(advertiserId,accessToken,page+1,pageSize);
+                        }
+                    }
+                } else {
+                    log.error("获取应用列表失败,返回信息:{}", resultJson);
+                }
+            } else {
+                log.error("获取地域列表返回结果为空");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 }