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