刘光辉
4 小时以前 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
package jnpf.limsService.impl;
 
import jnpf.lims.api.model.TestWorkItemRequestIdentityBatch;
import jnpf.lims.api.model.TestWorkItemRequestIdentity;
import jnpf.lims.api.model.TestWorkItemRequestIdentityRequest;
import jnpf.limsEntity.LimsJianyanXiangEntity;
import jnpf.limsMapper.LimsJianyanXiangMapper;
import jnpf.limsService.LimsTestWorkItemRequestIdentityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
 
@Service
public class LimsTestWorkItemRequestIdentityServiceImpl
        implements LimsTestWorkItemRequestIdentityService {
 
    private final TaskLookup taskLookup;
 
    @Autowired
    public LimsTestWorkItemRequestIdentityServiceImpl(LimsJianyanXiangMapper mapper) {
        this(mapper::selectLiveTasks);
    }
 
    LimsTestWorkItemRequestIdentityServiceImpl(TaskLookup taskLookup) {
        this.taskLookup = taskLookup;
    }
 
    @Override
    public TestWorkItemRequestIdentityBatch resolve(String tenantId,
                                                       TestWorkItemRequestIdentityRequest request) {
        List<String> itemIds = itemIds(request);
        Map<String, LimsJianyanXiangEntity> tasks = tasks(tenantId, itemIds);
        TestWorkItemRequestIdentityBatch batch = new TestWorkItemRequestIdentityBatch();
        for (String itemId : itemIds) {
            TestWorkItemRequestIdentity item = new TestWorkItemRequestIdentity();
            item.setTestWorkItemId(itemId);
            LimsJianyanXiangEntity task = tasks.get(itemId);
            if (task == null) {
                item.setOutcomeCode("NOT_FOUND");
                item.setReason("检验项不存在或无权访问");
            } else if (!StringUtils.hasText(task.getQingyandanId())) {
                item.setTaskStatus(task.getJianyanZhuangtai());
                item.setOutcomeCode("TEST_REQUEST_INVALID");
                item.setReason("检验项缺少请验单身份");
            } else {
                item.setTestRequestId(task.getQingyandanId().trim());
                item.setTaskStatus(task.getJianyanZhuangtai());
                item.setOutcomeCode("SUCCESS");
            }
            batch.getItems().add(item);
        }
        return batch;
    }
 
    private Map<String, LimsJianyanXiangEntity> tasks(String tenantId, List<String> itemIds) {
        if (!StringUtils.hasText(tenantId) || itemIds.isEmpty()) return Collections.emptyMap();
        Map<String, LimsJianyanXiangEntity> result = new LinkedHashMap<>();
        for (LimsJianyanXiangEntity task : taskLookup.find(tenantId, itemIds)) {
            if (task != null && StringUtils.hasText(task.getId())
                    && tenantId.equals(task.getTenantId())) {
                result.put(task.getId(), task);
            }
        }
        return result;
    }
 
    private static List<String> itemIds(TestWorkItemRequestIdentityRequest request) {
        if (request == null || request.getTestWorkItemIds() == null) return Collections.emptyList();
        LinkedHashSet<String> result = new LinkedHashSet<>();
        for (String id : request.getTestWorkItemIds()) {
            if (StringUtils.hasText(id)) result.add(id.trim());
        }
        return new ArrayList<>(result);
    }
 
    @FunctionalInterface
    interface TaskLookup {
        List<LimsJianyanXiangEntity> find(String tenantId, List<String> testWorkItemIds);
    }
}