Bläddra i källkod

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceAdvertiserPostController.java
xuzuoyun 5 år sedan
förälder
incheckning
c61385ec47
21 ändrade filer med 431 tillägg och 211 borttagningar
  1. 2 0
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/StatusCode.java
  2. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/JeecgOneToMainUtil.java
  3. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  4. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceBudgetTemplateController.java
  5. 4 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceCampaignTemplateController.java
  6. 28 20
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceTemplateController.java
  7. 4 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/BytedanceDeliveryTargetTemplateController.java
  8. 10 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ByteDanceBudgetTemplate.java
  9. 9 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ByteDanceCampaignTemplate.java
  10. 7 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ByteDanceUserOrientationTemplate.java
  11. 3 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/BytedanceAdvertisePlanTemplate.java
  12. 17 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/BytedanceDeliveryTargetTemplate.java
  13. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IByteDanceAdvertisePlanService.java
  14. 69 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceAdvertisePlanServiceImpl.java
  15. 19 7
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceBudgetTemplateServiceImpl.java
  16. 27 17
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceCampaignTemplateServiceImpl.java
  17. 167 154
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceCreativeServiceImpl.java
  18. 4 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceUserOrientationTemplateServiceImpl.java
  19. 2 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/BytedanceAdvertisePlanTemplateServiceImpl.java
  20. 23 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/BytedanceDeliveryTargetTemplateServiceImpl.java
  21. 24 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/vo/AdConvertVo.java

+ 2 - 0
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/StatusCode.java

@@ -19,6 +19,8 @@ public enum StatusCode {
     BYTEDANCE_VIDEO_UPLOAD_FAIL("今日头条视频文件上传失败", -201, false),
     IMAGE_NUMBER_SHORTAGE("今日头条图片文件上传失败", -202, false),
     BYTEDANCE_IMAGE_UPLOAD_FAIL("今日头条图片文件上传失败", -203, false),
+    TEMPLATE_NAME_HAS_EXIST("模板名称已存在", -204, false),
+    TEMPLATE_NAME_IS_NULL("模板名称为空", -205, false),
     COMMON_SERVER_ERROR("server error", -102, false),
     COMMON_DATA_HAS_EXIST_ERROR("data has exist", -103, false),
     COMMON_CHANNEL_NOT_EXIST_ERROR("channel not exist", -104, false),

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

@@ -32,7 +32,7 @@ public class JeecgOneToMainUtil {
 		//[1].子表一
 		SubTableVo po = new SubTableVo();
         po.setTableName("sys_category");//表名
-        po.setEntityName("ChildCategory");        //实体名
+        po.setEntityName("Category");        //实体名
         po.setEntityPackage("ctop");            //包名
         po.setFtlDescription("子分类信息");       //描述
 		//子表外键参数配置

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

@@ -93,6 +93,7 @@ public class ShiroConfig {
 		filterChainDefinitionMap.put("/toutiao/advertiser/**", "anon");
         filterChainDefinitionMap.put("/toutiao/industry/list", "anon");
         filterChainDefinitionMap.put("/template/bytedance/industry/list", "anon");
+        filterChainDefinitionMap.put("/template/convert/list", "anon");
 		//文件上传接口
 		filterChainDefinitionMap.put("/upload/**", "anon");
 

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

@@ -8,9 +8,12 @@ import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.ctop.entity.ByteDanceBudgetTemplate;
 import org.jeecg.modules.ctop.service.IByteDanceBudgetTemplateService;
@@ -66,6 +69,8 @@ public class ByteDanceBudgetTemplateController {
                                                                 HttpServletRequest req) {
         Result<IPage<ByteDanceBudgetTemplate>> result = new Result<IPage<ByteDanceBudgetTemplate>>();
         QueryWrapper<ByteDanceBudgetTemplate> queryWrapper = QueryGenerator.initQueryWrapper(byteDanceBudgetTemplate, req.getParameterMap());
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        queryWrapper.eq("advertiser_id", user.getId());
         Page<ByteDanceBudgetTemplate> page = new Page<ByteDanceBudgetTemplate>(pageNo, pageSize);
         IPage<ByteDanceBudgetTemplate> pageList = byteDanceBudgetTemplateService.page(page, queryWrapper);
 		result.setSuccess(true);

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

@@ -9,9 +9,11 @@ import java.net.URLDecoder;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.ctop.entity.ByteDanceCampaignTemplate;
 import org.jeecg.modules.ctop.service.IByteDanceCampaignTemplateService;
@@ -70,6 +72,8 @@ public class ByteDanceCampaignTemplateController {
                                                                   HttpServletRequest req) {
         Result<IPage<ByteDanceCampaignTemplate>> result = new Result<IPage<ByteDanceCampaignTemplate>>();
         QueryWrapper<ByteDanceCampaignTemplate> queryWrapper = QueryGenerator.initQueryWrapper(byteDanceCampaignTemplate, req.getParameterMap());
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        queryWrapper.eq("advertiser_id", user.getId());
         Page<ByteDanceCampaignTemplate> page = new Page<ByteDanceCampaignTemplate>(pageNo, pageSize);
         IPage<ByteDanceCampaignTemplate> pageList = byteDanceCampaignTemplateService.page(page, queryWrapper);
         result.setSuccess(true);

+ 28 - 20
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceTemplateController.java

@@ -20,6 +20,18 @@ import java.util.Map;
 @RequestMapping("template")
 public class ByteDanceTemplateController {
     /**
+     * 广告组模板
+     *
+     * @param template
+     * @param req
+     * @return
+     */
+    @PostMapping("campaign/insert")
+    public Map<String, Object> campaignTemplateInsert(@RequestBody ByteDanceCampaignTemplate template, HttpServletRequest req) {
+        return campaignTemplateService.insertTemplate(template);
+    }
+
+    /**
      * 预算与出价模板
      *
      * @param template
@@ -33,20 +45,19 @@ public class ByteDanceTemplateController {
     }
 
     /**
-     * 广告组模板
-     * 完成
+     * 投放目标
+     *
      * @param template
      * @param req
      * @return
      */
-    @PostMapping("campaign/insert")
-    public Map<String, Object> campaignTemplateInsert(@RequestBody ByteDanceCampaignTemplate template, HttpServletRequest req) {
-        return campaignTemplateService.insertTemplate(template);
+    @PostMapping("deliverytarget/insert")
+    public Map<String, Object> diliverytargetTemplateInsert(@RequestBody BytedanceDeliveryTargetTemplate template, HttpServletRequest req) {
+        return deliveryTargetTemplateService.insertTemplate(template);
     }
 
     /**
-     * 广告组模板
-     * 完成
+     * 广告创意创建
      *
      * @param template
      * @return
@@ -59,18 +70,6 @@ public class ByteDanceTemplateController {
     @Autowired
     private IByteDanceCreativeService creativeService;
 
-    /**
-     * 投放目标
-     *
-     * @param template
-     * @param req
-     * @return
-     */
-    @PostMapping("deliverytarget/insert")
-    public Map<String, Object> diliverytargetTemplateInsert(@RequestBody BytedanceDeliveryTargetTemplate template, HttpServletRequest req) {
-        return deliveryTargetTemplateService.insertTemplate(template);
-    }
-
     @PostMapping(value = "allocation/list")
     public Result<IPage<UserAllocation>> queryPageList(@RequestBody UserAllocation userAllocation,
                                                        @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@@ -102,7 +101,7 @@ public class ByteDanceTemplateController {
 
     /**
      * 广告计划模板
-     *
+     *  方法废弃
      * @param template
      * @param req
      * @return
@@ -167,6 +166,15 @@ public class ByteDanceTemplateController {
     }
 
     /**
+     * @param accountId
+     * @return 查询计划可用转化id
+     */
+    @GetMapping(value = "convert/list")
+    public Map<String, Object> convertPageList(Long accountId, String packageName) {
+        return planService.getAdConvertList(accountId, packageName);
+    }
+
+    /**
      * @param req
      * @return
      * @功能:获取头条行业信息列表

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

@@ -9,9 +9,11 @@ import java.net.URLDecoder;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.ctop.entity.BytedanceDeliveryTargetTemplate;
 import org.jeecg.modules.ctop.service.IBytedanceDeliveryTargetTemplateService;
@@ -70,6 +72,8 @@ public class BytedanceDeliveryTargetTemplateController {
                                                                         HttpServletRequest req) {
         Result<IPage<BytedanceDeliveryTargetTemplate>> result = new Result<IPage<BytedanceDeliveryTargetTemplate>>();
         QueryWrapper<BytedanceDeliveryTargetTemplate> queryWrapper = QueryGenerator.initQueryWrapper(bytedanceDeliveryTargetTemplate, req.getParameterMap());
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        queryWrapper.eq("advertiser_id", user.getId());
         Page<BytedanceDeliveryTargetTemplate> page = new Page<BytedanceDeliveryTargetTemplate>(pageNo, pageSize);
         IPage<BytedanceDeliveryTargetTemplate> pageList = bytedanceDeliveryTargetTemplateService.page(page, queryWrapper);
         result.setSuccess(true);

+ 10 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ByteDanceBudgetTemplate.java

@@ -36,6 +36,13 @@ public class ByteDanceBudgetTemplate {
     @ApiModelProperty(value = "id")
     private Long id;
     /**
+     * 平台广告主id
+     * advertiserId
+     */
+    @Excel(name = "平台广告主id", width = 15)
+    @ApiModelProperty(value = "advertiser_id")
+    private String advertiserId;
+    /**
      * 模板名称
      */
     @Excel(name = "模板名称", width = 15)
@@ -74,13 +81,13 @@ public class ByteDanceBudgetTemplate {
     /**
      * startDate
      */
-    @Excel(name = "startDate", width = 15)
+    @Excel(name = "开始日期", width = 15)
     @ApiModelProperty(value = "startDate")
     private String startDate;
     /**
      * endDate
      */
-    @Excel(name = "endDate", width = 15)
+    @Excel(name = "结束日子", width = 15)
     @ApiModelProperty(value = "endDate")
     private String endDate;
     /**
@@ -104,7 +111,7 @@ public class ByteDanceBudgetTemplate {
     /**
      * convertPrice
      */
-    @Excel(name = "convertPrice", width = 15)
+    @Excel(name = "转化出价", width = 15)
     @ApiModelProperty(value = "convertPrice")
     private String convertPrice;
     /**

+ 9 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ByteDanceCampaignTemplate.java

@@ -37,10 +37,16 @@ public class ByteDanceCampaignTemplate {
     @ApiModelProperty(value = "id")
     private Long id;
     /**
-     * 投放目标
+     * 平台广告主id
+     * advertiserId
      */
-    @Excel(name = "投放目标", width = 15)
-    @ApiModelProperty(value = "投放目标")
+    @ApiModelProperty(value = "advertiser_id")
+    private String advertiserId;
+    /**
+     * 推广目的
+     */
+    @Excel(name = "推广目的", width = 15)
+    @ApiModelProperty(value = "推广目的")
     @Dict(dicCode = "toutiao_promotion_purpose_type")
     private String promotionPurpose;
     /**

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

@@ -36,6 +36,13 @@ public class ByteDanceUserOrientationTemplate {
     @ApiModelProperty(value = "id")
     private Long id;
     /**
+     * 平台广告主id
+     * advertiserId
+     */
+    @Excel(name = "平台广告主id")
+    @ApiModelProperty(value = "advertiser_id")
+    private String advertiserId;
+    /**
      * 模板名称
      */
     @Excel(name = "模板名称", width = 15)

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

@@ -13,6 +13,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import org.jeecg.common.aspect.annotation.Dict;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.jeecgframework.poi.excel.annotation.Excel;
 
@@ -41,11 +42,13 @@ public class BytedanceAdvertisePlanTemplate {
     @Excel(name = "广告组模板id", width = 15)
     @ApiModelProperty(value = "广告组模板id")
     private Long campaignTemplateId;
+
     /**
      * 投放范围
      */
     @Excel(name = "投放范围", width = 15)
     @ApiModelProperty(value = "投放范围")
+    @Dict(dicCode = "toutiao_advertising_scope")
     private String deliveryRange;
     /**
      * 用户定向模板id

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

@@ -13,6 +13,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import org.jeecg.common.aspect.annotation.Dict;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.jeecgframework.poi.excel.annotation.Excel;
 
@@ -36,6 +37,20 @@ public class BytedanceDeliveryTargetTemplate {
     @ApiModelProperty(value = "id")
     private Long id;
     /**
+     * 平台广告主id
+     * advertiserId
+     */
+    @Excel(name = "平台广告主id", width = 15)
+    @ApiModelProperty(value = "advertiser_id")
+    private String advertiserId;
+    /**
+     * 投放范围
+     */
+    @Excel(name = "投放范围", width = 15)
+    @ApiModelProperty(value = "delivery_range")
+    private String deliveryRange;
+
+    /**
      * 模板名称
      */
     @Excel(name = "模板名称", width = 15)
@@ -46,12 +61,14 @@ public class BytedanceDeliveryTargetTemplate {
      */
     @Excel(name = "投放目标", width = 15)
     @ApiModelProperty(value = "投放目标")
+    @Dict(dicCode = "toutiao_delivery_target_type")
     private String deliveryTarget;
     /**
      * 下载方式
      */
     @Excel(name = "下载方式", width = 15)
     @ApiModelProperty(value = "下载方式")
+    @Dict(dicCode = "toutiao_dowload_type")
     private String downloadType;
     /**
      * 下载链接

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

@@ -1,7 +1,10 @@
 package org.jeecg.modules.ctop.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.ctop.entity.ByteDanceAdvertisePlan;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.ctop.entity.ByteDanceCampaign;
 import org.jeecg.modules.ctop.entity.CTopOauthToken;
 
 import java.util.Map;
@@ -15,4 +18,6 @@ import java.util.Map;
 public interface IByteDanceAdvertisePlanService extends IService<ByteDanceAdvertisePlan> {
 
     Map<String, Object> advertiserPlanCreate(CTopOauthToken token, Long campaignId, String dataString);
+
+    Map<String, Object> getAdConvertList(Long accountId, String packageName);
 }

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

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
@@ -25,6 +26,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.net.URI;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -62,6 +64,73 @@ public class ByteDanceAdvertisePlanServiceImpl extends ServiceImpl<ByteDanceAdve
         return resultMap;
     }
 
+    @Override
+    public Map<String, Object> getAdConvertList(Long accountId, String packageName) {
+        CTopOauthToken token = tokenService.getOAuthTokenByAccountId(accountId + "");
+        return getAdConvert(token, packageName);
+    }
+
+    public JSONObject getAdConvert(CTopOauthToken token, String packageName) {
+        String access_token = token.getAccessToken();
+        final Long advertiser_id = token.getAccountId();
+        // 请求地址
+        String url = "https://ad.toutiao.com/open_api/2/tools/ad_convert/select/";
+
+        // 请求参数
+        Map data = new HashMap() {
+            {
+                put("advertiser_id", advertiser_id);
+                put("package_name", packageName);
+            }
+        };
+
+        // 构造请求
+        HttpEntityEnclosingRequestBase httpEntity = new HttpEntityEnclosingRequestBase() {
+            @Override
+            public String getMethod() {
+                return "GET";
+            }
+        };
+
+        httpEntity.setHeader("Access-Token", access_token);
+
+        CloseableHttpResponse response = null;
+        CloseableHttpClient client = null;
+
+        try {
+            client = HttpClientBuilder.create().build();
+            httpEntity.setURI(URI.create(url));
+            httpEntity.setEntity(new StringEntity(JSONObject.toJSONString(data), ContentType.APPLICATION_JSON));
+
+            response = client.execute(httpEntity);
+            if (response != null && response.getStatusLine().getStatusCode() == 200) {
+                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
+                StringBuffer result = new StringBuffer();
+                String line = "";
+                while ((line = bufferedReader.readLine()) != null) {
+                    result.append(line);
+                }
+                bufferedReader.close();
+                return JSONObject.parseObject(result.toString());
+            }
+
+        } catch (ClientProtocolException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (response != null) {
+                    response.close();
+                }
+                client.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
     @Autowired
     private ByteDanceAdvertisePlanMapper planMapper;
 

+ 19 - 7
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceBudgetTemplateServiceImpl.java

@@ -8,6 +8,8 @@ import org.apache.shiro.subject.Subject;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.ResultMapUtils;
+import org.jeecg.common.util.StatusCode;
 import org.jeecg.modules.ctop.entity.*;
 import org.jeecg.modules.ctop.mapper.ByteDanceAdvertiserMapper;
 import org.jeecg.modules.ctop.mapper.ByteDanceBudgetTemplateMapper;
@@ -38,13 +40,20 @@ public class ByteDanceBudgetTemplateServiceImpl extends ServiceImpl<ByteDanceBud
     @Override
     public Map<String, Object> insertTemplate(ByteDanceBudgetTemplate template) {
         Map<String, Object> resultMap = new HashMap<>();
-        QueryWrapper<ByteDanceBudgetTemplate> queryWrapper = new QueryWrapper<ByteDanceBudgetTemplate>();
+        String name = template.getName();
+        Long id = template.getId();
+        if (null == name || "".equals(name.trim())) {
+            ResultMapUtils.setResultMap(resultMap, StatusCode.TEMPLATE_NAME_IS_NULL.getCode());
+            return resultMap;
+        }
+        QueryWrapper<ByteDanceBudgetTemplate> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("name", template.getName());
-        queryWrapper.ne("id", template.getId());
+        if (null != id && id != 0) {
+            queryWrapper.ne("id", template.getId());
+        }
         List<ByteDanceBudgetTemplate> templateExistList = this.list(queryWrapper);
         if (templateExistList != null && templateExistList.size() > 0) {
-            resultMap.put("success", false);
-            resultMap.put("message", "模板名称已存在,请修改后重试");
+            ResultMapUtils.setResultMap(resultMap, StatusCode.TEMPLATE_NAME_HAS_EXIST.getCode());
             return resultMap;
         }
         template.setStatus(1);
@@ -54,9 +63,10 @@ public class ByteDanceBudgetTemplateServiceImpl extends ServiceImpl<ByteDanceBud
         if (template.getEndDate() != null) {
             template.setEndDate(template.getEndDate().substring(0, 10));
         }
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        template.setAdvertiserId(user.getId());
         this.saveOrUpdate(template);
-        resultMap.put("success", true);
-        resultMap.put("message", "模板保存成功");
+        ResultMapUtils.setResultMap(resultMap, StatusCode.COMMON_SUCCESS.getCode());
         return resultMap;
     }
 
@@ -64,7 +74,9 @@ public class ByteDanceBudgetTemplateServiceImpl extends ServiceImpl<ByteDanceBud
     public Result<IPage<ByteDanceBudgetTemplate>> getList(ByteDanceBudgetTemplate template, Integer pageNo, Integer pageSize, HttpServletRequest req) {
         Result<IPage<ByteDanceBudgetTemplate>> result = new Result<>();
         QueryWrapper<ByteDanceBudgetTemplate> queryWrapper = QueryGenerator.initQueryWrapper(template, req.getParameterMap());
-        queryWrapper.orderByDesc("create_time");
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String advertiserId = user.getId();
+        queryWrapper.eq("advertiser_id", advertiserId).orderByDesc("create_time");
         Page<ByteDanceBudgetTemplate> page = new Page<>(pageNo, pageSize);
         IPage<ByteDanceBudgetTemplate> pageList = this.page(page, queryWrapper);
         result.setSuccess(true);

+ 27 - 17
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceCampaignTemplateServiceImpl.java

@@ -5,6 +5,7 @@ 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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
@@ -16,12 +17,13 @@ import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.ResultMapUtils;
+import org.jeecg.common.util.StatusCode;
 import org.jeecg.modules.ctop.entity.ByteDanceCampaign;
 import org.jeecg.modules.ctop.entity.ByteDanceCampaignTemplate;
 import org.jeecg.modules.ctop.entity.CTopOauthToken;
 import org.jeecg.modules.ctop.mapper.ByteDanceCampaignMapper;
 import org.jeecg.modules.ctop.mapper.ByteDanceCampaignTemplateMapper;
-import org.jeecg.modules.ctop.service.IByteDanceAdvertiserDataService;
 import org.jeecg.modules.ctop.service.IByteDanceCampaignTemplateService;
 import org.jeecg.modules.ctop.service.ICTopOauthTokenService;
 import org.slf4j.Logger;
@@ -29,8 +31,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
 import javax.servlet.http.HttpServletRequest;
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -39,7 +39,6 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.logging.SimpleFormatter;
 
 /**
  * @Description: 今日头条广告组模板信息
@@ -53,24 +52,36 @@ public class ByteDanceCampaignTemplateServiceImpl extends ServiceImpl<ByteDanceC
     @Override
     public Map<String, Object> insertTemplate(ByteDanceCampaignTemplate template) {
         Map<String, Object> resultMap = new HashMap<>();
+        String name = template.getCampaignName();
+        Long id = template.getId();
+        if (null == name || "".equals(name)) {
+            ResultMapUtils.setResultMap(resultMap, StatusCode.TEMPLATE_NAME_IS_NULL.getCode());
+            return resultMap;
+        }
+        QueryWrapper<ByteDanceCampaignTemplate> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("campaign_name", template.getCampaignName());
+        if (null != template.getId() && template.getId() != 0) {
+            queryWrapper.ne("id", template.getId());
+        }
+        ByteDanceCampaignTemplate templateExist = getOne(queryWrapper);
+        if (null != templateExist) {
+            ResultMapUtils.setResultMap(resultMap, StatusCode.TEMPLATE_NAME_HAS_EXIST.getCode());
+            return resultMap;
+        }
+        template.setStatus(1);
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        CTopOauthToken token = tokenService.getOAuthTokenByAccountId(user.getId());
-        campaignTemplateMapper.insert(template);
-        //新增数据
-        //        return advertiserDataService.campaignCreate(token, template);
-        resultMap.put("success", true);
-        resultMap.put("message", "广告组模板创建成功");
-        resultMap.put("code", 0);
+        template.setAdvertiserId(user.getId());
+        this.saveOrUpdate(template);
+        ResultMapUtils.setResultMap(resultMap, StatusCode.COMMON_SUCCESS.getCode());
         return resultMap;
     }
-
-    @Autowired
-    private IByteDanceAdvertiserDataService advertiserDataService;
     @Override
     public Result<IPage<ByteDanceCampaignTemplate>> getList(ByteDanceCampaignTemplate template, Integer pageNo, Integer pageSize, HttpServletRequest req) {
         Result<IPage<ByteDanceCampaignTemplate>> result = new Result<>();
         QueryWrapper<ByteDanceCampaignTemplate> queryWrapper = QueryGenerator.initQueryWrapper(template, req.getParameterMap());
-        queryWrapper.orderByDesc("create_time");
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String advertiserId = user.getId();
+        queryWrapper.eq("advertiser_id", advertiserId).orderByDesc("create_time");
         Page<ByteDanceCampaignTemplate> page = new Page<>(pageNo, pageSize);
         IPage<ByteDanceCampaignTemplate> pageList = this.page(page, queryWrapper);
         result.setSuccess(true);
@@ -107,7 +118,6 @@ public class ByteDanceCampaignTemplateServiceImpl extends ServiceImpl<ByteDanceC
         }
         Long id = data.getLong("campaign_id");
         ByteDanceCampaign campaign = new ByteDanceCampaign(id, token, campaignName, budgetMode, budget, landingType);
-        //清除清数据,插入新数据
         campaignMapper.insert(campaign);
         resultMap.put("code", 0);
         resultMap.put("message", "广告组创建成功");
@@ -158,7 +168,7 @@ public class ByteDanceCampaignTemplateServiceImpl extends ServiceImpl<ByteDanceC
         JSONObject params = new JSONObject();
         params.put("advertiser_id", token.getAccountId());
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_hh_mm_ss");
-        params.put("campaign_name", name + sdf.format(name + "_广告组_" + new Date()) + "汇创思拓_" + System.currentTimeMillis());
+        params.put("campaign_name", name + "_广告组_" + sdf.format(new Date()) + "汇创思拓_" + System.currentTimeMillis());
         params.put("budget_mode", template.getCampaignBudget());
         params.put("budget", template.getBudgetDaily());
         params.put("landing_type", template.getPromotionPurpose());

+ 167 - 154
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceCreativeServiceImpl.java

@@ -11,6 +11,8 @@ import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
+import org.jeecg.common.util.ResultMapUtils;
+import org.jeecg.common.util.StatusCode;
 import org.jeecg.modules.ctop.entity.ByteDanceCreative;
 import org.jeecg.modules.ctop.entity.CTopOauthToken;
 import org.jeecg.modules.ctop.mapper.ByteDanceCreativeMapper;
@@ -72,6 +74,7 @@ public class ByteDanceCreativeServiceImpl extends ServiceImpl<ByteDanceCreativeM
 
     @Override
     public Map<String, Object> insertBatch(JSONObject template) {
+        Map<String, Object> resultMap = new HashMap<>();
         System.out.println(template.toJSONString());
         String getName = template.getString("name");
         String getAccountId = template.getLong("accountId") + "";
@@ -80,170 +83,180 @@ public class ByteDanceCreativeServiceImpl extends ServiceImpl<ByteDanceCreativeM
         Long userorentationId = template.getLong("userorentationId");
         Long budgetId = template.getLong("budgetId");
         Long deliverytargetId = template.getLong("deliverytargetId");
-        //1:创建广告组
-        Map<String, Object> campaignResult = campaignTemplateService.campaignCreate(getAccountId, campaignTemplateId, getName);
-        Boolean createSuccess = (Boolean) campaignResult.get("success");
-        if (null == createSuccess || !createSuccess) {
-            return campaignResult;
-        }
-        Long campaignId = (Long) campaignResult.get("campaignId");
-        //2:创建广告计划
-        Map<String, Object> planResult = planTemplateService.planCreate(campaignId, getAccountId, deliveryRange, userorentationId, budgetId, deliverytargetId, getName);
-        createSuccess = (Boolean) planResult.get("success");
-        if (null == createSuccess || !createSuccess) {
-            return planResult;
-        }
-        Long planId = (Long) campaignResult.get("planId");
-        //3:创建广告创意
-        //<a-radio-button value="CREATIVE_IMAGE_MODE_VIDEO">横版视频</a-radio-button>
-        JSONArray horizonImageIds = new JSONArray();
-        String horizonVideoId = "";
-        String horizonVideoCoverImageId = "";
-
-        //<a-radio-button value="CREATIVE_IMAGE_MODE_VIDEO_VERTICAL">竖版视频</a-radio-button>
-        String verticalVideoId = "";
-        String verticalVideoCoverImageId = "";
+        Integer iteratorNum = template.getInteger("iteratorNum");
 
-        //<a-radio-button value="CREATIVE_IMAGE_MODE_GROUP">组图</a-radio-button>
-        JSONArray groupImageIds = new JSONArray();
+        JSONArray groupImageArray = null;
+        JSONArray horizonImageArray = null;
+        String horizonVideoCoverImage = null;
+        String horizonVideo = null;
+        JSONArray verticalVideoCoverImageArray = null;
+        String verticalVideoId = null;
+        JSONArray smallImageArray = null;
+        JSONArray verticalImageArray = null;
+        if (null != iteratorNum && iteratorNum >= 1) {
+            for (int i = 0; i < iteratorNum; i++) {
+                //1:创建广告组
+                Map<String, Object> campaignResult = campaignTemplateService.campaignCreate(getAccountId, campaignTemplateId, getName);
+                Boolean createSuccess = (Boolean) campaignResult.get("success");
+                if (null == createSuccess || !createSuccess) {
+                    return campaignResult;
+                }
+                Long campaignId = (Long) campaignResult.get("campaignId");
+                //2:创建广告计划
+                Map<String, Object> planResult = planTemplateService.planCreate(campaignId, getAccountId, deliveryRange, userorentationId, budgetId, deliverytargetId, getName);
+                createSuccess = (Boolean) planResult.get("success");
+                if (null == createSuccess || !createSuccess) {
+                    return planResult;
+                }
+                Long planId = (Long) campaignResult.get("planId");
+                //3:创建广告创意
+                JSONObject data = new JSONObject();
+                data.put("ad_id", planId);
+                String advertiseLoaction = template.getString("advertiseLocation");
+                //优选广告位
+                if (null != advertiseLoaction && "great".equals(advertiseLoaction)) {
+                    data.put("smart_inventory", 1);
+                } else {
+                    data.put("smart_inventory", 0);
+                }
+                //按媒体指定位置
+                if (null != advertiseLoaction && "media".equals(advertiseLoaction)) {
+                    JSONArray inventoryType = template.getJSONArray("inventoryType");
+                    data.put("inventory_type", inventoryType);
+                }
+                //按场景指定位置
+                if (null != advertiseLoaction && "sence".equals(advertiseLoaction)) {
+                    data.put("scene_inventory", template.getString("sceneInventory"));
+                }
+                JSONArray creatives = new JSONArray();
+                String horizonImageUrl = template.getString("horizonImageUrl");
+                String horizonImageCreativeText = template.getString("horizonImageCreativeText");
+                if (null != horizonImageUrl && !"".equals(horizonImageUrl) && null != horizonImageCreativeText && !"".equals(horizonImageCreativeText)) {
+                    JSONObject creative = new JSONObject();
+                    creative.put("image_mode", "CREATIVE_IMAGE_MODE_LARGE");
+                    if (null == horizonImageArray) {
+                        Map<String, Object> getImageResult = fileInfoService.uploadImageToBytedance(getAccountId, horizonImageUrl);
+                        horizonImageArray = (JSONArray) getImageResult.get("imageIds");
+                    }
+//            web.business.image/201908015d0dd63849aa78f142989c70
+                    creative.put("image_ids", horizonImageArray);
+                    creative.put("title", horizonImageCreativeText);
+                    creatives.add(creative);
+                }
+                String horizonVideoUrl = template.getString("horizonVideoUrl");
+                String horizonVideoCoverImageUrl = template.getString("horizonVideoCoverImageUrl");
+                String horizonVideoCreativeText = template.getString("horizonVideoCreativeText");
+                if (null != horizonVideoUrl && !"".equals(horizonVideoUrl) && null != horizonVideoCoverImageUrl && !"".equals(horizonVideoCoverImageUrl) && null != horizonVideoCreativeText && !"".equals(horizonVideoCreativeText)) {
+                    JSONObject creative = new JSONObject();
+                    creative.put("image_mode", "CREATIVE_IMAGE_MODE_VIDEO");
+                    if (null == horizonVideoCoverImage) {
+                        Map<String, Object> getImageResult = fileInfoService.uploadImageToBytedance(getAccountId, horizonVideoCoverImageUrl);
+                        JSONArray horizonVideoCoverImageArray = (JSONArray) getImageResult.get("imageIds");
+                        horizonVideoCoverImage = horizonVideoCoverImageArray.getString(0);
+                    }
 
-        //<a-radio-button value="CREATIVE_IMAGE_MODE_SMALL">小图</a-radio-button>
-        JSONArray smallImageIds = new JSONArray();
+                    if (null == horizonVideo) {
+                        Map<String, Object> getVideoResult = fileInfoService.uploadVideoToBytedance(getAccountId, horizonVideoCreativeText);
+                        horizonVideo = (String) getVideoResult.get("videoId");
+                    }
+                    creative.put("image_id", horizonVideoCoverImage);
+                    creative.put("video_id", horizonVideo);
+                    creative.put("title", horizonVideoCreativeText);
+                    creatives.add(creative);
+                }
+                String verticalVideoUrl = template.getString("verticalVideoUrl");
+                String verticalVideoCoverImageUrl = template.getString("verticalVideoCoverImageUrl");
+                String verticalVideoCreativeText = template.getString("verticalVideoCreativeText");
+                if (null != verticalVideoUrl && !"".equals(verticalVideoUrl) && null != verticalVideoCoverImageUrl && !"".equals(verticalVideoCoverImageUrl) && null != verticalVideoCreativeText && !"".equals(verticalVideoCreativeText)) {
+                    JSONObject creative = new JSONObject();
+                    creative.put("image_mode", "CREATIVE_IMAGE_MODE_VIDEO_VERTICAL");
+                    if (null == verticalImageArray) {
+                        Map<String, Object> getImageResult = fileInfoService.uploadImageToBytedance(getAccountId, verticalVideoCoverImageUrl);
+                        verticalVideoCoverImageArray = (JSONArray) getImageResult.get("imageIds");
+                    }
+                    if (null == verticalVideoId || "".equals(verticalVideoId.trim())) {
+                        Map<String, Object> getVideoResult = fileInfoService.uploadVideoToBytedance(getAccountId, verticalVideoUrl);
+                        verticalVideoId = (String) getVideoResult.get("videoId");
+                    }
+                    creative.put("image_id", verticalVideoCoverImageArray.getString(0));
+                    creative.put("video_id", verticalVideoId);
+                    creative.put("title", verticalVideoCreativeText);
+                    creatives.add(creative);
+                }
+                String groupImageUrl = template.getString("groupImageUrl");
+                String groupImageCreativeText = template.getString("groupImageCreativeText");
+                if (null != groupImageUrl && !"".equals(groupImageUrl) && null != groupImageCreativeText && !"".equals(groupImageCreativeText)) {
+                    JSONObject creative = new JSONObject();
+                    creative.put("image_mode", "CREATIVE_IMAGE_MODE_GROUP");
+                    if (null == groupImageArray) {
+                        Map<String, Object> getImageResult = fileInfoService.uploadImageToBytedance(getAccountId, groupImageUrl);
+                        groupImageArray = (JSONArray) getImageResult.get("imageIds");
+                    }
+                    creative.put("image_ids", groupImageArray);
+                    creative.put("title", groupImageCreativeText);
+                    creatives.add(creative);
+                }
+                String smallImageUrl = template.getString("smallImageUrl");
+                String smallImageCreativeText = template.getString("smallImageCreativeText");
+                if (null != smallImageUrl && !"".equals(smallImageUrl) && null != smallImageCreativeText && !"".equals(smallImageCreativeText)) {
+                    JSONObject creative = new JSONObject();
+                    creative.put("image_mode", "CREATIVE_IMAGE_MODE_SMALL");
+                    if (null == smallImageArray) {
+                        Map<String, Object> getImageResult = fileInfoService.uploadImageToBytedance(getAccountId, smallImageUrl);
+                        smallImageArray = (JSONArray) getImageResult.get("imageIds");
+                    }
+                    creative.put("image_ids", smallImageArray);
+                    creative.put("title", smallImageCreativeText);
+                    creatives.add(creative);
+                }
 
-        //<a-radio-button value="CREATIVE_IMAGE_MODE_LARGE_VERTICAL">大图竖图</a-radio-button>
-        JSONArray verticalImageIds = new JSONArray();
+                String verticalImageUrl = template.getString("verticalImageUrl");
+                String verticalImageCreativeText = template.getString("verticalImageCreativeText");
+                if (null != verticalImageUrl && !"".equals(verticalImageUrl) && null != verticalImageCreativeText && !"".equals(verticalImageCreativeText)) {
+                    JSONObject creative = new JSONObject();
+                    creative.put("image_mode", "CREATIVE_IMAGE_MODE_LARGE_VERTICAL");
+                    if (null == verticalImageArray) {
+                        Map<String, Object> getImageResult = fileInfoService.uploadImageToBytedance(getAccountId, verticalImageUrl);
+                        verticalImageArray = (JSONArray) getImageResult.get("imageIds");
+                    }
+                    creative.put("image_ids", verticalImageArray);
+                    creative.put("title", verticalImageCreativeText);
+                    creatives.add(creative);
+                }
 
-//        creative_display_mode
-        JSONObject data = new JSONObject();
-        data.put("ad_id", planId);
-        String advertiseLoaction = template.getString("advertiseLocation");
-        //优选广告位
-        if (null != advertiseLoaction && "great".equals(advertiseLoaction)) {
-            data.put("smart_inventory", 1);
-        } else {
-            data.put("smart_inventory", 0);
-        }
-        //按媒体指定位置
-        if (null != advertiseLoaction && "media".equals(advertiseLoaction)) {
-            JSONArray inventoryType = template.getJSONArray("inventoryType");
-            data.put("inventory_type", inventoryType);
-        }
-        //按场景指定位置
-        if (null != advertiseLoaction && "sence".equals(advertiseLoaction)) {
-            data.put("scene_inventory", template.getString("sceneInventory"));
-        }
-        JSONArray creatives = new JSONArray();
 
-        //<a-radio-button value="">大图横图</a-radio-button>
-        String horizonImageUrl = template.getString("horizonImageUrl");
-        String horizonImageCreativeText = template.getString("horizonImageCreativeText");
-        if (null != horizonImageUrl && !"".equals(horizonImageUrl) && null != horizonImageCreativeText && !"".equals(horizonImageCreativeText)) {
-            JSONObject creative = new JSONObject();
-            creative.put("image_mode", "CREATIVE_IMAGE_MODE_LARGE");
-//            Map<String,Object> getImageResult = fileInfoService.uploadImageToBytedance(getAccountId,horizonImageUrl);
-//            JSONArray imageArray = (JSONArray) getImageResult.get("imageIds");
-//            web.business.image/201908015d0dd63849aa78f142989c70
-            JSONArray imageArray = new JSONArray();
-            imageArray.add("web.business.image/201908015d0dd63849aa78f142989c70");
-            creative.put("image_ids", imageArray);
-            creative.put("title", horizonImageCreativeText);
-            creatives.add(creative);
-        }
-        //<a-radio-button value="CREATIVE_IMAGE_MODE_VIDEO">横版视频</a-radio-button>
-        String horizonVideoUrl = template.getString("horizonVideoUrl");
-        String horizonVideoCoverImageUrl = template.getString("horizonVideoCoverImageUrl");
-        String horizonVideoCreativeText = template.getString("horizonVideoCreativeText");
-        if (null != horizonVideoUrl && !"".equals(horizonVideoUrl) && null != horizonVideoCoverImageUrl && !"".equals(horizonVideoCoverImageUrl) && null != horizonVideoCreativeText && !"".equals(horizonVideoCreativeText)) {
-            JSONObject creative = new JSONObject();
-            creative.put("image_mode", "CREATIVE_IMAGE_MODE_VIDEO");
-            Map<String, Object> getImageResult = fileInfoService.uploadImageToBytedance(getAccountId, horizonVideoCoverImageUrl);
-            JSONArray imageArray = (JSONArray) getImageResult.get("imageIds");
-            Map<String, Object> getVideoResult = fileInfoService.uploadVideoToBytedance(getAccountId, horizonVideoCreativeText);
-            String videoId = (String) getVideoResult.get("videoId");
-            creative.put("image_id", imageArray.getString(0));
-            creative.put("video_id", videoId);
-            creative.put("title", horizonVideoCreativeText);
-            creatives.add(creative);
-        }
-        //<a-radio-button value="CREATIVE_IMAGE_MODE_VIDEO_VERTICAL">竖版视频</a-radio-button>
-        String verticalVideoUrl = template.getString("verticalVideoUrl");
-        String verticalVideoCoverImageUrl = template.getString("verticalVideoCoverImageUrl");
-        String verticalVideoCreativeText = template.getString("verticalVideoCreativeText");
-        if (null != verticalVideoUrl && !"".equals(verticalVideoUrl) && null != verticalVideoCoverImageUrl && !"".equals(verticalVideoCoverImageUrl) && null != verticalVideoCreativeText && !"".equals(verticalVideoCreativeText)) {
-            JSONObject creative = new JSONObject();
-            creative.put("image_mode", "CREATIVE_IMAGE_MODE_VIDEO_VERTICAL");
-            Map<String, Object> getImageResult = fileInfoService.uploadImageToBytedance(getAccountId, verticalVideoCoverImageUrl);
-            JSONArray imageArray = (JSONArray) getImageResult.get("imageIds");
-            Map<String, Object> getVideoResult = fileInfoService.uploadVideoToBytedance(getAccountId, verticalVideoUrl);
-            String videoId = (String) getVideoResult.get("videoId");
-            creative.put("image_id", imageArray.getString(0));
-            creative.put("video_id", videoId);
-            creative.put("title", verticalVideoCreativeText);
-            creatives.add(creative);
-        }
-        //<a-radio-button value="CREATIVE_IMAGE_MODE_GROUP">组图</a-radio-button>
-        String groupImageUrl = template.getString("groupImageUrl");
-        String groupImageCreativeText = template.getString("groupImageCreativeText");
-        if (null != groupImageUrl && !"".equals(groupImageUrl) && null != groupImageCreativeText && !"".equals(groupImageCreativeText)) {
-            JSONObject creative = new JSONObject();
-            creative.put("image_mode", "CREATIVE_IMAGE_MODE_GROUP");
-            Map<String, Object> getImageResult = fileInfoService.uploadImageToBytedance(getAccountId, groupImageUrl);
-            JSONArray imageArray = (JSONArray) getImageResult.get("imageIds");
-            creative.put("image_ids", imageArray);
-            creative.put("title", groupImageCreativeText);
-            creatives.add(creative);
-        }
+                data.put("creatives", creatives);
 
-        //<a-radio-button value="CREATIVE_IMAGE_MODE_SMALL">小图</a-radio-button>
-        String smallImageUrl = template.getString("smallImageUrl");
-        String smallImageCreativeText = template.getString("smallImageCreativeText");
-        if (null != smallImageUrl && !"".equals(smallImageUrl) && null != smallImageCreativeText && !"".equals(smallImageCreativeText)) {
-            JSONObject creative = new JSONObject();
-            creative.put("image_mode", "CREATIVE_IMAGE_MODE_SMALL");
-            Map<String, Object> getImageResult = fileInfoService.uploadImageToBytedance(getAccountId, smallImageUrl);
-            JSONArray imageArray = (JSONArray) getImageResult.get("imageIds");
-            creative.put("image_ids", imageArray);
-            creative.put("title", smallImageCreativeText);
-            creatives.add(creative);
-        }
+                //应用下载详情页
+                data.put("web_url", template.getString("webUrl"));
+                //应用名
+                data.put("app_name", template.getString("appName"));
+                //广告评论
+                data.put("is_comment_disable ", template.getIntValue("isCommentDisable"));
+                //创意展现方式
+                data.put("creative_display_mode ", template.getString("creativeDisplayMode"));
+                //创意分类
+                JSONArray categorys = template.getJSONArray("adCategory");
+                String thirdIndustryId = categorys.getString(2);
+                data.put("third_industry_id", Integer.parseInt(thirdIndustryId));
+                //创意标签
+                data.put("ad_keywords", template.getJSONArray("adKeywords"));
+                String name = template.getString("name");
+                //创意标题
+                data.put("title", name + "_" + i + "_" + System.currentTimeMillis());
 
-        //<a-radio-button value="CREATIVE_IMAGE_MODE_LARGE_VERTICAL">大图竖图</a-radio-button>
-        String verticalImageUrl = template.getString("verticalImageUrl");
-        String verticalImageCreativeText = template.getString("verticalImageCreativeText");
-        if (null != verticalImageUrl && !"".equals(verticalImageUrl) && null != verticalImageCreativeText && !"".equals(verticalImageCreativeText)) {
-            JSONObject creative = new JSONObject();
-            creative.put("image_mode", "CREATIVE_IMAGE_MODE_LARGE_VERTICAL");
-//            Map<String,Object> getImageResult = fileInfoService.uploadImageToBytedance(getAccountId,verticalImageUrl);
-//            JSONArray imageArray = (JSONArray) getImageResult.get("imageIds");
-            JSONArray imageArray = new JSONArray();
-            imageArray.add("web.business.image/201908025d0d9292d0662227454294d5");
-            creative.put("image_ids", imageArray);
-            creative.put("title", verticalImageCreativeText);
-            creatives.add(creative);
+                resultMap = creativeCreate(getAccountId, planId, data.toJSONString());
+                createSuccess = (Boolean) resultMap.get("success");
+                if (null != createSuccess && !createSuccess) {
+                    return resultMap;
+                }
+            }
         }
-
-
-        data.put("creatives", creatives);
-
-        //应用下载详情页
-        data.put("web_url", template.getString("webUrl"));
-        //应用名
-        data.put("app_name", template.getString("appName"));
-        //广告评论
-        data.put("is_comment_disable ", template.getIntValue("isCommentDisable"));
-        //创意展现方式
-        data.put("creative_display_mode ", template.getString("creativeDisplayMode"));
-        //创意分类
-        JSONArray categorys = template.getJSONArray("adCategory");
-        String thirdIndustryId = categorys.getString(2);
-        data.put("third_industry_id", Integer.parseInt(thirdIndustryId));
-        //创意标签
-        data.put("ad_keywords", template.getJSONArray("adKeywords"));
-        //创意标题
-        data.put("title", "测试创意标题123" + System.currentTimeMillis());
-        return creativeCreate(getAccountId, planId, data.toJSONString());
+        ResultMapUtils.setResultMap(resultMap, StatusCode.COMMON_SUCCESS.getCode());
+        return resultMap;
     }
 
+
     @Autowired
     private IByteDanceAdvertiserDataService advertiserDataService;
 

+ 4 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceUserOrientationTemplateServiceImpl.java

@@ -37,7 +37,7 @@ public class ByteDanceUserOrientationTemplateServiceImpl extends ServiceImpl<Byt
     public Map<String, Object> insertTemplate(ByteDanceUserOrientationTemplate template) {
         Map<String, Object> resultMap = new HashMap<>();
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        CTopOauthToken token = tokenService.getOAuthTokenByAccountId(user.getId());
+        template.setAdvertiserId(user.getId());
         template.setStatus(1);
         templateMapper.insert(template);
         resultMap.put("success", true);
@@ -48,8 +48,10 @@ public class ByteDanceUserOrientationTemplateServiceImpl extends ServiceImpl<Byt
     @Override
     public Result<IPage<ByteDanceUserOrientationTemplate>> getList(ByteDanceUserOrientationTemplate template, Integer pageNo, Integer pageSize, HttpServletRequest req) {
         Result<IPage<ByteDanceUserOrientationTemplate>> result = new Result<>();
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String advertiserId = user.getId();
         QueryWrapper<ByteDanceUserOrientationTemplate> queryWrapper = QueryGenerator.initQueryWrapper(template, req.getParameterMap());
-        queryWrapper.orderByDesc("create_time");
+        queryWrapper.eq("advertiser_id", advertiserId).orderByDesc("create_time");
         Page<ByteDanceUserOrientationTemplate> page = new Page<>(pageNo, pageSize);
         IPage<ByteDanceUserOrientationTemplate> pageList = this.page(page, queryWrapper);
         result.setSuccess(true);

+ 2 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/BytedanceAdvertisePlanTemplateServiceImpl.java

@@ -84,7 +84,8 @@ public class BytedanceAdvertisePlanTemplateServiceImpl extends ServiceImpl<Byted
         //广告预算
         data.put("budget", budgetTemplate.getBudgetPrice());//需要大于bid
         //转化出价(ocpm请填写 cpa_bid)
-        data.put("bid", budgetTemplate.getBudgetPrice());
+        data.put("cpa_bid", budgetTemplate.getBudgetPrice());
+        data.put("convert_id", 92029616038L);
         //广告投放时间类型
         data.put("schedule_type", budgetTemplate.getFlowDateType());
         //广告投放开始时间

+ 23 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/BytedanceDeliveryTargetTemplateServiceImpl.java

@@ -7,6 +7,8 @@ import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.ResultMapUtils;
+import org.jeecg.common.util.StatusCode;
 import org.jeecg.modules.ctop.entity.ByteDanceCampaignTemplate;
 import org.jeecg.modules.ctop.entity.BytedanceDeliveryTargetTemplate;
 import org.jeecg.modules.ctop.entity.CTopOauthToken;
@@ -21,6 +23,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentLinkedDeque;
 
 /**
  * @Description: 投放目标模板信息
@@ -34,10 +37,27 @@ public class BytedanceDeliveryTargetTemplateServiceImpl extends ServiceImpl<Byte
     @Override
     public Map<String, Object> insertTemplate(BytedanceDeliveryTargetTemplate template) {
         Map<String, Object> resultMap = new HashMap<>();
+        Long id = template.getId();
+        String name = template.getName();
+        if (null == name || "".equals(name.trim())) {
+            ResultMapUtils.setResultMap(resultMap, StatusCode.TEMPLATE_NAME_IS_NULL.getCode());
+            return resultMap;
+        }
+        QueryWrapper<BytedanceDeliveryTargetTemplate> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("name", template.getName());
+        if (null != id && id != 0) {
+            queryWrapper.ne("id", id);
+        }
+        BytedanceDeliveryTargetTemplate templateExist = getOne(queryWrapper);
+        if (null != templateExist) {
+            ResultMapUtils.setResultMap(resultMap, StatusCode.TEMPLATE_NAME_HAS_EXIST.getCode());
+            return resultMap;
+        }
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        template.setAdvertiserId(user.getId());
         template.setStatus(1);
-        deliveryTargetTemplateMapper.insert(template);
-        resultMap.put("success", true);
-        resultMap.put("message", "投放目标模板保存成功");
+        this.saveOrUpdate(template);
+        ResultMapUtils.setResultMap(resultMap, StatusCode.COMMON_SUCCESS.getCode());
         return resultMap;
     }
 

+ 24 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/vo/AdConvertVo.java

@@ -0,0 +1,24 @@
+package org.jeecg.modules.ctop.vo;
+
+import java.io.Serializable;
+
+public class AdConvertVo implements Serializable {
+    /**
+     * 广告主id
+     */
+    private Long advertiserId;
+    /**
+     * 落地页链接
+     */
+    private String externalUrl;
+    /**
+     * 安卓包名
+     */
+    private String packageName;
+    /**
+     * ios应用下载链接
+     */
+    private String itunesUrl;
+
+
+}