This commit is contained in:
2026-08-08 15:05:33 +08:00
parent 102845874b
commit e395292cd5
11 changed files with 2771 additions and 8 deletions
@@ -21,7 +21,7 @@ public interface OverseasStorageFeeClient {
ApiResponse<Void> compensate(@RequestHeader("X-Internal-Service-Token") String token,
@RequestBody CompensationRequest request);
record InitializationRequest(long tenantId, long operatorId, String initializationKey) { }
record InitializationRequest(long tenantId, long operatorId, String initializationKey, String customerName) { }
record InitializationResponse(Long configId, boolean createdByThisInitialization) { }
record CompensationRequest(long tenantId, String initializationKey) { }
}
@@ -121,7 +121,7 @@ public class MerchantOnboardingService {
addressMapper.insert(address);
}
dimensionRuleInitialization.initialize(tenantId, request.authUserId());
overseasStorageFeeInitialization.initialize(tenantId, request.authUserId());
overseasStorageFeeInitialization.initialize(tenantId, request.authUserId(), tenant.getTenantName());
return new MerchantRegistrationResponse(tenantId, membershipId, tenant.getStatus());
}
@@ -22,13 +22,13 @@ public class OverseasStorageFeeInitializationService {
@Resource private OverseasStorageFeeClient client;
@Value("${baiyue.security.internal-service-token}") private String internalToken;
public InitializationResult initialize(long tenantId, long operatorId) {
public InitializationResult initialize(long tenantId, long operatorId, String customerName) {
String key = initializationKey(tenantId);
RuntimeException last = null;
for (int attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
try {
ApiResponse<OverseasStorageFeeClient.InitializationResponse> response = client.initialize(
internalToken, new OverseasStorageFeeClient.InitializationRequest(tenantId, operatorId, key));
internalToken, new OverseasStorageFeeClient.InitializationRequest(tenantId, operatorId, key, customerName));
if (response != null && response.successful() && response.data() != null) {
InitializationResult result = new InitializationResult(
response.data().createdByThisInitialization(), key);
@@ -182,7 +182,7 @@ public class TenantService {
tenant.setUpdatedBy(operatorId);
repository.insertTenant(tenant);
dimensionRuleInitialization.initialize(tenant.getId(), operatorId);
overseasStorageFeeInitialization.initialize(tenant.getId(), operatorId);
overseasStorageFeeInitialization.initialize(tenant.getId(), operatorId, tenant.getTenantName());
var administrator = administratorProvisioning.provisionPlatformCreatedTenant(tenant, operatorId);
return new CreationResponse(response(tenant), administrator.username(), administrator.temporaryPassword());
@@ -66,7 +66,7 @@ class MerchantOnboardingServiceTest {
verify(memberships).insert(membership.capture());
verify(membershipRoles).insert(roleGrant.capture());
verify(dimensionRuleInitialization).initialize(result.tenantId(), 9001L);
verify(overseasStorageFeeInitialization).initialize(result.tenantId(), 9001L);
verify(overseasStorageFeeInitialization).initialize(result.tenantId(), 9001L, "测试企业");
assertEquals("PROFILE_REQUIRED", result.tenantStatus());
assertEquals(result.tenantId(), tenant.getValue().getId());
@@ -34,7 +34,7 @@ class OverseasStorageFeeInitializationServiceTest {
@Test void retriesThreeTimesWithDeterministicKey() {
when(client.initialize(anyString(), any())).thenThrow(new RuntimeException("timeout"));
when(client.compensate(anyString(), any(OverseasStorageFeeClient.CompensationRequest.class))).thenReturn(ApiResponse.success(null));
BizException error = assertThrows(BizException.class, () -> service.initialize(208L, 9L));
BizException error = assertThrows(BizException.class, () -> service.initialize(208L, 9L, "客户"));
assertEquals(ResultCode.SERVICE_UNAVAILABLE, error.getResultCode());
verify(client, times(3)).initialize(anyString(), any(OverseasStorageFeeClient.InitializationRequest.class));
verify(client).compensate("internal-token", new OverseasStorageFeeClient.CompensationRequest(208L, "iam-customer-create-overseas-fee:208"));