This commit is contained in:
2026-08-04 14:15:55 +08:00
parent 694425690c
commit cd540f9b3e
6 changed files with 19 additions and 16 deletions
@@ -72,7 +72,7 @@ public class MerchantTenantController {
@PostMapping("/tenant/qualifications/submit-review")
@PreAuthorize("hasAuthority('merchant:qualification:upload')")
@Operation(summary = "提交当前企业资质审核", description = "校验四类必填资质齐全后创建审核单。上传或替换文件不会自动送审。")
@Operation(summary = "提交当前企业资质审核", description = "校验营业执照和法人身份证齐全后创建审核单;货代资质证书和银行开户许可证选填。上传或替换文件不会自动送审。")
public ApiResponse<TenantResponse> submitQualificationReview(@AuthenticationPrincipal AuthenticatedUser user) {
return ApiResponse.success(tenantService.submitMerchantReview(TenantGuard.tenant(user, "MERCHANT")));
}
@@ -35,7 +35,7 @@ import java.util.Set;
@Service
public class TenantService {
private static final Set<String> REQUIRED_QUALIFICATION_TYPES = Set.of(
"BUSINESS_LICENSE", "LEGAL_PERSON_ID", "FREIGHT_FORWARDER_CERTIFICATE", "BANK_ACCOUNT_LICENSE");
"BUSINESS_LICENSE", "LEGAL_PERSON_ID");
@Resource
private TenantRepository repository;
@Resource
@@ -273,7 +273,7 @@ public class TenantService {
var qualifications = profileRepository.findQualifications(tenantId);
if (!hasAllPendingQualifications(qualifications)) {
throw new BizException(ResultCode.BAD_REQUEST,
"Business license, legal-person ID, freight-forwarder certificate and bank account license are required / 营业执照、法人身份证、货代资质证书和银行开户许可证均为必填资质");
"Business license and legal-person ID are required / 营业执照和法人身份证为必填资质");
}
IamTenantReview review = new IamTenantReview();
review.setId(IdWorker.getId()); review.setTenantId(tenantId);
+1 -1
View File
@@ -481,7 +481,7 @@ paths:
post:
tags: [IAM Resources / IAM 资源]
summary: Submit enterprise qualifications for review / 提交企业资质审核
description: Uploading or replacing a qualification keeps the tenant in draft state. This endpoint creates the review only after all four required qualification types have been provided. / 上传或替换资质不会自动送审;四类必填资质齐全后由此接口创建审核单。
description: Uploading or replacing a qualification keeps the tenant in draft state. This endpoint creates the review after the business license and legal-person ID have been provided; the freight-forwarder certificate and bank account license are optional. / 上传或替换资质不会自动送审;营业执照和法人身份证齐全后由此接口创建审核单,货代资质证书和银行开户许可证选填。
responses:
'200': {$ref: '#/components/responses/TenantSuccess'}
'400': {$ref: '#/components/responses/BadRequest'}
@@ -134,7 +134,7 @@ class TenantServiceTest {
}
@Test
void explicitSubmissionRequiresAllPrototypeQualificationsAndCreatesReview() {
void explicitSubmissionRequiresOnlyBusinessLicenseAndLegalPersonIdAndCreatesReview() {
TenantRepository repository = mock(TenantRepository.class);
ProfileResourceRepository profileRepository = mock(ProfileResourceRepository.class);
TenantService service = new TenantService();
@@ -143,8 +143,7 @@ class TenantServiceTest {
IamTenant tenant = merchant(10001L, "PROFILE_REQUIRED");
when(repository.findTenantForUpdate(10001L)).thenReturn(tenant);
when(profileRepository.findQualifications(10001L)).thenReturn(List.of(
qualification("BUSINESS_LICENSE"), qualification("LEGAL_PERSON_ID"),
qualification("FREIGHT_FORWARDER_CERTIFICATE"), qualification("BANK_ACCOUNT_LICENSE")));
qualification("BUSINESS_LICENSE"), qualification("LEGAL_PERSON_ID")));
var submitted = service.submitMerchantReview(10001L);
@@ -162,7 +161,7 @@ class TenantServiceTest {
ReflectionTestUtils.setField(service, "profileRepository", profileRepository);
when(repository.findTenantForUpdate(10001L)).thenReturn(merchant(10001L, "PROFILE_REQUIRED"));
when(profileRepository.findQualifications(10001L)).thenReturn(List.of(
qualification("BUSINESS_LICENSE"), qualification("LEGAL_PERSON_ID")));
qualification("BUSINESS_LICENSE")));
BizException exception = assertThrows(BizException.class, () -> service.submitMerchantReview(10001L));
@@ -205,8 +204,7 @@ class TenantServiceTest {
when(repository.findReviewForUpdate(71L)).thenReturn(review);
when(repository.findTenant(10001L)).thenReturn(tenant);
when(profileRepository.findQualifications(10001L)).thenReturn(List.of(
qualification("BUSINESS_LICENSE"), qualification("LEGAL_PERSON_ID"),
qualification("FREIGHT_FORWARDER_CERTIFICATE"), qualification("BANK_ACCOUNT_LICENSE")));
qualification("BUSINESS_LICENSE"), qualification("LEGAL_PERSON_ID")));
when(provisioning.initialize(any())).thenReturn(
TenantAdministratorProvisioningService.ProvisioningResult.created(
81L, "merchant_10001", "Password1234"));
@@ -285,7 +283,7 @@ class TenantServiceTest {
}
@Test
void 企业激活不等于具备下单资格仍需四类资质全部审核通过() {
void 企业激活后仅需两类必填资质审核通过即可下单() {
TenantRepository repository = mock(TenantRepository.class);
ProfileResourceRepository profileRepository = mock(ProfileResourceRepository.class);
TenantService service = new TenantService();
@@ -295,8 +293,7 @@ class TenantServiceTest {
when(profileRepository.findQualifications(10001L)).thenReturn(
List.of(approvedQualification("BUSINESS_LICENSE")),
List.of(approvedQualification("BUSINESS_LICENSE"), approvedQualification("LEGAL_PERSON_ID"),
approvedQualification("FREIGHT_FORWARDER_CERTIFICATE"),
approvedQualification("BANK_ACCOUNT_LICENSE")));
rejectedQualification("FREIGHT_FORWARDER_CERTIFICATE")));
var withoutQualification = service.orderEligibility(10001L);
var withQualification = service.orderEligibility(10001L);
@@ -332,6 +329,12 @@ class TenantServiceTest {
return item;
}
private IamTenantQualification rejectedQualification(String type) {
IamTenantQualification item = qualification(type);
item.setStatus("REJECTED");
return item;
}
private IamTenantReview review(long id, long tenantId) {
IamTenantReview review = new IamTenantReview();
review.setId(id); review.setTenantId(tenantId); review.setStatus("PENDING");