| | |
| | | import cn.gistack.sm.intelligentCall.constant.CallConstant; |
| | | import cn.gistack.sm.intelligentCall.constant.ZtConstant; |
| | | import cn.gistack.sm.intelligentCall.entity.Scene; |
| | | import cn.gistack.sm.intelligentCall.excel.CallExcel; |
| | | import cn.gistack.sm.intelligentCall.mapper.CallTaskMapper; |
| | | import cn.gistack.sm.intelligentCall.service.CallService; |
| | | import cn.gistack.sm.intelligentCall.vo.CallTaskResultVO; |
| | | import cn.gistack.sm.intelligentCall.vo.CallTaskStatistic; |
| | | import cn.gistack.sm.sjztmd.entity.AttAdBase; |
| | | import cn.gistack.sm.sjztmd.service.IAttAdBaseService; |
| | | import cn.gistack.sm.sjztmd.service.IAttResManagePersonService; |
| | | import cn.gistack.sm.sjztmd.vo.AttAdBaseVO; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.jetbrains.annotations.NotNull; |
| | | import org.springblade.core.redis.cache.BladeRedis; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.*; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | |
| | | @Autowired |
| | | private BladeRedis bladeRedis; |
| | | |
| | | @Autowired |
| | | private IAttResManagePersonService attResManagePersonService; |
| | | |
| | | @Autowired |
| | | private AsyncCallService asyncCallService; |
| | |
| | | bodyJson.put("body", paramJson); |
| | | HttpEntity<String> stringHttpEntity = new HttpEntity<>(bodyJson.toJSONString(), httpHeaders); |
| | | log.info("创建超汛限智能外呼任务请求参数:{}", bodyJson.toJSONString()); |
| | | log.info("创建超汛限智能外呼任务呼叫人数:{}", arr.size()); |
| | | ResponseEntity<String> response = restTemplate.postForEntity(requestUrl, stringHttpEntity, String.class); |
| | | log.info("创建外呼任务请求结果:{}", response.getBody()); |
| | | if (response.getStatusCode() != HttpStatus.OK) { |
| | |
| | | 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()); |
| | |
| | | if (null!= callTaskStatistic.getIsPage()) { |
| | | return totalList; |
| | | }else { |
| | | page.setTotal(totalList.size()); |
| | | return page.setRecords(totalList); |
| | | } |
| | | } catch (InterruptedException e) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据条件自动创建外呼任务--指定区域呼叫 |
| | | * @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 |
| | |
| | | private List<String> everydayCallByNotCall(Map<String, Object> params) { |
| | | // 查询从未接通和从未呼叫的水库 |
| | | List<Scene> totalList = callTaskMapper.getNotCallOrCallNotConnect(); |
| | | // 取出随机的150人 |
| | | Set<Scene> taskRandomList = new HashSet<>(totalList); |
| | | // Integer personNumber = 220; |
| | | // 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 |
| | | */ |
| | | private List<String> everydayCallByArea(Map<String, Object> params) { |
| | | // 按区域查询需要呼叫的人员信息 |
| | | List<Scene> totalList = callTaskMapper.getCallListByArea(); |
| | | // 取出随机的150人 |
| | | Set<Scene> taskRandomList = new HashSet<>(); |
| | | Integer personNumber = 150; |
| | |
| | | */ |
| | | @Override |
| | | public Object getCallResultList(IPage<CallTaskStatistic> page, CallTaskStatistic callTaskStatistic) { |
| | | List<String> list = new ArrayList<>(); |
| | | if (null!= callTaskStatistic.getAdCode() && !callTaskStatistic.getAdCode().equals("")){ |
| | | // 查询所有下级区域code |
| | | list = getAllChildrenAreaByAreaCode(callTaskStatistic.getAdCode()); |
| | | } |
| | | if (null!=callTaskStatistic.getIsPage()){ |
| | | // 不分页 |
| | | return callTaskMapper.getCallResultList(null, list,callTaskStatistic); |
| | | return callTaskMapper.getCallResultList(null,callTaskStatistic); |
| | | } |
| | | List<CallTaskStatistic> callNotConnectResultList = callTaskMapper.getCallResultList(page,list, callTaskStatistic); |
| | | List<CallTaskStatistic> callNotConnectResultList = callTaskMapper.getCallResultList(page, callTaskStatistic); |
| | | // 返回 |
| | | return page.setRecords(callNotConnectResultList); |
| | | } |
| | |
| | | // 不分页 |
| | | return callTaskMapper.getCallResultListTemp(null,callTaskResult,list); |
| | | } |
| | | |
| | | /** |
| | | * 导入表格发送智能外呼 |
| | | * @param list |
| | | * @param time |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Object importCall(List<CallExcel> list,String time) { |
| | | // 转换 |
| | | List<String> stringList = list.stream().map(CallExcel::getWaterCode).collect(Collectors.toList()); |
| | | // 通过水库代码获取水库及巡查责任人信息 |
| | | Set<Scene> personList = attResManagePersonService.getPatrolPersonListByWaterCodeList(stringList); |
| | | Map<String, Object> params = new HashMap<>(); |
| | | //传入调度时间和随机得到的人员信息进行任务的创建并返回 |
| | | params.put("list",setForListMap(personList)); |
| | | // 调度时间处理 |
| | | if (null!=time && !time.equals("")){ |
| | | params.put("taskScheduleTime",new SimpleDateFormat("yyyy-MM-dd").format(new Date())+ " " + time + ":00"); |
| | | }else { |
| | | params.put("taskScheduleTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); |
| | | } |
| | | // 创建任务并返回结果 |
| | | List<String> task = createTask(params); |
| | | if (null!=task.get(1) && !task.get(1).equals("")){ |
| | | String successMsg = "外呼任务创建成功"; |
| | | // 返回 |
| | | return R.data(200,successMsg,null); |
| | | } |
| | | String errorMsg = task.get(0); |
| | | // 返回 |
| | | return R.data(400,errorMsg,null); |
| | | } |
| | | } |