From 529682cbca2ad473324f78a3c34f30bd07e6c2f9 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Wed, 21 Jun 2023 16:22:54 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jtdev' into jtdev
---
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java | 123 +++++++++++++++++++++++++++++++++++++++-
1 files changed, 119 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 8469e9a..8f874f4 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
@@ -22,6 +22,7 @@
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -69,7 +70,7 @@
* @return
*/
@Override
- public String 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();
@@ -116,7 +117,19 @@
if (response.getStatusCode() != HttpStatus.OK) {
log.error("创建智能外呼任务失败:{}", response.getStatusCode());
}
- return response.getBody();
+ 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;
}
/**
@@ -254,11 +267,17 @@
/**
* 查询智能外呼统计数据-按日期-行政区统计
+ * @param page
* @param callTaskStatistic
* @return
*/
@Override
public Object getOutgoingStatisticList(IPage<CallTaskStatistic> page,CallTaskStatistic 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)));
+ }
List<String> list = new ArrayList<>();
if (null!= callTaskStatistic.getAdName() && !callTaskStatistic.getAdName().equals("")){
// 查询所有下级区域code
@@ -272,7 +291,26 @@
if (null!= callTaskStatistic.getIsPage()){
return callTaskMapper.getOutgoingStatisticList(null,callTaskStatistic,list);
}
- return page.setRecords(callTaskMapper.getOutgoingStatisticList(page,callTaskStatistic,list));
+ // 按天查询数据
+ List<CallTaskStatistic> outgoingStatisticList = callTaskMapper.getOutgoingStatisticList(page, callTaskStatistic, list);
+ // 查询 按区域统计连续三天,连续两天未接通,前一天拒接对应的数量
+ Map<String, Object> threeDay = computationTime(callTaskStatistic.getCreateTime(), 2);
+ Map<String, Object> twoDay = computationTime(callTaskStatistic.getCreateTime(), 1);
+ Map<String, Object> oneDay = computationTime(callTaskStatistic.getCreateTime(), 0);
+ // 查询
+ List<CallTaskStatistic> notCallConnectStatisticList = callTaskMapper.getNotCallConnectStatisticList(callTaskStatistic,list,threeDay,twoDay,oneDay);
+ // 遍历
+ for (CallTaskStatistic taskStatistic : outgoingStatisticList) {
+ for (CallTaskStatistic statistic : notCallConnectStatisticList) {
+ if (taskStatistic.getGuid().equals(statistic.getGuid())){
+ taskStatistic.setThreeNoConnectCount(statistic.getThreeNoConnectCount());
+ taskStatistic.setTwoNoConnectCount(statistic.getTwoNoConnectCount());
+ taskStatistic.setRefuseConnectCount(statistic.getRefuseConnectCount());
+ }
+ }
+ }
+ // 返回
+ return page.setRecords(outgoingStatisticList);
}
/**
@@ -320,7 +358,7 @@
* @return
*/
@Override
- public String createCallTaskByParam(Map<String, Object> params) {
+ public List<String> createCallTaskByParam(Map<String, Object> params) {
// 自动创建任务的 4个条件 1:呼叫人数 2:调度时间 3:是否超汛限 4:多少天内呼叫过的不呼叫(天数)
//1. 调用中台接口查询出所有需要发任务的水库巡查责任人相关信息(该处需要将是否超汛限条件传入)
JSONArray jsonArray = getZtWaterMangerData(params);
@@ -339,6 +377,57 @@
params.put("taskScheduleTime",new SimpleDateFormat("yyyy-MM-dd").format(new Date())+ " " +params.get("taskScheduleTime") + ":00");
// 创建任务并返回结果
return createTask(params);
+ }
+
+ /**
+ * 智能外呼呼叫前一天未接通人员
+ * @param map 包含调度时间
+ * @return
+ */
+ @Override
+ public List<String> createOutCallTaskByNotConnectJobHandler(Map<String, Object> map) {
+ map.put("day",1);
+ map.put("isOver","");
+ // 自动创建任务的 条件1:昨天外呼未接通人员 条件2:前三天如果同一个人都未接通,则不再呼叫
+ // 计算开始时间,结束时间
+ computationTime(map);
+ // 1. 查询前一天呼叫未接通人员
+ List<Scene> oneDayCallNotConnectList = callTaskMapper.getBeforeOneDayCallNotConnect(map);
+ if (oneDayCallNotConnectList.size()>0) {
+ // 2. 判断是否填报,查询前一天已填报的人员
+ List<String> fillRecordList = callTaskMapper.getFillRecordList(map);
+ // 3. 查询三天都未接通的人员
+ map.put("day", 3);
+ List<String> threeDayCallNotConnectList = callTaskMapper.getBeforeThreeDayCallNotConnect(map);
+ // 4. 组装数据,从前一天呼叫未接通里面去除已填报人员,去除连续三天未接人员
+ Set<Scene> taskRandomList = callNotConnectListDataHandle(oneDayCallNotConnectList, fillRecordList, threeDayCallNotConnectList);
+ // 5. 传入调度时间和随机得到的人员信息进行任务的创建并返回
+ map.put("list", setForListMap(taskRandomList));
+ // 调度时间处理
+ map.put("taskScheduleTime", new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " " + map.get("taskScheduleTime") + ":00");
+ // 创建任务并返回结果
+ return createTask(map);
+ }
+ return null;
+ }
+
+ /**
+ * 组装数据,从前一天呼叫未接通里面去除已填报人员,去除连续三天未接人员
+ * @param oneDayCallNotConnectList 前一天呼叫未接通人员信息
+ * @param fillRecordList 前一天已填报的人员手机号集合
+ * @param threeDayCallNotConnectList 连续三天都未接通的人员手机号集合
+ * @return
+ */
+ private Set<Scene> callNotConnectListDataHandle(List<Scene> oneDayCallNotConnectList, List<String> fillRecordList, List<String> threeDayCallNotConnectList) {
+ // 取差集
+ // 去除前一天已填报的人员手机号集合
+ List<Scene> sceneList = oneDayCallNotConnectList.stream().filter(item -> !fillRecordList.contains(item.getPhone())).collect(Collectors.toList());
+ // 再去除连续三天都未接通的人员手机号集合
+ List<Scene> resultList = sceneList.stream().filter(item -> !threeDayCallNotConnectList.contains(item.getPhone())).collect(Collectors.toList());
+ // 转set去重
+ HashSet<Scene> scenes = new HashSet<>(resultList);
+ // 返回
+ return scenes;
}
/**
@@ -469,6 +558,32 @@
}
/**
+ * 计算时间
+ * @param time 传入的时间
+ * @param day 天数
+ */
+ private Map<String,Object> computationTime(String time,Integer day) {
+ HashMap<String, Object> map = new HashMap<>(2);
+ long l = 0;
+ try {
+ l = new SimpleDateFormat("yyyy-MM-dd").parse(time).getTime();
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ long m = 60*60*24*1000*day;
+ // 相减得到时间
+ Long x = l-m;
+ // 格式化日期
+ String startTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date(x));
+ String endTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date(l));
+ // 加入到参数中
+ map.put("startTime",startTime);
+ map.put("endTime",endTime);
+ // 返回
+ return map;
+ }
+
+ /**
* 调用中台接口查询出所有需要发任务的水库巡查责任人相关信息(该处需要将是否超汛限条件传入)
* @param params
* @return
--
Gitblit v1.9.3