167 lines
5.2 KiB
TypeScript
167 lines
5.2 KiB
TypeScript
import type { Request } from 'express'
|
|
import { Router } from 'express'
|
|
|
|
import { getAdminTaskDetail, getAdminTasks } from '../../services/admin/admin-read-service.js'
|
|
import { closeAdminTask } from '../../services/admin/write/task-actions.js'
|
|
import {
|
|
dispatchAdminTaskKuaishouCloudFulfillment,
|
|
prepareAdminTaskKuaishouCloudFulfillment,
|
|
rebindAdminTaskKuaishouCloudRole,
|
|
refreshAdminTaskKuaishouCloudRoleInfo,
|
|
returnNumberAdminTaskKuaishouCloudFulfillment,
|
|
} from '../../services/admin/write/kuaishou-cloud-actions.js'
|
|
import { createJsonHandler, requireAdminRoles } from './session.js'
|
|
import type {
|
|
AdminTaskKuaishouCloudDispatchRouteBody,
|
|
AdminTaskRouteParams,
|
|
AdminTaskRouteQuery,
|
|
} from '../../types/admin/route-inputs.js'
|
|
import type { AdminTaskActionResponse } from '../../types/admin/write-models.js'
|
|
|
|
const router = Router()
|
|
|
|
function getTaskId(req: Request): string {
|
|
return String((req.params as AdminTaskRouteParams).taskId || '')
|
|
}
|
|
|
|
router.get(
|
|
'/tasks',
|
|
createJsonHandler(
|
|
(req) => getAdminTasks(req.query as AdminTaskRouteQuery, req.adminSession || null),
|
|
{
|
|
successMessage: 'ok',
|
|
errorMessage: '读取任务列表失败',
|
|
scope: '[admin/tasks]',
|
|
},
|
|
),
|
|
)
|
|
|
|
router.get(
|
|
'/tasks/:taskId',
|
|
createJsonHandler((req) => getAdminTaskDetail(getTaskId(req), req.adminSession || null), {
|
|
successMessage: 'ok',
|
|
errorMessage: '读取任务详情失败',
|
|
scope: '[admin/tasks/:taskId]',
|
|
}),
|
|
)
|
|
|
|
router.post(
|
|
'/tasks/:taskId/close',
|
|
requireAdminRoles(['admin', 'operator', 'support']),
|
|
createJsonHandler((req) => closeAdminTask(getTaskId(req), req.adminSession || null), {
|
|
successMessage: '任务已关闭',
|
|
errorMessage: '关闭任务失败',
|
|
scope: '[admin/tasks/:taskId/close]',
|
|
audit: (req, data) => buildTaskAudit('task_closed', req, data),
|
|
}),
|
|
)
|
|
|
|
router.post(
|
|
'/tasks/:taskId/kuaishou-cloud/prepare',
|
|
requireAdminRoles(['admin', 'operator']),
|
|
createJsonHandler(
|
|
(req) => prepareAdminTaskKuaishouCloudFulfillment(getTaskId(req), req.adminSession || null),
|
|
{
|
|
successMessage: '绑定资源已准备完成',
|
|
errorMessage: '准备绑定资源失败',
|
|
scope: '[admin/tasks/:taskId/kuaishou-cloud/prepare]',
|
|
audit: (req, data) => buildTaskAudit('task_kuaishou_cloud_prepare', req, data),
|
|
},
|
|
),
|
|
)
|
|
|
|
router.post(
|
|
'/tasks/:taskId/kuaishou-cloud/refresh-role-info',
|
|
requireAdminRoles(['admin', 'operator', 'support']),
|
|
createJsonHandler(
|
|
(req) => refreshAdminTaskKuaishouCloudRoleInfo(getTaskId(req), req.adminSession || null),
|
|
{
|
|
successMessage: '角色信息已刷新',
|
|
errorMessage: '刷新角色信息失败',
|
|
scope: '[admin/tasks/:taskId/kuaishou-cloud/refresh-role-info]',
|
|
audit: (req, data) => buildTaskAudit('task_kuaishou_cloud_role_info_refreshed', req, data),
|
|
},
|
|
),
|
|
)
|
|
|
|
router.post(
|
|
'/tasks/:taskId/kuaishou-cloud/rebind-role',
|
|
requireAdminRoles(['admin', 'operator']),
|
|
createJsonHandler(
|
|
(req) => rebindAdminTaskKuaishouCloudRole(getTaskId(req), req.adminSession || null),
|
|
{
|
|
successMessage: '角色换绑资源已准备完成',
|
|
errorMessage: '换绑角色失败',
|
|
scope: '[admin/tasks/:taskId/kuaishou-cloud/rebind-role]',
|
|
audit: (req, data) => buildTaskAudit('task_kuaishou_cloud_rebind_role', req, data),
|
|
},
|
|
),
|
|
)
|
|
|
|
router.post(
|
|
'/tasks/:taskId/kuaishou-cloud/dispatch',
|
|
requireAdminRoles(['admin', 'operator']),
|
|
createJsonHandler(
|
|
(req) =>
|
|
dispatchAdminTaskKuaishouCloudFulfillment(
|
|
getTaskId(req),
|
|
req.body as AdminTaskKuaishouCloudDispatchRouteBody,
|
|
req.adminSession || null,
|
|
),
|
|
{
|
|
successMessage: '已完成绑定确认并发货',
|
|
errorMessage: '执行发货失败',
|
|
scope: '[admin/tasks/:taskId/kuaishou-cloud/dispatch]',
|
|
audit: (req, data) => {
|
|
const result = data as AdminTaskActionResponse
|
|
const body = req.body as AdminTaskKuaishouCloudDispatchRouteBody
|
|
|
|
return {
|
|
action: 'task_kuaishou_cloud_dispatch',
|
|
targetType: 'task',
|
|
targetId: String(getTaskId(req)),
|
|
data: {
|
|
taskId: result.task.taskId,
|
|
taskNo: result.task.taskNo,
|
|
status: result.task.status,
|
|
deliveryStatus: result.task.deliveryStatus,
|
|
ticketCodeProvided: Boolean(String(body.ticketCode || '').trim()),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
),
|
|
)
|
|
|
|
router.post(
|
|
'/tasks/:taskId/kuaishou-cloud/return-number',
|
|
requireAdminRoles(['admin', 'operator']),
|
|
createJsonHandler(
|
|
(req) =>
|
|
returnNumberAdminTaskKuaishouCloudFulfillment(getTaskId(req), req.adminSession || null),
|
|
{
|
|
successMessage: '号码已退还',
|
|
errorMessage: '退还号码失败',
|
|
scope: '[admin/tasks/:taskId/kuaishou-cloud/return-number]',
|
|
audit: (req, data) => buildTaskAudit('task_kuaishou_cloud_return_number', req, data),
|
|
},
|
|
),
|
|
)
|
|
|
|
function buildTaskAudit(action: string, req: Request, data: unknown) {
|
|
const result = data as AdminTaskActionResponse
|
|
|
|
return {
|
|
action,
|
|
targetType: 'task',
|
|
targetId: String(getTaskId(req)),
|
|
data: {
|
|
taskId: result.task.taskId,
|
|
taskNo: result.task.taskNo,
|
|
status: result.task.status,
|
|
},
|
|
}
|
|
}
|
|
|
|
export default router
|