陈昶聿
2026-10-13 60b7a9849e957872203ef78b99e7a0ee8e533e94
【丽水】专科档案生成配置
已修改7个文件
227 ■■■■■ 文件已修改
smartor/src/main/java/com/smartor/service/impl/PatChildArchiveServiceImpl.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMaternityArchiveServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatChildArchiveDetailMapper.xml 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatChildArchiveMapper.xml 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatMaternityArchiveDetailMapper.xml 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatMaternityArchiveMapper.xml 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatChildArchiveServiceImpl.java
@@ -88,14 +88,50 @@
            log.error("insertOrUpdateChildArchive入参为空,请检查入参");
            throw new BaseException("儿科档案入参为空,请检查入参");
        }
        if (StringUtils.isEmpty(patChildArchiveDetail.getOuthospno())) {
            throw new BaseException("儿科档案入参门诊编号outhospno为空,请检查入参门诊编号");
        }
        if (StringUtils.isEmpty(patChildArchiveDetail.getArchiveType())) {
            throw new BaseException("儿科档案入参档案类型archiveType为空,请检查入参档案类型");
        }
        // 只传了详情id时,反查出对应的档案主键id,保证后续能正确更新主表
        if (patChildArchiveDetail.getId() != null && patChildArchiveDetail.getArchiveid() == null) {
            PatChildArchiveDetail existDetail = patChildArchiveDetailService.selectPatChildArchiveDetailById(patChildArchiveDetail.getId());
            if (existDetail != null) {
                patChildArchiveDetail.setArchiveid(existDetail.getArchiveid());
        // 按业务键查详情
        PatChildArchiveDetail key = new PatChildArchiveDetail();
        key.setOrgid(patChildArchiveDetail.getOrgid());
        key.setPatid(patChildArchiveDetail.getPatid());
        key.setOuthospno(patChildArchiveDetail.getOuthospno());
        key.setArchiveType(patChildArchiveDetail.getArchiveType());
        List<PatChildArchiveDetail> olds =
                patChildArchiveDetailService.selectPatChildArchiveDetailList(key);
        Long existArchiveId = null;
        Long existDetailId = null;
        if (CollectionUtils.isNotEmpty(olds)) {
            existArchiveId = olds.get(0).getArchiveid();
            existDetailId = olds.get(0).getId();
        }
        // 详情没查到,再兜底按同样键查主表,避免主表重复
        if (existArchiveId == null) {
            PatChildArchive mainKey = new PatChildArchive();
            mainKey.setOrgid(patChildArchiveDetail.getOrgid());
            mainKey.setPatid(patChildArchiveDetail.getPatid());
            mainKey.setOuthospno(patChildArchiveDetail.getOuthospno());
            mainKey.setArchiveType(patChildArchiveDetail.getArchiveType());
            List<PatChildArchive> mainOlds =
                    patChildArchiveMapper.selectPatChildArchiveList(mainKey);
            if (CollectionUtils.isNotEmpty(mainOlds)) {
                existArchiveId = mainOlds.get(0).getId();
            }
        }
        patChildArchiveDetail.setArchiveid(existArchiveId);
        // 后面更新详情时,优先用业务键匹配到的 detail id
        Long detailId = patChildArchiveDetail.getId();
        if (detailId == null) {
            detailId = existDetailId;
        }
        // 将详情中的公共字段复制到主表对象
        PatChildArchive patChildArchive = DtoConversionUtils.sourceToTarget(patChildArchiveDetail, PatChildArchive.class);
@@ -121,7 +157,7 @@
        // 回填主表id到详情,同步生成/更新详情表
        patChildArchiveDetail.setArchiveid(patChildArchive.getId());
        Long detailId = patChildArchiveDetail.getId();
//      Long detailId = patChildArchiveDetail.getId();
        if (detailId == null && patChildArchiveDetail.getArchiveid() != null) {
            PatChildArchiveDetail query = new PatChildArchiveDetail();
            query.setArchiveid(patChildArchiveDetail.getArchiveid());
smartor/src/main/java/com/smartor/service/impl/PatMaternityArchiveServiceImpl.java
@@ -4,8 +4,11 @@
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DtoConversionUtils;
import com.ruoyi.common.utils.StringUtils;
import com.smartor.domain.PatChildArchive;
import com.smartor.domain.PatChildArchiveDetail;
import com.smartor.domain.PatMaternityArchive;
import com.smartor.domain.PatMaternityArchiveDetail;
import com.smartor.mapper.PatMaternityArchiveDetailMapper;
import com.smartor.mapper.PatMaternityArchiveMapper;
import com.smartor.service.IPatMaternityArchiveDetailService;
import com.smartor.service.IPatMaternityArchiveService;
@@ -32,6 +35,8 @@
    @Autowired
    private IPatMaternityArchiveDetailService patMaternityArchiveDetailService;
    @Autowired
    private PatMaternityArchiveDetailMapper patMaternityArchiveDetailMapper;
    @Override
    public PatMaternityArchive selectPatMaternityArchiveById(Long id)
@@ -89,9 +94,63 @@
            throw new BaseException("妇科档案入参为空,请检查入参");
        }
        //保证同一就诊记录同一档案类型只能生成一条
        PatMaternityArchiveDetail patMaternityArchiveDetailVo = new PatMaternityArchiveDetail();
        patMaternityArchiveDetailVo.setOrgid(patMaternityArchiveDetail.getOrgid());
        patMaternityArchiveDetailVo.setPatid(patMaternityArchiveDetail.getPatid());
        patMaternityArchiveDetailVo.setOuthospno(patMaternityArchiveDetail.getOuthospno());
        patMaternityArchiveDetailVo.setArchiveType(patMaternityArchiveDetail.getArchiveType());
        List<PatMaternityArchiveDetail> patMaternityArchiveDetailOlds
                = patMaternityArchiveDetailService.selectPatMaternityArchiveDetailList(patMaternityArchiveDetailVo);
        if (StringUtils.isEmpty(patMaternityArchiveDetail.getOuthospno())) {
            throw new BaseException("妇科档案入参门诊编号outhospno为空,请检查入参门诊编号");
        }
        if (StringUtils.isEmpty(patMaternityArchiveDetail.getArchiveType())) {
            throw new BaseException("妇科档案入参档案类型archiveType为空,请检查入参档案类型");
        }
        // 按业务键查详情
        PatMaternityArchiveDetail key = new PatMaternityArchiveDetail();
        key.setOrgid(patMaternityArchiveDetail.getOrgid());
        key.setPatid(patMaternityArchiveDetail.getPatid());
        key.setOuthospno(patMaternityArchiveDetail.getOuthospno());
        key.setArchiveType(patMaternityArchiveDetail.getArchiveType());
        List<PatMaternityArchiveDetail> olds =
                patMaternityArchiveDetailService.selectPatMaternityArchiveDetailList(key);
        Long existArchiveId = null;
        Long existDetailId = null;
        if (CollectionUtils.isNotEmpty(olds)) {
            existArchiveId = olds.get(0).getArchiveid();
            existDetailId = olds.get(0).getId();
        }
        // 详情没查到,再兜底按同样键查主表,避免主表重复
        if (existArchiveId == null) {
            PatMaternityArchive mainKey = new PatMaternityArchive();
            mainKey.setOrgid(patMaternityArchiveDetail.getOrgid());
            mainKey.setPatid(patMaternityArchiveDetail.getPatid());
            mainKey.setOuthospno(patMaternityArchiveDetail.getOuthospno());
            mainKey.setArchiveType(patMaternityArchiveDetail.getArchiveType());
            List<PatMaternityArchive> mainOlds =
                    patMaternityArchiveMapper.selectPatMaternityArchiveList(mainKey);
            if (CollectionUtils.isNotEmpty(mainOlds)) {
                existArchiveId = mainOlds.get(0).getId();
            }
        }
        patMaternityArchiveDetail.setArchiveid(existArchiveId);
        // 后面更新详情时,优先用业务键匹配到的 detail id
        Long detailId = patMaternityArchiveDetail.getId();
        if (detailId == null) {
            detailId = existDetailId;
        }
        // 只传了详情id时,反查出对应的档案主键id,保证后续能正确更新主表
        if (patMaternityArchiveDetail.getId() != null && patMaternityArchiveDetail.getArchiveid() == null) {
            PatMaternityArchiveDetail existDetail = patMaternityArchiveDetailService.selectPatMaternityArchiveDetailById(patMaternityArchiveDetail.getId());
        if (CollectionUtils.isNotEmpty(patMaternityArchiveDetailOlds)) {
            PatMaternityArchiveDetail existDetail = patMaternityArchiveDetailOlds.get(0);
            if (existDetail != null) {
                patMaternityArchiveDetail.setArchiveid(existDetail.getArchiveid());
            }
@@ -121,7 +180,7 @@
        // 回填主表id到详情,同步生成/更新详情表
        patMaternityArchiveDetail.setArchiveid(patMaternityArchive.getId());
        Long detailId = patMaternityArchiveDetail.getId();
//        Long detailId = patMaternityArchiveDetail.getId();
        if (detailId == null && patMaternityArchiveDetail.getArchiveid() != null) {
            PatMaternityArchiveDetail query = new PatMaternityArchiveDetail();
            query.setArchiveid(patMaternityArchiveDetail.getArchiveid());
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
@@ -1312,6 +1324,8 @@
            patMedOuthospService.dealPatMedOuthosp(patMedOuthosp, visitTimeNum);
        }
        genePatSpecificArchive(patMedOuthosp, patArchive);
        if (i > 0) {
            return true;
        }
@@ -2327,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;
    }
}
smartor/src/main/resources/mapper/smartor/PatChildArchiveDetailMapper.xml
@@ -174,6 +174,7 @@
    <select id="selectPatChildArchiveDetailById" parameterType="Long" resultMap="PatChildArchiveDetailResult">
        <include refid="selectPatChildArchiveDetailVo"/>
        where id = #{id}
        and del_flag = '0'
    </select>
    <insert id="insertPatChildArchiveDetail" parameterType="com.smartor.domain.PatChildArchiveDetail"
smartor/src/main/resources/mapper/smartor/PatChildArchiveMapper.xml
@@ -144,6 +144,7 @@
    <select id="selectPatChildArchiveById" parameterType="Long" resultMap="PatChildArchiveResult">
        <include refid="selectPatChildArchiveVo"/>
        where id = #{id}
        and del_flag = '0'
    </select>
    <insert id="insertPatChildArchive" parameterType="com.smartor.domain.PatChildArchive"
smartor/src/main/resources/mapper/smartor/PatMaternityArchiveDetailMapper.xml
@@ -164,6 +164,7 @@
    <select id="selectPatMaternityArchiveDetailById" parameterType="Long" resultMap="PatMaternityArchiveDetailResult">
        <include refid="selectPatMaternityArchiveDetailVo"/>
        where id = #{id}
        and del_flag = '0'
    </select>
    <insert id="insertPatMaternityArchiveDetail" parameterType="com.smartor.domain.PatMaternityArchiveDetail"
smartor/src/main/resources/mapper/smartor/PatMaternityArchiveMapper.xml
@@ -130,6 +130,7 @@
    <select id="selectPatMaternityArchiveById" parameterType="Long" resultMap="PatMaternityArchiveResult">
        <include refid="selectPatMaternityArchiveVo"/>
        where id = #{id}
        and del_flag = '0'
    </select>
    <insert id="insertPatMaternityArchive" parameterType="com.smartor.domain.PatMaternityArchive"