| | |
| | | package com.smartor.service.impl; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.Period; |
| | | import java.time.ZoneId; |
| | | import java.time.temporal.ChronoUnit; |
| | | import java.util.*; |
| | | |
| | | import com.ruoyi.common.core.domain.entity.SysDept; |
| | |
| | | import com.smartor.domain.*; |
| | | import com.smartor.mapper.*; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.ObjectUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.cache.annotation.Cacheable; |
| | | import org.springframework.stereotype.Service; |
| | | import com.smartor.service.IPatMedOuthospService; |
| | | import org.springframework.util.CollectionUtils; |
| | |
| | | private ServiceTaskdiagMapper serviceTaskdiagMapper; |
| | | |
| | | @Autowired |
| | | private ServiceTaskdeptMapper serviceTaskdeptMapper; |
| | | |
| | | @Autowired |
| | | private PatArchiveMapper patArchiveMapper; |
| | | |
| | | |
| | |
| | | * @return 患者门诊记录 |
| | | */ |
| | | @Override |
| | | @Cacheable(value = "selectPatMedOuthospList", key = "T(org.springframework.util.DigestUtils).md5DigestAsHex(#patMedOuthosp.toString().getBytes())", unless = "#result == null or #result.isEmpty()") |
| | | public List<PatMedOuthosp> selectPatMedOuthospList(PatMedOuthosp patMedOuthosp) { |
| | | List<PatMedOuthosp> patMedOuthosps = patMedOuthospMapper.selectPatMedOuthospList(patMedOuthosp); |
| | | for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) { |
| | | PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp1.getPatid()); |
| | | if (patArchive.getBirthdate() != null) { |
| | | Map<String, String> map = calculateAge(patArchive.getBirthdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), LocalDate.now()); |
| | | patArchive.setAge(ObjectUtils.isNotEmpty(map.get("age")) ? Long.valueOf(map.get("age")) : null); |
| | | patArchive.setAgeUnit(map.get("ageUnit")); |
| | | patArchive.setAge2(ObjectUtils.isNotEmpty(map.get("age2")) ? Long.valueOf(map.get("age2")) : null); |
| | | patArchive.setAgeUnit2(map.get("ageUnit2")); |
| | | patMedOuthosp1.setAge(patArchive.getAge() + patArchive.getAgeUnit() + patArchive.getAge2() + patArchive.getAgeUnit2()); |
| | | patMedOuthosp1.setTelcode(patArchive.getTelcode()); |
| | | patMedOuthosp1.setIdcardno(patArchive.getIdcardno()); |
| | | } |
| | | ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO(); |
| | | serviceSubtaskVO.setPatid(patMedOuthosp1.getPatid()); |
| | | List<Long> sendstates = new ArrayList<>(); |
| | | sendstates.add(1L); |
| | | sendstates.add(2L); |
| | | sendstates.add(3L); |
| | | serviceSubtaskVO.setSendstates(sendstates); |
| | | serviceSubtaskVO.setServiceType("3"); |
| | | List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskBySendstate(serviceSubtaskVO); |
| | | if (!CollectionUtils.isEmpty(serviceSubtaskList)) patMedOuthosp1.setServerState("1"); |
| | | } |
| | | return patMedOuthosps; |
| | | } |
| | | |
| | | public Map<String, String> calculateAge(LocalDate birthdate, LocalDate today) { |
| | | if (birthdate == null || today.isBefore(birthdate)) { |
| | | return null; |
| | | } |
| | | Map<String, String> ageMap = new HashMap<>(); |
| | | |
| | | Period period = Period.between(birthdate, today); |
| | | long totalDays = ChronoUnit.DAYS.between(birthdate, today); |
| | | long totalMonths = ChronoUnit.MONTHS.between(birthdate, today); |
| | | |
| | | int years = period.getYears(); |
| | | int months = period.getMonths(); |
| | | int days = period.getDays(); |
| | | |
| | | String ageUnit; |
| | | Integer age; |
| | | String ageUnit2 = null; |
| | | Integer age2 = null; |
| | | |
| | | if (totalDays < 30) { |
| | | // 小于 1 个月,按天计算 |
| | | ageUnit = "天"; |
| | | age = (int) totalDays; |
| | | ageMap.put("age", age != null ? age.toString() : null); |
| | | ageMap.put("ageUnit", ageUnit); |
| | | ageMap.put("age2", null); |
| | | ageMap.put("ageUnit2", null); |
| | | } else if (totalMonths < 12) { |
| | | // 小于 一年,按月 + 天计算 |
| | | ageUnit = "月"; |
| | | age = (int) totalMonths; |
| | | ageUnit2 = "天"; |
| | | age2 = days; |
| | | ageMap.put("age", age != null ? age.toString() : null); |
| | | ageMap.put("ageUnit", ageUnit); |
| | | ageMap.put("age2", age2 != null ? age2.toString() : null); |
| | | ageMap.put("ageUnit2", ageUnit2); |
| | | } else { |
| | | // 大于等于 一年,按年 + 月计算 |
| | | ageUnit = "岁"; |
| | | age = years; |
| | | ageUnit2 = "月"; |
| | | age2 = months; |
| | | ageMap.put("age", age != null ? age.toString() : null); |
| | | ageMap.put("ageUnit", ageUnit); |
| | | ageMap.put("age2", age2 != null ? age2.toString() : null); |
| | | ageMap.put("ageUnit2", ageUnit2); |
| | | } |
| | | |
| | | return ageMap; |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | @Override |
| | | public PatMedRes selectPatMedOuthospCount(PatMedReq patMedReq) { |
| | | // 获取当前登陆人的部门权限 |
| | | if (CollectionUtils.isEmpty(patMedReq.getDeptcodeList())) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | List<SysDept> sysDepts = sysUserDeptMapper.selectDeptListByUserId(userId); |
| | | List<String> deptCode = new ArrayList<>(); |
| | | for (SysDept sysDept : sysDepts) { |
| | | deptCode.add(sysDept.getDeptId().toString()); |
| | | } |
| | | patMedReq.setDeptcodeList(deptCode); |
| | | } |
| | | // // 获取当前登陆人的部门权限 |
| | | // if (CollectionUtils.isEmpty(patMedReq.getDeptcodeList())) { |
| | | // Long userId = SecurityUtils.getUserId(); |
| | | // List<SysDept> sysDepts = sysUserDeptMapper.selectDeptListByUserId(userId); |
| | | // List<String> deptCode = new ArrayList<>(); |
| | | // for (SysDept sysDept : sysDepts) { |
| | | // deptCode.add(sysDept.getDeptId().toString()); |
| | | // } |
| | | // patMedReq.setDeptcodeList(deptCode); |
| | | // } |
| | | return patMedOuthospMapper.selectPatMedOuthospCount(patMedReq); |
| | | } |
| | | |
| | |
| | | patMedOuthosp.setDiagcheckFlag("0"); |
| | | List<PatMedOuthosp> patMedOuthosps = selectPatMedOuthospList(patMedOuthosp); |
| | | for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) { |
| | | PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp1.getPatid()); |
| | | |
| | | //根据患者科室,获取该疾病的长期任务 |
| | | ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); |
| | | serviceTaskdept.setLongtask(1L); |
| | | serviceTaskdept.setDeptCode(patMedOuthosp1.getDeptcode()); |
| | | serviceTaskdept.setServiceType("3"); |
| | | List<ServiceTaskdept> serviceTaskdeptList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept); |
| | | if (org.apache.commons.collections4.CollectionUtils.isEmpty(serviceTaskdeptList) || serviceTaskdeptList.size() == 0) { |
| | | patMedOuthosp1.setDeptcheckFlag("2"); |
| | | patMedOuthosp1.setRemark("通过部门,没有找到门诊随访任务ID"); |
| | | patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp1); |
| | | } else { |
| | | for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) { |
| | | writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedOuthosp1, patArchive, 1); |
| | | } |
| | | } |
| | | |
| | | // 根据患者的疾病,获取该疾病的长期任务 |
| | | ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag(); |
| | | serviceTaskdiag.setLongtask(1L); |
| | | serviceTaskdiag.setIcd10code(patMedOuthosp1.getIcd10code()); |
| | | List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag); |
| | | PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp1.getPatid()); |
| | | //如果部门模板为空(将deptIsNull设置为true) |
| | | if (org.apache.commons.collections4.CollectionUtils.isEmpty(serviceTaskdiags) || serviceTaskdiags.size() == 0) { |
| | | patMedOuthosp1.setDiagcheckFlag("2"); |
| | | patMedOuthosp1.setRemark("通过icd10,没有找到随访任务ID"); |
| | | patMedOuthosp1.setRemark("通过icd10,没有找到门诊随访任务ID"); |
| | | patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp1); |
| | | } else { |
| | | for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) { |
| | | writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedOuthosp1, patArchive); |
| | | writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedOuthosp1, patArchive, 2); |
| | | } |
| | | } |
| | | |
| | |
| | | return 1; |
| | | } |
| | | |
| | | private void writeInSubTask(Long taskid, Boolean check, PatMedOuthosp patMedOuthosp, PatArchive patArchive) { |
| | | /** |
| | | * @param taskid |
| | | * @param check |
| | | * @param patMedOuthosp |
| | | * @param patArchive |
| | | * @param type 1 科室 2 疾病 |
| | | */ |
| | | private void writeInSubTask(Long taskid, Boolean check, PatMedOuthosp patMedOuthosp, PatArchive patArchive, Integer type) { |
| | | |
| | | ServiceTask st = new ServiceTask(); |
| | | st.setTaskid(taskid); |
| | | st.setSendState(2L); |
| | | List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st); |
| | | if (org.apache.commons.collections4.CollectionUtils.isEmpty(serviceTasks)) { |
| | | log.error("该患者疾病随访长期任务不存在,任务ID为:{}", taskid); |
| | | patMedOuthosp.setDiagcheckFlag("2"); |
| | | patMedOuthosp.setRemark("该患者疾病随访长期任务不存在,任务ID为:" + taskid); |
| | | log.info("该患者疾病随访长期任务不存在,任务ID为:{}", taskid); |
| | | if (type == 1) patMedOuthosp.setDiagcheckFlag("2"); |
| | | if (type == 2) patMedOuthosp.setDeptcheckFlag("2"); |
| | | patMedOuthosp.setRemark("该患者门诊随访长期任务不存在,任务ID为:" + taskid); |
| | | patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp); |
| | | return; |
| | | } |
| | |
| | | subtask.setSendstate(2L); |
| | | subtask.setTaskid(taskid); |
| | | List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask); |
| | | log.error("该患者待执行的任务:{}", selectServiceSubtaskList); |
| | | log.info("该患者待执行的任务:{}", CollectionUtils.isEmpty(selectServiceSubtaskList) ? null : selectServiceSubtaskList.size()); |
| | | if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(selectServiceSubtaskList) && selectServiceSubtaskList.size() > 0) { |
| | | for (ServiceSubtask serviceSubtask1 : selectServiceSubtaskList) { |
| | | if (Objects.isNull(serviceSubtask1.getLongSendTime())) { |
| | |
| | | } |
| | | |
| | | //将之前的停掉 |
| | | serviceSubtask1.setSendstate(4L); |
| | | serviceSubtask1.setRemark("疾病患者再入院"); |
| | | serviceSubtask1.setResult("error"); |
| | | // serviceSubtask1.setFinishtime(new Date()); |
| | | serviceSubtask1.setSendstate(6L); |
| | | serviceSubtask1.setRemark("患者已经回院复诊"); |
| | | serviceSubtask1.setResult("success"); |
| | | serviceSubtask1.setFinishtime(new Date()); |
| | | serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy()); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1); |
| | | //重新新增子任务 |
| | | i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); |
| | | |
| | | } |
| | | } else { |
| | | if (StringUtils.isEmpty(serviceSubtask.getPhone())) { |
| | |
| | | //将check_flag改成1(已处理) |
| | | PatMedOuthosp patMedOuthosp1 = new PatMedOuthosp(); |
| | | patMedOuthosp1.setId(patMedOuthosp.getId()); |
| | | patMedOuthosp1.setDiagcheckFlag("1"); |
| | | if (type == 1) patMedOuthosp1.setDiagcheckFlag("2"); |
| | | if (type == 2) patMedOuthosp1.setDeptcheckFlag("2"); |
| | | patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp1); |
| | | } else { |
| | | //生成子任务失败, |
| | | log.error("生成子任务失败serviceSubtask为:{}", serviceSubtask); |
| | | log.info("生成子任务失败serviceSubtask的taskid为:{},patid为:{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid()); |
| | | PatMedOuthosp pmo = new PatMedOuthosp(); |
| | | pmo.setId(patMedOuthosp.getId()); |
| | | pmo.setDiagcheckFlag("2"); |
| | | if (type == 1) pmo.setDiagcheckFlag("2"); |
| | | if (type == 2) pmo.setDeptcheckFlag("2"); |
| | | pmo.setRemark("生成子任务失败"); |
| | | patMedOuthospMapper.updatePatMedOuthosp(pmo); |
| | | } |
| | |
| | | serviceSubtask.setDrcode(patMedOuthosp.getDrcode()); |
| | | serviceSubtask.setDrname(patMedOuthosp.getDrname()); |
| | | serviceSubtask.setDeptcode(patMedOuthosp.getDeptcode()); |
| | | serviceSubtask.setInhospid(patMedOuthosp.getId()); |
| | | serviceSubtask.setHospno(patMedOuthosp.getOuthospno()); |
| | | serviceSubtask.setDeptname(patMedOuthosp.getDeptname()); |
| | | serviceSubtask.setTemplateid(serviceTask.getTemplateid()); |
| | | serviceSubtask.setTemplatename(serviceTask.getTemplatename()); |
| | |
| | | //设置发送时间 |
| | | if (serviceTask.getSendDay() == null) serviceTask.setSendDay(1L); |
| | | Date newDate = addDays(patMedOuthosp.getAdmitdate(), serviceTask.getSendDay().intValue()); |
| | | if (patMedOuthosp.getFudate() != null) { |
| | | //如果门诊表有指定随访时间,那就用指定的 |
| | | newDate = patMedOuthosp.getFudate(); |
| | | } |
| | | serviceSubtask.setLongSendTime(newDate); |
| | | serviceSubtask.setVisitTime(newDate); |
| | | //患者发送时间 |