| | |
| | | "服务未开放同步 MES,请关闭 syncMes 后重试"); |
| | | } |
| | | String requestDigest = buildRequestDigest(reqVO); |
| | | Long tenantId = principal.tenantId(); |
| | | Long ownerUserId = principal.userId(); |
| | | |
| | | // 1. 幂等命中:命令 ID 优先,其次幂等键 |
| | | MdmAgentImportCommandDO existing = commandMapper.selectByCommandId(tenantId, ownerUserId, reqVO.getCommandId()); |
| | | MdmAgentImportCommandDO existing = commandMapper.selectByCommandId(ownerUserId, reqVO.getCommandId()); |
| | | if (existing != null) { |
| | | if (!existing.getRequestDigest().equals(requestDigest)) { |
| | | throw new AgentBridgeException(HttpStatus.CONFLICT, "COMMAND_ID_CONFLICT", |
| | |
| | | } |
| | | return toReceipt(existing); |
| | | } |
| | | existing = commandMapper.selectByIdempotencyKey(tenantId, ownerUserId, reqVO.getIdempotencyKey()); |
| | | existing = commandMapper.selectByIdempotencyKey(ownerUserId, reqVO.getIdempotencyKey()); |
| | | if (existing != null) { |
| | | if (!existing.getRequestDigest().equals(requestDigest)) { |
| | | throw new AgentBridgeException(HttpStatus.CONFLICT, "IDEMPOTENCY_CONFLICT", |
| | |
| | | .commandId(reqVO.getCommandId()) |
| | | .idempotencyKey(reqVO.getIdempotencyKey()) |
| | | .requestDigest(requestDigest) |
| | | .tenantId(tenantId) |
| | | .ownerUserId(ownerUserId) |
| | | .sessionId(reqVO.getSessionId()) |
| | | .attachmentId(reqVO.getAttachmentId()) |
| | |
| | | try { |
| | | commandMapper.insert(command); |
| | | } catch (DuplicateKeyException ex) { |
| | | MdmAgentImportCommandDO raced = commandMapper.selectByCommandId(tenantId, ownerUserId, reqVO.getCommandId()); |
| | | MdmAgentImportCommandDO raced = commandMapper.selectByCommandId(ownerUserId, reqVO.getCommandId()); |
| | | if (raced == null) { |
| | | raced = commandMapper.selectByIdempotencyKey(tenantId, ownerUserId, reqVO.getIdempotencyKey()); |
| | | raced = commandMapper.selectByIdempotencyKey(ownerUserId, reqVO.getIdempotencyKey()); |
| | | } |
| | | if (raced == null) { |
| | | throw ex; |
| | |
| | | |
| | | public MdmAgentImportReceiptRespVO getCommand(String commandId, AgentPrincipal principal) { |
| | | MdmAgentImportCommandDO command = commandMapper.selectByCommandId( |
| | | principal.tenantId(), principal.userId(), commandId); |
| | | principal.userId(), commandId); |
| | | if (command == null) { |
| | | throw new AgentBridgeException(HttpStatus.NOT_FOUND, "COMMAND_NOT_FOUND", "导入命令不存在"); |
| | | } |