yumeng %!s(int64=4) %!d(string=hai) anos
pai
achega
dfe954f818

+ 15 - 8
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/BatchController.java

@@ -1208,15 +1208,23 @@ public class BatchController {
      * @return
      */
     @PostMapping(value = "/createCreative")
-    public Result<JSONObject> createCreative(@RequestBody JSONObject requestJson) {
-        Result<JSONObject> result = new Result<>();
+    public Result createCreative(@RequestBody JSONObject requestJson) {
+        Result result = new Result<>();
         try {
-            JSONObject creativeJson = batchService.createCreative(requestJson);
-            result.setResult(creativeJson);
-            result.setSuccess(true);
+            Map<String, Object> map = batchService.batchCreateCreative(requestJson);
+            Integer code = (Integer) map.get("code");
+            if (code == 0) {
+                result.setSuccess(true);
+                result.setMessage("创建成功");
+            } else {
+                result.setSuccess(false);
+                result.setMessage((String) map.get("message"));
+            }
+
         } catch (Exception e) {
             e.printStackTrace();
             result.setSuccess(false);
+            result.setMessage("系统错误");
         }
         return result;
     }
@@ -2327,6 +2335,7 @@ public class BatchController {
 
     /**
      * 贴纸类型
+     *
      * @param accountId
      * @return
      */
@@ -2357,6 +2366,7 @@ public class BatchController {
 
     /**
      * 创意分类
+     *
      * @param accountId
      * @return
      */
@@ -2386,7 +2396,4 @@ public class BatchController {
     }
 
 
-
-
-
 }

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

@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 
 import java.math.BigDecimal;
+import java.util.Map;
 
 public interface IBatchService {
     /**
@@ -161,9 +162,14 @@ public interface IBatchService {
 
     /**
      * 获取创意分类
+     *
      * @param accountId
      * @param accessToken
      * @return
      */
     JSONArray getCreativeCategory(Long accountId, String accessToken);
+
+
+    Map<String, Object> batchCreateCreative(JSONObject requestJson) throws Exception;
+
 }

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

@@ -501,6 +501,12 @@ public interface IKuaishouInterfaceService {
      * @return
      */
     JSONArray getPageList(Long accountId, String token, Long appId, String viewComp);
+
+
+    Map<String, Object> batchCreativeCreate(String accessToken, Long advertiserId, JSONObject requestJson, Integer count);
+
+    void getCreativeByCreativeIds(String accessToken, Long advertiserId, JSONArray creativeIds);
+
 }
 
 

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

@@ -1398,6 +1398,132 @@ public class BatchServiceImpl implements IBatchService {
     }
 
 
+    @Override
+    public Map<String, Object> batchCreateCreative(JSONObject requestJson) throws Exception {
+        if (Check.isNull(requestJson)) {
+            throw new Exception("入参为空");
+        }
+
+        Long accountId = requestJson.getLong("accountId");
+        if (Check.isNull(accountId)) {
+            throw new Exception("请输入需创建账号");
+        }
+
+        CtopOauthToken oauthToken = oauthTokenService.getTokenByAccountId(accountId);
+        if (Check.isNull(oauthToken)) {
+            throw new Exception("未获取到账户信息");
+        }
+
+        Long unitId = requestJson.getLong("unitId");
+        if (Check.isNull(unitId)) {
+            throw new Exception("请选择广告组");
+        }
+
+        JSONObject creativeJson = new JSONObject();
+        creativeJson.put("advertiser_id", accountId);
+        creativeJson.put("unit_id", unitId);
+        String click_track_url = requestJson.getString("clickTrackUrl");
+
+
+        // 素材类型
+
+        String action_bar_text = requestJson.getString("actionBarText");
+        String site_id = requestJson.getString("siteId");
+        Integer creativeCategory = requestJson.getInteger("creativeCategory");// 创意分类
+        JSONArray creativeTag = requestJson.getJSONArray("creativeTag");
+
+
+        JSONArray dataJsons = requestJson.getJSONArray("dataJson");
+        Integer content = requestJson.getInteger("content");
+
+        if (!Check.isNull(dataJsons)) {
+            JSONArray creatives = new JSONArray();
+            for (int i = 0; i < dataJsons.size(); i++) {
+                JSONObject dataJson = dataJsons.getJSONObject(i);
+                String creativeMaterialType = dataJson.getString("creativeMaterialType");
+                String shortSlogan = dataJson.getString("shortSlogan");
+                String overlayType = dataJson.getString("overlayType");
+                String stickerTitle = dataJson.getString("stickerTitle");
+                String description = dataJson.getString("description");
+                String photo_id = dataJson.getString("photoId");
+                JSONArray imageArr = dataJson.getJSONArray("imageArr");
+                if (!Check.isNull(imageArr)) {
+                    for (int j = 0; j < imageArr.size(); j++) {
+                        JSONObject imageJson = imageArr.getJSONObject(j);
+                        if (!Check.isNull(imageJson)) {
+                            JSONObject creative = new JSONObject();
+                            content += 1;
+                            String name = imageJson.getString("name") + content;
+                            creative.put("action_bar_text", action_bar_text);
+                            creative.put("description", description.trim());
+                            creative.put("creative_name", name);
+                            creative.put("photo_id", photo_id);
+                            if (!Check.isNull(site_id)) {
+                                creative.put("site_id", site_id);
+                            }
+                            if (!Check.isNull(creativeMaterialType)) {
+                                creative.put("creative_material_type", creativeMaterialType);
+                            }
+                            if (!Check.isNull(overlayType)) {
+                                creative.put("overlay_type", overlayType);
+                            }
+                            if (!Check.isNull(stickerTitle)) {
+                                creative.put("sticker_title", stickerTitle);
+                            }
+                            if (!Check.isNull(creativeCategory) && !Check.isNull(creativeTag)) {
+                                creativeJson.put("creative_category", creativeCategory);
+                                creativeJson.put("creative_tag", creativeTag);
+                            }
+                            if (creativeMaterialType.equals("4")) {
+                                if (!Check.isNull("shortSlogan")) {
+                                    creative.put("short_slogan", shortSlogan);
+                                }
+                            }
+                            String imageToken = null;
+                            String signature = imageJson.getString("signature");
+                            if (!Check.isNull(signature)) {
+                                QueryWrapper<KuaiShouImageGet> queryWrapper = new QueryWrapper<>();
+                                queryWrapper.eq("account_id", accountId);
+                                queryWrapper.eq("signature", signature);
+                                queryWrapper.last("limit 1");
+                                KuaiShouImageGet imageGet = imageGetService.getOne(queryWrapper);
+                                if (!Check.isNull(imageGet)) {
+                                    imageToken = imageGet.getImageToken();
+                                } else {
+                                    String url = imageGetService.getUrlByCode(signature);
+                                    imageToken = uploadService.kuauiShouImageUpload(url, signature, accountId, oauthToken.getAccessToken());
+                                }
+                                if (Check.isNull(imageToken)) {
+                                    continue;
+                                }
+                            }
+                            if (creativeMaterialType.equals("4")) {
+                                JSONArray tokenArr = new JSONArray();
+                                tokenArr.add(imageToken);
+                                creative.put("image_tokens", tokenArr);
+                                creativeJson.put("click_track_url", click_track_url);
+                                creativeJson.put("impression_url", click_track_url);
+                            } else {
+                                creative.put("image_token", imageToken);
+                                creativeJson.put("click_track_url", click_track_url);
+                            }
+
+                            creatives.add(creative);
+                        }
+                    }
+                }
+
+
+            }
+
+            creativeJson.put("creatives", creatives);
+        }
+
+        Map<String, Object> returnUnitMap = kuaishouInterfaceService.batchCreativeCreate(oauthToken.getAccessToken(), accountId, creativeJson, 1);
+        return returnUnitMap;
+    }
+
+
     /**
      * 获取创意信息
      *

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

@@ -1604,6 +1604,121 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
     }
 
 
+    @Override
+    public void getCreativeByCreativeIds(String accessToken, Long advertiserId, JSONArray creativeIds) {
+        String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.CREATIVE_LIST;
+        Map<String, String> headers = new HashMap<String, String>();
+        headers.put("Content-Type", " application/json");
+        headers.put("Access-Token", accessToken);
+        JSONObject param = new JSONObject();
+        param.put("advertiser_id", advertiserId);
+        //  param.put("creative_id", creativeId);
+        if (!Check.isNull(creativeIds)) {
+            param.put("creative_ids", creativeIds);
+        }
+        param.put("page_size", 200);
+        param.put("page", 1);
+        try {
+            String result = HttpUtils.kuaiShouhttpPostRequest(url, param.toJSONString(), headers);
+            JSONObject resultJson = JSONObject.parseObject(result);
+            if (!Check.isNull(resultJson)) {
+                Integer code = resultJson.getInteger("code");
+                if (code == 0) {
+                    JSONObject dataJson = resultJson.getJSONObject("data");
+                    if (!Check.isNull(dataJson)) {
+                        JSONArray details = dataJson.getJSONArray("details");
+                        if (!Check.isNull(details)) {
+                            for (int i = 0; i < details.size(); i++) {
+                                JSONObject detailJson = JSONObject.parseObject(details.get(i).toString());
+                                if (!Check.isNull(detailJson)) {
+                                    KuaiShouCreative creative = new KuaiShouCreative();
+                                    creative.setId("" + advertiserId + detailJson.getLong("creative_id"));
+                                    creative.setAccountId(advertiserId);
+                                    creative.setCampaignId(detailJson.getLong("campaign_id"));
+                                    creative.setUnitId(detailJson.getLong("unit_id"));
+                                    creative.setCreativeId(detailJson.getLong("creative_id"));
+                                    creative.setCreativeName(detailJson.getString("creative_name"));
+                                    creative.setCreativeMaterialType(detailJson.getInteger("creative_material_type"));
+                                    if (!Check.isNull(detailJson.getJSONArray("material_url"))) {
+                                        creative.setMaterialUrl(detailJson.getJSONArray("material_url").toJSONString());
+                                    }
+
+                                    if (!Check.isNull(detailJson.getJSONArray("image_tokens"))) {
+                                        creative.setImageTokens(detailJson.getJSONArray("image_tokens").toJSONString());
+                                    }
+                                    creative.setStatus(detailJson.getInteger("status"));
+                                    creative.setPutStatus(detailJson.getInteger("put_status"));
+                                    creative.setCreateChannel(detailJson.getInteger("create_channel"));
+                                    creative.setReviewDetail(detailJson.getString("review_detail"));
+                                    creative.setCoverUrl(detailJson.getString("cover_url"));
+                                    creative.setImageToken(detailJson.getString("image_token"));
+                                    creative.setCoverWidth(detailJson.getString("cover_width"));
+                                    creative.setCoverHeight(detailJson.getString("cover_height"));
+                                    creative.setOverlayBgUrl(detailJson.getString("overlay_bg_url"));
+                                    creative.setOverlayBgImageToken(detailJson.getString("overlay_bg_image_token"));
+                                    creative.setStickerTitle(detailJson.getString("sticker_title"));
+                                    creative.setOverlayType(detailJson.getString("overlay_type"));
+                                    creative.setClickTrackUrl(detailJson.getString("click_track_url"));
+                                    creative.setImpressionUrl(detailJson.getString("impression_url"));
+                                    creative.setAdPhotoPlayedT3sUrl(detailJson.getString("ad_photo_played_t3s_url"));
+                                    creative.setCreativeCreateTime(detailJson.getDate("create_time"));
+                                    creative.setCreativeUpdateTime(detailJson.getDate("update_time"));
+                                    creative.setFirstFrameType(detailJson.getInteger("first_frame_type"));
+                                    creative.setShortSlogan(detailJson.getString("short_slogan"));
+                                    creative.setActionbarClickUrl(detailJson.getString("actionbar_click_url"));
+                                    JSONObject displayInfoJson = detailJson.getJSONObject("display_info");
+
+                                    creative.setCreativeCategory(detailJson.getInteger("creative_category"));
+                                    if (!Check.isNull(detailJson.getJSONArray("creative_tag"))) {
+                                        creative.setCreativeTag(detailJson.getJSONArray("creative_tag").toJSONString());
+                                    }
+
+                                    if (!Check.isNull(displayInfoJson)) {
+                                        creative.setDescription(displayInfoJson.getString("description"));
+                                        creative.setActionBarText(displayInfoJson.getString("action_bar_text"));
+                                    }
+                                    creative.setCreateTime(new Date());
+                                    creative.setUpdateTime(new Date());
+                                    creative.setSiteId(detailJson.getLong("site_id"));
+                                    creative.setPhotoId(detailJson.getString("photo_id"));
+                                    if (detailJson.getLong("photo_id") == 0) {
+                                        JSONArray photoIds = new JSONArray();
+                                        JSONObject programmed_creative_material = detailJson.getJSONObject("programmed_creative_material");
+                                        if (!Check.isNull(programmed_creative_material)) {
+                                            creative.setProgrammedCreativeMaterial(programmed_creative_material.toJSONString());
+                                            JSONArray materials = programmed_creative_material.getJSONArray("materials");
+                                            if (!Check.isNull(materials)) {
+                                                for (int j = 0; j < materials.size(); j++) {
+                                                    JSONObject materialJson = materials.getJSONObject(j);
+                                                    if (!Check.isNull(materialJson)) {
+                                                        Long photo_id = materialJson.getLong("photo_id");
+                                                        photoIds.add(String.valueOf(photo_id));
+                                                    }
+                                                }
+                                                creative.setPhotoIds(photoIds.toJSONString());
+                                            }
+                                        }
+                                    }
+                                    creativeService.saveOrUpdate(creative);
+                                }
+
+                            }
+
+                        }
+                    }
+                } else {
+                    log.error("获取广告创意组返回结果异常,advertiserId:{},异常信息:{}", advertiserId, resultJson);
+                }
+
+            } else {
+                log.error("获取广告创意返回结果异常,advertiserId:{},异常信息:{}", advertiserId, resultJson);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
     /**
      * 获取token
      *
@@ -1863,6 +1978,85 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
 
 
     @Override
+    public Map<String, Object> batchCreativeCreate(String accessToken, Long advertiserId, JSONObject requestJson, Integer count) {
+        Map<String, Object> returnMap = new HashMap<>();
+        try {
+            String url = "https://ad.e.kuaishou.com/rest/openapi/v2/creative/batch/update";
+            requestJson.put("advertiser_id", advertiserId);
+            Map<String, String> header = new HashMap<String, String>();
+            header.put("Content-Type", " application/json");
+            header.put("Access-Token", accessToken);
+
+            String result = HttpUtils.kuaiShouhttpPostRequest(url, requestJson.toJSONString(), header);
+            JSONObject resultJson = JSONObject.parseObject(result);
+            log.info("快手创建创意返回:accountId:{},返回结果{}", advertiserId, resultJson);
+            if (!Check.isNull(resultJson)) {
+                Integer code = resultJson.getInteger("code");
+                if (code == 0) {
+                    JSONObject dataJson = resultJson.getJSONObject("data");
+                    if (!Check.isNull(dataJson)) {
+                        JSONArray add_creative_ids = dataJson.getJSONArray("add_creative_ids");
+                        if (!Check.isNull(add_creative_ids)) {
+                            Thread thread = new Thread() {
+                                @Override
+                                public void run() {
+                                    try {
+                                        Thread.sleep(100);
+                                        getCreativeByCreativeIds(accessToken, advertiserId, add_creative_ids);
+                                    } catch (InterruptedException e) {
+                                        e.printStackTrace();
+                                    }
+
+                                }
+
+                            };
+                            thread.start();
+                        }
+
+                        returnMap.put("code", 0);
+                        returnMap.put("message", "success");
+                        returnMap.put("success", true);
+                    }
+                } else {
+                    if (code == 500000 && count <= 4) {
+                        creativeCreate(accessToken, advertiserId, requestJson, count + 1);
+                    }
+
+                    if (code == 400001 && resultJson.getString("message").equals("/rest/openapi/v2/creative/create已超日限")) {
+                        overRunSendMessageService.creativeOverRunSendMessage(advertiserId);
+                    }
+                    log.error("创建广告创意失败,advertiser_id:{},返回信息:{},入参:{}", advertiserId, resultJson, requestJson, count + 1);
+                    returnMap.put("code", -1);
+                    returnMap.put("message", resultJson.getString("message"));
+                    returnMap.put("desc", "创意创建失败");
+                    returnMap.put("success", false);
+                }
+            } else {
+                if (count <= 4) {
+                    batchCreativeCreate(accessToken, advertiserId, requestJson, count + 1);
+                }
+
+                log.error("快手创建广告创意返回内容为空,advertiser_id:{},入参:{}", advertiserId, requestJson);
+                returnMap.put("code", -1);
+                returnMap.put("message", "系统异常");
+                returnMap.put("desc", "result is null");
+                returnMap.put("success", false);
+            }
+
+        } catch (Exception e) {
+            log.error("创建广告创意失败,advertiser_id:{}", advertiserId);
+            returnMap.put("code", -1);
+            returnMap.put("message", "error");
+            returnMap.put("desc", "Interface exception");
+            returnMap.put("success", false);
+            e.printStackTrace();
+        }
+        return returnMap;
+
+    }
+
+
+    @Override
     public Map<String, Object> videoUpload(Long advertiserId, String accessToken, String videoUrl) {
         Map<String, Object> returnMap = new HashMap<>();
         try {