From 307f0f4713a87dabb0031a7bb9a2d7a9e0726cfc Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Mon, 31 Jul 2023 19:23:13 +0800
Subject: [PATCH] 智能外呼新增未接通,未呼叫水库定时呼叫

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 54 insertions(+), 2 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 a97086b..3b493b3 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
@@ -97,7 +97,7 @@
 		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")) + "智能外呼";;
+		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();
 		}
@@ -637,6 +637,28 @@
 	}
 
 	/**
+	 * 根据条件自动创建外呼任务--一直未接通,一直未呼叫的水库
+	 * @param params
+	 * @return
+	 */
+	@Override
+	public List<String> createCallTaskByParamByNotCall(Map<String, Object> params) {
+		// 常规任务,每天上午11点打150人,下午2点打11点未接人员,下午5点打下午2点未接通人员
+		String redisOneKey = bladeRedis.get(CallConstant.call_task_key);
+		if (null==redisOneKey){
+			List<String> stringList = everydayCallByNotCall(params);
+			// 取出数据进行设置 taskId
+			bladeRedis.setEx(CallConstant.call_task_key,stringList.get(1)+","+1,6*60*60L);
+			// 异步保存日常关联呼叫任务信息
+			asyncCallService.saveDailyCallTask(stringList.get(1),1);
+			// 响应
+			return stringList;
+		}else {
+			return createEverydayAfter(redisOneKey);
+		}
+	}
+
+	/**
 	 * 日常外呼任务未接通的继续拨打
 	 * @param redisOneKey 取值为上一次外呼的任务id
 	 * @return
@@ -676,6 +698,36 @@
 		}
 		// 返回
 		return stringList;
+	}
+
+	/**
+	 * 日常外呼任务创建--从未接通和从未呼叫的水库
+	 * @param params
+	 * @return
+	 */
+	private List<String> everydayCallByNotCall(Map<String, Object> params) {
+		// 查询从未接通和从未呼叫的水库
+		List<Scene> totalList = callTaskMapper.getNotCallOrCallNotConnect();
+		// 取出随机的150人
+		Set<Scene> taskRandomList = new HashSet<>();
+		Integer personNumber = 150;
+		Random random = new Random();
+		for (int i = 0; i < totalList.size(); i++) {
+			// 获取随机数作为下标索引
+			int num = random.nextInt(totalList.size());
+			// 保存到 hashSet ,保证唯一
+			taskRandomList.add(totalList.get(num));
+			// 数量达到预期设定退出循环
+			if (taskRandomList.size() == personNumber) {
+				break;
+			}
+		}
+		//4. 传入调度时间和随机得到的人员信息进行任务的创建并返回
+		params.put("list",setForListMap(taskRandomList));
+		// 调度时间处理
+		params.put("taskScheduleTime",new SimpleDateFormat("yyyy-MM-dd").format(new Date())+ " " +params.get("taskScheduleTime") + ":00");
+		// 创建任务并返回结果
+		return createTask(params);
 	}
 
 	/**
@@ -838,7 +890,7 @@
 	}
 
 	/**
-	 * 将 jsonArray 取出手机号得到新的集合
+	 * 将 jsonArray 取出手机号得到新的集合--超汛限场景
 	 * @param jsonArray
 	 * @return
 	 */

--
Gitblit v1.9.3