陈昶聿
3 天以前 57eac5a31c6823962b8e77ec8a9604e41882fb32
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -1,6 +1,9 @@
package com.smartor.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ruoyi.common.core.domain.entity.SysDept;
@@ -11,9 +14,12 @@
import com.ruoyi.common.utils.DtoConversionUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.system.service.ISysConfigService;
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.IServiceExternalService;
import lombok.extern.slf4j.Slf4j;
@@ -70,6 +76,12 @@
    private Icd10Mapper icd10Mapper;
    @Autowired
    private IPatMedOuthospService patMedOuthospService;
    @Autowired
    private ISysConfigService configService;
    @Autowired
    private IPatMaternityArchiveService patMaternityArchiveService;
    @Autowired
    private IPatChildArchiveService patChildArchiveService;
    @Autowired
    private PatMedOuthospMapper patMedOuthospMapper;
    @Autowired
@@ -647,6 +659,21 @@
            }).collect(Collectors.toList());
            patMedInhosp1.setLeaveicd10code(hospPatientDiagnoseInfos2.get(0).getIcd10());
            patMedInhosp1.setLeavediagname(hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
            //只有诊断名称没有诊断码的数据
            if(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname())
                    && !StringUtils.isNotEmpty(patMedInhosp1.getLeaveicd10code())){
                Icd10 icd10 = new Icd10();
                icd10.setIcdname(patMedInhosp1.getLeavediagname());
                icd10.setDelFlag("0");
                icd10.setOrgid(ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
                //丽水无院区,默认值是 1
                icd10.setCampusid("1");
                //通过icdCode查询一下,是否存在
                List<Icd10> icd10s = icd10Mapper.exactQueryIcd10List(icd10);
                if(CollectionUtils.isEmpty(icd10s)){
                    patMedInhosp1.setLeaveicd10code(icd10s.get(0).getIcdcode());
                }
            }
            //patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() + "," + hospPatientDiagnoseInfos2.get(0).getZhenDuanMC() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
            patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
        }
@@ -812,6 +839,21 @@
            }).collect(Collectors.toList());
            patMedInhosp1.setLeaveicd10code(hospPatientDiagnoseInfos2.get(0).getIcd10());
            patMedInhosp1.setLeavediagname(hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
            //只有诊断名称没有诊断码的数据
            if(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname())
                    && !StringUtils.isNotEmpty(patMedInhosp1.getLeaveicd10code())){
                Icd10 icd10 = new Icd10();
                icd10.setIcdname(patMedInhosp1.getLeavediagname());
                icd10.setDelFlag("0");
                icd10.setOrgid(ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
                //丽水无院区,默认值是 1
                icd10.setCampusid("1");
                //通过icdCode查询一下,是否存在
                List<Icd10> icd10s = icd10Mapper.exactQueryIcd10List(icd10);
                if(CollectionUtils.isEmpty(icd10s)){
                    patMedInhosp1.setLeaveicd10code(icd10s.get(0).getIcdcode());
                }
            }
            //patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() + "," + hospPatientDiagnoseInfos2.get(0).getZhenDuanMC() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
            patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
        }
@@ -1031,6 +1073,21 @@
            }).collect(Collectors.toList());
            patMedInhosp1.setLeaveicd10code(hospPatientDiagnoseInfos2.get(0).getIcd10());
            patMedInhosp1.setLeavediagname(hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
            //只有诊断名称没有诊断码的数据
            if(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname())
                    && !StringUtils.isNotEmpty(patMedInhosp1.getLeaveicd10code())){
                Icd10 icd10 = new Icd10();
                icd10.setIcdname(patMedInhosp1.getLeavediagname());
                icd10.setDelFlag("0");
                icd10.setOrgid(ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
                //丽水无院区,默认值是 1
                icd10.setCampusid("1");
                //通过icdCode查询一下,是否存在
                List<Icd10> icd10s = icd10Mapper.exactQueryIcd10List(icd10);
                if(CollectionUtils.isEmpty(icd10s)){
                    patMedInhosp1.setLeaveicd10code(icd10s.get(0).getIcdcode());
                }
            }
            //patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() + "," + hospPatientDiagnoseInfos2.get(0).getZhenDuanMC() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
            patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
        }
@@ -1266,6 +1323,8 @@
            }
            patMedOuthospService.dealPatMedOuthosp(patMedOuthosp, visitTimeNum);
        }
        genePatSpecificArchive(patMedOuthosp, patArchive);
        if (i > 0) {
            return true;
@@ -1797,6 +1856,7 @@
        Map yeWuXX = (Map) dataMap.get("YeWuXX");
        Map<String, Object> BingRenXX = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("BingRenXX") : null;
        Map<String, Object> JianChaSQ = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("JianChaSQ") : null;
        Map<String, Object> JianChaBG = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("JianChaBG") : null;
        List<HashMap<String, Object>> JianChaBWList = ObjectUtils.isNotEmpty(JianChaSQ) ? (List<HashMap<String, Object>>) JianChaSQ.get("JianChaBWList") : null;
        List<HashMap<String, Object>> ZhenDuanList = ObjectUtils.isNotEmpty(JianChaSQ) ? (List<HashMap<String, Object>>) JianChaSQ.get("ZhenDuanList") : null;
        List<HashMap<String, Object>> epai = ObjectUtils.isNotEmpty(BingRenXX) ? (List<HashMap<String, Object>>) BingRenXX.get("DiZhiXXList") : null;
@@ -1890,6 +1950,9 @@
                    e.printStackTrace();
                }
            }
        }
        if (ObjectUtils.isNotEmpty(JianChaBG)) {
            patMedInspection.setAppliyid(ObjectUtils.isNotEmpty(JianChaBG.get("ShenQingDID")) ? JianChaBG.get("ShenQingDID").toString() : null);
        }
        if (CollectionUtils.isNotEmpty(JianChaBWList)) {
            List<ExternalInspectionJC> externalInspectionJC = JianChaBWList.stream().map(map -> {
@@ -2278,4 +2341,100 @@
        }
        return 1;
    }
    //新增患者专科档案基本信息
    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 {
            // 未命中配置,不生成档案
        }
    }
    /**
     * 判断当前科室属于妇科还是儿科
     *
     * @param deptCode 当前科室/病区 Code,如 "D004"
     * @param orgid    医院机构ID
     * @return deptCategory:1-妇科 2-儿科;null-未配置或未命中
     */
    public String judgeDeptCategory(String deptCode, String orgid) {
        if (StringUtils.isEmpty(deptCode)) {
            return null;
        }
        // 优先取机构级配置,取不到再取全局配置
        String configValue = configService.selectConfigByKey("sys.dept.category",
                orgid);
        if (StringUtils.isEmpty(configValue)) {
            configValue = configService.selectConfigByKey("sys.dept.category");
        }
        if (StringUtils.isEmpty(configValue)) {
            return null;
        }
        JSONArray configs = JSON.parseArray(configValue);
        if (configs == null || configs.isEmpty()) {
            return null;
        }
        for (int i = 0; i < configs.size(); i++) {
            JSONObject cfg = configs.getJSONObject(i);
            JSONArray deptCodes = cfg.getJSONArray("deptCodes");
            if (deptCodes != null && deptCodes.contains(deptCode)) {
                return cfg.getString("deptCategory");
            }
        }
        return null;
    }
}