zhongrj
2023-06-19 7c2a4aecdcaccb97f4022b2409a7e48505ee4203
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
@@ -69,7 +69,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 +116,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,6 +266,7 @@
   /**
    * 查询智能外呼统计数据-按日期-行政区统计
    * @param page
    * @param callTaskStatistic
    * @return
    */
@@ -320,7 +333,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);
@@ -342,6 +355,57 @@
   }
   /**
    * 智能外呼呼叫前一天未接通人员
    * @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;
   }
   /**
    * hashSet 转 List<Map<String,String>>
    * @param taskRandomList
    * @return