From 484f0d1017906469f15d1c74921142332139ede1 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Mon, 26 Jun 2023 15:12:10 +0800
Subject: [PATCH] 智能外呼统计调整,新增连续三天,两天未接通,当前时间拒绝统计及相关详情查询导出
---
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java | 195 ++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 170 insertions(+), 25 deletions(-)
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
index 8f874f4..efcc550 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
+++ b/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);
+ }
}
--
Gitblit v1.9.3