陈昶聿
10 天以前 2977d912b75123339657e78f9ed0a1c712d4b7b6
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -18,9 +18,8 @@
import com.smartor.domain.*;
import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.smartor.service.IPatChildArchiveService;
import com.smartor.service.IPatMaternityArchiveService;
import com.smartor.service.IPatMedOuthospService;
import com.smartor.service.IPatSpecificArchiveGenerateService;
import com.smartor.service.IServiceExternalService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -50,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
@@ -79,9 +83,7 @@
    @Autowired
    private ISysConfigService configService;
    @Autowired
    private IPatMaternityArchiveService patMaternityArchiveService;
    @Autowired
    private IPatChildArchiveService patChildArchiveService;
    private IPatSpecificArchiveGenerateService patSpecificArchiveGenerateService;
    @Autowired
    private PatMedOuthospMapper patMedOuthospMapper;
    @Autowired
@@ -1821,9 +1823,66 @@
        } 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);
        }
    }
    //新增随访任务同步
@@ -2459,61 +2518,20 @@
        return 1;
    }
    //新增患者专科档案基本信息
    /**
     * 完成接诊时按专科档案生成配置生成妇科/儿科档案。
     *
     * <p>生成逻辑内部只对指定机构生效,未命中配置或生成失败均不影响接诊主流程。</p>
     */
    private void genePatSpecificArchive(PatMedOuthosp patMedOuthosp, PatArchive patArchive) {
        String deptCategory = judgeDeptCategory(patMedOuthosp.getDeptcode(), patMedOuthosp.getOrgid());
        boolean isGynecology = "1".equals(deptCategory);  // 是否妇科
        boolean isPediatrics = "2".equals(deptCategory);  // 是否儿科
        if (isGynecology) {
            // 走妇科档案生成逻辑
            PatMaternityArchiveDetail patMaternityArchiveDetail
                    = DtoConversionUtils.sourceToTarget(patMedOuthosp, PatMaternityArchiveDetail.class);
            patMaternityArchiveDetail.setSourceType("1");
            patMaternityArchiveDetail.setPhone(patArchive.getTelcode());
            patMaternityArchiveDetail.setPatid(patArchive.getId());
            patMaternityArchiveDetail.setPatname(patArchive.getName());
            patMaternityArchiveDetail.setBirthdate(patArchive.getBirthdate());
            patMaternityArchiveDetail.setSex(patArchive.getSex());
            patMaternityArchiveDetail.setAddress(patArchive.getPlaceOfResidence());
            patMaternityArchiveDetail.setOuthospno(patMedOuthosp.getOuthospno());
            patMaternityArchiveDetail.setSerialnum(patMedOuthosp.getSerialnum());
            patMaternityArchiveDetail.setIcd10code(patMedOuthosp.getIcd10code());
            patMaternityArchiveDetail.setDeptcode(patMedOuthosp.getDeptcode());
            patMaternityArchiveDetail.setDeptname(patMedOuthosp.getDeptname());
            patMaternityArchiveDetail.setDoctorName(patMedOuthosp.getDrname());
            patMaternityArchiveDetail.setDoctorCode(patMedOuthosp.getDrcode());
            patMaternityArchiveDetail.setManagementDoctorName(patMedOuthosp.getDrname());
            patMaternityArchiveDetail.setManagementDoctorCode(patMedOuthosp.getDrcode());
            patMaternityArchiveDetail.setOrgid(patMedOuthosp.getOrgid());
            patMaternityArchiveDetail.setCampusid(patMedOuthosp.getCampusid());
            patMaternityArchiveService.insertOrUpdateMaternityArchive(patMaternityArchiveDetail);
        } else if (isPediatrics) {
            // 走儿科档案生成逻辑
            PatChildArchiveDetail patChildArchiveDetail
                    = DtoConversionUtils.sourceToTarget(patMedOuthosp, PatChildArchiveDetail.class);
            patChildArchiveDetail.setSourceType("1");
            patChildArchiveDetail.setPhone(patArchive.getTelcode());
            patChildArchiveDetail.setPatid(patArchive.getId());
            patChildArchiveDetail.setPatname(patArchive.getName());
            patChildArchiveDetail.setBirthdate(patArchive.getBirthdate());
            patChildArchiveDetail.setSex(patArchive.getSex());
//            patChildArchiveDetail.setAddress(patArchive.getPlaceOfResidence());
            patChildArchiveDetail.setOuthospno(patMedOuthosp.getOuthospno());
            patChildArchiveDetail.setSerialnum(patMedOuthosp.getSerialnum());
            patChildArchiveDetail.setIcd10code(patMedOuthosp.getIcd10code());
            patChildArchiveDetail.setDeptcode(patMedOuthosp.getDeptcode());
            patChildArchiveDetail.setDeptname(patMedOuthosp.getDeptname());
            patChildArchiveDetail.setDoctorName(patMedOuthosp.getDrname());
            patChildArchiveDetail.setDoctorCode(patMedOuthosp.getDrcode());
            patChildArchiveDetail.setManagementDoctorName(patMedOuthosp.getDrname());
            patChildArchiveDetail.setManagementDoctorCode(patMedOuthosp.getDrcode());
            patChildArchiveDetail.setOrgid(patMedOuthosp.getOrgid());
            patChildArchiveDetail.setCampusid(patMedOuthosp.getCampusid());
            patChildArchiveService.insertOrUpdateChildArchive(patChildArchiveDetail);
        } else {
            // 未命中配置,不生成档案
        try {
            int generated = patSpecificArchiveGenerateService.generateByOuthosp(patMedOuthosp, patArchive);
            if (generated > 0) {
                log.info("完成接诊自动生成专科档案成功,outhospno={},生成数量={}",
                        patMedOuthosp.getOuthospno(), generated);
            }
        } catch (Exception e) {
            log.error("完成接诊自动生成专科档案失败,outhospno={}", patMedOuthosp.getOuthospno(), e);
        }
    }