package com.smartor.service.impl; import java.util.*; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUserDept; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DtoConversionUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.smartor.domain.*; import com.smartor.mapper.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.smartor.service.IPatMedOuthospService; import org.springframework.util.CollectionUtils; /** * 患者门诊记录Service业务层处理 * * @author smartor * @date 2023-03-04 */ @Slf4j @Service public class PatMedOuthospServiceImpl implements IPatMedOuthospService { @Autowired private PatMedOuthospMapper patMedOuthospMapper; @Autowired private SysUserDeptMapper sysUserDeptMapper; @Autowired private ServiceSubtaskMapper serviceSubtaskMapper; @Autowired private ServiceTaskMapper serviceTaskMapper; @Autowired private ServiceTaskdiagMapper serviceTaskdiagMapper; @Autowired private PatArchiveMapper patArchiveMapper; /** * 查询患者门诊记录 * * @param id 患者门诊记录主键 * @return 患者门诊记录 */ @Override public PatMedOuthosp selectPatMedOuthospById(Long id) { return patMedOuthospMapper.selectPatMedOuthospById(id); } /** * 查询患者门诊记录列表 * * @param patMedOuthosp 患者门诊记录 * @return 患者门诊记录 */ @Override public List selectPatMedOuthospList(PatMedOuthosp patMedOuthosp) { List patMedOuthosps = patMedOuthospMapper.selectPatMedOuthospList(patMedOuthosp); return patMedOuthosps; } /** * 新增患者门诊记录 * * @param patMedOuthosp 患者门诊记录 * @return 结果 */ @Override public int insertPatMedOuthosp(PatMedOuthosp patMedOuthosp) { patMedOuthosp.setCreateTime(DateUtils.getNowDate()); patMedOuthosp.setUpdateTime(DateUtils.getNowDate()); return patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp); } /** * 修改患者门诊记录 * * @param patMedOuthosp 患者门诊记录 * @return 结果 */ @Override public int updatePatMedOuthosp(PatMedOuthosp patMedOuthosp) { patMedOuthosp.setUpdateTime(DateUtils.getNowDate()); return patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp); } /** * 批量删除患者门诊记录 * * @param ids 需要删除的患者门诊记录主键 * @return 结果 */ @Override public int deletePatMedOuthospByIds(Long[] ids) { return patMedOuthospMapper.deletePatMedOuthospByIds(ids); } /** * 删除患者门诊记录信息 * * @param id 患者门诊记录主键 * @return 结果 */ @Override public int deletePatMedOuthospById(Long id) { return patMedOuthospMapper.deletePatMedOuthospById(id); } @Override public PatMedRes selectPatMedOuthospCount(PatMedReq patMedReq) { // 获取当前登陆人的部门权限 if (CollectionUtils.isEmpty(patMedReq.getDeptcodeList())) { Long userId = SecurityUtils.getUserId(); List sysDepts = sysUserDeptMapper.selectDeptListByUserId(userId); List deptCode = new ArrayList<>(); for (SysDept sysDept : sysDepts) { deptCode.add(sysDept.getDeptId().toString()); } patMedReq.setDeptcodeList(deptCode); } return patMedOuthospMapper.selectPatMedOuthospCount(patMedReq); } @Override public PatMedOuthosp getDeptCodeByPatId(PatMedOuthosp patMedOuthosp) { List patMedOuthosps = selectPatMedOuthospList(patMedOuthosp); if (!CollectionUtils.isEmpty(patMedOuthosps)) { Collections.sort(patMedOuthosps, Comparator.comparing(PatMedOuthosp::getAdmitdate).reversed()); } return patMedOuthosps.get(0); } /** * 门诊病人信息处理 * * @return */ @Override public Integer dealOutpatientInfo() { PatMedOuthosp patMedOuthosp = new PatMedOuthosp(); patMedOuthosp.setDiagcheckFlag("0"); List patMedOuthosps = selectPatMedOuthospList(patMedOuthosp); for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) { // 根据患者的疾病,获取该疾病的长期任务 ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag(); serviceTaskdiag.setLongtask(1L); serviceTaskdiag.setIcd10code(patMedOuthosp1.getIcd10code()); List 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"); patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp1); } else { for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) { writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedOuthosp1, patArchive); } } } return 1; } private void writeInSubTask(Long taskid, Boolean check, PatMedOuthosp patMedOuthosp, PatArchive patArchive) { ServiceTask st = new ServiceTask(); st.setTaskid(taskid); st.setSendState(2L); List serviceTasks = serviceTaskMapper.selectServiceTaskList(st); if (org.apache.commons.collections4.CollectionUtils.isEmpty(serviceTasks)) { log.error("该患者疾病随访长期任务不存在,任务ID为:{}", taskid); patMedOuthosp.setDiagcheckFlag("2"); patMedOuthosp.setRemark("该患者疾病随访长期任务不存在,任务ID为:" + taskid); patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp); return; } ServiceTask serviceTask = serviceTasks.get(0); //封装serviceSubtask ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, patMedOuthosp, patArchive); Integer i = 0; //先判断一下,是否需要校验 if (check) { //在新增之前,先通过患者ID,sendstate=2查询一下,在所有长期任务中,是不是还有该患者待执行的任务,有的话,比较之前的endtime是否小于当前的endtaime,如果之前的小于现在的,则直接将之前的停掉(原因再入院) ServiceSubtaskVO subtask = new ServiceSubtaskVO(); subtask.setPatid(patArchive.getId()); subtask.setSendstate(2L); subtask.setTaskid(taskid); List selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask); log.error("该患者待执行的任务:{}", selectServiceSubtaskList); if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(selectServiceSubtaskList) && selectServiceSubtaskList.size() > 0) { for (ServiceSubtask serviceSubtask1 : selectServiceSubtaskList) { if (Objects.isNull(serviceSubtask1.getLongSendTime())) { //不是长期任务,不处理 continue; } //将之前的停掉 serviceSubtask1.setSendstate(4L); serviceSubtask1.setRemark("疾病患者再入院"); serviceSubtask1.setResult("error"); serviceSubtask1.setFinishtime(new Date()); serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy()); serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1); //重新新增子任务 i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); } } else { if (StringUtils.isEmpty(serviceSubtask.getPhone())) { serviceSubtask.setRemark("手机号为空"); serviceSubtask.setSendstate(4L); serviceSubtask.setResult("error"); serviceSubtask.setFinishtime(new Date()); } serviceSubtask.setCreateBy(serviceTask.getCreateBy()); serviceSubtask.setCreateTime(new Date()); i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); } } else { if (StringUtils.isEmpty(serviceSubtask.getPhone())) { serviceSubtask.setRemark("手机号为空"); serviceSubtask.setSendstate(4L); serviceSubtask.setResult("error"); serviceSubtask.setFinishtime(new Date()); } serviceSubtask.setCreateBy(serviceTask.getCreateBy()); serviceSubtask.setCreateTime(new Date()); i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); } if (i == 1) { //将check_flag改成1(已处理) PatMedOuthosp patMedOuthosp1 = new PatMedOuthosp(); patMedOuthosp1.setId(patMedOuthosp.getId()); patMedOuthosp1.setDiagcheckFlag("1"); patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp1); } else { //生成子任务失败, log.error("生成子任务失败serviceSubtask为:{}", serviceSubtask); PatMedOuthosp pmo = new PatMedOuthosp(); pmo.setId(patMedOuthosp.getId()); pmo.setDiagcheckFlag("2"); pmo.setRemark("生成子任务失败"); patMedOuthospMapper.updatePatMedOuthosp(pmo); } } //封装serviceSubtask private ServiceSubtask boxedServiceSubtask(ServiceTask serviceTask, PatMedOuthosp patMedOuthosp, PatArchive patArchive) { ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTask, ServiceSubtask.class); serviceSubtask.setTaskid(serviceTask.getTaskid()); if (StringUtils.isNotEmpty(serviceTask.getLibtemplateid())) serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid())); serviceSubtask.setDrcode(patMedOuthosp.getDrcode()); serviceSubtask.setDrname(patMedOuthosp.getDrname()); serviceSubtask.setDeptcode(patMedOuthosp.getDeptcode()); serviceSubtask.setDeptname(patMedOuthosp.getDeptname()); serviceSubtask.setTemplateid(serviceTask.getTemplateid()); serviceSubtask.setTemplatename(serviceTask.getTemplatename()); serviceSubtask.setPatid(patArchive.getId()); serviceSubtask.setSendname(patArchive.getName()); serviceSubtask.setSfzh(patArchive.getIdcardno()); serviceSubtask.setLeavediagname(patMedOuthosp.getDiagname()); serviceSubtask.setLeaveicd10code(patMedOuthosp.getIcd10code()); serviceSubtask.setSfzh(patArchive.getIdcardno()); serviceSubtask.setPhone(patArchive.getTelcode()); if (StringUtils.isBlank(patArchive.getTelcode())) serviceSubtask.setPhone(patArchive.getRelativetelcode()); serviceSubtask.setSex(patArchive.getSex()); serviceSubtask.setAge(patArchive.getAge()); serviceSubtask.setSendstate(2L); serviceSubtask.setServiceType(serviceTask.getServiceType()); serviceSubtask.setPreachform(serviceTask.getPreachform()); serviceSubtask.setHospType("1"); serviceSubtask.setCreateTime(new Date()); serviceSubtask.setUpdateTime(new Date()); serviceSubtask.setUpdateBy(serviceTask.getUpdateBy()); serviceSubtask.setUpdateTime(new Date()); //设置发送时间 if (serviceTask.getSendDay() == null) serviceTask.setSendDay(1L); Date newDate = addDays(patMedOuthosp.getAdmitdate(), serviceTask.getSendDay().intValue()); serviceSubtask.setLongSendTime(newDate); //患者发送时间 if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1")) { String remark = patArchive.getNotrequiredreason(); serviceSubtask.setRemark(remark); serviceSubtask.setResult("error"); serviceSubtask.setFinishtime(new Date()); //不执行 serviceSubtask.setSendstate(4L); } return serviceSubtask; } private Date addDays(Date date, Integer days) { if (days == null) { days = 1; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, days); return calendar.getTime(); } }