优化
This commit is contained in:
@@ -63,4 +63,20 @@ describe('co-load group API', () => {
|
||||
expect.objectContaining({ orderId: '2093000000000000008', inboundId: '2093000000000000009', inboundCode: 'NYEXX2608310002', fullPackageCount: 10 }),
|
||||
])
|
||||
})
|
||||
|
||||
it('normalizes missing and blank member inbound codes without exposing technical ids as fallbacks', async () => {
|
||||
const incompleteGroup = {
|
||||
...group,
|
||||
members: [
|
||||
{ ...group.members[0], inboundCode: undefined },
|
||||
{ ...group.members[1], inboundCode: null },
|
||||
{ ...group.members[1], inboundId: 2093000000000000012n, inboundCode: ' ' },
|
||||
{ ...group.members[1], inboundId: 2093000000000000013n, inboundCode: ' NYEXX2608310003 ' },
|
||||
],
|
||||
}
|
||||
vi.spyOn(http, 'post').mockResolvedValue({ code: '200', message: 'ok', data: incompleteGroup })
|
||||
const result = await createPlatformCoLoadGroup(['2093000000000000005', '2093000000000000008'])
|
||||
expect(result.members.map((member) => member.inboundCode)).toEqual(['', '', '', 'NYEXX2608310003'])
|
||||
expect(result.members.map((member) => member.inboundCode)).not.toContain('2093000000000000012')
|
||||
})
|
||||
})
|
||||
|
||||
@@ -6,7 +6,6 @@ export interface CoLoadGroupMember {
|
||||
tenantId: string
|
||||
orderId: string
|
||||
inboundId: string
|
||||
inboundCode: string
|
||||
fullPackageCount: number
|
||||
}
|
||||
|
||||
@@ -24,21 +23,31 @@ export interface CoLoadGroup {
|
||||
updatedAt: string
|
||||
}
|
||||
|
||||
export interface OrderCoLoadGroupInfo {
|
||||
orderId: string
|
||||
group: CoLoadGroup
|
||||
export interface CoLoadBusinessMember {
|
||||
inboundCode: string
|
||||
}
|
||||
|
||||
export interface CoLoadBusinessSummary {
|
||||
status: CoLoadGroupStatus
|
||||
memberCount: number
|
||||
members: CoLoadBusinessMember[]
|
||||
}
|
||||
|
||||
type RawId = string | number
|
||||
type RawCoLoadGroupMember = Omit<CoLoadGroupMember, 'tenantId' | 'orderId' | 'inboundId'> & {
|
||||
tenantId: RawId
|
||||
orderId: RawId
|
||||
inboundId: RawId
|
||||
}
|
||||
type RawCoLoadGroup = Omit<CoLoadGroup, 'groupId' | 'warehouseId' | 'lockedPlanId' | 'members'> & {
|
||||
groupId: RawId
|
||||
warehouseId: RawId
|
||||
lockedPlanId: RawId | null
|
||||
members: Array<Omit<CoLoadGroupMember, 'tenantId' | 'orderId' | 'inboundId'> & { tenantId: RawId; orderId: RawId; inboundId: RawId }>
|
||||
members: RawCoLoadGroupMember[]
|
||||
}
|
||||
type RawOrderCoLoadGroupInfo = Omit<OrderCoLoadGroupInfo, 'orderId' | 'group'> & {
|
||||
orderId: RawId
|
||||
group: RawCoLoadGroup
|
||||
type RawCoLoadBusinessSummary = Omit<CoLoadBusinessSummary, 'memberCount' | 'members'> & {
|
||||
memberCount: number | string
|
||||
members: Array<{ inboundCode?: string | null }>
|
||||
}
|
||||
|
||||
const basePath = '/platform/v1/first-leg/coload-groups'
|
||||
@@ -81,13 +90,17 @@ export async function cancelPlatformCoLoadGroup(groupId: string, expectedVersion
|
||||
return normalizeGroup(unwrapApiResponse(response))
|
||||
}
|
||||
|
||||
export async function batchQueryPlatformCoLoadGroups(orderIds: string[]) {
|
||||
const response = await http.post<ApiEnvelope<RawOrderCoLoadGroupInfo[]>, ApiEnvelope<RawOrderCoLoadGroupInfo[]>>(
|
||||
`${basePath}/batch-query`,
|
||||
{ orderIds },
|
||||
export async function getPlatformCoLoadGroupByInboundCode(inboundCode: string) {
|
||||
const response = await http.get<ApiEnvelope<RawCoLoadBusinessSummary>, ApiEnvelope<RawCoLoadBusinessSummary>>(
|
||||
`${basePath}/by-inbound-code/${encodeURIComponent(inboundCode)}`,
|
||||
)
|
||||
return unwrapApiResponse(response).map((item) => ({
|
||||
orderId: String(item.orderId),
|
||||
group: normalizeGroup(item.group),
|
||||
const raw = unwrapApiResponse(response)
|
||||
const members = (raw.members || []).map((member) => ({
|
||||
inboundCode: typeof member.inboundCode === 'string' ? member.inboundCode.trim() : '',
|
||||
}))
|
||||
return {
|
||||
status: raw.status,
|
||||
memberCount: Number(raw.memberCount),
|
||||
members,
|
||||
} satisfies CoLoadBusinessSummary
|
||||
}
|
||||
|
||||
@@ -75,6 +75,12 @@ export interface UnifiedOrderRelationSummary {
|
||||
childCount: number
|
||||
}
|
||||
|
||||
export interface UnifiedOrderCoLoadGroupSummary {
|
||||
status: string
|
||||
memberCount: number
|
||||
memberInboundCodes: string[]
|
||||
}
|
||||
|
||||
export interface UnifiedOrderResource {
|
||||
orderId: number | string
|
||||
tenantId: number | string
|
||||
@@ -103,6 +109,7 @@ export interface UnifiedOrderResource {
|
||||
loading: UnifiedOrderLoadingSummary | null
|
||||
delivery: UnifiedOrderDeliverySummary | null
|
||||
transport: UnifiedOrderTransportSummary | null
|
||||
coLoadGroup: UnifiedOrderCoLoadGroupSummary | null
|
||||
createdAt: string | null
|
||||
updatedAt: string | null
|
||||
expectedArrivalAt: string | null
|
||||
@@ -368,6 +375,13 @@ function normalizeRow(raw: UnifiedOrderResource): UnifiedOrderResource {
|
||||
evidenceCount: nullableInteger(raw.loading.evidenceCount),
|
||||
} : null,
|
||||
transport: raw.transport ? { ...raw.transport } : null,
|
||||
coLoadGroup: raw.coLoadGroup ? {
|
||||
status: String(raw.coLoadGroup.status || ''),
|
||||
memberCount: integer(raw.coLoadGroup.memberCount, 0),
|
||||
memberInboundCodes: (raw.coLoadGroup.memberInboundCodes || [])
|
||||
.map((value) => typeof value === 'string' ? value.trim() : '')
|
||||
.filter(Boolean),
|
||||
} : null,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user