liusheng
2025-04-27 60a0f24ddd8ddfc21b23750df0990f9089a1f0f4
ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
@@ -13,6 +13,7 @@
import com.smartor.common.SendService;
import com.smartor.config.RobotPhoneUtils;
import com.smartor.domain.*;
import com.smartor.mapper.PatArchiveMapper;
import com.smartor.mapper.ServiceSubtaskMapper;
import com.smartor.mapper.ServiceTaskMapper;
import com.smartor.service.IBaseSmsaccountService;
@@ -28,6 +29,7 @@
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@@ -64,7 +66,7 @@
    private ServiceTaskMapper ivrTaskMapper;
    @Autowired
    private SendService sendService;
    private PatArchiveMapper patArchiveMapper;
    @Autowired
    private RedisCache redisCache;
@@ -89,6 +91,9 @@
    @Value("${xhsmsPath}")
    private String xhsmsPath;
    @Value("${appid}")
    private String appid;
    // 创建固定大小的线程池
    private static final ExecutorService executorService = Executors.newFixedThreadPool(10);
@@ -154,10 +159,11 @@
        log.error("进任务了吗?{}", commonTaskcallMQ);
        //判断一下commonTaskcallMQ中的stopstate是否与ivr_task中的一致,不一致,则说明是暂停了
        ServiceTask ivrTask1 = ivrTaskMapper.selectServiceTaskByTaskid(commonTaskcallMQ.getTaskid());
        if (ivrTask1.getStopState() != commonTaskcallMQ.getStopState()) {
            //将消息从队列中剔除
            return;
        }
//        if (ivrTask1.getStopState() != commonTaskcallMQ.getStopState()) {
//            //将消息从队列中剔除
//            return;
//        }
        if (StringUtils.isNotEmpty(commonTaskcallMQ.getPreachform())) {
            //如何任务发送方式不为空
@@ -183,6 +189,9 @@
                ivrTaskcall.setTaskid(commonTaskcallMQ.getTaskid());
                ivrTaskcall.setSendstate(1L);
                List<ServiceSubtask> selectServiceSubtaskList = ivrTaskcallMapper.selectServiceSubtaskList(ivrTaskcall);
                if (CollectionUtils.isEmpty(selectServiceSubtaskList)) {
                    continue;
                }
                if (descByCode.equals("电话")) {
                    for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
                        //先判断一下,subIds是否为空,如果不为空,只执行subIds里的患者
@@ -419,87 +428,86 @@
                        try {
                            SendMagParam sendMagParam = new SendMagParam();
                            sendMagParam.setType("5");
                            sendMagParam.setUrl(ip + ":" + req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + ivrTask1.getTaskName() + "&param5=false");
                            log.info("链接完整路径:{}", ip + ":" + req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + ivrTask1.getTaskName() + "&param5=false");
                            //这个模板ID先写死,后面做成可选
                            sendMagParam.setTmpCode("oG3pJHPVWpE81DmZsua_2tKwgJ97r0qz37z56ns7NB4");
                            Map map = new HashMap();
                            map.put("first", ivrTask1.getTaskName());
                            sendMagParam.setContent(JSON.toJSONString(map));
                            sendMagParam.setOpenid(serviceSubtask.getOpenid());
                            Boolean aBoolean = sendService.sendMsg(sendMagParam);
                            String url = null;
////                            if (type == 1) {
////                                url = ip + ":" + req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false";
////                            } else if (type == 2) {
////                                url = ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false";
////                            } else if (type == 3) {
////                                url = ip + ":" + req_path + "/outsideChainxj?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false";
////                            }
//                            if (type == 1) {
//                                //随访
//                                ServiceOutPath serviceOutPath = new ServiceOutPath();
//                                serviceOutPath.setParam1(taskId);
//                                serviceOutPath.setParam2(patid);
//                                serviceOutPath.setCreateTime(new Date());
//                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
//                                String format = String.format("%03X", serviceOutPath.getId());
//                                serviceOutPath.setRadix(format);
//                                serviceOutPath.setUpdateTime(new Date());
//                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
////                                sendMagParam.setUrl(ip + ":" + req_path + "/followvisit/particty?param1=" + taskId + "&param2=" + patid + "&param5=false");
//                                url = ip + ":" + req_path + "/sf?p=" + format;
//                            } else if (type == 2) {
//                                //问券
//                                ServiceOutPath serviceOutPath = new ServiceOutPath();
//                                serviceOutPath.setParam1(taskId);
//                                serviceOutPath.setParam2(patid);
////                                serviceOutPath.setParam3(URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()));
//                                serviceOutPath.setParam3(ivrTask1.getTaskName());
//                                serviceOutPath.setCreateTime(new Date());
//                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
//                                String format = String.format("%03X", serviceOutPath.getId());
//                                serviceOutPath.setRadix(format);
//                                serviceOutPath.setUpdateTime(new Date());
//                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
////                                sendMagParam.setUrl(ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false");
//                                url = ip + ":" + req_path + "/wt?p=" + format;
//                            } else if (type == 3) {
//                                //宣教
//                                ServiceOutPath serviceOutPath = new ServiceOutPath();
//                                serviceOutPath.setParam1(taskId);
//                                serviceOutPath.setParam2(patid);
////                                serviceOutPath.setParam3(URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()));
//                                serviceOutPath.setParam3(ivrTask1.getTaskName());
//                                serviceOutPath.setCreateTime(new Date());
//                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
//                                String format = String.format("%03X", serviceOutPath.getId());
//                                serviceOutPath.setRadix(format);
//                                serviceOutPath.setUpdateTime(new Date());
//                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
//                                url = ip + ":" + req_path + "/xj?p=" + format;
//                            }
//                            sendMagParam.setUrl(ip + ":" + req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + ivrTask1.getTaskName() + "&param5=false");
//                            log.info("链接完整路径:{}", ip + ":" + req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + ivrTask1.getTaskName() + "&param5=false");
//                            //这个模板ID先写死,后面做成可选
//                            sendMagParam.setTmpCode("oG3pJHPVWpE81DmZsua_2tKwgJ97r0qz37z56ns7NB4");
//                            Map map = new HashMap();
//                            map.put("first", ivrTask1.getTaskName());
//                            sendMagParam.setContent(JSON.toJSONString(map));
//                            sendMagParam.setOpenid(serviceSubtask.getOpenid());
//                            Boolean aBoolean = sendService.sendMsg(sendMagParam);
//
//                            String wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskDesc(), "无");
//                            Map<String, Object> map = JSONObject.parseObject(wxCode, Map.class);
//                            if (!map.isEmpty()) {
                            serviceSubtask.setResult("success");
                            serviceSubtask.setSendstate(3L);
                            if (aBoolean == false) {
                                ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
                                serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
                                serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
                                serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
                                serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
                                serviceSubtaskRecord.setPreachform("5");
                                serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
                                serviceSubtaskRecord.setRemark(map.get("msg").toString());
                                lssubIds.add(serviceSubtask.getId());
                                serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
                                continue;
                            }
//                            if (type == 1) {
//                                url = ip + ":" + req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false";
//                            } else if (type == 2) {
//                                url = ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false";
//                            } else if (type == 3) {
//                                url = ip + ":" + req_path + "/outsideChainxj?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false";
//                            }
                            String url = null;
                            Boolean aBoolean = false;
                            if (type == 1) {
                                //随访
                                ServiceOutPath serviceOutPath = new ServiceOutPath();
                                serviceOutPath.setParam1(taskId);
                                serviceOutPath.setParam2(patid);
                                serviceOutPath.setCreateTime(new Date());
                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
                                String format = String.format("%03X", serviceOutPath.getId());
                                serviceOutPath.setRadix(format);
                                serviceOutPath.setUpdateTime(new Date());
                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
                                url = ip + ":" + req_path + "/sf?p=" + format;
                            } else if (type == 2) {
                                //问券
                                ServiceOutPath serviceOutPath = new ServiceOutPath();
                                serviceOutPath.setParam1(taskId);
                                serviceOutPath.setParam2(patid);
//                                serviceOutPath.setParam3(URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()));
                                serviceOutPath.setParam3(ivrTask1.getTaskName());
                                serviceOutPath.setCreateTime(new Date());
                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
                                String format = String.format("%03X", serviceOutPath.getId());
                                serviceOutPath.setRadix(format);
                                serviceOutPath.setUpdateTime(new Date());
                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
                                url = ip + ":" + req_path + "/wt?p=" + format;
                            } else if (type == 3) {
                                //宣教
                                ServiceOutPath serviceOutPath = new ServiceOutPath();
                                serviceOutPath.setParam1(taskId);
                                serviceOutPath.setParam2(patid);
                                serviceOutPath.setParam3(ivrTask1.getTaskName());
                                serviceOutPath.setCreateTime(new Date());
                                iServiceOutPathService.insertServiceOutPath(serviceOutPath);
                                String format = String.format("%03X", serviceOutPath.getId());
                                serviceOutPath.setRadix(format);
                                serviceOutPath.setUpdateTime(new Date());
                                iServiceOutPathService.updateServiceOutPath(serviceOutPath);
                                url = ip + ":" + req_path + "/xj?p=" + format;
                            }
                            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(serviceSubtask.getPatid());
                            String wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskDesc(), null, patArchive.getName(), patArchive.getPatientno());
                            Map<String, Object> map = JSONObject.parseObject(wxCode, Map.class);
                            if (!map.isEmpty()) {
                                serviceSubtask.setResult("success");
                                serviceSubtask.setSendstate(3L);
                                if (aBoolean == false) {
                                    ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
                                    serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
                                    serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
                                    serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
                                    serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
                                    serviceSubtaskRecord.setPreachform("5");
                                    serviceSubtaskRecord.setStartTime(System.currentTimeMillis());
                                    serviceSubtaskRecord.setRemark(map.get("msg").toString());
                                    lssubIds.add(serviceSubtask.getId());
                                    serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord);
                                    continue;
                                }
                            }
                        } catch (Exception e) {
                            ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
                            serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
@@ -625,15 +633,18 @@
        return key;
    }
    private String getWXCode(String idcard, String url, String taskName, String taskDesc, String submitprompt) {
    private String getWXCode(String idcard, String url, String taskName, String taskDesc, String Medcardno, String setPatientname, String setPatientid) {
        XinHuaWXReq xinHuaWXReq = new XinHuaWXReq();
        xinHuaWXReq.setIdcard(idcard);
        xinHuaWXReq.setUrl(url);
        xinHuaWXReq.setKeyword1("浙中医大二院出院随访");
        xinHuaWXReq.setKeyword2(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
        xinHuaWXReq.setKeyword3(taskName);
        xinHuaWXReq.setKeyword4("疾病康复注意事项");
        xinHuaWXReq.setPatientid(setPatientid);
        xinHuaWXReq.setPatientname(setPatientname);
        xinHuaWXReq.setMobile(taskName);
        xinHuaWXReq.setMedcardno(Medcardno);
        xinHuaWXReq.setTitlename(taskName);
        xinHuaWXReq.setContent(taskDesc);
        xinHuaWXReq.setAppid(appid);
        log.error("-----微信公众号的出差为----:{}", xinHuaWXReq);
        String result = HttpUtils.sendPost(thirdWXUrl, new Gson().toJson(xinHuaWXReq));
        JSONObject jsonObject = JSONObject.parseObject(result);
        String code = (String) jsonObject.toString();