陈昶聿
10 天以前 c0ddb9dad45beceb6afefb03fce409878079775b
smartor/src/main/java/com/smartor/service/impl/PatChildArchiveServiceImpl.java
@@ -1,11 +1,19 @@
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;
@@ -15,11 +23,15 @@
 * @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)
@@ -54,8 +66,118 @@
    }
    @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<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);
        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<PatChildArchiveDetail> 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();
    }
}