陈昶聿
9 天以前 c4611dc646f85572e76c5949d233e0716b92573e
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -49,6 +49,11 @@
@Slf4j
@Service
public class ServiceExternalServiceImpl implements IServiceExternalService {
    /**
     * 龙泉人民医院机构ID
     */
    private static final String LONGQUAN_PEOPLE_HOSPITAL_ORG_ID = "47240004533118111A1001";
    @Autowired
    private SysDept2Mapper sysDeptMapper;
    @Autowired
@@ -1818,11 +1823,68 @@
        } else {
            patMedInhosp.setCreateTime(new Date());
            i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp);
            if (i == 1) {
                //龙泉人民医院:新增住院信息时处理患者再入院
                stopReadmissionFollowUpTasks(patMedInhosp);
            }
        }
        if (i == 1) return true;
        return false;
    }
    /**
     * 患者再入院处理:患者再次入院后,上一次出院生成的待执行长期随访任务不再执行。
     * 目前仅对龙泉人民医院生效,避免影响其他机构。
     *
     * @param patMedInhosp 本次新增的住院信息
     */
    private void stopReadmissionFollowUpTasks(PatMedInhosp patMedInhosp) {
        if (!LONGQUAN_PEOPLE_HOSPITAL_ORG_ID.equals(patMedInhosp.getOrgid())) {
            return;
        }
        if (Objects.isNull(patMedInhosp.getPatid()) || Objects.isNull(patMedInhosp.getStarttime())) {
            log.warn("龙泉人民医院患者再入院处理跳过,patid或入院时间为空,inhospno={}", patMedInhosp.getInhospno());
            return;
        }
        try {
            ServiceSubtaskEntity subtask = new ServiceSubtaskEntity();
            subtask.setPatid(patMedInhosp.getPatid());
            subtask.setOrgid(LONGQUAN_PEOPLE_HOSPITAL_ORG_ID);
            subtask.setSendstate(2L);
            List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask);
            if (CollectionUtils.isEmpty(serviceSubtaskList)) {
                return;
            }
            int stopCount = 0;
            for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
                //不是长期任务,不处理
                if (Objects.isNull(serviceSubtask.getLongSendTime())) {
                    continue;
                }
                //出院时间晚于或等于本次入院时间的任务,不属于本次入院前的待随访任务
                if (Objects.isNull(serviceSubtask.getEndtime())
                        || !serviceSubtask.getEndtime().before(patMedInhosp.getStarttime())) {
                    continue;
                }
                serviceSubtask.setSendstate(4L);
                serviceSubtask.setIsVisitAgain(2);
                serviceSubtask.setResult("error");
                serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark())
                        ? serviceSubtask.getRemark() + ";患者再入院" : "患者再入院");
                serviceSubtask.setUpdateTime(new Date());
                if (Boolean.TRUE.equals(serviceSubtaskMapper.updateServiceSubtask(serviceSubtask))) {
                    stopCount++;
                }
            }
            log.info("龙泉人民医院患者再入院处理完成,patid={},本次入院时间={},停止待执行长期任务{}条",
                    patMedInhosp.getPatid(), patMedInhosp.getStarttime(), stopCount);
        } catch (Exception e) {
            //再入院任务处理失败不影响本次住院信息入库
            log.error("龙泉人民医院患者再入院处理异常,patid={},inhospno={}",
                    patMedInhosp.getPatid(), patMedInhosp.getInhospno(), e);
        }
    }
    //新增随访任务同步
    @Override
    public Boolean addTaskInfo(Map dataMap) {