陈昶聿
2026-10-13 60b7a9849e957872203ef78b99e7a0ee8e533e94
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
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<PatChildArchive> 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<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();
    }
}