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.PatMaternityArchive; import com.smartor.domain.PatMaternityArchiveDetail; 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; @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("妇科档案入参为空,请检查入参"); } // 只传了详情id时,反查出对应的档案主键id,保证后续能正确更新主表 if (patMaternityArchiveDetail.getId() != null && patMaternityArchiveDetail.getArchiveid() == null) { PatMaternityArchiveDetail existDetail = patMaternityArchiveDetailService.selectPatMaternityArchiveDetailById(patMaternityArchiveDetail.getId()); 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(); } }