陈昶聿
6 天以前 a86bfd0bdad90f87c0c3b1b0ce9d2db91841a6d2
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -11,10 +11,8 @@
import com.ruoyi.common.enums.MsgLSEnum;
import com.ruoyi.common.enums.ServiceFromEnum;
import com.ruoyi.common.enums.WxGZHEnum;
import com.ruoyi.common.utils.HttpUtil;
import com.ruoyi.common.utils.OkHttpExample;
import com.ruoyi.common.utils.RSAPublicKeyExample;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.*;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.common.utils.sms.smsUtils;
import com.ruoyi.quartz.service.ICollectHISService;
@@ -336,7 +334,6 @@
                    serviceSLTDInhospReqVO.setStartHeadTime(nowTime);
                    serviceSLTDInhospReqVO.setStartTailTime(nowTime);
                    List<String> listStr = new ArrayList<>();
//                    list.add("FH0108.02");
                    listStr.add("FH0109.26");
                    serviceSLTDInhospReqVO.setStatusList(listStr);
                    log.debug("【dealHisData】省立同德“入院”采集数据入参:{}", serviceSLTDInhospReqVO);
@@ -373,9 +370,6 @@
                    serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
                    log.debug("【dealHisData】省立同德“出院”束采集数据,院区:{}", cid);
                }
//                SysConfig sysConfig = sysConfigs.get(0);
//                sysConfig.setConfigValue(nowTime);
//                configService.updateConfig(sysConfig);
            } catch (Exception e) {
                log.error("【dealHisData】省立同德数据采集异常", e);
            }
@@ -472,11 +466,11 @@
     * 处理补偿任务
     */
    public void compensateTask() {
        //获取到sendstate=3 并且 visit_time为今天的subtask
        //获取到sendstate=3 并且 visit_time为小于等于今天的subtask
        ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
        serviceSubtaskVO.setSendstate(3L);
        serviceSubtaskVO.setVisitTime(new Date());
        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.getCompensateServiceSubtaskList(serviceSubtaskVO);
        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
            //根据当前的执行方式,获取下一种执行方式
            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
@@ -628,6 +622,8 @@
            String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key);
            log.info("【sfHandlle】处理短信长期任务,患者ID:{}", serviceSubtask.getPatid());
            boolean dateToday = isDateToday(serviceSubtask.getVisitTime());
            //记录当前时间 如果失败记录当前时间
            LocalDateTime now = LocalDateTime.now();
            if (dateToday) {
                try {
                    String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
@@ -653,6 +649,9 @@
                        if (serviceSubtask.getType().equals("1"))
                            sendMagParam.setUrl(localIP + ":" + req_path + "/sf?p=" + format);
                        sendMagParam.setContent("您好,邀请您填写出院调查表,请点击" + sendMagParam.getUrl() + "填写。感谢您配合!");
                        if (active.equals("xh")) {
                            sendMagParam.setContent("【新华医院】您好,邀请您填写出院调查表,请点击" + sendMagParam.getUrl() + "填写。感谢您配合!");
                        }
                    } else {
                        HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid());
                        if (heLibrary.getHetype().equals("1")) {
@@ -666,7 +665,9 @@
                        } else if (heLibrary.getHetype().equals("2")) {
                            //通知
                            sendMagParam.setPhone(serviceSubtask.getPhone());
                            sendMagParam.setContent(heLibrary.getPreachcontent());
                            // 替换文本内容中的变量
                            String content = getObject(serviceSubtask, heLibrary.getPreachcontent());
                            sendMagParam.setContent(content);
                        }
                    }
@@ -696,7 +697,7 @@
                        log.info("-----------map的值为:{}", msgInfo);
                        String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid(), msgInfo.get("tokenUrl"));
                        if (ObjectUtils.isNotEmpty(msgInfo) && StringUtils.isEmpty(msgInfo.get("address"))) {
                            setSuccessPreachForm(serviceSubtask, sendPreachform, "短信发送失败,该机构没有配置短信地址", "5");
                            setSuccessPreachForm(serviceSubtask, sendPreachform, "短信发送失败,该机构没有配置短信地址, 时间:" + now, "5");
                            return;
                        }
                        log.info("【sfHandlle】丽水短信发送,地址:{},参数:{},机构ID:{}", msgInfo.get("address"), sendMagParam, serviceSubtask.getOrgid());
@@ -712,8 +713,13 @@
                        log.info("sltd进来了吗?{}   ,---sendMagParam.getContent()的参数为:{}", active, sendMagParam.getContent());
                        //省立同德的短信发送方式
                        String data = MessageSend.sendMsg(sendMagParam.getContent(), "6", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
                        if (StringUtils.isNotEmpty(data) && data.contains("result=0")) {
                            isSuccess = "true";
                        if (StringUtils.isNotEmpty(data)) {
                            ObjectMapper mapper = new ObjectMapper();
                            JsonNode root = mapper.readTree(data);
                            String status = root.get("result").get(0).get("status").asText();
                            if (status.equals("00000")) {
                                isSuccess = "true";
                            }
                        }
                    } else if (active.equals("hzszlyy")) {//市一医院
                        String content = sendMagParam.getContent().replace("【新华医院】", "");
@@ -740,17 +746,17 @@
                    serviceSubtask.setSendstate(3L);
                    if (StringUtils.isNotEmpty(isSuccess) && isSuccess.equals("true")) {
                        serviceSubtask.setResult("success");
                        serviceSubtask.setRemark("短信发送成功");
                        serviceSubtask.setRemark(serviceSubtask.getRemark() + "," + "短信发送成功");
                        setSuccessPreachForm(serviceSubtask, sendPreachform, "短信发送成功", "2");
                    } else {
                        serviceSubtask.setResult("error");
                        serviceSubtask.setRemark("短信发送失败");
                        setSuccessPreachForm(serviceSubtask, sendPreachform, "短信发送失败", "5");
                        serviceSubtask.setRemark(serviceSubtask.getRemark() + "," + "短信发送失败" + now);
                        setSuccessPreachForm(serviceSubtask, sendPreachform, "短信发送失败" + now, "5");
                    }
                } catch (Exception e) {
                    String guid = UUID.randomUUID().toString();
                    log.error("【sfHandlle】长期任务短信发送失败,原因:{},GUID:{}", e.getMessage(), guid);
                    setSuccessPreachForm(serviceSubtask, sendPreachform, "长期任务短信发送失败:系统错误", "5");
                    log.error("【sfHandlle】长期任务短信发送失败,原因:{},GUID:{}, 时间: {}", e.getMessage(), guid, now);
                    setSuccessPreachForm(serviceSubtask, sendPreachform, "长期任务短信发送失败:系统错误, 时间: " + now, "5");
                }
            }
@@ -768,6 +774,8 @@
                    //获取微信公众号请求信息根据机构ID
                    List<String> wxqqxx = WxGZHEnum.getDescByCode(patArchive.getOrgid());
                    //市一医院 不校验
                    if (CollectionUtils.isEmpty(wxqqxx) || wxqqxx.size() < 4) {
                        setSuccessPreachForm(serviceSubtask, sendPreachform, "【公众号】该机构的公众号配置信息不全,无法通过公众号发送", "4");
                        return;
@@ -778,9 +786,26 @@
                        return;
                    }
                    String wxCode = "";
                    if (active.equals("hzszlyy")) {//市一医院
                        String urlTemp = "http://192.200.54.14:5003/sfjk/SendMessage?sfzh=" + serviceSubtask.getSfzh() + "&title=您好,邀请您填写出院调查表,请点击填写。&content=您好,邀请您填写出院调查表,请点击填写。&phone=" + patArchive.getTelcode() + "&url=" + url + "&key=ff76f8904f5f32b5ee1739e8ea46e60g";
                        HttpUtils.sendGet(urlTemp);
                    //市一医院
                    if (active.equals("hzszlyy")) {
                        //处理中文乱码问题
                        /**String title = URLEncoder.encode("您好,邀请您填写出院调查表,请点击填写。", StandardCharsets.UTF_8.toString());
                         String content = URLEncoder.encode("您好,邀请您填写出院调查表,请点击填写。", StandardCharsets.UTF_8.toString());
                         String encodedUrl = URLEncoder.encode(url, StandardCharsets.UTF_8.toString());
                         String urlTemp = "http://192.200.54.14:5003/sfjk/SendMessage?sfzh=" + serviceSubtask.getSfzh() +
                         "&title=" + title +
                         "&content=" + content +
                         "&phone=" + patArchive.getTelcode() +
                         "&url=" + encodedUrl +
                         "&key=ff76f8904f5f32b5ee1739e8ea46e60g";
                         //                        HttpUtils.sendGet(urlTemp);
                         String sendMsg = "";
                         sendMsg = HttpUtils.sendPost(urlTemp);
                         log.info(sendMsg); **/
                        wxCode = smsUtils.sendChat(url, patArchive.getTelcode(), serviceSubtask.getSfzh());
                        log.info(wxCode);
                    } else {
                        wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskDesc(), patArchive.getTelcode(), serviceSubtask.getSendname(), patArchive.getPatidHis(), wxqqxx);
                    }
@@ -851,7 +876,15 @@
        // 情况1:currentPreachform为空,取sort为1的preachform
        if (StringUtils.isEmpty(serviceSubtask.getCurrentPreachform())) {
            return serviceSubtaskPreachforms.stream().filter(item -> item.getSort() == 1L).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse(null);
            String firstPreachform = serviceSubtaskPreachforms.stream().filter(item -> item.getSort() == 1L).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse(null);
            //更新一下当前发送时间
            if (StringUtils.isNotEmpty(firstPreachform)) {
                serviceSubtaskPreachform.setPreachform(firstPreachform);
                serviceSubtaskPreachform.setCurrentSendTime(new Date());
                serviceSubtaskPreachformMapper.updateSSPByCondition(serviceSubtaskPreachform);
            }
            return firstPreachform;
        }
        // 情况2:currentPreachform不为空,找下一个sort
@@ -881,7 +914,6 @@
            // 当sort等于列表size时,下一个sort为-1
            Long nextSort = currentSort.get() + 1;
            //如果当前的发送方式不为空,并且开始准备要用下一种方式发送了,那当前的肯定没有发送成功,需要设置失败
            // (这里主要是,人工如果没有随访,然后到公众号的时候,就不会再去管人工是否成功,人工的状态会一直卡在2的状态上)
            if (StringUtils.isNotEmpty(serviceSubtask.getCurrentPreachform())) {
@@ -889,7 +921,34 @@
            }
            // 找到下一个sort对应的preachform
            return serviceSubtaskPreachforms.stream().filter(item -> nextSort.equals(item.getSort())).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse("-1");
            String nextPreachform = serviceSubtaskPreachforms.stream().filter(item -> nextSort.equals(item.getSort())).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse("-1");
            //微信已发送、已领取跳过短信发送,进行人工 -丽水中医院
            if (active.equals("47231022633110211A2101")) {
                //获取当前发送方式
                ServiceSubtaskPreachform currentServiceSubtaskPreachform = serviceSubtaskPreachforms.stream().filter(item -> item.getSort().equals(currentSort.get())).findFirst().orElse(new ServiceSubtaskPreachform());
                //当前发送方式为微信的,且下一发送方式为短信的,微信发送状态为已发送、已领取的,跳过短信步骤
                if (currentServiceSubtaskPreachform.getPreachform().equals("5")
                        && (currentServiceSubtaskPreachform.getSendstate().equals("2")
                        || currentServiceSubtaskPreachform.getSendstate().equals("3"))) {
                    if(StringUtils.isNotEmpty(nextPreachform) && nextPreachform.equals("2")){
                        log.error("【sfHandlle】微信已发送,短信不发送,跳转人工");
                        setSuccessPreachForm(serviceSubtask, "-1", "微信已发送,短信不发送,跳转人工", "6");
                        //跳过短信,执行下一步
                        Long newNextSort = nextSort + 1;
                        //找到短信再下一个sort对应的preachform
                        nextPreachform = serviceSubtaskPreachforms.stream().filter(item -> newNextSort.equals(item.getSort())).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse("-1");
                    }
                }
            }
            //更新一下当前发送时间
            if (StringUtils.isNotEmpty(nextPreachform)) {
                serviceSubtaskPreachform.setCurrentSendTime(new Date());
                serviceSubtaskPreachform.setPreachform(nextPreachform);
                serviceSubtaskPreachformMapper.updateSSPByCondition(serviceSubtaskPreachform);
            }
            return nextPreachform;
        }
        return null;
@@ -1024,10 +1083,10 @@
            serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
            serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
            serviceSubtaskPreachform.setSendstate(failSendstate);
            serviceSubtaskPreachform.setCurrentSendTime(new Date());
            serviceSubtaskPreachformMapper.updateSSPByCondition(serviceSubtaskPreachform);
            return true;
        }
        ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
        serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
@@ -1082,4 +1141,47 @@
        serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
        return true;
    }
    /**
     * 通配符变量替换
     *
     * @param serviceSubtask
     * @param scriptContent
     * @return
     */
    private String getObject(ServiceSubtask serviceSubtask, String scriptContent) {
        Map<String, Map<String, String>> param = getParam(serviceSubtask.getTaskid());
        for (Map<String, String> map : param.values()) {
            for (String key : map.keySet()) {
                scriptContent = scriptContent.replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : "");
            }
        }
        if (StringUtils.isEmpty(scriptContent)) {
            return scriptContent;
        }
        scriptContent = scriptContent.replace("${name}", StringUtils.isNotEmpty(serviceSubtask.getSendname()) ? serviceSubtask.getSendname() : "");
        scriptContent = scriptContent.replace("${dzz}", StringUtils.isNotEmpty(serviceSubtask.getAddr()) ? serviceSubtask.getAddr() : "");
        scriptContent = scriptContent.replace("${phone}", StringUtils.isNotEmpty(serviceSubtask.getTelcode()) ? serviceSubtask.getTelcode() : "");
        return scriptContent;
    }
    /**
     * 获取任务里的通配符
     *
     * @param taskId
     * @return
     */
    private Map<String, Map<String, String>> getParam(Long taskId) {
        ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(taskId);
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, Map<String, String>> serviceTaskMap = null;
        try {
            serviceTaskMap = objectMapper.readValue(serviceTask.getTextParam(), Map.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return serviceTaskMap;
    }
}