package com.ruoyi.quartz.task;
|
|
import com.alibaba.fastjson2.JSONObject;
|
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.enums.MsgLSEnum;
|
import com.ruoyi.common.enums.ServiceFromEnum;
|
import com.ruoyi.common.enums.VisitSendStateEnum;
|
import com.ruoyi.common.enums.WxGZHEnum;
|
import com.ruoyi.common.exception.base.BaseException;
|
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.LSHospTokenUtil;
|
import com.smartor.domain.*;
|
import com.smartor.mapper.ServiceSubtaskMapper;
|
import com.smartor.mapper.ServiceTaskMapper;
|
import com.smartor.mapper.SysUserImportMapper;
|
import com.smartor.service.*;
|
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.lang.reflect.Type;
|
import java.net.URLEncoder;
|
import java.nio.charset.StandardCharsets;
|
import java.nio.file.Files;
|
import java.nio.file.Paths;
|
import java.security.MessageDigest;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.LocalTime;
|
import java.time.ZoneId;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
import static cn.hutool.core.convert.Convert.toHex;
|
|
/**
|
* 定时任务调度测试
|
*
|
* @author ruoyi
|
*/
|
@Slf4j
|
@Component("ryTask")
|
public class RyTask {
|
@Autowired
|
private IServiceThirdDataService iServiceThirdDataService;
|
|
@Autowired
|
private IServiceOutPathService iServiceOutPathService;
|
|
@Autowired
|
private IServiceSubtaskAnswerService serviceSubtaskAnswerService;
|
|
@Autowired
|
private IPatMedInhospService iPatMedInhospService;
|
|
@Autowired
|
private IPatMedOuthospService iPatMedOuthospService;
|
|
@Autowired
|
private IPatMedOperationService iPatMedOperationService;
|
|
@Autowired
|
private IServiceSubtaskService iServiceSubtaskService;
|
|
@Autowired
|
private IServicePatientTempService iServicePatientTempService;
|
|
@Autowired
|
private PlatformTransactionManager transactionManager;
|
|
@Autowired
|
private SysUserImportMapper sysUserImportMapper;
|
|
@Value("${localIP}")
|
private String localIP;
|
|
@Value("${xhsmsPath}")
|
private String xhsmsPath;
|
|
@Value("${pub_key}")
|
private String pub_key;
|
|
@Value("${req_path}")
|
private String req_path;
|
|
@Value("${visitHosp}")
|
private Integer visitHosp;
|
|
@Autowired
|
private ServiceTaskMapper serviceTaskMapper;
|
|
@Autowired
|
private ServiceSubtaskMapper serviceSubtaskMapper;
|
|
@Autowired
|
private RedisCache redisCache;
|
|
@Autowired
|
private IServiceSubtaskRecordService serviceSubtaskRecordService;
|
|
@Autowired
|
IBaseSmsaccountService baseSmsaccountService;
|
|
@Autowired
|
IPatArchiveService patArchiveService;
|
|
@Autowired
|
IPatMedInhospService patMedInhospService;
|
|
@Autowired
|
IPatMedOuthospService patMedOuthospService;
|
|
@Autowired
|
ISvyTaskTemplateService svyTaskTemplateService;
|
|
@Autowired
|
IIvrTaskTemplateService iIvrTaskTemplateService;
|
|
@Value("${hosp_info_url}")
|
private String hospInfoUrl;
|
|
@Value("${appid}")
|
private String appid;
|
|
@Value("${server.port}")
|
private String port;
|
|
public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) {
|
System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i));
|
}
|
|
public void ryParams(String params) {
|
System.out.println("执行有参方法:" + params);
|
}
|
|
public void ryNoParams() {
|
System.out.println("执行无参方法");
|
}
|
|
public void importData() {
|
String filePath = "C:\\Users\\86176\\Desktop\\新建文本文档 4.txt"; // 替换为你的文件路径
|
|
try {
|
// 读取文件内容
|
String jsonContent = new String(Files.readAllBytes(Paths.get(filePath)), StandardCharsets.UTF_8);
|
|
// 创建ObjectMapper对象
|
ObjectMapper objectMapper = new ObjectMapper();
|
// 解析JSON为JsonNode
|
JsonNode rootNode = objectMapper.readTree(jsonContent);
|
// 获取resultList
|
JsonNode resultListNode = rootNode.path("results").path("resultList");
|
// 遍历resultList中的每个对象
|
for (JsonNode item : resultListNode) {
|
|
SysUserImport person = objectMapper.treeToValue(item, SysUserImport.class);
|
person.setStaffPhoto("");
|
sysUserImportMapper.insertSysUserImport(person);
|
|
}
|
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
|
}
|
|
public void analysisData() {
|
System.out.println("---------------------------");
|
//数据解析
|
ServiceThirdData serviceThirdData = new ServiceThirdData();
|
serviceThirdData.setDataType("ADT^A03");
|
serviceThirdData.setIsDeal(0);
|
serviceThirdData.setCreateTime(new Date());
|
iServiceThirdDataService.queryList(serviceThirdData);
|
|
}
|
|
/**
|
* 定时处理外链的数据
|
*/
|
public void runServiceSubTaskAnswer() {
|
serviceSubtaskAnswerService.saveQuestionAnswer(null, 0L);
|
}
|
|
|
/**
|
* 处理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);
|
|
//调用dealOupHospInfo数据处理方法,处理完后,将“出院表的check_flag=1”
|
//获取当前日期 (精确到天)往前推相应天数(在指定的基础模板中找对应的天数),
|
//循环患者信息,根据患者"出院诊断ICD值”获取到相当的模板(获取取相应的天数);
|
//根据查询出来的模板,去固定任务(固定任务,已经将模板也固定了)去匹配模板
|
//根据匹配出来的模板和任务与患者信息,将数据插入到子任务表中
|
}
|
|
public void dealHisData2() {
|
//将患者信息、出院、门诊数据全部采集
|
// 指定的开始日期
|
LocalDate endDate = LocalDate.of(2025, 3, 3);
|
// 当前日期
|
LocalDate currentDate = LocalDate.now();
|
// 定义日期格式
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd ");
|
|
// 从开始日期到当前日期逐天打印
|
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());
|
}
|
|
}
|
|
/**
|
* 处理患者信息,进入子任务表
|
*/
|
public void dealOutHospInfo() {
|
if (port.equals("8095")) {
|
//出院表
|
iPatMedInhospService.dealOutHospInfo();
|
//门诊表
|
if (visitHosp != 1) {
|
iPatMedOuthospService.dealOutpatientInfo();
|
}
|
}
|
}
|
|
|
/**
|
* 处理手术信息,进入子任务表
|
*/
|
public void dealOperationInfo() {
|
if (port.equals("8095")) iPatMedOperationService.dealOperationInfo();
|
|
}
|
|
/**
|
* 处理患者信息,进入子任务表(微信小程序)
|
*/
|
public void dealOutHospInfoXHC() {
|
if (port.equals("8095")) {
|
PatMedInhosp patMedInhosp = new PatMedInhosp();
|
//获取未处理的数据
|
List<ServicePatientTemp> servicePatientTemps = iServicePatientTempService.selectServicePatientTempList(new ServicePatientTemp());
|
}
|
}
|
|
|
/**
|
* 长期任务执行(电话)
|
*/
|
public void longTaskSend() {
|
//获取任务信息
|
ServiceTask st = new ServiceTask();
|
st.setDelFlag("0");
|
st.setLongTask(1);
|
List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st);
|
log.error("serviceTasks进来了吗?{}", serviceTasks);
|
for (ServiceTask serviceTask : serviceTasks) {
|
CommonTaskcallMQ commonTaskcallMQ = new CommonTaskcallMQ();
|
commonTaskcallMQ.setTaskid(serviceTask.getTaskid());
|
commonTaskcallMQ.setPreachform(serviceTask.getPreachform());
|
commonTaskcallMQ.setSendType("2");
|
sfHandlle(commonTaskcallMQ, localIP);
|
}
|
}
|
|
/**
|
* 判断日期是否是今天
|
*
|
* @param date
|
* @return
|
*/
|
public boolean isDateToday(Date date) {
|
if (date == null) {
|
return false;
|
}
|
// 将 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());
|
|
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);
|
//丽水有的医院还没法做长期任务随访
|
List<ServiceSubtask> subtaskList2 = new ArrayList<>();
|
if (visitHosp == 2) {
|
for (ServiceSubtask serviceSubtask : subtaskList) {
|
Boolean b = VisitSendStateEnum.getDescByCode(serviceSubtask.getOrgid());
|
if (b) subtaskList2.add(serviceSubtask);
|
}
|
subtaskList = subtaskList2;
|
}
|
|
// 按照 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() + "填写。感谢您配合!");
|
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) {
|
//丽水的短信发送方式
|
Map<String, String> map = MsgLSEnum.getAddressByCode(serviceSubtask.getOrgid());
|
String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid());
|
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());
|
serviceSubtaskMapper.updateServiceSubtask(ss);
|
continue;
|
}
|
log.error("---------丽水短信发送入参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);
|
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";
|
}
|
}
|
//任务发送记录
|
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(), "无");
|
|
//获取微信公众号请求信息根据机构ID
|
List<String> wxqqxx = WxGZHEnum.getDescByCode(patArchive.getOrgid());
|
if (CollectionUtils.isEmpty(wxqqxx) || wxqqxx.size() < 4) {
|
ServiceSubtask ss = new ServiceSubtask();
|
ss.setResult("error");
|
ss.setRemark("该机构的公众号配置信息不全,无法通过公众号发送");
|
ss.setSendstate(5L);
|
ss.setId(serviceSubtask.getId());
|
ss.setFinishtime(new Date());
|
serviceSubtaskMapper.updateServiceSubtask(ss);
|
continue;
|
}
|
|
if (StringUtils.isEmpty(patArchive.getPatidHis())) {
|
ServiceSubtask ss = new ServiceSubtask();
|
ss.setResult("error");
|
ss.setRemark("公众号发送失败,his系统的患者id为空");
|
ss.setSendstate(5L);
|
ss.setId(serviceSubtask.getId());
|
ss.setFinishtime(new Date());
|
serviceSubtaskMapper.updateServiceSubtask(ss);
|
continue;
|
}
|
String 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");
|
} else {
|
log.error("serviceSubtask1231313的值为:{}", serviceSubtask);
|
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);
|
}
|
}
|
}
|
}
|
//通知 MQ 消息已被接收,可以ACK(从队列中删除)了 (这个需要根据业务再去处理ACK)
|
}
|
}
|
}
|
|
|
/**
|
* 获出院患者信息
|
* 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");
|
}
|
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);
|
|
// 创建一个新文件
|
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();
|
}
|
}
|
// 将数据写入到文件中
|
try {
|
FileWriter writer = new FileWriter(file);
|
writer.write(result);
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
|
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);
|
}
|
|
}
|
}
|
}
|
|
|
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 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 {
|
result = OkHttpExample.sendPostRequest(address, body, token);
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
log.error("--------result的值为:{}-----", result);
|
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
String code = (String) jsonObject.toString();
|
return code;
|
}
|
|
|
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.setPatientid(setPatientid);
|
xinHuaWXReq.setPatientname(setPatientname);
|
xinHuaWXReq.setMobile(phone);
|
xinHuaWXReq.setMedcardno(null);
|
xinHuaWXReq.setTitlename(taskName);
|
xinHuaWXReq.setContent(taskDesc);
|
xinHuaWXReq.setAppid(wxqqxx.get(1));
|
log.error("----getWXCode---xinHuaWXReq的出参为:{}", 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);
|
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
String code = (String) jsonObject.toString();
|
return code;
|
}
|
|
|
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());
|
}
|
}
|