From 3ce737b52fca082ac3a2ecda4a848e2e4abcd0ee Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Thu, 06 Jul 2023 09:38:18 +0800
Subject: [PATCH] Merge branch 'jtdev' of https://hbsl-code.gistack.cn/hbwri/manager into jtdev

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java |  159 ++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 133 insertions(+), 26 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 e1c07d0..8a6d156 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
@@ -54,6 +54,9 @@
 	@Autowired
 	private BladeRedis bladeRedis;
 
+	@Autowired
+	private AsyncCallService asyncCallService;
+
 //	@Value("${dial.task.url}")
 	private String url = CallConstant.HOST;
 
@@ -283,6 +286,56 @@
 		return resultListPage;
 	}
 
+//	/**
+//	 * 查询智能外呼统计数据-按日期-行政区统计
+//	 * @param page
+//	 * @param callTaskStatistic
+//	 * @return
+//	 */
+//	@Override
+//	public Object getOutgoingStatisticList(IPage<CallTaskStatistic> page,CallTaskStatistic callTaskStatistic) {
+//		if (null==callTaskStatistic.getCreateTime() || callTaskStatistic.getCreateTime().equals("")){
+//			long l = System.currentTimeMillis();
+//			// 设置当前时间的前一天
+//			callTaskStatistic.setCreateTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date(l - 60*60*24*1000)));
+//		}
+//		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);
+//		// 查询
+//		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);
+//			// 取当前行政区总数据
+//			List<CallTaskStatistic> totalList = getTotalCallTaskStatistics(callTaskStatistics,callTaskStatistic);
+//			// 排序
+//			callTaskStatistics = getCallTaskStatisticsByOrder(callTaskStatistic, callTaskStatistics);
+//			// 合并数据
+//			totalList.addAll(callTaskStatistics);
+//			// 返回数据
+//			if (null!= callTaskStatistic.getIsPage()) {
+//				return totalList;
+//			}else {
+//				return page.setRecords(totalList);
+//			}
+//		} catch (InterruptedException e) {
+//			e.printStackTrace();
+//		} catch (ExecutionException e) {
+//			e.printStackTrace();
+//		}
+//		// 返回
+//		return null;
+//	}
+
 	/**
 	 * 查询智能外呼统计数据-按日期-行政区统计
 	 * @param page
@@ -297,21 +350,15 @@
 			callTaskStatistic.setCreateTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date(l - 60*60*24*1000)));
 		}
 		ThreadPoolExecutor executor = myThreadPoolConfig.threadPoolExecutor();
-		// 异步查询统计数据
+		// 异步查询当前天日常呼叫(3次)统计数据
 		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);
-		// 查询
-		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);
+		// 查询当前天除去日常呼叫外的统计数据
+		CompletableFuture<List<CallTaskStatistic>> notCallConnect = getListCompletableFuture(callTaskStatistic,executor);
 		//等待所有任务执行完成
 		try {
-			CompletableFuture.allOf(callTaskStatisticCompletableFuture,threeDayNotCallConnect,twoDayNotCallConnect,oneDayNotCallConnect).get();
+			CompletableFuture.allOf(callTaskStatisticCompletableFuture,notCallConnect).get();
 			// 数据处理
-			List<CallTaskStatistic> callTaskStatistics = getCallTaskStatistics(callTaskStatisticCompletableFuture, oneDay, threeDayNotCallConnect, twoDayNotCallConnect, oneDayNotCallConnect);
+			List<CallTaskStatistic> callTaskStatistics = getCallTaskStatistics(callTaskStatisticCompletableFuture,null,null,null, notCallConnect,callTaskStatistic);
 			// 取当前行政区总数据
 			List<CallTaskStatistic> totalList = getTotalCallTaskStatistics(callTaskStatistics,callTaskStatistic);
 			// 排序
@@ -414,6 +461,20 @@
 	}
 
 	/**
+	 * 查询当前天除去日常呼叫外的统计数据
+	 * @param callTaskStatistic
+	 * @param executor
+	 * @return
+	 */
+	@NotNull
+	private CompletableFuture<List<CallTaskStatistic>> getListCompletableFuture(CallTaskStatistic callTaskStatistic, ThreadPoolExecutor executor) {
+		return CompletableFuture.supplyAsync(()->{
+				List<CallTaskStatistic> outgoingStatisticList = callTaskMapper.getNoDayOutgoingStatisticList(callTaskStatistic);
+				return outgoingStatisticList;
+				},executor);
+	}
+
+	/**
 	 * 按行政区查询对应的接通率
 	 * @param page
 	 * @param callTaskStatistic
@@ -448,28 +509,46 @@
 	 * @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 {
+	private List<CallTaskStatistic> getCallTaskStatistics(CompletableFuture<List<CallTaskStatistic>> callTaskStatisticCompletableFuture,
+														  Map<String, Object> oneDay,
+														  CompletableFuture<List<CallTaskStatistic>> threeDayNotCallConnect,
+														  CompletableFuture<List<CallTaskStatistic>> twoDayNotCallConnect,
+														  CompletableFuture<List<CallTaskStatistic>> oneDayNotCallConnect,
+														  CallTaskStatistic callTaskStatistic) throws InterruptedException, ExecutionException {
 		// 获取信息
 		List<CallTaskStatistic> callTaskStatistics = callTaskStatisticCompletableFuture.get();
-		List<CallTaskStatistic> threeNotConnectTaskStatisticsList = threeDayNotCallConnect.get();
-		List<CallTaskStatistic> twoNotConnectTaskStatisticsList = twoDayNotCallConnect.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());
-				}
-			}
+//			taskStatistic.setCreateTime(oneDay.get("endTime").toString());
+			taskStatistic.setCreateTime(callTaskStatistic.getCreateTime());
+//			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());
+					Integer count = Integer.parseInt(taskStatistic.getCalleeNumberCount()) + Integer.parseInt(statistic.getCalleeNumberCount());
+					Integer connectCount = Integer.parseInt(taskStatistic.getConnectionCount()) + Integer.parseInt(statistic.getConnectionCount());
+					taskStatistic.setCalleeNumberCount(count.toString());
+					taskStatistic.setConnectionCount(connectCount.toString());
+					taskStatistic.setRefuseConnectCount(taskStatistic.getRefuseConnectCount() + statistic.getRefuseConnectCount());
+					// 计算比例
+					if (connectCount==0){
+						taskStatistic.setCallCompletingRate("0");
+					}else {
+						//格式化小数
+						DecimalFormat df = new DecimalFormat("0.00");
+						taskStatistic.setCallCompletingRate(df.format((float) connectCount / count * 100));
+					}
 				}
 			}
 		}
@@ -547,6 +626,8 @@
 			List<String> stringList = everydayCall(params);
 			// 取出数据进行设置 taskId
 			bladeRedis.setEx(CallConstant.call_task_key,stringList.get(1)+","+1,6*60*60L);
+			// 异步保存日常关联呼叫任务信息
+			asyncCallService.saveDailyCallTask(stringList.get(1),1);
 			// 响应
 			return stringList;
 		}else {
@@ -581,11 +662,15 @@
 			if (type.equals("1")){
 				// 取出数据进行设置 taskId
 				bladeRedis.setEx(CallConstant.call_task_key,stringList.get(1)+","+2,6*60*60L);
+				// 异步保存日常关联呼叫任务信息
+				asyncCallService.saveDailyCallTask(stringList.get(1),2);
 			}
 			// 判断是否发送短信
 			if (type.equals("2")){
 				// 新增一个参数代表需要发短信
 				stringList.add("3");
+				// 异步保存日常关联呼叫任务信息
+				asyncCallService.saveDailyCallTask(stringList.get(1),3);
 			}
 		}
 		// 返回
@@ -873,4 +958,26 @@
 		// 返回
 		return page.setRecords(callNotConnectResultList);
 	}
+
+	/**
+	 * 按日期行政区呼叫结果详情列表信息
+	 * @param callTaskStatistic
+	 * @param page
+	 * @return
+	 */
+	@Override
+	public Object getCallResultList(IPage<CallTaskStatistic> page, CallTaskStatistic callTaskStatistic) {
+		List<String> list = new ArrayList<>();
+		if (null!= callTaskStatistic.getAdCode() && !callTaskStatistic.getAdCode().equals("")){
+			// 查询所有下级区域code
+			list = getAllChildrenAreaByAreaCode(callTaskStatistic.getAdCode());
+		}
+		if (null!=callTaskStatistic.getIsPage()){
+			// 不分页
+			return callTaskMapper.getCallResultList(null, list,callTaskStatistic);
+		}
+		List<CallTaskStatistic> callNotConnectResultList = callTaskMapper.getCallResultList(page,list, callTaskStatistic);
+		// 返回
+		return page.setRecords(callNotConnectResultList);
+	}
 }

--
Gitblit v1.9.3