ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
@@ -1,9 +1,15 @@ package com.ruoyi.web.controller.common; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.dx.MessageSend; import com.ruoyi.common.utils.HttpUtil; import com.ruoyi.common.utils.RSAPublicKeyExample; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.sms.smsUtils; import com.smartor.common.MtSubmitSmUtil; import com.smartor.domain.ServiceOutPath; import com.smartor.domain.smsVO; import com.smartor.mapper.UtilsMapper; @@ -20,7 +26,11 @@ import org.springframework.web.bind.annotation.RestController; import java.io.UnsupportedEncodingException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.HashMap; import java.util.Map; @RestController @Api(description = "知信接口") @@ -29,6 +39,9 @@ public class SmsController { @Value("${xhsmsPath}") private String xhsmsPath; @Autowired private MtSubmitSmUtil mtSubmitSmUtil; @Value("${xhsmsAccount}") private String xhsmsAccount; @@ -48,8 +61,8 @@ @Autowired private IServiceOutPathService iServiceOutPathService; @Autowired private UtilsMapper utilsMapper; @Value("${spring.profiles.active}") private String active; /** * @param @@ -91,9 +104,34 @@ if (ObjectUtils.isNotEmpty(vo.getContent())) content = vo.getContent(); String sendMsg = ""; String sendMsg = "false"; try { sendMsg = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, vo.getPhone(), content); if (active.equals("hzszlyy")) { sendMsg = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, vo.getPhone(), content); } else if (active.equals("nhfy")) { Map<String, Object> smsResult = mtSubmitSmUtil.submitSm(vo.getPhone(), content); if (smsResult != null && smsResult.get("result") != null && smsResult.get("result").toString().equals("0")) { sendMsg = "true"; } } else if (active.equals("sltd")) { String data = MessageSend.sendMsg(content, "6", vo.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); if (StringUtils.isNotEmpty(data)) { ObjectMapper mapper = new ObjectMapper(); JsonNode root = mapper.readTree(data); String status = root.get("result").get(0).get("status").asText(); if (status.equals("00000")) { sendMsg = "true"; } } } else if (active.equals("xh")) { Map<String, String> req = new HashMap<>(); req.put("phone", vo.getPhone()); req.put("content", vo.getContent()); sendMsg = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req)); } else if (active.equals("ls")) { //丽水13家医院,有点不方便,有空再接 return AjaxResult.error("该短信功能还未开通"); } log.info(sendMsg); } catch (Exception ex) { log.error(ex.getMessage()); ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/Icd10Controller.java
@@ -47,6 +47,17 @@ } /** * 查询疾病列表 */ @ApiOperation("查询疾病列表") //@PreAuthorize("@ss.hasPermi('system:icd10:list')") @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid") @GetMapping("/queryAddIcd10") public void queryAddIcd10() { int list = icd10Service.queryAddIcd10(); } /** * 导出疾病列表 */ @ApiOperation("导出疾病列表") ruoyi-admin/src/main/resources/application-nhfy.yml
@@ -242,7 +242,7 @@ lwl_app_key: ak-LMyQUE4rjW25UO7otb8XMXzv # 南华附一取数据公共接口 sltd_pub_path: "http://open.nhyfy.cn/kapi/gw-api/" sltd_pub_path: "http://open.nhyfy.cn/kapi/gw-api" sms_accountName: S200232 sms_password: lD94Yo ruoyi-admin/src/main/resources/application-sltd.yml
@@ -247,3 +247,5 @@ # 来未来app_key lwl_app_key: ak-zUMiOWhqXiJQWPB1pCbz0pjr sltd_pub_path: "http://open-tdyy.cfuture.shop/kapi/gw-api" ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
@@ -72,6 +72,8 @@ connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); connection.setConnectTimeout(5000); connection.setReadTimeout(10000); connection.connect(); in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType)); String line; @@ -120,6 +122,8 @@ conn.setRequestProperty("Accept-Charset", "utf-8"); conn.setRequestProperty("Charsert", "UTF-8"); conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); conn.setConnectTimeout(5000); conn.setReadTimeout(10000); conn.setDoOutput(true); conn.setDoInput(true); out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), StandardCharsets.UTF_8)); @@ -167,6 +171,8 @@ conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("Accept-Charset", "utf-8"); conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); conn.setConnectTimeout(5000); conn.setReadTimeout(10000); conn.setDoOutput(true); conn.setDoInput(true); if (!Objects.isNull(headers)) { ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -222,15 +222,22 @@ } /** * 记录登录信息 * 记录登录信息(异步执行,不阻塞登录主流程) * * @param userId 用户ID */ public void recordLoginInfo(Long userId) { SysUser sysUser = new SysUser(); sysUser.setUserId(userId); sysUser.setLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest())); sysUser.setLoginDate(DateUtils.getNowDate()); userService.updateUserProfile(sysUser); // 在异步前捕获IP,避免异步线程中Request上下文失效 String loginIp = IpUtils.getIpAddr(ServletUtils.getRequest()); AsyncManager.me().execute(new java.util.TimerTask() { @Override public void run() { SysUser sysUser = new SysUser(); sysUser.setUserId(userId); sysUser.setLoginIp(loginIp); sysUser.setLoginDate(DateUtils.getNowDate()); userService.updateUserProfile(sysUser); } }); } } ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -130,7 +130,7 @@ private IServiceSubtaskRecordService serviceSubtaskRecordService; @Autowired IBaseSmsaccountService baseSmsaccountService; IIcd10Service iIcd10Service; @Autowired IPatArchiveService patArchiveService; @@ -253,7 +253,8 @@ } catch (Exception e) { log.error("【dealHisData】新华数据采集异常", e); } } else if (active.trim().equals("hn")) { } else if (active.trim().equals("hn")) { try { // 河南数据采集 HnDataGatherVO hnDataGatherVO = new HnDataGatherVO(); @@ -268,7 +269,8 @@ } catch (Exception e) { log.error("【dealHisData】河南数据采集异常", e); } } else if (active.trim().equals("sltd") || active.trim().equals("nhfy")) { } else if (active.trim().equals("sltd") || active.trim().equals("nhfy")) { //省立同德与华南附一用同一套采集方法(都是来未来提供) try { @@ -315,6 +317,9 @@ } log.info("【dealHisData】省立同德“用户信息”结束采集数据:{}", aBoolean); } //疾病字典采集 iIcd10Service.queryAddIcd10(); // 省立同德数据采集 for (Long cid : campusidList) { log.debug("【dealHisData】省立同德“预入院”开始采集数据,院区:{}", cid); @@ -324,6 +329,10 @@ serviceSLTDInhospReqVO.setCampusId(cid); serviceSLTDInhospReqVO.setEncounterTimeStart(nowTime); serviceSLTDInhospReqVO.setEncounterTimeEnd(nowTime); if(active.trim().equals("nhfy")) { serviceSLTDInhospReqVO.setEncounterTimeStart(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); serviceSLTDInhospReqVO.setEncounterTimeEnd(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); } List<String> list = new ArrayList<>(); list.add("FH0109.22"); list.add("FH0109.23"); @@ -340,6 +349,10 @@ serviceSLTDInhospReqVO.setEncounterTimeEnd(null); serviceSLTDInhospReqVO.setStartHeadTime(nowTime); serviceSLTDInhospReqVO.setStartTailTime(nowTime); if(active.trim().equals("nhfy")) { serviceSLTDInhospReqVO.setStartHeadTime(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); serviceSLTDInhospReqVO.setStartTailTime(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); } List<String> listStr = new ArrayList<>(); listStr.add("FH0109.26"); serviceSLTDInhospReqVO.setStatusList(listStr); @@ -353,6 +366,10 @@ serviceSLTDInhospReqVO.setStartTailTime(null); serviceSLTDInhospReqVO.setEncounterTimeStart(nowTime); serviceSLTDInhospReqVO.setEncounterTimeEnd(nowTime); if(active.trim().equals("nhfy")) { serviceSLTDInhospReqVO.setEncounterTimeStart(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); serviceSLTDInhospReqVO.setEncounterTimeEnd(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); } serviceSLTDInhospReqVO.setStatusList(null); List<String> list1 = new ArrayList<>(); list1.add("FH0108.01"); @@ -387,6 +404,10 @@ serviceSLTDInhospReqVO.setEncounterTimeEnd(null); serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(nowTime); serviceSLTDInhospReqVO.setPreOutHospitalTailDate(nowTime); if(active.trim().equals("nhfy")) { serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); serviceSLTDInhospReqVO.setPreOutHospitalTailDate(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); } serviceSLTDInhospReqVO.setHealthcareRecordTypeList(null); List<String> list2 = new ArrayList<>(); // list2.add("FH0108.02"); @@ -435,9 +456,7 @@ log.error("【dealHisData】省立同德数据采集异常", e); } } /** } /** * 这个只是新华临时使用,平时用不到 */ public void dealHisData2() { ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
@@ -198,6 +198,8 @@ <result property="inhospstate" column="inhospstate"/> <result property="deptcheckFlag" column="deptcheck_flag"/> <result property="wardcheckFlag" column="wardcheck_flag"/> <result property="inDeptcheckFlag" column="in_deptcheck_flag"/> <result property="inWardcheckFlag" column="in_wardcheck_flag"/> <result property="diagcheckFlag" column="diagcheck_flag"/> <result property="age" column="age"/> <result property="sex" column="sex"/> ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -28,6 +28,9 @@ import javax.validation.Validator; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -177,87 +180,103 @@ public SysUser selectUserByUserName2(String userName) { String[] split = userName.split("&"); SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1], null); if (Objects.isNull(sysUser)) return sysUser; //获取当前登陆人的机构和院�? boolean isAdmin = StringUtils.isNotEmpty(split[0]) && "admin".equals(split[0]); IUserExtInfoService userExtInfoService = SpringUtils.getBean(IUserExtInfoService.class); Map<String, String> userOrgInfo = userExtInfoService.getUserOrgInfo( sysUser.getUserId().toString(), split[1], split[2]); Executor executor = SpringUtils.getBean("threadPoolTaskExecutor"); // === 并行查询: 用户机构信息 + 部门列表 === CompletableFuture<Map<String, String>> orgInfoFuture = CompletableFuture.supplyAsync(() -> userExtInfoService.getUserOrgInfo(sysUser.getUserId().toString(), split[1], split[2]), executor); CompletableFuture<List<SysDept>> deptsFuture; if (isAdmin) { SysDept dept = new SysDept(); dept.setOrgid(split[1]); deptsFuture = CompletableFuture.supplyAsync(() -> sysDeptMapper.selectDeptList(dept), executor); } else { deptsFuture = CompletableFuture.supplyAsync(() -> sysUserDeptMapper.selectDeptListByUserId(sysUser.getUserId()), executor); } // 等待机构信息 Map<String, String> userOrgInfo = new HashMap<>(); try { userOrgInfo = orgInfoFuture.get(5, TimeUnit.SECONDS); } catch (Exception e) { log.warn("获取用户机构信息超时或异常", e); } if (!userOrgInfo.isEmpty()) { sysUser.setOrgid(userOrgInfo.get("orgid")); sysUser.setCampusid(userOrgInfo.get("campusid")); } if (Objects.isNull(sysUser)) return sysUser; List<SysDept> sysDepts = null; if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) { SysDept dept = new SysDept(); dept.setOrgid(split[1]); sysDepts = sysDeptMapper.selectDeptList(dept); } else { sysDepts = sysUserDeptMapper.selectDeptListByUserId(sysUser.getUserId()); // 等待部门列表 List<SysDept> sysDepts = new ArrayList<>(); try { sysDepts = deptsFuture.get(5, TimeUnit.SECONDS); } catch (Exception e) { log.warn("获取部门列表超时或异常", e); } List<Long> deptIds = new ArrayList<>(); for (SysDept sysDept : sysDepts) { deptIds.add(sysDept.getDeptId()); } SysUserDept sysUserDept = new SysUserDept(); sysUserDept.setUserId(sysUser.getUserId()); sysUserDept.setDeptType(sysUser.getSearchscope()); sysUserDept.setOrgid(split[1]); // === 查询科室和病区信息 === List<SysUserDept> sysUserDeptKSs = null; List<SysUserDept> sysUserDeptBQs = null; if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("0")) { if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) { sysUserDept.setUserId(null); } sysUserDept.setDeptType("1"); sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept); sysUserDept.setDeptType("2"); sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept); //如果是admin,需要对sysUserDeptBQs,sysUserDeptBQs去重 if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) { //如果是admin,只能去sys_dept去取数据 SysDept dept = new SysDept(); dept.setOrgid(split[1]); dept.setDeptType("1"); sysDepts = sysDeptMapper.selectDeptList(dept); sysUserDeptKSs = DtoConversionUtils.sourceToTarget(sysDepts, SysUserDept.class); dept.setDeptType("2"); sysDepts = sysDeptMapper.selectDeptList(dept); sysUserDeptBQs = DtoConversionUtils.sourceToTarget(sysDepts, SysUserDept.class); List<SysUserDept> distinctUserDepts = new ArrayList<>(); Set<String> uniqueDeptCodes = new HashSet<>(); for (SysUserDept userDept : sysUserDeptKSs) { String deptCode = userDept.getDeptCode(); if (StringUtils.isNotEmpty(deptCode) && !uniqueDeptCodes.contains(deptCode)) { distinctUserDepts.add(userDept); uniqueDeptCodes.add(deptCode); if (StringUtils.isNotEmpty(sysUser.getSearchscope())) { if ("0".equals(sysUser.getSearchscope())) { if (isAdmin) { // admin直接从sys_dept查询,跳过无意义的selectSysUserDeptList SysDept deptKS = new SysDept(); deptKS.setOrgid(split[1]); deptKS.setDeptType("1"); SysDept deptBQ = new SysDept(); deptBQ.setOrgid(split[1]); deptBQ.setDeptType("2"); CompletableFuture<List<SysDept>> ksFuture = CompletableFuture.supplyAsync(() -> sysDeptMapper.selectDeptList(deptKS), executor); CompletableFuture<List<SysDept>> bqFuture = CompletableFuture.supplyAsync(() -> sysDeptMapper.selectDeptList(deptBQ), executor); try { sysUserDeptKSs = distinctByDeptCode(DtoConversionUtils.sourceToTarget(ksFuture.get(5, TimeUnit.SECONDS), SysUserDept.class)); sysUserDeptBQs = distinctByDeptCode(DtoConversionUtils.sourceToTarget(bqFuture.get(5, TimeUnit.SECONDS), SysUserDept.class)); } catch (Exception e) { log.warn("获取admin科室/病区信息超时或异常", e); } } else { // 并行查询科室和病区 SysUserDept queryKS = new SysUserDept(); queryKS.setUserId(sysUser.getUserId()); queryKS.setDeptType("1"); queryKS.setOrgid(split[1]); SysUserDept queryBQ = new SysUserDept(); queryBQ.setUserId(sysUser.getUserId()); queryBQ.setDeptType("2"); queryBQ.setOrgid(split[1]); CompletableFuture<List<SysUserDept>> ksFuture = CompletableFuture.supplyAsync(() -> sysUserDeptMapper.selectSysUserDeptList(queryKS), executor); CompletableFuture<List<SysUserDept>> bqFuture = CompletableFuture.supplyAsync(() -> sysUserDeptMapper.selectSysUserDeptList(queryBQ), executor); try { sysUserDeptKSs = ksFuture.get(5, TimeUnit.SECONDS); sysUserDeptBQs = bqFuture.get(5, TimeUnit.SECONDS); } catch (Exception e) { log.warn("获取科室/病区信息超时或异常", e); } } List<SysUserDept> distinctUserBQs = new ArrayList<>(); Set<String> uniqueBQCodes = new HashSet<>(); for (SysUserDept userDept : sysUserDeptBQs) { String deptCode = userDept.getDeptCode(); if (StringUtils.isNotEmpty(deptCode) && !uniqueBQCodes.contains(deptCode)) { distinctUserBQs.add(userDept); uniqueBQCodes.add(deptCode); } } sysUserDeptKSs = distinctUserDepts; sysUserDeptBQs = distinctUserBQs; } else if ("1".equals(sysUser.getSearchscope())) { SysUserDept queryKS = new SysUserDept(); queryKS.setUserId(sysUser.getUserId()); queryKS.setDeptType("1"); queryKS.setOrgid(split[1]); sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(queryKS); } else if ("2".equals(sysUser.getSearchscope())) { SysUserDept queryBQ = new SysUserDept(); queryBQ.setUserId(sysUser.getUserId()); queryBQ.setDeptType("2"); queryBQ.setOrgid(split[1]); sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(queryBQ); } } else if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("1")) { sysUserDept.setDeptType("1"); sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept); } else if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("2")) { sysUserDept.setDeptType("2"); sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept); } sysUser.setDepts(deptIds); @@ -285,16 +304,32 @@ if (StringUtils.isNotEmpty(sud.getDeptName())) map.put("deptName", sud.getDeptName()); list.add(map); } //获取当前机构的满意度问题分类 sysUser.setBelongDepts(list); Map<String, Object> satisfactionCategories = new HashMap<>(); //设置当前用户的声音问题分类和问卷问题分类 IUserExtInfoService userExtInfoService3 = SpringUtils.getBean(IUserExtInfoService.class); sysUser.setSatisfactionCategories(userExtInfoService3.getSatisfactionCategories(sysUser.getOrgid())); // 设置满意度分类(走缓存) sysUser.setSatisfactionCategories(userExtInfoService.getSatisfactionCategories(sysUser.getOrgid())); } return sysUser; } /** * 按deptCode去重 */ private List<SysUserDept> distinctByDeptCode(List<SysUserDept> list) { if (CollectionUtils.isEmpty(list)) { return list; } List<SysUserDept> result = new ArrayList<>(); Set<String> uniqueCodes = new HashSet<>(); for (SysUserDept item : list) { String deptCode = item.getDeptCode(); if (StringUtils.isNotEmpty(deptCode) && !uniqueCodes.contains(deptCode)) { result.add(item); uniqueCodes.add(deptCode); } } return result; } @Override public SysUser selectUserByUserNameAndDeptId(String userName) { String[] split = userName.split("&"); smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
@@ -207,9 +207,9 @@ private String drname; /** * 是否生成方案状态;0未生成 1生成入院 2生成出院 9无匹配方案 3生成入院撤销 4生成出院撤销 * 是否生成方案状态;0预入院 1生成入院 2生成出院 9无匹配方案 3生成入院撤销 4生成出院撤销 */ @ApiModelProperty(value = "是否生成方案状态;0未生成 1生成入院 2生成出院 9无匹配方案 3生成入院撤销 4生成出院撤销") @ApiModelProperty(value = "是否生成方案状态;0预入院 1生成入院 2生成出院 9无匹配方案 3生成入院撤销 4生成出院撤销") private Long schemestatus; /** @@ -309,6 +309,18 @@ private String diagcheckFlag; /** * 入院科室长期任务,是否处理:0未处理 1处理 */ @ApiModelProperty(value = "入院科室长期任务,是否处理:0未处理 1处理成功 2处理失败 ") private String inDeptcheckFlag; /** * 入院病区长期任务,是否处理:0未处理 1处理 */ @ApiModelProperty(value = "入院病区长期任务,是否处理:0未处理 1处理成功 2处理失败 ") private String inWardcheckFlag; /** * 年龄 */ @ApiModelProperty(value = "年龄") smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java
@@ -57,6 +57,18 @@ private String deptcheckFlag; /** * 入院科室长期任务,是否处理:0未处理 1处理 */ @ApiModelProperty(value = "入院科室长期任务,是否处理:0未处理 1处理成功 2处理失败 ") private String inDeptcheckFlag; /** * 入院病区长期任务,是否处理:0未处理 1处理 */ @ApiModelProperty(value = "入院病区长期任务,是否处理:0未处理 1处理成功 2处理失败 ") private String inWardcheckFlag; /** * 护士ID */ @ApiModelProperty(value = "护士ID") smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
@@ -156,10 +156,10 @@ private String type; /** * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访) * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访 */ @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访") @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访") @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访") @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访") private String serviceType; @ApiModelProperty(value = "服务类型集合,按逗号分割") smartor/src/main/java/com/smartor/domain/ServiceSubtaskRes.java
@@ -156,10 +156,10 @@ private String type; /** * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访) * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访 */ @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访") @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访") @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访\n") @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访\n") private String serviceType; /** smartor/src/main/java/com/smartor/domain/ServiceTask.java
@@ -172,10 +172,10 @@ private String type; /** * "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议" * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访 */ @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访") @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访") @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访") @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访") private String serviceType; /** smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java
@@ -331,10 +331,10 @@ private String showDate; /** * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知) * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访 */ @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)") @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)") @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访") @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访") private String serviceType; @ApiModelProperty(value = "开场白") smartor/src/main/java/com/smartor/domain/ServiceTaskdept.java
@@ -45,10 +45,10 @@ private Long longtask; /** * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知) * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访 */ @ApiModelProperty("服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)") @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)") @ApiModelProperty("服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访") @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访") private String serviceType; /** smartor/src/main/java/com/smartor/domain/ServiceTaskdiag.java
@@ -46,10 +46,10 @@ private String taskName; /** * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知) * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访 */ @ApiModelProperty("服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)") @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)") @ApiModelProperty("服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知 9、体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访)") @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知 9、体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访)") private String serviceType; /** smartor/src/main/java/com/smartor/domain/ServiceTaskoper.java
@@ -46,10 +46,10 @@ private String taskName; /** * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知) * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访 */ @ApiModelProperty("服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)") @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)") @ApiModelProperty("服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访") @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院) 5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访 11,影像专科随访 12、心电专科随访, 13专科随访 14、门诊满意度调查 15投诉建议 16课题随访 17、宣教关怀(入院) 18、入院随访)") private String serviceType; /** smartor/src/main/java/com/smartor/mapper/Icd10Mapper.java
@@ -2,6 +2,7 @@ import com.smartor.domain.Icd10; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -37,8 +38,21 @@ */ public int insertIcd10(Icd10 icd10); /** * 批量新增疾病 * * @param icd10s 疾病集合 * @return 结果 */ public int batchIcd10(List<Icd10> icd10s); /** * 批量查询已存在的 icdcode(用于去重) * * @param icdcodes icdcode集合 * @return 已存在的 icdcode 集合 */ public List<String> selectExistingIcdcodes(@Param("icdnames") List<String> icdnames); /** * 修改疾病 smartor/src/main/java/com/smartor/service/IIcd10Service.java
@@ -6,15 +6,14 @@ /** * 疾病Service接口 * * * @author ruoyi * @date 2023-12-21 */ public interface IIcd10Service { public interface IIcd10Service { /** * 查询疾病 * * * @param icdid 疾病主键 * @return 疾病 */ @@ -22,7 +21,7 @@ /** * 查询疾病列表 * * * @param icd10 疾病 * @return 疾病集合 */ @@ -30,7 +29,7 @@ /** * 新增疾病 * * * @param icd10 疾病 * @return 结果 */ @@ -38,7 +37,7 @@ /** * 修改疾病 * * * @param icd10 疾病 * @return 结果 */ @@ -46,7 +45,7 @@ /** * 批量删除疾病 * * * @param icdids 需要删除的疾病主键集合 * @return 结果 */ @@ -54,9 +53,16 @@ /** * 删除疾病信息 * * * @param icdid 疾病主键 * @return 结果 */ public int deleteIcd10ByIcdid(Long icdid); /** * 从远程接口(来未来)分页拉取并增量写入 icd10 表 * * @return 新增条数 */ public int queryAddIcd10(); } smartor/src/main/java/com/smartor/service/impl/Icd10ServiceImpl.java
@@ -1,97 +1,261 @@ package com.smartor.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.google.gson.Gson; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.http.HttpUtils; import com.smartor.domain.Icd10; import com.smartor.mapper.Icd10Mapper; import com.smartor.service.IIcd10Service; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.List; import java.util.*; import java.util.stream.Collectors; /** * 疾病Service业务层处理 * * * @author ruoyi * @date 2023-12-21 */ @Slf4j @Service public class Icd10ServiceImpl implements IIcd10Service { public class Icd10ServiceImpl implements IIcd10Service { @Autowired private Icd10Mapper icd10Mapper; @Value("${sltd_pub_path}") private String sltdPubPath; @Value("${lwl_app_key}") private String APP_KEY; /** * 固定 orgId */ private static final long ORG_ID = 20001001L; /** * 每页拉取条数(接口最大允许 1000) */ private static final int PAGE_SIZE = 1000; /** * 批量写入单批最大条数 */ private static final int BATCH_SIZE = 500; /** * 查询疾病 * * * @param icdid 疾病主键 * @return 疾病 */ @Override public Icd10 selectIcd10ByIcdid(Long icdid) { public Icd10 selectIcd10ByIcdid(Long icdid) { return icd10Mapper.selectIcd10ByIcdid(icdid); } /** * 查询疾病列表 * * * @param icd10 疾病 * @return 疾病 */ @Override public List<Icd10> selectIcd10List(Icd10 icd10) { public List<Icd10> selectIcd10List(Icd10 icd10) { return icd10Mapper.selectIcd10List(icd10); } /** * 新增疾病 * * * @param icd10 疾病 * @return 结果 */ @Override public int insertIcd10(Icd10 icd10) { public int insertIcd10(Icd10 icd10) { icd10.setCreateTime(DateUtils.getNowDate()); return icd10Mapper.insertIcd10(icd10); } /** * 修改疾病 * * * @param icd10 疾病 * @return 结果 */ @Override public int updateIcd10(Icd10 icd10) { public int updateIcd10(Icd10 icd10) { icd10.setUpdateTime(DateUtils.getNowDate()); return icd10Mapper.updateIcd10(icd10); } /** * 批量删除疾病 * * * @param icdids 需要删除的疾病主键 * @return 结果 */ @Override public int deleteIcd10ByIcdids(Long[] icdids) { public int deleteIcd10ByIcdids(Long[] icdids) { return icd10Mapper.deleteIcd10ByIcdids(icdids); } /** * 删除疾病信息 * * * @param icdid 疾病主键 * @return 结果 */ @Override public int deleteIcd10ByIcdid(Long icdid) { public int deleteIcd10ByIcdid(Long icdid) { return icd10Mapper.deleteIcd10ByIcdid(icdid); } /** * 从远程接口(来未来)分页拉取并增量写入 icd10 表。 * <p> * 优化要点: * 1. 每页最大拉取 1000 条,减少请求次数。 * 2. 每页把当前页所有 icdcode 用一条 IN SQL 一次批量查库,避免循环 N 次单条查询。 * 3. 将不存在的记录收集后分批(每批 500 条)批量插入。 * </p> * * @return 本次运行新增总条数 */ @Override public int queryAddIcd10() { int totalInserted = 0; long current = 1; long totalPages = 1; // 首次循环前先执行一次 log.info("[开始] 从来未来拉取 ICD10 增量数据,orgId={}", ORG_ID); do { // 构建请求体 Map<String, Object> requestBody = new HashMap<>(); requestBody.put("orgId", ORG_ID); requestBody.put("searchText", ""); requestBody.put("size", PAGE_SIZE); requestBody.put("current", current); String responseStr; try { Map<String, String> headers = buildRequestHeaders(); responseStr = HttpUtils.sendPostByHeader(sltdPubPath + "/hbos-thirdparty-integration/standard/base/dtc/pageDiagnosisDict", new Gson().toJson(requestBody), headers); } catch (Exception e) { log.error("[第{}页] 请求来未来接口失败", current, e); break; } if (responseStr == null || responseStr.isEmpty()) { log.warn("[第{}页] 接口返回空,停止采集", current); break; } JSONObject resp = JSON.parseObject(responseStr); if (resp == null || !Boolean.TRUE.equals(resp.getBoolean("success"))) { log.error("[第{}页] 接口返回失败:{}", current, responseStr); break; } JSONObject data = resp.getJSONObject("data"); if (data == null) { break; } // 计算总页数 long total = data.getLongValue("total"); long pageSize = data.getLongValue("size"); if (pageSize <= 0) { break; } totalPages = (total + pageSize - 1) / pageSize; JSONArray records = data.getJSONArray("records"); if (records == null || records.isEmpty()) { break; } log.info("[第{}/{}页] 获取 {} 条记录,总{}条", current, totalPages, records.size(), total); // 解析当前页数据 List<String> pageNames = new ArrayList<>(); List<Icd10> pageList = new ArrayList<>(); for (int i = 0; i < records.size(); i++) { JSONObject rec = records.getJSONObject(i); String icdCode = rec.getString("icdCode"); if (icdCode == null || icdCode.isEmpty()) { continue; } String icdName = StringUtils.isEmpty(rec.getString("name")) ? null : rec.getString("name").trim(); if (icdName == null || icdName.isEmpty()) { continue; } pageNames.add(icdName); Icd10 icd10 = new Icd10(); icd10.setIcdcode(icdCode); icd10.setIcdname(icdName); icd10.setIcdpym(rec.getString("pinyin")); icd10.setHisIcdid(rec.getString("his_icdid")); icd10.setOrgid(String.valueOf(ORG_ID)); icd10.setDelFlag("0"); icd10.setCreateTime(DateUtils.getNowDate()); pageList.add(icd10); } if (pageNames.isEmpty()) { current++; continue; } // 一次 IN 查库,获取已存在的 icdname(核心去重优化点)南华附一的icdname不会重复,icd10code会重复 Set<String> existingNames = new HashSet<>(icd10Mapper.selectExistingIcdcodes(pageNames)); // 过滤出不存在的记录 List<Icd10> newList = pageList.stream().filter(item -> !existingNames.contains(item.getIcdname())).collect(Collectors.toList()); log.info("[第{}/{}页] 当前页共 {} 条,已存在 {} 条,需新入库 {} 条", current, totalPages, pageList.size(), existingNames.size(), newList.size()); // 分批批量插入 int inserted = batchInsert(newList); totalInserted += inserted; current++; } while (current <= totalPages); log.info("[完成] ICD10 增量采集结束,本次共新增 {} 条", totalInserted); return totalInserted; } /** * 分批批量插入,每批最大 BATCH_SIZE 条 */ private int batchInsert(List<Icd10> list) { if (list == null || list.isEmpty()) { return 0; } int total = 0; int size = list.size(); for (int start = 0; start < size; start += BATCH_SIZE) { int end = Math.min(start + BATCH_SIZE, size); total += icd10Mapper.batchIcd10(list.subList(start, end)); } return total; } private Map<String, String> buildRequestHeaders() { Map<String, String> headers = new HashMap<>(); headers.put("Content-Type", "application/json"); headers.put("app-key", APP_KEY); return headers; } } smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.service.IConfigService; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DtoConversionUtils; import com.ruoyi.common.utils.SecurityUtils; @@ -59,6 +60,8 @@ @Value("${spring.profiles.active}") private String active; @Autowired private IConfigService iSysConfigService; /** @@ -220,169 +223,283 @@ @Override public int dealOutHospInfo(String config) { //1.入院宣教 String helibrarySwitch = iSysConfigService.selectConfigByKey("in.helibrary.switch"); if (StringUtils.isNotEmpty(helibrarySwitch) && "2".equals(helibrarySwitch)) { PatMedInhosp inhosp = new PatMedInhosp(); inhosp.setInDeptcheckFlag("0"); inhosp.setInhospstate("0"); inhosp.setFuflag("1"); List<PatMedInhosp> inPatMedInhosps = patMedInhospMapper.selectPatMedInhospList(inhosp); // PatMedInhosp pmks = new PatMedInhosp(); // //获取需要出院部门随访,未处理的数据 // pmks.setDeptcheckFlag("0"); // pmks.setInhospstate("1"); // pmks.setFuflag("1"); // List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks); // log.info("dealOutHospInfo需要处理的出院部门患者信息:{}", CollectionUtils.isNotEmpty(patMedInhosps) ? patMedInhosps.size() : null); // for (PatMedInhosp patMedInhosp1 : patMedInhosps) { // String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); // patMedInhosp1.setTagname(tagname); // } // // //科室 // for (PatMedInhosp patMedInhosp1 : patMedInhosps) { // //获取患者信息 // PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid()); // if (Objects.isNull(patArchive)) { // patMedInhosp1.setDeptcheckFlag("2"); // patMedInhosp1.setLongTaskReason("患者基本信息为空"); // patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); // continue; // } // try { // //根据患者所在科室,获取该科室的长期任务 // ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); // serviceTaskdept.setLongtask(1L); // serviceTaskdept.setDeptCode(patMedInhosp1.getLeaveldeptcode()); // serviceTaskdept.setDeptType("1"); // serviceTaskdept.setOrgid(patMedInhosp1.getOrgid()); // List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); // //如果部门模板为空(将deptIsNull设置为true) // if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) { // PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid()); // patMedInhosp1.setDeptcheckFlag("2"); // patMedInhosp1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "该患者所在科室未配置长期任务;"); //1.1 科室 for (PatMedInhosp patMedInhosp1 : inPatMedInhosps) { //获取患者信息 PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid()); if (Objects.isNull(patArchive)) { patMedInhosp1.setInDeptcheckFlag("2"); patMedInhosp1.setLongTaskReason("患者基本信息为空"); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); continue; } try { //根据患者所在科室,获取该科室的入院长期宣教任务 ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); serviceTaskdept.setLongtask(1L); serviceTaskdept.setDeptCode(patMedInhosp1.getDeptcode()); serviceTaskdept.setDeptType("1"); serviceTaskdept.setServiceType("17"); serviceTaskdept.setOrgid(patMedInhosp1.getOrgid()); List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); //如果部门模板为空(将deptIsNull设置为true) if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) { PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid()); patMedInhosp1.setInDeptcheckFlag("2"); patMedInhosp1.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + "该患者所在科室未配置入院长期宣教任务;" : "该患者所在科室未配置入院长期宣教任务;"); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); } else { for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) { writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 4, config); } } } catch (Exception e) { log.error("人员入院科室处理出异常了:{}", e.getMessage()); patMedInhosp1.setInDeptcheckFlag("2"); patMedInhosp1.setLongTaskReason("人员入院科室处理出异常了:" + e.getMessage()); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); } } //1.2 病区 inhosp.setInDeptcheckFlag(null); inhosp.setInWardcheckFlag("0"); List<PatMedInhosp> inPatMedInhospsWard = patMedInhospMapper.selectPatMedInhospList(inhosp); for (PatMedInhosp patMedInhosp1 : inPatMedInhospsWard) { //获取患者信息 PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid()); if (Objects.isNull(patArchive)) { patMedInhosp1.setInDeptcheckFlag("2"); patMedInhosp1.setLongTaskReason("患者基本信息为空"); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); continue; } //根据患者所在病区,获取该病区的入院长期宣教任务(会出现一个问题,科室和病区发的同一个模板) ServiceTaskdept serviceTaskWard = new ServiceTaskdept(); serviceTaskWard.setLongtask(1L); serviceTaskWard.setDeptCode(patMedInhosp1.getHospitaldistrictcode()); serviceTaskWard.setDeptType("2"); serviceTaskWard.setServiceType("17"); serviceTaskWard.setOrgid(patMedInhosp1.getOrgid()); List<ServiceTaskdept> serviceTaskWardList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskWard); //如果部门模板为空(将deptIsNull设置为true) if (CollectionUtils.isEmpty(serviceTaskWardList) || serviceTaskWardList.size() == 0) { PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid()); patMedInhosp1.setInDeptcheckFlag("2"); patMedInhosp1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "该患者所在病区未配置入院长期宣教任务;"); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); } else { for (ServiceTaskdept serviceTaskdept1 : serviceTaskWardList) { writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 5, config); } } } } //2.出院随访 PatMedInhosp pmks = new PatMedInhosp(); //获取需要出院部门随访,未处理的数据 pmks.setDeptcheckFlag("0"); pmks.setInhospstate("1"); pmks.setFuflag("1"); List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks); log.info("dealOutHospInfo需要处理的出院部门患者信息:{}", CollectionUtils.isNotEmpty(patMedInhosps) ? patMedInhosps.size() : null); for (PatMedInhosp patMedInhosp1 : patMedInhosps) { String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); patMedInhosp1.setTagname(tagname); } //科室 for (PatMedInhosp patMedInhosp1 : patMedInhosps) { //获取患者信息 PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid()); if (Objects.isNull(patArchive)) { patMedInhosp1.setDeptcheckFlag("2"); patMedInhosp1.setLongTaskReason("患者基本信息为空"); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); continue; } try { //根据患者所在科室,获取该科室的长期任务 ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); serviceTaskdept.setLongtask(1L); serviceTaskdept.setDeptCode(patMedInhosp1.getLeaveldeptcode()); serviceTaskdept.setDeptType("1"); serviceTaskdept.setServiceType("2"); serviceTaskdept.setOrgid(patMedInhosp1.getOrgid()); List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); //如果部门模板为空(将deptIsNull设置为true) if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) { PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid()); patMedInhosp1.setDeptcheckFlag("2"); patMedInhosp1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "该患者所在科室未配置离院长期任务;"); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); } else { for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) { writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 1, config); } // patMedInhosp1.setDeptcheckFlag("1"); // patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); // } else { // for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) { // writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 1, config); // } //// patMedInhosp1.setDeptcheckFlag("1"); //// patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); // } // // } catch (Exception e) { // e.printStackTrace(); // log.error("人员科室处理出异常了:{}", e.getMessage()); // patMedInhosp1.setDeptcheckFlag("2"); // patMedInhosp1.setLongTaskReason("人员科室处理异常:" + e.getMessage()); // patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); // } // } } } catch (Exception e) { e.printStackTrace(); log.error("人员科室处理出异常了:{}", e.getMessage()); patMedInhosp1.setDeptcheckFlag("2"); patMedInhosp1.setLongTaskReason("人员科室处理异常:" + e.getMessage()); patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); } } //根据患者所在病区,获取该病区的长期任务,新华医院可以先不用根据病区和疾病来做 if (!active.equals("xh")) { // PatMedInhosp pmbq = new PatMedInhosp(); // //获取需要出院部门随访,未处理的数据 // pmbq.setWardcheckFlag("0"); // pmbq.setInhospstate("1"); // pmbq.setFuflag("1"); // List<PatMedInhosp> patMedInhospBQs = patMedInhospMapper.selectPatMedInhospList(pmbq); // log.info("dealOutHospInfo需要处理的出院病区患者信息:{}", CollectionUtils.isNotEmpty(patMedInhospBQs) ? patMedInhospBQs.size() : null); // for (PatMedInhosp patMedInhosp1 : patMedInhospBQs) { // String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); // patMedInhosp1.setTagname(tagname); // } // // //病区数据处理 // for (PatMedInhosp pmiBQ1 : patMedInhospBQs) { // //获取患者信息 // PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiBQ1.getPatid()); // if (Objects.isNull(patArchive)) { // pmiBQ1.setWardcheckFlag("2"); // pmiBQ1.setLongTaskReason("患者基本信息为空"); // patMedInhospMapper.updatePatMedInhosp(pmiBQ1); // continue; // } // try { // ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); // serviceTaskdept.setLongtask(1L); // serviceTaskdept.setDeptCode(pmiBQ1.getLeavehospitaldistrictcode()); // serviceTaskdept.setDeptType("2"); // serviceTaskdept.setOrgid(pmiBQ1.getOrgid()); // List<ServiceTaskdept> serviceTaskdeptList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); // //如果部门模板为空(将deptIsNull设置为true) // if (CollectionUtils.isEmpty(serviceTaskdeptList) || serviceTaskdeptList.size() == 0) { // PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiBQ1.getInhospid()); // pmiBQ1.setWardcheckFlag("2"); // pmiBQ1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "该患者所在病区未配置长期任务;"); PatMedInhosp pmbq = new PatMedInhosp(); //获取需要出院部门随访,未处理的数据 pmbq.setWardcheckFlag("0"); pmbq.setInhospstate("1"); pmbq.setFuflag("1"); List<PatMedInhosp> patMedInhospBQs = patMedInhospMapper.selectPatMedInhospList(pmbq); log.info("dealOutHospInfo需要处理的出院病区患者信息:{}", CollectionUtils.isNotEmpty(patMedInhospBQs) ? patMedInhospBQs.size() : null); for (PatMedInhosp patMedInhosp1 : patMedInhospBQs) { String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); patMedInhosp1.setTagname(tagname); } //病区数据处理 for (PatMedInhosp pmiBQ1 : patMedInhospBQs) { //获取患者信息 PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiBQ1.getPatid()); if (Objects.isNull(patArchive)) { pmiBQ1.setWardcheckFlag("2"); pmiBQ1.setLongTaskReason("患者基本信息为空"); patMedInhospMapper.updatePatMedInhosp(pmiBQ1); continue; } try { String errorreason = null; List<ServiceTaskdept> serviceTaskdeptList = null; if (!StringUtils.isEmpty(pmiBQ1.getLeavehospitaldistrictcode())) { ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); serviceTaskdept.setLongtask(1L); serviceTaskdept.setDeptCode(pmiBQ1.getLeavehospitaldistrictcode()); serviceTaskdept.setDeptType("2"); serviceTaskdept.setServiceType("2"); serviceTaskdept.setOrgid(pmiBQ1.getOrgid()); serviceTaskdeptList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); if (CollectionUtils.isEmpty(serviceTaskdeptList)) { errorreason = "该患者所在病区未配置长期任务;"; } } else { errorreason = "离院病区为空;"; } //如果部门模板为空(将deptIsNull设置为true) if (StringUtils.isNotEmpty(errorreason)) { PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiBQ1.getInhospid()); pmiBQ1.setWardcheckFlag("2"); pmiBQ1.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorreason : errorreason); patMedInhospMapper.updatePatMedInhosp(pmiBQ1); } else { for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) { writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiBQ1, patArchive, 2, config); } // pmiBQ1.setWardcheckFlag("1"); // patMedInhospMapper.updatePatMedInhosp(pmiBQ1); // } else { // for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) { // writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiBQ1, patArchive, 2, config); // } //// pmiBQ1.setWardcheckFlag("1"); //// patMedInhospMapper.updatePatMedInhosp(pmiBQ1); // } // // // } catch (Exception e) { // e.printStackTrace(); // log.error("人员病区处理出异常了:{}", e.getMessage()); // pmiBQ1.setWardcheckFlag("2"); // pmiBQ1.setLongTaskReason("人员病区处理异常:" + e.getMessage()); // patMedInhospMapper.updatePatMedInhosp(pmiBQ1); // } // } // // PatMedInhosp pmjb = new PatMedInhosp(); // //获取需要出院疾病随访,未处理的数据 // pmjb.setDiagcheckFlag("0"); // pmjb.setInhospstate("1"); // pmjb.setFuflag("1"); // List<PatMedInhosp> patMedInhospJBs = patMedInhospMapper.selectPatMedInhospList(pmjb); // log.info("dealOutHospInfo需要处理的出院疾病患者信息:{}", CollectionUtils.isNotEmpty(patMedInhospJBs) ? patMedInhospJBs.size() : null); // for (PatMedInhosp patMedInhosp1 : patMedInhospJBs) { // String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); // patMedInhosp1.setTagname(tagname); // } // // for (PatMedInhosp pmiJB : patMedInhospJBs) { // //获取患者信息 // PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiJB.getPatid()); // if (Objects.isNull(patArchive)) { // pmiJB.setDiagcheckFlag("2"); // pmiJB.setLongTaskReason("患者基本信息为空"); // patMedInhospMapper.updatePatMedInhosp(pmiJB); // continue; // } // try { // if (StringUtils.isEmpty(pmiJB.getLeaveicd10code())) { // continue; // } // // 根据患者的疾病,获取该疾病的长期任务 // ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag(); // serviceTaskdiag.setLongtask(1L); // serviceTaskdiag.setIcd10code(pmiJB.getLeaveicd10code()); // serviceTaskdiag.setOrgid(pmiJB.getOrgid()); // // List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag); // //如果部门模板为空(将deptIsNull设置为true) // if (CollectionUtils.isEmpty(serviceTaskdiags) || serviceTaskdiags.size() == 0) { // PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid()); // pmiJB.setDiagcheckFlag("2"); // pmiJB.setLongTaskReason(patMedInhosp.getLongTaskReason() + "所患的疾病未配置长期任务;"); } } catch (Exception e) { e.printStackTrace(); log.error("人员病区处理出异常了:{}", e.getMessage()); pmiBQ1.setWardcheckFlag("2"); pmiBQ1.setLongTaskReason("人员病区处理异常:" + e.getMessage()); patMedInhospMapper.updatePatMedInhosp(pmiBQ1); } } PatMedInhosp pmjb = new PatMedInhosp(); //获取需要出院疾病随访,未处理的数据 pmjb.setDiagcheckFlag("0"); pmjb.setInhospstate("1"); pmjb.setFuflag("1"); List<PatMedInhosp> patMedInhospJBs = patMedInhospMapper.selectPatMedInhospList(pmjb); log.info("dealOutHospInfo需要处理的出院疾病患者信息:{}", CollectionUtils.isNotEmpty(patMedInhospJBs) ? patMedInhospJBs.size() : null); for (PatMedInhosp patMedInhosp1 : patMedInhospJBs) { String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); patMedInhosp1.setTagname(tagname); } for (PatMedInhosp pmiJB : patMedInhospJBs) { //获取患者信息 PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiJB.getPatid()); if (Objects.isNull(patArchive)) { pmiJB.setDiagcheckFlag("2"); pmiJB.setLongTaskReason("患者基本信息为空"); patMedInhospMapper.updatePatMedInhosp(pmiJB); continue; } try { String errorIcd = null; if (StringUtils.isEmpty(pmiJB.getLeaveicd10code())) { continue; } // 根据患者的疾病,获取该疾病的长期任务 ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag(); serviceTaskdiag.setLongtask(1L); serviceTaskdiag.setServiceType("2"); if (active.equals("nhfy")) { //南华附一的icd10code有重复,所以用主诊断名称去查询 serviceTaskdiag.setIcd10name(pmiJB.getLeavediagname()); if (StringUtils.isEmpty(pmiJB.getLeavediagname())) { errorIcd = "该患者主诊断名称为空;"; } } else { serviceTaskdiag.setIcd10code(pmiJB.getLeaveicd10code()); if (StringUtils.isEmpty(pmiJB.getLeaveicd10code())) { errorIcd = "该患者主诊断ICD10码为空;"; } } serviceTaskdiag.setOrgid(pmiJB.getOrgid()); List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag); //如果部门模板为空(将deptIsNull设置为true) if (StringUtils.isNotEmpty(errorIcd)) { PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid()); pmiJB.setDiagcheckFlag("2"); pmiJB.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorIcd : errorIcd); patMedInhospMapper.updatePatMedInhosp(pmiJB); } else if (CollectionUtils.isEmpty(serviceTaskdiags)) { errorIcd = "该患者所在病区未配置长期任务;"; PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid()); pmiJB.setDiagcheckFlag("2"); pmiJB.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorIcd : errorIcd); patMedInhospMapper.updatePatMedInhosp(pmiJB); } else { for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) { writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiJB, patArchive, 3, config); } // pmiJB.setDiagcheckFlag("1"); // patMedInhospMapper.updatePatMedInhosp(pmiJB); // } else { // for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) { // writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiJB, patArchive, 3, config); // } //// pmiJB.setDiagcheckFlag("1"); //// patMedInhospMapper.updatePatMedInhosp(pmiJB); // } // // } catch (Exception e) { // e.printStackTrace(); // log.error("人员疾病处理出异常了:{}", e.getMessage()); // pmiJB.setDiagcheckFlag("2"); // pmiJB.setLongTaskReason("人员疾病处理异常:" + e.getMessage()); // patMedInhospMapper.updatePatMedInhosp(pmiJB); // } // } } } catch (Exception e) { e.printStackTrace(); log.error("人员疾病处理出异常了:{}", e.getMessage()); pmiJB.setDiagcheckFlag("2"); pmiJB.setLongTaskReason("人员疾病处理异常:" + e.getMessage()); patMedInhospMapper.updatePatMedInhosp(pmiJB); } } // 手术随访 PatMedOperationItem pmoi = new PatMedOperationItem(); //获取需要出院疾病随访,未处理的数据 smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -79,7 +79,8 @@ try { Map<String, Object> requestParams = buildRequestParams(reqVO); Map<String, String> headers = buildRequestHeaders(); String result = HttpUtils.sendPostByHeader(sltdPubPath + "osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers); log.info("请求参数出院数据地址:{},appKey:{}", sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", APP_KEY); String result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers); String cry = determineCry(reqVO); log.info("cry的值为:{}", cry); @@ -88,7 +89,7 @@ return serviceSLTDInhospResDTOS; } catch (Exception e) { log.error("【queryHealthcareRecordList】调用省立同德健康记录查询接口异常,请求参数:{}", reqVO, e); throw new RuntimeException("调用省立同德健康记录查询接口失败", e); throw new RuntimeException("调用省立同德健康记录查询接口失败:" + e.getMessage()); } } @@ -584,6 +585,7 @@ queryInhosp.setSerialnum(StringUtils.trim(patMedInhosp.getSerialnum())); queryInhosp.setOrgid(StringUtils.trim(dto.getOrgId())); queryInhosp.setInhospstate(cry); queryInhosp.setSchemestatus(0L); log.info("----------------这里的入参为:{},{}", queryInhosp.getPatno(), queryInhosp.getSerialnum()); List<PatMedInhosp> existingInhosps = patMedInhospService.selectPatMedInhosp(queryInhosp); @@ -707,11 +709,43 @@ patMedInhosp.setSerialnum(dto.getHealthcareRecordNo()); patMedInhosp.setInhospno(dto.getHealthcareRecordNo()); patMedInhosp.setFuflag("1"); if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1")) patMedInhosp.setFuflag("0"); if ("0".equals(cry)) patMedInhosp.setInhospstate("0"); if ("1".equals(cry)) patMedInhosp.setInhospstate("1"); if ("3".equals(cry)) patMedInhosp.setInhospstate("3"); if ("0".equals(cry)) { patMedInhosp.setInhospstate("0"); if (CollectionUtils.isNotEmpty(dto.getDiagnosisList()) && dto.getDiagnosisList().size() > 0) { for (ServiceSLTDDiagnosisResDTO diagnosis : dto.getDiagnosisList()) { if (diagnosis.getIsMainDiagnosis() == 1) { patMedInhosp.setDiagname(diagnosis.getDiagnosisDictName() == null ? "" : diagnosis.getDiagnosisDictName()); patMedInhosp.setIcd10code(diagnosis.getDiagnosisDictCode() == null ? "" : diagnosis.getDiagnosisDictCode()); } } } } if ("1".equals(cry)) { patMedInhosp.setInhospstate("1"); if (CollectionUtils.isNotEmpty(dto.getDiagnosisList()) && dto.getDiagnosisList().size() > 0) { for (ServiceSLTDDiagnosisResDTO diagnosis : dto.getDiagnosisList()) { if (diagnosis.getIsMainDiagnosis() == 1) { patMedInhosp.setLeavediagname(diagnosis.getDiagnosisDictName() == null ? "" : diagnosis.getDiagnosisDictName()); patMedInhosp.setLeaveicd10code(diagnosis.getDiagnosisDictCode() == null ? "" : diagnosis.getDiagnosisDictCode()); } } } } if ("3".equals(cry)) { patMedInhosp.setInhospstate("3"); if (CollectionUtils.isNotEmpty(dto.getDiagnosisList()) && dto.getDiagnosisList().size() > 0) { for (ServiceSLTDDiagnosisResDTO diagnosis : dto.getDiagnosisList()) { if (diagnosis.getIsMainDiagnosis() == 1) { patMedInhosp.setDiagname(diagnosis.getDiagnosisDictName() == null ? "" : diagnosis.getDiagnosisDictName()); patMedInhosp.setIcd10code(diagnosis.getDiagnosisDictCode() == null ? "" : diagnosis.getDiagnosisDictCode()); } } } } patMedInhosp.setHospitalcode(dto.getOrgId()); patMedInhosp.setBedNo(dto.getBedNumber()); patMedInhosp.setStarttime(parseDate(dto.getStartTime())); @@ -765,12 +799,6 @@ queryByPatientNo.setIdcardno(StringUtils.isNotEmpty(dto.getIdCardNo()) ? dto.getIdCardNo().trim() : null); existingArchives = patArchiveService.selectPatArchiveList(queryByPatientNo); } // if (CollectionUtils.isEmpty(existingArchives) && !StringUtils.isEmpty(dto.getIdCardNo())) { // PatArchive queryByIdCard = new PatArchive(); // queryByIdCard.setIdcardno(dto.getIdCardNo().trim()); // existingArchives = patArchiveService.selectPatArchiveList(queryByIdCard); // } PatArchive patArchive = buildPatientArchive(dto); if (CollectionUtils.isEmpty(existingArchives)) { smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -165,6 +165,12 @@ @Value("${phoneEndHour}") private Integer phoneEndHour; @Autowired private Icd10Mapper icd10Mapper; @Value("${spring.profiles.active}") private String active; /** * 查询单一任务(随访) * @@ -615,10 +621,19 @@ ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag(); serviceTaskdiag.setTaskId(serviceTask.getTaskid()); serviceTaskdiag.setTaskName(serviceTask.getTaskName()); serviceTaskdiag.setServiceType(serviceTaskVO.getServiceType()); serviceTaskdiag.setLongtask(Long.valueOf(serviceTask.getLongTask())); if (serviceTaskVO.getLongTask() == 1) serviceTaskdiag.setLongtask(1L); serviceTaskdiag.setIcd10code(serviceTaskVO.getIcd10code()); serviceTaskdiag.setIcd10name(serviceTaskVO.getIcd10name()); //南华附一的icd10code是有重复的,所以不能用南华附一的icd10code去查询 if (!active.equals("nhfy") && StringUtils.isEmpty(serviceTaskVO.getIcd10name())) { Icd10 icd10 = new Icd10(); icd10.setIcdcode(serviceTaskVO.getIcd10code()); List<Icd10> icd10s = icd10Mapper.selectIcd10List(icd10); if (CollectionUtils.isNotEmpty(icd10s)) serviceTaskdiag.setIcd10name(icd10s.get(0).getIcdname()); } serviceTaskdiag.setGuid(serviceTask.getGuid()); serviceTaskdiag.setOrgid(serviceTask.getOrgid()); serviceTaskdiag.setCreateTime(new Date()); @@ -756,7 +771,8 @@ } } } else if (serviceTaskVO.getIsoperation() != null && serviceTaskVO.getIsoperation() == 2) { } else if (serviceTaskVO.getIsoperation() != null && serviceTaskVO.getIsoperation() == 2) { //任务修改 if (ObjectUtils.isNotEmpty(serviceTaskVO.getSendTimeslot())) serviceTask.setSendTimeSlot(JSON.toJSONString(serviceTaskVO.getSendTimeslot())); @@ -4249,7 +4265,7 @@ } // 1. 查询分组统计(发送总量、发送成功量、已读量) List<Map<String, Object>> groupStats = serviceSubtaskMapper.getHeLibraryCount(heLibraryCountVO); // 2. 计算各组的发送成功率和已读率 List<Map<String, Object>> result = new ArrayList<>(); if (CollectionUtils.isNotEmpty(groupStats)) { @@ -4266,7 +4282,7 @@ result.add(row); } } Map<String, Object> resultMap = new HashMap<>(); resultMap.put("list", result); resultMap.put("total", result.size()); smartor/src/main/java/com/smartor/service/impl/UserExtInfoServiceImpl.java
@@ -1,6 +1,7 @@ package com.smartor.service.impl; import com.ruoyi.common.core.service.IUserExtInfoService; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.StringUtils; import com.smartor.domain.IvrLibaScriptAssort; import com.smartor.domain.SvyLibScriptCategory; @@ -16,6 +17,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; /** * 用户扩展信息服务实现(smartor 模块) @@ -23,6 +25,9 @@ */ @Service public class UserExtInfoServiceImpl implements IUserExtInfoService { private static final String SATISFACTION_CACHE_KEY = "satisfaction:categories:"; private static final int SATISFACTION_CACHE_TTL = 30; @Autowired private SysUserOrgMapper sysUserOrgMapper; @@ -32,6 +37,9 @@ @Autowired private SvyLibScriptCategoryMapper svyLibScriptCategoryMapper; @Autowired private RedisCache redisCache; /** * 获取用户机构/院区信息 @@ -52,10 +60,18 @@ } /** * 获取满意度问题分类(语音 + 问卷) * 获取满意度问题分类(语音 + 问卷),带Redis缓存 */ @Override @SuppressWarnings("unchecked") public Map<String, Object> getSatisfactionCategories(String orgid) { // 先查缓存 String cacheKey = SATISFACTION_CACHE_KEY + orgid; Map<String, Object> cached = redisCache.getCacheObject(cacheKey); if (cached != null) { return cached; } Map<String, Object> satisfactionCategories = new HashMap<>(); // 获取语音问题分类 @@ -90,6 +106,9 @@ } satisfactionCategories.put("questionnaireCategorys", questionnaireCategorys); // 写入缓存 redisCache.setCacheObject(cacheKey, satisfactionCategories, SATISFACTION_CACHE_TTL, TimeUnit.MINUTES); return satisfactionCategories; } } smartor/src/main/resources/mapper/smartor/Icd10Mapper.xml
@@ -176,4 +176,14 @@ #{icdid} </foreach> </delete> <!-- 批量查询已存在的 icdcode,用于分页拉取后去重 --> <select id="selectExistingIcdcodes" resultType="java.lang.String"> select icdname from icd10 where del_flag = 0 and icdname in <foreach item="icdname" collection="icdnames" open="(" separator="," close=")"> #{icdname} </foreach> </select> </mapper> smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -48,6 +48,8 @@ <result property="patno" column="patno"/> <result property="inhospstate" column="inhospstate"/> <result property="deptcheckFlag" column="deptcheck_flag"/> <result property="inWardcheckFlag" column="in_wardcheck_flag"/> <result property="inDeptcheckFlag" column="in_deptcheck_flag"/> <result property="wardcheckFlag" column="wardcheck_flag"/> <result property="diagcheckFlag" column="diagcheck_flag"/> <result property="age" column="age"/> @@ -98,6 +100,8 @@ nurse_name, deptcheck_flag, wardcheck_flag, in_deptcheck_flag, in_wardcheck_flag, diagcheck_flag, inhospstate, patno, @@ -157,6 +161,8 @@ b.out_way_name, b.deptcheck_flag, b.wardcheck_flag, b.in_deptcheck_flag, b.in_wardcheck_flag, b.diagcheck_flag, b.inhospstate, b.patno, @@ -248,6 +254,8 @@ <if test="nurseName != null and nurseName != ''">and b.nurse_name = #{nurseName}</if> <if test="deptcheckFlag != null ">and b.deptcheck_flag = #{deptcheckFlag}</if> <if test="wardcheckFlag != null ">and b.wardcheck_flag = #{wardcheckFlag}</if> <if test="inDeptcheckFlag != null ">and b.in_deptcheck_flag = #{inDeptcheckFlag}</if> <if test="inWardcheckFlag != null ">and b.in_wardcheck_flag = #{inWardcheckFlag}</if> <if test="diagcheckFlag != null ">and b.diagcheck_flag = #{diagcheckFlag}</if> <if test="cry != null and cry == 0 ">and b.endtime is null</if> <if test="cry != null and cry == 1 ">and b.inhospstate=1</if> @@ -331,6 +339,8 @@ b.out_way_name, b.deptcheck_flag, b.wardcheck_flag, b.in_deptcheck_flag, b.in_wardcheck_flag, b.diagcheck_flag, b.inhospstate, b.patno, @@ -409,8 +419,9 @@ b.nurse_id, b.nurse_name, b.deptcheck_flag, b.diagcheck_flag, b.wardcheck_flag, b.in_deptcheck_flag, b.in_wardcheck_flag, b.inhospstate, b.patno, b.inhospno, @@ -489,6 +500,8 @@ <if test="diagcheckFlag != null ">and b.diagcheck_flag = #{diagcheckFlag}</if> <if test="deptcheckFlag != null ">and b.deptcheck_flag = #{deptcheckFlag}</if> <if test="wardcheckFlag != null ">and b.wardcheck_flag = #{wardcheckFlag}</if> <if test="inDeptcheckFlag != null ">and b.in_deptcheck_flag = #{inDeptcheckFlag}</if> <if test="inWardcheckFlag != null ">and b.in_wardcheck_flag = #{inWardcheckFlag}</if> <if test="inhospstate != null ">and b.inhospstate = #{inhospstate}</if> <if test="schemestatus != null ">and b.schemestatus = #{schemestatus}</if> <if test="leavediagname != null and leavediagname != ''">and b.leavediagname like concat('%', @@ -573,6 +586,9 @@ <if test="inhospstate != null">and inhospstate = #{inhospstate}</if> <if test="deptcheckFlag != null">and deptcheck_flag = #{deptcheckFlag}</if> <if test="wardcheckFlag != null">and wardcheck_flag = #{wardcheckFlag}</if> <if test="inDeptcheckFlag != null">and in_deptcheck_flag = #{inDeptcheckFlag}</if> <if test="inWardcheckFlag != null">and in_wardcheck_flag = #{inWardcheckFlag}</if> <if test="wardcheckFlag != null">and wardcheck_flag = #{wardcheckFlag}</if> <if test="diagcheckFlag != null">and diagcheck_flag = #{diagcheckFlag}</if> <if test="longTaskReason != null">and long_task_reason = #{longTaskReason}</if> <if test="nurseId != null ">and nurse_id = #{nurseId}</if> @@ -642,6 +658,8 @@ <if test="inhospstate != null">inhospstate,</if> <if test="deptcheckFlag != null">deptcheck_flag,</if> <if test="wardcheckFlag != null">wardcheck_flag,</if> <if test="inDeptcheckFlag != null">in_deptcheck_flag,</if> <if test="inWardcheckFlag != null">in_wardcheck_flag,</if> <if test="diagcheckFlag != null">diagcheck_flag,</if> <if test="longTaskReason != null">long_task_reason,</if> <if test="nurseId != null ">nurse_id,</if> @@ -707,6 +725,8 @@ <if test="inhospstate != null">#{inhospstate},</if> <if test="deptcheckFlag != null">#{deptcheckFlag},</if> <if test="wardcheckFlag != null">#{wardcheckFlag},</if> <if test="inDeptcheckFlag != null">#{inDeptcheckFlag},</if> <if test="inWardcheckFlag != null">#{inWardcheckFlag},</if> <if test="diagcheckFlag != null">#{diagcheckFlag},</if> <if test="longTaskReason != null">#{longTaskReason},</if> <if test="nurseId != null ">#{nurseId},</if> @@ -742,7 +762,7 @@ schemestatus, generalschemestatus, leaveldeptcode, leaveldeptname, hospitaldistrictid, leavehospitaldistrictcode, leavehospitaldistrictname, leavehospitaldistrictid, deptid, leaveldeptid, schemetime, patname, patno, inhospstate, deptcheck_flag, wardcheck_flag, diagcheck_flag, long_task_reason, deptcheck_flag, wardcheck_flag,in_deptcheck_flag, in_wardcheck_flag, diagcheck_flag, long_task_reason, nurse_id, nurse_name, out_way_id, out_way_name, guid, operator, operator_id, inhospno, remark, fuflag, fudate, fuperiod, futypecode, futypedesc, fuadvice, fuspecialadvice, management_doctor, @@ -764,7 +784,7 @@ #{item.leavehospitaldistrictcode}, #{item.leavehospitaldistrictname}, #{item.leavehospitaldistrictid}, #{item.deptid}, #{item.leaveldeptid}, #{item.schemetime}, #{item.patname}, #{item.patno}, #{item.inhospstate}, #{item.deptcheckFlag}, #{item.wardcheckFlag}, #{item.diagcheckFlag}, #{item.longTaskReason}, #{item.deptcheckFlag}, #{item.wardcheckFlag},#{item.inDeptcheckFlag}, #{item.inWardcheckFlag}, #{item.diagcheckFlag}, #{item.longTaskReason}, #{item.nurseId}, #{item.nurseName}, #{item.outWayId}, #{item.outWayName}, #{item.guid}, #{item.operator}, #{item.operatorId}, #{item.inhospno}, #{item.remark}, #{item.fuflag}, #{item.fudate}, #{item.fuperiod}, #{item.futypecode}, #{item.futypedesc}, #{item.fuadvice}, @@ -819,6 +839,8 @@ <if test="inhospstate != null">inhospstate = #{inhospstate},</if> <if test="deptcheckFlag != null">deptcheck_flag = #{deptcheckFlag},</if> <if test="wardcheckFlag != null">wardcheck_flag = #{wardcheckFlag},</if> <if test="inDeptcheckFlag != null">in_deptcheck_flag = #{inDeptcheckFlag},</if> <if test="inWardcheckFlag != null">in_wardcheck_flag = #{inWardcheckFlag},</if> <if test="diagcheckFlag != null">diagcheck_flag = #{diagcheckFlag},</if> <if test="longTaskReason != null">long_task_reason = #{longTaskReason},</if> <if test="nurseId != null ">nurse_id = #{nurseId},</if>