刘光辉
118 分钟以前 06f314545ac3514d7ce28939920866ae8188d31c
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
package jnpf.elnService.impl;
 
import jnpf.base.UserInfo;
import jnpf.database.util.TenantDataSourceUtil;
import jnpf.elnEntity.ElnDocumentFileVo;
import jnpf.elnEntity.runtime.ElnRecordEntity;
import jnpf.elnEntity.runtime.ElnRecordRevisionEntity;
import jnpf.elnEntity.runtime.ElnRecordVos;
import jnpf.elnMapper.ElnRecordMapper;
import jnpf.elnMapper.ElnRecordRevisionMapper;
import jnpf.elnService.ElnRecordQueryService;
import jnpf.exception.DataException;
import jnpf.model.tenant.TenantVO;
import jnpf.util.UserProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
 
import java.util.Objects;
 
@Service
public class ElnRecordQueryServiceImpl implements ElnRecordQueryService {
 
    private final ElnRecordMapper recordMapper;
    private final ElnRecordRevisionMapper revisionMapper;
    private final TenantProvider tenantProvider;
 
    @Autowired
    public ElnRecordQueryServiceImpl(ElnRecordMapper recordMapper,
                                     ElnRecordRevisionMapper revisionMapper) {
        this(recordMapper, revisionMapper, ElnRecordQueryServiceImpl::currentTenant);
    }
 
    ElnRecordQueryServiceImpl(ElnRecordMapper recordMapper,
                              ElnRecordRevisionMapper revisionMapper,
                              TenantProvider tenantProvider) {
        this.recordMapper = recordMapper;
        this.revisionMapper = revisionMapper;
        this.tenantProvider = tenantProvider;
    }
 
    @Override
    @Transactional(readOnly = true)
    public ElnRecordVos.Created getByTestWorkItem(String testWorkItemId) {
        String itemId = required(testWorkItemId, "检验项不能为空");
        String tenantId = tenantProvider.get();
        ElnRecordEntity record = recordMapper.selectLiveByTestWorkItem(tenantId, itemId);
        if (record == null || !tenantId.equals(record.getFTenantId())
                || !itemId.equals(record.getJianyanXiangId())
                || !StringUtils.hasText(record.getDangqianXiudingId())) {
            throw new DataException("检验项电子记录不存在");
        }
 
        ElnRecordRevisionEntity revision = revisionMapper.selectById(record.getDangqianXiudingId());
        if (revision == null || !tenantId.equals(revision.getFTenantId())
                || !record.getId().equals(revision.getDianziJiluId())
                || !record.getDangqianXiudingId().equals(revision.getId())
                || Objects.equals(1, revision.getFDeleteMark())
                || !StringUtils.hasText(revision.getJiluWendang())) {
            throw new DataException("电子记录当前修订不存在或无效");
        }
 
        ElnRecordVos.Created result = new ElnRecordVos.Created();
        result.setRecordId(record.getId());
        result.setRevisionId(revision.getId());
        result.setDocument(document(record, revision));
        result.setExisting(true);
        return result;
    }
 
    private static ElnDocumentFileVo document(
            ElnRecordEntity record, ElnRecordRevisionEntity revision) {
        ElnDocumentFileVo document = new ElnDocumentFileVo();
        document.setFileId(revision.getJiluWendang().trim());
        document.setName((StringUtils.hasText(record.getJiluBianhao())
                ? record.getJiluBianhao().trim() : record.getId()) + ".docx");
        document.setFileExtension("docx");
        return document;
    }
 
    private static String currentTenant() {
        UserInfo user = UserProvider.getUser();
        if (user == null || !StringUtils.hasText(user.getUserId())) {
            throw new DataException("当前登录用户无效");
        }
        TenantVO routed = TenantDataSourceUtil.getTenantInfo();
        String tenantId = routed != null && StringUtils.hasText(routed.getEnCode())
                ? routed.getEnCode().trim() : user.getTenantId();
        return StringUtils.hasText(tenantId) ? tenantId.trim() : "0";
    }
 
    private static String required(String value, String message) {
        if (!StringUtils.hasText(value)) {
            throw new DataException(message);
        }
        return value.trim();
    }
 
    @FunctionalInterface
    interface TenantProvider {
        String get();
    }
}