fix(iam): scope customer nickname to customer management
This commit is contained in:
@@ -331,7 +331,7 @@ CREATE TABLE IF NOT EXISTS iam_tenant (
|
|||||||
id BIGINT NOT NULL COMMENT '客户主档ID(雪花ID);0保留为平台技术作用域',
|
id BIGINT NOT NULL COMMENT '客户主档ID(雪花ID);0保留为平台技术作用域',
|
||||||
tenant_code VARCHAR(8) NOT NULL COMMENT '客户编号:企业客户固定五位数字,平台技术主体为PLATFORM',
|
tenant_code VARCHAR(8) NOT NULL COMMENT '客户编号:企业客户固定五位数字,平台技术主体为PLATFORM',
|
||||||
tenant_name VARCHAR(128) NOT NULL COMMENT '客户企业名称',
|
tenant_name VARCHAR(128) NOT NULL COMMENT '客户企业名称',
|
||||||
customer_nickname VARCHAR(32) NOT NULL COMMENT '客户昵称:非法定展示及打印使用,创建时默认取公司名称中文拼音大写首字母',
|
customer_nickname VARCHAR(32) NOT NULL COMMENT '客户昵称:创建时默认取公司名称中文拼音大写首字母,可修改',
|
||||||
tenant_type VARCHAR(20) NOT NULL DEFAULT 'MERCHANT' COMMENT '主体类型:MERCHANT企业客户',
|
tenant_type VARCHAR(20) NOT NULL DEFAULT 'MERCHANT' COMMENT '主体类型:MERCHANT企业客户',
|
||||||
status VARCHAR(20) NOT NULL DEFAULT 'PROFILE_REQUIRED' COMMENT '客户状态:PROFILE_REQUIRED待完善资料、PENDING待审核、ACTIVE正常、REJECTED已驳回、DISABLED已停用',
|
status VARCHAR(20) NOT NULL DEFAULT 'PROFILE_REQUIRED' COMMENT '客户状态:PROFILE_REQUIRED待完善资料、PENDING待审核、ACTIVE正常、REJECTED已驳回、DISABLED已停用',
|
||||||
legal_name VARCHAR(128) NULL COMMENT '企业法定名称',
|
legal_name VARCHAR(128) NULL COMMENT '企业法定名称',
|
||||||
@@ -1250,7 +1250,7 @@ SET @customer_nickname_ddl = (SELECT IF(
|
|||||||
EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE()
|
EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE()
|
||||||
AND table_name='iam_tenant' AND column_name='customer_nickname'),
|
AND table_name='iam_tenant' AND column_name='customer_nickname'),
|
||||||
'SELECT 1',
|
'SELECT 1',
|
||||||
'ALTER TABLE iam_tenant ADD COLUMN customer_nickname VARCHAR(32) NULL COMMENT ''客户昵称:非法定展示及打印使用,创建时默认取公司名称中文拼音大写首字母'' AFTER tenant_name'));
|
'ALTER TABLE iam_tenant ADD COLUMN customer_nickname VARCHAR(32) NULL COMMENT ''客户昵称:创建时默认取公司名称中文拼音大写首字母,可修改'' AFTER tenant_name'));
|
||||||
PREPARE customer_nickname_stmt FROM @customer_nickname_ddl;
|
PREPARE customer_nickname_stmt FROM @customer_nickname_ddl;
|
||||||
EXECUTE customer_nickname_stmt;
|
EXECUTE customer_nickname_stmt;
|
||||||
DEALLOCATE PREPARE customer_nickname_stmt;
|
DEALLOCATE PREPARE customer_nickname_stmt;
|
||||||
@@ -15266,7 +15266,7 @@ CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'service_package', '客户
|
|||||||
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'status', '客户状态:PROFILE_REQUIRED待完善资料、PENDING待审核、ACTIVE正常、REJECTED已驳回、DISABLED已停用');
|
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'status', '客户状态:PROFILE_REQUIRED待完善资料、PENDING待审核、ACTIVE正常、REJECTED已驳回、DISABLED已停用');
|
||||||
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'tenant_code', '客户编号:企业客户固定五位数字,平台技术主体为PLATFORM');
|
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'tenant_code', '客户编号:企业客户固定五位数字,平台技术主体为PLATFORM');
|
||||||
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'tenant_name', '客户企业名称');
|
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'tenant_name', '客户企业名称');
|
||||||
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'customer_nickname', '客户昵称:非法定展示及打印使用,创建时默认取公司名称中文拼音大写首字母');
|
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'customer_nickname', '客户昵称:创建时默认取公司名称中文拼音大写首字母,可修改');
|
||||||
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'tenant_type', '主体类型:MERCHANT企业客户');
|
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'tenant_type', '主体类型:MERCHANT企业客户');
|
||||||
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'unified_social_credit_code', '统一社会信用代码');
|
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'unified_social_credit_code', '统一社会信用代码');
|
||||||
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'updated_at', '更新时间');
|
CALL queue_column_comment('baiyue_iam', 'iam_tenant', 'updated_at', '更新时间');
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public final class TenantDtos {
|
|||||||
@Schema(name = "PlatformTenantUpdateRequest", description = "Platform maintained merchant tenant profile")
|
@Schema(name = "PlatformTenantUpdateRequest", description = "Platform maintained merchant tenant profile")
|
||||||
public record UpdateTenantRequest(
|
public record UpdateTenantRequest(
|
||||||
@NotBlank String tenantName,
|
@NotBlank String tenantName,
|
||||||
@Schema(description = "Customer nickname used by non-legal displays and printing / 非法定展示及打印使用的客户昵称") @NotBlank @Size(max = 32) String customerNickname,
|
@Schema(description = "Customer nickname / 客户昵称") @NotBlank @Size(max = 32) String customerNickname,
|
||||||
@NotBlank String legalName,
|
@NotBlank String legalName,
|
||||||
@Size(max = 64) String legalRepresentative,
|
@Size(max = 64) String legalRepresentative,
|
||||||
@NotBlank String contactName,
|
@NotBlank String contactName,
|
||||||
@@ -146,6 +146,6 @@ public final class TenantDtos {
|
|||||||
String internalRemark, LocalDateTime createdAt, LocalDateTime approvedAt) { }
|
String internalRemark, LocalDateTime createdAt, LocalDateTime approvedAt) { }
|
||||||
|
|
||||||
/** Full customer contact summary for trusted internal finance read models. */
|
/** Full customer contact summary for trusted internal finance read models. */
|
||||||
public record FinanceCustomerSummary(Long id, String tenantCode, String tenantName, String customerNickname, String status,
|
public record FinanceCustomerSummary(Long id, String tenantCode, String tenantName, String status,
|
||||||
String contactName, String contactPhone) { }
|
String contactName, String contactPhone) { }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ public class TenantService {
|
|||||||
public PageResult<FinanceCustomerSummary> pageFinanceCustomers(long page, long size, String keyword, String status, Long customerId) {
|
public PageResult<FinanceCustomerSummary> pageFinanceCustomers(long page, long size, String keyword, String status, Long customerId) {
|
||||||
PageResult<IamTenant> source = repository.pageFinanceCustomers(page, size, keyword, status, customerId);
|
PageResult<IamTenant> source = repository.pageFinanceCustomers(page, size, keyword, status, customerId);
|
||||||
return new PageResult<>(source.records().stream().map(tenant -> new FinanceCustomerSummary(
|
return new PageResult<>(source.records().stream().map(tenant -> new FinanceCustomerSummary(
|
||||||
tenant.getId(), tenant.getTenantCode(), tenant.getTenantName(), tenant.getCustomerNickname(), tenant.getStatus(),
|
tenant.getId(), tenant.getTenantCode(), tenant.getTenantName(), tenant.getStatus(),
|
||||||
tenant.getContactName(), tenant.getContactPhone())).toList(),
|
tenant.getContactName(), tenant.getContactPhone())).toList(),
|
||||||
source.page(), source.size(), source.total(), source.pages());
|
source.page(), source.size(), source.total(), source.pages());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ CREATE TABLE IF NOT EXISTS iam_tenant (
|
|||||||
id BIGINT NOT NULL COMMENT '客户主档ID(雪花ID);0保留为平台技术作用域',
|
id BIGINT NOT NULL COMMENT '客户主档ID(雪花ID);0保留为平台技术作用域',
|
||||||
tenant_code VARCHAR(8) NOT NULL COMMENT '客户编号:企业客户固定五位数字,平台技术主体为PLATFORM',
|
tenant_code VARCHAR(8) NOT NULL COMMENT '客户编号:企业客户固定五位数字,平台技术主体为PLATFORM',
|
||||||
tenant_name VARCHAR(128) NOT NULL COMMENT '客户企业名称',
|
tenant_name VARCHAR(128) NOT NULL COMMENT '客户企业名称',
|
||||||
customer_nickname VARCHAR(32) NOT NULL COMMENT '客户昵称:非法定展示及打印使用,创建时默认取公司名称中文拼音大写首字母',
|
customer_nickname VARCHAR(32) NOT NULL COMMENT '客户昵称:创建时默认取公司名称中文拼音大写首字母,可修改',
|
||||||
tenant_type VARCHAR(20) NOT NULL DEFAULT 'MERCHANT' COMMENT '主体类型:MERCHANT企业客户',
|
tenant_type VARCHAR(20) NOT NULL DEFAULT 'MERCHANT' COMMENT '主体类型:MERCHANT企业客户',
|
||||||
status VARCHAR(20) NOT NULL DEFAULT 'PROFILE_REQUIRED' COMMENT '客户状态:PROFILE_REQUIRED待完善资料、PENDING待审核、ACTIVE正常、REJECTED已驳回、DISABLED已停用、ARCHIVED已归档',
|
status VARCHAR(20) NOT NULL DEFAULT 'PROFILE_REQUIRED' COMMENT '客户状态:PROFILE_REQUIRED待完善资料、PENDING待审核、ACTIVE正常、REJECTED已驳回、DISABLED已停用、ARCHIVED已归档',
|
||||||
dimension_initialization_status VARCHAR(16) NOT NULL DEFAULT 'READY' COMMENT '默认尺寸初始化状态:PENDING待处理、READY已就绪、FAILED失败',
|
dimension_initialization_status VARCHAR(16) NOT NULL DEFAULT 'READY' COMMENT '默认尺寸初始化状态:PENDING待处理、READY已就绪、FAILED失败',
|
||||||
|
|||||||
@@ -1311,7 +1311,7 @@ components:
|
|||||||
id: {type: string, pattern: '^\d+$', example: '190000000000000001'}
|
id: {type: string, pattern: '^\d+$', example: '190000000000000001'}
|
||||||
tenantCode: {type: string, pattern: '^\d{5}$', example: '00001'}
|
tenantCode: {type: string, pattern: '^\d{5}$', example: '00001'}
|
||||||
tenantName: {type: string}
|
tenantName: {type: string}
|
||||||
customerNickname: {type: string, maxLength: 32, description: 客户昵称;非法定展示及打印使用}
|
customerNickname: {type: string, maxLength: 32, description: 客户昵称}
|
||||||
status: {type: string, enum: [PROFILE_REQUIRED, PENDING, ACTIVE, REJECTED, DISABLED, ARCHIVED]}
|
status: {type: string, enum: [PROFILE_REQUIRED, PENDING, ACTIVE, REJECTED, DISABLED, ARCHIVED]}
|
||||||
dimensionInitializationStatus: {type: string, enum: [PENDING, READY, FAILED], description: 客户默认尺寸初始化状态;未 READY 时依赖该配置的业务失败关闭}
|
dimensionInitializationStatus: {type: string, enum: [PENDING, READY, FAILED], description: 客户默认尺寸初始化状态;未 READY 时依赖该配置的业务失败关闭}
|
||||||
legalName: {type: string}
|
legalName: {type: string}
|
||||||
@@ -1345,12 +1345,11 @@ components:
|
|||||||
updatedAt: {type: string, format: date-time}
|
updatedAt: {type: string, format: date-time}
|
||||||
FinanceCustomerSummary:
|
FinanceCustomerSummary:
|
||||||
type: object
|
type: object
|
||||||
required: [id, tenantCode, tenantName, customerNickname, status]
|
required: [id, tenantCode, tenantName, status]
|
||||||
properties:
|
properties:
|
||||||
id: {type: string, pattern: '^\d+$'}
|
id: {type: string, pattern: '^\d+$'}
|
||||||
tenantCode: {type: string, pattern: '^\d{5}$', example: '00001'}
|
tenantCode: {type: string, pattern: '^\d{5}$', example: '00001'}
|
||||||
tenantName: {type: string}
|
tenantName: {type: string}
|
||||||
customerNickname: {type: string, maxLength: 32, description: 非法定展示及打印使用的客户昵称}
|
|
||||||
status: {type: string, enum: [ACTIVE, DISABLED]}
|
status: {type: string, enum: [ACTIVE, DISABLED]}
|
||||||
contactName: {type: string, nullable: true}
|
contactName: {type: string, nullable: true}
|
||||||
contactPhone: {type: string, nullable: true}
|
contactPhone: {type: string, nullable: true}
|
||||||
@@ -1492,7 +1491,7 @@ components:
|
|||||||
required: [tenantName, customerNickname, legalName, contactName, contactPhone]
|
required: [tenantName, customerNickname, legalName, contactName, contactPhone]
|
||||||
properties:
|
properties:
|
||||||
tenantName: {type: string}
|
tenantName: {type: string}
|
||||||
customerNickname: {type: string, maxLength: 32, description: 客户昵称;非法定展示及打印使用}
|
customerNickname: {type: string, maxLength: 32, description: 客户昵称}
|
||||||
legalName: {type: string}
|
legalName: {type: string}
|
||||||
legalRepresentative: {type: string, maxLength: 64, nullable: true, description: 选填}
|
legalRepresentative: {type: string, maxLength: 64, nullable: true, description: 选填}
|
||||||
contactName: {type: string}
|
contactName: {type: string}
|
||||||
|
|||||||
@@ -339,7 +339,7 @@ class TenantServiceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void customerNicknameDefaultsToFirstChineseCharacterAndAcceptsManualValue() {
|
void customerNicknameDefaultsToUppercasePinyinInitialsAndAcceptsManualValue() {
|
||||||
assertEquals("SZWLYXGS", TenantService.resolveCustomerNickname(null, "ABC 深圳物流有限公司"));
|
assertEquals("SZWLYXGS", TenantService.resolveCustomerNickname(null, "ABC 深圳物流有限公司"));
|
||||||
assertEquals("SZWL", TenantService.resolveCustomerNickname(null, "深圳物流"));
|
assertEquals("SZWL", TenantService.resolveCustomerNickname(null, "深圳物流"));
|
||||||
assertEquals("A", TenantService.resolveCustomerNickname(" ", "ABC Logistics"));
|
assertEquals("A", TenantService.resolveCustomerNickname(" ", "ABC Logistics"));
|
||||||
|
|||||||
Reference in New Issue
Block a user