| | |
| | | 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; |
| | |
| | | * @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(); |
| | |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | /** |
| | | * 查询智能外呼统计数据-按日期-行政区统计 |
| | | * @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 |
| | |
| | | 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); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @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); |
| | |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | /** |
| | | * 计算时间 |
| | | * @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 |