fix(fulfillment): 封堵重复载体并完善统一SKU映射

This commit is contained in:
yml2213
2026-11-03 12:28:05 +08:00
parent 3ba808b814
commit e6763882f5
27 changed files with 1506 additions and 45 deletions
@@ -19,6 +19,12 @@ import {
unlockChannel,
upsertChannelRule,
} from '../../services/fulfillment/channel-assign-service.js'
import {
deleteInternalSkuMapping,
listInternalSkuMappingsPage,
upsertInternalSkuMapping,
type InternalSkuMappingMatchType,
} from '../../services/fulfillment/internal-sku-mapping-service.js'
import { listExceptionQueue } from '../../services/cost-center/cost-exception-service.js'
import {
runFinancePipelineOnce,
@@ -53,6 +59,70 @@ router.get(
),
)
router.get(
'/fulfillment/internal-sku-mappings',
requireAdminPermission('finance.view'),
createJsonHandler(
(req) =>
listInternalSkuMappingsPage({
keyword: String(req.query.keyword || ''),
provider: String(req.query.provider || ''),
shopId: String(req.query.shopId || ''),
matchType: String(req.query.matchType || ''),
page: Number(req.query.page),
pageSize: Number(req.query.pageSize),
}),
{
successMessage: 'ok',
errorMessage: '读取 SKU 映射失败',
scope: '[admin/fulfillment/internal-sku-mappings]',
},
),
)
router.post(
'/fulfillment/internal-sku-mappings',
requireAdminPermission('finance.config'),
createJsonHandler(
async (req) => {
const body = bodyOf(req)
const id = await upsertInternalSkuMapping({
provider: String(body.provider || ''),
shopId: String(body.shopId || ''),
matchType: String(body.matchType || 'sku_code') as InternalSkuMappingMatchType,
matchValue: String(body.matchValue || ''),
internalSku: String(body.internalSku || ''),
priority: Number(body.priority),
source: String(body.source || 'manual'),
note: String(body.note || ''),
enabled: body.enabled !== false,
})
return { id }
},
{
successMessage: 'SKU 映射已保存',
errorMessage: '保存 SKU 映射失败',
scope: '[admin/fulfillment/internal-sku-mappings/save]',
audit: (req, data) => ({
action: 'fulfillment.upsert_internal_sku_mapping',
targetType: 'internal_sku_mapping',
targetId: String((data as { id?: number })?.id || ''),
data: { payload: bodyOf(req) },
}),
},
),
)
router.delete(
'/fulfillment/internal-sku-mappings/:id',
requireAdminPermission('finance.config'),
createJsonHandler((req) => deleteInternalSkuMapping(Number(req.params.id)), {
successMessage: 'SKU 映射已删除',
errorMessage: '删除 SKU 映射失败',
scope: '[admin/fulfillment/internal-sku-mappings/delete]',
}),
)
router.get(
'/fulfillment/exceptions',
requireAdminPermission('finance.view'),