package jnpf.elnService.impl; import jnpf.base.ActionResult; import jnpf.base.ActionResultCode; import jnpf.elnService.ElnTestRequestIdentityLookup; import jnpf.exception.DataException; import jnpf.lims.api.TestWorkItemSnapshotApi; import jnpf.lims.api.model.TestWorkItemRequestIdentityActorRequest; import jnpf.lims.api.model.TestWorkItemRequestIdentityBatch; import jnpf.lims.api.model.TestWorkItemRequestIdentity; import jnpf.lims.api.model.TestWorkItemRequestIdentityRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @Component public class LimsTestRequestIdentityLookupAdapter implements ElnTestRequestIdentityLookup { private final TestWorkItemSnapshotApi api; @Autowired public LimsTestRequestIdentityLookupAdapter(TestWorkItemSnapshotApi api) { this.api = api; } @Override public Map resolve( String tenantId, List testWorkItemIds) { if (!StringUtils.hasText(tenantId)) { throw new DataException("LIMS 请验单身份查询租户不能为空"); } TestWorkItemRequestIdentityRequest request = new TestWorkItemRequestIdentityRequest(); request.setTestWorkItemIds(testWorkItemIds); TestWorkItemRequestIdentityActorRequest actor = new TestWorkItemRequestIdentityActorRequest(); actor.setTenantId(tenantId.trim()); actor.setRequest(request); TestWorkItemRequestIdentityBatch batch = result(api.requestIdentitiesAsActor(actor)); Map identities = new LinkedHashMap<>(); if (batch.getItems() == null) return identities; for (TestWorkItemRequestIdentity item : batch.getItems()) { if (item == null || !StringUtils.hasText(item.getTestWorkItemId())) { continue; } if ("TEST_REQUEST_INVALID".equals(item.getOutcomeCode())) { throw new DataException("SOURCE_RECORD_IDENTITY_INVALID: 检验项缺少请验单身份 (" + item.getTestWorkItemId().trim() + ")"); } if (!"SUCCESS".equals(item.getOutcomeCode()) || !StringUtils.hasText(item.getTestRequestId())) continue; identities.put(item.getTestWorkItemId().trim(), new ElnTestRequestIdentityLookup.Identity( item.getTestRequestId().trim(), item.getTaskStatus())); } return identities; } private static TestWorkItemRequestIdentityBatch result( ActionResult result) { if (result == null || !ActionResultCode.SUCCESS.getCode().equals(result.getCode()) || result.getData() == null) { throw new DataException(result == null || !StringUtils.hasText(result.getMsg()) ? "LIMS 请验单身份读取失败,请稍后重试" : result.getMsg()); } return result.getData(); } }