This commit is contained in:
2026-08-31 10:31:53 +08:00
parent b4d5fb1170
commit 1548d444c6
7 changed files with 144 additions and 99 deletions
@@ -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')
})
})
+28 -15
View File
@@ -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,
}
}