| | |
| | | package com.ruoyi.quartz.task; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.fasterxml.jackson.core.JsonParser; |
| | | import com.fasterxml.jackson.databind.JsonNode; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.google.common.reflect.TypeToken; |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.JsonArray; |
| | | import com.google.gson.JsonObject; |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.common.dx.MessageSend; |
| | | import com.ruoyi.common.enums.MsgLSEnum; |
| | | import com.ruoyi.common.enums.ServiceFromEnum; |
| | | import com.ruoyi.common.utils.DtoConversionUtils; |
| | | 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.utils.http.HttpUtils; |
| | | import com.smartor.common.SendService; |
| | | import com.ruoyi.common.utils.sms.smsUtils; |
| | | import com.ruoyi.quartz.service.ICollectHISService; |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import com.smartor.common.LSHospTokenUtil; |
| | | import com.smartor.domain.*; |
| | | import com.smartor.mapper.ServiceSubtaskMapper; |
| | | import com.smartor.mapper.ServiceTaskMapper; |
| | | import com.smartor.mapper.SysUserImportMapper; |
| | | import com.smartor.mapper.*; |
| | | import com.smartor.service.*; |
| | | 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 org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.transaction.PlatformTransactionManager; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.io.File; |
| | | import java.io.FileWriter; |
| | | import java.io.IOException; |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.lang.reflect.Type; |
| | | import java.net.URLEncoder; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Paths; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.security.MessageDigest; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.LocalTime; |
| | |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.hutool.core.convert.Convert.toHex; |
| | | |
| | | /** |
| | | * 定时任务调度测试 |
| | |
| | | private IServicePatientTempService iServicePatientTempService; |
| | | |
| | | @Autowired |
| | | private PlatformTransactionManager transactionManager; |
| | | private IHNGatherPatArchiveService ihnGatherPatArchiveService; |
| | | |
| | | @Autowired |
| | | private IServiceSLTDHealthcareRecordService serviceSLTDHealthcareRecordService; |
| | | |
| | | @Autowired |
| | | private SysUserImportMapper sysUserImportMapper; |
| | | |
| | | @Autowired |
| | | private HeLibraryMapper heLibraryMapper; |
| | | |
| | | @Autowired |
| | | private ICollectHISService ichService; |
| | | |
| | | @Autowired |
| | | private ISysConfigService configService; |
| | | |
| | | @Value("${localIP}") |
| | | private String localIP; |
| | |
| | | @Value("${xhsmsPath}") |
| | | private String xhsmsPath; |
| | | |
| | | @Value("${xhsmsAccount}") |
| | | private String xhsmsAccount; |
| | | |
| | | @Value("${xhsmsPwd}") |
| | | private String xhsmsPwd; |
| | | |
| | | @Value("${pub_key}") |
| | | private String pub_key; |
| | | |
| | | @Value("${thirdWXUrl}") |
| | | private String thirdWXUrl; |
| | | |
| | | @Value("${req_path}") |
| | | private String req_path; |
| | |
| | | @Autowired |
| | | IPatArchiveService patArchiveService; |
| | | |
| | | @Autowired |
| | | IPatMedInhospService patMedInhospService; |
| | | |
| | | @Autowired |
| | | IPatMedOuthospService patMedOuthospService; |
| | |
| | | @Autowired |
| | | IIvrTaskTemplateService iIvrTaskTemplateService; |
| | | |
| | | @Value("${hosp_info_url}") |
| | | private String hospInfoUrl; |
| | | @Autowired |
| | | IXHGatherPatArchiveService ixhGatherPatArchiveService; |
| | | |
| | | @Autowired |
| | | ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper; |
| | | |
| | | @Autowired |
| | | ICollectHISService icollectHis; |
| | | |
| | | |
| | | @Value("${appid}") |
| | | private String appid; |
| | | |
| | | @Value("${server.port}") |
| | | private String port; |
| | | |
| | | |
| | | @Value("${spring.profiles.active}") |
| | | private String active; |
| | | |
| | | public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) { |
| | | System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i)); |
| | |
| | | |
| | | |
| | | /** |
| | | * 处理his数据 |
| | | * 处理HIS数据采集 |
| | | * 定时任务:采集患者信息、出院、门诊数据 |
| | | */ |
| | | public void dealHisData() { |
| | | //将患者信息、出院、门诊数据全部采集 |
| | | // 获取当前日期和时间 |
| | | LocalDateTime endTime = LocalDateTime.now(); |
| | | endTime = endTime.with(LocalTime.MIN); |
| | | // String dateStr = "2024/11/30 00:00:00"; |
| | | // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); |
| | | // LocalDateTime endTime = LocalDateTime.parse(dateStr, formatter); |
| | | // 获取前一天的日期和时间 |
| | | LocalDateTime startTime = endTime.minusDays(1); |
| | | startTime = startTime.with(LocalTime.MIN); |
| | | getInHospInfo("0", startTime, endTime); |
| | | getInHospInfo("1", startTime, endTime); |
| | | log.info("【dealHisData】开始执行HIS数据采集任务"); |
| | | // 获取昨天0点到今天0点的时间范围 |
| | | LocalDateTime todayZero = LocalDateTime.now().with(LocalTime.MIN); |
| | | LocalDateTime yesterdayZero = todayZero.minusDays(1); |
| | | log.info("【dealHisData】采集时间范围:{} ~ {}", yesterdayZero, todayZero); |
| | | |
| | | //调用dealOupHospInfo数据处理方法,处理完后,将“出院表的check_flag=1” |
| | | //获取当前日期 (精确到天)往前推相应天数(在指定的基础模板中找对应的天数), |
| | | //循环患者信息,根据患者"出院诊断ICD值”获取到相当的模板(获取取相应的天数); |
| | | //根据查询出来的模板,去固定任务(固定任务,已经将模板也固定了)去匹配模板 |
| | | //根据匹配出来的模板和任务与患者信息,将数据插入到子任务表中 |
| | | if (active.trim().equals("xh")) { |
| | | try { |
| | | // 采集入院数据 |
| | | log.info("【dealHisData】新华开始采集入院数据"); |
| | | ixhGatherPatArchiveService.getInHospDataGather("0", yesterdayZero, todayZero); |
| | | log.info("【dealHisData】新华入院数据采集完成"); |
| | | |
| | | // 采集出院数据 |
| | | log.info("【dealHisData】新华开始采集出院数据"); |
| | | ixhGatherPatArchiveService.getInHospDataGather("1", yesterdayZero, todayZero); |
| | | log.info("【dealHisData】新华出院数据采集完成"); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("【dealHisData】新华数据采集异常", e); |
| | | } |
| | | } else if (active.trim().equals("hn")) { |
| | | try { |
| | | // 河南数据采集 |
| | | HnDataGatherVO hnDataGatherVO = new HnDataGatherVO(); |
| | | log.info("【dealHisData】河南开始采集数据"); |
| | | Date startTime = Date.from(yesterdayZero.atZone(ZoneId.systemDefault()).toInstant()); |
| | | Date endTime = Date.from(todayZero.atZone(ZoneId.systemDefault()).toInstant()); |
| | | |
| | | hnDataGatherVO.setStartTime(startTime); |
| | | hnDataGatherVO.setEndTime(endTime); |
| | | ihnGatherPatArchiveService.hnDataGather(hnDataGatherVO); |
| | | log.info("【dealHisData】河南结束采集数据"); |
| | | } catch (Exception e) { |
| | | log.error("【dealHisData】河南数据采集异常", e); |
| | | } |
| | | } else if (active.trim().equals("sltd")) { |
| | | try { |
| | | // 省立同德数据采集 |
| | | log.info("【dealHisData】省立同德“入院”开始采集数据"); |
| | | String yesterday = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); |
| | | ServiceSLTDInhospReqVO serviceSLTDInhospReqVO = new ServiceSLTDInhospReqVO(); |
| | | serviceSLTDInhospReqVO.setOrgId("20001001"); |
| | | serviceSLTDInhospReqVO.setCampusId(30001002L); |
| | | serviceSLTDInhospReqVO.setStartHeadTime(yesterday); |
| | | serviceSLTDInhospReqVO.setStartTailTime(yesterday); |
| | | List<String> list = new ArrayList<>(); |
| | | list.add("FH0108.02"); |
| | | serviceSLTDInhospReqVO.setHealthcareRecordTypeList(list); |
| | | serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO); |
| | | log.info("【dealHisData】省立同德“入院”結束采集数据"); |
| | | |
| | | log.info("【dealHisData】省立同德“门急诊”开始采集数据"); |
| | | serviceSLTDInhospReqVO.setStartHeadTime(null); |
| | | serviceSLTDInhospReqVO.setStartTailTime(null); |
| | | serviceSLTDInhospReqVO.setEncounterTimeStart(yesterday); |
| | | serviceSLTDInhospReqVO.setEncounterTimeEnd(yesterday); |
| | | List<String> list1 = new ArrayList<>(); |
| | | list1.add("FH0108.01"); |
| | | list1.add("FH0108.03"); |
| | | serviceSLTDInhospReqVO.setHealthcareRecordTypeList(list1); |
| | | serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO); |
| | | log.info("【dealHisData】河南结“门急诊”束采集数据"); |
| | | |
| | | log.info("【dealHisData】省立同德“出院”开始采集数据"); |
| | | serviceSLTDInhospReqVO.setStartHeadTime(null); |
| | | serviceSLTDInhospReqVO.setStartTailTime(null); |
| | | serviceSLTDInhospReqVO.setEncounterTimeStart(null); |
| | | serviceSLTDInhospReqVO.setEncounterTimeEnd(null); |
| | | serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(yesterday); |
| | | serviceSLTDInhospReqVO.setPreOutHospitalTailDate(yesterday); |
| | | List<String> list2 = new ArrayList<>(); |
| | | list2.add("FH0108.02"); |
| | | serviceSLTDInhospReqVO.setHealthcareRecordTypeList(list2); |
| | | serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO); |
| | | log.info("【dealHisData】河南结“出院”束采集数据"); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("【dealHisData】省立同德数据采集异常", e); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 这个只是新华临时使用,平时用不到 |
| | | */ |
| | | public void dealHisData2() { |
| | | //将患者信息、出院、门诊数据全部采集 |
| | | //将患者信息、出入院数据全部采集 |
| | | // 指定的开始日期 |
| | | LocalDate endDate = LocalDate.of(2025, 3, 3); |
| | | // 当前日期 |
| | |
| | | // 从开始日期到当前日期逐天打印 |
| | | for (LocalDate date = endDate; !date.isAfter(currentDate); date = date.plusDays(1)) { |
| | | System.out.println(date.format(formatter)); |
| | | getInHospInfo("0", date.minusDays(1).atStartOfDay(), date.atStartOfDay()); |
| | | getInHospInfo("1", date.minusDays(1).atStartOfDay(), date.atStartOfDay()); |
| | | ixhGatherPatArchiveService.getInHospDataGather("0", date.minusDays(1).atStartOfDay(), date.atStartOfDay()); |
| | | ixhGatherPatArchiveService.getInHospDataGather("1", date.minusDays(1).atStartOfDay(), date.atStartOfDay()); |
| | | } |
| | | |
| | | } |
| | |
| | | * 处理患者信息,进入子任务表 |
| | | */ |
| | | public void dealOutHospInfo() { |
| | | //出院表 |
| | | iPatMedInhospService.dealOutHospInfo(); |
| | | //门诊表 |
| | | if(visitHosp!=1) { |
| | | iPatMedOuthospService.dealOutpatientInfo(); |
| | | if (port.equals("8095")) { |
| | | //出院表 |
| | | iPatMedInhospService.dealOutHospInfo(); |
| | | //门诊表 |
| | | if (visitHosp != 1) { |
| | | iPatMedOuthospService.dealOutpatientInfo(); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | * 处理手术信息,进入子任务表 |
| | | */ |
| | | public void dealOperationInfo() { |
| | | iPatMedOperationService.dealOperationInfo(); |
| | | if (port.equals("8095")) iPatMedOperationService.dealOperationInfo(); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 处理患者信息,进入子任务表(微信小程序) |
| | | */ |
| | | public void dealOutHospInfoXHC() { |
| | | PatMedInhosp patMedInhosp = new PatMedInhosp(); |
| | | //获取未处理的数据 |
| | | List<ServicePatientTemp> servicePatientTemps = iServicePatientTempService.selectServicePatientTempList(new ServicePatientTemp()); |
| | | |
| | | if (port.equals("8095")) { |
| | | PatMedInhosp patMedInhosp = new PatMedInhosp(); |
| | | //获取未处理的数据 |
| | | List<ServicePatientTemp> servicePatientTemps = iServicePatientTempService.selectServicePatientTempList(new ServicePatientTemp()); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 长期任务执行(电话) |
| | | * 长期任务执行 |
| | | */ |
| | | public void longTaskSend() { |
| | | //获取任务信息 |
| | |
| | | st.setDelFlag("0"); |
| | | st.setLongTask(1); |
| | | List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st); |
| | | log.error("serviceTasks进来了吗?{}", serviceTasks); |
| | | log.info("【longTaskSend】获取到{}个长期任务", serviceTasks.size()); |
| | | for (ServiceTask serviceTask : serviceTasks) { |
| | | CommonTaskcallMQ commonTaskcallMQ = new CommonTaskcallMQ(); |
| | | commonTaskcallMQ.setTaskid(serviceTask.getTaskid()); |
| | | commonTaskcallMQ.setPreachform(serviceTask.getPreachform()); |
| | | commonTaskcallMQ.setSendType("2"); |
| | | sfHandlle(commonTaskcallMQ, localIP); |
| | | |
| | | //通过任务ID拿到患者信息,并且随访时间得是今天之前的 |
| | | ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO(); |
| | | serviceSubtaskVO.setTaskid(commonTaskcallMQ.getTaskid()); |
| | | serviceSubtaskVO.setSendstate(2L); |
| | | serviceSubtaskVO.setVisitTime(new Date()); |
| | | List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.queryServiceSubtaskList(serviceSubtaskVO); |
| | | for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) { |
| | | sfHandlle(serviceSubtask); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 处理补偿任务 |
| | | */ |
| | | public void compensateTask() { |
| | | //获取到sendstate=3 并且 visit_time为今天的subtask |
| | | ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO(); |
| | | serviceSubtaskVO.setSendstate(3L); |
| | | serviceSubtaskVO.setVisitTime(new Date()); |
| | | List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO); |
| | | for (ServiceSubtask serviceSubtask : serviceSubtaskList) { |
| | | //根据当前的执行方式,获取下一种执行方式 |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform(); |
| | | serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid()); |
| | | serviceSubtaskPreachform.setSubid(serviceSubtask.getId()); |
| | | serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid()); |
| | | List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform); |
| | | //获取当前执行方式的序号 |
| | | Optional<Long> currentSort = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getSort).findFirst(); |
| | | Optional<Long> id = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getId).findFirst(); |
| | | if (currentSort.isPresent()) { |
| | | //1先检查一下,是不是有执行状态是完成的(怕之前已经有完的了,没有将servuce_subtask的状态改成功,这里再检查一下) |
| | | boolean finishState = serviceSubtaskPreachforms.stream().allMatch(item -> item.getSendstate().equals("9")); |
| | | if (finishState) { |
| | | serviceSubtask.setSendstate(6L); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | continue; |
| | | } |
| | | |
| | | //2判断一下,当前的sort是不是等于需要执行的总个数,如果等于的话,说明是最后一个,直接将servuce_subtask的状态改成5,执行失败就行了 |
| | | Long cs = currentSort.get(); |
| | | if (cs.equals(serviceSubtaskPreachforms.size())) { |
| | | serviceSubtask.setSendstate(5L); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | //修改发送方式的状态为失败 |
| | | serviceSubtaskPreachform.setSendstate("5"); |
| | | serviceSubtaskPreachform.setId(id.get()); |
| | | serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform); |
| | | continue; |
| | | } |
| | | |
| | | //3.不是最后一个,获取到下一个执行方式(因为都是在今天执行,那就直接发出去就完了) |
| | | sfHandlle(serviceSubtask); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 判断日期是否是今天 |
| | |
| | | * @return |
| | | */ |
| | | public boolean isDateToday(Date date) { |
| | | //如果给的日期小于当前日期,也直接发送 |
| | | LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); |
| | | if (localDateTime.isBefore(LocalDateTime.now())) { |
| | | return true; |
| | | if (date == null) { |
| | | return false; |
| | | } |
| | | // 获取当前日期 |
| | | Calendar calendarNow = Calendar.getInstance(); |
| | | int todayYear = calendarNow.get(Calendar.YEAR); |
| | | int todayMonth = calendarNow.get(Calendar.MONTH); |
| | | int todayDay = calendarNow.get(Calendar.DAY_OF_MONTH); |
| | | |
| | | // 创建一个 Calendar 实例用于检查的日期 |
| | | Calendar calendarToCheck = Calendar.getInstance(); |
| | | calendarToCheck.setTime(date); |
| | | |
| | | // 比较年、月和日 |
| | | return (calendarToCheck.get(Calendar.YEAR) == todayYear && calendarToCheck.get(Calendar.MONTH) == todayMonth && calendarToCheck.get(Calendar.DAY_OF_MONTH) == todayDay); |
| | | // 将 Date 转为 LocalDate |
| | | LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); |
| | | // 获取今天的 LocalDate |
| | | LocalDate today = LocalDate.now(); |
| | | // 如果日期早于或等于今天,返回 true |
| | | return !localDate.isAfter(today); |
| | | } |
| | | |
| | | public void sfHandlle(CommonTaskcallMQ commonTaskcallMQ, String ip) { |
| | | log.error("sfHandlle进来了吗?{}", commonTaskcallMQ); |
| | | //判断一下commonTaskcallMQ中的stopstate是否与ivr_task中的一致,不一致,则说明是暂停了 |
| | | ServiceTask ivrTask1 = serviceTaskMapper.selectServiceTaskByTaskid(commonTaskcallMQ.getTaskid()); |
| | | public void sfHandlle(ServiceSubtask serviceSubtask) { |
| | | //这里需要根据身份证去重(给微信小程序的固定任务用的) |
| | | List<ServiceSubtask> serviceSubtaskListFilter = new ArrayList<>(); |
| | | ServiceTask ivrTask1 = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform(); |
| | | serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid()); |
| | | serviceSubtaskPreachform.setSubid(serviceSubtask.getId()); |
| | | //获取发送方式 |
| | | String sendPreachform = getSendPreachform(serviceSubtaskPreachform, serviceSubtask); |
| | | if (sendPreachform.equals("-1") || serviceSubtask.getSendstate() == 6 || serviceSubtask.getSendstate() == 5 || serviceSubtask.getSendstate() == 4) { |
| | | //说明已经全部遍历完了,当前的执行方式序号是最后一个了 或者 该患者已经随访结束(成功或失败了或不执行) |
| | | return; |
| | | } |
| | | //先判断患者是不是还要发送 |
| | | PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtask.getPatid()); |
| | | if (!Objects.isNull(patArchive) && patArchive.getNotrequiredFlag() == "1") { |
| | | //不需要发送 |
| | | serviceSubtask.setResult("患者不需要随访"); |
| | | serviceSubtask.setRemark(patArchive.getNotrequiredreason()); |
| | | serviceSubtask.setSendstate(4L); |
| | | iServiceSubtaskService.insertServiceSubtask(serviceSubtask); |
| | | setSuccessPreachForm(serviceSubtask, "-1", "不需要执行", "6"); |
| | | return; |
| | | } |
| | | |
| | | if (StringUtils.isNotEmpty(commonTaskcallMQ.getPreachform())) { |
| | | //如何任务发送方式不为空 |
| | | String[] split = commonTaskcallMQ.getPreachform().split(","); |
| | | log.error("split进来了吗?{}", split); |
| | | for (String serviceFrom : split) { |
| | | String descByCode = ServiceFromEnum.getDescByCode(Integer.valueOf(serviceFrom)); |
| | | //通过任务ID拿到患者信息 |
| | | ServiceSubtaskVO ivrTaskcall = new ServiceSubtaskVO(); |
| | | ivrTaskcall.setTaskid(commonTaskcallMQ.getTaskid()); |
| | | ivrTaskcall.setSendstate(2L); |
| | | List<ServiceSubtask> subtaskList = iServiceSubtaskService.selectServiceSubtaskList(ivrTaskcall); |
| | | String descByCode = ServiceFromEnum.getDescByCode(Integer.valueOf(sendPreachform)); |
| | | if (descByCode.equals("电话")) { |
| | | List<String> list = new ArrayList<>(); |
| | | ServiceTask ivrTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); |
| | | if (ivrTask.getSendState() != null && ivrTask.getSendState() == 3 || ivrTask.getSendState() != null && ivrTask.getSendState() == 4) { |
| | | //如何任务被"暂停"或"终止" |
| | | return; |
| | | } |
| | | |
| | | // 按照 endtime 离当前时间最近的排序 |
| | | List<ServiceSubtask> selectServiceSubtaskList = subtaskList.stream().sorted(Comparator.comparing(subtask -> Math.abs(subtask.getEndtime().getTime() - new Date().getTime()))).collect(Collectors.toList()); |
| | | |
| | | if (descByCode.equals("电话")) { |
| | | String value = ""; |
| | | List<String> list = new ArrayList<>(); |
| | | for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) { |
| | | ServiceTask ivrTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); |
| | | if (ivrTask.getSendState() != null && ivrTask.getSendState() == 3 || ivrTask.getSendState() != null && ivrTask.getSendState() == 4) { |
| | | //如何任务被“暂停”或“终止” |
| | | break; |
| | | } |
| | | if (org.apache.commons.lang3.StringUtils.isEmpty(serviceSubtask.getPhone())) { |
| | | serviceSubtask.setRemark("手机号为空"); |
| | | serviceSubtask.setSendstate(4L); |
| | | serviceSubtask.setResult("error"); |
| | | serviceSubtask.setFinishtime(new Date()); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | continue; |
| | | } |
| | | boolean dateToday = isDateToday(serviceSubtask.getLongSendTime()); |
| | | //说明是立即发送(先把消息放到cache-0中, displayNo不知道怎么配置) |
| | | if (dateToday) { |
| | | list.add(serviceSubtask.getId().toString()); |
| | | //在子任务表里记录一下 |
| | | String uuid = UUID.randomUUID().toString(); |
| | | serviceSubtask.setResult("success"); |
| | | serviceSubtask.setRemark("长期任务,电话进入队列成功"); |
| | | serviceSubtask.setGuid(uuid); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | |
| | | //任务发送记录 |
| | | ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); |
| | | serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); |
| | | serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId()); |
| | | serviceSubtaskRecord.setUuid(uuid); |
| | | serviceSubtaskRecord.setTasktype(serviceSubtask.getType()); |
| | | serviceSubtaskRecord.setPreachform("3"); |
| | | serviceSubtaskRecord.setStartTime(System.currentTimeMillis()); |
| | | serviceSubtaskRecord.setRemark("长期任务,电话进入队列成功"); |
| | | serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord); |
| | | |
| | | } |
| | | } |
| | | //将要执行的放到缓存中 |
| | | if (list.size() > 0) { |
| | | // redisCache.setCacheListLeft("cache-0", list); |
| | | redisCache.setCacheListLeftAndDistinct("cache-0", list); |
| | | } |
| | | } else if (descByCode.equals("多媒体")) { |
| | | //多媒体 |
| | | } else if (descByCode.equals("纸质")) { |
| | | //纸质 |
| | | } else if (descByCode.equals("微信小程序")) { |
| | | //微信小程序 |
| | | log.error("ivrTask1的值为:{}", ivrTask1); |
| | | if (ObjectUtils.isNotEmpty(ivrTask1) && ivrTask1.getPatCycle() == 1) { |
| | | //说明该任务的患者是循环执行的 |
| | | ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO(); |
| | | serviceSubtaskVO.setTaskid(ivrTask1.getTaskid()); |
| | | List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO); |
| | | //这里需要根据身份证去重 |
| | | List<ServiceSubtask> serviceSubtaskListFilter = new ArrayList<>(); |
| | | aa: |
| | | for (ServiceSubtask serviceSubtask : serviceSubtaskList) { |
| | | for (ServiceSubtask ss : serviceSubtaskListFilter) { |
| | | if (ss.getSfzh().equals(serviceSubtask.getSfzh())) { |
| | | continue aa; |
| | | } |
| | | } |
| | | serviceSubtaskListFilter.add(serviceSubtask); |
| | | } |
| | | for (ServiceSubtask serviceSubtask : serviceSubtaskListFilter) { |
| | | //将子任务ID删除 、sendstate改成3 |
| | | serviceSubtask.setSendstate(3L); |
| | | serviceSubtask.setId(null); |
| | | serviceSubtask.setFinishtime(null); |
| | | serviceSubtask.setCreateTime(new Date()); |
| | | serviceSubtask.setUpdateTime(new Date()); |
| | | //处理重复新增问题,先查一下今天是不是有新增过,新增过就不新增了 |
| | | ServiceSubtaskVO ssvo = new ServiceSubtaskVO(); |
| | | LocalDate today = LocalDate.now(); |
| | | LocalTime startOfDay = LocalTime.of(0, 0, 0); |
| | | LocalTime endOfDay = LocalTime.of(23, 59, 59); |
| | | Date startOfDayDate = Date.from(today.atTime(startOfDay).atZone(ZoneId.systemDefault()).toInstant()); |
| | | Date endOfDayDate = Date.from(today.atTime(endOfDay).atZone(ZoneId.systemDefault()).toInstant()); |
| | | ssvo.setCreateStartTime(startOfDayDate); |
| | | ssvo.setCreateEndTime(endOfDayDate); |
| | | ssvo.setCreateBy(serviceSubtask.getCreateBy()); |
| | | ssvo.setSendname(serviceSubtask.getSendname()); |
| | | ssvo.setSfzh(serviceSubtask.getSfzh()); |
| | | List<ServiceSubtask> serviceSubtaskListByCreateTime = serviceSubtaskMapper.selectServiceSubtaskListByCreateTime(ssvo); |
| | | if (CollectionUtils.isEmpty(serviceSubtaskListByCreateTime)) |
| | | serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); |
| | | } |
| | | } |
| | | } else if (descByCode.equals("短信")) { |
| | | RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample(); |
| | | String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key); |
| | | for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) { |
| | | log.error("短信长期任务发送---------进来了吗?{}", serviceSubtask); |
| | | boolean dateToday = isDateToday(serviceSubtask.getLongSendTime()); |
| | | if (dateToday) { |
| | | try { |
| | | //先判断患者是不是还要发送 |
| | | PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtask.getPatid()); |
| | | if (!Objects.isNull(patArchive) && patArchive.getNotrequiredFlag() == "1") { |
| | | //不需要发送 |
| | | serviceSubtask.setResult("error"); |
| | | serviceSubtask.setRemark(patArchive.getNotrequiredreason()); |
| | | serviceSubtask.setSendstate(4L); |
| | | serviceSubtask.setFinishtime(new Date()); |
| | | iServiceSubtaskService.insertServiceSubtask(serviceSubtask); |
| | | continue; |
| | | } |
| | | String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key); |
| | | String subId = rsaPublicKeyExample.encryptedData(serviceSubtask.getId().toString(), pub_key); |
| | | SendMagParam sendMagParam = new SendMagParam(); |
| | | sendMagParam.setType("4"); |
| | | ServiceOutPath serviceOutPath = new ServiceOutPath(); |
| | | serviceOutPath.setParam1(taskId); |
| | | serviceOutPath.setParam2(patid); |
| | | serviceOutPath.setParam3(ivrTask1.getTaskName()); |
| | | serviceOutPath.setParam6(subId); |
| | | 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.setPhone(serviceSubtask.getPhone()); |
| | | sendMagParam.setUrl(ip + ":" + req_path + "/wt?p=" + format); |
| | | sendMagParam.setContent("【新华医院】您好,邀请您填写出院调查表,请点击" + sendMagParam.getUrl() + "填写。感谢您配合!"); |
| | | Map<String, String> req = new HashMap<>(); |
| | | req.put("phone", sendMagParam.getPhone()); |
| | | req.put("content", sendMagParam.getContent()); |
| | | String isSuccess = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req)); |
| | | //任务发送记录 |
| | | ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); |
| | | serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); |
| | | serviceSubtaskRecord.setUuid(UUID.randomUUID().toString()); |
| | | serviceSubtaskRecord.setTasktype(serviceSubtask.getType()); |
| | | serviceSubtaskRecord.setPreachform("4"); |
| | | serviceSubtaskRecord.setStartTime(System.currentTimeMillis()); |
| | | serviceSubtaskRecord.setResult("success"); |
| | | if (StringUtils.isNotEmpty(isSuccess) && !isSuccess.equals("true")) |
| | | serviceSubtaskRecord.setResult("error"); |
| | | serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord); |
| | | |
| | | //发送完成后,修改状态 |
| | | serviceSubtask.setSendstate(3L); |
| | | if (StringUtils.isNotEmpty(isSuccess) && !isSuccess.equals("true")) { |
| | | serviceSubtask.setResult("success"); |
| | | serviceSubtask.setRemark("短信发送成功"); |
| | | } else { |
| | | serviceSubtask.setResult("error"); |
| | | serviceSubtask.setSendstate(5L); |
| | | serviceSubtask.setRemark("短信发送失败"); |
| | | } |
| | | iServiceSubtaskService.updateServiceSubtask(serviceSubtask); |
| | | } catch (Exception e) { |
| | | String guid = UUID.randomUUID().toString(); |
| | | log.error("长期任务,短信发送失败原因:{},{}", e.getMessage(), guid); |
| | | serviceSubtask.setResult("error"); |
| | | serviceSubtask.setRemark("系统错误"); |
| | | serviceSubtask.setSendstate(5L); |
| | | serviceSubtask.setFinishtime(new Date()); |
| | | serviceSubtask.setGuid(guid); |
| | | iServiceSubtaskService.updateServiceSubtask(serviceSubtask); |
| | | } |
| | | } |
| | | } |
| | | } else if (descByCode.equals("公众号")) { |
| | | log.error("公众号进来了吗?{}", descByCode); |
| | | //公众号 |
| | | RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample(); |
| | | String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key); |
| | | for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) { |
| | | log.error("serviceSubtask---------进来了吗?{}", serviceSubtask); |
| | | boolean dateToday = isDateToday(serviceSubtask.getLongSendTime()); |
| | | if (dateToday) { |
| | | try { |
| | | //先判断患者是不是还要发送 |
| | | PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtask.getPatid()); |
| | | if (!Objects.isNull(patArchive) && patArchive.getNotrequiredFlag() == "1") { |
| | | //不需要发送 |
| | | serviceSubtask.setResult("error"); |
| | | serviceSubtask.setRemark(patArchive.getNotrequiredreason()); |
| | | serviceSubtask.setSendstate(4L); |
| | | serviceSubtask.setFinishtime(new Date()); |
| | | iServiceSubtaskService.insertServiceSubtask(serviceSubtask); |
| | | continue; |
| | | } |
| | | String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key); |
| | | String url = null; |
| | | url = ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "¶m2=" + patid + "¶m3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "¶m5=false"; |
| | | String wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskDesc(), "无"); |
| | | Map<String, Object> map = JSONObject.parseObject(wxCode, Map.class); |
| | | |
| | | //任务发送记录 |
| | | ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); |
| | | serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); |
| | | serviceSubtaskRecord.setUuid(UUID.randomUUID().toString()); |
| | | serviceSubtaskRecord.setTasktype(serviceSubtask.getType()); |
| | | serviceSubtaskRecord.setPreachform("4"); |
| | | serviceSubtaskRecord.setStartTime(System.currentTimeMillis()); |
| | | serviceSubtaskRecord.setResult("success"); |
| | | if (!map.isEmpty() && (Boolean) map.get("succ") == false) |
| | | serviceSubtaskRecord.setResult("error"); |
| | | serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord); |
| | | |
| | | //发送完成后,修改状态 |
| | | serviceSubtask.setSendstate(3L); |
| | | if ((Boolean) map.get("succ") == true) { |
| | | serviceSubtask.setResult("success"); |
| | | } else { |
| | | serviceSubtask.setResult("error"); |
| | | serviceSubtask.setSendstate(5L); |
| | | serviceSubtask.setRemark(map.get("msg").toString()); |
| | | } |
| | | iServiceSubtaskService.updateServiceSubtask(serviceSubtask); |
| | | } catch (Exception e) { |
| | | String guid = UUID.randomUUID().toString(); |
| | | log.error("长期任务,公众号发送失败原因:{},{}", e.getMessage(), guid); |
| | | serviceSubtask.setResult("error"); |
| | | serviceSubtask.setRemark("系统错误"); |
| | | serviceSubtask.setSendstate(5L); |
| | | serviceSubtask.setFinishtime(new Date()); |
| | | serviceSubtask.setGuid(guid); |
| | | iServiceSubtaskService.updateServiceSubtask(serviceSubtask); |
| | | } |
| | | } |
| | | if (org.apache.commons.lang3.StringUtils.isEmpty(serviceSubtask.getPhone())) { |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "手机号为空", "4"); |
| | | return; |
| | | } |
| | | boolean dateToday = isDateToday(serviceSubtask.getVisitTime()); |
| | | //说明是立即发送(先把消息放到cache-0中, displayNo不知道怎么配置) |
| | | if (dateToday) { |
| | | list.add(serviceSubtask.getId().toString()); |
| | | //在子任务表里记录一下 |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "长期任务,电话进入队列成功", "2"); |
| | | //任务发送记录 |
| | | ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); |
| | | serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); |
| | | serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId()); |
| | | serviceSubtaskRecord.setUuid(UUID.randomUUID().toString()); |
| | | serviceSubtaskRecord.setTasktype(serviceSubtask.getType()); |
| | | serviceSubtaskRecord.setPreachform("3"); |
| | | serviceSubtaskRecord.setStartTime(System.currentTimeMillis()); |
| | | serviceSubtaskRecord.setRemark("长期任务,电话进入队列成功"); |
| | | serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord); |
| | | } |
| | | //将要执行的放到缓存中 |
| | | if (list.size() > 0) { |
| | | redisCache.setCacheListLeftAndDistinct("cache-0", list); |
| | | log.info("【sfHandlle】电话任务已加入队列,数量:{}", list.size()); |
| | | } |
| | | } else if (descByCode.equals("微信小程序")) { |
| | | //微信小程序 |
| | | if (ObjectUtils.isNotEmpty(ivrTask1) && ivrTask1.getPatCycle() == 1) { |
| | | //说明该任务的患者是循环执行的 |
| | | //判断患者过滤集合中,是否存在当前执行患者的身份证 |
| | | boolean continutFlag = false; |
| | | for (ServiceSubtask ss : serviceSubtaskListFilter) { |
| | | if (ss.getSfzh().equals(serviceSubtask.getSfzh())) { |
| | | continutFlag = true; |
| | | } |
| | | } |
| | | //通知 MQ 消息已被接收,可以ACK(从队列中删除)了 (这个需要根据业务再去处理ACK) |
| | | //如果存在当前执行患者的身份证,则不执行该患者了 |
| | | if (continutFlag) { |
| | | return; |
| | | } |
| | | |
| | | //将子任务ID删除 、sendstate改成3(循环任务就是这样) |
| | | serviceSubtask.setSendstate(3L); |
| | | serviceSubtask.setId(null); |
| | | serviceSubtask.setFinishtime(null); |
| | | serviceSubtask.setCreateTime(new Date()); |
| | | serviceSubtask.setUpdateTime(new Date()); |
| | | serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); |
| | | |
| | | //将当前要执行的患者放到过滤患者集合中 |
| | | serviceSubtaskListFilter.add(serviceSubtask); |
| | | } |
| | | } else if (descByCode.equals("短信")) { |
| | | RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample(); |
| | | String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key); |
| | | log.info("【sfHandlle】处理短信长期任务,患者ID:{}", serviceSubtask.getPatid()); |
| | | boolean dateToday = isDateToday(serviceSubtask.getVisitTime()); |
| | | if (dateToday) { |
| | | try { |
| | | String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key); |
| | | String subId = rsaPublicKeyExample.encryptedData(serviceSubtask.getId().toString(), pub_key); |
| | | SendMagParam sendMagParam = new SendMagParam(); |
| | | sendMagParam.setType("4"); |
| | | ServiceOutPath serviceOutPath = new ServiceOutPath(); |
| | | serviceOutPath.setParam1(taskId); |
| | | serviceOutPath.setParam2(patid); |
| | | serviceOutPath.setParam3(ivrTask1.getTaskName()); |
| | | serviceOutPath.setParam6(subId); |
| | | serviceOutPath.setCreateTime(new Date()); |
| | | iServiceOutPathService.insertServiceOutPath(serviceOutPath); |
| | | String format = String.format("%03X", serviceOutPath.getId()); |
| | | serviceOutPath.setRadix(format); |
| | | serviceOutPath.setUpdateTime(new Date()); |
| | | iServiceOutPathService.updateServiceOutPath(serviceOutPath); |
| | | //先判断一下发的是不是宣教 |
| | | if (!"3".equals(serviceSubtask.getType())) { |
| | | sendMagParam.setPhone(serviceSubtask.getPhone()); |
| | | sendMagParam.setUrl(localIP + ":" + req_path + "/wt?p=" + format); |
| | | //如果type是语音随访的话(说明补偿发送方式中有电话随访的方式,这里的外链就地址只能用/sf) |
| | | if (serviceSubtask.getType().equals("1")) |
| | | sendMagParam.setUrl(localIP + ":" + req_path + "/sf?p=" + format); |
| | | sendMagParam.setContent("您好,邀请您填写出院调查表,请点击" + sendMagParam.getUrl() + "填写。感谢您配合!"); |
| | | } else { |
| | | HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid()); |
| | | if ("2".equals(heLibrary.getHetype())) { |
| | | sendMagParam.setPhone(serviceSubtask.getPhone()); |
| | | sendMagParam.setContent(heLibrary.getPreachcontent()); |
| | | } |
| | | } |
| | | String isSuccess = null; |
| | | if (visitHosp == 1) { |
| | | Map<String, String> req = new HashMap<>(); |
| | | req.put("phone", sendMagParam.getPhone()); |
| | | req.put("content", sendMagParam.getContent()); |
| | | isSuccess = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req)); |
| | | } else if (visitHosp == 2) { |
| | | String url = configService.selectConfigByKey("token.360", serviceSubtask.getOrgid()); |
| | | //丽水的短信发送方式 |
| | | Map<String, String> map = MsgLSEnum.getAddressByCode(serviceSubtask.getOrgid()); |
| | | String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid(), url); |
| | | if (ObjectUtils.isNotEmpty(map) && StringUtils.isEmpty(map.get("address"))) { |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "短信发送失败,该机构没有配置短信地址", "5"); |
| | | return; |
| | | } |
| | | log.info("【sfHandlle】丽水短信发送,地址:{},参数:{},机构ID:{}", 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.info("【sfHandlle】丽水短信发送结果:{}", dxCode); |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | Map<String, Object> textParam = objectMapper.readValue(dxCode, Map.class); |
| | | String code = textParam.get("Code").toString(); |
| | | if (code.equals("0")) { |
| | | isSuccess = "true"; |
| | | } |
| | | } else if (visitHosp == 4) { |
| | | //省立同德的短信发送方式 |
| | | JSONObject data = MessageSend.sendMsg(sendMagParam.getContent(), "2", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); |
| | | String code = data.get("code").toString(); |
| | | if (StringUtils.isNotEmpty(code) && code.equals("00000")) { |
| | | isSuccess = "true"; |
| | | } |
| | | } else if (visitHosp == 3) {//市一医院 |
| | | String content = sendMagParam.getContent().replace("【新华医院】", ""); |
| | | String result = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, sendMagParam.getPhone(), content); |
| | | //这里需要根据result返回的值去判断,是否成功,然后将值赋值给isSuccess |
| | | |
| | | |
| | | } |
| | | //任务发送记录 |
| | | ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); |
| | | serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); |
| | | serviceSubtaskRecord.setUuid(UUID.randomUUID().toString()); |
| | | serviceSubtaskRecord.setTasktype(serviceSubtask.getType()); |
| | | serviceSubtaskRecord.setPreachform("4"); |
| | | serviceSubtaskRecord.setStartTime(System.currentTimeMillis()); |
| | | serviceSubtaskRecord.setResult("success"); |
| | | if (StringUtils.isNotEmpty(isSuccess) && !isSuccess.equals("true")) |
| | | serviceSubtaskRecord.setResult("error"); |
| | | serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord); |
| | | |
| | | //发送完成后,修改状态 |
| | | serviceSubtask.setSendstate(3L); |
| | | if (StringUtils.isNotEmpty(isSuccess) && isSuccess.equals("true")) { |
| | | serviceSubtask.setResult("success"); |
| | | serviceSubtask.setRemark("短信发送成功"); |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "短信发送成功", "2"); |
| | | } else { |
| | | serviceSubtask.setResult("error"); |
| | | serviceSubtask.setRemark("短信发送失败"); |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "短信发送失败", "5"); |
| | | } |
| | | } catch (Exception e) { |
| | | String guid = UUID.randomUUID().toString(); |
| | | log.error("【sfHandlle】长期任务短信发送失败,原因:{},GUID:{}", e.getMessage(), guid); |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "长期任务短信发送失败:系统错误", "5"); |
| | | } |
| | | } |
| | | |
| | | } else if (descByCode.equals("公众号")) { |
| | | log.info("【sfHandlle】处理公众号任务,任务信息:{}", ivrTask1); |
| | | //公众号 |
| | | RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample(); |
| | | String taskId = rsaPublicKeyExample.encryptedData(ivrTask1.getTaskid().toString(), pub_key); |
| | | boolean dateToday = isDateToday(serviceSubtask.getVisitTime()); |
| | | if (dateToday) { |
| | | try { |
| | | String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key); |
| | | String url = null; |
| | | url = localIP + ":" + req_path + "/outsideChainwt?param1=" + taskId + "¶m2=" + patid + "¶m3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "¶m5=false"; |
| | | |
| | | //获取微信公众号请求信息根据机构ID |
| | | List<String> wxqqxx = WxGZHEnum.getDescByCode(patArchive.getOrgid()); |
| | | if (CollectionUtils.isEmpty(wxqqxx) || wxqqxx.size() < 4) { |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "【公众号】该机构的公众号配置信息不全,无法通过公众号发送", "4"); |
| | | return; |
| | | } |
| | | |
| | | if (StringUtils.isEmpty(patArchive.getPatidHis())) { |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "【公众号】公众号发送失败,his系统的患者id为空", "5"); |
| | | return; |
| | | } |
| | | String wxCode = ""; |
| | | if (visitHosp == 3) {//市一医院 |
| | | 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); |
| | | } 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); |
| | | //任务发送记录 |
| | | ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); |
| | | serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); |
| | | serviceSubtaskRecord.setUuid(UUID.randomUUID().toString()); |
| | | serviceSubtaskRecord.setTasktype(serviceSubtask.getType()); |
| | | serviceSubtaskRecord.setPreachform("4"); |
| | | serviceSubtaskRecord.setStartTime(System.currentTimeMillis()); |
| | | serviceSubtaskRecord.setResult("success"); |
| | | if (!map.isEmpty() && (Boolean) map.get("succ") == false) serviceSubtaskRecord.setResult("error"); |
| | | serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord); |
| | | |
| | | //发送完成后,修改状态 |
| | | serviceSubtask.setSendstate(3L); |
| | | if ((Boolean) map.get("succ") == true) { |
| | | serviceSubtask.setResult("success"); |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "【公众号】公众号发送成功", "2"); |
| | | } else { |
| | | log.error("【sfHandlle】公众号发送失败,患者信息:{},错误信息:{}", serviceSubtask, map.get("msg")); |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "【公众号】公众号发送失败", "5"); |
| | | } |
| | | } catch (Exception e) { |
| | | String guid = UUID.randomUUID().toString(); |
| | | log.error("【sfHandlle】长期任务公众号发送失败,原因:{},GUID:{}", e.getMessage(), guid); |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "【公众号】长期任务公众号发送失败,原因:" + e.getMessage(), "5"); |
| | | } |
| | | } |
| | | } else if (descByCode.equals("人工")) { |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "人工待执行", "2"); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获出院患者信息 |
| | | * cry 出入院: 0 入院 1 出院 |
| | | */ |
| | | @Transactional |
| | | public void getInHospInfo(String cry, LocalDateTime startTime, LocalDateTime endTime) { |
| | | // 定义日期时间格式 |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"); |
| | | Map<String, String> req = new HashMap<>(); |
| | | if (cry.equals("1")) { |
| | | req.put("cashStartDate", startTime.format(formatter)); |
| | | req.put("cashEndDate", endTime.format(formatter)); |
| | | req.put("currStatus", "4"); |
| | | } else if (cry.equals("0")) { |
| | | req.put("admissStartDate", startTime.format(formatter)); |
| | | req.put("admissEndDate", endTime.format(formatter)); |
| | | req.put("currStatus", "2"); |
| | | private Date getNextVisitTime(Long subid, Long taskid, Date visitTime) { |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform(); |
| | | serviceSubtaskPreachform.setSubid(subid); |
| | | serviceSubtaskPreachform.setTaskid(taskid); |
| | | List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform); |
| | | if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) { |
| | | String compensateTime = serviceSubtaskPreachforms.get(0).getCompensateTime(); |
| | | int hoursToAdd = Integer.valueOf(compensateTime) * 24; |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(visitTime); |
| | | calendar.add(Calendar.HOUR_OF_DAY, hoursToAdd); |
| | | Date newDate = calendar.getTime(); |
| | | return newDate; |
| | | } |
| | | Map<String, String> header = new HashMap<>(); |
| | | header.put("x-hcsb-serviceno", "IS002347"); |
| | | header.put("x-hcsb-version", "2.0"); |
| | | header.put("x-hcsb-sourcesyscode", "14"); |
| | | header.put("x-hcsb-token", "ArGE2JnHtxG/Zx5nrnGY4eOfMUJGGJokAJHigG1BrCY="); |
| | | header.put("x-hcsb-msgdate", startTime.format(formatter)); |
| | | String result = HttpUtils.sendPostByHeader(hospInfoUrl, new Gson().toJson(req), header); |
| | | //数据解析 |
| | | Gson gson = new Gson(); |
| | | JsonObject jsonObject = gson.fromJson(result, JsonObject.class); |
| | | JsonArray resultArray = jsonObject.getAsJsonObject("data").getAsJsonArray("result"); |
| | | Type resultType = new TypeToken<List<ThiedInhospInfo>>() { |
| | | }.getType(); |
| | | List<ThiedInhospInfo> thiedInhospInfoList = gson.fromJson(resultArray, resultType); |
| | | return visitTime; |
| | | } |
| | | |
| | | // 创建一个新文件 |
| | | String filename = null; |
| | | if (cry.equals("0")) filename = "入院信息" + System.currentTimeMillis(); |
| | | if (cry.equals("1")) filename = "出院信息" + System.currentTimeMillis(); |
| | | File file = new File("D:\\public\\HIS数据采集\\" + filename); |
| | | if (!file.exists()) { |
| | | // 如果文件不存在,则创建新文件 |
| | | try { |
| | | if (file.createNewFile()) { |
| | | System.out.println("成功创建了新文件!"); |
| | | } else { |
| | | System.out.println("失败!文件无法创建!"); |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | private String getSendPreachform(ServiceSubtaskPreachform serviceSubtaskPreachform, ServiceSubtask serviceSubtask) { |
| | | List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform); |
| | | |
| | | // 情况1:currentPreachform为空,取sort为1的preachform |
| | | if (StringUtils.isEmpty(serviceSubtask.getCurrentPreachform())) { |
| | | return serviceSubtaskPreachforms.stream().filter(item -> item.getSort() == 1L).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse(null); |
| | | } |
| | | // 将数据写入到文件中 |
| | | |
| | | // 情况2:currentPreachform不为空,找下一个sort |
| | | Optional<Long> currentSort = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getSort).findFirst(); |
| | | |
| | | if (currentSort.isPresent()) { |
| | | // 检查是否所有sendstate不等于9 |
| | | boolean allSendStateNot1AndNot9 = serviceSubtaskPreachforms.stream().allMatch(item -> !item.getSendstate().equals("9")); |
| | | if (!allSendStateNot1AndNot9) { |
| | | //说明,在某种方式发送失败后,又成功了(例如短信或公众号,在规定时间外患者做完了,这个时候,状态改成了9) |
| | | serviceSubtask.setSendstate(6L); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | return "-1"; |
| | | } |
| | | |
| | | // 当sort等于列表size时,并且所有sendstate都不等于9,则返回-1 |
| | | if (currentSort.get().equals((long) serviceSubtaskPreachforms.size())) { |
| | | if (allSendStateNot1AndNot9) { |
| | | //说明全发送失败了 |
| | | serviceSubtask.setSendstate(5L); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | //修改发送状态 |
| | | setFail(serviceSubtaskPreachforms, serviceSubtask); |
| | | } |
| | | return "-1"; |
| | | } |
| | | |
| | | // 当sort等于列表size时,下一个sort为-1 |
| | | Long nextSort = currentSort.get() + 1; |
| | | |
| | | //如果当前的发送方式不为空,并且开始准备要用下一种方式发送了,那当前的肯定没有发送成功,需要设置失败 |
| | | // (这里主要是,人工如果没有随访,然后到公众号的时候,就不会再去管人工是否成功,人工的状态会一直卡在2的状态上) |
| | | if (StringUtils.isNotEmpty(serviceSubtask.getCurrentPreachform())) { |
| | | setFail(serviceSubtaskPreachforms, serviceSubtask); |
| | | } |
| | | |
| | | // 找到下一个sort对应的preachform |
| | | return serviceSubtaskPreachforms.stream().filter(item -> nextSort.equals(item.getSort())).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse("-1"); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | private Integer setFail(List<ServiceSubtaskPreachform> serviceSubtaskPreachforms, ServiceSubtask serviceSubtask) { |
| | | Optional<Long> id = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getId).findFirst(); |
| | | if (id.isPresent()) { |
| | | ServiceSubtaskPreachform subtaskPreachform = new ServiceSubtaskPreachform(); |
| | | subtaskPreachform.setSendstate("5"); |
| | | subtaskPreachform.setId(id.get()); |
| | | return serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(subtaskPreachform); |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | |
| | | private String getDXCode(String address, String ShouJiHM, String FaSongNR, String FaSongRID, String FaSongRXM, Map<String, Object> headerMap, String token) { |
| | | Map<String, Object> map = new LinkedHashMap<>(); |
| | | |
| | | Map<String, Object> YeWuXX = new LinkedHashMap<>(); |
| | | Map<String, Object> DuanXinXX = new LinkedHashMap<>(); |
| | | DuanXinXX.put("ShouJiHM", ShouJiHM); |
| | | DuanXinXX.put("FaSongNR", FaSongNR); |
| | | DuanXinXX.put("FaSongRID", FaSongRID); |
| | | DuanXinXX.put("FaSongRXM", FaSongRXM); |
| | | YeWuXX.put("DuanXinXX", DuanXinXX); |
| | | |
| | | map.put("XiaoXiTou", headerMap); |
| | | map.put("YeWuXX", YeWuXX); |
| | | |
| | | String body = new Gson().toJson(map); |
| | | |
| | | // String result = HttpUtils.sendPost(address, body); |
| | | String result = null; |
| | | try { |
| | | FileWriter writer = new FileWriter(file); |
| | | writer.write(result); |
| | | result = OkHttpExample.sendPostRequest(address, body, token); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | log.info("【getDXCode】短信发送结果:{}", result); |
| | | |
| | | if (CollectionUtils.isNotEmpty(thiedInhospInfoList)) { |
| | | for (ThiedInhospInfo thiedInhospInfo : thiedInhospInfoList) { |
| | | //通过身份证号查询该患者在患者表是否存在 |
| | | PatArchive patArchive = new PatArchive(); |
| | | List<PatArchive> patArchives = null; |
| | | patArchive.setIdcardno(thiedInhospInfo.getPatiIdCardNo().trim()); |
| | | if (StringUtils.isNotEmpty(thiedInhospInfo.getPatiIdCardNo().trim())) { |
| | | patArchives = patArchiveService.selectPatArchiveList(patArchive); |
| | | } else { |
| | | //患者信息为空,直接 下一个 |
| | | continue; |
| | | } |
| | | if (CollectionUtils.isEmpty(patArchives) || patArchives.size() == 0) { |
| | | patArchive.setPatientno(thiedInhospInfo.getPatiMediaNo()); |
| | | patArchive.setSourcefrom(2); |
| | | patArchive.setPattype("2"); |
| | | if (StringUtils.isNotEmpty(thiedInhospInfo.getOutWayId()) && thiedInhospInfo.getOutWayId().equals("4")) { |
| | | //如果为4就是死亡 |
| | | patArchive.setNotrequiredFlag("1"); |
| | | patArchive.setNotrequiredreason(thiedInhospInfo.getOutWayName()); |
| | | } |
| | | if (cry.equals("1") && StringUtils.isEmpty(thiedInhospInfo.getOutWayId())) { |
| | | //如果为4就是死亡 |
| | | patArchive.setNotrequiredFlag("1"); |
| | | patArchive.setNotrequiredreason("出院方式为空"); |
| | | } |
| | | patArchive.setSex(thiedInhospInfo.getPatiRecordGender().equals("男") ? 1L : 2L); |
| | | patArchive.setNation(thiedInhospInfo.getPatiNation()); |
| | | patArchive.setNativePlace(thiedInhospInfo.getPatiNationality()); |
| | | patArchive.setPlaceOfResidence(StringUtils.isNotEmpty(thiedInhospInfo.getPatiHomeAddr()) ? thiedInhospInfo.getPatiHomeAddr().replace("null", "") : ""); |
| | | try { |
| | | if (StringUtils.isNotEmpty(thiedInhospInfo.getPatiBirthday())) |
| | | patArchive.setBirthdate(new SimpleDateFormat("yyyy-MM-dd").parse(thiedInhospInfo.getPatiBirthday())); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | if (thiedInhospInfo.getTreateAge() != null) { |
| | | patArchive.setAge(Long.valueOf(thiedInhospInfo.getTreateAge())); |
| | | } else { |
| | | patArchive.setAge(null); |
| | | } |
| | | patArchive.setAgeUnit(thiedInhospInfo.getTreatAgeunit()); |
| | | patArchive.setTelcode(thiedInhospInfo.getCompanyTelNum()); |
| | | patArchive.setRelativetelcode(thiedInhospInfo.getContactPersonPhone()); |
| | | patArchive.setDelFlag("0"); |
| | | patArchive.setCreateTime(new Date()); |
| | | patArchive.setUpdateTime(new Date()); |
| | | patArchive.setName(thiedInhospInfo.getPatiRecordName()); |
| | | patArchiveService.insertPatArchive(patArchive); |
| | | } else { |
| | | patArchive = patArchives.get(0); |
| | | } |
| | | |
| | | log.error("入参的patArchive:{}", patArchive); |
| | | PatMedInhosp patMedInhosp = new PatMedInhosp(); |
| | | patMedInhosp.setPatid(patArchive.getId()); |
| | | patMedInhosp.setPatno(patArchive.getPatientno()); |
| | | patMedInhosp.setPatname(patArchive.getName()); |
| | | patMedInhosp.setNurseId(thiedInhospInfo.getNurseId()); |
| | | patMedInhosp.setNurseName(thiedInhospInfo.getNurseName()); |
| | | patMedInhosp.setSerialnum(thiedInhospInfo.getInpatientId()); |
| | | patMedInhosp.setFuflag("1"); |
| | | if (cry.equals("0")) { |
| | | patMedInhosp.setInhospstate("0"); |
| | | } else if (cry.equals("1")) { |
| | | patMedInhosp.setInhospstate("1"); |
| | | } |
| | | patMedInhosp.setHospitalcode(thiedInhospInfo.getAreaId()); |
| | | patMedInhosp.setIcd10code(thiedInhospInfo.getDiagIcd10()); |
| | | patMedInhosp.setDiagname(thiedInhospInfo.getDiagName()); |
| | | try { |
| | | if (StringUtils.isNotEmpty(thiedInhospInfo.getAdmissDate())) |
| | | patMedInhosp.setStarttime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(thiedInhospInfo.getAdmissDate())); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | try { |
| | | if (StringUtils.isNotEmpty(thiedInhospInfo.getOutDate())) |
| | | patMedInhosp.setEndtime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(thiedInhospInfo.getOutDate())); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | patMedInhosp.setDeptcode(thiedInhospInfo.getAdmissDeptId()); |
| | | patMedInhosp.setDeptid(thiedInhospInfo.getAdmissDeptId()); |
| | | patMedInhosp.setDeptname(thiedInhospInfo.getAdmissDeptName()); |
| | | patMedInhosp.setBedNo(thiedInhospInfo.getAdmissBedNo()); |
| | | patMedInhosp.setDelFlag("0"); |
| | | // patMedInhosp.setLeaveldeptcode(thiedInhospInfo.getCurrDeptCode()); |
| | | patMedInhosp.setLeaveldeptcode(thiedInhospInfo.getCurrDeptId()); |
| | | patMedInhosp.setLeaveldeptname(thiedInhospInfo.getCurrDeptName()); |
| | | patMedInhosp.setLeavediagname(thiedInhospInfo.getDiagName()); |
| | | patMedInhosp.setLeaveicd10code(thiedInhospInfo.getDiagIcd10()); |
| | | patMedInhosp.setDrname(thiedInhospInfo.getDoctName()); |
| | | patMedInhosp.setDrcode(thiedInhospInfo.getDoctId()); |
| | | patMedInhosp.setOutWayId(thiedInhospInfo.getOutWayId()); |
| | | patMedInhosp.setOutWayName(thiedInhospInfo.getOutWayName()); |
| | | if (cry.equals("0")) { |
| | | patMedInhosp.setSchemestatus(1L); |
| | | } else if (cry.equals("1")) { |
| | | patMedInhosp.setSchemestatus(2L); |
| | | } |
| | | patMedInhosp.setLeavehospitaldistrictid(thiedInhospInfo.getCurrWardCode()); |
| | | patMedInhosp.setLeavehospitaldistrictcode(thiedInhospInfo.getCurrWardId()); |
| | | patMedInhosp.setLeavehospitaldistrictname(thiedInhospInfo.getCurrWardName()); |
| | | patMedInhosp.setLeaveldeptid(thiedInhospInfo.getCurrDeptCode()); |
| | | patMedInhosp.setOrgid("1"); |
| | | //如果是出院,先通过患者编号和流水号去查一下,患者是否存在,如果存在,则进行修改 |
| | | PatMedInhosp inhosp = new PatMedInhosp(); |
| | | inhosp.setPatno(patArchive.getPatientno()); |
| | | inhosp.setSerialnum(patMedInhosp.getSerialnum()); |
| | | List<PatMedInhosp> patMedInhosps = patMedInhospService.selectPatMedInhospList(inhosp); |
| | | log.error("是否需要更新:{}", patMedInhosps.size()); |
| | | if (CollectionUtils.isNotEmpty(patMedInhosps)) { |
| | | patMedInhosp.setInhospid(patMedInhosps.get(0).getInhospid()); |
| | | log.error("------患者出入院修改信息:{}", patMedInhosp); |
| | | patMedInhospService.updatePatMedInhosp(patMedInhosp); |
| | | } else { |
| | | log.error("----患者出入院新增信息:{}", patMedInhosp); |
| | | patMedInhospService.insertPatMedInhosp(patMedInhosp); |
| | | } |
| | | |
| | | } |
| | | } |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | String code = (String) jsonObject.toString(); |
| | | return code; |
| | | } |
| | | |
| | | |
| | | private String getKey() { |
| | | Map<String, String> map = new HashMap<>(); |
| | | for (int i = 0; i < 6; i++) { |
| | | Boolean aBoolean = redisCache.hasKey("cache-" + i); |
| | | if (!aBoolean) { |
| | | redisCache.setCacheObject("cache-" + i, ""); |
| | | map.put("cache-" + i, ""); |
| | | } else { |
| | | map.put("cache-" + i, redisCache.getCacheObject("cache-" + i)); |
| | | } |
| | | } |
| | | |
| | | String key = null; |
| | | String value = ""; |
| | | for (Map.Entry<String, String> entry : map.entrySet()) { |
| | | if (StringUtils.isEmpty(value)) { |
| | | value = entry.getValue(); |
| | | key = entry.getKey(); |
| | | } else { |
| | | if (entry.getValue().split(",").length < value.split(",").length) { |
| | | value = entry.getValue(); |
| | | key = entry.getKey(); |
| | | } |
| | | } |
| | | } |
| | | 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 phone, String setPatientname, String setPatientid, List<String> wxqqxx) { |
| | | 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(phone); |
| | | xinHuaWXReq.setMedcardno(null); |
| | | xinHuaWXReq.setTitlename(taskName); |
| | | xinHuaWXReq.setContent(taskDesc); |
| | | xinHuaWXReq.setAppid(wxqqxx.get(1)); |
| | | log.info("【getWXCode】微信公众号请求参数:{}", xinHuaWXReq); |
| | | String body = new Gson().toJson(xinHuaWXReq); |
| | | String encode = encode(wxqqxx.get(2).concat(body)); |
| | | Map<String, String> headerMap = new HashMap<>(); |
| | | headerMap.put("sign", encode); |
| | | String result = HttpUtils.sendPostByHeader(wxqqxx.get(3), body, headerMap); |
| | | |
| | | String result = HttpUtils.sendPost(thirdWXUrl, new Gson().toJson(xinHuaWXReq)); |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | log.error("jsonObject的数据为:{}", jsonObject.toString()); |
| | | // String code = (String) jsonObject.get("code"); |
| | | return jsonObject.toString(); |
| | | String code = (String) jsonObject.toString(); |
| | | return code; |
| | | } |
| | | |
| | | // public static void main(String[] args) { |
| | | // LocalDateTime originalDateTime = LocalDateTime.now(); |
| | | // LocalDateTime startOfDay = originalDateTime.with(LocalTime.MIN); |
| | | // System.out.println("Original DateTime: " + originalDateTime); |
| | | // System.out.println("Start of Day: " + startOfDay); |
| | | // } |
| | | |
| | | public String encode(String arg) { |
| | | if (arg == null) { |
| | | arg = ""; |
| | | } |
| | | MessageDigest md5 = null; |
| | | try { |
| | | md5 = MessageDigest.getInstance("MD5"); |
| | | md5.update(arg.getBytes("UTF-8")); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return toHex(md5.digest()); |
| | | } |
| | | |
| | | public void collectHIS() { |
| | | try { |
| | | // HIS数据采集 |
| | | log.info("【dealHisData】HIS开始采集数据"); |
| | | ichService.sync(); |
| | | log.info("【dealHisData】HIS结束采集数据"); |
| | | } catch (Exception e) { |
| | | log.error("【dealHisData】HIS数据采集异常", e); |
| | | } |
| | | } |
| | | |
| | | public Boolean setSuccessPreachForm(ServiceSubtask serviceSubtask, String preachform, String remark, String failSendstate) { |
| | | if (preachform.equals("-1")) { |
| | | //说明都不需要执行了 |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform(); |
| | | serviceSubtaskPreachform.setSubid(serviceSubtask.getId()); |
| | | serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid()); |
| | | serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid()); |
| | | serviceSubtaskPreachform.setSendstate(failSendstate); |
| | | serviceSubtaskPreachformMapper.updateSSPByCondition(serviceSubtaskPreachform); |
| | | return true; |
| | | } |
| | | |
| | | |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform(); |
| | | serviceSubtaskPreachform.setSubid(serviceSubtask.getId()); |
| | | serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid()); |
| | | serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid()); |
| | | List<ServiceSubtaskPreachform> sspCount = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform); |
| | | |
| | | serviceSubtaskPreachform.setPreachform(preachform); |
| | | //1:未发送状态 |
| | | serviceSubtaskPreachform.setSendstate("1"); |
| | | //电话的未发送状态,需要查2,因为,数据可能卡在队列里了; (没进队列,电话状态还是1) |
| | | if (preachform.equals("3") && StringUtils.isNotEmpty(failSendstate) && Long.valueOf(failSendstate) > 2) |
| | | serviceSubtaskPreachform.setSendstate("2"); |
| | | //人工的未发送状态,需要查2 |
| | | if (preachform.equals("1") && StringUtils.isNotEmpty(failSendstate) && Long.valueOf(failSendstate) > 2) |
| | | serviceSubtaskPreachform.setSendstate("2"); |
| | | |
| | | List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform); |
| | | if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) { |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0); |
| | | serviceSubtaskPreachform1.setSendstate(failSendstate); |
| | | serviceSubtaskPreachform1.setRemark(remark); |
| | | serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1); |
| | | |
| | | //如果当前的preachform已经是最后一个了,那直接将serviceSubtask的sendstate状态改成5就行了(全失败了) |
| | | if (serviceSubtaskPreachform1.getSort() == sspCount.size()) { |
| | | if (failSendstate.equals("4") || failSendstate.equals("5")) { |
| | | serviceSubtask.setCurrentPreachform(preachform); |
| | | serviceSubtask.setSendstate(5L); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | return true; |
| | | } |
| | | } |
| | | } else { |
| | | log.error("【定时任务中该患者没有查询到属于他的发送方式,subid:{},prechform:{},orgid:{}】", serviceSubtask.getId(), preachform, serviceSubtask.getOrgid()); |
| | | return false; |
| | | } |
| | | //将下一次的随访时间与当前执行方式记录一下 |
| | | serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime())); |
| | | serviceSubtask.setCurrentPreachform(preachform); |
| | | serviceSubtask.setSendstate(3L); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | return true; |
| | | } |
| | | } |