优化领取页角色绑定校验
This commit is contained in:
@@ -248,6 +248,16 @@ export function mapClaimKuaishouCloudFulfillment(task: TaskRow, order: OrderRow)
|
||||
const dispatch = source.dispatch && typeof source.dispatch === 'object' ? source.dispatch : {}
|
||||
const returnNumber = source.returnNumber && typeof source.returnNumber === 'object' ? source.returnNumber : {}
|
||||
const consume = source.consume && typeof source.consume === 'object' ? source.consume : {}
|
||||
const roleName = String(role.name || binding.roleName || '').trim()
|
||||
const roleId = String(role.rid || binding.roleId || '').trim()
|
||||
const defaultRoleName = String(role.defaultName || role.defaultRoleName || '').trim()
|
||||
const defaultRoleId = String(role.defaultRid || role.defaultRoleId || '').trim()
|
||||
const isDefaultRole =
|
||||
Boolean(roleName || roleId) &&
|
||||
isSameClaimKuaishouCloudRole(
|
||||
{ name: roleName, rid: roleId },
|
||||
{ name: defaultRoleName, rid: defaultRoleId },
|
||||
)
|
||||
|
||||
return {
|
||||
flowType: 'kuaishou_cloud',
|
||||
@@ -288,10 +298,16 @@ export function mapClaimKuaishouCloudFulfillment(task: TaskRow, order: OrderRow)
|
||||
},
|
||||
role: {
|
||||
status: String(role.status || 'pending').trim() || 'pending',
|
||||
name: String(role.name || binding.roleName || '').trim(),
|
||||
rid: String(role.rid || binding.roleId || '').trim(),
|
||||
name: roleName,
|
||||
rid: roleId,
|
||||
refreshedAt: role.refreshedAt || null,
|
||||
errorMessage: String(role.errorMessage || '').trim(),
|
||||
defaultName: defaultRoleName,
|
||||
defaultRid: defaultRoleId,
|
||||
defaultCapturedAt: role.defaultCapturedAt || null,
|
||||
defaultCaptureStatus: String(role.defaultCaptureStatus || '').trim(),
|
||||
defaultErrorMessage: String(role.defaultErrorMessage || '').trim(),
|
||||
isDefaultRole,
|
||||
},
|
||||
purchase: {
|
||||
autoBuyEnabled: purchase.autoBuyEnabled !== false,
|
||||
@@ -351,6 +367,28 @@ function isPlainObject(value: unknown): value is JsonObject {
|
||||
return Object.prototype.toString.call(value) === '[object Object]'
|
||||
}
|
||||
|
||||
function isSameClaimKuaishouCloudRole(
|
||||
left: { name?: unknown; rid?: unknown },
|
||||
right: { name?: unknown; rid?: unknown },
|
||||
) {
|
||||
const leftRid = String(left.rid || '').trim()
|
||||
const rightRid = String(right.rid || '').trim()
|
||||
if (leftRid && rightRid) {
|
||||
return leftRid === rightRid
|
||||
}
|
||||
|
||||
const leftName = normalizeClaimRoleNameForCompare(left.name)
|
||||
const rightName = normalizeClaimRoleNameForCompare(right.name)
|
||||
return Boolean(leftName && rightName && leftName === rightName)
|
||||
}
|
||||
|
||||
function normalizeClaimRoleNameForCompare(value: unknown) {
|
||||
return String(value || '')
|
||||
.trim()
|
||||
.toLowerCase()
|
||||
.replace(/\s+/g, '')
|
||||
}
|
||||
|
||||
function normalizeClaimDeliveryItems(value: unknown, binding: JsonObject) {
|
||||
const rawItems = Array.isArray(value) ? value : []
|
||||
const items = rawItems
|
||||
|
||||
@@ -26,6 +26,8 @@ import {
|
||||
import { isKuaishouEticketMockTicketCode } from '../platforms/kuaishou-eticket/mock-ticket-service.js'
|
||||
import {
|
||||
dispatchKuaishouCloudFulfillmentTask,
|
||||
hasKuaishouCloudCustomerRole,
|
||||
hasKuaishouCloudDefaultRoleSnapshot,
|
||||
maskCode,
|
||||
normalizeKuaishouCloudFlow,
|
||||
prepareKuaishouCloudFulfillmentTask,
|
||||
@@ -478,6 +480,19 @@ export async function confirmKuaishouCloudClaimRole(token: unknown) {
|
||||
})
|
||||
}
|
||||
|
||||
const hasDefaultRoleSnapshot = hasKuaishouCloudDefaultRoleSnapshot(flow)
|
||||
if (!mockMode && !hasKuaishouCloudCustomerRole(flow)) {
|
||||
const message = hasDefaultRoleSnapshot
|
||||
? '当前仍是虚拟机默认角色,请先重新绑定自己的角色信息'
|
||||
: '系统还未获取到虚拟机默认角色信息,请稍后刷新角色信息后再试'
|
||||
throw createHttpError(message, {
|
||||
statusCode: 409,
|
||||
errorCode: hasDefaultRoleSnapshot
|
||||
? 'claim_kuaishou_cloud_default_role_not_rebound'
|
||||
: 'claim_kuaishou_cloud_default_role_not_ready',
|
||||
})
|
||||
}
|
||||
|
||||
await updateTask(context.task.id, {
|
||||
task_status: TASK_STATUS.ROLE_CONFIRMED,
|
||||
role_id: flow.binding.roleId,
|
||||
|
||||
@@ -36,6 +36,7 @@ export async function syncKuaishouCloudRoleInfo(task: TaskRow) {
|
||||
source: 'claim_page_polling',
|
||||
actor: { source: 'system' },
|
||||
recordEvent: false,
|
||||
forceProbe: flow.role.isDefaultRole === true,
|
||||
})
|
||||
return result.task || task
|
||||
} catch {
|
||||
|
||||
Reference in New Issue
Block a user