- P0/P1:影子总账追加调整、关账/退款/资金/积分幂等、成本版本追溯、对账订单项维度 - 迁移收敛:原 103–114 合并为 103_finance_foundation、104_finance_controls、105_work_order_consignment - 数据:L1 钱包 BIGINT/CHECK/奖励幂等;重复奖励审计口径修正与人工核对清单 - 报表:销售毛利缺失成本收入提示,旧收支页明确现金流口径 - 文档:同步迁移基线、合并评估、代码复核与上线说明
161 lines
5.2 KiB
TypeScript
161 lines
5.2 KiB
TypeScript
import { Router } from 'express'
|
|
|
|
import { getAdminOrderDetail, getAdminOrders } from '../../services/admin/admin-read-service.js'
|
|
import { resendAdminOrderKuaishouIndustryVoucherCodes } from '../../services/admin/write/kuaishou-industry-actions.js'
|
|
import {
|
|
updateAdminOrderClaimStatus,
|
|
type UpdateOrderClaimStatusPayload,
|
|
} from '../../services/admin/write/order-actions.js'
|
|
import {
|
|
createManualRefund,
|
|
listOrderRefunds,
|
|
voidOrderRefund,
|
|
} from '../../services/finance/order-refund-service.js'
|
|
import { createJsonHandler, requireAdminPermission, requireAdminRoles } from './session.js'
|
|
import type { AdminOrderRouteParams, AdminOrderRouteQuery } from '../../types/admin/route-inputs.js'
|
|
|
|
const router = Router()
|
|
|
|
router.use('/orders', requireAdminRoles(['admin', 'operator', 'support', 'finance']))
|
|
|
|
router.get(
|
|
'/orders',
|
|
createJsonHandler((req) => getAdminOrders(req.query as AdminOrderRouteQuery), {
|
|
successMessage: 'ok',
|
|
errorMessage: '读取订单列表失败',
|
|
scope: '[admin/orders]',
|
|
}),
|
|
)
|
|
|
|
router.get(
|
|
'/orders/:orderId',
|
|
createJsonHandler(
|
|
(req) =>
|
|
getAdminOrderDetail(
|
|
String((req.params as AdminOrderRouteParams).orderId || ''),
|
|
req.adminSession || null,
|
|
),
|
|
{
|
|
successMessage: 'ok',
|
|
errorMessage: '读取订单详情失败',
|
|
scope: '[admin/orders/:orderId]',
|
|
},
|
|
),
|
|
)
|
|
|
|
router.post(
|
|
'/orders/:orderId/claim-status',
|
|
requireAdminRoles(['admin', 'operator', 'support']),
|
|
createJsonHandler(
|
|
(req) =>
|
|
updateAdminOrderClaimStatus(
|
|
String((req.params as AdminOrderRouteParams).orderId || ''),
|
|
req.body as UpdateOrderClaimStatusPayload,
|
|
req.adminSession || null,
|
|
),
|
|
{
|
|
successMessage: '订单兑换状态已更新',
|
|
errorMessage: '更新订单兑换状态失败',
|
|
scope: '[admin/orders/:orderId/claim-status]',
|
|
audit: (req, data) => ({
|
|
action: 'order_claim_status_update',
|
|
targetType: 'order',
|
|
targetId: String((req.params as AdminOrderRouteParams).orderId || ''),
|
|
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
|
|
}),
|
|
},
|
|
),
|
|
)
|
|
|
|
router.post(
|
|
'/orders/:orderId/kuaishou-industry/resend-code',
|
|
requireAdminRoles(['admin', 'operator', 'support']),
|
|
createJsonHandler(
|
|
(req) =>
|
|
resendAdminOrderKuaishouIndustryVoucherCodes(
|
|
String((req.params as AdminOrderRouteParams).orderId || ''),
|
|
req.adminSession || null,
|
|
),
|
|
{
|
|
successMessage: '电子凭证发码回调已重发',
|
|
errorMessage: '重发电子凭证发码回调失败',
|
|
scope: '[admin/orders/:orderId/kuaishou-industry/resend-code]',
|
|
audit: (req, data) => ({
|
|
action: 'order_kuaishou_industry_resend_code',
|
|
targetType: 'order',
|
|
targetId: String((req.params as AdminOrderRouteParams).orderId || ''),
|
|
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
|
|
}),
|
|
},
|
|
),
|
|
)
|
|
|
|
router.get(
|
|
'/orders/:orderId/refunds',
|
|
requireAdminPermission('finance.view'),
|
|
createJsonHandler(
|
|
(req) => listOrderRefunds(String((req.params as AdminOrderRouteParams).orderId || '')),
|
|
{
|
|
successMessage: 'ok',
|
|
errorMessage: '读取退款记录失败',
|
|
scope: '[admin/orders/:orderId/refunds]',
|
|
},
|
|
),
|
|
)
|
|
|
|
router.post(
|
|
'/orders/:orderId/refunds',
|
|
requireAdminPermission('finance.post'),
|
|
createJsonHandler(
|
|
(req) =>
|
|
createManualRefund(
|
|
{
|
|
orderId: String((req.params as AdminOrderRouteParams).orderId || ''),
|
|
orderItemId: (req.body as Record<string, unknown>)?.orderItemId as string | undefined,
|
|
amountFen: (req.body as Record<string, unknown>)?.amountFen as string | undefined,
|
|
reason: (req.body as Record<string, unknown>)?.reason as string | undefined,
|
|
note: (req.body as Record<string, unknown>)?.note as string | undefined,
|
|
refundedAt: (req.body as Record<string, unknown>)?.refundedAt as string | undefined,
|
|
},
|
|
req.adminSession || null,
|
|
),
|
|
{
|
|
successMessage: '退款已登记',
|
|
errorMessage: '登记退款失败',
|
|
scope: '[admin/orders/:orderId/refunds]',
|
|
audit: (req, data) => ({
|
|
action: 'order_refund_created',
|
|
targetType: 'order',
|
|
targetId: String((req.params as AdminOrderRouteParams).orderId || ''),
|
|
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
|
|
}),
|
|
},
|
|
),
|
|
)
|
|
|
|
router.post(
|
|
'/orders/:orderId/refunds/:refundId/void',
|
|
requireAdminPermission('finance.post'),
|
|
createJsonHandler(
|
|
(req) =>
|
|
voidOrderRefund(
|
|
String((req.params as Record<string, string>).refundId || ''),
|
|
{ reason: String((req.body as Record<string, unknown>)?.reason || '') },
|
|
req.adminSession || null,
|
|
),
|
|
{
|
|
successMessage: '退款已撤销',
|
|
errorMessage: '撤销退款失败',
|
|
scope: '[admin/orders/:orderId/refunds/:refundId/void]',
|
|
audit: (req, data) => ({
|
|
action: 'order_refund_voided',
|
|
targetType: 'order_refund',
|
|
targetId: String((req.params as Record<string, string>).refundId || ''),
|
|
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
|
|
}),
|
|
},
|
|
),
|
|
)
|
|
|
|
export default router
|