瀏覽代碼

Merge branch 'test'

yangzian 3 年之前
父節點
當前提交
eed540f167
共有 13 個文件被更改,包括 453 次插入42 次删除
  1. 1 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/AiBytedanceAdvertiserStrategyMapper.java
  2. 10 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/ByteDanceVideoInfoMapper.java
  3. 22 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/MonitorBytedanceActionTrackUrlMapper.java
  4. 3 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/xml/AiBytedanceAdvertiserStrategyMapper.xml
  5. 16 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/xml/ByteDanceVideoInfoMapper.xml
  6. 75 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/xml/MonitorBytedanceActionTrackUrlMapper.xml
  7. 1 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/IAiBytedanceAdvertiserStrategyService.java
  8. 10 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/IMonitorBytedanceService.java
  9. 107 28
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/AiBytedanceAdvertiserStrategyServiceImpl.java
  10. 133 2
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/MonitorBytedanceServiceImpl.java
  11. 8 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/vo/MonitorBytedanceAdVo.java
  12. 13 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/AiBytedanceAdvertiserStrategyController.java
  13. 54 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/BytedancePlanJobController.java

+ 1 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/AiBytedanceAdvertiserStrategyMapper.java

@@ -14,7 +14,7 @@ import org.jeecg.modules.bytedance.advertise.entity.UpdAdStaOrCpaOrBudget;
 public interface AiBytedanceAdvertiserStrategyMapper extends BaseMapper<AiBytedanceAdvertiserStrategy> {
 
 
-    Integer updStaByAccountId(@Param("accountId") String accountId,@Param("creativeImageMode")String creativeImageMode,@Param("state") String state,@Param("id") String id);
+    Integer updStaByAccountId(@Param("accountId") String accountId,@Param("creativeImageMode")String creativeImageMode, @Param("adDeliveryRange") String adDeliveryRange,@Param("state") String state,@Param("id") String id);
 
     Integer updStaById(@Param("id") String id,@Param("state") String state);
 

+ 10 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/ByteDanceVideoInfoMapper.java

@@ -68,6 +68,16 @@ public interface ByteDanceVideoInfoMapper extends BaseMapper<ByteDanceVideoInfo>
      */
     List<ByteDanceVideoInfo> getModeImageLarge(@Param(value = "accountId") Long accountId,@Param(value = "startTime")String startTime, @Param(value = "endTime")String endTime, @Param(value = "videoCnt")Long videoCnt);
 
+    /**
+     * 通投智选 - 竖图大图
+     * @param accountId
+     * @param startTime
+     * @param endTime
+     * @param videoCnt
+     * @return
+     */
+    List<ByteDanceVideoInfo> getModeImageVertical(@Param(value = "accountId") Long accountId,@Param(value = "startTime")String startTime, @Param(value = "endTime")String endTime, @Param(value = "videoCnt")Long videoCnt);
+
 
 
 

+ 22 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/MonitorBytedanceActionTrackUrlMapper.java

@@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.bytedance.advertise.vo.MonitorBytedanceAdVo;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * 头条 监测预警
@@ -19,7 +20,7 @@ public interface MonitorBytedanceActionTrackUrlMapper {
      * 获取头条自动配置中的账户 以及 点击监测链接
      * @return
      */
-    List<MonitorBytedanceAdVo> getBytedancStrategyAcctionId();
+    List<MonitorBytedanceAdVo> getBytedancStrategyAcctionId(String accountId);
 
     /**
      * 根据账户id 查询该账户下的计划中的 点击监测链接
@@ -36,4 +37,24 @@ public interface MonitorBytedanceActionTrackUrlMapper {
      */
     JSONObject getWChatIdByUserId(@Param("userId") String responsibleId);
 
+
+    /**
+     * 新增第三方监测连接
+     * @param monitorBytedanceAdVo
+     */
+    void insertAccountTrackUrl(MonitorBytedanceAdVo monitorBytedanceAdVo);
+
+    /**
+     * 查询 监测链接
+     * @param
+     * @return
+     */
+    List<MonitorBytedanceAdVo> getAccountActionTrackUrl(@Param("accountId") String accountId,@Param("warningFlag") String warningFlag,@Param("operateUserIds") Set<String> operateUserIds);
+
+    /**
+     * 修改 第三方监测链接
+     * @param monitorBytedanceAdVo
+     */
+    void updAccountActionTrackUrl(MonitorBytedanceAdVo monitorBytedanceAdVo);
+
 }

+ 3 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/xml/AiBytedanceAdvertiserStrategyMapper.xml

@@ -13,6 +13,9 @@
         <if test="creativeImageMode !=null and creativeImageMode != ''">
             AND creative_image_mode = #{creativeImageMode}
         </if>
+        <if test='adDeliveryRange == "UNIVERSAL" '>
+            AND ad_delivery_range = #{adDeliveryRange}
+        </if>
         <if test="id !=null and id != ''">
             AND id != #{id}
         </if>

+ 16 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/xml/ByteDanceVideoInfoMapper.xml

@@ -306,6 +306,22 @@
         limit #{videoCnt}
     </select>
 
+    <!-- 通投智选 - 竖图大图 -->
+    <select id="getModeImageVertical" resultType="org.jeecg.modules.bytedance.advertise.entity.ByteDanceVideoInfo">
+        select distinct image.*,
+        (select count(1) from ctop_bytedance_creative c
+        where SUBSTRING_INDEX(SUBSTRING_INDEX(image_ids,'["',-1),'"]',1) in(image.id)
+        and c.account_id = '${accountId}') as creativeCnt,
+        'image' as materialType
+        from ctop_bytedance_image_info image
+        where account_id = #{accountId}
+        and image.type = '2'
+        and image.image_create_time &gt;= #{startTime}
+        and image.image_create_time &lt;= #{endTime}
+        order by  creativeCnt ASC
+        limit #{videoCnt}
+    </select>
+
 
 
 </mapper>

+ 75 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/xml/MonitorBytedanceActionTrackUrlMapper.xml

@@ -7,6 +7,7 @@
     <select id="getBytedancStrategyAcctionId" resultType="org.jeecg.modules.bytedance.advertise.vo.MonitorBytedanceAdVo">
         SELECT
             stra.account_id accountId,
+            stra.ad_convert_id convertId,
             stra.creative_action_track_url actionTrackUrl,
             ua.auth_name accountName,
             ua.user_id operateUserid,
@@ -16,6 +17,10 @@
                 LEFT JOIN ctop_user_allocation ua on stra.account_id = ua.account_id
         WHERE
             stra.status = 0
+        <if test="accountId !=null and accountId != ''">
+            AND stra.account_id = #{accountId}
+        </if>
+        GROUP BY stra.account_id
         ORDER BY
             stra.create_time DESC
     </select>
@@ -45,4 +50,74 @@
 
     </select>
 
+
+
+    <!-- 新增第三方监测连接 -->
+    <insert id="insertAccountTrackUrl">
+        INSERT INTO ctop_ai_bytedance_advertiser_strategy_action_track_url (
+            `account_id`,
+            `action_track_url`,
+            `warning_flag`,
+            `create_user_id`,
+            `create_time`
+        )
+        VALUES
+        ( #{accountId}, #{actionTrackUrl}, 1, #{createUserId}, NOW());
+    </insert>
+
+
+
+
+
+    <!-- 查询 监测链接 -->
+    <select id="getAccountActionTrackUrl" resultType="org.jeecg.modules.bytedance.advertise.vo.MonitorBytedanceAdVo">
+        SELECT
+        u.account_id,
+        u.action_track_url,
+        u.warning_flag,
+        u.create_user_id,
+        u.create_time,
+        u.update_time,
+        (SELECT p.project_name from ctop_project p where p.id = a.project_id) project_name,
+        a.auth_name as accountName,
+        a.user_id as operateUserid,
+        a.user_name as operateUserName
+        FROM
+        ctop_ai_bytedance_advertiser_strategy_action_track_url u
+        LEFT JOIN ctop_user_allocation a on u.account_id = a.account_id
+        <where>
+              <if test="accountId !=null and accountId != ''">
+                  AND  u.account_id = #{accountId}
+              </if>
+              <if test="warningFlag !=null and warningFlag != ''">
+                  AND  u.warning_flag = #{warningFlag}
+              </if>
+              <if test="operateUserIds != null and operateUserIds.size > 0">
+                  AND  a.user_id in
+                  <foreach item="userId" index="index" collection="operateUserIds" open="(" separator="," close=")">
+                      #{userId}
+                  </foreach>
+              </if>
+        </where>
+    </select>
+
+
+    <!-- 修改 第三方监测链接 -->
+    <update id="updAccountActionTrackUrl">
+        UPDATE ctop_ai_bytedance_advertiser_strategy_action_track_url
+        SET
+        <if test="actionTrackUrl != null and actionTrackUrl !=''">
+            action_track_url =#{actionTrackUrl},
+        </if>
+        <if test="warningFlag != null and warningFlag !=''">
+            warning_flag =#{warningFlag},
+        </if>
+        <if test="createUserId != null and createUserId !=''">
+            create_user_id =#{createUserId},
+        </if>
+            update_time = NOW()
+        WHERE account_id = #{accountId};
+    </update>
+
+
 </mapper>

+ 1 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/IAiBytedanceAdvertiserStrategyService.java

@@ -36,7 +36,7 @@ public interface IAiBytedanceAdvertiserStrategyService extends IService<AiByteda
      * @param
      * @return
      */
-    Result updStaById(String id,String state,String accountId,String creativeImageMode);
+    Result updStaById(String id,String state,String accountId,String creativeImageMode,String adDeliveryRange);
 
     /**
      * 头条 - 配置信息 修改 出价; 预算;

+ 10 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/IMonitorBytedanceService.java

@@ -1,9 +1,12 @@
 package org.jeecg.modules.bytedance.advertise.service;
 
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.bytedance.advertise.vo.MonitorBytedanceAdVo;
+
+import java.util.Set;
 
 /**
- * @Description: 规则账户清洗数据
+ * @Description: 头条监测连接预警
  * @Author: jeecg-boot
  * @Date: 2020-11-16
  * @Version: V1.0
@@ -11,5 +14,11 @@ import org.jeecg.common.api.vo.Result;
 public interface IMonitorBytedanceService{
 
 
+    Result insertAccountTrackUrl(MonitorBytedanceAdVo monitorBytedanceAdVo);
+
     Result monitorBytedanceActionTrackUrl();
+
+    Result updAccountActionTrackUrl(MonitorBytedanceAdVo monitorBytedanceAdVo);
+
+    Result selectAccountActionTrackUrlList(String accountId, String warningFlag, Set<String> operatorUserIds, Integer pageNum, Integer pageSize);
 }

+ 107 - 28
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/AiBytedanceAdvertiserStrategyServiceImpl.java

@@ -108,6 +108,12 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             return videoCnt;
         }
         log.info("获取{}素材个数:{}=>accountId:{}",BytedanceCreativeMatTypeEnum.getNameByType(createType+""),videoInfos.size(),token.getAccountId());
+        String creativeImageMode;
+        if ("UNIVERSAL".equals(strategy.getAdDeliveryRange())){ //通投智选
+            creativeImageMode = "UNIVERSAL";
+        }else {
+            creativeImageMode = strategy.getCreativeImageMode();
+        }
         for (ByteDanceVideoInfo video:videoInfos) {
             //判断此素材为视频
             if ("video".equalsIgnoreCase(video.getMaterialType())){
@@ -121,7 +127,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             Integer useDplinkIndex = strategy.getDpLinkIndexUsed();
             if(null==useDplinkIndex||useDplinkIndex.equals(0)){
                 //查看已使用的dp链接
-                AiBytedanceAdDplinkInfo adDplinkInfo = adDplinkInfoService.getlatestDpLinkInfo(strategy.getId(),strategy.getAccountId(),strategy.getCreativeImageMode(),1);
+                AiBytedanceAdDplinkInfo adDplinkInfo = adDplinkInfoService.getlatestDpLinkInfo(strategy.getId(),strategy.getAccountId(),creativeImageMode,1);
                 if(null == adDplinkInfo){
                     adDplinkInfo = new AiBytedanceAdDplinkInfo();
                     if("FIX".equalsIgnoreCase(strategy.getAdBidCreateType())){
@@ -184,7 +190,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
                 adDplinkInfo.setAccountId(strategy.getAccountId());
                 adDplinkInfo.setStatus(1);
                 adDplinkInfo.setStrategyId(strategy.getId());
-                adDplinkInfo.setImageMode(strategy.getCreativeImageMode());
+                adDplinkInfo.setImageMode(creativeImageMode);
                 adDplinkInfoService.save(adDplinkInfo);
 
                 BytedanceAiVideoCreativeLog creativeLog = new BytedanceAiVideoCreativeLog(strategy,adId,campaignId,video);
@@ -195,7 +201,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
                 }
             }else{
                 Long dpIndex ;
-                AiBytedanceAdDplinkInfo adDplinkInfo = adDplinkInfoService.getlatestDpLinkInfo(strategy.getId(),strategy.getAccountId(),strategy.getCreativeImageMode(),1);
+                AiBytedanceAdDplinkInfo adDplinkInfo = adDplinkInfoService.getlatestDpLinkInfo(strategy.getId(),strategy.getAccountId(),creativeImageMode,1);
                 if(null == adDplinkInfo){
                     adDplinkInfo = new AiBytedanceAdDplinkInfo();
                     if("FIX".equalsIgnoreCase(strategy.getAdBidCreateType())){
@@ -266,7 +272,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
                 adDplinkInfo.setAccountId(strategy.getAccountId());
                 adDplinkInfo.setStatus(1);
                 adDplinkInfo.setStrategyId(strategy.getId());
-                adDplinkInfo.setImageMode(strategy.getCreativeImageMode());
+                adDplinkInfo.setImageMode(creativeImageMode);
                 adDplinkInfoService.save(adDplinkInfo);
                 BytedanceAiVideoCreativeLog creativeLog = new BytedanceAiVideoCreativeLog(strategy,adId,campaignId,video);
                 videoCreativeLogService.saveOrUpdate(creativeLog);
@@ -365,7 +371,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         }
         //允许客户端下载视频功能
         Integer adDownloadStatus = strategy.getCreativeDownloadStatus();
-        if(!Check.isNull(adDownloadStatus)&&adDownloadStatus!=0){
+        if(!Check.isNull(adDownloadStatus)){
             ad_data.put("ad_download_status",adDownloadStatus);
         }
         //创意展现方式
@@ -468,11 +474,23 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         }
         creObj.put("title_materials",titleArray);
         JSONArray imageMaterials = new JSONArray();
+        JSONArray videoMaterials = new JSONArray();
         JSONObject object = new JSONObject();
         //类型
         if ("image".equalsIgnoreCase(videoInfo.getMaterialType())){
-            //图片素材
-            object.put("image_mode",strategy.getCreativeImageMode());
+            //通投智选
+            if ("UNIVERSAL".equalsIgnoreCase(strategy.getAdDeliveryRange())){
+                //竖图
+                if (strategy.getCreativeImageMode().contains("CREATIVE_IMAGE_MODE_LARGE_VERTICAL")){
+                    object.put("image_mode","CREATIVE_IMAGE_MODE_LARGE_VERTICAL");
+                    //横图
+                }else if(strategy.getCreativeImageMode().contains("CREATIVE_IMAGE_MODE_LARGE")){
+                    object.put("image_mode","CREATIVE_IMAGE_MODE_LARGE");
+                }
+            }else {
+                object.put("image_mode",strategy.getCreativeImageMode());
+            }
+
             String[] imageIds = new String[]{videoInfo.getId()};
             JSONArray image_info = new JSONArray();
             for (String imgId : imageIds) {
@@ -482,12 +500,23 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             }
             object.put("image_info",image_info);
             imageMaterials.add(object);
-            creObj.put("image_materials",imageMaterials);
+
         }
 
+        //视频
         if ("video".equalsIgnoreCase(videoInfo.getMaterialType())){
-            //视频
-            object.put("image_mode",strategy.getCreativeImageMode());
+            //通投智选
+            if ("UNIVERSAL".equalsIgnoreCase(strategy.getAdDeliveryRange())){
+                //竖版视频
+                if (strategy.getCreativeImageMode().contains("CREATIVE_IMAGE_MODE_VIDEO_VERTICAL")){
+                    object.put("image_mode","CREATIVE_IMAGE_MODE_VIDEO_VERTICAL");
+                 //横板视频
+                }else if(strategy.getCreativeImageMode().contains("CREATIVE_IMAGE_MODE_VIDEO")){
+                    object.put("image_mode","CREATIVE_IMAGE_MODE_VIDEO");
+                }
+            }else {
+                object.put("image_mode",strategy.getCreativeImageMode());
+            }
             JSONObject videoObj = new JSONObject();
             videoObj.put("video_id",videoInfo.getVid());
             //视频封面
@@ -499,11 +528,11 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             }
             object.put("image_info",imgObj);
             object.put("video_info",videoObj);
-            imageMaterials.add(object);
-            creObj.put("video_materials",imageMaterials);
+            videoMaterials.add(object);
+
         }
 
-        //通投智选 竖版视频 横版视频 横图大图
+        //通投智选 竖版视频 横版视频 横图大图 竖图大图
         if (!Check.isNull(strategy.getAdDeliveryRange()) && "UNIVERSAL".equalsIgnoreCase(strategy.getAdDeliveryRange())){
             List<ByteDanceVideoInfo> resultList = new ArrayList<>();
             //获取 最近14天的时间 开始 和截至时间点
@@ -513,8 +542,9 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
                 List<ByteDanceVideoInfo>  listMode = byteDanceVideoInfoMapper.getModeVideo(strategy.getAccountId(),map.get("startTime"),map.get("endTime"),1L);
                 if (!Check.isNull(listMode)){
                     for (ByteDanceVideoInfo info : listMode) {
+                        JSONObject objectVideo = new JSONObject();
                         //横板视频
-                        object.put("image_mode","CREATIVE_IMAGE_MODE_VIDEO");
+                        objectVideo.put("image_mode","CREATIVE_IMAGE_MODE_VIDEO");
                         JSONObject videoObj = new JSONObject();
                         videoObj.put("video_id",info.getVid());
                         //视频封面
@@ -524,10 +554,9 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
                         if(!Check.isNull(imageId)){
                             imgObj.put("image_id",imageId);
                         }
-                        object.put("image_info",imgObj);
-                        object.put("video_info",videoObj);
-                        imageMaterials.add(object);
-                        creObj.put("video_materials",imageMaterials);
+                        objectVideo.put("image_info",imgObj);
+                        objectVideo.put("video_info",videoObj);
+                        videoMaterials.add(objectVideo);
                     }
                 }
             }
@@ -536,8 +565,31 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
                 List<ByteDanceVideoInfo>  listImage = byteDanceVideoInfoMapper.getModeImageLarge(strategy.getAccountId(),map.get("startTime"),map.get("endTime"),1L);
                 if (!Check.isNull(listImage)){
                     for (ByteDanceVideoInfo info : listImage) {
+                        JSONObject objectImg = new JSONObject();
+                        //图片素材
+                        objectImg.put("image_mode","CREATIVE_IMAGE_MODE_LARGE");
+                        String[] imageIds = new String[]{info.getId()};
+                        JSONArray image_info = new JSONArray();
+                        for (String imgId : imageIds) {
+                            JSONObject imageObject = new JSONObject();
+                            imageObject.put("image_id",imgId);
+                            image_info.add(imageObject);
+                        }
+                        objectImg.put("image_info",image_info);
+                        imageMaterials.add(objectImg);
+
+                    }
+                }
+            }
+
+            //竖图大图
+            if (strategy.getCreativeImageMode().contains("CREATIVE_IMAGE_MODE_LARGE_VERTICAL")){
+                List<ByteDanceVideoInfo>  listImage = byteDanceVideoInfoMapper.getModeImageVertical(strategy.getAccountId(),map.get("startTime"),map.get("endTime"),1L);
+                if (!Check.isNull(listImage)){
+                    for (ByteDanceVideoInfo info : listImage) {
+                        JSONObject objectImg = new JSONObject();
                         //图片素材
-                        object.put("image_mode","CREATIVE_IMAGE_MODE_LARGE");
+                        objectImg.put("image_mode","CREATIVE_IMAGE_MODE_LARGE");
                         String[] imageIds = new String[]{info.getId()};
                         JSONArray image_info = new JSONArray();
                         for (String imgId : imageIds) {
@@ -545,13 +597,16 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
                             imageObject.put("image_id",imgId);
                             image_info.add(imageObject);
                         }
-                        object.put("image_info",image_info);
-                        imageMaterials.add(object);
-                        creObj.put("image_materials",imageMaterials);
+                        objectImg.put("image_info",image_info);
+                        imageMaterials.add(objectImg);
                     }
                 }
             }
+
+
         }
+        creObj.put("image_materials",imageMaterials);
+        creObj.put("video_materials",videoMaterials);
 
         //副标题
         String subTitle = strategy.getCreativeSubTitle();
@@ -640,7 +695,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(null!=strategy.getAdDeliveryRange() && !"".equals(strategy.getAdDeliveryRange().trim())){
             params.put("delivery_range",strategy.getAdDeliveryRange());
             //搜索快投
-           if(!"UNION".equals(strategy.getAdDeliveryRange())){
+           if(!"UNION".equals(strategy.getAdDeliveryRange()) && !"UNIVERSAL".equals(strategy.getAdDeliveryRange())){
                 params.put("feed_delivery_search","DISABLED");
             }
         }
@@ -1089,9 +1144,14 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
                 adName = adName.replace("{{素材名称}}","["+videoInfo.getFilename()+"]");
             }
         }
-
+        String creativeImageMode;
         if(adName.contains("{{序号}}")){
-            int i = adDplinkInfoService.getDpLinkInfoCount(strategy.getAccountId(),strategy.getCreativeImageMode());
+            if ("UNIVERSAL".equals(strategy.getAdDeliveryRange())){ //通投智选
+                creativeImageMode = "UNIVERSAL";
+            }else {
+                creativeImageMode = strategy.getCreativeImageMode();
+            }
+            int i = adDplinkInfoService.getDpLinkInfoCount(strategy.getAccountId(),creativeImageMode);
             adName = adName.replace("{{序号}}",String.valueOf(i+1));
         }
 
@@ -1169,8 +1229,14 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             result = result + "-" + date;
         }
 
+        String creativeImageMode;
         if(result.contains("{{序号}}")){
             //查询同素材类型当天已有计划数量
+            if ("UNIVERSAL".equals(strategy.getAdDeliveryRange())){ //通投智选
+                creativeImageMode = "UNIVERSAL";
+            }else {
+                creativeImageMode = strategy.getCreativeImageMode();
+            }
             int i = adDplinkInfoService.getDpLinkInfoCount(strategy.getAccountId(),strategy.getCreativeImageMode());
             Long num = GetCampaignNum.getCampaignNameNum(strategy.getCampaignCnt(),strategy.getCampaignAdCnt(), i+1);
             result = result.replace("{{序号}}",String.valueOf(num));
@@ -1289,13 +1355,17 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
      */
     @Override
     @Transactional
-    public Result updStaById(String id,String state,String accountId,String creativeImageMode) {
+    public Result updStaById(String id,String state,String accountId,String creativeImageMode,String adDeliveryRange) {
         //开启
         if (org.apache.commons.lang3.StringUtils.equals(state,"0")){
             //修改状态为开启
             aiBytedanceAdvertiserStrategyMapper.updStaById(id,state);
             //关闭 账户下 其他数据信息(不包含本条id信息) 状态为 关闭
-            aiBytedanceAdvertiserStrategyMapper.updStaByAccountId(accountId,creativeImageMode,"1",id);
+            //通投智选
+            if ("UNIVERSAL".equals(adDeliveryRange)){
+                creativeImageMode = null;
+            }
+            aiBytedanceAdvertiserStrategyMapper.updStaByAccountId(accountId,creativeImageMode,adDeliveryRange,"1",id);
         }
         //关闭
         if (org.apache.commons.lang3.StringUtils.equals(state,"1")){
@@ -1621,7 +1691,16 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
 
         //同一账户下 同素材类型 只能有一条信息为开启
         //关闭 账户下 其他数据信息(不包含本条id信息) 状态为 关闭
-        aiBytedanceAdvertiserStrategyMapper.updStaByAccountId(String.valueOf(aiBytedanceAdvertiserStrategy.getAccountId()),aiBytedanceAdvertiserStrategy.getCreativeImageMode(),"1",null);
+        String creativeImageMode;
+        if ("UNIVERSAL".equals(aiBytedanceAdvertiserStrategy.getAdDeliveryRange())){ //通投智选
+            creativeImageMode = null;
+        }else {
+            creativeImageMode = aiBytedanceAdvertiserStrategy.getCreativeImageMode();
+        }
+        aiBytedanceAdvertiserStrategyMapper.updStaByAccountId(String.valueOf(aiBytedanceAdvertiserStrategy.getAccountId()),
+                creativeImageMode,
+                aiBytedanceAdvertiserStrategy.getAdDeliveryRange(),
+                "1",null);
         //状态(0开 1关)
         aiBytedanceAdvertiserStrategy.setStatus(0);
 

+ 133 - 2
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/MonitorBytedanceServiceImpl.java

@@ -1,11 +1,15 @@
 package org.jeecg.modules.bytedance.advertise.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.bytedance.advertise.mapper.MonitorBytedanceActionTrackUrlMapper;
+import org.jeecg.modules.bytedance.advertise.service.IAiBytedanceAdvertiserStrategyService;
 import org.jeecg.modules.bytedance.advertise.service.IMonitorBytedanceService;
 import org.jeecg.modules.bytedance.advertise.vo.MonitorBytedanceAdVo;
+import org.jeecg.modules.bytedance.common.service.IUserAllocationService;
 import org.jeecg.modules.bytedance.common.utils.Check;
 import org.jeecg.modules.bytedance.common.utils.CorpWexinUtils;
 import org.springframework.stereotype.Service;
@@ -13,6 +17,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.text.MessageFormat;
 import java.util.List;
+import java.util.Set;
 
 /**
  * 规则账户清洗数据
@@ -27,8 +32,132 @@ public class MonitorBytedanceServiceImpl implements IMonitorBytedanceService {
     private MonitorBytedanceActionTrackUrlMapper monitorBytedanceActionTrackUrlMapper;
 
     @Resource
+    private IAiBytedanceAdvertiserStrategyService aiBytedanceAdvertiserStrategyService;
+
+    @Resource
+    private IUserAllocationService userAllocationService;
+
+
+
+    @Resource
     private CorpWexinUtils corpWexinUtils;
 
+
+    /**
+     *
+     * @description:新增 第三方监测连接
+     *
+     * @param monitorBytedanceAdVo
+     * @return: org.jeecg.common.api.vo.Result
+     * @author: zianY
+     * @time: 2022/1/11
+     */
+    public Result insertAccountTrackUrl(MonitorBytedanceAdVo monitorBytedanceAdVo){
+        //账户 查询 第三方监测链接
+        List<MonitorBytedanceAdVo> trackUrl = monitorBytedanceActionTrackUrlMapper.getAccountActionTrackUrl(monitorBytedanceAdVo.getAccountId(), null,null);
+        if (!Check.isNull(trackUrl)){
+            return Result.errorMsg("账户已存在第三方监测链接,请重新编辑。");
+        }
+        //查询账户配置中的 转化id
+        List<MonitorBytedanceAdVo> accountList = monitorBytedanceActionTrackUrlMapper.getBytedancStrategyAcctionId(monitorBytedanceAdVo.getAccountId());
+        if (!Check.isNull(accountList)){
+            // 账户id  和 转化id 查询 第三方监测链接
+            Result resultConvert = aiBytedanceAdvertiserStrategyService.readToolConvertInfo(accountList.get(0).getAccountId(),accountList.get(0).getConvertId());
+            if (!resultConvert.isSuccess()){
+                return  Result.errorMsg(resultConvert.getMessage());
+            }
+            JSONObject jsonObject = (JSONObject) JSONObject.toJSON(resultConvert.getResult());
+            String action_track_url = jsonObject.getString("action_track_url");
+            if (!StringUtils.equals(action_track_url,monitorBytedanceAdVo.getActionTrackUrl())){
+                return Result.errorMsg("输入的第三方监测链接与账户下转化目标所属的第三方监测链接不一致,请重新输入。");
+            }
+        }
+        //新增 第三方监测链接
+        monitorBytedanceActionTrackUrlMapper.insertAccountTrackUrl(monitorBytedanceAdVo);
+        return Result.successMsg("成功。",null);
+    }
+
+
+    /**
+     *
+     * @description: 修改 第三方监测链接
+     *
+     * @param monitorBytedanceAdVo
+     * @return: org.jeecg.common.api.vo.Result
+     * @author: zianY
+     * @time: 2022/1/11
+     */
+    @Override
+    public Result updAccountActionTrackUrl(MonitorBytedanceAdVo monitorBytedanceAdVo) {
+
+        //查询账户配置中的 转化id
+        List<MonitorBytedanceAdVo> accountList = monitorBytedanceActionTrackUrlMapper.getBytedancStrategyAcctionId(monitorBytedanceAdVo.getAccountId());
+        if (!Check.isNull(accountList)){
+            // 账户id  和 转化id 查询 第三方监测链接
+            Result resultConvert = aiBytedanceAdvertiserStrategyService.readToolConvertInfo(accountList.get(0).getAccountId(),accountList.get(0).getConvertId());
+            if (!resultConvert.isSuccess()){
+                return  Result.errorMsg(resultConvert.getMessage());
+            }
+            JSONObject jsonObject = (JSONObject) JSONObject.toJSON(resultConvert.getResult());
+            String action_track_url = jsonObject.getString("action_track_url");
+            if (!StringUtils.equals(action_track_url,monitorBytedanceAdVo.getActionTrackUrl())){
+                return Result.errorMsg("输入的第三方监测链接与账户下转化目标所属的第三方监测链接不一致,请重新输入。");
+            }
+        }
+        monitorBytedanceActionTrackUrlMapper.updAccountActionTrackUrl(monitorBytedanceAdVo);
+        return Result.successMsg("修改成功。", null);
+    }
+
+    /**
+     *
+     * @description: 监测预警-查询
+     *
+     * @param accountId
+     * @param warningFlag
+     * @param operatorUserIds
+     * @param pageNum
+     * @param pageSize
+     * @return: org.jeecg.common.api.vo.Result
+     * @author: zianY
+     * @time: 2022/1/11
+     */
+    @Override
+    public Result selectAccountActionTrackUrlList(String accountId, String warningFlag, Set<String> operatorUserIds,Integer pageNum,Integer pageSize) {
+
+        PageHelper.startPage(pageNum,pageSize);
+        List<MonitorBytedanceAdVo> list = monitorBytedanceActionTrackUrlMapper.getAccountActionTrackUrl(accountId,warningFlag,operatorUserIds);
+        PageInfo<MonitorBytedanceAdVo> pageInfo = new PageInfo<MonitorBytedanceAdVo>(list);
+        return Result.successMsg("查询成功",pageInfo);
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
     /**
      * @description: 监测预警-点击监测链接
      * @param
@@ -38,10 +167,10 @@ public class MonitorBytedanceServiceImpl implements IMonitorBytedanceService {
      */
     public Result monitorBytedanceActionTrackUrl(){
         //查询 头条自动投放配置 中的账户 和 点击监测链接
-        List<MonitorBytedanceAdVo> accountList = monitorBytedanceActionTrackUrlMapper.getBytedancStrategyAcctionId();
+        List<MonitorBytedanceAdVo> accountList = monitorBytedanceActionTrackUrlMapper.getBytedancStrategyAcctionId(null);
         accountList.forEach(accountInfo ->{
             //根据账户 查询头条计划中的 点击监测链接
-            List<MonitorBytedanceAdVo> actionTrackUrlList = monitorBytedanceActionTrackUrlMapper.getBytedancPlanActionTrackUrl(accountInfo.getAccountId());
+            List<MonitorBytedanceAdVo> actionTrackUrlList = monitorBytedanceActionTrackUrlMapper.getBytedancPlanActionTrackUrl(Long.valueOf(accountInfo.getAccountId()));
             if (!Check.isNull(actionTrackUrlList)){
                 for (MonitorBytedanceAdVo actiontrackUrl : actionTrackUrlList) {
                     //账户配置中的 点击监测链接 != 创建计划中的 点击监测链接
@@ -55,6 +184,8 @@ public class MonitorBytedanceServiceImpl implements IMonitorBytedanceService {
         });
         return Result.successMsg("成功。",null);
     }
+
+
     /**
      * 发送 点击监测链接 预警消息
      */

+ 8 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/vo/MonitorBytedanceAdVo.java

@@ -11,11 +11,18 @@ import java.io.Serializable;
 @Data
 public class MonitorBytedanceAdVo implements Serializable {
     //账户id
-    private long accountId;
+    private String accountId;
+    //转化id
+    private String convertId;
     //点击监测链接
     private String actionTrackUrl;
+    //是否开启监测链接预警 1-开启 2-不开启'
+    private String warningFlag;
+    //创建人
+    private String createUserId;
     //账户名称
     private String accountName;
+    private String projectName;
     //运营人员id
     private String operateUserid;
     //运营人员名称

+ 13 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/AiBytedanceAdvertiserStrategyController.java

@@ -305,9 +305,11 @@ public class AiBytedanceAdvertiserStrategyController {
 	public Result updStaById(@RequestParam("id")String id,
 							 @ApiParam("状态(0开-1关)") @RequestParam("state") String state,
 							 @ApiParam("账户id") @RequestParam("accountId") String accountId,
-							 @ApiParam("素材类型") @RequestParam("creativeImageMode") String creativeImageMode) {
+							 @ApiParam("素材类型") @RequestParam("creativeImageMode") String creativeImageMode,
+							 @ApiParam("投放范围-通投智选时传入") @RequestParam(value = "adDeliveryRange",required = false) String adDeliveryRange
+							 ) {
 		try {
-			return aiBytedanceAdvertiserStrategyService.updStaById(id,state,accountId,creativeImageMode);
+			return aiBytedanceAdvertiserStrategyService.updStaById(id,state,accountId,creativeImageMode,adDeliveryRange);
 		}catch (Exception e){
 			log.error("修改状态(0开-1关)失败",e);
 			return Result.error("请求失败,请联系开发人员!");
@@ -500,13 +502,21 @@ public class AiBytedanceAdvertiserStrategyController {
 			Result resultDefault = aiBytedanceAdvertiserStrategyService.getAdAudiencePackage(accountId,null,"DEFAULT");
 			//穿山甲定向包
 			Result resultUnion = aiBytedanceAdvertiserStrategyService.getAdAudiencePackage(accountId,null,"UNION");
+			//通投智选
+			Result resultUniversal = aiBytedanceAdvertiserStrategyService.getAdAudiencePackage(accountId,null,"UNIVERSAL");
 			List listDefault = (List) resultDefault.getResult();
 			List listUnion = (List) resultUnion.getResult();
-
+			List listUniversal = (List) resultUniversal.getResult();
 			if (!Check.isNull(listDefault)){
 				listDefault.addAll(listUnion);
+				if (!Check.isNull(listUniversal)){
+					listDefault.addAll(listUniversal);
+				}
 			}else {
 				listDefault = listUnion;
+				if (!Check.isNull(listUniversal)){
+					listDefault.addAll(listUniversal);
+				}
 			}
 			return Result.successMsg("获取定向包成功。",listDefault);
 		}catch (Exception e){

+ 54 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/BytedancePlanJobController.java

@@ -2,16 +2,24 @@ package org.jeecg.modules.bytedance.advertise.controller;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.bytedance.advertise.service.IMonitorBytedanceService;
+import org.jeecg.modules.bytedance.advertise.vo.MonitorBytedanceAdVo;
+import org.jeecg.modules.bytedance.common.constant.BytedanceConstant;
+import org.jeecg.modules.bytedance.common.service.IUserAllocationService;
+import org.jeecg.modules.bytedance.common.utils.Check;
+import org.jeecg.modules.system.service.ISysRoleService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.HashSet;
+import java.util.Set;
 
 /**
- * 头条定时任务
+ * 头条定时任务-监测连接预警
  * @author zian Y
  * @date   2021-12-28
  * @version V1.0
@@ -25,6 +33,11 @@ public class BytedancePlanJobController {
 	@Autowired
 	private IMonitorBytedanceService monitorBytedanceService;
 
+	@Resource
+	private IUserAllocationService userAllocationService;
+
+	@Autowired
+	private ISysRoleService sysRoleService;;
 
 	@ApiOperation(value = "监测预警-点击监测链接", notes = "监测预警-点击监测链接")
 	@GetMapping(value = "/monitorBytedanceActionTrackUrl")
@@ -33,5 +46,42 @@ public class BytedancePlanJobController {
 	}
 
 
+	@ApiOperation(value = "监测预警-新增", notes = "监测预警-新增")
+	@PostMapping(value = "/insertAccountTrackUrl")
+	public Result insertAccountTrackUrl(@RequestBody MonitorBytedanceAdVo monitorBytedanceAdVo) {
+		return monitorBytedanceService.insertAccountTrackUrl(monitorBytedanceAdVo);
+	}
+
+	@ApiOperation(value = "监测预警-修改", notes = "监测预警-修改")
+	@PostMapping(value = "/updAccountActionTrackUrl")
+	public Result updAccountActionTrackUrl(@RequestBody MonitorBytedanceAdVo monitorBytedanceAdVo) {
+		return monitorBytedanceService.updAccountActionTrackUrl(monitorBytedanceAdVo);
+	}
+
+
+	@ApiOperation(value = "监测预警-查询", notes = "监测预警-查询")
+	@GetMapping(value = "/selectAccountActionTrackUrlList")
+	public Result selectAccountActionTrackUrlList(
+			@ApiParam("用户id") @RequestParam(value = "userId") String userId,
+			@ApiParam("账户id") @RequestParam(value = "accountId",required = false) String accountId,
+			@ApiParam("是否开启监测链接预警 1-开启 2-不开启") @RequestParam(value = "warningFlag",required = false) String warningFlag,
+			@RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum,
+			@RequestParam(value = "pageSize",defaultValue = "10") Integer pageSize) {
+		//获取用户角色code
+		String roleCode = sysRoleService.getRoleCodeByUserId(userId);
+		if (Check.isNull(roleCode)){
+			return Result.errorMsg("无法查询到该用户角色信息。");
+		}
+		Set<String> operatorUserIds = new HashSet<>();
+		if(!BytedanceConstant.COMMON_ROLE_CODE_ADMIN.equals(roleCode)){
+			//查询所有包含自己的下级
+			operatorUserIds = userAllocationService.recursiveQuerySubordinate(userId);
+		}
+		return monitorBytedanceService.selectAccountActionTrackUrlList(accountId,warningFlag,operatorUserIds,pageNum,pageSize);
+
+
+	}
+
+
 
 }