| | |
| | | if (success){ |
| | | //通过任务名称查询taskId |
| | | taskId = callTaskMapper.getTaskIdByTaskName(taskName); |
| | | }else { |
| | | // 任务创建失败,发送短信告知 |
| | | asyncCallService.createOutCallErrorSendSms(jsonObject.getString("code"),jsonObject.getString("message")); |
| | | } |
| | | List<String> list = new ArrayList<>(); |
| | | list.add(response.getBody()); |
| | |
| | | Integer totalCalleeNumberCount = 0; |
| | | Integer totalConnectionCount = 0; |
| | | Integer totalThreeNoConnectCount = 0; |
| | | Integer totalTwoNoConnectCount = 0; |
| | | // Integer totalTwoNoConnectCount = 0; |
| | | Integer totalRefuseConnectCount = 0; |
| | | // 遍历 |
| | | for (CallTaskStatistic taskStatistic : callTaskStatistics) { |
| | | totalCalleeNumberCount += Integer.parseInt(taskStatistic.getCalleeNumberCount()); |
| | | totalConnectionCount += Integer.parseInt(taskStatistic.getConnectionCount()); |
| | | totalThreeNoConnectCount += taskStatistic.getThreeNoConnectCount(); |
| | | totalTwoNoConnectCount += taskStatistic.getTwoNoConnectCount(); |
| | | // totalTwoNoConnectCount += taskStatistic.getTwoNoConnectCount(); |
| | | totalRefuseConnectCount += taskStatistic.getRefuseConnectCount(); |
| | | } |
| | | // 设置数据 |
| | | callTaskStatistic.setCalleeNumberCount(totalCalleeNumberCount.toString()); |
| | | callTaskStatistic.setConnectionCount(totalConnectionCount.toString()); |
| | | callTaskStatistic.setThreeNoConnectCount(totalThreeNoConnectCount); |
| | | callTaskStatistic.setTwoNoConnectCount(totalTwoNoConnectCount); |
| | | // callTaskStatistic.setTwoNoConnectCount(totalTwoNoConnectCount); |
| | | callTaskStatistic.setRefuseConnectCount(totalRefuseConnectCount); |
| | | callTaskStatistic.setCreateTime(callTaskStatistics.get(0).getCreateTime()); |
| | | // 查询当前行政区名称 |
| | |
| | | */ |
| | | @Override |
| | | public Object getOutgoingStatisticByArea(CallTaskStatistic callTaskStatistic) { |
| | | return callTaskMapper.getOutgoingStatisticByArea(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))); |
| | | } |
| | | if (null==callTaskStatistic.getStartTime() || callTaskStatistic.getStartTime().equals("")){ |
| | | long l = System.currentTimeMillis(); |
| | | String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date(l - 60 * 60 * 24 * 1000)); |
| | | // 设置当前时间的前一天 |
| | | callTaskStatistic.setStartTime(format); |
| | | callTaskStatistic.setEndTime(format); |
| | | } |
| | | ThreadPoolExecutor executor = myThreadPoolConfig.threadPoolExecutor(); |
| | | callTaskStatistic.setIsPage(1); |
| | | // 异步查询当前天日常呼叫(3次)统计数据 |
| | | CompletableFuture<List<CallTaskStatistic>> callTaskStatisticCompletableFuture = getListCompletableFuture(null, callTaskStatistic, executor); |
| | | // 查询当前天除去日常呼叫外的统计数据 |
| | | CompletableFuture<List<CallTaskStatistic>> notCallConnect = getListCompletableFuture(callTaskStatistic,executor); |
| | | //等待所有任务执行完成 |
| | | try { |
| | | CompletableFuture.allOf(callTaskStatisticCompletableFuture,notCallConnect).get(); |
| | | // 数据处理 |
| | | List<CallTaskStatistic> callTaskStatistics = getCallTaskStatistics(callTaskStatisticCompletableFuture,null,null,null, notCallConnect,callTaskStatistic); |
| | | // 取当前行政区总数据 |
| | | // List<CallTaskStatistic> totalList = getTotalCallTaskStatistics(callTaskStatistics,callTaskStatistic); |
| | | List<CallTaskStatistic> totalList = new ArrayList<>(); |
| | | // 排序 |
| | | callTaskStatistics = getCallTaskStatisticsByOrder(callTaskStatistic, callTaskStatistics); |
| | | // 合并数据 |
| | | totalList.addAll(callTaskStatistics); |
| | | // 返回数据 |
| | | return totalList; |
| | | } catch (InterruptedException e) { |
| | | e.printStackTrace(); |
| | | } catch (ExecutionException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | // 返回 |
| | | return null; |
| | | // return callTaskMapper.getOutgoingStatisticByArea(callTaskStatistic); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据条件自动创建外呼任务--指定区域呼叫 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<String> createOutCallTaskJobHandlerByArea(Map<String, Object> params) { |
| | | // 常规任务,每天上午11点打150人,下午2点打11点未接人员,下午5点打下午2点未接通人员 |
| | | String redisOneKey = bladeRedis.get(CallConstant.call_task_key); |
| | | if (null==redisOneKey){ |
| | | List<String> stringList = everydayCallByArea(params); |
| | | // 取出数据进行设置 taskId |
| | | bladeRedis.setEx(CallConstant.call_task_key,stringList.get(1)+","+1,6*60*60L); |
| | | // 异步保存日常关联呼叫任务信息 |
| | | asyncCallService.saveDailyCallTask(stringList.get(1),1); |
| | | // 响应 |
| | | return stringList; |
| | | }else { |
| | | return createEverydayAfter(redisOneKey); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 日常外呼任务未接通的继续拨打 |
| | | * @param redisOneKey 取值为上一次外呼的任务id |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 日常外呼任务创建--按区域 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | private List<String> everydayCallByArea(Map<String, Object> params) { |
| | | // 按区域查询需要呼叫的人员信息 |
| | | List<Scene> totalList = callTaskMapper.getCallListByArea(); |
| | | // 取出随机的150人 |
| | | Set<Scene> taskRandomList = new HashSet<>(); |
| | | Integer personNumber = 150; |
| | | Random random = new Random(); |
| | | for (int i = 0; i < totalList.size(); i++) { |
| | | // 获取随机数作为下标索引 |
| | | int num = random.nextInt(totalList.size()); |
| | | // 保存到 hashSet ,保证唯一 |
| | | taskRandomList.add(totalList.get(num)); |
| | | // 数量达到预期设定退出循环 |
| | | if (taskRandomList.size() == personNumber) { |
| | | break; |
| | | } |
| | | } |
| | | //4. 传入调度时间和随机得到的人员信息进行任务的创建并返回 |
| | | params.put("list",setForListMap(taskRandomList)); |
| | | // 调度时间处理 |
| | | params.put("taskScheduleTime",new SimpleDateFormat("yyyy-MM-dd").format(new Date())+ " " +params.get("taskScheduleTime") + ":00"); |
| | | // 创建任务并返回结果 |
| | | return createTask(params); |
| | | } |
| | | |
| | | /** |
| | | * 日常外呼任务创建 |
| | | * @param params |
| | | * @return |