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 +++++++++++++
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallClient.java         |   15 +++
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallClientFallback.java |    5 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallImplImplClient.java         |   12 +++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.xml                |   55 +++++++++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java                 |    9 ++
 skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/OutCallXxlJob.java              |   24 ++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.java               |    8 ++
 8 files changed, 182 insertions(+), 2 deletions(-)

diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallClient.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallClient.java
index e2e7e93..007d35a 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallClient.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallClient.java
@@ -19,6 +19,7 @@
 
 	String API_PREFIX = "/client";
 	String CREATE_OUT_CALL_TASK_JOB_HANDLER = API_PREFIX + "/createOutCallTaskJobHandler";
+	String CREATE_OUT_CALL_TASK_JOB_HANDLER_BY_NOT_CALL = API_PREFIX + "/createOutCallTaskJobHandlerByNotCall";
 	String CREATE_OUT_CALL_TASK_BY_NOT_CONNECT_JOB_HANDLER = API_PREFIX + "/createOutCallTaskByNotConnectJobHandler";
 	String GET_CALL_NOT_FILL_RECORD_INFO = API_PREFIX + "/getCallNotFillRecordInfo";
 	String CREATE_CALL_SMS_NOTICE_TASK = API_PREFIX + "/createCallSmsNoticeTask";
@@ -39,6 +40,20 @@
 											   @RequestParam("day") String day);
 
 	/**
+	 * 智能外呼定时创建任务执行器--一直未接通,一直未呼叫的水库
+	 * @param isOver
+	 * @param taskScheduleTime
+	 * @param personNumber
+	 * @param day
+	 * @return
+	 */
+	@GetMapping(CREATE_OUT_CALL_TASK_JOB_HANDLER_BY_NOT_CALL)
+	List<String> createOutCallTaskJobHandlerByNotCall(@RequestParam("isOver") String isOver,
+											   @RequestParam("taskScheduleTime") String taskScheduleTime,
+											   @RequestParam("personNumber") String personNumber,
+											   @RequestParam("day") String day);
+
+	/**
 	 * 测试
 	 * @param isOver
 	 * @param taskScheduleTime
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallClientFallback.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallClientFallback.java
index 3200e54..a2f49d1 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallClientFallback.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallClientFallback.java
@@ -18,6 +18,11 @@
 	}
 
 	@Override
+	public List<String> createOutCallTaskJobHandlerByNotCall(String isOver, String taskScheduleTime, String personNumber, String day) {
+		return null;
+	}
+
+	@Override
 	public String testOutCall(String isOver, String taskScheduleTime, String personNumber, String day) {
 		return null;
 	}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallImplImplClient.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallImplImplClient.java
index 3b715df..0558141 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallImplImplClient.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/feign/OutCallImplImplClient.java
@@ -43,6 +43,18 @@
 		return callService.createCallTaskByParam(map);
 	}
 
+	@Override
+	@GetMapping(CREATE_OUT_CALL_TASK_JOB_HANDLER_BY_NOT_CALL)
+	public List<String> createOutCallTaskJobHandlerByNotCall(String isOver, String taskScheduleTime, String personNumber, String day) {
+		Map<String, Object> map = new HashMap<>(4);
+		map.put("isOver",isOver);
+		map.put("taskScheduleTime",taskScheduleTime);
+		map.put("personNumber",personNumber);
+		map.put("day",day);
+		// 创建定时任务并返回
+		return callService.createCallTaskByParamByNotCall(map);
+	}
+
 	/**
 	 * 测试
 	 * @param isOver
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.java
index d8358a8..e787549 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.java
@@ -189,4 +189,12 @@
 	List<CallTaskResultVO> getCallResultListTemp(@Param("page") IPage<CallTaskResultVO> page,
 												 @Param("callTaskResult")  CallTaskResultVO callTaskResult,
 												 @Param("list")  List<String> list);
+
+	/**
+	 * 查询从未接通和从未呼叫的水库
+	 * @return
+	 */
+	@DS("ztznwh")
+	@InterceptorIgnore(tenantLine = "true")
+    List<Scene> getNotCallOrCallNotConnect();
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.xml
index 873446a..396984f 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/mapper/CallTaskMapper.xml
@@ -928,4 +928,59 @@
         order by ctr."gmt_create" desc
     </select>
 
+    <!--查询从未接通和从未呼叫的水库-->
+    <select id="getNotCallOrCallNotConnect" resultType="cn.gistack.sm.intelligentCall.entity.Scene">
+        (
+        select b."guid" as waterCode,b."name" as waterName,c."user_name" as username,
+            c."user_phone" as phone,c."user_phone" as userId from (
+        select * from SJZT_MD."att_res_base"  arb right join (
+            select e.* from (
+                select JSON_VALUE("call_task_callee_content",'$."$水库编码$"') as waterCode
+             from "SJZT_ODS"."call_task_callee" where date_format("gmt_create",'%Y-%m-%d') >='2023-05-01' group by JSON_VALUE("call_task_callee_content",'$."$水库编码$"')
+             ) e left join
+
+            (
+            select waterCode from (
+            select a.*,b."callee_number",b."call_result",c.id from (
+            select "call_id",
+            JSON_VALUE("call_task_callee_content",'$."$水库编码$"') as waterCode
+             from "SJZT_ODS"."call_task_callee"
+                where date_format("gmt_create",'%Y-%m-%d') >='2023-05-01'
+                ) a left join "SJZT_ODS"."call_task_result" b on a."call_id" = b."call_id"
+                left join "YWXT".sm_call_not_fill_record c on c.call_id = a."call_id"
+                where ("call_result" = '200000' or  (b."call_result"!='200000' and c.id is not null))
+
+                ) d group by waterCode
+                ) f on e.waterCode = f.waterCode
+                where f.waterCode is null
+                )a on arb."guid" = a.waterCode) b
+                 LEFT JOIN SJZT_MD."att_res_manage_person" c ON b."guid" = c."res_guid" and c."type" = 5
+                 where "user_phone" is not null
+        order by b."interior_ad_guid"
+        )
+        union
+        (
+            select
+            e."code" as waterCode,e."name" as waterName,e."user_name" as username,
+                e."user_phone" as phone,e."user_phone" as userId
+            from (
+            select b."code",b."name",b."res_reg_code",b."eng_scal",c."user_name",
+                c."user_phone",aab.*
+                     from (
+            select * from SJZT_MD."att_res_base"  arb left join
+
+            (
+                select JSON_VALUE("call_task_callee_content",'$."$水库编码$"') as waterCode from "SJZT_ODS"."call_task_callee"
+                    where date_format("gmt_create",'%Y-%m-%d') >='2023-05-01'
+                    group by JSON_VALUE("call_task_callee_content",'$."$水库编码$"')
+             ) a on arb."guid" = a.waterCode
+             where waterCode is null) b
+             LEFT JOIN SJZT_MD."att_res_manage_person" c ON b."guid" = c."res_guid" and c."type" = 5
+             left join "SJZT_MD"."att_ad_base" aab on aab."guid" = b."interior_ad_guid"
+            order by b."interior_ad_guid" ) e
+            left join "SJZT_MD"."att_ad_base" aab on aab."ad_code" = e."p_ad_code"
+            where e."user_phone" is not null
+        )
+    </select>
+
 </mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java
index ee32d94..c886234 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java
@@ -72,6 +72,15 @@
 	List<String> createCallTaskByParam(Map<String, Object> params);
 
 	/**
+	 * 根据条件自动创建外呼任务--一直未接通,一直未呼叫的水库
+	 * @param params
+	 * @return
+	 */
+	List<String> createCallTaskByParamByNotCall(Map<String, Object> params);
+
+
+
+	/**
 	 * 智能外呼呼叫前一天未接通人员
 	 * @param map 包含调度时间
 	 * @return
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
 	 */
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/OutCallXxlJob.java b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/OutCallXxlJob.java
index 3c8d78f..8bd2e0d 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/OutCallXxlJob.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/OutCallXxlJob.java
@@ -52,6 +52,30 @@
 	}
 
 	/**
+	 * 智能外呼定时创建任务执行器--一直未接通,一直未呼叫的水库
+	 * @param param
+	 * @return
+	 * @throws Exception
+	 */
+	@XxlJob("createOutCallTaskJobHandlerByNotCall")
+	public ReturnT<String> createOutCallTaskJobHandlerByNotCall(String param){
+		XxlJobLogger.log("开始执行任务...");
+		JSONObject jsonParam = JSON.parseObject(param);
+		String isOver = jsonParam.getString("isOver");
+		String taskScheduleTime = jsonParam.getString("taskScheduleTime");
+		String personNumber = jsonParam.getString("personNumber");
+		String day = jsonParam.getString("day");
+		// 创建外呼任务
+		List<String> result = outCallClient.createOutCallTaskJobHandlerByNotCall(isOver,taskScheduleTime,personNumber, day);
+		XxlJobLogger.log("任务响应结果..." + result);
+		// 创建外呼短信发送任务记录
+		Boolean flag = createCallSmsNoticeTaskByEvery(result);
+		XxlJobLogger.log("外呼短信通知任务创建结果:" + flag);
+		XxlJobLogger.log("结束自动创建任务...");
+		return ReturnT.SUCCESS;
+	}
+
+	/**
 	 * 创建外呼短信发送任务记录--日常定时任务
 	 * @param result
 	 */

--
Gitblit v1.9.3