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.mapper.PatChildArchiveMapper; import com.smartor.service.IPatChildArchiveDetailService; import com.smartor.service.IPatChildArchiveService; 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 PatChildArchiveServiceImpl implements IPatChildArchiveService { @Autowired private PatChildArchiveMapper patChildArchiveMapper; @Autowired private IPatChildArchiveDetailService patChildArchiveDetailService; @Override public PatChildArchive selectPatChildArchiveById(Long id) { return patChildArchiveMapper.selectPatChildArchiveById(id); } @Override public List selectPatChildArchiveList(PatChildArchive patChildArchive) { return patChildArchiveMapper.selectPatChildArchiveList(patChildArchive); } @Override public int insertPatChildArchive(PatChildArchive patChildArchive) { patChildArchive.setCreateTime(DateUtils.getNowDate()); return patChildArchiveMapper.insertPatChildArchive(patChildArchive); } @Override public int updatePatChildArchive(PatChildArchive patChildArchive) { patChildArchive.setUpdateTime(DateUtils.getNowDate()); return patChildArchiveMapper.updatePatChildArchive(patChildArchive); } @Override public int deletePatChildArchiveByIds(Long[] ids) { return patChildArchiveMapper.deletePatChildArchiveByIds(ids); } @Override @Transactional(rollbackFor = Exception.class) public int batchDeletePatChildArchiveByIds(Long[] ids) { // 先删除对应的详情表数据 patChildArchiveDetailService.deletePatChildArchiveDetailByArchiveIds(ids); // 再删除主表数据 return patChildArchiveMapper.deletePatChildArchiveByIds(ids); } @Override public int deletePatChildArchiveById(Long id) { return patChildArchiveMapper.deletePatChildArchiveById(id); } @Override @Transactional(rollbackFor = Exception.class) public int insertOrUpdateChildArchive(PatChildArchiveDetail patChildArchiveDetail) { if (patChildArchiveDetail == null) { log.error("insertOrUpdateChildArchive入参为空,请检查入参"); throw new BaseException("儿科档案入参为空,请检查入参"); } if (StringUtils.isEmpty(patChildArchiveDetail.getOuthospno())) { throw new BaseException("儿科档案入参门诊编号outhospno为空,请检查入参门诊编号"); } if (StringUtils.isEmpty(patChildArchiveDetail.getArchiveType())) { throw new BaseException("儿科档案入参档案类型archiveType为空,请检查入参档案类型"); } // 按业务键查详情 PatChildArchiveDetail key = new PatChildArchiveDetail(); key.setOrgid(patChildArchiveDetail.getOrgid()); key.setPatid(patChildArchiveDetail.getPatid()); key.setOuthospno(patChildArchiveDetail.getOuthospno()); key.setArchiveType(patChildArchiveDetail.getArchiveType()); List 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 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); if (patChildArchive == null) { throw new BaseException("儿科档案对象转换失败,请检查入参"); } // 防止把详情表id(patChildArchiveDetail.id)当作主表id,主表id必须以archiveid为准 patChildArchive.setId(patChildArchiveDetail.getArchiveid()); // 主表:有id且库中存在则修改,否则新增 if (patChildArchive.getId() != null && patChildArchiveMapper.selectPatChildArchiveById(patChildArchive.getId()) != null) { patChildArchive.setUpdateTime(DateUtils.getNowDate()); patChildArchiveMapper.updatePatChildArchive(patChildArchive); } else { patChildArchive.setCreateTime(DateUtils.getNowDate()); if (StringUtils.isEmpty(patChildArchive.getDelFlag())) { patChildArchive.setDelFlag("0"); } patChildArchiveMapper.insertPatChildArchive(patChildArchive); } // 回填主表id到详情,同步生成/更新详情表 patChildArchiveDetail.setArchiveid(patChildArchive.getId()); // Long detailId = patChildArchiveDetail.getId(); if (detailId == null && patChildArchiveDetail.getArchiveid() != null) { PatChildArchiveDetail query = new PatChildArchiveDetail(); query.setArchiveid(patChildArchiveDetail.getArchiveid()); List existList = patChildArchiveDetailService.selectPatChildArchiveDetailList(query); if (CollectionUtils.isNotEmpty(existList)) { detailId = existList.get(0).getId(); } } if (detailId != null) { patChildArchiveDetail.setId(detailId); patChildArchiveDetailService.updatePatChildArchiveDetail(patChildArchiveDetail); } else { if (StringUtils.isEmpty(patChildArchiveDetail.getDelFlag())) { patChildArchiveDetail.setDelFlag("0"); } patChildArchiveDetailService.insertPatChildArchiveDetail(patChildArchiveDetail); } log.info("insertOrUpdateChildArchive处理完成,主表id:{},详情id:{}", patChildArchive.getId(), patChildArchiveDetail.getId()); return patChildArchive.getId().intValue(); } }