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);
|
}
|
}
|