Selaa lähdekoodia

Merge branch 'test'

yangzian 3 vuotta sitten
vanhempi
commit
10e80f2f46

+ 1 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/dockapi/MarketingServiceImpl.java

@@ -1007,7 +1007,7 @@ public class MarketingServiceImpl implements MarketingService{
             log.info("查询查询转化目标详细信息不存在==》accountId:{},message:{}", token.getAccountId(), message);
             return Result.error("查询转化目标详细信息不存在!");
         }
-        return Result.successMsg("查询转化目标详细信息不存在",dataList);
+        return Result.successMsg("查询转化目标详细信息成功。",dataList);
     }
 
 

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

@@ -30,12 +30,15 @@
     <select id="getBytedancPlanActionTrackUrl" resultType="org.jeecg.modules.bytedance.advertise.vo.MonitorBytedanceAdVo">
         SELECT
             DISTINCT
-            action_track_url actionTrackUrl
+            action_track_url actionTrackUrl,
+            id as planId,
+            account_id
         FROM
             ctop_bytedance_advertise_plan
-        WHERE
-            account_id = #{accountId}
-          and DATE_FORMAT(create_time,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
+        WHERE action_track_url is NOT NULL
+            and opt_status = 'AD_STATUS_ENABLE'
+            and account_id = #{accountId}
+          and DATE_FORMAT(start_time,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
     </select>
 
 

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

@@ -2,6 +2,7 @@ package org.jeecg.modules.bytedance.advertise.service;
 
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.bytedance.advertise.vo.MonitorBytedanceAdVo;
+import org.jeecg.modules.bytedance.common.entity.CtopOauthToken;
 
 import java.util.Set;
 
@@ -16,9 +17,11 @@ public interface IMonitorBytedanceService{
 
     Result insertAccountTrackUrl(MonitorBytedanceAdVo monitorBytedanceAdVo);
 
-    Result monitorBytedanceActionTrackUrl();
+    Result monitorBytedanceActionTrackUrl(String accountId);
 
     Result updAccountActionTrackUrl(MonitorBytedanceAdVo monitorBytedanceAdVo);
 
     Result selectAccountActionTrackUrlList(String accountId, String warningFlag, Set<String> operatorUserIds, Integer pageNum, Integer pageSize);
+
+    void trackUrlContrast(CtopOauthToken token,String accountId,String converId,String planId);
 }

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

@@ -80,6 +80,9 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
     @Autowired
     IAiBytedanceAutocreateLogService iBytedanceAutocreateLogService;
 
+    @Autowired
+    IMonitorBytedanceService monitorBytedanceService;
+
     @Override
     public Long createCreative(CtopOauthToken token, AiBytedanceAdvertiserStrategy strategy, Integer createType, Long videoCnt, String openUrl) throws ParseException {
         UserAllocation userAllocation = userAllocationService.getByAccountId(strategy.getAccountId());
@@ -193,6 +196,9 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
                 adDplinkInfo.setImageMode(creativeImageMode);
                 adDplinkInfoService.save(adDplinkInfo);
 
+                monitorBytedanceService.trackUrlContrast(token,String.valueOf(strategy.getAccountId()),String.valueOf(strategy.getAdConvertId()),String.valueOf(adId));
+                log.info("账户id:{};==========不使用dp链接=======校验第三方监测链接==============>{};message==>{}",strategy.getAccountId());
+
                 BytedanceAiVideoCreativeLog creativeLog = new BytedanceAiVideoCreativeLog(strategy,adId,campaignId,video);
                 videoCreativeLogService.saveOrUpdate(creativeLog);
                 videoCnt --;
@@ -274,6 +280,10 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
                 adDplinkInfo.setStrategyId(strategy.getId());
                 adDplinkInfo.setImageMode(creativeImageMode);
                 adDplinkInfoService.save(adDplinkInfo);
+
+                monitorBytedanceService.trackUrlContrast(token,String.valueOf(strategy.getAccountId()),String.valueOf(strategy.getAdConvertId()),String.valueOf(adId));
+                log.info("账户id:{};==========使用dp链接=======校验第三方监测链接==============>{};message==>{}",strategy.getAccountId());
+
                 BytedanceAiVideoCreativeLog creativeLog = new BytedanceAiVideoCreativeLog(strategy,adId,campaignId,video);
                 videoCreativeLogService.saveOrUpdate(creativeLog);
                 videoCnt --;

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

@@ -3,12 +3,18 @@ package org.jeecg.modules.bytedance.advertise.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.bytedance.advertise.dockapi.MarketingService;
 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.entity.BytedanceOperationLog;
+import org.jeecg.modules.bytedance.common.entity.CtopOauthToken;
+import org.jeecg.modules.bytedance.common.mapper.BytedanceOperationLogMapper;
+import org.jeecg.modules.bytedance.common.service.ICtopOauthTokenService;
 import org.jeecg.modules.bytedance.common.service.IUserAllocationService;
 import org.jeecg.modules.bytedance.common.utils.Check;
 import org.jeecg.modules.bytedance.common.utils.CorpWexinUtils;
@@ -16,8 +22,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.text.MessageFormat;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * 规则账户清洗数据
@@ -26,6 +31,7 @@ import java.util.Set;
  * @version V1.0
  * @date 2020-11-16
  */
+@Slf4j
 @Service
 public class MonitorBytedanceServiceImpl implements IMonitorBytedanceService {
     @Resource
@@ -37,7 +43,14 @@ public class MonitorBytedanceServiceImpl implements IMonitorBytedanceService {
     @Resource
     private IUserAllocationService userAllocationService;
 
+    @Resource
+    private MarketingService marketingServiceImpl;
 
+    @Resource
+    private ICtopOauthTokenService tokenService;
+
+    @Resource
+    private BytedanceOperationLogMapper bytedanceOperationLogMapper;
 
     @Resource
     private CorpWexinUtils corpWexinUtils;
@@ -56,24 +69,20 @@ public class MonitorBytedanceServiceImpl implements IMonitorBytedanceService {
         //账户 查询 第三方监测链接
         List<MonitorBytedanceAdVo> trackUrl = monitorBytedanceActionTrackUrlMapper.getAccountActionTrackUrl(monitorBytedanceAdVo.getAccountId(), null,null);
         if (!Check.isNull(trackUrl)){
-            return Result.errorMsg("账户已存在第三方监测链接,请重新编辑。");
+            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);
+
+        //添加修改记录
+        BytedanceOperationLog bytedanceOperationLog = new BytedanceOperationLog();
+        bytedanceOperationLog.setOldData(null);
+        bytedanceOperationLog.setNewData(monitorBytedanceAdVo.toString());
+        bytedanceOperationLog.setOperationType("头条第三方监测链接-新增");
+        bytedanceOperationLog.setOperationContent("账户:"+monitorBytedanceAdVo.getAccountId()+"新增监测链接:"+monitorBytedanceAdVo.getActionTrackUrl());
+        bytedanceOperationLog.setCreateById(monitorBytedanceAdVo.getCreateUserId());
+        bytedanceOperationLog.setCreateTime(new Date());
+        bytedanceOperationLogMapper.insert(bytedanceOperationLog);
+
         return Result.successMsg("成功。",null);
     }
 
@@ -89,22 +98,16 @@ public class MonitorBytedanceServiceImpl implements IMonitorBytedanceService {
      */
     @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);
+        //添加修改记录
+        BytedanceOperationLog bytedanceOperationLog = new BytedanceOperationLog();
+        bytedanceOperationLog.setOldData(null);
+        bytedanceOperationLog.setNewData(monitorBytedanceAdVo.toString());
+        bytedanceOperationLog.setOperationType("头条第三方监测链接-修改");
+        bytedanceOperationLog.setOperationContent("账户:"+monitorBytedanceAdVo.getAccountId()+"修改内容。");
+        bytedanceOperationLog.setCreateById(monitorBytedanceAdVo.getCreateUserId());
+        bytedanceOperationLog.setCreateTime(new Date());
+        bytedanceOperationLogMapper.insert(bytedanceOperationLog);
         return Result.successMsg("修改成功。", null);
     }
 
@@ -123,7 +126,6 @@ public class MonitorBytedanceServiceImpl implements IMonitorBytedanceService {
      */
     @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);
@@ -157,31 +159,46 @@ public class MonitorBytedanceServiceImpl implements IMonitorBytedanceService {
 
 
 
-
     /**
      * @description: 监测预警-点击监测链接
      * @param
      * @return: org.jeecg.common.api.vo.Result
      * @author: zianY
-     * @time: 2021/12/28
+     * @time: 2022/01/12
      */
-    public Result monitorBytedanceActionTrackUrl(){
-        //查询 头条自动投放配置 中的账户 和 点击监测链接
-        List<MonitorBytedanceAdVo> accountList = monitorBytedanceActionTrackUrlMapper.getBytedancStrategyAcctionId(null);
-        accountList.forEach(accountInfo ->{
+    public Result monitorBytedanceActionTrackUrl(String accountId){
+        //查询 配置的点击监测链接
+        List<MonitorBytedanceAdVo> accountList = monitorBytedanceActionTrackUrlMapper.getAccountActionTrackUrl(accountId,"1",null);
+        if(Check.isNull(accountList)){
+            log.info("=======暂无账户配置第三方点击监测链接信息=====");
+            return Result.successMsg("=======暂无账户配置第三方点击监测链接信息=====",null);
+        }
+        for (MonitorBytedanceAdVo accountInfo : accountList) {
+            //校验 拉取后台计划 监测链接
             //根据账户 查询头条计划中的 点击监测链接
             List<MonitorBytedanceAdVo> actionTrackUrlList = monitorBytedanceActionTrackUrlMapper.getBytedancPlanActionTrackUrl(Long.valueOf(accountInfo.getAccountId()));
-            if (!Check.isNull(actionTrackUrlList)){
-                for (MonitorBytedanceAdVo actiontrackUrl : actionTrackUrlList) {
-                    //账户配置中的 点击监测链接 != 创建计划中的 点击监测链接
-                    if (!StringUtils.equals(accountInfo.getActionTrackUrl(),actiontrackUrl.getActionTrackUrl())){
-                        //发送预警消息
-                        sendEnterpriseWeiXinMessage(accountInfo);
-                        break;
-                    }
+            if(Check.isNull(actionTrackUrlList)){
+                log.info("accountId:=={}====暂无计划信息============",accountInfo.getAccountId());
+                return Result.successMsg("accountId:=={"+accountInfo.getAccountId()+"}====暂无计划信息============。",null);
+            }
+            List<String> planList = new ArrayList<>();
+            for (MonitorBytedanceAdVo actiontrackUrl : actionTrackUrlList) {
+                //配置中的 点击监测链接 != 创建计划中的 点击监测链接
+                if (!StringUtils.equals(accountInfo.getActionTrackUrl(),actiontrackUrl.getActionTrackUrl())){
+                    //关停计划
+                    CtopOauthToken token = tokenService.getTokenByAccountId(Long.valueOf(accountInfo.getAccountId()));
+                    marketingServiceImpl.updPlanStatus(token, Arrays.asList(Long.valueOf(actiontrackUrl.getPlanId())),"disable");
+                    log.info("accountId:=={}==计划id:{}=====第三方点击监测链接不一致,计划已【关停】============",accountInfo.getAccountId(),actiontrackUrl.getPlanId());
+                    planList.add(actiontrackUrl.getPlanId());
                 }
             }
-        });
+            if (!Check.isNull(planList) && planList.size() > 0){
+                //发送预警消息
+                accountInfo.setPlanIdList(planList);
+                sendEnterpriseWeiXinMessage(accountInfo);
+                log.info("accountId:=={}==计划id:{}=====第三方点击监测链接不一致,已发送企业微信通知============",accountInfo.getAccountId(),accountInfo.getPlanIdList());
+            }
+        }
         return Result.successMsg("成功。",null);
     }
 
@@ -190,13 +207,51 @@ public class MonitorBytedanceServiceImpl implements IMonitorBytedanceService {
      * 发送 点击监测链接 预警消息
      */
     public void sendEnterpriseWeiXinMessage(MonitorBytedanceAdVo accountInfo){
-        String message =  "{0},您好!您的账户:{1},账户ID:{2},点击监测链接配置有差异,请及时检查账户配置!";
+        String message =  "{0},您好!您所运营的账户:{1},其中的广告计划id:{2},监测链接设置有误,已关停请及时修改!";
         //发送微信通知
-        JSONObject jsonObject =  monitorBytedanceActionTrackUrlMapper.getWChatIdByUserId("80e747cdea6f41dbbc8cde23046fd4e0");
-        String msg = MessageFormat.format(message,accountInfo.getOperateUserName(),accountInfo.getAccountName(),String.valueOf(accountInfo.getAccountId()));
+        JSONObject jsonObject =  monitorBytedanceActionTrackUrlMapper.getWChatIdByUserId(accountInfo.getOperateUserid());
+        String msg = MessageFormat.format(message,accountInfo.getOperateUserName(),String.valueOf(accountInfo.getAccountId()),String.join(",",accountInfo.getPlanIdList()));
         corpWexinUtils.sendMessageByWeChatId(jsonObject,msg);
     }
 
 
 
+    /**
+     *
+     * @description: 自动投放中 账户自动创建时 校验第三方监测链接
+     *
+     * @param token
+     * @param accountId 账户id
+     * @param converId 转化目标id
+     * @param planId 计划id
+     * @return: void
+     * @author: zianY
+     * @time: 2022/1/13
+     */
+    public void trackUrlContrast(CtopOauthToken token,String accountId,String converId,String planId){
+        //校验 账户自动投放配置中 监测链接
+        //查询 链接配置
+        List<MonitorBytedanceAdVo> monitorBytedanceAdVos = monitorBytedanceActionTrackUrlMapper.getAccountActionTrackUrl(String.valueOf(accountId),"1",null);
+        if (!Check.isNull(monitorBytedanceAdVos)){
+            MonitorBytedanceAdVo bytedanceAdVo = monitorBytedanceAdVos.get(0);
+            // 账户id  和 转化id 查询 第三方监测链接
+            Result resultConvert = aiBytedanceAdvertiserStrategyService.readToolConvertInfo(accountId,converId);
+            if (resultConvert.isSuccess()){
+                JSONObject jsonObject = (JSONObject) JSONObject.toJSON(resultConvert.getResult());
+                String action_track_url = jsonObject.getString("action_track_url");
+                //自动投放账户配置中的链接 != 监测链接配置
+                if (!StringUtils.equals(action_track_url,bytedanceAdVo.getActionTrackUrl())){
+                    //关停计划
+                    marketingServiceImpl.updPlanStatus(token, Arrays.asList(Long.valueOf(planId)),"disable");
+                    //发送预警消息
+                    sendEnterpriseWeiXinMessage(bytedanceAdVo);
+                    log.info("accountId:=={}==目标转化id:{}=====自动投创建====第三方点击监测链接与自动投放配置不一致,已发送企业微信通知============",bytedanceAdVo.getAccountId(),bytedanceAdVo.getConvertId());
+                }
+            }
+            log.info("accountId:=={}==目标转化id:{}=====第三方点击监测链接获取失败",accountId,converId);
+        }
+        log.info("accountId:=={}==目标转化id为空。",accountId);
+    }
+
+
 }

+ 5 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/vo/MonitorBytedanceAdVo.java

@@ -3,6 +3,7 @@ package org.jeecg.modules.bytedance.advertise.vo;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * @author zianY
@@ -27,4 +28,8 @@ public class MonitorBytedanceAdVo implements Serializable {
     private String operateUserid;
     //运营人员名称
     private String operateUserName;
+
+    //计划id
+    private String planId;
+    private List<String> planIdList;
 }

+ 1 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/entity/BytedanceOperationLog.java

@@ -38,7 +38,7 @@ public class BytedanceOperationLog {
 	/**修改后的数据*/
 	@Excel(name = "修改后的数据", width = 15)
     @ApiModelProperty(value = "修改后的数据")
-	private Object newData;
+	private String newData;
 	/**操作类型*/
 	@Excel(name = "操作类型", width = 15)
     @ApiModelProperty(value = "操作类型")

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

@@ -41,8 +41,8 @@ public class BytedancePlanJobController {
 
 	@ApiOperation(value = "监测预警-点击监测链接", notes = "监测预警-点击监测链接")
 	@GetMapping(value = "/monitorBytedanceActionTrackUrl")
-	public Result monitorBytedanceActionTrackUrl() {
-		return monitorBytedanceService.monitorBytedanceActionTrackUrl();
+	public Result monitorBytedanceActionTrackUrl(@RequestParam String accountId) {
+		return monitorBytedanceService.monitorBytedanceActionTrackUrl(accountId);
 	}
 
 
@@ -65,7 +65,7 @@ public class BytedancePlanJobController {
 			@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 = "pageNo",defaultValue = "1") Integer pageNo,
 			@RequestParam(value = "pageSize",defaultValue = "10") Integer pageSize) {
 		//获取用户角色code
 		String roleCode = sysRoleService.getRoleCodeByUserId(userId);
@@ -77,7 +77,7 @@ public class BytedancePlanJobController {
 			//查询所有包含自己的下级
 			operatorUserIds = userAllocationService.recursiveQuerySubordinate(userId);
 		}
-		return monitorBytedanceService.selectAccountActionTrackUrlList(accountId,warningFlag,operatorUserIds,pageNum,pageSize);
+		return monitorBytedanceService.selectAccountActionTrackUrlList(accountId,warningFlag,operatorUserIds,pageNo,pageSize);
 
 
 	}