陈昶聿
9 天以前 57d12c99f6f0f1d0ab62b50d3c2aeb1e30a8d6f8
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
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
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<PatMaternityArchive> 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<PatMaternityArchiveDetail> 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<PatMaternityArchiveDetail> 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<PatMaternityArchive> 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<PatMaternityArchiveDetail> 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();
    }
}