Переглянути джерело

广告组 出价预警 内容优化

zhaoxian 1 рік тому
батько
коміт
c8361e47e8

+ 2 - 4
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/service/IWarningOperationService.java

@@ -1,7 +1,5 @@
 package cn.com.ctop.job.kuaishou.data.service;
 
-import com.alibaba.fastjson.JSONObject;
-
 public interface IWarningOperationService {
     /**
      * 快手 出价方式 预警 && 操作
@@ -12,7 +10,7 @@ public interface IWarningOperationService {
      * @param unitId
      * @param unit_name
      */
-    void kuaiShouWarningOperation(Long projectId, String projectName, Long advertiserId, Long unitId, String unit_name);
+    void kuaiShouWarningOperation(Long projectId, String projectName, Long advertiserId, Long unitId, String unit_name, String msg);
 
 
     /**
@@ -25,5 +23,5 @@ public interface IWarningOperationService {
      * @param unit_name
      */
 
-    void kuaiShouBidWarningOperation(Long projectId, String projectName, Long advertiserId, Long unitId, String unit_name);
+    void kuaiShouBidWarningOperation(Long projectId, String projectName, Long advertiserId, Long unitId, String unit_name, String msg);
 }

+ 58 - 16
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/service/impl/AdUnitReportServiceImpl.java

@@ -28,6 +28,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -136,7 +137,7 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
             toGet = false;
         }
         if (toGet) {
-            getAdUnitReport(advertiserId, null, accessToken, startDate, endDate, page + 1);
+            getAdUnitReport(advertiserId, unitId, accessToken, startDate, endDate, page + 1);
         } else {
             log.info("快手广告组数据获取完成:accountId:{}", advertiserId);
         }
@@ -196,7 +197,11 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
         if (Check.isNull(project) || Check.isNull(details)) {
             return;
         }
-
+        Map<String, String> textMap = new HashMap<>();
+        List<JSONObject> lists = tokenMapper.getKuaishouOcpxTypeList();
+        for (JSONObject da : lists) {
+            textMap.put(da.getString("ocpxActionType"), da.getString("ocpxActionName"));
+        }
         // 最高出价
         Long maxBid = project.getLong("maxBid");
 
@@ -208,24 +213,34 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
         }
 
         //转化目标map
-        Map<Integer, Long> ocpxMap = new HashMap<>();
+        Map<Integer, String> ocpxMap = new HashMap<>();
         String ocpxTypeStr = project.getString("ocpxActionType");
         if (!Check.isNull(ocpxTypeStr)) {
             JSONArray ocpxArr = JSONArray.parseArray(ocpxTypeStr);
+            StringBuffer nameStr = new StringBuffer();
             for (int i = 0; i < ocpxArr.size(); i++) {
                 JSONObject obj = ocpxArr.getJSONObject(i);
-                ocpxMap.put(obj.getInteger("ocpxCode"), obj.getLong("maxValue"));
+                ocpxMap.put(obj.getInteger("ocpxCode"), obj.getString("maxValue"));
+                nameStr.append(textMap.get(obj.getString("ocpxCode"))).append(" ");
+            }
+            if (ocpxArr.size() > 0) {
+                ocpxMap.put(199999, nameStr.toString());
             }
         }
 
         //深度转化目标map
-        Map<Integer, Long> deepMap = new HashMap<>();
+        Map<Integer, String> deepMap = new HashMap<>();
         String deepTypeStr = project.getString("deepConversionType");
         if (!Check.isNull(deepTypeStr)) {
             JSONArray deepArr = JSONArray.parseArray(deepTypeStr);
+            StringBuffer nameStr = new StringBuffer();
             for (int i = 0; i < deepArr.size(); i++) {
                 JSONObject obj = deepArr.getJSONObject(i);
-                deepMap.put(obj.getInteger("deepCode"), obj.getLong("deepValue"));
+                deepMap.put(obj.getInteger("deepCode"), obj.getString("deepValue"));
+                nameStr.append(textMap.get(obj.getString("deepCode"))).append(" ");
+            }
+            if (deepArr.size() > 0) {
+                deepMap.put(199999, nameStr.toString());
             }
         }
         List<KuaishouAdUnitList> ksAdUnitList = new ArrayList<>();
@@ -258,51 +273,78 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
                     Boolean typeFalg = true;
                     Boolean bidFalg = true;
 
+                    StringBuffer msgType = new StringBuffer();
+                    StringBuffer msgBid = new StringBuffer();
                     //优化目标
                     if (!bidList.isEmpty()) {
                         if (!bidList.contains(bidType)) {
                             //项目不包含该优化目标,则关停
                             typeFalg = false;
+                            msgType.append("已设优化:").append(bidTypeStr).append("<br/>").append(",目标优化:").append(bidType);
                         } else if (bidType == 2 && bid > maxBid) {
                             //若优化目标为2点击数,并且广告组出价大于项目设置最大出价,则关停
                             bidFalg = false;
+                            msgBid.append("目标优化为点击数,且组出价:").append(bid / 1000).append("大于项目最大出价:").append(maxBid / 1000);
                         }
                     }
                     //转化目标
                     if (!Check.isNull(ocpxActionType) && ocpxActionType != 0) {
+                        String ocpxStr = ocpxActionType.toString();
+                        String octypeName = Check.isNull(textMap.get(ocpxStr)) ? ocpxStr : textMap.get(ocpxStr);
                         //!=0是设置过转化目标
                         if (!Check.isNullMap(ocpxMap)) {
-                            Long ocpxBid = ocpxMap.get(ocpxActionType);
+                            String ocpxBid = ocpxMap.get(ocpxActionType);
                             if (Check.isNull(ocpxBid)) {
-                                if (ocpxActionType == 2 && dayBudget != 0 && dayBudget <= 500 * 1000) {
-                                    // 转化目标为2行为数,并且预算小于等于500且不是不限,则允许启动
-                                    typeFalg = true;
+                                if (ocpxActionType == 2) {
+                                    if (dayBudget == 0 || dayBudget > 500 * 1000) {
+                                        // 转化目标为2行为数,并且预算大于500 或者不限,则关停
+                                        msgType.append("目标转化是行为数,");
+                                        if (dayBudget == 0) {
+                                            msgType.append("且组单日预算设置为不限!");
+                                        } else {
+                                            msgType.append("且组单日预算:").append(dayBudget / 1000).append("大于500!");
+                                        }
+                                    }
                                 } else {
                                     //通过key未获取值,说明不包含该目标,进行关停
                                     typeFalg = false;
+                                    msgType.append("已设转化:").append(ocpxMap.get(199999)).append("<br/>").append("目标转化:").append(octypeName);
                                 }
                             } else {
-                                if (cpaBid > ocpxBid) {
+                                if (cpaBid > Long.valueOf(ocpxBid)) {
                                     //组转化出价 大于 项目设置最大转化出价,则关停
                                     bidFalg = false;
+                                    msgBid.append("[").append(octypeName).append("]最高出价:").append(Long.valueOf(ocpxBid) / 1000).append("<br/>");
+                                    msgBid.append("目标出价:").append(cpaBid / 1000);
                                 }
                             }
                         } else if (ocpxActionType == 2 && (dayBudget == 0 || dayBudget > 500 * 1000)) {
                             // 转化目标为2行为数,并且预算大于500 或者不限,则关停
                             typeFalg = false;
+                            msgType.append("目标转化是行为数,");
+                            if (dayBudget == 0) {
+                                msgType.append("且组单日预算设置为不限!");
+                            } else {
+                                msgType.append("且组单日预算:").append(dayBudget / 1000).append("大于500!");
+                            }
                         }
                     }
 
-                    //转化目标
+                    //深度转化目标
                     if (!Check.isNull(deepConversionType) && deepConversionType != 0 && !deepMap.isEmpty()) {
-                        Long deepBid = deepMap.get(deepConversionType);
+                        String deepStr = deepConversionType.toString();
+                        String depTypeName = Check.isNull(textMap.get(deepStr)) ? deepStr : textMap.get(deepStr);
+                        String deepBid = deepMap.get(deepConversionType);
                         if (Check.isNull(deepBid)) {
                             //通过key未获取值,说明不包含该目标,进行关停
                             typeFalg = false;
+                            msgType.append("已设深度:").append(deepMap.get(199999)).append("<br/>").append("目标深度:").append(depTypeName);
                         } else {
-                            if (deepConversionBid > deepBid) {
+                            if (deepConversionBid > Long.valueOf(deepBid)) {
                                 //组深度转化出价 大于 项目设置最大转化出价,则关停
                                 bidFalg = false;
+                                msgBid.append("[").append(depTypeName).append("]最高深度出价:").append(Long.valueOf(deepBid) / 1000).append("<br/>");
+                                msgBid.append("目标深度出价:").append(deepConversionBid / 1000);
                             }
                         }
                     }
@@ -311,7 +353,7 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
                         executorBidTypeService.submit(new Runnable() {
                             @Override
                             public void run() {
-                                warningOperationService.kuaiShouWarningOperation(project.getLong("projectId"), project.getString("projectName"), accountId, unitId, unitName);
+                                warningOperationService.kuaiShouWarningOperation(project.getLong("projectId"), project.getString("projectName"), accountId, unitId, unitName, msgType.toString());
                             }
                         });
                     }
@@ -319,7 +361,7 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
                         executorMaxBidService.submit(new Runnable() {
                             @Override
                             public void run() {
-                                warningOperationService.kuaiShouBidWarningOperation(project.getLong("projectId"), project.getString("projectName"), accountId, unitId, unitName);
+                                warningOperationService.kuaiShouBidWarningOperation(project.getLong("projectId"), project.getString("projectName"), accountId, unitId, unitName, msgBid.toString());
                             }
                         });
                     }

+ 22 - 20
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/service/impl/WarningOperationServiceImpl.java

@@ -40,10 +40,10 @@ public class WarningOperationServiceImpl implements IWarningOperationService {
      */
 
     @Override
-    public void kuaiShouWarningOperation(Long projectId, String projectName, Long accountId, Long unitId, String unit_name) {
+    public void kuaiShouWarningOperation(Long projectId, String projectName, Long accountId, Long unitId, String unit_name, String msg) {
         String token = tokenService.getByAccountId(accountId);
-//        unitReportService.updateUnitStatus(token, accountId, unitId, 2);
-        String text = getKuaiShouBidTypeMessage(projectName, accountId, unitId, unit_name);
+        unitReportService.updateUnitStatus(token, accountId, unitId, 2);
+        String text = getKuaiShouBidTypeMessage(projectName + "(" + projectId + ")", accountId, unitId, unit_name, msg);
         //日志记录
         MediaSendAlarmRecord record = new MediaSendAlarmRecord(accountId, "2", text, unitId);
         adUnitReportMapper.insertSendRecord(record);
@@ -52,15 +52,16 @@ public class WarningOperationServiceImpl implements IWarningOperationService {
         corpWexinUtils.sendMessage(wexinIds, text);
     }
 
-    private String getKuaiShouBidTypeMessage(String projectName, Long advertiserId, Long unitId, String unit_name) {
+    private String getKuaiShouBidTypeMessage(String projectName, Long advertiserId, Long unitId, String unit_name, String msg) {
         StringBuilder text = new StringBuilder();
         text.append("出价方式错误预警").append("<br/>")
-                .append("您的项目:").append(projectName + ",").append("<br/>")
-                .append("下的账户:").append(advertiserId + ",").append("<br/>")
-                .append("广告组id为:").append(unitId).append("<br/>")
-                .append("广告组名称为:").append(unit_name).append("<br/>")
-                .append("出价方式设置错误。").append("<br/>")
-                .append("系统已执行暂停此组操作,请您及时查看!");
+                .append("您本地的项目:").append(projectName).append("<br/>")
+                .append("下的账户:").append(advertiserId).append("<br/>")
+                .append("广告组id:").append(unitId).append("<br/>")
+                .append("广告组名称:").append(unit_name).append("<br/>")
+                .append("预警说明:").append("<br/>")
+                .append(msg).append("<br/>")
+                .append("系统已暂停该广告组,请您及时查看并处理!");
         return text.toString();
     }
 
@@ -76,11 +77,11 @@ public class WarningOperationServiceImpl implements IWarningOperationService {
      */
 
     @Override
-    public void kuaiShouBidWarningOperation(Long projectId, String projectName, Long accountId, Long unitId, String unit_name) {
+    public void kuaiShouBidWarningOperation(Long projectId, String projectName, Long accountId, Long unitId, String unit_name, String msg) {
         String token = tokenService.getByAccountId(accountId);
-//        unitReportService.updateUnitStatus(token, accountId, unitId, 2);
+        unitReportService.updateUnitStatus(token, accountId, unitId, 2);
         //日志记录
-        String text = getKuaiShouBidMessage(projectName, accountId, unitId, unit_name);
+        String text = getKuaiShouBidMessage(projectName + "(" + projectId + ")", accountId, unitId, unit_name, msg);
         MediaSendAlarmRecord record = new MediaSendAlarmRecord(accountId, "2", text, unitId);
         adUnitReportMapper.insertSendRecord(record);
 
@@ -88,15 +89,16 @@ public class WarningOperationServiceImpl implements IWarningOperationService {
         corpWexinUtils.sendMessage(wexinIds, text);
     }
 
-    private String getKuaiShouBidMessage(String projectName, Long advertiserId, Long unitId, String unit_name) {
+    private String getKuaiShouBidMessage(String projectName, Long advertiserId, Long unitId, String unit_name, String msg) {
         StringBuilder text = new StringBuilder();
         text.append("出价过高预警").append("<br/>")
-                .append("您的项目:").append(projectName + ",").append("<br/>")
-                .append("下的账户:").append(advertiserId + ",").append("<br/>")
-                .append("广告组id为:").append(unitId).append("<br/>")
-                .append("广告组名称为:").append(unit_name).append("<br/>")
-                .append("出价设置过高。").append("<br/>")
-                .append("系统已执行暂停此组操作,请您及时查看!");
+                .append("您本地的项目:").append(projectName).append("<br/>")
+                .append("下的账户:").append(advertiserId).append("<br/>")
+                .append("广告组id:").append(unitId).append("<br/>")
+                .append("广告组名称:").append(unit_name).append("<br/>")
+                .append("预警说明:").append("<br/>")
+                .append(msg).append("<br/>")
+                .append("系统已暂停该广告组,请您及时查看并处理!");
         return text.toString();
     }
 }