后端迁移库存服务模块

This commit is contained in:
yml
2026-05-21 14:17:14 +08:00
parent 5711d38c8f
commit ab3a8caa9f
2 changed files with 55 additions and 10 deletions
@@ -3,15 +3,49 @@ import {
findFirstAvailableInventoryItemBySkuCode,
releaseReservedInventoryItem,
} from '../../repositories/inventory-repo.js'
import type { InventoryItemRow } from '../../types/repository-rows.js'
import { nowIso } from '../../utils/time.js'
type InventoryItemId = number | string | null | undefined
type InventoryGroupCodesInput = string | string[] | null | undefined
type ReserveInventoryForTaskInput = {
skuCode?: string
taskId: number | string
credentialType?: string
roleKey?: string
inventoryGroupCodes?: InventoryGroupCodesInput
}
type ReserveInventoryForTaskDeps = {
assignReservedInventoryItem?: (
inventoryItemId: number | string,
taskId: number | string,
updatedAt: string,
roleKey?: string,
) => Promise<InventoryItemRow | null>
findFirstAvailableInventoryItemBySkuCode?: (
skuCode: string,
credentialType?: string,
inventoryGroupCodes?: InventoryGroupCodesInput,
) => Promise<InventoryItemRow | null>
nowIso?: () => string
}
type ReleaseReservedInventoryItemsDeps = {
releaseReservedInventoryItem?: (
inventoryItemId: number | string,
updatedAt: string,
) => Promise<InventoryItemRow | null>
}
export async function reserveInventoryForTask({
skuCode,
taskId,
credentialType = 'tencent_code',
roleKey = 'primary_code',
inventoryGroupCodes = null,
}) {
}: ReserveInventoryForTaskInput): Promise<InventoryItemRow | null> {
return reserveInventoryForTaskWithDeps(
{ skuCode, taskId, credentialType, roleKey, inventoryGroupCodes },
{
@@ -29,13 +63,13 @@ export async function reserveInventoryForTaskWithDeps(
credentialType = 'tencent_code',
roleKey = 'primary_code',
inventoryGroupCodes = null,
},
}: ReserveInventoryForTaskInput,
{
assignReservedInventoryItem: assignReserved = assignReservedInventoryItem,
findFirstAvailableInventoryItemBySkuCode: findAvailable = findFirstAvailableInventoryItemBySkuCode,
nowIso: getNowIso = nowIso,
} = {},
) {
}: ReserveInventoryForTaskDeps = {},
): Promise<InventoryItemRow | null> {
if (!skuCode) {
return null
}
@@ -53,7 +87,10 @@ export async function reserveInventoryForTaskWithDeps(
return assignReserved(available.id, taskId, getNowIso(), roleKey)
}
export async function releaseReservedInventoryItems(inventoryItemIds = [], updatedAt = nowIso()) {
export async function releaseReservedInventoryItems(
inventoryItemIds: InventoryItemId[] = [],
updatedAt = nowIso(),
): Promise<InventoryItemRow[]> {
return releaseReservedInventoryItemsWithDeps(
inventoryItemIds,
updatedAt,
@@ -62,13 +99,13 @@ export async function releaseReservedInventoryItems(inventoryItemIds = [], updat
}
export async function releaseReservedInventoryItemsWithDeps(
inventoryItemIds = [],
inventoryItemIds: InventoryItemId[] = [],
updatedAt = nowIso(),
{
releaseReservedInventoryItem: releaseReserved = releaseReservedInventoryItem,
} = {},
) {
const released = []
}: ReleaseReservedInventoryItemsDeps = {},
): Promise<InventoryItemRow[]> {
const released: InventoryItemRow[] = []
for (const inventoryItemId of inventoryItemIds) {
if (!inventoryItemId) {