智能外呼统计调整,新增连续三天,两天未接通,当前时间拒绝统计及相关详情查询导出
7 files modified
1 files added
423 ■■■■ changed files
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/config/MyThreadPoolConfig.java 28 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/vo/CallTaskResultVO.java 6 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/vo/CallTaskStatistic.java 30 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java 12 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.java 27 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.xml 117 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java 195 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/config/MyThreadPoolConfig.java
New file
@@ -0,0 +1,28 @@
package cn.gistack.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
 * 自定义线程池
 * @author zhongrj
 */
@Configuration
public class MyThreadPoolConfig {
    @Bean
    public ThreadPoolExecutor threadPoolExecutor() {
        return new ThreadPoolExecutor(
                6,
                12,
                60,
                TimeUnit.SECONDS,
                new LinkedBlockingDeque<>(10000),
                new ThreadPoolExecutor.AbortPolicy()
        );
    }
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/vo/CallTaskResultVO.java
@@ -1,6 +1,5 @@
package cn.gistack.sm.intelligentCall.vo;
import cn.gistack.sm.intelligentCall.entity.CallTask;
import cn.gistack.sm.intelligentCall.entity.CallTaskResult;
import lombok.Data;
@@ -113,4 +112,9 @@
     */
    private String isSmsFill;
    /**
     * 是否分页
     */
    private Integer isPage;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/vo/CallTaskStatistic.java
@@ -120,6 +120,11 @@
    private Integer grad;
    /**
     * 数量
     */
    private Integer count;
    /**
     * 连续三天未接通数量
     */
    private Integer threeNoConnectCount;
@@ -133,4 +138,29 @@
     * 前一天拒接的数量
     */
    private Integer refuseConnectCount;
    /**
     * 水库名称
     */
    private String waterName;
    /**
     * 姓名
     */
    private String realName;
    /**
     * 呼叫结果状态
     */
    private String resultStatus;
    /**
     * 排序字段名称
     */
    private String sortName;
    /**
     * 排序(升序,降序)
     */
    private String sortOrder;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java
@@ -119,4 +119,16 @@
        // 返回
        return R.data(callService.createCallTaskByParam(params));
    }
    /**
     * 查询未接通,拒接的呼叫结果详情列表信息
     * @param callTaskStatistic
     * @param query
     * @return
     */
    @GetMapping("/getCallNotConnectResultList")
    public R getCallNotConnectResultList(CallTaskStatistic callTaskStatistic, Query query){
        // 返回
        return R.data(callService.getCallNotConnectResultList(Condition.getPage(query),callTaskStatistic));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.java
@@ -128,17 +128,28 @@
    /**
     *  查询 按区域统计连续三天,连续两天未接通,前一天拒接对应的数量
     * @param callTaskStatistic
     * @param list
     * @param threeDay
     * @param twoDay
     * @param oneDay
     * @param resultStatus
     * @param number
     * @param day
     * @return
     */
    @DS("zt")
    @InterceptorIgnore(tenantLine = "true")
    List<CallTaskStatistic> getNotCallConnectStatisticList(@Param("callTaskStatistic") CallTaskStatistic callTaskStatistic,
                                                           @Param("list") List<String> list,
                                                           @Param("threeDay") Map<String, Object> threeDay,
                                                           @Param("twoDay") Map<String, Object> twoDay,
                                                           @Param("oneDay") Map<String, Object> oneDay);
                                                           @Param("resultStatus") String resultStatus,
                                                           @Param("number") Integer number,
                                                           @Param("day") Map<String, Object> day);
    /**
     * 查询未接通,拒接的呼叫结果详情列表信息
     * @param page
     * @param list
     * @param callTaskStatistic
     * @param day
     * @return
     */
    List<CallTaskStatistic> getCallNotConnectResultList(@Param("page") IPage<CallTaskStatistic> page,
                                                        @Param("list") List<String> list,
                                                        @Param("callTaskStatistic") CallTaskStatistic callTaskStatistic,
                                                        @Param("day") Map<String, Object> day);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.xml
@@ -362,17 +362,16 @@
                    where date_format(gmt_create,'%Y-%m-%d') >= #{params.startTime}
                    and date_format(gmt_create,'%Y-%m-%d') &lt; #{params.endTime}
                ) ctr on ctc.call_id = ctr.call_id
                and ctc.call_status = 4 and ctr.call_result!='200000' GROUP BY ctc.callee_number,ctr.gmt_create
            )a  GROUP BY callee_number
        )b where num=3
    </select>
    <!--查询三天都未接通的人员-mysql-->
    <!--查询n天都未接通的人员-->
    <select id="getNotCallConnectStatisticList" resultType="cn.gistack.sm.intelligentCall.vo.CallTaskStatistic">
        select  aab."guid",
        sum(case when ifnull(cc.num,0)='0' then 0 else 1 end) refuseConnectCount,
        sum(case when ifnull(bb.num,0)='0' then 0 else 1 end) twoNoConnectCount,
        sum(case when ifnull(aa.num,0)='0' then 0 else 1 end) threeNoConnectCount,
        sum(case when ifnull(aa.num,9)='9' then 0 else 1 end) count,
        aab."ad_name" as adName
        from SJZT_MD."att_ad_base" aab
        left join (
@@ -381,86 +380,62 @@
                    select  ctr."callee_number",WM_Concat(ctc.waterCode) waterCodes from (
                        select "call_id","task_id",JSON_VALUE("call_task_callee_content",'$."$水库编码$"') as waterCode from "SJZT_ODS"."call_task_callee"
                    ) ctc join (
                    select "call_id","callee_number","call_result",date_format("gmt_create",'%Y-%m-%d') "gmt_create" from SJZT_ODS."call_task_result"
                    where date_format("gmt_create",'%Y-%m-%d') >= #{threeDay.startTime} and date_format("gmt_create",'%Y-%m-%d') &lt;= #{threeDay.endTime}
                    and "call_result"='200003'
                    select ctr."call_id",ctr."callee_number",ctr."call_result",date_format(ctr."gmt_create",'%Y-%m-%d') "gmt_create" from SJZT_ODS."call_task_result" ctr
                    left join "YWXT".sm_call_not_fill_record scnfr on scnfr.call_id = ctr."call_id"
                    where date_format(ctr."gmt_create",'%Y-%m-%d') >= #{day.startTime} and date_format(ctr."gmt_create",'%Y-%m-%d') &lt;= #{day.endTime}
                    and ctr."call_result"= #{resultStatus} and scnfr.id is null
                    )ctr on ctc."call_id" = ctr."call_id" group by ctr."callee_number"
                ) a where LENGTH(waterCodes)- LENGTH(REPLACE(waterCodes,',',''))>1
                ) a where LENGTH(waterCodes)- LENGTH(REPLACE(waterCodes,',','')) = #{number}
            )b
            left join "SJZT_MD"."att_res_base" arb on locate(arb."code",b.waterCodes)>0
            left join "SJZT_MD"."att_ad_base" aab on aab."guid" = concat(arb."ad_guid",'000000')
            left join "SJZT_MD"."att_ad_base" aab on aab."guid" = concat(arb."ad_guid",'000000') or aab."guid" = arb."interior_ad_guid"
            where aab."ad_name" is not null
        ) aa
        <if test="callTaskStatistic.grad==1">
            on aab."guid" = aa."p_ad_code"
            on aab."guid" = aa."p_ad_code" where aab."p_ad_code" = #{callTaskStatistic.adCode}
        </if>
        <if test="callTaskStatistic.grad==2">
            on aab."guid" = aa."guid"
            on aab."guid" = aa."guid" where aab."p_ad_code" = #{callTaskStatistic.adCode}
        </if>
        <if test="callTaskStatistic.grad==3">
            on aab."guid" = aa."guid"
        </if>
        left join (
            select b.*,aab."guid",aab."ad_grad",aab."p_ad_code",aab."ad_name" as adName from (
                select "callee_number",waterCodes,LENGTH(waterCodes)- LENGTH(REPLACE(waterCodes,',','')) num from (
                    select  ctr."callee_number",WM_Concat(ctc.waterCode) waterCodes from (
                    select "call_id","task_id",JSON_VALUE("call_task_callee_content",'$."$水库编码$"') as waterCode from "SJZT_ODS"."call_task_callee"
                    ) ctc join (
                    select "call_id","callee_number","call_result",date_format("gmt_create",'%Y-%m-%d') "gmt_create" from SJZT_ODS."call_task_result"
                    where date_format("gmt_create",'%Y-%m-%d') >= #{twoDay.startTime} and date_format("gmt_create",'%Y-%m-%d') &lt;= #{twoDay.endTime}
                    and "call_result"='200003'
                    )ctr on ctc."call_id" = ctr."call_id" group by ctr."callee_number"
                ) a where LENGTH(waterCodes)- LENGTH(REPLACE(waterCodes,',',''))=1
            )b
            left join "SJZT_MD"."att_res_base" arb on locate(arb."code",b.waterCodes)>0
            left join "SJZT_MD"."att_ad_base" aab on aab."guid" = concat(arb."ad_guid",'000000')
            where aab."ad_name" is not null
        ) bb
        <if test="callTaskStatistic.grad==1">
            on aab."guid" = bb."p_ad_code"
        </if>
        <if test="callTaskStatistic.grad==2">
            on aab."guid" = bb."guid"
        </if>
        <if test="callTaskStatistic.grad==3">
            on aab."guid" = bb."guid"
        </if>
        left join (
            select b.*,aab."guid",aab."ad_grad",aab."p_ad_code",aab."ad_name" as adName from (
                select "callee_number",waterCodes,LENGTH(waterCodes)- LENGTH(REPLACE(waterCodes,',','')) num from (
                    select  ctr."callee_number",WM_Concat(ctc.waterCode) waterCodes from (
                    select "call_id","task_id",JSON_VALUE("call_task_callee_content",'$."$水库编码$"') as waterCode from "SJZT_ODS"."call_task_callee"
                    ) ctc join (
                    select "call_id","callee_number","call_result",date_format("gmt_create",'%Y-%m-%d') "gmt_create" from SJZT_ODS."call_task_result"
                    where date_format("gmt_create",'%Y-%m-%d') >= #{oneDay.startTime} and date_format("gmt_create",'%Y-%m-%d') &lt;= #{oneDay.endTime}
                    and "call_result"='200005'
                    )ctr on ctc."call_id" = ctr."call_id" group by ctr."callee_number"
                ) a where 1=1
            )b
            left join "SJZT_MD"."att_res_base" arb on locate(arb."code",b.waterCodes)>0
            left join "SJZT_MD"."att_ad_base" aab on aab."guid" = concat(arb."ad_guid",'000000')
            where aab."ad_name" is not null
        ) cc
        <if test="callTaskStatistic.grad==1">
            on aab."guid" = cc."p_ad_code"
        </if>
        <if test="callTaskStatistic.grad==2">
            on aab."guid" = cc."guid"
        </if>
        <if test="callTaskStatistic.grad==3">
            on aab."guid" = cc."guid"
        </if>
        <if test="callTaskStatistic.grad==1">
            where aab."p_ad_code" = #{callTaskStatistic.adCode}
        </if>
        <if test="callTaskStatistic.grad==2">
            where aab."p_ad_code" = #{callTaskStatistic.adCode}
        </if>
        <if test="callTaskStatistic.grad==3">
            where aab."ad_code" = #{callTaskStatistic.adCode}
            on aab."guid" = aa."guid" where aab."ad_code" = #{callTaskStatistic.adCode}
        </if>
        group by aab."ad_name",aab."guid"
        order by aab."guid"
    </select>
    <!--查询未接通,拒接的呼叫结果详情列表信息-->
    <select id="getCallNotConnectResultList" resultType="cn.gistack.sm.intelligentCall.vo.CallTaskStatistic">
        select b.*,aab."guid",aab."ad_grad",aab."p_ad_code",aab."ad_name" as adName,bu.real_name as realName,arb."name" as waterName
        from (
        select "callee_number",waterCodes,LENGTH(waterCodes)- LENGTH(REPLACE(waterCodes,',','')) num from (
        select  ctr."callee_number",WM_Concat(ctc.waterCode) waterCodes from (
        select "call_id","task_id",JSON_VALUE("call_task_callee_content",'$."$水库编码$"') as waterCode from "SJZT_ODS"."call_task_callee"
        ) ctc join (
                        select ctr."call_id",ctr."callee_number",ctr."call_result",date_format(ctr."gmt_create",'%Y-%m-%d') "gmt_create" from SJZT_ODS."call_task_result" ctr
                        left join "YWXT".sm_call_not_fill_record scnfr on scnfr.call_id = ctr."call_id"
                        where date_format(ctr."gmt_create",'%Y-%m-%d') >= #{day.startTime} and date_format(ctr."gmt_create",'%Y-%m-%d') &lt;= #{day.endTime}
                        and ctr."call_result"= #{callTaskStatistic.resultStatus} and scnfr.id is null
                    )ctr on ctc."call_id" = ctr."call_id" group by ctr."callee_number"
            ) a where LENGTH(waterCodes)- LENGTH(REPLACE(waterCodes,',','')) = #{callTaskStatistic.count}
        )b
        left join "SJZT_MD"."att_res_base" arb on locate(arb."code",b.waterCodes)>0
        left join "SJZT_MD"."att_ad_base" aab on aab."guid" = arb."interior_ad_guid"
        left join "YWXT".blade_user bu on bu.phone = b."callee_number" and bu.is_deleted = 0
        where aab."ad_name" is not null
        <if test="list != null and list.size()>0">
            and aab."ad_code" in
            <foreach collection="list" item="adCode" separator ="," open="("  close=")">
                #{adCode}
            </foreach>
        </if>
        <if test="callTaskStatistic.realName!=null and callTaskStatistic.realName!=''">
            and bu.real_name like concat('%',#{callTaskStatistic.realName},'%')
        </if>
        <if test="callTaskStatistic.waterName!=null and callTaskStatistic.waterName!=''">
            and arb."name" like concat('%',#{callTaskStatistic.waterName},'%')
        </if>
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java
@@ -77,4 +77,12 @@
     * @return
     */
    List<String> createOutCallTaskByNotConnectJobHandler(Map<String, Object> map);
    /**
     * 查询未接通,拒接的呼叫结果详情列表信息
     * @param callTaskStatistic
     * @param page
     * @return
     */
    Object getCallNotConnectResultList(IPage<CallTaskStatistic> page,CallTaskStatistic callTaskStatistic);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
@@ -1,5 +1,6 @@
package cn.gistack.sm.intelligentCall.service.impl;
import cn.gistack.common.config.MyThreadPoolConfig;
import cn.gistack.sm.intelligentCall.constant.CallConstant;
import cn.gistack.sm.intelligentCall.constant.ZtConstant;
import cn.gistack.sm.intelligentCall.entity.Scene;
@@ -14,6 +15,7 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
@@ -27,6 +29,9 @@
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.stream.Collectors;
@Slf4j
@@ -56,6 +61,9 @@
//    @Value("${dial.task.callingNumbers}")
    private String callingNumbers = CallConstant.callingNumbers;
    @Autowired
    private MyThreadPoolConfig myThreadPoolConfig;
    private static final String CONTENT_TYPE = "application/json; charset=UTF-8";
    private static final String ACCEPT_TYPE = "application/json";
@@ -278,39 +286,152 @@
            // 设置当前时间的前一天
            callTaskStatistic.setCreateTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date(l - 60*60*24*1000)));
        }
        List<String> list = new ArrayList<>();
        if (null!= callTaskStatistic.getAdName() && !callTaskStatistic.getAdName().equals("")){
            // 查询所有下级区域code
            list = getAllChildrenAreaByAreaCode(callTaskStatistic.getAdName());
        }
        // 勾选导出行政区 id 组装
        if (null!= callTaskStatistic.getIds() && !callTaskStatistic.getIds().equals("")){
            list = Arrays.asList(callTaskStatistic.getIds().split(","));
        }
        // 判断是否分页
        if (null!= callTaskStatistic.getIsPage()){
            return callTaskMapper.getOutgoingStatisticList(null,callTaskStatistic,list);
        }
        // 按天查询数据
        List<CallTaskStatistic> outgoingStatisticList = callTaskMapper.getOutgoingStatisticList(page, callTaskStatistic, list);
        ThreadPoolExecutor executor = myThreadPoolConfig.threadPoolExecutor();
        // 异步查询统计数据
        CompletableFuture<List<CallTaskStatistic>> callTaskStatisticCompletableFuture = getListCompletableFuture(page, callTaskStatistic, executor);
        // 查询 按区域统计连续三天,连续两天未接通,前一天拒接对应的数量
        Map<String, Object> threeDay = computationTime(callTaskStatistic.getCreateTime(), 2);
        Map<String, Object> twoDay = computationTime(callTaskStatistic.getCreateTime(), 1);
        Map<String, Object> oneDay = computationTime(callTaskStatistic.getCreateTime(), 0);
        // 查询
        List<CallTaskStatistic> notCallConnectStatisticList = callTaskMapper.getNotCallConnectStatisticList(callTaskStatistic,list,threeDay,twoDay,oneDay);
        // 遍历
        for (CallTaskStatistic taskStatistic : outgoingStatisticList) {
            for (CallTaskStatistic statistic : notCallConnectStatisticList) {
                if (taskStatistic.getGuid().equals(statistic.getGuid())){
                    taskStatistic.setThreeNoConnectCount(statistic.getThreeNoConnectCount());
                    taskStatistic.setTwoNoConnectCount(statistic.getTwoNoConnectCount());
                    taskStatistic.setRefuseConnectCount(statistic.getRefuseConnectCount());
        CompletableFuture<List<CallTaskStatistic>> threeDayNotCallConnect = getListCompletableFuture(callTaskStatistic, executor, threeDay, "200003", 2);
        CompletableFuture<List<CallTaskStatistic>> twoDayNotCallConnect = getListCompletableFuture(callTaskStatistic, executor, twoDay, "200003", 1);
        CompletableFuture<List<CallTaskStatistic>> oneDayNotCallConnect = getListCompletableFuture(callTaskStatistic, executor, oneDay, "200005", 0);
        //等待所有任务执行完成
        try {
            CompletableFuture.allOf(callTaskStatisticCompletableFuture,threeDayNotCallConnect,twoDayNotCallConnect,oneDayNotCallConnect).get();
            // 数据处理
            List<CallTaskStatistic> callTaskStatistics = getCallTaskStatistics(callTaskStatisticCompletableFuture, oneDay, threeDayNotCallConnect, twoDayNotCallConnect, oneDayNotCallConnect);
            // 排序
            callTaskStatistics = getCallTaskStatisticsByOrder(callTaskStatistic, callTaskStatistics);
            // 返回数据
            if (null!= callTaskStatistic.getIsPage()) {
                return callTaskStatistics;
            }else {
                return page.setRecords(callTaskStatistics);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        // 返回
        return null;
    }
    /**
     * 排序
     * @param callTaskStatistic
     * @param callTaskStatistics
     * @return
     */
    private List<CallTaskStatistic> getCallTaskStatisticsByOrder(CallTaskStatistic callTaskStatistic, List<CallTaskStatistic> callTaskStatistics) {
        // 排序
        if (null != callTaskStatistic.getSortName() && !callTaskStatistic.getSortName().equals("")) {
            if (callTaskStatistic.getSortName().equals("refuseConnectCount")) {
                if (callTaskStatistic.getSortOrder().equals("desc")) {
                    callTaskStatistics = callTaskStatistics.stream().sorted(Comparator.comparing(CallTaskStatistic::getRefuseConnectCount).reversed()).collect(Collectors.toList());
                }else {
                    callTaskStatistics = callTaskStatistics.stream().sorted(Comparator.comparing(CallTaskStatistic::getRefuseConnectCount)).collect(Collectors.toList());
                }
            }
            if (callTaskStatistic.getSortName().equals("twoNoConnectCount")) {
                if (callTaskStatistic.getSortOrder().equals("desc")) {
                    callTaskStatistics = callTaskStatistics.stream().sorted(Comparator.comparing(CallTaskStatistic::getTwoNoConnectCount).reversed()).collect(Collectors.toList());
                }else {
                    callTaskStatistics = callTaskStatistics.stream().sorted(Comparator.comparing(CallTaskStatistic::getTwoNoConnectCount)).collect(Collectors.toList());
                }
            }
            if (callTaskStatistic.getSortName().equals("threeNoConnectCount")) {
                if (callTaskStatistic.getSortOrder().equals("desc")) {
                    callTaskStatistics = callTaskStatistics.stream().sorted(Comparator.comparing(CallTaskStatistic::getThreeNoConnectCount).reversed()).collect(Collectors.toList());
                }else {
                    callTaskStatistics = callTaskStatistics.stream().sorted(Comparator.comparing(CallTaskStatistic::getThreeNoConnectCount)).collect(Collectors.toList());
                }
            }
        }
        // 返回
        return page.setRecords(outgoingStatisticList);
        return callTaskStatistics;
    }
    /**
     * 按行政区查询对应的接通率
     * @param page
     * @param callTaskStatistic
     * @param executor
     * @return
     */
    @NotNull
    private CompletableFuture<List<CallTaskStatistic>> getListCompletableFuture(IPage<CallTaskStatistic> page, CallTaskStatistic callTaskStatistic, ThreadPoolExecutor executor) {
        return CompletableFuture.supplyAsync(()->{
                List<CallTaskStatistic> outgoingStatisticList = new ArrayList<>();
                // 判断是否分页
                if (null!= callTaskStatistic.getIsPage()){
                    outgoingStatisticList = callTaskMapper.getOutgoingStatisticList(null,callTaskStatistic,null);
                }else {
                    // 按天查询数据
                    outgoingStatisticList = callTaskMapper.getOutgoingStatisticList(page, callTaskStatistic, null);
                }
                return outgoingStatisticList;
            },executor);
    }
    /**
     * 数据处理
     * @param callTaskStatisticCompletableFuture
     * @param oneDay
     * @param threeDayNotCallConnect
     * @param twoDayNotCallConnect
     * @param oneDayNotCallConnect
     * @return
     * @throws InterruptedException
     * @throws ExecutionException
     */
    @NotNull
    private List<CallTaskStatistic> getCallTaskStatistics(CompletableFuture<List<CallTaskStatistic>> callTaskStatisticCompletableFuture, Map<String, Object> oneDay, CompletableFuture<List<CallTaskStatistic>> threeDayNotCallConnect, CompletableFuture<List<CallTaskStatistic>> twoDayNotCallConnect, CompletableFuture<List<CallTaskStatistic>> oneDayNotCallConnect) throws InterruptedException, ExecutionException {
        // 获取信息
        List<CallTaskStatistic> callTaskStatistics = callTaskStatisticCompletableFuture.get();
        List<CallTaskStatistic> threeNotConnectTaskStatisticsList = threeDayNotCallConnect.get();
        List<CallTaskStatistic> twoNotConnectTaskStatisticsList = twoDayNotCallConnect.get();
        List<CallTaskStatistic> oneNotConnectTaskStatisticsList = oneDayNotCallConnect.get();
        // 遍历
        for (CallTaskStatistic taskStatistic : callTaskStatistics) {
            taskStatistic.setCreateTime(oneDay.get("endTime").toString());
            for (CallTaskStatistic statistic : threeNotConnectTaskStatisticsList) {
                if (taskStatistic.getGuid().equals(statistic.getGuid())){
                    taskStatistic.setThreeNoConnectCount(statistic.getCount());
                }
            }
            for (CallTaskStatistic statistic : twoNotConnectTaskStatisticsList) {
                if (taskStatistic.getGuid().equals(statistic.getGuid())){
                    taskStatistic.setTwoNoConnectCount(statistic.getCount());
                }
            }
            for (CallTaskStatistic statistic : oneNotConnectTaskStatisticsList) {
                if (taskStatistic.getGuid().equals(statistic.getGuid())){
                    taskStatistic.setRefuseConnectCount(statistic.getCount());
                }
            }
        }
        return callTaskStatistics;
    }
    /**
     * 按行政区查询未接通/拒接统计数据
     * @param callTaskStatistic
     * @param executor
     * @param threeDay 日期
     * @param s  状态
     * @param i  数量
     * @return
     */
    @NotNull
    private CompletableFuture<List<CallTaskStatistic>> getListCompletableFuture(CallTaskStatistic callTaskStatistic, ThreadPoolExecutor executor, Map<String, Object> threeDay, String s, int i) {
        return CompletableFuture.supplyAsync(() -> {
            // 按天查询数据,区域统计
            List<CallTaskStatistic> threeDayNotCallConnectStatisticList
                = callTaskMapper.getNotCallConnectStatisticList(callTaskStatistic, s, i, threeDay);
            return threeDayNotCallConnectStatisticList;
        }, executor);
    }
    /**
@@ -610,4 +731,28 @@
        }
        return null;
    }
    /**
     * 查询未接通,拒接的呼叫结果详情列表信息
     * @param page
     * @param callTaskStatistic
     * @return
     */
    @Override
    public Object getCallNotConnectResultList(IPage<CallTaskStatistic> page,CallTaskStatistic callTaskStatistic) {
        // 计算时间
        Map<String, Object> map = computationTime(callTaskStatistic.getCreateTime(), callTaskStatistic.getCount());
        List<String> list = new ArrayList<>();
        if (null!= callTaskStatistic.getAdCode() && !callTaskStatistic.getAdCode().equals("")){
            // 查询所有下级区域code
            list = getAllChildrenAreaByAreaCode(callTaskStatistic.getAdCode());
        }
        if (null!=callTaskStatistic.getIsPage()){
            // 不分页
            return callTaskMapper.getCallNotConnectResultList(null, list,callTaskStatistic,map);
        }
        List<CallTaskStatistic> callNotConnectResultList = callTaskMapper.getCallNotConnectResultList(page,list, callTaskStatistic,map);
        // 返回
        return page.setRecords(callNotConnectResultList);
    }
}