刘光辉
15 小时以前 34981c30a78e8bbd7791131059a9210f9928b62c
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
package jnpf.dmsService.impl;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import jnpf.dmsEntity.DmsDanganCundangShenqingEntity;
import jnpf.dmsEntity.DmsDanganCundangShenqingDanganheEntity;
import jnpf.dmsEntity.form.DmsDanganCundangJieshouDanganheForm;
import jnpf.dmsEntity.form.DmsDanganCundangJieshouForm;
import jnpf.dmsMapper.DmsDanganCundangShenqingDanganheMapper;
import jnpf.dmsMapper.DmsDanganCundangShenqingMapper;
import jnpf.dmsService.DmsDanganCundangJieshouService;
import jnpf.exception.DataException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
 
@Service
@RequiredArgsConstructor
public class DmsDanganCundangJieshouServiceImpl implements DmsDanganCundangJieshouService {
 
    private final DmsDanganCundangShenqingDanganheMapper danganheMapper;
    private final DmsDanganCundangShenqingMapper shenqingMapper;
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void jieshou(DmsDanganCundangJieshouForm form) throws DataException {
        if (form == null) {
            throw new DataException("档案存档接收参数不能为空");
        }
        Set<String> danganheIds = resolveDanganheIds(form.getDanganheXinxi());
        String jieshouRen = requireValue(form.getBizUserId(), "接收人(biz_user_id)");
        String yijiaoRen = requireValue(form.getBizReviewUser(), "移交人(biz_review_user)");
        String bizSign = requireValue(form.getBizSign(), "接收签名(biz_sign)");
        String bizReviewSign = requireValue(form.getBizReviewSign(), "移交签名(biz_review_sign)");
 
        LambdaQueryWrapper<DmsDanganCundangShenqingDanganheEntity> existingQuery = new LambdaQueryWrapper<>();
        existingQuery.in(DmsDanganCundangShenqingDanganheEntity::getId, danganheIds)
                .isNull(DmsDanganCundangShenqingDanganheEntity::getDeleteMark);
        List<DmsDanganCundangShenqingDanganheEntity> danganheList = danganheMapper.selectList(existingQuery);
        if (danganheList.size() != danganheIds.size()) {
            throw new DataException("存在未找到或已删除的档案盒记录,无法接收");
        }
        for (DmsDanganCundangShenqingDanganheEntity danganhe : danganheList) {
            if (!trimToEmpty(danganhe.getJieshouRen()).isEmpty()) {
                throw new DataException("档案盒已接收,不能重复接收");
            }
        }
 
        Date receivedAt = new Date();
        LambdaUpdateWrapper<DmsDanganCundangShenqingDanganheEntity> update = new LambdaUpdateWrapper<>();
        update.in(DmsDanganCundangShenqingDanganheEntity::getId, danganheIds)
                .isNull(DmsDanganCundangShenqingDanganheEntity::getDeleteMark)
                .and(wrapper -> wrapper.isNull(DmsDanganCundangShenqingDanganheEntity::getJieshouRen)
                        .or()
                        .eq(DmsDanganCundangShenqingDanganheEntity::getJieshouRen, ""))
                .set(DmsDanganCundangShenqingDanganheEntity::getJieshouRen, jieshouRen)
                .set(DmsDanganCundangShenqingDanganheEntity::getYijiaoRen, yijiaoRen)
                .set(DmsDanganCundangShenqingDanganheEntity::getBizSign, bizSign)
                .set(DmsDanganCundangShenqingDanganheEntity::getBizReviewSign, bizReviewSign)
                .set(DmsDanganCundangShenqingDanganheEntity::getJieshouRiqi, receivedAt);
        if (danganheMapper.update(null, update) != danganheIds.size()) {
            throw new DataException("档案盒已接收,不能重复接收");
        }
    }
 
    @Override
    @Transactional(readOnly = true)
    public DmsDanganCundangShenqingDanganheEntity check(String danganheBianhao) throws DataException {
        String queryValue = requireValue(danganheBianhao, "档案盒编号(danganhe_bianhao)");
        LambdaQueryWrapper<DmsDanganCundangShenqingDanganheEntity> danganheQuery = new LambdaQueryWrapper<>();
        danganheQuery.and(wrapper -> wrapper
                        .eq(DmsDanganCundangShenqingDanganheEntity::getDanganheBianhao, queryValue)
                        .or()
                        .eq(DmsDanganCundangShenqingDanganheEntity::getId, queryValue))
                .isNull(DmsDanganCundangShenqingDanganheEntity::getDeleteMark);
        List<DmsDanganCundangShenqingDanganheEntity> danganheList = danganheMapper.selectList(danganheQuery);
        if (danganheList.isEmpty()) {
            throw new DataException("未找到对应的档案盒记录");
        }
        if (danganheList.size() > 1) {
            throw new DataException("档案盒编号对应多条记录,请使用档案盒ID校验");
        }
 
        DmsDanganCundangShenqingDanganheEntity danganhe = danganheList.get(0);
        String shenqingId = trimToEmpty(danganhe.getForeignId());
        if (shenqingId.isEmpty()) {
            throw new DataException("档案盒未关联存档申请,无法接收");
        }
        LambdaQueryWrapper<DmsDanganCundangShenqingEntity> shenqingQuery = new LambdaQueryWrapper<>();
        shenqingQuery.eq(DmsDanganCundangShenqingEntity::getId, shenqingId)
                .isNull(DmsDanganCundangShenqingEntity::getDeleteMark);
        DmsDanganCundangShenqingEntity shenqing = shenqingMapper.selectOne(shenqingQuery);
        if (shenqing == null) {
            throw new DataException("未找到档案盒关联的存档申请");
        }
        if (!Integer.valueOf(2).equals(shenqing.getFlowState())) {
            throw new DataException("档案存档申请尚未审批通过,无法接收");
        }
        if (!trimToEmpty(danganhe.getJieshouRen()).isEmpty()) {
            throw new DataException("档案盒已接收,不能重复接收");
        }
        return danganhe;
    }
 
    private Set<String> resolveDanganheIds(List<DmsDanganCundangJieshouDanganheForm> danganheXinxi)
            throws DataException {
        if (danganheXinxi == null || danganheXinxi.isEmpty()) {
            throw new DataException("档案盒信息(danganhe_xinxi)不能为空");
        }
        Set<String> ids = new LinkedHashSet<>();
        for (DmsDanganCundangJieshouDanganheForm danganhe : danganheXinxi) {
            if (danganhe == null) {
                throw new DataException("档案盒信息中不能包含空记录");
            }
            String id = trimToEmpty(danganhe.getId());
            String fId = trimToEmpty(danganhe.getFId());
            if (id.isEmpty() && fId.isEmpty()) {
                throw new DataException("档案盒记录的id或f_id不能为空");
            }
            if (!id.isEmpty() && !fId.isEmpty() && !id.equals(fId)) {
                throw new DataException("档案盒记录的id与f_id不一致");
            }
            ids.add(id.isEmpty() ? fId : id);
        }
        if (ids.size() != danganheXinxi.size()) {
            throw new DataException("档案盒信息中不能包含重复记录");
        }
        return ids;
    }
 
    private String requireValue(String value, String fieldName) throws DataException {
        String resolved = trimToEmpty(value);
        if (resolved.isEmpty()) {
            throw new DataException(fieldName + "不能为空");
        }
        return resolved;
    }
 
    private String trimToEmpty(String value) {
        return value == null ? "" : value.trim();
    }
}