| | |
| | | |
| | | String API_PREFIX = "/client"; |
| | | String CREATE_OUT_CALL_TASK_JOB_HANDLER = API_PREFIX + "/createOutCallTaskJobHandler"; |
| | | String CREATE_OUT_CALL_TASK_JOB_HANDLER_BY_NOT_CALL = API_PREFIX + "/createOutCallTaskJobHandlerByNotCall"; |
| | | String CREATE_OUT_CALL_TASK_BY_NOT_CONNECT_JOB_HANDLER = API_PREFIX + "/createOutCallTaskByNotConnectJobHandler"; |
| | | String GET_CALL_NOT_FILL_RECORD_INFO = API_PREFIX + "/getCallNotFillRecordInfo"; |
| | | String CREATE_CALL_SMS_NOTICE_TASK = API_PREFIX + "/createCallSmsNoticeTask"; |
| | |
| | | @RequestParam("day") String day); |
| | | |
| | | /** |
| | | * 智能外呼定时创建任务执行器--一直未接通,一直未呼叫的水库 |
| | | * @param isOver |
| | | * @param taskScheduleTime |
| | | * @param personNumber |
| | | * @param day |
| | | * @return |
| | | */ |
| | | @GetMapping(CREATE_OUT_CALL_TASK_JOB_HANDLER_BY_NOT_CALL) |
| | | List<String> createOutCallTaskJobHandlerByNotCall(@RequestParam("isOver") String isOver, |
| | | @RequestParam("taskScheduleTime") String taskScheduleTime, |
| | | @RequestParam("personNumber") String personNumber, |
| | | @RequestParam("day") String day); |
| | | |
| | | /** |
| | | * 测试 |
| | | * @param isOver |
| | | * @param taskScheduleTime |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<String> createOutCallTaskJobHandlerByNotCall(String isOver, String taskScheduleTime, String personNumber, String day) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String testOutCall(String isOver, String taskScheduleTime, String personNumber, String day) { |
| | | return null; |
| | | } |
| | |
| | | return callService.createCallTaskByParam(map); |
| | | } |
| | | |
| | | @Override |
| | | @GetMapping(CREATE_OUT_CALL_TASK_JOB_HANDLER_BY_NOT_CALL) |
| | | public List<String> createOutCallTaskJobHandlerByNotCall(String isOver, String taskScheduleTime, String personNumber, String day) { |
| | | Map<String, Object> map = new HashMap<>(4); |
| | | map.put("isOver",isOver); |
| | | map.put("taskScheduleTime",taskScheduleTime); |
| | | map.put("personNumber",personNumber); |
| | | map.put("day",day); |
| | | // 创建定时任务并返回 |
| | | return callService.createCallTaskByParamByNotCall(map); |
| | | } |
| | | |
| | | /** |
| | | * 测试 |
| | | * @param isOver |
| | |
| | | List<CallTaskResultVO> getCallResultListTemp(@Param("page") IPage<CallTaskResultVO> page, |
| | | @Param("callTaskResult") CallTaskResultVO callTaskResult, |
| | | @Param("list") List<String> list); |
| | | |
| | | /** |
| | | * 查询从未接通和从未呼叫的水库 |
| | | * @return |
| | | */ |
| | | @DS("ztznwh") |
| | | @InterceptorIgnore(tenantLine = "true") |
| | | List<Scene> getNotCallOrCallNotConnect(); |
| | | } |
| | |
| | | order by ctr."gmt_create" desc |
| | | </select> |
| | | |
| | | <!--查询从未接通和从未呼叫的水库--> |
| | | <select id="getNotCallOrCallNotConnect" resultType="cn.gistack.sm.intelligentCall.entity.Scene"> |
| | | ( |
| | | select b."guid" as waterCode,b."name" as waterName,c."user_name" as username, |
| | | c."user_phone" as phone,c."user_phone" as userId from ( |
| | | select * from SJZT_MD."att_res_base" arb right join ( |
| | | select e.* from ( |
| | | select JSON_VALUE("call_task_callee_content",'$."$水库编码$"') as waterCode |
| | | from "SJZT_ODS"."call_task_callee" where date_format("gmt_create",'%Y-%m-%d') >='2023-05-01' group by JSON_VALUE("call_task_callee_content",'$."$水库编码$"') |
| | | ) e left join |
| | | |
| | | ( |
| | | select waterCode from ( |
| | | select a.*,b."callee_number",b."call_result",c.id from ( |
| | | select "call_id", |
| | | JSON_VALUE("call_task_callee_content",'$."$水库编码$"') as waterCode |
| | | from "SJZT_ODS"."call_task_callee" |
| | | where date_format("gmt_create",'%Y-%m-%d') >='2023-05-01' |
| | | ) a left join "SJZT_ODS"."call_task_result" b on a."call_id" = b."call_id" |
| | | left join "YWXT".sm_call_not_fill_record c on c.call_id = a."call_id" |
| | | where ("call_result" = '200000' or (b."call_result"!='200000' and c.id is not null)) |
| | | |
| | | ) d group by waterCode |
| | | ) f on e.waterCode = f.waterCode |
| | | where f.waterCode is null |
| | | )a on arb."guid" = a.waterCode) b |
| | | LEFT JOIN SJZT_MD."att_res_manage_person" c ON b."guid" = c."res_guid" and c."type" = 5 |
| | | where "user_phone" is not null |
| | | order by b."interior_ad_guid" |
| | | ) |
| | | union |
| | | ( |
| | | select |
| | | e."code" as waterCode,e."name" as waterName,e."user_name" as username, |
| | | e."user_phone" as phone,e."user_phone" as userId |
| | | from ( |
| | | select b."code",b."name",b."res_reg_code",b."eng_scal",c."user_name", |
| | | c."user_phone",aab.* |
| | | from ( |
| | | select * from SJZT_MD."att_res_base" arb left join |
| | | |
| | | ( |
| | | select JSON_VALUE("call_task_callee_content",'$."$水库编码$"') as waterCode from "SJZT_ODS"."call_task_callee" |
| | | where date_format("gmt_create",'%Y-%m-%d') >='2023-05-01' |
| | | group by JSON_VALUE("call_task_callee_content",'$."$水库编码$"') |
| | | ) a on arb."guid" = a.waterCode |
| | | where waterCode is null) b |
| | | LEFT JOIN SJZT_MD."att_res_manage_person" c ON b."guid" = c."res_guid" and c."type" = 5 |
| | | left join "SJZT_MD"."att_ad_base" aab on aab."guid" = b."interior_ad_guid" |
| | | order by b."interior_ad_guid" ) e |
| | | left join "SJZT_MD"."att_ad_base" aab on aab."ad_code" = e."p_ad_code" |
| | | where e."user_phone" is not null |
| | | ) |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | List<String> createCallTaskByParam(Map<String, Object> params); |
| | | |
| | | /** |
| | | * 根据条件自动创建外呼任务--一直未接通,一直未呼叫的水库 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | List<String> createCallTaskByParamByNotCall(Map<String, Object> params); |
| | | |
| | | |
| | | |
| | | /** |
| | | * 智能外呼呼叫前一天未接通人员 |
| | | * @param map 包含调度时间 |
| | | * @return |
| | |
| | | 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:ss")) + "智能外呼";; |
| | | 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(); |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据条件自动创建外呼任务--一直未接通,一直未呼叫的水库 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<String> createCallTaskByParamByNotCall(Map<String, Object> params) { |
| | | // 常规任务,每天上午11点打150人,下午2点打11点未接人员,下午5点打下午2点未接通人员 |
| | | String redisOneKey = bladeRedis.get(CallConstant.call_task_key); |
| | | if (null==redisOneKey){ |
| | | List<String> stringList = everydayCallByNotCall(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 |
| | |
| | | } |
| | | // 返回 |
| | | return stringList; |
| | | } |
| | | |
| | | /** |
| | | * 日常外呼任务创建--从未接通和从未呼叫的水库 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | private List<String> everydayCallByNotCall(Map<String, Object> params) { |
| | | // 查询从未接通和从未呼叫的水库 |
| | | List<Scene> totalList = callTaskMapper.getNotCallOrCallNotConnect(); |
| | | // 取出随机的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); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | /** |
| | | * 将 jsonArray 取出手机号得到新的集合 |
| | | * 将 jsonArray 取出手机号得到新的集合--超汛限场景 |
| | | * @param jsonArray |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 智能外呼定时创建任务执行器--一直未接通,一直未呼叫的水库 |
| | | * @param param |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | @XxlJob("createOutCallTaskJobHandlerByNotCall") |
| | | public ReturnT<String> createOutCallTaskJobHandlerByNotCall(String param){ |
| | | XxlJobLogger.log("开始执行任务..."); |
| | | JSONObject jsonParam = JSON.parseObject(param); |
| | | String isOver = jsonParam.getString("isOver"); |
| | | String taskScheduleTime = jsonParam.getString("taskScheduleTime"); |
| | | String personNumber = jsonParam.getString("personNumber"); |
| | | String day = jsonParam.getString("day"); |
| | | // 创建外呼任务 |
| | | List<String> result = outCallClient.createOutCallTaskJobHandlerByNotCall(isOver,taskScheduleTime,personNumber, day); |
| | | XxlJobLogger.log("任务响应结果..." + result); |
| | | // 创建外呼短信发送任务记录 |
| | | Boolean flag = createCallSmsNoticeTaskByEvery(result); |
| | | XxlJobLogger.log("外呼短信通知任务创建结果:" + flag); |
| | | XxlJobLogger.log("结束自动创建任务..."); |
| | | return ReturnT.SUCCESS; |
| | | } |
| | | |
| | | /** |
| | | * 创建外呼短信发送任务记录--日常定时任务 |
| | | * @param result |
| | | */ |