feat(worker-platform): 接单平台全面改用内部统一工单号,隐藏第三方平台单号防泄漏
1. 新增业务工单单号生成器 generateWorkOrderNo(),生成 WO+年月日+时分+随机数的统一内部单号(如 WO26091216358821); 2. 接单平台抢单大厅、订单列表、详情抽屉、模态弹窗及售后全面切换为展示 workOrderNo,彻底屏蔽拼多多/快手等第三方平台来源标识; 3. 打手资金明细补充关联内部工单号 relatedWorkOrderNo,避免打手在账单中识别原平台; 4. 管理后台工单面板升级为双单号清晰展示(高亮内部工单号 + 辅助可复制平台单号),兼顾打手对单与官方平台售后溯源。
This commit is contained in:
@@ -152,6 +152,7 @@ export type WorkerWalletLedgerRow = {
|
||||
note: string
|
||||
payload_json: string | Record<string, unknown>
|
||||
created_at: string
|
||||
related_work_order_no?: string | null
|
||||
related_platform_order_id?: string | null
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ export async function listWorkerWalletLedgers({
|
||||
const offset = (page - 1) * pageSize
|
||||
params.push(pageSize, offset)
|
||||
const itemsResult = await query<WorkerWalletLedgerRow>(
|
||||
`SELECT wwl.*, wo.platform_order_id AS related_platform_order_id
|
||||
`SELECT wwl.*, wo.work_order_no AS related_work_order_no, wo.platform_order_id AS related_platform_order_id
|
||||
FROM worker_wallet_ledgers wwl
|
||||
LEFT JOIN work_orders wo ON wo.id = wwl.related_work_order_id
|
||||
${whereClause}
|
||||
|
||||
@@ -12,7 +12,7 @@ import {
|
||||
} from '../../repositories/worker-platform/index.js'
|
||||
import type { JsonObject } from '../../types/json.js'
|
||||
import { createHttpError } from '../../utils/http.js'
|
||||
import { randomId } from '../../utils/random.js'
|
||||
import { generateWorkOrderNo, randomId } from '../../utils/random.js'
|
||||
import { nowIso } from '../../utils/time.js'
|
||||
import {
|
||||
getKuaishouIndustrySourceConfig,
|
||||
@@ -103,7 +103,7 @@ export async function createAdminMockWorkOrder(payload: JsonObject = {}) {
|
||||
},
|
||||
}
|
||||
const workOrder = await createWorkOrder({
|
||||
workOrderNo: randomId('WO'),
|
||||
workOrderNo: generateWorkOrderNo(),
|
||||
platformOrderId,
|
||||
productName,
|
||||
categoryId,
|
||||
|
||||
@@ -17,7 +17,7 @@ import {
|
||||
} from '../../repositories/worker-platform/index.js'
|
||||
import type { JsonObject } from '../../types/json.js'
|
||||
import type { OrderItemRow, OrderRow } from '../../types/repository/rows.js'
|
||||
import { randomId } from '../../utils/random.js'
|
||||
import { generateWorkOrderNo, randomId } from '../../utils/random.js'
|
||||
import { nowIso } from '../../utils/time.js'
|
||||
import { logInfo, logWarn } from '../../utils/logger.js'
|
||||
import { safeParseJson } from '../admin/admin-query-utils.js'
|
||||
@@ -173,7 +173,7 @@ export async function syncWorkerOrdersForSourceOrder(
|
||||
const now = nowIso()
|
||||
const materialComplete = fields.every((field) => !field.required)
|
||||
const workOrder = await createWorkOrder({
|
||||
workOrderNo: randomId('WO'),
|
||||
workOrderNo: generateWorkOrderNo(),
|
||||
productRuleId: Number(rule.id),
|
||||
orderId: Number(order.id),
|
||||
orderItemId: Number(item.id),
|
||||
|
||||
@@ -272,6 +272,7 @@ export function mapWalletLedger(ledger: WorkerWalletLedgerRow | null | undefined
|
||||
balanceAfter: Number(ledger.balance_after || 0),
|
||||
frozenAfter: Number(ledger.frozen_after || 0),
|
||||
relatedWorkOrderId: ledger.related_work_order_id ? Number(ledger.related_work_order_id) : null,
|
||||
relatedWorkOrderNo: String(ledger.related_work_order_no || '').trim() || null,
|
||||
relatedPlatformOrderId: String(ledger.related_platform_order_id || '').trim() || null,
|
||||
auditStatus: ledger.audit_status || '',
|
||||
note: ledger.note || '',
|
||||
|
||||
@@ -7,3 +7,17 @@ export function randomToken(bytes = 24): string {
|
||||
export function randomId(prefix: string, bytes = 6): string {
|
||||
return `${prefix}${crypto.randomBytes(bytes).toString('hex')}`
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate formatted internal work order number
|
||||
* 生成系统标准内部工单号,如:WO26091216358821 (WO + 年月日 + 4位时分 + 4位随机)
|
||||
*/
|
||||
export function generateWorkOrderNo(date: Date = new Date()): string {
|
||||
const yy = String(date.getFullYear()).slice(-2)
|
||||
const mm = String(date.getMonth() + 1).padStart(2, "0")
|
||||
const dd = String(date.getDate()).padStart(2, "0")
|
||||
const hh = String(date.getHours()).padStart(2, "0")
|
||||
const min = String(date.getMinutes()).padStart(2, "0")
|
||||
const rand = Math.floor(1000 + Math.random() * 9000)
|
||||
return `WO${yy}${mm}${dd}${hh}${min}${rand}`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user