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"