From fd57a072cb58d7a4ff8a142e2585979a4c584b6b Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Wed, 09 Aug 2023 17:58:34 +0800
Subject: [PATCH] 智能外呼统计修改(可以按日期返回统计查询),外呼详情查询修改

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java |  132 ++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 128 insertions(+), 4 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 3b493b3..070728b 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
@@ -154,6 +154,91 @@
 	}
 
 	/**
+	 * 创建告警外呼任务
+	 * @param map
+	 * @return
+	 */
+	@Override
+	public List<String> createOutCallTaskByAlarm(Map<String, Object> map) {
+		List<Map<String, String>> params = (List<Map<String, String>>) map.get("list");
+		JSONArray arr = getCalleeInfoAlarm(params,(List<String>) map.get("titles"));
+		String requestUrl = url + CREATE_TASK_URL;
+		LocalDateTime now = LocalDateTime.now();
+		String timestamp = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss SSS"));
+		String transId = generateTransId(now);
+		String taskName = now.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")) + "智能外呼";
+		if(null!= map.get("taskName") && !map.get("taskName").equals("")){
+			taskName = map.get("taskName").toString();
+		}
+		String[] numbers = StringUtils.split(callingNumbers,",");
+		String taskScheduleTime = LocalDateTime.now().plusHours(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+		if (null!=map.get("taskScheduleTime") && !map.get("taskScheduleTime").equals("")){
+			taskScheduleTime = map.get("taskScheduleTime").toString();
+		}
+		String scenesIds = scenesId;
+		if (null!=map.get("scenesId") && !map.get("scenesId").equals("")){
+			scenesIds = map.get("scenesId").toString();
+		}
+		HttpHeaders httpHeaders = new HttpHeaders();
+		httpHeaders.add("Content-Type", CONTENT_TYPE);
+		httpHeaders.add("Accept", ACCEPT_TYPE);
+		httpHeaders.add("Accept-Encoding", ACCEPT_ENCODING);
+		JSONObject paramJson = new JSONObject();
+		paramJson.put("taskName", taskName);
+		paramJson.put("scenesId", scenesIds);
+		paramJson.put("callingNumbers", numbers);
+		paramJson.put("taskScheduleTime", taskScheduleTime);
+		paramJson.put("calleeData", arr);
+		paramJson.put("empId", empId);
+		String token = getToken(appId, timestamp, transId, appSecret, paramJson.toJSONString());
+		JSONObject headerJson = new JSONObject();
+		headerJson.put("appId", appId);
+		headerJson.put("timestamp", timestamp);
+		headerJson.put("transId", transId);
+		headerJson.put("token", token);
+		JSONObject bodyJson = new JSONObject();
+		bodyJson.put("head", headerJson);
+		bodyJson.put("body", paramJson);
+		HttpEntity<String> stringHttpEntity = new HttpEntity<>(bodyJson.toJSONString(), httpHeaders);
+		log.info("创建超汛限智能外呼任务请求参数:{}", bodyJson.toJSONString());
+		ResponseEntity<String> response = restTemplate.postForEntity(requestUrl, stringHttpEntity, String.class);
+		log.info("创建外呼任务请求结果:{}", response.getBody());
+		if (response.getStatusCode() != HttpStatus.OK) {
+			log.error("创建智能外呼任务失败:{}", response.getStatusCode());
+		}
+		JSONObject jsonObject = JSON.parseObject(response.getBody());
+		Boolean success = jsonObject.getBoolean("success");
+		String taskId = "";
+		if (success){
+			//通过任务名称查询taskId
+			taskId = callTaskMapper.getTaskIdByTaskName(taskName);
+		}
+		List<String> list = new ArrayList<>();
+		list.add(response.getBody());
+		list.add(taskId);
+		list.add(success.toString());
+		// 返回
+		return list;
+	}
+
+	/**
+	 * 外呼动态数据封装
+	 * @param params
+	 * @return
+	 */
+	private JSONArray getCalleeInfoAlarm(List<Map<String, String>> params,List<String> titles) {
+		JSONArray arr = new JSONArray();
+		params.forEach(map -> {
+			JSONObject json = new JSONObject();
+			for (String title : titles) {
+				json.put(title, map.get(title));
+			}
+			arr.add(json);
+		});
+		return arr;
+	}
+
+	/**
 	 * 获取通话详情
 	 * @param taskId
 	 * @param calleeNumber
@@ -392,21 +477,21 @@
 		Integer totalCalleeNumberCount = 0;
 		Integer totalConnectionCount = 0;
 		Integer totalThreeNoConnectCount = 0;
-		Integer totalTwoNoConnectCount = 0;
+//		Integer totalTwoNoConnectCount = 0;
 		Integer totalRefuseConnectCount = 0;
 		// 遍历
 		for (CallTaskStatistic taskStatistic : callTaskStatistics) {
 			totalCalleeNumberCount += Integer.parseInt(taskStatistic.getCalleeNumberCount());
 			totalConnectionCount += Integer.parseInt(taskStatistic.getConnectionCount());
 			totalThreeNoConnectCount += taskStatistic.getThreeNoConnectCount();
-			totalTwoNoConnectCount += taskStatistic.getTwoNoConnectCount();
+//			totalTwoNoConnectCount += taskStatistic.getTwoNoConnectCount();
 			totalRefuseConnectCount += taskStatistic.getRefuseConnectCount();
 		}
 		// 设置数据
 		callTaskStatistic.setCalleeNumberCount(totalCalleeNumberCount.toString());
 		callTaskStatistic.setConnectionCount(totalConnectionCount.toString());
 		callTaskStatistic.setThreeNoConnectCount(totalThreeNoConnectCount);
-		callTaskStatistic.setTwoNoConnectCount(totalTwoNoConnectCount);
+//		callTaskStatistic.setTwoNoConnectCount(totalTwoNoConnectCount);
 		callTaskStatistic.setRefuseConnectCount(totalRefuseConnectCount);
 		callTaskStatistic.setCreateTime(callTaskStatistics.get(0).getCreateTime());
 		// 查询当前行政区名称
@@ -582,7 +667,46 @@
 	 */
 	@Override
 	public Object getOutgoingStatisticByArea(CallTaskStatistic callTaskStatistic) {
-		return callTaskMapper.getOutgoingStatisticByArea(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)));
+		}
+		if (null==callTaskStatistic.getStartTime() || callTaskStatistic.getStartTime().equals("")){
+			long l = System.currentTimeMillis();
+			String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date(l - 60 * 60 * 24 * 1000));
+			// 设置当前时间的前一天
+			callTaskStatistic.setStartTime(format);
+			callTaskStatistic.setEndTime(format);
+		}
+		ThreadPoolExecutor executor = myThreadPoolConfig.threadPoolExecutor();
+		callTaskStatistic.setIsPage(1);
+		// 异步查询当前天日常呼叫(3次)统计数据
+		CompletableFuture<List<CallTaskStatistic>> callTaskStatisticCompletableFuture = getListCompletableFuture(null, callTaskStatistic, executor);
+		// 查询当前天除去日常呼叫外的统计数据
+		CompletableFuture<List<CallTaskStatistic>> notCallConnect = getListCompletableFuture(callTaskStatistic,executor);
+		//等待所有任务执行完成
+		try {
+			CompletableFuture.allOf(callTaskStatisticCompletableFuture,notCallConnect).get();
+			// 数据处理
+			List<CallTaskStatistic> callTaskStatistics = getCallTaskStatistics(callTaskStatisticCompletableFuture,null,null,null, notCallConnect,callTaskStatistic);
+			// 取当前行政区总数据
+//			List<CallTaskStatistic> totalList = getTotalCallTaskStatistics(callTaskStatistics,callTaskStatistic);
+			List<CallTaskStatistic> totalList = new ArrayList<>();
+			// 排序
+			callTaskStatistics = getCallTaskStatisticsByOrder(callTaskStatistic, callTaskStatistics);
+			// 合并数据
+			totalList.addAll(callTaskStatistics);
+			// 返回数据
+			return totalList;
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		} catch (ExecutionException e) {
+			e.printStackTrace();
+		}
+		// 返回
+		return null;
+//		return callTaskMapper.getOutgoingStatisticByArea(callTaskStatistic);
 	}
 
 	/**

--
Gitblit v1.9.3