zhongrj
2023-06-19 07d02c7766ee86922c190c8ea170b352df485050
外呼短信发送修改
4 files modified
186 ■■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/constant/MinConstant.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java 131 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/OutCallXxlJob.java 31 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/SendSmsXxlJob.java 19 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/constant/MinConstant.java
@@ -21,4 +21,9 @@
     * 前缀(未接电话发送短息记录通知),用于填写水库信息
     */
    public static final String fill_info_prefix = "blade:alerts:fill:info:";
    /**
     * 已发短息人员redis 过期时间(秒),暂定3小时
     */
    public static final Long is_send_time = 3 * 60 * 60L;
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
@@ -22,6 +22,7 @@
import cn.gistack.sm.intelligentCall.feign.OutCallClient;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import org.jetbrains.annotations.NotNull;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.StringUtil;
@@ -117,11 +118,7 @@
            // 组装数据
            String[][] dyns = new String[][]{{smsRequestTemplate.getTitle()}, {row}};
            //请求参数
            DynSMSSendRequest sendRequest = new DynSMSSendRequest();
            sendRequest.setTemplateId(smsTemplate.getTemplateId());
            sendRequest.setDynData(dyns);
            // 发送
            ComResult<DynSMSSendDataResult> resultComResult = SmsUtils.dynSendMethod(sendRequest);
            ComResult<DynSMSSendDataResult> resultComResult = sendDynSMSSendDataResultComResult(smsTemplate.getTemplateId(), dyns);
            SmsRecord smsRecord = new SmsRecord();
            if (null != smsResult){
@@ -253,17 +250,8 @@
            dyns[rowNum++] = cols;
        }
        //请求参数
        DynSMSSendRequest sendRequest = new DynSMSSendRequest();
        sendRequest.setTemplateId(templateId);
        sendRequest.setDynData(dyns);
        // 发送
        ComResult<DynSMSSendDataResult> resultComResult = SmsUtils.dynSendMethod(sendRequest);
        SMSSendRequest request = new SMSSendRequest();
        request.setTemplateId(templateId);
        request.setMessageContent(content);
        request.setUserNumber("");
        // 先保存结果记录
        SmsResult smsResult = saveSendResult(request, rows.length);
        ComResult<DynSMSSendDataResult> resultComResult = sendDynSMSSendDataResultComResult(templateId, dyns);
        SmsResult smsResult = getSaveSmsResult(templateId, rows, content);
        if (null != smsResult){
            List<SmsRecord> list = new ArrayList<>();
            // 遍历保存
@@ -369,12 +357,6 @@
                StringBuilder builder = new StringBuilder();
                // 遍历
                for (Map<String, Object> map : newList) {
//                    String callId = null;
//                    try {
//                        callId = URLEncoder.encode("callId=" + map.get("callId"), "UTF-8");
//                    } catch (UnsupportedEncodingException e) {
//                        e.printStackTrace();
//                    }
                    builder.append(map.get("userPhone") + ",")
                        .append(time + ",")
                        .append(map.get("waterName") + ",")
@@ -392,18 +374,8 @@
                    String[] cols = row.split(",");
                    dyns[rowNum++] = cols;
                }
                //请求参数
                DynSMSSendRequest sendRequest = new DynSMSSendRequest();
                sendRequest.setTemplateId(templateId);
                sendRequest.setDynData(dyns);
                // 发送
                ComResult<DynSMSSendDataResult> resultComResult = SmsUtils.dynSendMethod(sendRequest);
                SMSSendRequest request = new SMSSendRequest();
                request.setTemplateId(templateId);
                request.setMessageContent("");
                request.setUserNumber("");
                // 先保存结果记录
                SmsResult smsResult = saveSendResult(request, rows.length);
                ComResult<DynSMSSendDataResult> resultComResult = sendDynSMSSendDataResultComResult(templateId, dyns);
                SmsResult smsResult = getSaveSmsResult(templateId, rows, "");
                if (null != smsResult) {
                    List<SmsRecord> smsRecordList = new ArrayList<>();
                    Pattern compile = Pattern.compile("[^0-9]");
@@ -412,31 +384,13 @@
                    Long validTime = time.contains("分钟") ? 60L * result : 60L * 60 * result;
                    // 遍历保存
                    for (Map<String, Object> map : newList) {
                        SmsRecord smsRecord = new SmsRecord();
                        smsRecord.setId(IdWorker.getId());
                        smsRecord.setTel(map.get("userPhone").toString());
                        String callId = null;
//                        try {
//                            callId = URLEncoder.encode("callId=" + map.get("callId"), "UTF-8");
//                        } catch (UnsupportedEncodingException e) {
//                            e.printStackTrace();
//                        }
                        // 内容处理
                        String s = smsTemplate.getContent().replaceAll("\\{.+?\\}", "%s");
                        // 拼接内容
                        String arrString = time + "," +
                            map.get("waterName").toString() + "," +
                            MinConstant.fillWaterInfoUrl + "?" + "callId=" + map.get("callId") ;
                        // 格式转换
                        String format = String.format(s, arrString.split(","));
                        smsRecord.setContent(format);
                        smsRecord.setTemplateId(templateId);
                        smsRecord.setResultId(smsResult.getId());
                        smsRecord.setResponseStatus(resultComResult.getCode().toString());
                        smsRecord.setResponseMsg(resultComResult.getMsg());
                        // 保存redis
                        bladeRedis.setEx(MinConstant.is_send_prefix + map.get("callId").toString(), taskId, 2 * 60 * 60L);
                        // 已发送短信的人员对应呼叫id的过期时间
                        bladeRedis.setEx(MinConstant.is_send_prefix + map.get("callId").toString(), taskId, MinConstant.is_send_time);
                        // 填报过期时间
                        bladeRedis.setEx(MinConstant.fill_info_prefix + map.get("callId").toString(), taskId, validTime);
                        // 封装短息记录数据
                        SmsRecord smsRecord = getSmsRecord(time, templateId, smsTemplate, resultComResult, smsResult, map);
                        // 加入集合
                        smsRecordList.add(smsRecord);
                    }
@@ -451,6 +405,69 @@
    }
    /**
     * 保存短信发送结果
     * @param templateId
     * @param rows
     * @param content
     * @return
     */
    private SmsResult getSaveSmsResult(String templateId, String[] rows, String content) {
        SMSSendRequest request = new SMSSendRequest();
        request.setTemplateId(templateId);
        request.setMessageContent(content);
        request.setUserNumber("");
        // 先保存结果记录
        return saveSendResult(request, rows.length);
    }
    /**
     * 动态批量发送短信
     * @param templateId
     * @param dyns
     * @return
     */
    private ComResult<DynSMSSendDataResult> sendDynSMSSendDataResultComResult(String templateId, String[][] dyns) {
        //请求参数
        DynSMSSendRequest sendRequest = new DynSMSSendRequest();
        sendRequest.setTemplateId(templateId);
        sendRequest.setDynData(dyns);
        // 发送
        return SmsUtils.dynSendMethod(sendRequest);
    }
    /**
     * 短信记录数据处理
     * @param time
     * @param templateId
     * @param smsTemplate
     * @param resultComResult
     * @param smsResult
     * @param map
     * @return
     */
    @NotNull
    private SmsRecord getSmsRecord(String time, String templateId, SmsTemplate smsTemplate, ComResult<DynSMSSendDataResult> resultComResult, SmsResult smsResult, Map<String, Object> map) {
        SmsRecord smsRecord = new SmsRecord();
        smsRecord.setId(IdWorker.getId());
        smsRecord.setTel(map.get("userPhone").toString());
        // 内容处理
        String s = smsTemplate.getContent().replaceAll("\\{.+?\\}", "%s");
        // 拼接内容
        String arrString = time + "," +
            map.get("waterName").toString() + "," +
            MinConstant.fillWaterInfoUrl + "?" + "callId=" + map.get("callId") ;
        // 格式转换
        String format = String.format(s, arrString.split(","));
        smsRecord.setContent(format);
        smsRecord.setTemplateId(templateId);
        smsRecord.setResultId(smsResult.getId());
        smsRecord.setResponseStatus(resultComResult.getCode().toString());
        smsRecord.setResponseMsg(resultComResult.getMsg());
        // 返回
        return smsRecord;
    }
    /**
     * 校验手机号码
     */
    public static boolean validator(String phone) {
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/OutCallXxlJob.java
@@ -48,15 +48,16 @@
        List<String> result = outCallClient.createOutCallTaskJobHandler(isOver,taskScheduleTime,personNumber, day);
        XxlJobLogger.log("任务响应结果..." + result);
        if (result.get(2).equals("true")) {
            Integer jobId = 11;
            // 获取任务id
            String taskId = result.get(1);
            // 修改定时任务
            XxlJobInfo jobInfo = xxlJobInfoService.getById(11);
            XxlJobInfo jobInfo = xxlJobInfoService.getById(jobId);
            // 解析参数
            Map mapParams = (Map) jobInfo.getExecutorParam();
            String time = mapParams.get("time").toString();
            XxlJobInfoVO xxlJobInfo = new XxlJobInfoVO();
            xxlJobInfo.setId(11);
            xxlJobInfo.setId(jobId);
            Map<String, Object> map = new HashMap<>(2);
            map.put("taskId", taskId);
            map.put("time", time);
@@ -78,13 +79,37 @@
     * @return
     * @throws Exception
     */
    @XxlJob("createOutCallTaskByNotConnectJobHandler_test_0619")
    @XxlJob("createOutCallTaskByNotConnectJobHandler")
    public ReturnT<String> createOutCallTaskByNotConnectJobHandler(String param){
        XxlJobLogger.log("开始执行智能外呼未接通呼叫任务...");
        JSONObject jsonParam = JSON.parseObject(param);
        String taskScheduleTime = jsonParam.getString("taskScheduleTime");
        // 创建外呼任务
        List<String> result = outCallClient.createOutCallTaskByNotConnectJobHandler(taskScheduleTime);
        if (null != result && result.size() > 0) {
            if (result.get(2).equals("true")) {
                Integer jobId = 14;
                // 获取任务id
                String taskId = result.get(1);
                // 修改定时任务(前一天未接通今天又呼叫未接的短息通知)
                XxlJobInfo jobInfo = xxlJobInfoService.getById(jobId);
                // 解析参数
                Map mapParams = (Map) jobInfo.getExecutorParam();
                String time = mapParams.get("time").toString();
                XxlJobInfoVO xxlJobInfo = new XxlJobInfoVO();
                xxlJobInfo.setId(jobId);
                Map<String, Object> map = new HashMap<>(2);
                map.put("taskId", taskId);
                map.put("time", time);
                xxlJobInfo.setExecutorParam(map);
                Object o = xxlJobInfoService.updateXxlJobById(xxlJobInfo);
                if (Boolean.parseBoolean(o.toString())) {
                    XxlJobLogger.log("外呼未接通短信通知定时任务修改成功!任务ID:" + taskId);
                } else {
                    XxlJobLogger.log("外呼未接通短信通知定时任务修改失败!任务ID:" + taskId);
                }
            }
        }
        XxlJobLogger.log("任务响应结果..." + result);
        XxlJobLogger.log("结束自动创建任务...");
        return ReturnT.SUCCESS;
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/SendSmsXxlJob.java
@@ -7,6 +7,7 @@
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -29,12 +30,28 @@
     */
    @XxlJob("sendSmsByOutCallNotConnect")
    public ReturnT<String> createOutCallTaskJobHandler(String param){
        return getStringReturnT(param);
    }
    /**
     * 外呼前一天未接通呼叫又未接通-发送短信(调度时间不一致,参数不一致)
     * @param param
     * @return
     * @throws Exception
     */
    @XxlJob("sendSmsByBeforeOneDayOutCallNotConnect")
    public ReturnT<String> sendSmsByBeforeOneDayOutCallNotConnect(String param){
        return getStringReturnT(param);
    }
    @NotNull
    private ReturnT<String> getStringReturnT(String param) {
        XxlJobLogger.log("开始执行任务...");
        JSONObject jsonParam = JSON.parseObject(param);
        String taskId = jsonParam.getString("taskId");
        String time = jsonParam.getString("time");
        // 外呼未接通-发送短信
        Object result = smsRecordClient.sendSmsByOutCallNotConnect(taskId,time);
        Object result = smsRecordClient.sendSmsByOutCallNotConnect(taskId, time);
        XxlJobLogger.log("任务响应结果:" + result);
        XxlJobLogger.log("结束自动创建任务...");
        return ReturnT.SUCCESS;