Selaa lähdekoodia

V1.1.3 自动投放 拒审重提完成

yumeng 4 vuotta sitten
vanhempi
commit
87ac2e186c

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/MaterialCutFrameMapper.java

@@ -21,4 +21,6 @@ public interface MaterialCutFrameMapper extends BaseMapper<MaterialCutFrame> {
     List<MaterialCutFrame> getListByVideoSignature(@Param(value = "videoSignature") String signature);
 
     List<JSONObject> getProgramCreativeCover(@Param("signature") String signature);
+
+    JSONObject getCutFrameByVideoMd5(@Param("photoId") String photoId,@Param("imageToken") String imageToken);
 }

+ 28 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/MaterialCutFrameMapper.xml

@@ -34,4 +34,32 @@
       ORDER BY RAND() LIMIT 5;
     </select>
 
+    <select id="getCutFrameByVideoMd5" resultType="com.alibaba.fastjson.JSONObject">
+      SELECT
+	   url as 'url',
+	   signature as 'signature'
+        FROM
+	    ctop_material_cut_frame
+        WHERE
+	video_signature = (
+		SELECT
+			signature
+		FROM
+			ctop_kuaishou_video_get
+		WHERE
+			photo_id = #{photoId}
+		LIMIT 1
+	    )
+        AND signature != (
+	SELECT
+		signature
+	FROM
+		ctop_kuaishou_image_get
+	WHERE
+		image_token = #{imageToken}
+	LIMIT 1
+        )
+        LIMIT 1
+    </select>
+
 </mapper>

+ 9 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialCutFrameService.java

@@ -29,4 +29,13 @@ public interface IMaterialCutFrameService extends IService<MaterialCutFrame> {
     List<JSONObject> getProgramCreativeCover(String signature);
 
     MaterialCutFrame selectByMd5(String md5);
+
+    /**
+     * 根基photoId imageToken 获取单张封面
+     *
+     * @param photoId
+     * @param imageToken
+     * @return
+     */
+    JSONObject getCutFrameByVideoMd5(String photoId, String imageToken);
 }

+ 9 - 7
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialCutFrameServiceImpl.java

@@ -1,26 +1,23 @@
 package cn.com.ctop.common.module.service.impl;
 
-import cn.com.ctop.common.module.constant.OssConstant;
 import cn.com.ctop.common.module.entity.MaterialCutFrame;
 import cn.com.ctop.common.module.entity.MaterialCutFrameTask;
 import cn.com.ctop.common.module.mapper.MaterialCutFrameMapper;
 import cn.com.ctop.common.module.service.IMaterialCutFrameService;
 import cn.com.ctop.common.module.service.IMaterialCutFrameTaskService;
-import cn.com.ctop.common.module.utils.*;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.CloudVideoProcessUtil;
+import cn.com.ctop.common.module.utils.LoadFileUtil;
+import cn.com.ctop.common.module.utils.MpsUtils;
 import com.alibaba.fastjson.JSONObject;
 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.IAcsClient;
-import com.aliyuncs.mts.model.v20140618.QuerySnapshotJobListRequest;
-import com.aliyuncs.mts.model.v20140618.QuerySnapshotJobListResponse;
 import com.aliyuncs.mts.model.v20140618.SubmitSnapshotJobRequest;
 import com.aliyuncs.mts.model.v20140618.SubmitSnapshotJobResponse;
 import com.aliyuncs.profile.DefaultProfile;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -272,5 +269,10 @@ public class MaterialCutFrameServiceImpl extends ServiceImpl<MaterialCutFrameMap
 
     }
 
+    @Override
+    public JSONObject getCutFrameByVideoMd5(String photoId, String imageToken) {
+        return materialCutFrameMapper.getCutFrameByVideoMd5(photoId, imageToken);
+    }
+
 
 }

+ 68 - 8
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/controller/KuaiShouCreativeRefusalController.java

@@ -2,11 +2,17 @@ package cn.com.ctop.kuaishou.modules.ai.controller;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.service.IMaterialCutFrameService;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouCreative;
+import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouImageGet;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouCreativeService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouImageGetService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouMaterialUploadService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouUpdateService;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +21,10 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
 @Slf4j
 @Api(tags = "快手-创意拒审重提")
 @RestController
@@ -24,6 +34,15 @@ public class KuaiShouCreativeRefusalController {
     private ICtopOauthTokenService tokenService;
     @Autowired
     private IKuaiShouCreativeService creativeService;
+    @Autowired
+    private IKuaiShouUpdateService updateService;
+    @Autowired
+    private IMaterialCutFrameService cutFrameService;
+    @Autowired
+    private IKuaiShouImageGetService imageGetService;
+    @Autowired
+    private IKuaiShouMaterialUploadService uploadService;
+    static ExecutorService executorService = Executors.newFixedThreadPool(50);
 
     /**
      * 吃创意拒审重提
@@ -33,7 +52,7 @@ public class KuaiShouCreativeRefusalController {
      */
     @PostMapping(value = "again")
     public JSONObject campaignCreate(@RequestBody JSONObject requestJson) {
-
+        JSONObject returnJson = new JSONObject();
         try {
             if (Check.isNull(requestJson)) {
                 throw new Exception("入参不能为空");
@@ -52,19 +71,60 @@ public class KuaiShouCreativeRefusalController {
             }
             for (int i = 0; i < creativeIds.size(); i++) {
                 Long creativeId = creativeIds.getLong(i);
-           //     KuaiShouCreative creative = creativeService.getCreativeByCreativeId(creativeId);
-
-
+                executorService.submit(new Runnable() {
+                    @Override
+                    public void run() {
+                        KuaiShouCreative creative = creativeService.getCreativeByCreativeId(creativeId);
+                        if (!Check.isNull(creative)) {
+                            JSONObject cutJson = cutFrameService.getCutFrameByVideoMd5(creative.getPhotoId(), creative.getImageToken());
+                            if (!Check.isNull(cutJson)) {
+                                String signature = cutJson.getString("signature");
+                                String url = cutJson.getString("url");
+                                String imageToken = getImageToken(signature, accountId, oauthToken.getAccessToken(), url);
+                                if (!Check.isNull(imageToken)) {
+                                    JSONObject updateJson = new JSONObject();
+                                    updateJson.put("creativeId", creativeId);
+                                    updateJson.put("imageToken", imageToken);
+                                    Map<String, Object> creativeMap = updateService.updateCreative(oauthToken.getAccessToken(), accountId, requestJson);
+                                    Integer code = (Integer) creativeMap.get("code");
+                                    if (code == 0) {
+                                        log.info("自动投放拒审重提成功,accountId:{},creativeId:{}", accountId, creativeId);
+                                    } else {
+                                        log.info("自动投放拒审重提失败,accountId:{},creativeId:{}", accountId, creativeId);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                });
             }
-
-
+            returnJson.put("code", 0);
+            returnJson.put("message", "异步提交中");
         } catch (Exception e) {
             e.printStackTrace();
+            returnJson.put("code", 0);
+            returnJson.put("message", e.getMessage());
         }
+        return returnJson;
+    }
 
 
-        return null;
-    }
+    private String getImageToken(String md5, Long accountId, String accessToken, String url) {
+        String imageToken = null;
+        QueryWrapper<KuaiShouImageGet> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("account_id", accountId);
+        queryWrapper.eq("signature", md5);
+        queryWrapper.last("limit 1");
+        KuaiShouImageGet imageGet = imageGetService.getOne(queryWrapper);
+        if (!Check.isNull(imageGet)) {
+            imageToken = imageGet.getImageToken();
+        } else {
+            imageToken = uploadService.kuauiShouImageUpload(url, md5, accountId, accessToken);
+        }
+
 
+        return imageToken;
+
+    }
 
 }

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

@@ -55,4 +55,6 @@ public interface IKuaiShouCreativeService extends IService<KuaiShouCreative> {
     void delAllCreativesByCampaignId(Long accountId, Long campaignId);
 
     List<KuaiShouCreative> queryCreativeInfoByCampaignId(Long accountId, Long campaignId);
+
+    KuaiShouCreative getCreativeByCreativeId(Long creativeId);
 }

+ 10 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouCreativeServiceImpl.java

@@ -195,7 +195,16 @@ public class KuaiShouCreativeServiceImpl extends ServiceImpl<KuaiShouCreativeMap
 
     @Override
     public List<KuaiShouCreative> queryCreativeInfoByCampaignId(Long accountId, Long campaignId) {
-        return kuaiShouCreativeMapper.queryCreativeInfoByCampaignId(accountId,campaignId);
+        return kuaiShouCreativeMapper.queryCreativeInfoByCampaignId(accountId, campaignId);
+    }
+
+    @Override
+    public KuaiShouCreative getCreativeByCreativeId(Long creativeId) {
+        QueryWrapper<KuaiShouCreative> creativeQueryWrapper = new QueryWrapper<>();
+        creativeQueryWrapper.eq("creative_id", creativeId);
+        creativeQueryWrapper.last("limit 1");
+        KuaiShouCreative creative = kuaiShouCreativeMapper.selectOne(creativeQueryWrapper);
+        return creative;
     }
 
 

+ 3 - 3
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouUpdateServiceImpl.java

@@ -477,7 +477,6 @@ public class KuaiShouUpdateServiceImpl implements IKuaiShouUpdateService {
             header.put("Access-Token", token);
             header.put("Content-Type", "application/json");
             JSONObject params = new JSONObject();
-
             params.put("advertiser_id", advertiserId);
             String creativeId = requestJson.getString("creativeId");
             String creativeName = requestJson.getString("creativeName");
@@ -495,8 +494,9 @@ public class KuaiShouUpdateServiceImpl implements IKuaiShouUpdateService {
             if (!Check.isNull(action_bar_text)) {
                 params.put("action_bar_text", action_bar_text);
             }
-
-
+            if (!Check.isNull(requestJson.getString("imageToken"))) {
+                params.put("image_token", requestJson.getString("imageToken"));
+            }
             String result = HttpUtils.httpPostRequest(url, params, header);
             JSONObject resultJson = JSONObject.parseObject(result);
             if (!Check.isNull(resultJson)) {