修复智能装柜入仓码重复展示
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import type { SmartLoadingItem } from './types'
|
||||
|
||||
export interface SmartLoadingInboundItem extends SmartLoadingItem {
|
||||
sourceItems: SmartLoadingItem[]
|
||||
detailCount: number
|
||||
}
|
||||
|
||||
function sumNullable(items: SmartLoadingItem[], value: (item: SmartLoadingItem) => number | null) {
|
||||
const values = items.map(value).filter((item): item is number => item != null)
|
||||
return values.length ? values.reduce((sum, item) => sum + Number(item || 0), 0) : null
|
||||
}
|
||||
|
||||
function joinDistinct(items: SmartLoadingItem[], value: (item: SmartLoadingItem) => string | null) {
|
||||
const values = [...new Set(items.map(value).map((item) => String(item || '').trim()).filter(Boolean))]
|
||||
return values.length ? values.join('、') : null
|
||||
}
|
||||
|
||||
/**
|
||||
* 后端按规格保存装柜明细以保证重量、体积计算准确;作业页面按入仓码汇总展示。
|
||||
*/
|
||||
export function groupSmartLoadingItems(items: SmartLoadingItem[]): SmartLoadingInboundItem[] {
|
||||
const groups = new Map<string, SmartLoadingItem[]>()
|
||||
for (const item of items) {
|
||||
const key = `${item.accountId}:${item.inboundId}`
|
||||
groups.set(key, [...(groups.get(key) || []), item])
|
||||
}
|
||||
|
||||
return [...groups.values()].map((sourceItems) => {
|
||||
const first = sourceItems[0]
|
||||
const pickedPackageCount = sourceItems.reduce((sum, item) => sum + Number(item.pickedPackageCount || 0), 0)
|
||||
const loadSequences = sourceItems.map((item) => item.loadSequence).filter((item): item is number => item != null)
|
||||
return {
|
||||
...first,
|
||||
id: sourceItems.length === 1 ? first.id : `inbound:${first.accountId}:${first.inboundId}`,
|
||||
inboundDetailId: sourceItems.length === 1 ? first.inboundDetailId : '',
|
||||
skuCode: joinDistinct(sourceItems, (item) => item.skuCode),
|
||||
productNameZh: joinDistinct(sourceItems, (item) => item.productNameZh),
|
||||
packageCount: sourceItems.reduce((sum, item) => sum + Number(item.packageCount || 0), 0),
|
||||
productQuantity: sumNullable(sourceItems, (item) => item.productQuantity),
|
||||
grossWeightKg: sumNullable(sourceItems, (item) => item.grossWeightKg),
|
||||
volumeCbm: sumNullable(sourceItems, (item) => item.volumeCbm),
|
||||
loadSequence: loadSequences.length ? Math.min(...loadSequences) : null,
|
||||
pickedPackageCount,
|
||||
minPackageCount: sourceItems.reduce((sum, item) => sum + Number(item.minPackageCount || 0), 0),
|
||||
canAdjust: sourceItems.length === 1 && first.canAdjust,
|
||||
canRemove: sourceItems.every((item) => item.canRemove),
|
||||
sourceItems,
|
||||
detailCount: sourceItems.length,
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user