Explorar el Código

自动创建计划时出现日志加入到ctop_ai_bytedance_autocreate_log表

huangxuechao hace 4 años
padre
commit
50d56a325b
Se han modificado 11 ficheros con 206 adiciones y 6 borrados
  1. 12 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/dockapi/MarketingServiceImpl.java
  2. 69 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/entity/AiBytedanceAutocreateLog.java
  3. 17 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/AiBytedanceAutocreateLogMapper.java
  4. 5 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/xml/AiBytedanceAutocreateLogMapper.xml
  5. 1 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/xml/LowQualityRejectReasonMapper.xml
  6. 14 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/IAiBytedanceAutocreateLogService.java
  7. 53 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/AiBytedanceAdvertiserStrategyServiceImpl.java
  8. 19 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/AiBytedanceAutocreateLogServiceImpl.java
  9. 1 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/ByteDanceAdvertisePlanServiceImpl.java
  10. 4 2
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/BytedanceRejectReasonServiceImpl.java
  11. 11 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/AiBytedanceAdvertiserStrategyController.java

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

@@ -11,8 +11,10 @@ import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.bytedance.advertise.entity.AiBytedanceAdvertiserStrategy;
+import org.jeecg.modules.bytedance.advertise.entity.AiBytedanceAutocreateLog;
 import org.jeecg.modules.bytedance.advertise.entity.ByteDanceCampaign;
 import org.jeecg.modules.bytedance.advertise.enums.BytedanceConvertType;
+import org.jeecg.modules.bytedance.advertise.service.IAiBytedanceAutocreateLogService;
 import org.jeecg.modules.bytedance.advertise.service.IByteDanceCampaignService;
 import org.jeecg.modules.bytedance.advertise.vo.AdConvertQueryVo;
 import org.jeecg.modules.bytedance.advertise.vo.ByteDanceSearchVo;
@@ -47,6 +49,9 @@ public class MarketingServiceImpl implements MarketingService{
 
     @Autowired
     private IByteDanceCampaignService campaignService;
+
+    @Autowired
+    IAiBytedanceAutocreateLogService iBytedanceAutocreateLogService;
     /**
      *
      * @description: 获取账户日预算
@@ -323,6 +328,13 @@ public class MarketingServiceImpl implements MarketingService{
         Integer code = jsonObject.getInteger("code");
         if (null ==  code || !code.equals(0)) {
             log.error("广告计划创建失败==》accountId:{},message:{}", token.getAccountId(), jsonObject.getString("message"));
+            AiBytedanceAutocreateLog iBytedanceAutocreateLog = new AiBytedanceAutocreateLog(
+                    token.getAccountId(),
+                    "广告计划创建",
+                    code,
+                    "广告计划创建失败 => message:" + jsonObject.getString("message"),
+                    urlPath + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_ad_create")+" => params:"+ params.toJSONString());
+            iBytedanceAutocreateLogService.save(iBytedanceAutocreateLog);
             return Result.error(jsonObject.getString("message"));
         }
         //strategy.setId(jsonObject.getJSONObject("data").getLong("ad_id"));

+ 69 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/entity/AiBytedanceAutocreateLog.java

@@ -0,0 +1,69 @@
+package org.jeecg.modules.bytedance.advertise.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+
+/**
+ * 自动创建计划日志
+ * @author jeecg-boot
+ * @date   2021-07-05
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_ai_bytedance_autocreate_log")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ctop_ai_bytedance_autocreate_log对象", description="自动创建计划日志")
+public class AiBytedanceAutocreateLog {
+
+	/**主键id*/
+	@TableId(type = IdType.AUTO)
+	@ApiModelProperty(value = "主键id")
+	private Integer id;
+	/**账户id*/
+	@Excel(name = "账户id", width = 15)
+	@ApiModelProperty(value = "账户id")
+	private Long accountId;
+	/**类型*/
+	@Excel(name = "类型", width = 15)
+	@ApiModelProperty(value = "类型")
+	private String execType;
+	/**代码*/
+	@Excel(name = "代码", width = 15)
+	@ApiModelProperty(value = "代码")
+	private Integer code;
+	/**返回消息*/
+	@Excel(name = "返回消息", width = 15)
+	@ApiModelProperty(value = "返回消息")
+	private String message;
+	/**创建调用接口的参数*/
+	@Excel(name = "创建调用接口的参数", width = 15)
+	@ApiModelProperty(value = "创建调用接口的参数")
+	private String createParam;
+	/**创建时间*/
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+
+	public AiBytedanceAutocreateLog(){}
+
+	public AiBytedanceAutocreateLog(Long accountId, String execType, Integer code, String message, String createParam){
+		this.accountId = accountId;
+		this.execType = execType;
+		this.code = code;
+		this.message = message;
+		this.createParam = createParam;
+	}
+}

+ 17 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/AiBytedanceAutocreateLogMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.bytedance.advertise.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.bytedance.advertise.entity.AiBytedanceAutocreateLog;
+
+/**
+ * 自动创建计划日志
+ * @author jeecg-boot
+ * 2021-07-05
+ * @version V1.0
+ */
+public interface AiBytedanceAutocreateLogMapper extends BaseMapper<AiBytedanceAutocreateLog> {
+
+}

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

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.bytedance.advertise.mapper.AiBytedanceAutocreateLogMapper">
+
+</mapper>

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

@@ -4,6 +4,6 @@
 
     <select id="getByRejectReason" resultType="org.jeecg.modules.bytedance.advertise.entity.LowQualityRejectReason">
 
-        select * from ctop_low_quality_reject_reason where status = 0 and audit_reject_reason =#{rejectReason}
+        select * from ctop_low_quality_reject_reason where status = 1 and audit_reject_reason =#{rejectReason}
     </select>
 </mapper>

+ 14 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/IAiBytedanceAutocreateLogService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.bytedance.advertise.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.bytedance.advertise.entity.AiBytedanceAutocreateLog;
+
+/**
+ * 自动创建计划日志
+ * @author jeecg-boot
+ * 2021-07-05
+ * @version V1.0
+ */
+public interface IAiBytedanceAutocreateLogService extends IService<AiBytedanceAutocreateLog> {
+
+}

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

@@ -35,6 +35,7 @@ import javax.transaction.Transactional;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
+import org.jeecg.modules.bytedance.advertise.entity.AiBytedanceAutocreateLog;
 
 /**
  * 头条智能投放账户配置信息表
@@ -75,17 +76,33 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
     ByteDanceGeneralCopywriterMapper byteDanceGeneralCopywriterMapper;
     @Resource
     BytedanceMaterialRejectReasonMapper bytedanceMaterialRejectReasonMapper;
+    @Autowired
+    IAiBytedanceAutocreateLogService iBytedanceAutocreateLogService;
     @Override
     public Long createCreative(AiBytedanceAdvertiserStrategy strategy, Integer createType, Long videoCnt, String openUrl) {
         CtopOauthToken token = tokenService.getOauthTokenByAccountId(strategy.getAccountId()+"");
         if (null == token) {
             log.info("token获取失败=>accountId:{}", strategy.getAccountId());
+            AiBytedanceAutocreateLog iBytedanceAutocreateLog = new AiBytedanceAutocreateLog(
+                    strategy.getAccountId(),
+                    "获取token",
+                    500,
+                    "token获取失败=>accountId:" + strategy.getAccountId(),
+                    "tokenService.getOauthTokenByAccountId => "+ strategy.getAccountId());
+            iBytedanceAutocreateLogService.save(iBytedanceAutocreateLog);
             return videoCnt;
         }
 
         UserAllocation userAllocation = userAllocationService.getByAccountId(strategy.getAccountId());
         if(null == userAllocation||userAllocation.getAccountStatus()!=0){
             log.info("此账户不存在或者已经被关闭=>accountId:{}", token.getAccountId());
+            AiBytedanceAutocreateLog iBytedanceAutocreateLog = new AiBytedanceAutocreateLog(
+                    token.getAccountId(),
+                    "获取账户",
+                    500,
+                    "此账户不存在或者已经被关闭=>accountId:" + token.getAccountId(),
+                    "userAllocationService.getByAccountId => "+ token.getAccountId());
+            iBytedanceAutocreateLogService.save(iBytedanceAutocreateLog);
             return videoCnt;
         }
         //获取全量广告组数据
@@ -105,13 +122,20 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         List<ByteDanceVideoInfo> videoInfos = getVideoInfoByCreateType(userAllocation.getProjectId(),strategy,startTime,endTime,createType,videoCnt);
         if(null == videoInfos||videoInfos.isEmpty()){
             log.info("获取{}视频素材为空=>accountId:{}",BytedanceCreativeMatTypeEnum.getNameByType(createType+""),token.getAccountId());
+            AiBytedanceAutocreateLog iBytedanceAutocreateLog = new AiBytedanceAutocreateLog(
+                    token.getAccountId(),
+                    "获取视频素材",
+                    500,
+                    "获取"+BytedanceCreativeMatTypeEnum.getNameByType(createType+"")+"视频素材为空=>accountId:" + token.getAccountId(),
+                    "AiBytedanceAdvertiserStrategyService.getVideoInfoByCreateType => projectId:"+userAllocation.getProjectId()+",strategy:"+strategy.toString()+",startTime:"+startTime+",endTime:"+endTime+",createType:"+createType+",videoCnt:"+videoCnt);
+            iBytedanceAutocreateLogService.save(iBytedanceAutocreateLog);
             return videoCnt;
         }
         log.info("获取{}视频素材个数:{}=>accountId:{}",BytedanceCreativeMatTypeEnum.getNameByType(createType+""),videoInfos.size(),token.getAccountId());
 
         for (ByteDanceVideoInfo video:videoInfos) {
             Integer isLowQuality = bytedanceMaterialRejectReasonMapper.getIsLowQualityByVideoId(video.getVid());    //判断次视频是否是低质视频,为1跳过
-            if(1 == isLowQuality){
+            if(!Check.isNull(isLowQuality) && 1 == isLowQuality){
                 continue;
             }
             Integer useDplinkIndex = strategy.getDpLinkIndexUsed();
@@ -159,12 +183,26 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
                     Result resultDeletePlan = marketingService.updPlanStatus(token,adIds,"delete");
                     if (!resultDeletePlan.isSuccess()){
                         log.info("广告计划删除失败:message==>{}",resultDeletePlan.getMessage());
+                        AiBytedanceAutocreateLog iBytedanceAutocreateLog = new AiBytedanceAutocreateLog(
+                                token.getAccountId(),
+                                "删除广告计划",
+                                resultDeletePlan.getCode(),
+                                "广告计划删除失败 => message:" + resultDeletePlan.getMessage(),
+                                "marketingService.updPlanStatus => token:"+ token.toString()+",adIds:"+adIds+",optstatus:delete");
+                        iBytedanceAutocreateLogService.save(iBytedanceAutocreateLog);
                     }
 
                     String message = creativeObject.getString("message");
                     Integer code = creativeObject.getInteger("code");
                     //创建创意失败
                     log.info("账户id:{};创意创建失败:code==>{};message==>{}",strategy.getAccountId(),code,message);
+                    AiBytedanceAutocreateLog iBytedanceAutocreateLog = new AiBytedanceAutocreateLog(
+                            strategy.getAccountId(),
+                            "创建创意",
+                            code,
+                            "创意创建失败 => message:" + message,
+                            "marketingService.creativeCreate => token:"+ token.toString()+",adIds:"+adIds+",creativeParams:"+creativeParams.toJSONString());
+                    iBytedanceAutocreateLogService.save(iBytedanceAutocreateLog);
                     continue;
                 }
 
@@ -231,11 +269,25 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
                     Result resultDeletePlan = marketingService.updPlanStatus(token,adIds,"delete");
                     if (!resultDeletePlan.isSuccess()){
                         log.info("广告计划删除失败:message==>{}",resultDeletePlan.getMessage());
+                        AiBytedanceAutocreateLog iBytedanceAutocreateLog = new AiBytedanceAutocreateLog(
+                                token.getAccountId(),
+                                "删除广告计划",
+                                resultDeletePlan.getCode(),
+                                "广告计划删除失败 => message:" + resultDeletePlan.getMessage(),
+                                "marketingService.updPlanStatus => token:"+ token.toString()+",adIds:"+adIds+",optstatus:delete");
+                        iBytedanceAutocreateLogService.save(iBytedanceAutocreateLog);
                     }
                     String message = creativeObject.getString("message");
                     Integer code = creativeObject.getInteger("code");
                     //创建创意失败
                     log.info("账户id:{};创意创建失败:code==>{};message==>{}",strategy.getAccountId(),code,message);
+                    AiBytedanceAutocreateLog iBytedanceAutocreateLog = new AiBytedanceAutocreateLog(
+                            strategy.getAccountId(),
+                            "创建创意",
+                            code,
+                            "创意创建失败 => message:" + message,
+                            "marketingService.creativeCreate => token:"+ token.toString()+",adIds:"+adIds+",creativeParams:"+creativeParams.toJSONString());
+                    iBytedanceAutocreateLogService.save(iBytedanceAutocreateLog);
                     continue;
                 }
 

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

@@ -0,0 +1,19 @@
+package org.jeecg.modules.bytedance.advertise.service.impl;
+
+import org.jeecg.modules.bytedance.advertise.entity.AiBytedanceAutocreateLog;
+import org.jeecg.modules.bytedance.advertise.service.IAiBytedanceAutocreateLogService;
+import org.jeecg.modules.bytedance.advertise.mapper.AiBytedanceAutocreateLogMapper;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * 自动创建计划日志
+ * @author jeecg-boot
+ * 2021-07-05
+ * @version V1.0
+ */
+@Service
+public class AiBytedanceAutocreateLogServiceImpl extends ServiceImpl<AiBytedanceAutocreateLogMapper, AiBytedanceAutocreateLog> implements IAiBytedanceAutocreateLogService {
+
+}

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

@@ -218,7 +218,7 @@ public class ByteDanceAdvertisePlanServiceImpl extends ServiceImpl<ByteDanceAdve
             queryWrapper.le("ad_modify_time",new Date());
         }
         queryWrapper.ne("opt_status","AD_STATUS_DELETE");
-        queryWrapper.eq("toutiao_status","AD_STATUS_AUDIT_DENY");
+//        queryWrapper.eq("toutiao_status","AD_STATUS_AUDIT_DENY");   //获取通过审核建议
         queryWrapper.orderByDesc("ad_modify_time");
         return this.list(queryWrapper);
     }

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

@@ -52,7 +52,8 @@ public class BytedanceRejectReasonServiceImpl implements BytedanceRejectReasonSe
                     bytedancePlanRejectReason.setAdId(ad_reject.getLong("ad_id"));
                     bytedancePlanRejectReason.setRejectItem(object.getString("reject_item"));
                     bytedancePlanRejectReason.setRejectReason(object.getString("reject_reason"));
-                    LowQualityRejectReason lowQualityRejectReason = lowQualityRejectReasonMapper.getByRejectReason(bytedancePlanRejectReason.getRejectReason());
+                    bytedancePlanRejectReason.setIsLowQuality(0);
+                    LowQualityRejectReason lowQualityRejectReason = lowQualityRejectReasonMapper.getByRejectReason(bytedancePlanRejectReason.getRejectReason().trim());
                     if(!Check.isNull(lowQualityRejectReason)){
                         bytedancePlanRejectReason.setIsLowQuality(1);
                     }
@@ -67,7 +68,8 @@ public class BytedanceRejectReasonServiceImpl implements BytedanceRejectReasonSe
                     BytedanceMaterialRejectReason bytedanceMaterialRejectReason = new BytedanceMaterialRejectReason();
                     bytedanceMaterialRejectReason.setMaterialType(object.getInteger("material_type"));
                     bytedanceMaterialRejectReason.setRejectReason(object.getString("reject_reason"));
-                    LowQualityRejectReason lowQualityRejectReason = lowQualityRejectReasonMapper.getByRejectReason(bytedanceMaterialRejectReason.getRejectReason());
+                    bytedanceMaterialRejectReason.setIsLowQuality(0);
+                    LowQualityRejectReason lowQualityRejectReason = lowQualityRejectReasonMapper.getByRejectReason(bytedanceMaterialRejectReason.getRejectReason().trim());
                     if(!Check.isNull(lowQualityRejectReason)){
                         bytedanceMaterialRejectReason.setIsLowQuality(1);
                     }

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

@@ -11,9 +11,11 @@ import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.modules.bytedance.advertise.dockapi.MarketingService;
 import org.jeecg.modules.bytedance.advertise.entity.AiBytedanceAdvertiserStrategy;
+import org.jeecg.modules.bytedance.advertise.entity.AiBytedanceAutocreateLog;
 import org.jeecg.modules.bytedance.advertise.entity.RuleDataAccount;
 import org.jeecg.modules.bytedance.advertise.entity.UpdAdStaOrCpaOrBudget;
 import org.jeecg.modules.bytedance.advertise.service.IAiBytedanceAdvertiserStrategyService;
+import org.jeecg.modules.bytedance.advertise.service.IAiBytedanceAutocreateLogService;
 import org.jeecg.modules.bytedance.advertise.service.IRuleDataAccountService;
 import org.jeecg.modules.bytedance.advertise.vo.AdConvertQueryVo;
 import org.jeecg.modules.bytedance.advertise.vo.AdGroupSearchVo;
@@ -64,7 +66,8 @@ public class AiBytedanceAdvertiserStrategyController {
 	private MarketingService marketingService;
 	@Autowired
 	private ICtopOauthTokenService tokenService;
-
+	@Autowired
+	IAiBytedanceAutocreateLogService iBytedanceAutocreateLogService;
 
 	/**
 	  * 分页列表查询
@@ -386,6 +389,13 @@ public class AiBytedanceAdvertiserStrategyController {
 		}
 		strategys.forEach(strategy -> executorService.submit(()->{
 			aiBytedanceAdvertiserStrategyService.customCreativeSupplement(strategy, hour,strategy.getAdOpenUrl());
+			AiBytedanceAutocreateLog iBytedanceAutocreateLog = new AiBytedanceAutocreateLog(
+					strategy.getAccountId(),
+					"创意创建",
+					200,
+					"成功",
+					"aiBytedanceAdvertiserStrategyService.customCreativeSupplement => strategy:"+ strategy.toString()+",hour:"+hour);
+			iBytedanceAutocreateLogService.save(iBytedanceAutocreateLog);
 		}));
 		ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
 		return result;