| | |
| | | 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; |
| | |
| | | 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); |
| | |
| | | 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); |
| | | } |
| | |
| | | * 处理补偿任务 |
| | | */ |
| | | 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(); |
| | |
| | | Long cs = currentSort.get(); |
| | | if (cs.equals(serviceSubtaskPreachforms.size())) { |
| | | serviceSubtask.setSendstate(5L); |
| | | serviceSubtask.setRemark("处理补偿任务,当前处理最后补偿,全部执行失败"); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | //修改发送方式的状态为失败 |
| | | serviceSubtaskPreachform.setSendstate("5"); |
| | |
| | | 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")) { |
| | |
| | | } else if (heLibrary.getHetype().equals("2")) { |
| | | //通知 |
| | | sendMagParam.setPhone(serviceSubtask.getPhone()); |
| | | sendMagParam.setContent(heLibrary.getPreachcontent()); |
| | | // 替换文本内容中的变量 |
| | | String content = getObject(serviceSubtask, heLibrary.getPreachcontent()); |
| | | sendMagParam.setContent(content); |
| | | } |
| | | |
| | | } |
| | |
| | | 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, "短信发送失败,该机构没有配置短信地址, 时间:" + now , "5"); |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "短信发送失败,该机构没有配置短信地址, 时间:" + now, "5"); |
| | | return; |
| | | } |
| | | log.info("【sfHandlle】丽水短信发送,地址:{},参数:{},机构ID:{}", msgInfo.get("address"), sendMagParam, serviceSubtask.getOrgid()); |
| | |
| | | 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("【新华医院】", ""); |
| | |
| | | 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("短信发送失败" + now); |
| | | serviceSubtask.setRemark(serviceSubtask.getRemark() + "," + "短信发送失败" + now); |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "短信发送失败" + now, "5"); |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | |
| | | //获取微信公众号请求信息根据机构ID |
| | | List<String> wxqqxx = WxGZHEnum.getDescByCode(patArchive.getOrgid()); |
| | | //市一医院 不校验 |
| | | |
| | | if (CollectionUtils.isEmpty(wxqqxx) || wxqqxx.size() < 4) { |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "【公众号】该机构的公众号配置信息不全,无法通过公众号发送", "4"); |
| | | return; |
| | |
| | | //市一医院 |
| | | 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); |
| | | /**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); |
| | | } |
| | | |
| | | Map<String, Object> map = JSONObject.parseObject(wxCode, Map.class); |
| | | Map map = JSONObject.parseObject(wxCode, Map.class); |
| | | //任务发送记录 |
| | | ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); |
| | | serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); |
| | |
| | | serviceSubtaskRecord.setPreachform("4"); |
| | | serviceSubtaskRecord.setStartTime(System.currentTimeMillis()); |
| | | serviceSubtaskRecord.setResult("success"); |
| | | if (!map.isEmpty() && (Boolean) map.get("succ") == false) serviceSubtaskRecord.setResult("error"); |
| | | Boolean wxCodeSuccess = false; |
| | | if(active.equals("hzszlyy")){ |
| | | if(!map.isEmpty() && map.get("success") != null){ |
| | | wxCodeSuccess = (boolean) map.get("success"); |
| | | } |
| | | }else { |
| | | if(!map.isEmpty() && map.get("succ") != null){ |
| | | wxCodeSuccess = (boolean) map.get("succ"); |
| | | } |
| | | } |
| | | if (!map.isEmpty() && !wxCodeSuccess) serviceSubtaskRecord.setResult("error"); |
| | | serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord); |
| | | |
| | | //发送完成后,修改状态 |
| | | serviceSubtask.setSendstate(3L); |
| | | if ((Boolean) map.get("succ") == true) { |
| | | if (wxCodeSuccess) { |
| | | serviceSubtask.setResult("success"); |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "【公众号】公众号发送成功", "2"); |
| | | } else { |
| | |
| | | |
| | | // 情况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 |
| | |
| | | if (allSendStateNot1AndNot9) { |
| | | //说明全发送失败了 |
| | | serviceSubtask.setSendstate(5L); |
| | | serviceSubtask.setRemark("getSendPreachform方法 检查是否所有sendstate不等于9, 全失败了"); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | //修改发送状态 |
| | | setFail(serviceSubtaskPreachforms, serviceSubtask); |
| | |
| | | |
| | | // 当sort等于列表size时,下一个sort为-1 |
| | | Long nextSort = currentSort.get() + 1; |
| | | |
| | | //如果当前的发送方式不为空,并且开始准备要用下一种方式发送了,那当前的肯定没有发送成功,需要设置失败 |
| | | // (这里主要是,人工如果没有随访,然后到公众号的时候,就不会再去管人工是否成功,人工的状态会一直卡在2的状态上) |
| | | if (StringUtils.isNotEmpty(serviceSubtask.getCurrentPreachform())) { |
| | |
| | | } |
| | | |
| | | // 找到下一个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"); |
| | | |
| | | String orgid = serviceSubtask.getOrgid(); |
| | | //微信已发送、已领取跳过短信发送,进行人工 -丽水中医院 |
| | | if (StringUtils.isNotEmpty(orgid) && orgid.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; |
| | |
| | | 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()); |
| | |
| | | if (failSendstate.equals("4") || failSendstate.equals("5")) { |
| | | serviceSubtask.setCurrentPreachform(preachform); |
| | | serviceSubtask.setSendstate(5L); |
| | | serviceSubtask.setRemark("setSuccessPreachForm方法,当前的preachform已经是最后一个了,全部执行失败"); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | return true; |
| | | } |
| | |
| | | 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; |
| | | } |
| | | |
| | | } |