feat(partner): complete proxy order with dual SMS and pickup
CI / verify (pull_request) Has been cancelled
CI / verify (pull_request) Has been cancelled
Add partner/customer SMS confirm, address auto-receive or on-site pickup, proxy placer fields, PARTNER_PROXY user source, and C-end badge. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -97,6 +97,7 @@ export class AuthService {
|
||||
case SmsScene.REDEEM_PHONE_CONFIRM:
|
||||
return ClientApp.SHOP_H5;
|
||||
case SmsScene.PARTNER_PROXY_ORDER:
|
||||
case SmsScene.PARTNER_PROXY_CUSTOMER:
|
||||
return ClientApp.PARTNER_H5;
|
||||
default:
|
||||
return ClientApp.USER_H5;
|
||||
@@ -155,13 +156,20 @@ export class AuthService {
|
||||
});
|
||||
return user ? { refType: 'USER', refId: user.id } : undefined;
|
||||
}
|
||||
case SmsScene.PARTNER_PROXY_ORDER: {
|
||||
case SmsScene.PARTNER_PROXY_CUSTOMER: {
|
||||
const user = await this.prisma.user.findFirst({
|
||||
where: { phone, mergedIntoUserId: null, status: 1 },
|
||||
select: { id: true },
|
||||
});
|
||||
return user ? { refType: 'USER', refId: user.id } : undefined;
|
||||
}
|
||||
case SmsScene.PARTNER_PROXY_ORDER: {
|
||||
const partner = await this.prisma.partnerAccount.findUnique({
|
||||
where: { phone },
|
||||
select: { id: true },
|
||||
});
|
||||
return partner ? { refType: 'PARTNER', refId: partner.id } : undefined;
|
||||
}
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
@@ -334,7 +342,11 @@ export class AuthService {
|
||||
if (!user.phoneVerifiedAt) throw new BadRequestException('用户手机号未验证,无法核销');
|
||||
return;
|
||||
}
|
||||
if (scene === SmsScene.PARTNER_PROXY_CUSTOMER) {
|
||||
return;
|
||||
}
|
||||
if (scene === SmsScene.PARTNER_PROXY_ORDER) {
|
||||
await this.assertPartnerAccountByPhone(phone);
|
||||
return;
|
||||
}
|
||||
if (scene === SmsScene.PARTNER_STORE_OPEN) {
|
||||
@@ -348,7 +360,14 @@ export class AuthService {
|
||||
}
|
||||
|
||||
/** 合伙人代下单:按手机号查找或创建已验证用户 */
|
||||
async findOrCreateUserByPhone(phone: string) {
|
||||
async findOrCreateUserByPhone(
|
||||
phone: string,
|
||||
source?: {
|
||||
sourceType?: 'PARTNER_PROXY';
|
||||
sourceRefId?: bigint;
|
||||
sourceLabel?: string;
|
||||
},
|
||||
) {
|
||||
const normalizedPhone = this.assertMobilePhone(phone);
|
||||
let user = await this.prisma.user.findUnique({
|
||||
where: { phone: normalizedPhone },
|
||||
@@ -362,6 +381,9 @@ export class AuthService {
|
||||
phoneVerifiedAt: new Date(),
|
||||
userNo: generateUserNo(),
|
||||
nickname: `用户${normalizedPhone.slice(-4)}`,
|
||||
sourceType: source?.sourceType ?? 'ORGANIC',
|
||||
sourceRefId: source?.sourceRefId,
|
||||
sourceLabel: source?.sourceLabel,
|
||||
cityPreference: {
|
||||
create: {
|
||||
selectedCityCode: '410100',
|
||||
|
||||
Reference in New Issue
Block a user