zhongrj
2023-06-05 bdf552ba7e1d435f8e37e4ac19cc1985dc9e8caf
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 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,11 @@
      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;
      return response.getBody();
   }
   /**
@@ -320,7 +320,7 @@
    * @return
    */
   @Override
   public boolean createCallTaskByParam(Map<String, Object> params) {
   public String createCallTaskByParam(Map<String, Object> params) {
      // 自动创建任务的 4个条件  1:呼叫人数  2:调度时间  3:是否超汛限  4:多少天内呼叫过的不呼叫(天数)
      //1. 调用中台接口查询出所有需要发任务的水库巡查责任人相关信息(该处需要将是否超汛限条件传入)
      JSONArray jsonArray = getZtWaterMangerData(params);
@@ -337,10 +337,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 +375,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;
   }
   /**