Quellcode durchsuchen

fix on 2020.8.18

jiequan.bi vor 4 Jahren
Ursprung
Commit
b075f192f3
18 geänderte Dateien mit 252 neuen und 44 gelöschten Zeilen
  1. 10 0
      module-check/pom.xml
  2. 4 6
      module-check/src/main/java/cn/com/ctop/check/TestGroovy.groovy
  3. 11 0
      module-check/src/main/java/cn/com/ctop/check/component/basic/AbstractScript.java
  4. 11 1
      module-check/src/main/java/cn/com/ctop/check/component/execute/GroovyScriptExecutor.java
  5. 60 0
      module-check/src/main/java/cn/com/ctop/check/component/execute/ScriptProcessLogExecutor.java
  6. 1 1
      module-check/src/main/java/cn/com/ctop/check/controller/CtopCheckTaskListController.java
  7. 0 18
      module-check/src/main/java/cn/com/ctop/check/script/CheckTokenExecuteStateScript.groovy
  8. 26 1
      module-check/src/main/java/cn/com/ctop/check/script/TestGroovyScript.java
  9. 3 5
      module-check/src/main/java/cn/com/ctop/notice/handler/SendWeChatHandle.java
  10. 0 1
      module-common/src/main/java/cn/com/ctop/common/module/utils/CorpWexinUtils.java
  11. 36 0
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/CheckDataStateJob.java
  12. 36 0
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/CheckExecuteStateJob.java
  13. 1 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/AccountReportMapper.java
  14. 11 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/AccountReportMapper.xml
  15. 2 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/BytedanceAccountReportMapper.java
  16. 13 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/BytedanceAccountReportMapper.xml
  17. 22 4
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/BytedanceAccountReportServiceImpl.java
  18. 5 7
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/controller/ByteDanceQueryToolController.java

+ 10 - 0
module-check/pom.xml

@@ -29,6 +29,16 @@
             <artifactId>module-common</artifactId>
             <version>2.0.2</version>
         </dependency>
+        <dependency>
+            <groupId>cn.com.ctop</groupId>
+            <artifactId>module-kuaishou</artifactId>
+            <version>2.0.2</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.com.ctop</groupId>
+            <artifactId>module-toutiao</artifactId>
+            <version>2.0.2</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 4 - 6
module-check/src/main/java/cn/com/ctop/check/TestGroovy.groovy

@@ -2,19 +2,17 @@ package cn.com.ctop.check
 
 import cn.com.ctop.check.component.basic.AbstractScript
 import cn.com.ctop.common.module.service.IRefreshTokenService
-import cn.com.ctop.common.module.service.impl.RefreshTokenServiceImpl
 import org.jeecg.common.api.vo.Result
 
 class TestGroovy extends AbstractScript {
 
-   private IRefreshTokenService refreshTokenService;
+   private IRefreshTokenService refreshTokenService
 
     @Override
     Result<Object> exec() {
-        refreshTokenService=applicationContext.getBean(RefreshTokenServiceImpl.class)
-        println("开始执行Groovy脚本")
-        refreshTokenService.byteDanceRefresh();
+        println("开始执行脚本")
+        sendWeChatHandle.SendWeChatByMail("bijiequan@c-top.com.cn","执行成功")
         println("执行完成")
         return Result.ok("666")
     }
-}
+}

+ 11 - 0
module-check/src/main/java/cn/com/ctop/check/component/basic/AbstractScript.java

@@ -4,6 +4,9 @@ import cn.com.ctop.check.entity.CtopCheckTaskList;
 import cn.com.ctop.notice.handler.SendWeChatHandle;
 import org.springframework.context.ApplicationContext;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
 public abstract class AbstractScript implements BaseScript{
 
     protected ApplicationContext applicationContext;
@@ -12,6 +15,7 @@ public abstract class AbstractScript implements BaseScript{
 
     protected SendWeChatHandle sendWeChatHandle;
 
+    protected String todayDate;
 
     public ApplicationContext getApplicationContext() {
         return applicationContext;
@@ -34,4 +38,11 @@ public abstract class AbstractScript implements BaseScript{
     public void setSendWeChatHandle(SendWeChatHandle sendWeChatHandle) {
         this.sendWeChatHandle = sendWeChatHandle;
     }
+
+
+    public String getTodayDate() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        return format.format(new Date());
+    }
+
 }

+ 11 - 1
module-check/src/main/java/cn/com/ctop/check/component/execute/GroovyScriptExecutor.java

@@ -2,6 +2,7 @@ package cn.com.ctop.check.component.execute;
 
 import cn.com.ctop.check.component.basic.AbstractScript;
 import cn.com.ctop.check.entity.CtopCheckTaskList;
+import cn.com.ctop.check.service.ICtopCheckTaskExecuteLogService;
 import cn.com.ctop.check.service.ICtopCheckTaskListService;
 import cn.com.ctop.notice.handler.SendWeChatHandle;
 import groovy.lang.GroovyClassLoader;
@@ -29,6 +30,8 @@ public class GroovyScriptExecutor {
 
     private final ApplicationContext applicationContext;
 
+    private final ScriptProcessLogExecutor scriptProcessLogExecutor;
+
     private final ICtopCheckTaskListService checkTaskListService;
 
     private final SendWeChatHandle  sendWeChatHandle;
@@ -36,8 +39,10 @@ public class GroovyScriptExecutor {
     private final GroovyClassLoader classLoader;
 
     @Autowired
-    public GroovyScriptExecutor(ApplicationContext applicationContext,ICtopCheckTaskListService checkTaskListService,SendWeChatHandle  sendWeChatHandle) {
+    public GroovyScriptExecutor(ApplicationContext applicationContext,ScriptProcessLogExecutor scriptProcessLogExecutor,
+                                ICtopCheckTaskListService checkTaskListService,SendWeChatHandle  sendWeChatHandle) {
         this.applicationContext=applicationContext;
+        this.scriptProcessLogExecutor=scriptProcessLogExecutor;
         this.checkTaskListService = checkTaskListService;
         this.sendWeChatHandle=sendWeChatHandle;
         this.classLoader = new GroovyClassLoader();
@@ -66,6 +71,7 @@ public class GroovyScriptExecutor {
         GroovyCodeSource groovyCodeSource = getGroovyCodeSource(taskList);
         Result<Object> response = null;
         try {
+            long start=System.currentTimeMillis();
             Class scriptClass = this.classLoader.parseClass(groovyCodeSource);
             Object instance = scriptClass.newInstance();
             if (instance instanceof AbstractScript) {
@@ -75,10 +81,14 @@ public class GroovyScriptExecutor {
                 scriptInstance.setCtopCheckTaskList(taskList);
                 response = scriptInstance.exec();
             } else {
+                scriptProcessLogExecutor.insertLogExecute(taskList,0L,0L,false,false);
                 log.error("script script should extends Abstractscript.");
                 response=Result.error("script script should extends Abstractscript.");
             }
+            long end=System.currentTimeMillis();
+            scriptProcessLogExecutor.insertLogExecute(taskList,start,end);
         } catch (InstantiationException | IllegalAccessException | CompilationFailedException e) {
+            scriptProcessLogExecutor.insertLogExecute(taskList,0L,0L,false,false);
             log.error("Error execute check task script. ", e);
             response=Result.error("Error execute check task script. "+e.getMessage());
         }

+ 60 - 0
module-check/src/main/java/cn/com/ctop/check/component/execute/ScriptProcessLogExecutor.java

@@ -0,0 +1,60 @@
+package cn.com.ctop.check.component.execute;
+
+import cn.com.ctop.check.entity.CtopCheckTaskExecuteLog;
+import cn.com.ctop.check.entity.CtopCheckTaskList;
+import cn.com.ctop.check.service.ICtopCheckTaskExecuteLogService;
+import cn.com.ctop.notice.handler.SendWeChatHandle;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by JQ.bi on 2020.8.18
+ */
+@Component
+public class ScriptProcessLogExecutor {
+
+    private final ICtopCheckTaskExecuteLogService checkTaskExecuteLogService;
+
+    private final SendWeChatHandle sendWeChatHandle;
+
+    @Autowired
+    public ScriptProcessLogExecutor(ICtopCheckTaskExecuteLogService checkTaskExecuteLogService, SendWeChatHandle sendWeChatHandle) {
+        this.checkTaskExecuteLogService = checkTaskExecuteLogService;
+        this.sendWeChatHandle = sendWeChatHandle;
+    }
+
+     void insertLogExecute(CtopCheckTaskList checkTaskList, Long startDate, Long endDate) {
+        boolean save = this.insertLog(checkTaskList.getId(), startDate, endDate, true, true);
+        if (!save) {
+            sendWeChat(checkTaskList.getMail());
+        }
+    }
+
+     void insertLogExecute(CtopCheckTaskList checkTaskList, Long startDate, Long endDate, boolean exeState) {
+        boolean save = this.insertLog(checkTaskList.getId(), startDate, endDate, exeState, true);
+        if (!save) {
+            sendWeChat(checkTaskList.getMail());
+        }
+    }
+
+     void insertLogExecute(CtopCheckTaskList checkTaskList, Long startDate, Long endDate, boolean exeState, boolean notify) {
+        boolean save = this.insertLog(checkTaskList.getId(), startDate, endDate, exeState, notify);
+        if (!save) {
+            sendWeChat(checkTaskList.getMail());
+        }
+    }
+
+    private boolean insertLog(int taskId, Long startDate, Long endDate, boolean exeState, boolean notify) {
+        CtopCheckTaskExecuteLog ctopCheckTaskExecuteLog = new CtopCheckTaskExecuteLog();
+        ctopCheckTaskExecuteLog.setCheckTaskId(taskId);
+        ctopCheckTaskExecuteLog.setStartDate(startDate);
+        ctopCheckTaskExecuteLog.setEndDate(endDate);
+        ctopCheckTaskExecuteLog.setExeResult(exeState);
+        ctopCheckTaskExecuteLog.setNotifyState(notify);
+        return checkTaskExecuteLogService.save(ctopCheckTaskExecuteLog);
+    }
+
+    private void sendWeChat(String mail) {
+        sendWeChatHandle.SendWeChatByMail(mail, "检查数据服务日志处理失败");
+    }
+}

+ 1 - 1
module-check/src/main/java/cn/com/ctop/check/controller/CtopCheckTaskListController.java

@@ -20,7 +20,7 @@ import javax.servlet.http.HttpServletRequest;
 @Slf4j
 @RestController
 @RequestMapping("/ctop/checkTaskList")
-public class CtopCheckTaskListController {
+public class  CtopCheckTaskListController {
 
     @Autowired
     private ICtopCheckTaskListService ctopCheckTaskListService;

+ 0 - 18
module-check/src/main/java/cn/com/ctop/check/script/CheckTokenExecuteStateScript.groovy

@@ -1,18 +0,0 @@
-package cn.com.ctop.check.script
-
-import cn.com.ctop.check.component.basic.AbstractScript
-import cn.com.ctop.common.module.service.ICtopOauthTokenService
-import cn.com.ctop.common.module.service.impl.CtopOauthTokenServiceImpl
-import org.jeecg.common.api.vo.Result
-
-class CheckTokenExecuteStateScript extends AbstractScript{
-
-    private ICtopOauthTokenService ctopOauthTokenService
-
-    @Override
-    Result<Object> exec() {
-        ctopOauthTokenService=applicationContext.getBean(CtopOauthTokenServiceImpl.class)
-
-        return null
-    }
-}

+ 26 - 1
module-check/src/main/java/cn/com/ctop/check/script/TestGroovyScript.java

@@ -2,12 +2,28 @@ package cn.com.ctop.check.script;
 
 import cn.com.ctop.check.component.execute.GroovyScriptExecutor;
 import cn.com.ctop.check.service.ICtopCheckTaskListService;
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.entity.UserAllocation;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.service.IUserAllocationService;
+import cn.com.ctop.kuaishou.modules.report.mapper.AccountReportMapper;
+import cn.com.ctop.toutiao.modules.report.mapper.BytedanceAccountReportMapper;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.checkerframework.checker.units.qual.A;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.SystemDateConstant;
+import org.jeecg.common.util.DateUtils;
 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 java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
 @RestController
 @RequestMapping("/rest/script")
 public class TestGroovyScript {
@@ -16,11 +32,20 @@ public class TestGroovyScript {
     ICtopCheckTaskListService checkTaskListService;
 
     @Autowired
+    ICtopOauthTokenService ctopOauthTokenService;
+
+    @Autowired
     GroovyScriptExecutor groovyScriptExecutor;
+    @Autowired
+    private IUserAllocationService userAllocationService;
+    @Autowired
+    private BytedanceAccountReportMapper byteDanceAccountReportMapper;
+    @Autowired
+    private AccountReportMapper ksAccountReportMapper;
 
     @GetMapping("/test")
     public Result testGroovy(){
-        groovyScriptExecutor.execute(1,"TestGroovy");
+         groovyScriptExecutor.execute(1,"CheckTokenExecuteStateScript");
         return Result.ok();
     }
 }

+ 3 - 5
module-check/src/main/java/cn/com/ctop/notice/handler/SendWeChatHandle.java

@@ -1,7 +1,7 @@
 package cn.com.ctop.notice.handler;
 
 import cn.com.ctop.common.module.mapper.MailLogMapper;
-import cn.com.ctop.common.module.service.ISendMessageService;
+import cn.com.ctop.common.module.utils.CorpWexinUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -12,18 +12,16 @@ public class SendWeChatHandle {
 
     @Autowired
     MailLogMapper mailLogMapper;
-    @Autowired
-    ISendMessageService sendMessageService;
 
     public boolean SendWeChatByMail(String mail,String message){
         boolean result=true;
         String weChatId=mailLogMapper.getWeChatByMail(mail);
         if(weChatId.isEmpty()){
-            log.error("mail's wechat not found. mail =%s", mail);
+            log.error(String.format("mail's WeChat not found. mail =%s", mail));
             //TODO 通知管理员添加邮箱
             result=false;
         }else{
-            sendMessageService.sendMessage(weChatId,message);
+            CorpWexinUtils.sendMessageByWeChatId(weChatId,message);
         }
         return result;
     }

+ 0 - 1
module-common/src/main/java/cn/com/ctop/common/module/utils/CorpWexinUtils.java

@@ -55,7 +55,6 @@ public class CorpWexinUtils {
         if (wxCpService == null) {
             initService();
         }
-
         if (!Check.isNull(weChatId)) {
             WxCpMessage message = new WxCpMessage();
             message.setMsgType("text");

+ 36 - 0
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/CheckDataStateJob.java

@@ -0,0 +1,36 @@
+package cn.com.ctop.job.bytedance.handler;
+
+import cn.com.ctop.check.component.execute.GroovyScriptExecutor;
+import cn.com.ctop.check.entity.CtopCheckTaskList;
+import cn.com.ctop.check.service.ICtopCheckTaskListService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+public class CheckDataStateJob {
+
+    @Autowired
+    private GroovyScriptExecutor groovyScriptExecutor;
+
+    @Autowired
+    private ICtopCheckTaskListService checkTaskListService;
+
+    private final String jobName="checkDataStateJob";
+
+    /**
+     * 检查任务执行结果
+     */
+    @XxlJob(jobName)
+    public ReturnT<String> execute() throws Exception {
+        //查询需要检查的任务列表
+        List<CtopCheckTaskList> ctopCheckTaskList= checkTaskListService.queryExecuteList(jobName);
+        if(!ctopCheckTaskList.isEmpty()){
+            ctopCheckTaskList.forEach(it-> groovyScriptExecutor.execute(it));
+        }
+        return ReturnT.SUCCESS;
+    }
+}

+ 36 - 0
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/CheckExecuteStateJob.java

@@ -0,0 +1,36 @@
+package cn.com.ctop.job.bytedance.handler;
+
+import cn.com.ctop.check.component.execute.GroovyScriptExecutor;
+import cn.com.ctop.check.entity.CtopCheckTaskList;
+import cn.com.ctop.check.service.ICtopCheckTaskListService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+public class CheckExecuteStateJob {
+
+    @Autowired
+    private GroovyScriptExecutor groovyScriptExecutor;
+
+    @Autowired
+    private ICtopCheckTaskListService checkTaskListService;
+
+    private final String jobName="checkExecuteStateJob";
+
+    /**
+     * 检查任务执行结果
+     */
+    @XxlJob(jobName)
+    public ReturnT<String> execute() throws Exception {
+        //查询需要检查的任务列表
+        List<CtopCheckTaskList> ctopCheckTaskList= checkTaskListService.queryExecuteList(jobName);
+        if(!ctopCheckTaskList.isEmpty()){
+            ctopCheckTaskList.forEach(it-> groovyScriptExecutor.execute(it));
+        }
+        return ReturnT.SUCCESS;
+    }
+}

+ 1 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/AccountReportMapper.java

@@ -33,6 +33,7 @@ public interface AccountReportMapper {
      */
     JSONObject selectDayReport(@Param("date") String date, @Param("accountIds") JSONArray accountIds);
 
+    JSONObject selectDayReportByAccount(@Param("date") String date, @Param("accountId") Long accountId);
 
     /**
      * 查询明细

+ 11 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/AccountReportMapper.xml

@@ -262,6 +262,17 @@
         </foreach>
     </select>
 
+    <select id="selectDayReportByAccount" resultType="com.alibaba.fastjson.JSONObject">
+        select
+        sum(charge) cost,
+        sum(photo_show) photoShow,
+        sum(photo_click) photoClick,
+        sum(aclick) aclick
+        from
+        ctop_kuaishou_report_daily_account
+        where stat_date = #{date}
+        and account_id = #{accountId}
+    </select>
 
     <select id="selectByDate" resultType="com.alibaba.fastjson.JSONObject">
         select

+ 2 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/BytedanceAccountReportMapper.java

@@ -12,6 +12,8 @@ public interface BytedanceAccountReportMapper {
     //今日汇总数据
     JSONObject queryTodaySumReportBy(@Param("statDate") String statDate,@Param("accountIds")  JSONArray accountIds);
 
+    JSONObject queryTodayReportByAccount(@Param("statDate") String statDate,@Param("accountId")  Long accountId);
+
     //根据小时区间查询今日汇总数据
     List<JSONObject> queryTodaySumByHourGroupAccount(@Param("filed") String filed,@Param("statDate") String statDate,@Param("hour") int hour,@Param("accountIds") JSONArray accountIds, String target, String order);
 

+ 13 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/BytedanceAccountReportMapper.xml

@@ -20,6 +20,19 @@
         </foreach>
     </select>
 
+    <select id="queryTodayReportByAccount" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        ROUND(sum(cost),2) cost,
+        sum(show_num) showNum,
+        sum(click) click,
+        sum(convert_num) as convertNum
+        FROM
+        ctop_bytedance_report_advertiser_daily
+        WHERE
+        stat_datetime = #{statDate} '00:00:00'
+        AND advertiser_id= #{accountId}
+    </select>
+
     <select id="queryTodaySumByHourGroupAccount" resultType="com.alibaba.fastjson.JSONObject">
         SELECT
           t2.account_id as accountId,

+ 22 - 4
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/BytedanceAccountReportServiceImpl.java

@@ -35,6 +35,8 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
     @Autowired
     BytedanceAccountReportMapper bytedanceAccountReportMapper;
 
+    private static final BigDecimal zero=BigDecimal.ZERO;
+
     @Override
     public Map<String, Object> getSumDataBy(String mediaId, BigDecimal discount, JSONArray accounts, String startDate, String endDate) {
         Map<String, Object> result = new HashMap<>();
@@ -47,7 +49,7 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
             }
             before = bytedanceAccountReportMapper.queryTodaySumByHour(DateUtils.getAnotherDay(SystemDateConstant.yyyy_MM_dd, startDate, -1), after.getInteger("maxHour"), accounts);
             if(before==null){
-                return result;
+                before = after;
             }
         } else {
             after = bytedanceAccountReportMapper.querySumByStartEndDate(endDate, startDate, accounts);
@@ -67,9 +69,12 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
         if (startDate.equals(endDate)) {
             List<JSONObject> after = bytedanceAccountReportMapper.queryTodayDetailReportBy(filedAll, startDate, accounts);
             List<JSONObject> before = bytedanceAccountReportMapper.queryTodayDetailReportBy(filedAll, DateUtils.getAnotherDay(SystemDateConstant.yyyy_MM_dd, startDate, -1), accounts);
-            if(after==null||before==null){
+            if(after.size()==0){
                 return result;
             }
+            if(before.size()==0){
+                before=nullDataHandle();
+            }
             List<JSONObject> afterDis = this.countDiscountCost(mediaId, discount, after);
             List<JSONObject> beforeDis = this.countDiscountCost(mediaId, discount, before);
             result = LinkUtils.getCompareDate(beforeDis, afterDis, "statHour");
@@ -182,7 +187,7 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
             if (k.equals("accountId") || k.equals("authName") || v.toString().contains("%")) {
                 jsonObject.put(k, "-");
             } else {
-                jsonObject.put(k, LinkUtils.countLink(after.getBigDecimal(k), before.getBigDecimal(k)));
+                jsonObject.put(k, LinkUtils.countLink(after.getBigDecimal(k)==null?zero:after.getBigDecimal(k), before.getBigDecimal(k)==null?zero:before.getBigDecimal(k)));
             }
         });
         return jsonObject;
@@ -241,5 +246,18 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
         return new PageInfo<>(bytedanceAccountReportMapper.getBytedanceAccountInfoByProjectId(startDate,endDate,projectId,accountIds,yn));
     }
 
-
+    private List<JSONObject> nullDataHandle(){
+        List<JSONObject> objectList= new ArrayList<>();
+        JSONObject jsonObject=null;
+        for(int i=0;i<24;i++){
+            jsonObject=new JSONObject();
+            jsonObject.put("cost",0);
+            jsonObject.put("showNum",0);
+            jsonObject.put("click",0);
+            jsonObject.put("convertNum",0);
+            jsonObject.put("statHour",i);
+            objectList.add(jsonObject);
+        }
+        return objectList;
+    }
 }

+ 5 - 7
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/controller/ByteDanceQueryToolController.java

@@ -64,21 +64,19 @@ public class ByteDanceQueryToolController {
                             Map<String,Object> actionMap=new HashMap<>();
                             if(((JSONObject)action).get("convert_id")==null){
                                 actionMap.put("convertId",getConvertIdByExternalAction(((JSONObject)action).getString("external_action")));
-
                             }else {
                                 actionMap.put("convertId",(((JSONObject)action).get("convert_id")));
                             }
+                            if(((JSONObject)action).get("deep_external_actions")!=null){
+                                actionMap.put("deep_external_action",((JSONObject)((JSONObject)action).getJSONArray("deep_external_actions").get(0)).getString("deep_external_action"));
+                            }else{
+                                actionMap.put("deep_external_action",null);
+                            }
                             actionMap.put("external_name",((JSONObject)action).get("external_name"));
                             actionList.add(actionMap);
                         });
                         temp.put("external_actions",actionList);
                     }
-                    //处理深度出价
-                    if(jsonObject.getJSONObject("deep_external_actions")==null){
-                        temp.put("deep_external_action",null);
-                    }else {
-                        temp.put("deep_external_action",jsonObject.getJSONObject("deep_external_actions").getString("deep_external_action"));
-                    }
                     resultList.add(temp);
                 }
                 resultMap.put("data",resultList);