|  |  | 
 |  |  | package com.ruoyi.web.component; | 
 |  |  |  | 
 |  |  | import afu.org.checkerframework.checker.oigj.qual.O; | 
 |  |  | import com.alibaba.fastjson2.JSONObject; | 
 |  |  | import com.fasterxml.jackson.databind.ObjectMapper; | 
 |  |  | import com.google.gson.Gson; | 
 |  |  | 
 |  |  | import com.ruoyi.common.utils.http.HttpUtils; | 
 |  |  | import com.smartor.common.LSHospTokenUtil; | 
 |  |  | import com.smartor.domain.*; | 
 |  |  | import com.smartor.mapper.HeLibraryMapper; | 
 |  |  | import com.smartor.mapper.PatArchiveMapper; | 
 |  |  | import com.smartor.mapper.ServiceSubtaskMapper; | 
 |  |  | import com.smartor.mapper.ServiceTaskMapper; | 
 |  |  | import com.smartor.service.IBaseSmsaccountService; | 
 |  |  | import com.smartor.service.IServiceOutPathService; | 
 |  |  | import com.smartor.service.IServiceSubtaskRecordService; | 
 |  |  | import com.sun.org.apache.bcel.internal.generic.NEW; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.apache.commons.collections4.CollectionUtils; | 
 |  |  | import org.apache.commons.lang3.ObjectUtils; | 
 |  |  | 
 |  |  | import java.util.concurrent.Executors; | 
 |  |  | import java.util.concurrent.TimeUnit; | 
 |  |  |  | 
 |  |  | import static cn.hutool.core.convert.Convert.numberToWord; | 
 |  |  | import static cn.hutool.core.convert.Convert.toHex; | 
 |  |  |  | 
 |  |  | @Slf4j | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private ServiceSubtaskMapper ivrTaskcallMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private HeLibraryMapper heLibraryMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private ServiceTaskMapper ivrTaskMapper; | 
 |  |  | 
 |  |  |     public void onMessage(Message message, byte[] pattern) { | 
 |  |  |         log.info("监听Redis key过期,key:{},channel:{}", message.toString(), new String(pattern)); | 
 |  |  |         String ip = localIP; | 
 |  |  |         log.error("本机的网络IP为:{}", ip); | 
 |  |  |         log.info("本机的网络IP为:{}", ip); | 
 |  |  |         String content = message.toString(); | 
 |  |  |         //判断是不是任务信息,如果不是,直接返回,不需要执行 | 
 |  |  |         if (!content.contains("taskid") || !port.equals("8095")) { | 
 |  |  | 
 |  |  |      * @param commonTaskcallMQ | 
 |  |  |      */ | 
 |  |  |     public void tsakHandle(CommonTaskcallMQ commonTaskcallMQ, String ip, Integer type) { | 
 |  |  |         log.error("进任务了吗?{}", commonTaskcallMQ); | 
 |  |  |         log.info("进任务了吗?{}", commonTaskcallMQ); | 
 |  |  |         //判断一下commonTaskcallMQ中的stopstate是否与ivr_task中的一致,不一致,则说明是暂停了 | 
 |  |  |         ServiceTask ivrTask1 = ivrTaskMapper.selectServiceTaskByTaskid(commonTaskcallMQ.getTaskid()); | 
 |  |  |  | 
 |  |  | 
 |  |  |         if (StringUtils.isNotEmpty(commonTaskcallMQ.getPreachform())) { | 
 |  |  |             //如何任务发送方式不为空 | 
 |  |  |             String[] split = commonTaskcallMQ.getPreachform().split(","); | 
 |  |  |             log.error("split的值为:{}", split); | 
 |  |  |             log.info("split的值为:{}", split); | 
 |  |  |  | 
 |  |  |             //定义一个集合,用与存没有执行的子任务ID | 
 |  |  |             List<Long> subIds = new ArrayList<>(); | 
 |  |  | 
 |  |  |                                 //说明是立即发送 | 
 |  |  |                                 ServiceSubtaskVO serviceSubtask1 = new ServiceSubtaskVO(); | 
 |  |  |                                 serviceSubtask1.setTaskid(commonTaskcallMQ.getTaskid()); | 
 |  |  |                                 log.error("缓存中serviceSubtask1的值为:{}", serviceSubtask1); | 
 |  |  |                                 log.info("缓存中serviceSubtask1的值为:{}", serviceSubtask1); | 
 |  |  |                                 List<String> list = new ArrayList<>(); | 
 |  |  |                                 List<ServiceSubtask> selectServiceSubtaskList1 = ivrTaskcallMapper.selectServiceSubtaskList(serviceSubtask1); | 
 |  |  |                                 for (ServiceSubtask serviceSubtask2 : selectServiceSubtaskList1) { | 
 |  |  |                                     list.add(serviceSubtask2.getId().toString()); | 
 |  |  |                                 } | 
 |  |  |                                 log.error("缓存中cache-0的值为:{}", list); | 
 |  |  |                                 log.info("缓存中cache-0的值为:{}", list); | 
 |  |  | //                                redisCache.setCacheListLeft("cache-0", list); | 
 |  |  |                                 redisCache.setCacheListLeftAndDistinct("cache-0", list); | 
 |  |  |                             } else { | 
 |  |  | 
 |  |  |                                 iServiceOutPathService.updateServiceOutPath(serviceOutPath); | 
 |  |  |                                 sendMagParam.setPhone(serviceSubtask.getPhone()); | 
 |  |  |                                 sendMagParam.setUrl(ip + ":" + req_path + "/sf?p=" + format); | 
 |  |  |                                 if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) { | 
 |  |  |                                     sendMagParam.setContent("【景宁畲族自治县人民医院】您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!"); | 
 |  |  |                                 } else if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) { | 
 |  |  |                                     sendMagParam.setContent("【丽水中医院】您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!"); | 
 |  |  |                                 } else | 
 |  |  |                                 if (visitHosp == 2) { | 
 |  |  |                                     sendMagParam.setContent("您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!"); | 
 |  |  |                                 } else if (visitHosp == 1) { | 
 |  |  |                                     sendMagParam.setContent("【新华医院】您好,邀请您填写出院随访调查表,请点击" + sendMagParam.getUrl() + "填写。感谢您配合!"); | 
 |  |  |                                 } | 
 |  |  |  | 
 |  |  |                             } else if (type == 2) { | 
 |  |  |                                 //问券(问题) | 
 |  |  | 
 |  |  |                                 serviceOutPath.setParam1(taskId); | 
 |  |  |                                 serviceOutPath.setParam2(patid); | 
 |  |  |                                 serviceOutPath.setParam6(subId); | 
 |  |  | //                                serviceOutPath.setParam3(URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString())); | 
 |  |  |                                 serviceOutPath.setParam3(ivrTask1.getTaskName()); | 
 |  |  |                                 serviceOutPath.setCreateTime(new Date()); | 
 |  |  |                                 iServiceOutPathService.insertServiceOutPath(serviceOutPath); | 
 |  |  | 
 |  |  |                                 serviceOutPath.setRadix(format); | 
 |  |  |                                 serviceOutPath.setUpdateTime(new Date()); | 
 |  |  |                                 iServiceOutPathService.updateServiceOutPath(serviceOutPath); | 
 |  |  | //                                sendMagParam.setUrl(ip + ":" + req_path + "/outsideChainxj?param1=" + taskId + "¶m2=" + patid + "¶m3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "¶m5=false"); | 
 |  |  |                                 sendMagParam.setPhone(serviceSubtask.getPhone()); | 
 |  |  |                                 sendMagParam.setUrl(ip + ":" + req_path + "/xj?p=" + format); | 
 |  |  |                                 if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) { | 
 |  |  |                                     sendMagParam.setContent("【景宁畲族自治县人民医院】您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!"); | 
 |  |  |                                 } else if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) { | 
 |  |  |                                     sendMagParam.setContent("【丽水中医院】您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!"); | 
 |  |  |                                 } else | 
 |  |  |                                     sendMagParam.setContent("【新华医院】您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!"); | 
 |  |  |                                 //需要通过模板ID去判断要发的内容是宣教还是通知 | 
 |  |  |                                 HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid()); | 
 |  |  |                                 if (heLibrary.getHetype().equals("1")) { | 
 |  |  |                                     sendMagParam.setPhone(serviceSubtask.getPhone()); | 
 |  |  |                                     sendMagParam.setUrl(ip + ":" + req_path + "/xj?p=" + format); | 
 |  |  |                                     if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) { | 
 |  |  |                                         sendMagParam.setContent("【景宁畲族自治县人民医院】您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!"); | 
 |  |  |                                     } else if (serviceSubtask.getOrgid().equals("47255004333112711A1001")) { | 
 |  |  |                                         sendMagParam.setContent("【丽水中医院】您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!"); | 
 |  |  |                                     } else | 
 |  |  |                                         sendMagParam.setContent("【新华医院】您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!"); | 
 |  |  |                                 } else { | 
 |  |  |                                     //通知 | 
 |  |  |                                     sendMagParam.setPhone(serviceSubtask.getPhone()); | 
 |  |  |                                     sendMagParam.setContent(heLibrary.getPreachcontent()); | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                             //短信还需要模板 | 
 |  |  |                             String s = null; | 
 |  |  | 
 |  |  |                                 //丽水的短信发送方式 | 
 |  |  |                                 Map<String, String> map = MsgLSEnum.getAddressByCode(serviceSubtask.getOrgid()); | 
 |  |  |                                 String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid()); | 
 |  |  |                                 log.error("-----------token的值为:{}", token); | 
 |  |  |                                 log.info("-----------token的值为:{}", token); | 
 |  |  |                                 if (ObjectUtils.isNotEmpty(map) && StringUtils.isEmpty(map.get("address"))) { | 
 |  |  |                                     ServiceSubtask ss = new ServiceSubtask(); | 
 |  |  |                                     ss.setResult("error"); | 
 |  |  |                                     ss.setRemark("短信发送失败,该机构没有配置短信地址"); | 
 |  |  |                                     ss.setSendstate(5L); | 
 |  |  |                                     ss.setId(serviceSubtask.getId()); | 
 |  |  |                                     ss.setFinishtime(new Date()); | 
 |  |  | //                                    ss.setFinishtime(new Date()); | 
 |  |  |                                     serviceSubtaskMapper.updateServiceSubtask(ss); | 
 |  |  |                                     continue; | 
 |  |  |                                 } | 
 |  |  |                                 log.error("---------mq丽水短信发送入参address:{},  sendMagParam:{},  orgid:{}-------", map.get("address"), sendMagParam, serviceSubtask.getOrgid()); | 
 |  |  |                                 log.info("---------mq丽水短信发送入参address:{},  sendMagParam:{},  orgid:{}-------", map.get("address"), sendMagParam, serviceSubtask.getOrgid()); | 
 |  |  |                                 String dxCode = getDXCode(map.get("address"), sendMagParam.getPhone(), sendMagParam.getContent(), map.get("sendPersonId"), map.get("sendPersonName"), MsgLSEnum.getHeaderByCode(serviceSubtask.getOrgid()), token); | 
 |  |  |                                 log.error("---------丽水短信发送结果:{}-------", dxCode); | 
 |  |  |                                 log.info("---------丽水短信发送结果:{}-------", dxCode); | 
 |  |  |                                 ObjectMapper objectMapper = new ObjectMapper(); | 
 |  |  |                                 Map<String, Object> textParam = objectMapper.readValue(dxCode, Map.class); | 
 |  |  |                                 String code = textParam.get("Code").toString(); | 
 |  |  | 
 |  |  |                             } | 
 |  |  |                             if (s.equals("true")) { | 
 |  |  |                                 //在子任务表里记录一下 | 
 |  |  |                                 log.error("serviceSubtask保存成功了吗?:{}", s); | 
 |  |  |                                 String uuid = UUID.randomUUID().toString(); | 
 |  |  |                                 serviceSubtask.setResult("success"); | 
 |  |  |                                 serviceSubtask.setRemark("短信发送成功"); | 
 |  |  | 
 |  |  |                                 ss.setRemark("公众号发送失败,his系统的患者id为空"); | 
 |  |  |                                 ss.setSendstate(5L); | 
 |  |  |                                 ss.setId(serviceSubtask.getId()); | 
 |  |  |                                 ss.setFinishtime(new Date()); | 
 |  |  | //                                ss.setFinishtime(new Date()); | 
 |  |  |                                 serviceSubtaskMapper.updateServiceSubtask(ss); | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  | 
 |  |  |                                 ss.setRemark("该机构的公众号配置信息不全,无法通过公众号发送"); | 
 |  |  |                                 ss.setSendstate(5L); | 
 |  |  |                                 ss.setId(serviceSubtask.getId()); | 
 |  |  |                                 ss.setFinishtime(new Date()); | 
 |  |  | //                                ss.setFinishtime(new Date()); | 
 |  |  |                                 serviceSubtaskMapper.updateServiceSubtask(ss); | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  | 
 |  |  |                     serviceSubtask.setRemark("发送失败"); | 
 |  |  |                     serviceSubtask.setSendstate(5L); | 
 |  |  |                     serviceSubtask.setId(id); | 
 |  |  |                     serviceSubtask.setFinishtime(new Date()); | 
 |  |  | //                    serviceSubtask.setFinishtime(new Date()); | 
 |  |  |                     serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); | 
 |  |  |                 } | 
 |  |  |             } |