智能外呼统计调整,新增连续三天,两天未接通,当前时间拒绝统计及相关详情查询导出
7 files modified
1 files added
| New file |
| | |
| | | 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() |
| | | ); |
| | | } |
| | | } |
| | |
| | | package cn.gistack.sm.intelligentCall.vo; |
| | | |
| | | import cn.gistack.sm.intelligentCall.entity.CallTask; |
| | | import cn.gistack.sm.intelligentCall.entity.CallTaskResult; |
| | | import lombok.Data; |
| | | |
| | |
| | | */ |
| | | private String isSmsFill; |
| | | |
| | | /** |
| | | * 是否分页 |
| | | */ |
| | | private Integer isPage; |
| | | |
| | | } |
| | |
| | | private Integer grad; |
| | | |
| | | /** |
| | | * 数量 |
| | | */ |
| | | private Integer count; |
| | | |
| | | /** |
| | | * 连续三天未接通数量 |
| | | */ |
| | | private Integer threeNoConnectCount; |
| | |
| | | * 前一天拒接的数量 |
| | | */ |
| | | private Integer refuseConnectCount; |
| | | |
| | | /** |
| | | * 水库名称 |
| | | */ |
| | | private String waterName; |
| | | |
| | | /** |
| | | * 姓名 |
| | | */ |
| | | private String realName; |
| | | |
| | | /** |
| | | * 呼叫结果状态 |
| | | */ |
| | | private String resultStatus; |
| | | |
| | | /** |
| | | * 排序字段名称 |
| | | */ |
| | | private String sortName; |
| | | |
| | | /** |
| | | * 排序(升序,降序) |
| | | */ |
| | | private String sortOrder; |
| | | } |
| | |
| | | // 返回 |
| | | 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)); |
| | | } |
| | | } |
| | |
| | | /** |
| | | * 查询 按区域统计连续三天,连续两天未接通,前一天拒接对应的数量 |
| | | * @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); |
| | | } |
| | |
| | | where date_format(gmt_create,'%Y-%m-%d') >= #{params.startTime} |
| | | and date_format(gmt_create,'%Y-%m-%d') < #{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 ( |
| | |
| | | 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') <= #{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') <= #{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') <= #{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') <= #{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') <= #{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> |
| | |
| | | * @return |
| | | */ |
| | | List<String> createOutCallTaskByNotConnectJobHandler(Map<String, Object> map); |
| | | |
| | | /** |
| | | * 查询未接通,拒接的呼叫结果详情列表信息 |
| | | * @param callTaskStatistic |
| | | * @param page |
| | | * @return |
| | | */ |
| | | Object getCallNotConnectResultList(IPage<CallTaskStatistic> page,CallTaskStatistic callTaskStatistic); |
| | | } |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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 |
| | |
| | | |
| | | // @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"; |
| | |
| | | // 设置当前时间的前一天 |
| | | 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); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | 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); |
| | | } |
| | | } |