彻底重构-4

This commit is contained in:
yml
2026-04-09 15:51:24 +08:00
parent 60054adcc4
commit 4c395103a9
28 changed files with 1917 additions and 404 deletions
-79
View File
@@ -1,79 +0,0 @@
import { Router } from 'express'
import {
createAdminCdk,
getAdminCdks,
importAdminCdks,
invalidateAdminCdk,
releaseAdminInventoryCdk,
} from '../../services/admin/admin-service.js'
import { createJsonHandler, requireAdminRoles } from './shared.js'
const router = Router()
router.get('/cdks', createJsonHandler(
(req) => getAdminCdks(req.query),
{
successMessage: 'ok',
errorMessage: '读取 CDK 列表失败',
scope: '[admin/cdks]',
},
))
router.post('/cdks', createJsonHandler(
(req) => createAdminCdk(req.body),
{
successMessage: 'CDK 已新增',
errorMessage: '新增 CDK 失败',
scope: '[admin/cdks]',
},
))
router.post('/cdks/import', createJsonHandler(
(req) => importAdminCdks(req.body),
{
successMessage: '导入完成',
errorMessage: '导入 CDK 失败',
scope: '[admin/cdks/import]',
},
))
router.post('/cdks/:cdkId/release', requireAdminRoles(['admin']), createJsonHandler(
(req) => releaseAdminInventoryCdk(req.params.cdkId),
{
successMessage: 'CDK 已释放',
errorMessage: '释放库存 CDK 失败',
scope: '[admin/cdks/:cdkId/release]',
audit: (req, data) => ({
action: 'inventory_cdk_released',
targetType: 'cdk',
targetId: String(req.params.cdkId),
data: {
cdkId: data.cdk?.cdkId,
skuCode: data.cdk?.skuCode,
cdkCode: data.cdk?.cdkCode,
},
}),
},
))
router.post('/cdks/:cdkId/invalidate', requireAdminRoles(['admin']), createJsonHandler(
(req) => invalidateAdminCdk(req.params.cdkId, req.body),
{
successMessage: 'CDK 已作废',
errorMessage: '作废 CDK 失败',
scope: '[admin/cdks/:cdkId/invalidate]',
audit: (req, data) => ({
action: 'inventory_cdk_invalidated',
targetType: 'cdk',
targetId: String(req.params.cdkId),
data: {
cdkId: data.cdk?.cdkId,
skuCode: data.cdk?.skuCode,
invalidReason: data.cdk?.invalidReason,
},
}),
},
))
export default router
@@ -0,0 +1,79 @@
import { Router } from 'express'
import {
createAdminInventoryItem,
getAdminInventoryItems,
importAdminInventoryItems,
invalidateAdminInventoryItem,
releaseAdminInventoryItem,
} from '../../services/admin/admin-service.js'
import { createJsonHandler, requireAdminRoles } from './shared.js'
const router = Router()
router.get('/inventory', createJsonHandler(
(req) => getAdminInventoryItems(req.query),
{
successMessage: 'ok',
errorMessage: '读取库存列表失败',
scope: '[admin/inventory]',
},
))
router.post('/inventory', createJsonHandler(
(req) => createAdminInventoryItem(req.body),
{
successMessage: '库存项已新增',
errorMessage: '新增库存项失败',
scope: '[admin/inventory]',
},
))
router.post('/inventory/import', createJsonHandler(
(req) => importAdminInventoryItems(req.body),
{
successMessage: '导入完成',
errorMessage: '导入库存凭据失败',
scope: '[admin/inventory/import]',
},
))
router.post('/inventory/:inventoryItemId/release', requireAdminRoles(['admin']), createJsonHandler(
(req) => releaseAdminInventoryItem(req.params.inventoryItemId),
{
successMessage: '库存项已释放',
errorMessage: '释放库存项失败',
scope: '[admin/inventory/:inventoryItemId/release]',
audit: (req, data) => ({
action: 'inventory_item_released',
targetType: 'inventory_item',
targetId: String(req.params.inventoryItemId),
data: {
inventoryItemId: data.inventoryItem?.inventoryItemId,
skuCode: data.inventoryItem?.skuCode,
displayValue: data.inventoryItem?.displayValue,
},
}),
},
))
router.post('/inventory/:inventoryItemId/invalidate', requireAdminRoles(['admin']), createJsonHandler(
(req) => invalidateAdminInventoryItem(req.params.inventoryItemId, req.body),
{
successMessage: '库存项已作废',
errorMessage: '作废库存项失败',
scope: '[admin/inventory/:inventoryItemId/invalidate]',
audit: (req, data) => ({
action: 'inventory_item_invalidated',
targetType: 'inventory_item',
targetId: String(req.params.inventoryItemId),
data: {
inventoryItemId: data.inventoryItem?.inventoryItemId,
skuCode: data.inventoryItem?.skuCode,
invalidReason: data.inventoryItem?.invalidReason,
},
}),
},
))
export default router
+51 -8
View File
@@ -2,12 +2,14 @@ import { Router } from 'express'
import {
closeAdminTask,
completeAdminTaskManualDispatch,
getAdminTaskDetail,
getAdminTaskScreenshotPath,
getAdminTasks,
markAdminTaskManualReview,
regenerateAdminTaskClaimLink,
releaseAdminTaskCdk,
releaseAdminTaskInventoryBinding,
releaseAdminTaskInventory,
retryAdminTask,
} from '../../services/admin/admin-service.js'
import { createFileHandler, createJsonHandler, requireAdminRoles } from './shared.js'
@@ -49,14 +51,14 @@ router.post('/tasks/:taskId/retry', createJsonHandler(
},
))
router.post('/tasks/:taskId/release-cdk', requireAdminRoles(['admin']), createJsonHandler(
(req) => releaseAdminTaskCdk(req.params.taskId),
router.post('/tasks/:taskId/release-inventory', requireAdminRoles(['admin']), createJsonHandler(
(req) => releaseAdminTaskInventory(req.params.taskId),
{
successMessage: 'CDK 已释放',
errorMessage: '释放 CDK 失败',
scope: '[admin/tasks/:taskId/release-cdk]',
successMessage: '库存凭据已释放',
errorMessage: '释放库存凭据失败',
scope: '[admin/tasks/:taskId/release-inventory]',
audit: (req, data) => ({
action: 'task_release_cdk',
action: 'task_release_inventory',
targetType: 'task',
targetId: String(req.params.taskId),
data: {
@@ -68,6 +70,26 @@ router.post('/tasks/:taskId/release-cdk', requireAdminRoles(['admin']), createJs
},
))
router.post('/tasks/:taskId/inventory-bindings/:bindingId/release', requireAdminRoles(['admin']), createJsonHandler(
(req) => releaseAdminTaskInventoryBinding(req.params.taskId, req.params.bindingId),
{
successMessage: '库存绑定已释放',
errorMessage: '释放库存绑定失败',
scope: '[admin/tasks/:taskId/inventory-bindings/:bindingId/release]',
audit: (req, data) => ({
action: 'task_release_inventory_binding',
targetType: 'task_inventory_binding',
targetId: String(req.params.bindingId),
data: {
taskId: data.task.taskId,
taskNo: data.task.taskNo,
bindingId: data.bindingId,
inventoryItemId: data.inventoryItemId,
},
}),
},
))
router.post('/tasks/:taskId/regenerate-claim-link', requireAdminRoles(['admin']), createJsonHandler(
(req) => regenerateAdminTaskClaimLink(req.params.taskId),
{
@@ -81,7 +103,7 @@ router.post('/tasks/:taskId/regenerate-claim-link', requireAdminRoles(['admin'])
data: {
taskId: data.task.taskId,
taskNo: data.task.taskNo,
claimTokenId: data.task.claimTokenId,
primaryClaimTokenId: data.task.primaryClaimTokenId,
},
}),
},
@@ -125,4 +147,25 @@ router.post('/tasks/:taskId/mark-manual-review', requireAdminRoles(['admin']), c
},
))
router.post('/tasks/:taskId/complete-manual-dispatch', requireAdminRoles(['admin']), createJsonHandler(
(req) => completeAdminTaskManualDispatch(req.params.taskId, req.body, req.adminSession),
{
successMessage: '人工履约结果已回写',
errorMessage: '回写人工履约结果失败',
scope: '[admin/tasks/:taskId/complete-manual-dispatch]',
audit: (req, data) => ({
action: 'task_complete_manual_dispatch',
targetType: 'task',
targetId: String(req.params.taskId),
data: {
taskId: data.task.taskId,
taskNo: data.task.taskNo,
outcome: data.outcome,
deliveryStatus: data.task.deliveryStatus,
resultCode: data.task.resultCode,
},
}),
},
))
export default router