From 2bada8eac5dd8d72be65509124d18b23d87fdf6a Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Fri, 16 Jun 2023 16:08:07 +0800
Subject: [PATCH] 外呼响应结果修改
---
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java | 84 +++++++++++++++++++++++++++++++----------
1 files changed, 63 insertions(+), 21 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 ac9d460..fafa8fc 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
@@ -69,13 +69,13 @@
* @return
*/
@Override
- public Object createTask(Map<String,Object> map) {
+ public List<String> createTask(Map<String,Object> map) {
List<Map<String, String>> params = (List<Map<String, String>>) map.get("list");
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")) + "智能外呼";;
+ 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();
}
@@ -112,11 +112,23 @@
HttpEntity<String> stringHttpEntity = new HttpEntity<>(bodyJson.toJSONString(), httpHeaders);
log.info("创建超汛限智能外呼任务请求参数:{}", bodyJson.toJSONString());
ResponseEntity<String> response = restTemplate.postForEntity(requestUrl, stringHttpEntity, String.class);
- log.info("创建外呼任务请求结果:{}", response);
+ log.info("创建外呼任务请求结果:{}", response.getBody());
if (response.getStatusCode() != HttpStatus.OK) {
log.error("创建智能外呼任务失败:{}", response.getStatusCode());
}
- return response;
+ 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;
}
/**
@@ -320,7 +332,7 @@
* @return
*/
@Override
- public boolean createCallTaskByParam(Map<String, Object> params) {
+ public List<String> createCallTaskByParam(Map<String, Object> params) {
// 自动创建任务的 4个条件 1:呼叫人数 2:调度时间 3:是否超汛限 4:多少天内呼叫过的不呼叫(天数)
//1. 调用中台接口查询出所有需要发任务的水库巡查责任人相关信息(该处需要将是否超汛限条件传入)
JSONArray jsonArray = getZtWaterMangerData(params);
@@ -337,10 +349,8 @@
params.put("list",setForListMap(taskRandomList));
// 调度时间处理
params.put("taskScheduleTime",new SimpleDateFormat("yyyy-MM-dd").format(new Date())+ " " +params.get("taskScheduleTime") + ":00");
- // 创建任务
- createTask(params);
- //5. 返回
- return true;
+ // 创建任务并返回结果
+ return createTask(params);
}
/**
@@ -377,20 +387,52 @@
}
// 先取差集
List<Scene> sceneList = totalList.stream().filter(item -> !list.contains(item.getPhone())).collect(Collectors.toList());
- // 再随机抽取对应人员手机号
- Set<Scene> hashSet = new HashSet<>();
- Random random =new Random();
- for(int i=0;i<sceneList.size();i++){
- // 获取随机数作为下标索引
- int num = random.nextInt(sceneList.size());
- // 保存到 hashSet ,保证唯一
- hashSet.add(sceneList.get(num));
- // 数量达到预期设定退出循环
- if (hashSet.size()==personNumber){
- break;
+ // 如果差集数量不够 预定的数量(超汛情况),则从未超汛情况数据中补齐预定的数量
+ if (sceneList.size()<personNumber){
+ Map<String, Object> map = new HashMap<>();
+ map.put("isOver",0);
+ // 查询未超汛的数据
+ JSONArray jsonArray = getZtWaterMangerData(map);
+ // 过滤得到手机号集合(排查手机号为null的数据)
+ List<Scene> sceneListNoOver = filterJsonToList(jsonArray);
+ // 取差集
+ List<Scene> differenceSceneListNoOver = sceneListNoOver.stream().filter(item -> !list.contains(item.getPhone())).collect(Collectors.toList());
+ // 再随机抽取对应人员手机号
+ Set<Scene> hashSet = new HashSet<>();
+ // 先将超汛的加入集合
+ for (Scene scene : sceneList) {
+ hashSet.add(scene);
}
+ // 未超汛的补充
+ personNumber = personNumber - sceneList.size();
+ Random random = new Random();
+ for (int i = 0; i < differenceSceneListNoOver.size(); i++) {
+ // 获取随机数作为下标索引
+ int num = random.nextInt(differenceSceneListNoOver.size());
+ // 保存到 hashSet ,保证唯一
+ hashSet.add(differenceSceneListNoOver.get(num));
+ // 数量达到预期设定退出循环
+ if (hashSet.size() == personNumber) {
+ break;
+ }
+ }
+ return hashSet;
+ }else {
+ // 再随机抽取对应人员手机号
+ Set<Scene> hashSet = new HashSet<>();
+ Random random = new Random();
+ for (int i = 0; i < sceneList.size(); i++) {
+ // 获取随机数作为下标索引
+ int num = random.nextInt(sceneList.size());
+ // 保存到 hashSet ,保证唯一
+ hashSet.add(sceneList.get(num));
+ // 数量达到预期设定退出循环
+ if (hashSet.size() == personNumber) {
+ break;
+ }
+ }
+ return hashSet;
}
- return hashSet;
}
/**
--
Gitblit v1.9.3