package com.smartor.service.impl; import com.ruoyi.common.exception.base.BaseException; 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; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** * 妇科档案Service业务层处理 * * @author ruoyi * @date 2026-10-09 */ @Slf4j @Service public class PatMaternityArchiveServiceImpl implements IPatMaternityArchiveService { @Autowired private PatMaternityArchiveMapper patMaternityArchiveMapper; @Autowired private IPatMaternityArchiveDetailService patMaternityArchiveDetailService; @Autowired private PatMaternityArchiveDetailMapper patMaternityArchiveDetailMapper; @Override public PatMaternityArchive selectPatMaternityArchiveById(Long id) { return patMaternityArchiveMapper.selectPatMaternityArchiveById(id); } @Override public List selectPatMaternityArchiveList(PatMaternityArchive patMaternityArchive) { return patMaternityArchiveMapper.selectPatMaternityArchiveList(patMaternityArchive); } @Override public int insertPatMaternityArchive(PatMaternityArchive patMaternityArchive) { patMaternityArchive.setCreateTime(DateUtils.getNowDate()); return patMaternityArchiveMapper.insertPatMaternityArchive(patMaternityArchive); } @Override public int updatePatMaternityArchive(PatMaternityArchive patMaternityArchive) { patMaternityArchive.setUpdateTime(DateUtils.getNowDate()); return patMaternityArchiveMapper.updatePatMaternityArchive(patMaternityArchive); } @Override public int deletePatMaternityArchiveByIds(Long[] ids) { return patMaternityArchiveMapper.deletePatMaternityArchiveByIds(ids); } @Override @Transactional(rollbackFor = Exception.class) public int batchDeletePatMaternityArchiveByIds(Long[] ids) { // 先删除对应的详情表数据 patMaternityArchiveDetailService.deletePatMaternityArchiveDetailByArchiveIds(ids); // 再删除主表数据 return patMaternityArchiveMapper.deletePatMaternityArchiveByIds(ids); } @Override public int deletePatMaternityArchiveById(Long id) { return patMaternityArchiveMapper.deletePatMaternityArchiveById(id); } @Override @Transactional(rollbackFor = Exception.class) public int insertOrUpdateMaternityArchive(PatMaternityArchiveDetail patMaternityArchiveDetail) { if (patMaternityArchiveDetail == null) { log.error("insertOrUpdateMaternityArchive入参为空,请检查入参"); throw new BaseException("妇科档案入参为空,请检查入参"); } //保证同一就诊记录同一档案类型只能生成一条 PatMaternityArchiveDetail patMaternityArchiveDetailVo = new PatMaternityArchiveDetail(); patMaternityArchiveDetailVo.setOrgid(patMaternityArchiveDetail.getOrgid()); patMaternityArchiveDetailVo.setPatid(patMaternityArchiveDetail.getPatid()); patMaternityArchiveDetailVo.setOuthospno(patMaternityArchiveDetail.getOuthospno()); patMaternityArchiveDetailVo.setArchiveType(patMaternityArchiveDetail.getArchiveType()); List 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 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 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 (CollectionUtils.isNotEmpty(patMaternityArchiveDetailOlds)) { PatMaternityArchiveDetail existDetail = patMaternityArchiveDetailOlds.get(0); if (existDetail != null) { patMaternityArchiveDetail.setArchiveid(existDetail.getArchiveid()); } } // 将详情中的公共字段复制到主表对象 PatMaternityArchive patMaternityArchive = DtoConversionUtils.sourceToTarget(patMaternityArchiveDetail, PatMaternityArchive.class); if (patMaternityArchive == null) { throw new BaseException("妇科档案对象转换失败,请检查入参"); } // 防止把详情表id(patMaternityArchiveDetail.id)当作主表id,主表id必须以archiveid为准 patMaternityArchive.setId(patMaternityArchiveDetail.getArchiveid()); // 主表:有id且库中存在则修改,否则新增 if (patMaternityArchive.getId() != null && patMaternityArchiveMapper.selectPatMaternityArchiveById(patMaternityArchive.getId()) != null) { patMaternityArchive.setUpdateTime(DateUtils.getNowDate()); patMaternityArchiveMapper.updatePatMaternityArchive(patMaternityArchive); } else { patMaternityArchive.setCreateTime(DateUtils.getNowDate()); if (StringUtils.isEmpty(patMaternityArchive.getDelFlag())) { patMaternityArchive.setDelFlag("0"); } patMaternityArchiveMapper.insertPatMaternityArchive(patMaternityArchive); } // 回填主表id到详情,同步生成/更新详情表 patMaternityArchiveDetail.setArchiveid(patMaternityArchive.getId()); // Long detailId = patMaternityArchiveDetail.getId(); if (detailId == null && patMaternityArchiveDetail.getArchiveid() != null) { PatMaternityArchiveDetail query = new PatMaternityArchiveDetail(); query.setArchiveid(patMaternityArchiveDetail.getArchiveid()); List existList = patMaternityArchiveDetailService.selectPatMaternityArchiveDetailList(query); if (CollectionUtils.isNotEmpty(existList)) { detailId = existList.get(0).getId(); } } if (detailId != null) { patMaternityArchiveDetail.setId(detailId); patMaternityArchiveDetailService.updatePatMaternityArchiveDetail(patMaternityArchiveDetail); } else { if (StringUtils.isEmpty(patMaternityArchiveDetail.getDelFlag())) { patMaternityArchiveDetail.setDelFlag("0"); } patMaternityArchiveDetailService.insertPatMaternityArchiveDetail(patMaternityArchiveDetail); } log.info("insertOrUpdateMaternityArchive处理完成,主表id:{},详情id:{}", patMaternityArchive.getId(), patMaternityArchiveDetail.getId()); return patMaternityArchive.getId().intValue(); } }