package com.smartor.service.impl; import java.util.*; import java.util.stream.Collectors; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DtoConversionUtils; import com.ruoyi.common.utils.StringUtils; import com.smartor.domain.*; import com.smartor.mapper.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.smartor.service.IPatMedOperationService; /** * 患者手术记录Service业务层处理 * * @author lihu * @date 2025-02-21 */ @Slf4j @Service public class PatMedOperationServiceImpl implements IPatMedOperationService { @Autowired private PatMedOperationMapper patMedOperationMapper; @Autowired private PatArchiveMapper patArchiveMapper; @Autowired private ServiceTaskoperMapper serviceTaskoperMapper; @Autowired private ServiceTaskMapper serviceTaskMapper; @Autowired private ServiceSubtaskMapper serviceSubtaskMapper; /** * 查询患者手术记录 * * @param id 患者手术记录主键 * @return 患者手术记录 */ @Override public PatMedOperation selectPatMedOperationById(Long id) { return patMedOperationMapper.selectPatMedOperationById(id); } /** * 查询患者手术记录列表 * * @param patMedOperation 患者手术记录 * @return 患者手术记录 */ @Override public List selectPatMedOperationList(PatMedOperation patMedOperation) { return patMedOperationMapper.selectPatMedOperationList(patMedOperation); } /** * 新增患者手术记录 * * @param patMedOperation 患者手术记录 * @return 结果 */ @Override public int insertPatMedOperation(PatMedOperation patMedOperation) { patMedOperation.setCreateTime(DateUtils.getNowDate()); return patMedOperationMapper.insertPatMedOperation(patMedOperation); } /** * 修改患者手术记录 * * @param patMedOperation 患者手术记录 * @return 结果 */ @Override public int updatePatMedOperation(PatMedOperation patMedOperation) { patMedOperation.setUpdateTime(DateUtils.getNowDate()); return patMedOperationMapper.updatePatMedOperation(patMedOperation); } /** * 批量删除患者手术记录 * * @param ids 需要删除的患者手术记录主键 * @return 结果 */ @Override public int deletePatMedOperationByIds(Long[] ids) { return patMedOperationMapper.deletePatMedOperationByIds(ids); } /** * 删除患者手术记录信息 * * @param id 患者手术记录主键 * @return 结果 */ @Override public int deletePatMedOperationById(Long id) { return patMedOperationMapper.deletePatMedOperationById(id); } @Override public int dealOperationInfo() { PatMedOperation patMedOperation = new PatMedOperation(); //获取需要出院随访,未处理的数据 patMedOperation.setCheckFlag("0"); List patMedOperations = patMedOperationMapper.selectPatMedOperationList(patMedOperation); log.error("dealOperationInfo需要处理的手术信息:{}", patMedOperations); for (PatMedOperation patMedOperation1 : patMedOperations) { //获取患者信息 PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOperation1.getPatid()); try { //根据患者所在科室,获取该手术编码对应的长期任务 ServiceTaskoper serviceTaskoper = new ServiceTaskoper(); serviceTaskoper.setLongtask(1L); serviceTaskoper.setOpcode(patMedOperation1.getOpcode()); List serviceTaskopers = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper); //如果部门模板为空(暂定,将出入院表的check_flag设置为2 ,long_task_reason 记录原因) if (CollectionUtils.isEmpty(serviceTaskopers) || serviceTaskopers.size() == 0) { patMedOperation1.setCheckFlag("2"); patMedOperation1.setLongTaskReason("该手术编码,未配置长期任务;"); patMedOperationMapper.updatePatMedOperation(patMedOperation1); continue; } else if (serviceTaskopers.size() > 1) { //如果查询出多个任务,那就取第一个,并在患者备注一下 List taskIds = serviceTaskopers.stream().map(ServiceTaskoper::getTaskId).collect(Collectors.toList()); patMedOperation1.setLongTaskReason("该手术编码,有多个随访长期任务:" + taskIds); patMedOperationMapper.updatePatMedOperation(patMedOperation1); ServiceTaskoper serviceTaskoper1 = serviceTaskopers.get(0); serviceTaskopers = new ArrayList<>(); serviceTaskopers.add(serviceTaskoper1); } writeInSubTask(serviceTaskopers.get(0).getTaskId(), true, patMedOperation1, patArchive); } catch (Exception e) { e.printStackTrace(); log.error("人员处理出异常了:{}", e.getMessage()); } } return 1; } //将患者放到subtask中 private void writeInSubTask(Long taskid, Boolean check, PatMedOperation patMedOperation1, PatArchive patArchive) { String longTaskReason = patMedOperation1.getLongTaskReason(); if (StringUtils.isEmpty(longTaskReason)) longTaskReason = ""; // Long taskid = std.getTaskId(); ServiceTask st = new ServiceTask(); st.setTaskid(taskid); st.setSendState(2L); List serviceTasks = serviceTaskMapper.selectServiceTaskList(st); if (CollectionUtils.isEmpty(serviceTasks)) { log.error("该手术编码长期任务不存在,任务ID为:{}", taskid); patMedOperation1.setCheckFlag("2"); patMedOperation1.setLongTaskReason(longTaskReason + " & 该手术编码长期任务不存在,任务ID为:" + taskid); patMedOperationMapper.updatePatMedOperation(patMedOperation1); return; } ServiceTask serviceTask = serviceTasks.get(0); //封装serviceSubtask ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, patMedOperation1, patArchive); int i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); if (i == 1) { //将check_flag改成1(已处理) PatMedOperation patMedOperation = new PatMedOperation(); patMedOperation.setId(patMedOperation1.getId()); patMedOperation.setCheckFlag("1"); patMedOperationMapper.updatePatMedOperation(patMedOperation); } else { //生成子任务失败, log.error("生成子任务失败serviceSubtask为:{}", serviceSubtask); PatMedOperation patMedOperation = new PatMedOperation(); patMedOperation.setId(patMedOperation1.getId()); patMedOperation.setRemark("生成子任务失败"); patMedOperationMapper.updatePatMedOperation(patMedOperation); } } //封装serviceSubtask private ServiceSubtask boxedServiceSubtask(ServiceTask serviceTask, PatMedOperation patMedOperation1, 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.setNurseId(patMedOperation1.getNurseId()); serviceSubtask.setNurseName(patMedOperation1.getNurseName()); // serviceSubtask.setInhospid(patMedOperation1.getInhospid()); serviceSubtask.setDrcode(patMedOperation1.getDrcode()); serviceSubtask.setDrname(patMedOperation1.getDrname()); serviceSubtask.setDeptcode(patMedOperation1.getDeptcode()); serviceSubtask.setDeptname(patMedOperation1.getDeptname()); serviceSubtask.setTemplateid(serviceTask.getTemplateid()); serviceSubtask.setTemplatename(serviceTask.getTemplatename()); serviceSubtask.setPatid(patArchive.getId()); serviceSubtask.setSendname(patArchive.getName()); 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.setStarttime(patMedOperation1.getOpreqtime()); serviceSubtask.setEndtime(patMedOperation1.getOpreqtime()); serviceSubtask.setServiceType("2"); serviceSubtask.setPreachform(serviceTask.getPreachform()); serviceSubtask.setHospType("2"); serviceSubtask.setCreateTime(new Date()); serviceSubtask.setUpdateTime(new Date()); // serviceSubtask.setCreateBy(patMedInhosp1.getNurseName()); // serviceSubtask.setLeavehospitaldistrictcode(patMedInhosp1.getLeavehospitaldistrictcode()); // serviceSubtask.setLeavehospitaldistrictname(patMedInhosp1.getLeavehospitaldistrictname()); //设置发送时间 if (serviceTask.getSendDay() == null) serviceTask.setSendDay(1L); Date newDate = addDays(patMedOperation1.getOpreqtime(), 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()); log.error("serviceSubtask888888的值为:{}",serviceSubtask); //不执行 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(); } }