| | |
| | | package com.smartor.service.impl; |
| | | |
| | | import java.util.List; |
| | | 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.mapper.PatMedOperationMapper; |
| | | import com.smartor.domain.PatMedOperation; |
| | | import com.smartor.service.IPatMedOperationService; |
| | | |
| | | /** |
| | | * 患者手术记录Service业务层处理 |
| | | * |
| | | * |
| | | * @author lihu |
| | | * @date 2024-08-05 |
| | | * @date 2025-02-21 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | public class PatMedOperationServiceImpl implements IPatMedOperationService |
| | | { |
| | | 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) |
| | | { |
| | | public PatMedOperation selectPatMedOperationById(Long id) { |
| | | return patMedOperationMapper.selectPatMedOperationById(id); |
| | | } |
| | | |
| | | /** |
| | | * 查询患者手术记录列表 |
| | | * |
| | | * |
| | | * @param patMedOperation 患者手术记录 |
| | | * @return 患者手术记录 |
| | | */ |
| | | @Override |
| | | public List<PatMedOperation> selectPatMedOperationList(PatMedOperation patMedOperation) |
| | | { |
| | | public List<PatMedOperation> selectPatMedOperationList(PatMedOperation patMedOperation) { |
| | | return patMedOperationMapper.selectPatMedOperationList(patMedOperation); |
| | | } |
| | | |
| | | /** |
| | | * 新增患者手术记录 |
| | | * |
| | | * |
| | | * @param patMedOperation 患者手术记录 |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int insertPatMedOperation(PatMedOperation patMedOperation) |
| | | { |
| | | public int insertPatMedOperation(PatMedOperation patMedOperation) { |
| | | patMedOperation.setCreateTime(DateUtils.getNowDate()); |
| | | return patMedOperationMapper.insertPatMedOperation(patMedOperation); |
| | | } |
| | | |
| | | /** |
| | | * 修改患者手术记录 |
| | | * |
| | | * |
| | | * @param patMedOperation 患者手术记录 |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int updatePatMedOperation(PatMedOperation patMedOperation) |
| | | { |
| | | public int updatePatMedOperation(PatMedOperation patMedOperation) { |
| | | patMedOperation.setUpdateTime(DateUtils.getNowDate()); |
| | | return patMedOperationMapper.updatePatMedOperation(patMedOperation); |
| | | } |
| | | |
| | | /** |
| | | * 批量删除患者手术记录 |
| | | * |
| | | * |
| | | * @param ids 需要删除的患者手术记录主键 |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int deletePatMedOperationByIds(Long[] ids) |
| | | { |
| | | public int deletePatMedOperationByIds(Long[] ids) { |
| | | return patMedOperationMapper.deletePatMedOperationByIds(ids); |
| | | } |
| | | |
| | | /** |
| | | * 删除患者手术记录信息 |
| | | * |
| | | * |
| | | * @param id 患者手术记录主键 |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int deletePatMedOperationById(Long id) |
| | | { |
| | | public int deletePatMedOperationById(Long id) { |
| | | return patMedOperationMapper.deletePatMedOperationById(id); |
| | | } |
| | | |
| | | @Override |
| | | public int dealOperationInfo() { |
| | | PatMedOperation patMedOperation = new PatMedOperation(); |
| | | //获取需要出院随访,未处理的数据 |
| | | patMedOperation.setCheckFlag("0"); |
| | | List<PatMedOperation> 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<ServiceTaskoper> 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<Long> 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<ServiceTask> 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()); |
| | | //不执行 |
| | | 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(); |
| | | } |
| | | } |