liusheng
5 天以前 295b3af633ee3f70a4bdab1e6c7d444f4038e832
smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -457,11 +457,21 @@
    }
    private void processResultList(List<ServiceSLTDInhospResDTO> resultList, List<String> types, String cry, String campusId) {
        for (String type : types)
        // 门诊(FH0108.01)和急诊(FH0108.03)在业务上是同一类数据,共用同一个 resultList。
        // 若 types 同时包含两者,outHospitalDate 会被调用两次导致重复入库。
        // 因此只要 types 中含有任意一个门急诊类型,就只处理一次。
        boolean outpProcessed = false;
        for (String type : types) {
            switch (type) {
                case "FH0108.01":
                    log.info("【parseResponseData】解析门诊数据");
                case "FH0108.03":
                    if (!outpProcessed) {
                        log.info("【parseResponseData】解析门急诊数据,types={}", types);
                    outHospitalDate(resultList);
                        outpProcessed = true;
                    } else {
                        log.info("【parseResponseData】门急诊数据已处理,跳过 type={}", type);
                    }
                    break;
                case "FH0109.26":
                    log.info("【parseResponseData】解析住院数据");
@@ -483,13 +493,10 @@
                    log.info("【parseResponseData】解析预住院(其他)数据");
                    inHospitalDate(resultList, cry);
                    break;
//                case "FH0108.03":
//                    log.info("【parseResponseData】解析急诊数据");
//                    outHospitalDate(resultList);
//                    break;
                default:
                    log.warn("【parseResponseData】未知的数据类型:{}", type);
                    break;
            }
            }
    }
@@ -608,36 +615,37 @@
        } else if (cry.equals("1")) {
//           出院数据处理
            if (CollectionUtils.isEmpty(existingInhosps)) {
                //如果为空,要先判断,预入院是否有值,有值的话则更新
                queryInhosp.setInhospstate("3");
                log.info("-----patMedInhospList进来了不?入参为:{}", queryInhosp);
                List<PatMedInhosp> patMedInhospList = patMedInhospService.selectPatMedInhosp(queryInhosp);
                log.info("----patMedInhospList进来了不?返参为:{}", CollectionUtils.isEmpty(patMedInhospList) ? null : patMedInhospList.get(0).getSerialnum());
                if (CollectionUtils.isNotEmpty(patMedInhospList)) {
                    //如果预入院不为空,则进行修改
            if (CollectionUtils.isNotEmpty(existingInhosps)) {
                // 已存在出院记录,直接更新(保持最新数据)
                patMedInhosp.setInhospid(existingInhosps.get(0).getInhospid());
                    patMedInhospService.updatePatMedInhosp(patMedInhosp);
                log.info("出院记录已存在,执行更新:serialnum={}, orgid={}", patMedInhosp.getSerialnum(), patMedInhosp.getOrgid());
                } else {
                    //如果入院不为空,则进行修改
                // 不存在出院记录,先查预入院(state=3),再查入院(state=0)
                queryInhosp.setInhospstate("3");
                log.info("-----查询预入院记录,入参为:{}", queryInhosp);
                List<PatMedInhosp> patMedInhospList = patMedInhospService.selectPatMedInhosp(queryInhosp);
                log.info("----预入院查询结果:{}", CollectionUtils.isEmpty(patMedInhospList) ? "空" : patMedInhospList.get(0).getSerialnum());
                if (CollectionUtils.isNotEmpty(patMedInhospList)) {
                    // 存在预入院记录,更新为出院状态
                    patMedInhosp.setInhospid(patMedInhospList.get(0).getInhospid());
                    patMedInhospService.updatePatMedInhosp(patMedInhosp);
                    log.info("由预入院更新为出院:serialnum={}", patMedInhosp.getSerialnum());
                } else {
                    // 再查入院记录(state=0)
                    queryInhosp.setInhospstate("0");
                    patMedInhospList = patMedInhospService.selectPatMedInhosp(queryInhosp);
                    log.debug("入院查询结果:{}", CollectionUtils.isEmpty(patMedInhospList) ? "空" : patMedInhospList.size());
                    if (CollectionUtils.isNotEmpty(patMedInhospList)) {
                        // 存在入院记录,更新为出院状态
                        patMedInhosp.setInhospid(patMedInhospList.get(0).getInhospid());
                        patMedInhospService.updatePatMedInhosp(patMedInhosp);
                    }
                }
                //如果都为空,则进行新增
                if (CollectionUtils.isEmpty(patMedInhospList)) {
                    //如果入院不为空,则进行修改
                    queryInhosp.setInhospstate("0");
                    log.debug("出院queryInhosp入参为:{}", queryInhosp);
                    List<PatMedInhosp> patMedInhosps = patMedInhospService.selectPatMedInhosp(queryInhosp);
                    log.debug("出院patMedInhospList返参为:{}", CollectionUtils.isEmpty(patMedInhosps) ? null : patMedInhosps.size());
                    if (CollectionUtils.isNotEmpty(patMedInhosps)) {
                        patMedInhospService.updatePatMedInhosp(patMedInhosp);
                        log.info("由入院更新为出院:serialnum={}", patMedInhosp.getSerialnum());
                    } else {
                        // 预入院和入院均不存在,直接新增出院记录
                        try {
                            patMedInhospService.insertPatMedInhosp(patMedInhosp);
                            log.info("新增出院记录:serialnum={}", patMedInhosp.getSerialnum());
                        } catch (org.springframework.dao.DuplicateKeyException e) {
                            log.warn("出院记录已存在,跳过:serialnum={}, orgid={}, state={}", patMedInhosp.getSerialnum(), patMedInhosp.getOrgid(), patMedInhosp.getInhospstate());
                        }