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 itemIds = itemIds(request); Map 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 tasks(String tenantId, List itemIds) { if (!StringUtils.hasText(tenantId) || itemIds.isEmpty()) return Collections.emptyMap(); Map 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 itemIds(TestWorkItemRequestIdentityRequest request) { if (request == null || request.getTestWorkItemIds() == null) return Collections.emptyList(); LinkedHashSet result = new LinkedHashSet<>(); for (String id : request.getTestWorkItemIds()) { if (StringUtils.hasText(id)) result.add(id.trim()); } return new ArrayList<>(result); } @FunctionalInterface interface TaskLookup { List find(String tenantId, List testWorkItemIds); } }