feat: complete overseas PDA warehouse operations
This commit is contained in:
+2
-2
@@ -77,7 +77,7 @@ function rawUpload(path, filePath, name, token) {
|
||||
name,
|
||||
header: { Authorization: `Bearer ${token}` },
|
||||
success: resolve,
|
||||
fail: (cause) => reject(Object.assign(new Error(cause.errMsg || '卸柜照片上传失败'), { network: true }))
|
||||
fail: (cause) => reject(Object.assign(new Error(cause.errMsg || '海外作业文件上传失败'), { network: true }))
|
||||
})
|
||||
})
|
||||
}
|
||||
@@ -111,7 +111,7 @@ export async function overseasUpload(path, filePath, name = 'file', retry = true
|
||||
response = await rawUpload(path, filePath, name, replacementToken)
|
||||
try { body = JSON.parse(response.data || '{}') } catch (_) { body = null }
|
||||
}
|
||||
if (!successful(response, body)) throw errorFrom({ ...response, data: body }, '卸柜照片上传失败')
|
||||
if (!successful(response, body)) throw errorFrom({ ...response, data: body }, '海外作业文件上传失败')
|
||||
return body.data
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
import { overseasRequest, overseasUpload } from './overseas.js'
|
||||
|
||||
const BASE = '/pda/v1/last-leg/relabel-tasks'
|
||||
const encoded = (value) => encodeURIComponent(String(value || '').trim())
|
||||
|
||||
function asList(value) { return Array.isArray(value) ? value : [] }
|
||||
|
||||
export function normalizeRelabel(value = {}) {
|
||||
return {
|
||||
...value,
|
||||
relabelNo: String(value.relabelNo || ''), customerOrderNo: String(value.customerOrderNo || ''),
|
||||
version: Number(value.version || 0), expectedPackages: Number(value.expectedPackages || 0),
|
||||
relabelledPackages: Number(value.relabelledPackages || 0), skippedPackages: Number(value.skippedPackages || 0),
|
||||
exceptionPackages: Number(value.exceptionPackages || 0),
|
||||
items: asList(value.items).map((item) => ({
|
||||
...item, itemId: String(item.itemId || ''), skuCode: String(item.skuCode || ''),
|
||||
newSkuCode: String(item.newSkuCode || ''), expectedPackages: Number(item.expectedPackages || 0),
|
||||
relabelledPackages: Number(item.relabelledPackages || 0), skippedPackages: Number(item.skippedPackages || 0),
|
||||
exceptionPackages: Number(item.exceptionPackages || 0)
|
||||
})),
|
||||
unitFacts: asList(value.unitFacts), history: asList(value.history),
|
||||
completionPhotoFileIds: asList(value.completionPhotoFileIds).map(String)
|
||||
}
|
||||
}
|
||||
|
||||
export async function listRelabelCandidates() {
|
||||
return asList(await overseasRequest('GET', `${BASE}/candidates`)).map(normalizeRelabel)
|
||||
}
|
||||
|
||||
export async function getRelabelTask(relabelNo) {
|
||||
return normalizeRelabel(await overseasRequest('GET', `${BASE}/${encoded(relabelNo)}`))
|
||||
}
|
||||
|
||||
async function detailAction(relabelNo, suffix, request) {
|
||||
return normalizeRelabel(await overseasRequest('POST', `${BASE}/${encoded(relabelNo)}${suffix}`, request))
|
||||
}
|
||||
|
||||
export const claimRelabelTask = (relabelNo, request) => detailAction(relabelNo, '/claim', request)
|
||||
export const relabelUnit = (relabelNo, request) => detailAction(relabelNo, '/units', request)
|
||||
export const skipRelabelUnit = (relabelNo, request) => detailAction(relabelNo, '/units/skip', request)
|
||||
export const reportRelabelException = (relabelNo, request) => detailAction(relabelNo, '/exceptions', request)
|
||||
export const completeRelabelTask = (relabelNo, request) => detailAction(relabelNo, '/complete', request)
|
||||
export const reviewRelabelTask = (relabelNo, request) => detailAction(relabelNo, '/review', request)
|
||||
export const uploadRelabelPhoto = (relabelNo, filePath) => overseasUpload(`${BASE}/${encoded(relabelNo)}/photos/files`, filePath)
|
||||
@@ -0,0 +1,70 @@
|
||||
import { overseasRequest } from './overseas.js'
|
||||
|
||||
const BASE = '/pda/v1/last-leg'
|
||||
const encoded = (value) => encodeURIComponent(String(value || '').trim())
|
||||
|
||||
function asList(value) {
|
||||
if (Array.isArray(value)) return value
|
||||
if (Array.isArray(value?.records)) return value.records
|
||||
return []
|
||||
}
|
||||
|
||||
function count(value) {
|
||||
const result = Number(value || 0)
|
||||
return Number.isFinite(result) ? Math.max(0, result) : 0
|
||||
}
|
||||
|
||||
export function normalizeStocktake(value) {
|
||||
const task = value?.task || value || {}
|
||||
return {
|
||||
...value,
|
||||
task: { ...task, taskNo: String(task.taskNo || ''), scopeCode: String(task.scopeCode || ''), version: count(task.version) },
|
||||
items: asList(value?.items).map((item) => ({
|
||||
...item,
|
||||
itemId: String(item.itemId || ''), balanceId: String(item.balanceId || ''), positionId: String(item.positionId || ''),
|
||||
palletCode: String(item.palletCode || ''), locationCode: String(item.locationCode || ''),
|
||||
bookPackages: count(item.bookPackages), actualPackages: item.actualPackages == null ? null : count(item.actualPackages),
|
||||
differencePackages: item.differencePackages == null ? null : Number(item.differencePackages),
|
||||
positionVersion: count(item.positionVersion), version: count(item.version)
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
export async function listStocktakes(status = 'IN_PROGRESS') {
|
||||
const suffix = `?page=1&size=100${status ? `&status=${encoded(status)}` : ''}`
|
||||
return asList(await overseasRequest('GET', `${BASE}/stocktakes${suffix}`)).map((item) => ({
|
||||
...item, taskNo: String(item.taskNo || ''), scopeCode: String(item.scopeCode || ''), version: count(item.version)
|
||||
}))
|
||||
}
|
||||
|
||||
export async function createStocktake(request) {
|
||||
return normalizeStocktake(await overseasRequest('POST', `${BASE}/stocktakes`, request))
|
||||
}
|
||||
|
||||
export async function getStocktake(taskNo) {
|
||||
return normalizeStocktake(await overseasRequest('GET', `${BASE}/stocktakes/${encoded(taskNo)}`))
|
||||
}
|
||||
|
||||
export function countStocktake(taskNo, request) {
|
||||
return overseasRequest('POST', `${BASE}/stocktakes/${encoded(taskNo)}/counts`, request)
|
||||
}
|
||||
|
||||
export async function submitStocktake(taskNo, request) {
|
||||
return normalizeStocktake(await overseasRequest('POST', `${BASE}/stocktakes/${encoded(taskNo)}/submit`, request))
|
||||
}
|
||||
|
||||
export function moveInventory(request) {
|
||||
return overseasRequest('POST', `${BASE}/inventory-moves`, request)
|
||||
}
|
||||
|
||||
export function resolveInventory(code) {
|
||||
return overseasRequest('POST', `${BASE}/inventory/resolve`, { code: String(code || '').trim() })
|
||||
}
|
||||
|
||||
export function resolveWarehouseLocation(code) {
|
||||
return overseasRequest('POST', `${BASE}/locations/resolve`, { code: String(code || '').trim() })
|
||||
}
|
||||
|
||||
export function resolveWarehousePallet(code) {
|
||||
return overseasRequest('POST', `${BASE}/pallets/resolve`, { code: String(code || '').trim() })
|
||||
}
|
||||
Reference in New Issue
Block a user