新增快手电子凭证后台工具

This commit is contained in:
yml2213
2026-07-09 18:39:34 +08:00
parent 1bfb32dcd0
commit c61078d3f6
29 changed files with 3034 additions and 474 deletions
@@ -0,0 +1,179 @@
import { Router } from 'express'
import {
approveAdminKuaishouIndustryRefund,
checkAdminKuaishouIndustryVoucherAvailable,
consumeAdminKuaishouIndustryVoucherByCode,
disagreeAdminKuaishouIndustryRefund,
listAdminKuaishouIndustryRefunds,
listAdminKuaishouIndustryVouchers,
resendAdminKuaishouIndustryVoucherCode,
reverseAdminKuaishouIndustryVoucher,
} from '../../services/admin/kuaishou-industry-admin-service.js'
import { createJsonHandler, requireAdminRoles } from './session.js'
import type {
AdminKuaishouIndustryRefundApproveRouteBody,
AdminKuaishouIndustryRefundDisagreeRouteBody,
AdminKuaishouIndustryRefundListRouteBody,
AdminKuaishouIndustryVoucherCheckAvailableRouteBody,
AdminKuaishouIndustryVoucherConsumeRouteBody,
AdminKuaishouIndustryVoucherResendRouteBody,
AdminKuaishouIndustryVoucherReverseRouteBody,
} from '../../types/admin/route-inputs.js'
import type { KuaishouIndustryVoucherAdminListQuery } from '../../repositories/kuaishou-industry-voucher-repo.js'
const router = Router()
router.get(
'/kuaishou-industry/vouchers',
createJsonHandler(
(req) => listAdminKuaishouIndustryVouchers(req.query as KuaishouIndustryVoucherAdminListQuery),
{
successMessage: 'ok',
errorMessage: '查询快手行业电子凭证失败',
scope: '[admin/kuaishou-industry/vouchers]',
},
),
)
router.post(
'/kuaishou-industry/refunds/list',
requireAdminRoles(['admin', 'operator']),
createJsonHandler(
(req) => listAdminKuaishouIndustryRefunds(req.body as AdminKuaishouIndustryRefundListRouteBody),
{
successMessage: '售后单列表已查询',
errorMessage: '查询快手售后单列表失败',
scope: '[admin/kuaishou-industry/refunds/list]',
audit: (req, data) => buildKuaishouIndustryAudit('kuaishou_industry_refund_list', req.body, data),
},
),
)
router.post(
'/kuaishou-industry/refunds/approve',
requireAdminRoles(['admin', 'operator']),
createJsonHandler(
(req) =>
approveAdminKuaishouIndustryRefund(req.body as AdminKuaishouIndustryRefundApproveRouteBody),
{
successMessage: '同意退款接口已执行',
errorMessage: '执行同意退款失败',
scope: '[admin/kuaishou-industry/refunds/approve]',
audit: (req, data) => buildKuaishouIndustryAudit('kuaishou_industry_refund_approve', req.body, data),
},
),
)
router.post(
'/kuaishou-industry/refunds/disagree',
requireAdminRoles(['admin', 'operator']),
createJsonHandler(
(req) =>
disagreeAdminKuaishouIndustryRefund(req.body as AdminKuaishouIndustryRefundDisagreeRouteBody),
{
successMessage: '不同意退款接口已执行',
errorMessage: '执行不同意退款失败',
scope: '[admin/kuaishou-industry/refunds/disagree]',
audit: (req, data) => buildKuaishouIndustryAudit('kuaishou_industry_refund_disagree', req.body, data),
},
),
)
router.post(
'/kuaishou-industry/vouchers/check-available',
requireAdminRoles(['admin', 'operator']),
createJsonHandler(
(req) =>
checkAdminKuaishouIndustryVoucherAvailable(
req.body as AdminKuaishouIndustryVoucherCheckAvailableRouteBody,
),
{
successMessage: '电子凭证有效性已检查',
errorMessage: '检查电子凭证有效性失败',
scope: '[admin/kuaishou-industry/vouchers/check-available]',
audit: (req, data) => buildKuaishouIndustryAudit('kuaishou_industry_voucher_check_available', req.body, data),
},
),
)
router.post(
'/kuaishou-industry/vouchers/reverse',
requireAdminRoles(['admin', 'operator']),
createJsonHandler(
(req) =>
reverseAdminKuaishouIndustryVoucher(req.body as AdminKuaishouIndustryVoucherReverseRouteBody),
{
successMessage: '电子凭证冲正回调已执行',
errorMessage: '执行电子凭证冲正失败',
scope: '[admin/kuaishou-industry/vouchers/reverse]',
audit: (req, data) => buildKuaishouIndustryAudit('kuaishou_industry_voucher_reverse', req.body, data),
},
),
)
router.post(
'/kuaishou-industry/vouchers/consume',
requireAdminRoles(['admin', 'operator']),
createJsonHandler(
(req) =>
consumeAdminKuaishouIndustryVoucherByCode(
req.body as AdminKuaishouIndustryVoucherConsumeRouteBody,
),
{
successMessage: '电子凭证已手动核销',
errorMessage: '手动核销电子凭证失败',
scope: '[admin/kuaishou-industry/vouchers/consume]',
audit: (req, data) => buildKuaishouIndustryAudit('kuaishou_industry_voucher_consume', req.body, data),
},
),
)
router.post(
'/kuaishou-industry/vouchers/resend-code',
requireAdminRoles(['admin', 'operator']),
createJsonHandler(
(req) =>
resendAdminKuaishouIndustryVoucherCode(
req.body as AdminKuaishouIndustryVoucherResendRouteBody,
),
{
successMessage: '电子凭证发码回调已重发',
errorMessage: '重发电子凭证发码回调失败',
scope: '[admin/kuaishou-industry/vouchers/resend-code]',
audit: (req, data) => buildKuaishouIndustryAudit('kuaishou_industry_voucher_resend_code', req.body, data),
},
),
)
function buildKuaishouIndustryAudit(action: string, body: unknown, data: unknown) {
const payload = body && typeof body === 'object' ? body as Record<string, unknown> : {}
const result = data && typeof data === 'object' ? data as Record<string, unknown> : {}
return {
action,
targetType: 'kuaishou_industry',
targetId: resolveAuditTargetId(payload),
data: {
sellerId: String(payload.sellerId || ''),
oid: String(payload.oid || payload.orderId || ''),
voucherCode: String(payload.voucherCode || ''),
refundId: String(payload.refundId || ''),
success: Boolean(result.success),
httpStatus: Number(result.httpStatus || 0) || 0,
error: String(result.error || ''),
},
}
}
function resolveAuditTargetId(payload: Record<string, unknown>): string {
return String(
payload.voucherCode ||
payload.refundId ||
payload.oid ||
payload.orderId ||
payload.sellerId ||
'kuaishou-industry',
)
}
export default router