浏览代码

Merge remote-tracking branch 'origin/master'

zhaoxian 2 年之前
父节点
当前提交
27b0b17c8a

+ 1 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/controller/CwjsPolicyInfoController.java

@@ -251,7 +251,7 @@ public class CwjsPolicyInfoController {
 					 return Result.successMsg("审核通过", cwjsPolicyInfo);
 					 return Result.successMsg("审核通过", cwjsPolicyInfo);
 				 }
 				 }
 
 
-				 if (examineUser.getString("departName").contains("销售")) {
+				 if (examineUser.getString("departName").contains("销售") ) {
 					 //华北 ---> 自动转老板
 					 //华北 ---> 自动转老板
 					 if (cwjsPolicyInfo.getCompanyId().equals("d57fecdcf7a94d009736d9c850731582")) {
 					 if (cwjsPolicyInfo.getCompanyId().equals("d57fecdcf7a94d009736d9c850731582")) {
 
 

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

@@ -162,6 +162,9 @@ public class UserAllocationController {
         if ("admin".equals(roleCode)) {
         if ("admin".equals(roleCode)) {
             userId = null;
             userId = null;
         }
         }
+        if (mediaId == 1 || mediaId == 3) {
+            userId = null;
+        }
         List<Integer> mediaList = new ArrayList<>();
         List<Integer> mediaList = new ArrayList<>();
         mediaList.add(mediaId);
         mediaList.add(mediaId);
         //    List<ProjectMember> projectList = projectMemberService.getOwnProjects(mediaList);
         //    List<ProjectMember> projectList = projectMemberService.getOwnProjects(mediaList);

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

@@ -93,6 +93,7 @@ public class MaterialUploadTask {
     @Excel(name = "remarks", width = 15)
     @Excel(name = "remarks", width = 15)
     @ApiModelProperty(value = "remarks")
     @ApiModelProperty(value = "remarks")
     private String remarks;
     private String remarks;
+    private String syncAccounts;
     /**
     /**
      * 上传成功时间
      * 上传成功时间
      */
      */

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

@@ -29,4 +29,8 @@ public interface MaterialUploadTaskMapper extends BaseMapper<MaterialUploadTask>
     Integer getCount(String signature);
     Integer getCount(String signature);
 
 
     Integer getCountByaccountIdAndMd5(@Param("userId") Long userId, @Param("accountId") Long accountId,@Param("signature") String signature);
     Integer getCountByaccountIdAndMd5(@Param("userId") Long userId, @Param("accountId") Long accountId,@Param("signature") String signature);
+
+    JSONObject getVideoId(@Param("projectId") Long projectId,@Param("signature") String signature);
+
+    Long getProjectIdByAccountId(@Param("accountId") Long accountId);
 }
 }

+ 18 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/MaterialUploadTaskMapper.xml

@@ -50,6 +50,20 @@
         and task_status != 4
         and task_status != 4
 
 
     </select>
     </select>
+    <select id="getVideoId" resultType="com.alibaba.fastjson.JSONObject">
+        select
+        account_id as 'accountId',
+        signature as 'signature',
+        video_id as 'videoId'
+          from ctop_material_upload_bytedance_log
+        where project_id = #{projectId}
+        and signature = #{signature}
+        order by create_time desc limit 1
+    </select>
+    <select id="getProjectIdByAccountId" resultType="java.lang.Long" parameterType="java.lang.Long">
+        select project_id   from ctop_user_allocation where account_id = #{accountId} limit 1
+
+    </select>
     <insert id="replaceBatch">
     <insert id="replaceBatch">
         insert into ctop_material_upload_task(
         insert into ctop_material_upload_task(
         media_id,
         media_id,
@@ -62,7 +76,8 @@
         material_name,
         material_name,
         material_url,
         material_url,
         task_status,
         task_status,
-        remarks
+        remarks,
+        sync_accounts
         )
         )
         values
         values
         <foreach collection="addList" item="add" separator=",">
         <foreach collection="addList" item="add" separator=",">
@@ -77,7 +92,8 @@
             #{add.materialName},
             #{add.materialName},
             #{add.materialUrl},
             #{add.materialUrl},
             #{add.taskStatus},
             #{add.taskStatus},
-            #{add.remarks}
+            #{add.remarks},
+            #{add.syncAccounts}
             )
             )
         </foreach>
         </foreach>
     </insert>
     </insert>

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

@@ -1,11 +1,16 @@
 package org.jeecg.modules.ctop.service.impl;
 package org.jeecg.modules.ctop.service.impl;
 
 
+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.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.HttpUtils;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
 import org.jeecg.modules.ctop.entity.MaterialUploadTask;
 import org.jeecg.modules.ctop.entity.MaterialUploadTask;
 import org.jeecg.modules.ctop.mapper.MaterialUploadTaskMapper;
 import org.jeecg.modules.ctop.mapper.MaterialUploadTaskMapper;
 import org.jeecg.modules.ctop.service.IMaterialUploadTaskService;
 import org.jeecg.modules.ctop.service.IMaterialUploadTaskService;
@@ -16,6 +21,8 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 
 /**
 /**
  * 同步素材任务
  * 同步素材任务
@@ -25,10 +32,14 @@ import java.util.Map;
  * @version V1.0
  * @version V1.0
  */
  */
 @Service
 @Service
+@Slf4j
 public class MaterialUploadTaskServiceImpl extends ServiceImpl<MaterialUploadTaskMapper, MaterialUploadTask> implements IMaterialUploadTaskService {
 public class MaterialUploadTaskServiceImpl extends ServiceImpl<MaterialUploadTaskMapper, MaterialUploadTask> implements IMaterialUploadTaskService {
 
 
     @Autowired
     @Autowired
     private MaterialUploadTaskMapper materialUploadTaskMapper;
     private MaterialUploadTaskMapper materialUploadTaskMapper;
+    private static ExecutorService submitExecutorService = Executors.newFixedThreadPool(5);
+    @Autowired
+    private ICtopOauthTokenService tokenService;
 
 
     /**
     /**
      * 同步素材提交任务
      * 同步素材提交任务
@@ -67,74 +78,104 @@ public class MaterialUploadTaskServiceImpl extends ServiceImpl<MaterialUploadTas
             Integer isMultiagent = json.getInteger("isMultiagent");
             Integer isMultiagent = json.getInteger("isMultiagent");
             if (Check.isNull(isMultiagent)) {
             if (Check.isNull(isMultiagent)) {
                 throw new Exception("请传入主体信息");
                 throw new Exception("请传入主体信息");
-
             }
             }
-
             Map<String, JSONObject> useMap = new HashMap<>();
             Map<String, JSONObject> useMap = new HashMap<>();
             List<MaterialUploadTask> tasksList = new ArrayList<>();
             List<MaterialUploadTask> tasksList = new ArrayList<>();
             Integer shieldBackwardSwitch = null;
             Integer shieldBackwardSwitch = null;
-            for (int j = 0; j < materialArray.size(); j++) {
-                String materialId = materialArray.getString(j);
-                JSONObject materialInfo = materialUploadTaskMapper.getMaterialNameBySignature(materialId);
-                if (Check.isNull(materialInfo)) {
-                    continue;
-                }
-                String materialName = materialInfo.getString("materialName");
-                String materialUrl = materialInfo.getString("materialUrl");
-                String signature = materialInfo.getString("signature");
-                for (int i = 0; i < accountArray.size(); i++) {
-                    Long accountId = null;
-                    Long userId = null;
-                    if (mediaId == 2 || mediaId == 4) {
-                        JSONObject accountJson = accountArray.getJSONObject(i);
-                        if (Check.isNull(accountJson)) {
-                            continue;
-                        }
-                        userId = accountJson.getLong("userId");
-                        accountId = accountJson.getLong("accountId");
-                        if (isMultiagent == 1) {
-                            Integer count = materialUploadTaskMapper.getCountByUserIdAndMd5(userId, signature);
-                            if (count > 0) {
-                                getUseMap(useMap, userId, materialName, signature);
+            // 快手任务提交
+            if (mediaId == 2 || mediaId == 4) {
+                for (int j = 0; j < materialArray.size(); j++) {
+                    String materialId = materialArray.getString(j);
+                    JSONObject materialInfo = materialUploadTaskMapper.getMaterialNameBySignature(materialId);
+                    if (Check.isNull(materialInfo)) {
+                        continue;
+                    }
+                    String materialName = materialInfo.getString("materialName");
+                    String materialUrl = materialInfo.getString("materialUrl");
+                    String signature = materialInfo.getString("signature");
+                    for (int i = 0; i < accountArray.size(); i++) {
+                        Long accountId = null;
+                        Long userId = null;
+                        if (mediaId == 2 || mediaId == 4) {
+                            JSONObject accountJson = accountArray.getJSONObject(i);
+                            if (Check.isNull(accountJson)) {
                                 continue;
                                 continue;
                             }
                             }
-                        } else if (isMultiagent == 2) {
-                            Integer count = materialUploadTaskMapper.getCountByaccountIdAndMd5(userId, accountId, signature);
-                            if (count > 0) {
-                                getUseMap(useMap, userId, materialName, signature);
-                                continue;
+                            userId = accountJson.getLong("userId");
+                            accountId = accountJson.getLong("accountId");
+                            if (isMultiagent == 1) {
+                                Integer count = materialUploadTaskMapper.getCountByUserIdAndMd5(userId, signature);
+                                if (count > 0) {
+                                    getUseMap(useMap, userId, materialName, signature);
+                                    continue;
+                                }
+                            } else if (isMultiagent == 2) {
+                                Integer count = materialUploadTaskMapper.getCountByaccountIdAndMd5(userId, accountId, signature);
+                                if (count > 0) {
+                                    getUseMap(useMap, userId, materialName, signature);
+                                    continue;
+                                }
                             }
                             }
-                        }
 
 
-                        shieldBackwardSwitch = json.getInteger("shieldBackwardSwitch");
-                    } else if (mediaId == 1 || mediaId == 3) {
-                        accountId = accountArray.getLong(i);
-                        if (Check.isNull(accountId)) {
-                            continue;
+                            shieldBackwardSwitch = json.getInteger("shieldBackwardSwitch");
                         }
                         }
-                        Integer count = materialUploadTaskMapper.getCountByAccountIdAndMd5(accountId, signature);
-                        if (count > 0) {
-                            getUseMap(useMap, accountId, materialName, signature);
-                            continue;
+                        MaterialUploadTask task = new MaterialUploadTask();
+                        task.setAccountId(accountId);
+                        if (!Check.isNull(userId)) {
+                            task.setKuaishouUserId(userId);
                         }
                         }
+                        task.setShieldBackwardSwitch(shieldBackwardSwitch);
+                        task.setMediaId(mediaId);
+                        task.setSignature(signature);
+                        task.setUserId(loginId);
+                        task.setUserName(userName);
+                        task.setMaterialName(materialName);
+                        task.setMaterialUrl(materialUrl);
+                        task.setTaskStatus(0);
+                        task.setRemarks("素材待同步");
+                        tasksList.add(task);
                     }
                     }
-                    MaterialUploadTask task = new MaterialUploadTask();
-                    task.setAccountId(accountId);
-                    if (!Check.isNull(userId)) {
-                        task.setKuaishouUserId(userId);
+                }
+            } else if (mediaId == 1 || mediaId == 3) { // 头条任务提交
+                for (int i = 0; i < materialArray.size(); i++) {
+                    String id = materialArray.getString(i);
+                    JSONObject materialInfo = materialUploadTaskMapper.getMaterialNameBySignature(id);
+                    if (Check.isNull(materialInfo)) {
+                        continue;
+                    }
+                    String materialName = materialInfo.getString("materialName");
+                    String materialUrl = materialInfo.getString("materialUrl");
+                    String signature = materialInfo.getString("signature");
+                    Long accountId = accountArray.getLong(0);
+                    Long projectId = materialUploadTaskMapper.getProjectIdByAccountId(accountId);
+                    JSONObject videoJson = materialUploadTaskMapper.getVideoId(projectId, signature);
+                    if (Check.isNull(videoJson)) { // 如果是校验为新素材  调用上传素材接口
+                        MaterialUploadTask task = new MaterialUploadTask();
+                        task.setShieldBackwardSwitch(shieldBackwardSwitch);
+                        task.setMediaId(mediaId);
+                        task.setSignature(signature);
+                        task.setUserId(loginId);
+                        task.setUserName(userName);
+                        task.setMaterialName(materialName);
+                        task.setMaterialUrl(materialUrl);
+                        task.setTaskStatus(0);
+                        task.setRemarks("素材待同步");
+                        task.setAccountId(accountId);
+                        task.setSyncAccounts(accountArray.toJSONString());
+                        tasksList.add(task);
+                    } else {
+                        submitExecutorService.submit(new Runnable() {
+                            @Override
+                            public void run() {
+                                if (!Check.isNull(accountArray)) {
+                                    syncBytedance(videoJson.getLong("accountId"), mediaId, signature, accountArray, loginId, userName, materialName, materialUrl, videoJson.getString("videoId"));
+                                }
+                            }
+                        });
                     }
                     }
-                    task.setShieldBackwardSwitch(shieldBackwardSwitch);
-                    task.setMediaId(mediaId);
-                    task.setSignature(signature);
-                    task.setUserId(loginId);
-                    task.setUserName(userName);
-                    task.setMaterialName(materialName);
-                    task.setMaterialUrl(materialUrl);
-                    task.setTaskStatus(0);
-                    task.setRemarks("素材待同步");
-                    tasksList.add(task);
                 }
                 }
             }
             }
+
             if (!Check.isNull(tasksList)) {
             if (!Check.isNull(tasksList)) {
                 materialUploadTaskMapper.replaceBatch(tasksList);
                 materialUploadTaskMapper.replaceBatch(tasksList);
             }
             }
@@ -156,6 +197,78 @@ public class MaterialUploadTaskServiceImpl extends ServiceImpl<MaterialUploadTas
         return returnJson;
         return returnJson;
     }
     }
 
 
+    private void syncBytedance(Long accountId, Integer mediaId, String signature, JSONArray accountArray, String loginId, String userName, String materialName, String materialUrl, String videoId) {
+        log.info("开始素材推送,code:{},账户数:{}", signature, accountArray.size());
+        CtopOauthToken token = tokenService.getTokenByAccountId(accountId);
+        if (Check.isNull(token)) {
+            return;
+        }
+        List<MaterialUploadTask> tasksList = new ArrayList<>();
+        List<List<Object>> accountIds = Lists.partition(accountArray, 49);
+        for (int i = 0; i < accountIds.size(); i++) {
+            List<Object> objects = accountIds.get(i);
+            JSONObject params = new JSONObject();
+            params.put("advertiser_id", accountId);
+            params.put("target_advertiser_ids", JSONArray.toJSONString(objects));
+            JSONArray video_ids = new JSONArray();
+            video_ids.add(videoId);
+            params.put("video_ids", video_ids);
+            JSONObject jsonObject = HttpUtils.bytedancePostRequest(token.getAccessToken(), "https://ad.oceanengine.com/open_api/2/file/material/bind/", params);
+            Map<Long, String> dataMap = new HashMap<>();
+            if (!Check.isNull(jsonObject)) {
+                Integer code = jsonObject.getInteger("code");
+                if (code == 0) {
+                    log.info("素材推送成功,code:{},账户数:{}", signature, accountArray.size());
+                    JSONObject data = jsonObject.getJSONObject("data");
+                    if (!Check.isNull(data)) {
+                        JSONArray fail_list = data.getJSONArray("fail_list");
+                        if (!Check.isNull(fail_list)) {
+                            for (int j = 0; j < fail_list.size(); j++) {
+                                JSONObject failJson = fail_list.getJSONObject(j);
+                                dataMap.put(failJson.getLong("target_advertiser_id"), failJson.getString("fail_reason"));
+                            }
+                        }
+                    }
+                } else {
+                    log.info("素材推送失败,code:{},账户数:{},返回信息:{}", signature, accountArray.size(), jsonObject);
+                }
+                for (int j = 0; j < objects.size(); j++) {
+                    Long target_advertiser_id = (Long) objects.get(j);
+                    MaterialUploadTask task = new MaterialUploadTask();
+                    task.setMediaId(mediaId);
+                    task.setSignature(signature);
+                    task.setUserId(loginId);
+                    task.setUserName(userName);
+                    task.setMaterialName(materialName);
+                    task.setMaterialUrl(materialUrl);
+                    if (code != 0) {
+                        if (code == 40000 && jsonObject.getString("message").contains("与原广告主不属于同一主体")) {
+                            task.setTaskStatus(0);
+                            task.setRemarks("待重新提交-目标广告主与原广告主不属于同一主体");
+                        } else {
+                            task.setTaskStatus(4);
+                            task.setRemarks(jsonObject.getString("message"));
+                        }
+                    } else {
+                        if (!Check.isNull(dataMap)) {
+                            String fail_reason = dataMap.get(target_advertiser_id);
+                            if (Check.isNull(fail_reason)) {
+                                task.setTaskStatus(3);
+                                task.setRemarks("素材同步完成");
+                            } else {
+                                task.setTaskStatus(4);
+                                task.setRemarks("此素材已存在广告主账户中");
+                            }
+                        }
+                    }
+                    task.setAccountId(target_advertiser_id);
+                    tasksList.add(task);
+                }
+            }
+        }
+        materialUploadTaskMapper.replaceBatch(tasksList);
+    }
+
     @Override
     @Override
     public PageInfo<List<JSONObject>> uploadDetail(String signature, Integer pageNo, Integer pageSize) {
     public PageInfo<List<JSONObject>> uploadDetail(String signature, Integer pageNo, Integer pageSize) {
         PageHelper.startPage(pageNo, pageSize, false);
         PageHelper.startPage(pageNo, pageSize, false);