Browse Source

批量改版

yumeng 5 years ago
parent
commit
4762b0881d

+ 3 - 3
jeecg-boot-module-system/src/main/resources/jeecg/jeecg_database.properties

@@ -1,8 +1,8 @@
 #mysql
 diver_name=com.mysql.jdbc.Driver
-url=jdbc:mysql://127.0.0.1:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8
-username=root
-password=123456
+url=jdbc:mysql://139.186.31.213:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8
+username=hcst
+password=hcst2020
 database_name=jeecg-boot
 #oracle
 #diver_name=oracle.jdbc.driver.OracleDriver

+ 7 - 18
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -13,6 +13,7 @@ import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouDailyReportTaskService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouHistoryReportTaskService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouProgramCreativeService;
 import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService;
 import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportDailyAgentService;
 import cn.com.ctop.oa.modules.service.IWechatCheckinDataService;
@@ -32,7 +33,6 @@ import org.springframework.test.context.junit4.SpringRunner;
 
 import java.io.File;
 import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -70,24 +70,13 @@ public class SampleTest {
     private IWechatCheckinDataService wechatCheckinDataService;
     @Autowired
     private ICtopOauthTokenService tokenService;
+    @Autowired
+    private IKuaishouProgramCreativeService programCreativeService;
 
 
     @Test
     public void getDepartment() throws ParseException {
-        List<CtopOauthToken> tokens = tokenService.selectKuaiShouToken();
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
-        Date parse1 = simpleDateFormat.parse("2020-09-12");
-        Date parse2 = simpleDateFormat.parse("2020-09-17");
-        for (CtopOauthToken token : tokens) {
-
-            kuaishouInterfaceService.getAdvertiserGroupReportDaily(token, parse1, parse2);
-
-        }
-
-    //    wechatCheckinDataService.getCheckinData();
-        //  wechatUserInfoService.getUserList();
-        // wechatDepartment.getDepartment();
-        // kuaishouInterfaceService.getSuZaoList("a34853c230e1b949eddbe569023dbc40", 7022550L, 1, "2020-09-15", "2020-09-16");
+        programCreativeService.getProgramCreative(7087890L, null, "cf379009264c1f83b2af926d8fdaf9f7", null, null, 1);
 
     }
 
@@ -97,10 +86,10 @@ public class SampleTest {
         QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("media_id", 2);
         List<CtopOauthToken> list = oauthTokenService.list(queryWrapper);
-         for (CtopOauthToken token : list) {
-        kuaiShouHistoryReportTaskService.createTask(token.getAccountId(), token.getAccessToken(), "2020-09-20", "2020-09-20", "daily");
+        for (CtopOauthToken token : list) {
+            kuaiShouHistoryReportTaskService.createTask(token.getAccountId(), token.getAccessToken(), "2020-09-20", "2020-09-20", "daily");
 
-         }
+        }
 
     }
 

+ 9 - 3
module-common/src/main/java/cn/com/ctop/common/module/utils/KuaishouInterfaceConstant.java

@@ -20,6 +20,10 @@ public class KuaishouInterfaceConstant {
      */
     public static final String CAMPAIGN_REPORT = "/rest/openapi/v1/report/campaign_report";
     /**
+     * 程序化2.0创意
+     */
+    public static final String PROGRAM_LIST = "/rest/openapi/v2/creative/advanced/program/list";
+    /**
      * 广告组报表数据
      */
     public static final String GTOUP_REPORT = "/rest/openapi/v1/report/unit_report";
@@ -48,10 +52,14 @@ public class KuaishouInterfaceConstant {
      */
     public static final String AD_UNIT_CREATE = "/rest/openapi/v2/ad_unit/create";
     /**
-     * 创建广告
+     * 创建广告创意
      */
     public static final String AD_CREATIVE_CREATE = "/rest/openapi/v2/creative/create";
     /**
+     * 程序化创意 2.0
+     */
+    public static final String PROGRAM_CREATE = "/rest/openapi/v2/creative/advanced/program/create";
+    /**
      * 获取可选的深度转化类型
      */
     public static final String DEEP_CONVERSION_INFOS = "/rest/openapi/v1/ad_unit/ocpc/conversion_infos";
@@ -238,6 +246,4 @@ public class KuaishouInterfaceConstant {
     public static final String HTTPS_PREFIX = "https:";
 
 
-
-
 }

+ 304 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaishouProgramCreativeController.java

@@ -0,0 +1,304 @@
+package cn.com.ctop.kuaishou.modules.batch.controller;
+
+import cn.com.ctop.common.module.annotation.AutoLog;
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.kuaishou.modules.batch.entity.KuaishouProgramCreative;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouProgramCreativeService;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+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.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 快手-程序化创意
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-09-22
+ */
+@Slf4j
+@Api(tags = "快手-程序化创意")
+@RestController
+@RequestMapping("/ctop/kuaishouProgramCreative")
+public class KuaishouProgramCreativeController {
+    @Autowired
+    private IKuaishouProgramCreativeService kuaishouProgramCreativeService;
+    @Autowired
+    private ICtopOauthTokenService oauthTokenService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param kuaishouProgramCreative
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "快手-程序化创意-分页列表查询")
+    @ApiOperation(value = "快手-程序化创意-分页列表查询", notes = "快手-程序化创意-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<KuaishouProgramCreative>> queryPageList(KuaishouProgramCreative kuaishouProgramCreative,
+                                                                @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                                @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                                HttpServletRequest req) {
+        Result<IPage<KuaishouProgramCreative>> result = new Result<>();
+        try {
+            if (Check.isNull(kuaishouProgramCreative.getAccountId()) || Check.isNull(kuaishouProgramCreative.getUnitId())) {
+                throw new Exception("必填参数不能为空");
+            }
+
+            CtopOauthToken oauthToken = oauthTokenService.getTokenByAccountId(kuaishouProgramCreative.getAccountId());
+            if (Check.isNull(oauthToken)) {
+                throw new Exception("未获取到账户信息");
+            }
+            kuaishouProgramCreativeService.getProgramCreative(oauthToken.getAccountId(), kuaishouProgramCreative.getUnitId(), oauthToken.getAccessToken(), null, null, 1);
+            QueryWrapper<KuaishouProgramCreative> queryWrapper = QueryGenerator.initQueryWrapper(kuaishouProgramCreative, req.getParameterMap());
+            Page<KuaishouProgramCreative> page = new Page<KuaishouProgramCreative>(pageNo, pageSize);
+            IPage<KuaishouProgramCreative> pageList = kuaishouProgramCreativeService.page(page, queryWrapper);
+            result.setSuccess(true);
+            result.setResult(pageList);
+        } catch (Exception e) {
+            result.setMessage(e.getMessage());
+        }
+
+        return result;
+    }
+
+
+    /**
+     * 创建程序化创意
+     *
+     * @param requestJson
+     * @return
+     */
+
+    @PostMapping(value = "/createProgramCreative")
+    public Result<KuaishouProgramCreative> createProgramCreative(@RequestBody JSONObject requestJson) {
+        Result<KuaishouProgramCreative> result = new Result<>();
+        try {
+            if (Check.isNull(requestJson)) {
+                throw new Exception("创建程序化创意参数不能为空");
+            }
+
+            Long accountId = requestJson.getLong("accountId");
+            if (Check.isNull(accountId)) {
+                throw new Exception("请选择账户id");
+            }
+            CtopOauthToken oauthToken = oauthTokenService.getTokenByAccountId(accountId);
+            if (Check.isNull(oauthToken)) {
+                throw new Exception("未获取到账户信息");
+            }
+
+
+            JSONObject returnJson = kuaishouProgramCreativeService.createProgramCreative(oauthToken, requestJson);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            result.setSuccess(false);
+            result.setMessage(e.getMessage());
+        }
+        return result;
+    }
+
+
+    /**
+     * 添加
+     *
+     * @param kuaishouProgramCreative
+     * @return
+     */
+    @AutoLog(value = "快手-程序化创意-添加")
+    @ApiOperation(value = "快手-程序化创意-添加", notes = "快手-程序化创意-添加")
+    @PostMapping(value = "/add")
+    public Result<KuaishouProgramCreative> add(@RequestBody KuaishouProgramCreative kuaishouProgramCreative) {
+        Result<KuaishouProgramCreative> result = new Result<>();
+        try {
+            kuaishouProgramCreativeService.save(kuaishouProgramCreative);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param kuaishouProgramCreative
+     * @return
+     */
+    @AutoLog(value = "快手-程序化创意-编辑")
+    @ApiOperation(value = "快手-程序化创意-编辑", notes = "快手-程序化创意-编辑")
+    @PutMapping(value = "/edit")
+    public Result<KuaishouProgramCreative> edit(@RequestBody KuaishouProgramCreative kuaishouProgramCreative) {
+        Result<KuaishouProgramCreative> result = new Result<KuaishouProgramCreative>();
+        KuaishouProgramCreative kuaishouProgramCreativeEntity = kuaishouProgramCreativeService.getById(kuaishouProgramCreative.getId());
+        if (kuaishouProgramCreativeEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = kuaishouProgramCreativeService.updateById(kuaishouProgramCreative);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "快手-程序化创意-通过id删除")
+    @ApiOperation(value = "快手-程序化创意-通过id删除", notes = "快手-程序化创意-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        try {
+            kuaishouProgramCreativeService.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<KuaishouProgramCreative> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<KuaishouProgramCreative> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.kuaishouProgramCreativeService.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<KuaishouProgramCreative> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<KuaishouProgramCreative> result = new Result<>();
+        KuaishouProgramCreative kuaishouProgramCreative = kuaishouProgramCreativeService.getById(id);
+        if (kuaishouProgramCreative == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(kuaishouProgramCreative);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<KuaishouProgramCreative> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                KuaishouProgramCreative kuaishouProgramCreative = JSON.parseObject(deString, KuaishouProgramCreative.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(kuaishouProgramCreative, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<KuaishouProgramCreative> pageList = kuaishouProgramCreativeService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "快手-程序化创意列表");
+        mv.addObject(NormalExcelConstants.CLASS, KuaishouProgramCreative.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("快手-程序化创意列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<KuaishouProgramCreative> listKuaishouProgramCreatives = ExcelImportUtil.importExcel(file.getInputStream(), KuaishouProgramCreative.class, params);
+                kuaishouProgramCreativeService.saveBatch(listKuaishouProgramCreatives);
+                return Result.ok("文件导入成功!数据行数:" + listKuaishouProgramCreatives.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.ok("文件导入失败!");
+    }
+
+}

+ 170 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/entity/KuaishouProgramCreative.java

@@ -0,0 +1,170 @@
+package cn.com.ctop.kuaishou.modules.batch.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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 org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 快手-程序化创意
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-09-22
+ */
+@Data
+@TableName("ctop_kuaishou_program_creative")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_program_creative对象", description = "快手-程序化创意")
+public class KuaishouProgramCreative {
+
+    /**
+     * id
+     */
+    @TableId
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 账户ID
+     */
+    @Excel(name = "账户ID", width = 15)
+    @ApiModelProperty(value = "账户ID")
+    private Long accountId;
+    /**
+     * 广告组ID
+     */
+    @Excel(name = "广告组ID", width = 15)
+    @ApiModelProperty(value = "广告组ID")
+    private Long unitId;
+    /**
+     * 程序化创意包名称
+     */
+    @Excel(name = "程序化创意包名称", width = 15)
+    @ApiModelProperty(value = "程序化创意包名称")
+    private String packageName;
+    /**
+     * 横版视频 id list
+     */
+    @Excel(name = "横版视频 id list", width = 15)
+    @ApiModelProperty(value = "横版视频 id list")
+    private String horizontalPhotoIds;
+    /**
+     * 竖版视频 id list
+     */
+    @Excel(name = "竖版视频 id list", width = 15)
+    @ApiModelProperty(value = "竖版视频 id list")
+    private String verticalPhotoIds;
+    /**
+     * 封面imageToken
+     */
+    @Excel(name = "封面imageToken", width = 15)
+    @ApiModelProperty(value = "封面imageToken")
+    private String coverImageTokens;
+    /**
+     * 封面链接地址
+     */
+    @Excel(name = "封面链接地址", width = 15)
+    @ApiModelProperty(value = "封面链接地址")
+    private String coverImageUrls;
+    /**
+     * 建站id
+     */
+    @Excel(name = "建站id", width = 15)
+    @ApiModelProperty(value = "建站id")
+    private Long siteId;
+    /**
+     * 封面贴纸
+     */
+    @Excel(name = "封面贴纸", width = 15)
+    @ApiModelProperty(value = "封面贴纸")
+    private String stickerStyles;
+    /**
+     * 封面广告语
+     */
+    @Excel(name = "封面广告语", width = 15)
+    @ApiModelProperty(value = "封面广告语")
+    private String coverSlogans;
+    /**
+     * 行动号召按钮
+     */
+    @Excel(name = "行动号召按钮", width = 15)
+    @ApiModelProperty(value = "行动号召按钮")
+    private String actionBar;
+    /**
+     * 作品广告语
+     */
+    @Excel(name = "作品广告语", width = 15)
+    @ApiModelProperty(value = "作品广告语")
+    private String captions;
+    /**
+     * 第三方监测链接
+     */
+    @Excel(name = "第三方监测链接", width = 15)
+    @ApiModelProperty(value = "第三方监测链接")
+    private String clickUrl;
+    /**
+     * 第三方ActionBar点击监控链接
+     */
+    @Excel(name = "第三方ActionBar点击监控链接", width = 15)
+    @ApiModelProperty(value = "第三方ActionBar点击监控链接")
+    private String actionbarClickUrl;
+    /**
+     * 程序化创意操作状态,1:投放,2:暂停,3:删除
+     */
+    @Excel(name = "程序化创意操作状态,1:投放,2:暂停,3:删除", width = 15)
+    @ApiModelProperty(value = "程序化创意操作状态,1:投放,2:暂停,3:删除")
+    private Integer putStatus;
+    /**
+     * 程序化创意状态 -1:不限,1:计划已暂停,3:计划超预算,6:余额不足,11:组审核中,12:组审核未通过,14:已结束,15:组已暂停,17:组超预算,19:未达投放时间,40:创意已删除,41:审核中,42:审核未通过,46:已暂停,52:投放中,53:作品异常,55:部分素材审核通过
+     */
+    @Excel(name = "程序化创意状态 -1:不限,1:计划已暂停,3:计划超预算,6:余额不足,11:组审核中,12:组审核未通过,14:已结束,15:组已暂停,17:组超预算,19:未达投放时间,40:创意已删除,41:审核中,42:审核未通过,46:已暂停,52:投放中,53:作品异常,55:部分素材审核通过", width = 15)
+    @ApiModelProperty(value = "程序化创意状态 -1:不限,1:计划已暂停,3:计划超预算,6:余额不足,11:组审核中,12:组审核未通过,14:已结束,15:组已暂停,17:组超预算,19:未达投放时间,40:创意已删除,41:审核中,42:审核未通过,46:已暂停,52:投放中,53:作品异常,55:部分素材审核通过")
+    private Integer viewStatus;
+    /**
+     * 程序化创意状态描述
+     */
+    @Excel(name = "程序化创意状态描述", width = 15)
+    @ApiModelProperty(value = "程序化创意状态描述")
+    private String viewStatusReason;
+    /**
+     * 创意创建时间
+     */
+    @Excel(name = "创意创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创意创建时间")
+    private Date creativeCreateTime;
+    /**
+     * 创意最后修改时间
+     */
+    @Excel(name = "创意最后修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创意最后修改时间")
+    private Date creativeUpdateTime;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @Excel(name = "updateTime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 16 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaishouProgramCreativeMapper.java

@@ -0,0 +1,16 @@
+package cn.com.ctop.kuaishou.modules.batch.mapper;
+
+import cn.com.ctop.kuaishou.modules.batch.entity.KuaishouProgramCreative;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 快手-程序化创意
+ *
+ * @author: jeecg-boot
+ * @date: 2020-09-22
+ * @cersion: V1.0
+ */
+public interface KuaishouProgramCreativeMapper extends BaseMapper<KuaishouProgramCreative> {
+
+
+}

+ 5 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaishouProgramCreativeMapper.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="cn/com/ctop/kuaishou/modules/batch/mapper/KuaishouProgramCreativeMapper.java:14">
+
+</mapper>

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

@@ -0,0 +1,18 @@
+package cn.com.ctop.kuaishou.modules.batch.service;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.kuaishou.modules.batch.entity.KuaishouProgramCreative;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 快手-程序化创意
+ * @Author: jeecg-boot
+ * @Date: 2020-09-22
+ * @Version: V1.0
+ */
+public interface IKuaishouProgramCreativeService extends IService<KuaishouProgramCreative> {
+    void getProgramCreative(Long accountId, Long unitId, String accessToken, String startDate, String endDate, Integer page);
+
+    JSONObject createProgramCreative(CtopOauthToken oauthToken, JSONObject requestJson);
+}

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

@@ -0,0 +1,152 @@
+package cn.com.ctop.kuaishou.modules.batch.service.impl;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.HttpUtils;
+import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
+import cn.com.ctop.common.module.utils.PropertiesUtils;
+import cn.com.ctop.kuaishou.modules.batch.entity.KuaishouProgramCreative;
+import cn.com.ctop.kuaishou.modules.batch.mapper.KuaishouProgramCreativeMapper;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouProgramCreativeService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import lombok.var;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 快手-程序化创意
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-09-22
+ */
+@Service
+@Slf4j
+public class KuaishouProgramCreativeServiceImpl extends ServiceImpl<KuaishouProgramCreativeMapper, KuaishouProgramCreative> implements IKuaishouProgramCreativeService {
+
+    @Override
+    public void getProgramCreative(Long accountId, Long unitId, String accessToken, String startDate, String endDate, Integer page) {
+        String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.PROGRAM_LIST;
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        headers.put("Access-Token", accessToken);
+        Map<String, Object> param = new HashMap<>();
+        if (!Check.isNull(startDate)) {
+            param.put("start_date", startDate);
+        }
+        if (!Check.isNull(endDate)) {
+            param.put("end_date", endDate);
+        }
+
+        if (!Check.isNull(unitId)) {
+            JSONArray array = new JSONArray();
+            array.add(unitId);
+            param.put("unit_ids", array);
+        }
+
+
+        param.put("advertiser_id", accountId);
+        param.put("page_size", 500);
+        param.put("page", page);
+
+        String result = HttpUtils.httpPostRequest(url, param, headers);
+        JSONObject resultJson = JSONObject.parseObject(result);
+        System.err.println(resultJson);
+        Integer code = resultJson.getInteger("code");
+        String message = resultJson.getString("message");
+        if (null == code || code != 0) {
+            log.error("获取快手广程序化创意异常:{},accountId:{}", message, accountId);
+            return;
+        }
+        JSONObject dataJson = resultJson.getJSONObject("data");
+        if (Check.isNull(dataJson)) {
+            log.error("获取快手广程序化创意返回data为空,accountId:{}", accountId);
+            return;
+        }
+        JSONArray details = dataJson.getJSONArray("details");
+        if (Check.isNull(details)) {
+            return;
+        }
+
+        List<KuaishouProgramCreative> programCreativeList = new ArrayList<>();
+        for (int i = 0; i < details.size(); i++) {
+            JSONObject detailJson = details.getJSONObject(i);
+            if (!Check.isNull(detailJson)) {
+                detailJson.put("creative_create_time", detailJson.getDate("create_time"));
+                detailJson.put("creative_update_time", detailJson.getDate("update_time"));
+                var programCreative = JSONObject.toJavaObject(detailJson, KuaishouProgramCreative.class);
+                programCreative.setAccountId(accountId);
+                programCreative.setId(accountId + "_" + programCreative.getUnitId());
+                programCreativeList.add(programCreative);
+
+            }
+        }
+
+        this.saveOrUpdateBatch(programCreativeList);
+        getProgramCreative(accountId, unitId, accessToken, startDate, endDate, page + 1);
+
+
+    }
+
+    /**
+     * 创建程序化2.0
+     *
+     * @param oauthToken
+     * @param requestJson
+     * @return
+     */
+
+    @Override
+    public JSONObject createProgramCreative(CtopOauthToken oauthToken, JSONObject requestJson) {
+        try {
+
+
+            JSONObject pramsJson = new JSONObject();
+            pramsJson.put("advertiser_id", oauthToken.getAccountId());
+            pramsJson.put("unit_id", requestJson.getLong("unitId"));
+            pramsJson.put("package_name", requestJson.getLong("packageName"));
+            pramsJson.put("horizontal_photo_ids", requestJson.getJSONArray("horizontalPhotoIds"));
+            pramsJson.put("vertical_photo_ids", requestJson.getJSONArray("verticalPhotoIds"));
+            pramsJson.put("cover_image_tokens", requestJson.getJSONArray("coverImageTokens"));
+            if (!Check.isNull(requestJson.getLong("siteId"))) {
+                pramsJson.put("site_id", requestJson.getLong("siteId"));
+            }
+
+            if (!Check.isNull(requestJson.getJSONArray("stickerStyles"))) {
+                pramsJson.put("sticker_styles", requestJson.getJSONArray("stickerStyles"));
+            }
+
+            if (!Check.isNull(requestJson.getJSONArray("coverSlogans"))) {
+                pramsJson.put("cover_slogans", requestJson.getJSONArray("coverSlogans"));
+            }
+
+            pramsJson.put("action_bar", requestJson.getString("actionBar"));
+            pramsJson.put("captions", requestJson.getJSONArray("captions"));
+            if (!Check.isNull(requestJson.getString("clickUrl"))) {
+                pramsJson.put("click_url", requestJson.getString("clickUrl"));
+            }
+            if (!Check.isNull(requestJson.getString("actionbarClickUrl"))) {
+                pramsJson.put("actionbar_click_url", requestJson.getString("actionbarClickUrl"));
+            }
+            Map<String, String> headers = new HashMap<>();
+            headers.put("Content-Type", "application/json");
+            headers.put("Access-Token", oauthToken.getAccessToken());
+            String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.PROGRAM_CREATE;
+            String result = HttpUtils.kuaiShouhttpPostRequest(url, requestJson.toJSONString(), headers);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+
+        }
+
+
+        return null;
+    }
+}

+ 1 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatUserListService.java

@@ -13,3 +13,4 @@ public interface IWechatUserListService extends IService<WechatUserList> {
     void getUserList();
 
 }
+