This commit is contained in:
2026-09-10 12:18:33 +08:00
parent 443b01c8a8
commit 98f61ba3ed
22 changed files with 371 additions and 56 deletions
@@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
/** Firstleg internal contract for atomically provisioning four default box-size dimension records. */
/** Firstleg internal contract for atomically provisioning box-size and weight-coefficient defaults. */
@FeignClient(name = "firstleg-service", contextId = "customerDimensionRuleClient",
url = "${baiyue.clients.firstleg.url:}",
path = "/internal/firstleg/v1/customer-dimension-configs")
@@ -24,7 +24,8 @@ public interface CustomerDimensionRuleClient {
@RequestParam long tenantId,
@RequestParam String initializationKey);
record InitializationRequest(long tenantId, long operatorId, String initializationKey) { }
/** configId is the first record ID retained only for contract compatibility. */
record InitializationResponse(Long configId, boolean createdByThisInitialization) { }
record InitializationRequest(long tenantId, long operatorId, String initializationKey,
String customerName) { }
record InitializationResponse(Long configId, Long chargeRuleId,
boolean createdByThisInitialization) { }
}
@@ -3,10 +3,10 @@ package com.baiyue.iam.model;
public record CustomerDimensionInitializationTask(
long tenantId,
long operatorId,
String customerName,
String initializationKey,
String action,
String status,
int attemptCount,
int taskVersion) {
}
@@ -73,11 +73,14 @@ public class CustomerDimensionInitializationRepository {
+ "WHERE tenant_id=? AND status='PENDING' AND next_retry_at<=?",
workerId, now.plusMinutes(2), now, tenantId, now);
if (claimed != 1) return null;
return jdbc.queryForObject("SELECT tenant_id,operator_id,initialization_key,action,status,"
+ "attempt_count,task_version FROM iam_customer_dimension_initialization_task "
+ "WHERE tenant_id=? AND status='SENDING' AND lease_owner=?",
return jdbc.queryForObject("SELECT task.tenant_id,task.operator_id,tenant.tenant_name,"
+ "task.initialization_key,task.action,task.status,task.attempt_count,task.task_version "
+ "FROM iam_customer_dimension_initialization_task task "
+ "JOIN iam_tenant tenant ON tenant.id=task.tenant_id "
+ "WHERE task.tenant_id=? AND task.status='SENDING' AND task.lease_owner=?",
(rs, row) -> new CustomerDimensionInitializationTask(
rs.getLong("tenant_id"), rs.getLong("operator_id"), rs.getString("initialization_key"),
rs.getLong("tenant_id"), rs.getLong("operator_id"), rs.getString("tenant_name"),
rs.getString("initialization_key"),
rs.getString("action"), rs.getString("status"), rs.getInt("attempt_count"),
rs.getInt("task_version")), tenantId, workerId);
}
@@ -43,10 +43,11 @@ public class CustomerDimensionInitializationRelay {
}
ApiResponse<CustomerDimensionRuleClient.InitializationResponse> response = client.initialize(
internalToken, new CustomerDimensionRuleClient.InitializationRequest(
task.tenantId(), task.operatorId(), task.initializationKey()));
task.tenantId(), task.operatorId(), task.initializationKey(), task.customerName()));
requireSuccess(response, true);
if (response.data() == null || response.data().configId() == null) {
throw new DeliveryFailure("S0503", "Firstleg 未返回默认尺寸配置ID", false);
if (response.data() == null || response.data().configId() == null
|| response.data().chargeRuleId() == null) {
throw new DeliveryFailure("S0503", "Firstleg 未完整返回默认尺寸和权重系数规则ID", false);
}
repository.markReady(task, workerId, response.data().configId());
} catch (Exception failure) {