@things-factory/sales-base 4.3.622 → 4.3.629
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-server/controllers/ecommerce/powrup-controller.js +216 -144
- package/dist-server/controllers/ecommerce/powrup-controller.js.map +1 -1
- package/dist-server/service/release-good/release-good.js +5 -3
- package/dist-server/service/release-good/release-good.js.map +1 -1
- package/dist-server/service/return-order/return-order-mutation.js +61 -57
- package/dist-server/service/return-order/return-order-mutation.js.map +1 -1
- package/package.json +4 -4
- package/server/controllers/ecommerce/powrup-controller.ts +315 -190
- package/server/service/release-good/release-good.ts +8 -17
- package/server/service/return-order/return-order-mutation.ts +90 -78
|
@@ -29,14 +29,19 @@ export class PowrupController {
|
|
|
29
29
|
let roUpdateFields: Partial<ReleaseGood> = null
|
|
30
30
|
|
|
31
31
|
const updateRO = async (releaseGoodId, roUpdateFields, trxMgr) => {
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
try {
|
|
33
|
+
if (roUpdateFields) {
|
|
34
|
+
const result = await trxMgr.getRepository(ReleaseGood).save({ id: releaseGoodId }, roUpdateFields)
|
|
35
|
+
}
|
|
36
|
+
} catch (e) {
|
|
37
|
+
logger.error(e)
|
|
34
38
|
}
|
|
35
39
|
}
|
|
36
40
|
|
|
37
41
|
try {
|
|
38
42
|
const orderProducts: OrderProduct[] = releaseGood.orderProducts
|
|
39
43
|
const orderInformation: any = { refOrderId: releaseGood.refOrderId }
|
|
44
|
+
const lmdOption = releaseGood?.lmdOption
|
|
40
45
|
|
|
41
46
|
if (
|
|
42
47
|
releaseGood?.lastMarketPackCall &&
|
|
@@ -49,112 +54,43 @@ export class PowrupController {
|
|
|
49
54
|
roUpdateFields = {
|
|
50
55
|
lastMarketPackCall: new Date()
|
|
51
56
|
}
|
|
52
|
-
performance.mark(`start:${releaseGood.refOrderId}`)
|
|
53
|
-
const orderPack: any = await PowrupAPI.packOrder(powrup, {
|
|
54
|
-
...orderInformation,
|
|
55
|
-
context: { state: { domain: domain || null, user: user || null } }
|
|
56
|
-
})
|
|
57
|
-
performance.mark(`end:${releaseGood.refOrderId}`)
|
|
58
|
-
|
|
59
|
-
if (orderPack?.packages) {
|
|
60
|
-
const packages: any[] = orderPack.packages
|
|
61
|
-
|
|
62
|
-
const createOrderPackageItems = (
|
|
63
|
-
orderProducts: OrderProduct[],
|
|
64
|
-
orderPackage: OrderPackage,
|
|
65
|
-
items: any[],
|
|
66
|
-
unassignedItems?: Boolean
|
|
67
|
-
) => {
|
|
68
|
-
return items
|
|
69
|
-
.map(itm => {
|
|
70
|
-
const { refCode, qty, productDetail, releaseQty } = itm
|
|
71
|
-
if (!refCode && !unassignedItems) {
|
|
72
|
-
throw new Error(`universalIdentifier missing`)
|
|
73
|
-
}
|
|
74
|
-
const idx = orderProducts.findIndex(
|
|
75
|
-
op => op.productDetail?.refCode == refCode || op.productDetail?.refCode == productDetail?.refCode
|
|
76
|
-
)
|
|
77
|
-
|
|
78
|
-
const matchedOrderProduct: OrderProduct = idx !== -1 ? { ...orderProducts[idx] } : undefined
|
|
79
|
-
|
|
80
|
-
const matchedOrderPackageItem: OrderPackageItem = orderPackage?.orderPackageItems?.find(
|
|
81
|
-
itm => itm.orderProductId == matchedOrderProduct?.id
|
|
82
|
-
)
|
|
83
57
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
58
|
+
// non-sof orders will trigger packOrder - create consignment - order package
|
|
59
|
+
if (!lmdOption) {
|
|
60
|
+
performance.mark(`start:${releaseGood.refOrderId}`)
|
|
61
|
+
const orderPack: any = await PowrupAPI.packOrder(powrup, {
|
|
62
|
+
...orderInformation,
|
|
63
|
+
context: { state: { domain: domain || null, user: user || null } }
|
|
64
|
+
})
|
|
65
|
+
performance.mark(`end:${releaseGood.refOrderId}`)
|
|
87
66
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
status: ORDER_STATUS.PROCESSING,
|
|
91
|
-
orderPackage: orderPackage,
|
|
92
|
-
domain: releaseGood.domain,
|
|
93
|
-
bizplace: releaseGood.bizplace,
|
|
94
|
-
creator: user?.id,
|
|
95
|
-
updater: user?.id,
|
|
96
|
-
productDetail: matchedOrderProduct.productDetail
|
|
97
|
-
}
|
|
67
|
+
if (orderPack?.packages) {
|
|
68
|
+
const packages: any[] = orderPack.packages
|
|
98
69
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
...commonProperties,
|
|
103
|
-
id: matchedOrderPackageItem.id,
|
|
104
|
-
name: matchedOrderPackageItem.name,
|
|
105
|
-
releaseQty: (matchedOrderPackageItem.releaseQty || 0) + (releaseQty || 0)
|
|
106
|
-
}
|
|
107
|
-
}
|
|
70
|
+
await Promise.all(
|
|
71
|
+
packages.map(async pkg => {
|
|
72
|
+
const items = pkg.items
|
|
108
73
|
|
|
109
|
-
// Update release quantity of the matched order product
|
|
110
|
-
orderProducts[idx].releaseQty = (orderProducts[idx].releaseQty || 0) - (qty || 0)
|
|
111
|
-
|
|
112
|
-
// Return a new order package item if no existing item was found
|
|
113
|
-
return {
|
|
114
|
-
...commonProperties,
|
|
115
|
-
name: OrderNoGenerator.orderPackageItem(),
|
|
116
|
-
releaseQty: releaseQty
|
|
117
|
-
? releaseQty
|
|
118
|
-
: qty > matchedOrderProduct.releaseQty
|
|
119
|
-
? matchedOrderProduct.releaseQty
|
|
120
|
-
: qty
|
|
121
|
-
}
|
|
122
|
-
})
|
|
123
|
-
.filter(item => item != null)
|
|
124
|
-
}
|
|
125
|
-
//
|
|
126
|
-
|
|
127
|
-
await Promise.all(
|
|
128
|
-
packages.map(async pkg => {
|
|
129
|
-
const items = pkg.items
|
|
130
|
-
const isMps = releaseGood?.lastMileDelivery?.mps
|
|
131
|
-
|
|
132
|
-
if (isMps) {
|
|
133
|
-
let newReleaseGood = await splitOrderConsignment(trxMgr, releaseGood, items, user)
|
|
134
|
-
await updatePackageId(packages, newReleaseGood, trxMgr)
|
|
135
|
-
} else {
|
|
136
74
|
let orderConsignment = await createOrderConsignment(trxMgr, releaseGood, user)
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
packageId: pkg.packageId,
|
|
140
|
-
status: ORDER_STATUS.PROCESSING,
|
|
75
|
+
let savedOrderPackage: OrderPackage = await this.createOrderPackage(
|
|
76
|
+
trxMgr,
|
|
141
77
|
releaseGood,
|
|
142
78
|
orderConsignment,
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
79
|
+
user,
|
|
80
|
+
pkg
|
|
81
|
+
)
|
|
82
|
+
const orderPackageItems: OrderPackageItem[] = await this.createOrderPackageItems(
|
|
83
|
+
orderProducts,
|
|
84
|
+
savedOrderPackage,
|
|
85
|
+
items,
|
|
86
|
+
user,
|
|
87
|
+
false,
|
|
88
|
+
releaseGood
|
|
89
|
+
)
|
|
152
90
|
await trxMgr.getRepository(OrderPackageItem).save(orderPackageItems)
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
)
|
|
91
|
+
})
|
|
92
|
+
)
|
|
156
93
|
|
|
157
|
-
if (!releaseGood?.lastMileDelivery?.mps) {
|
|
158
94
|
const unassignedOrderProducts: OrderProduct[] = orderProducts.filter(op => {
|
|
159
95
|
return (
|
|
160
96
|
op.releaseQty > 0 ||
|
|
@@ -162,33 +98,83 @@ export class PowrupController {
|
|
|
162
98
|
)
|
|
163
99
|
})
|
|
164
100
|
|
|
165
|
-
if (unassignedOrderProducts?.length > 0)
|
|
166
|
-
|
|
167
|
-
where: { releaseGood: releaseGood.id },
|
|
168
|
-
relations: ['orderPackageItems']
|
|
169
|
-
})
|
|
101
|
+
if (unassignedOrderProducts?.length > 0)
|
|
102
|
+
await this.unassignedOrderProducts(unassignedOrderProducts, releaseGood, user, trxMgr)
|
|
170
103
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const unassignedPackageItems = createOrderPackageItems(
|
|
178
|
-
unassignedOrderProducts,
|
|
179
|
-
selectedOrderPackage,
|
|
180
|
-
unassignedOrderProducts,
|
|
181
|
-
true
|
|
182
|
-
)
|
|
183
|
-
await trxMgr.getRepository(OrderPackageItem).save(unassignedPackageItems)
|
|
104
|
+
roUpdateFields = {
|
|
105
|
+
packageId: packages[0].packageId,
|
|
106
|
+
marketPackCallSuccess: new Date(),
|
|
107
|
+
lastMarketPackCall: new Date(),
|
|
108
|
+
updatedAt: new Date()
|
|
184
109
|
}
|
|
185
110
|
}
|
|
111
|
+
await updateRO(releaseGood.id, roUpdateFields, trxMgr)
|
|
112
|
+
} else {
|
|
113
|
+
//sof orders will create consignment - order package - trigger packOrder
|
|
114
|
+
|
|
115
|
+
let newReleaseGood
|
|
116
|
+
let orderPackages: OrderPackage[] = []
|
|
186
117
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
118
|
+
const isMps = releaseGood?.lastMileDelivery?.mps
|
|
119
|
+
const orderInformation: any = { refOrderId: releaseGood.refOrderId, isSof: true }
|
|
120
|
+
|
|
121
|
+
if (isMps) {
|
|
122
|
+
newReleaseGood = await splitOrderConsignment(trxMgr, releaseGood, user)
|
|
123
|
+
orderPackages = newReleaseGood.orderPackages
|
|
124
|
+
releaseGood.orderPackages = orderPackages
|
|
125
|
+
} else {
|
|
126
|
+
//create package like normal non sof orders
|
|
127
|
+
let orderConsignment = await createOrderConsignment(trxMgr, releaseGood, user)
|
|
128
|
+
let savedOrderPackage: OrderPackage = await this.createOrderPackage(
|
|
129
|
+
trxMgr,
|
|
130
|
+
releaseGood,
|
|
131
|
+
orderConsignment,
|
|
132
|
+
user
|
|
133
|
+
)
|
|
134
|
+
let orderPackageItems: OrderPackageItem[] = await createSofOrderPackageItem(
|
|
135
|
+
trxMgr,
|
|
136
|
+
[],
|
|
137
|
+
savedOrderPackage,
|
|
138
|
+
releaseGood
|
|
139
|
+
)
|
|
140
|
+
savedOrderPackage.orderPackageItems = orderPackageItems
|
|
141
|
+
orderPackages.push(savedOrderPackage)
|
|
142
|
+
releaseGood.orderPackages = orderPackages
|
|
143
|
+
|
|
144
|
+
newReleaseGood = releaseGood
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const packages = orderPackages.map(op => {
|
|
148
|
+
const items = op.orderPackageItems.map(opi => {
|
|
149
|
+
return {
|
|
150
|
+
universalIdentifier: opi.productDetail.refCode,
|
|
151
|
+
sku: opi.orderProduct.product.sku,
|
|
152
|
+
quantity: opi.releaseQty
|
|
153
|
+
}
|
|
154
|
+
})
|
|
155
|
+
return {
|
|
156
|
+
packageId: op.id,
|
|
157
|
+
items: items
|
|
158
|
+
}
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
performance.mark(`start:${newReleaseGood?.refOrderId}`)
|
|
162
|
+
const orderPack: any = await PowrupAPI.packOrder(powrup, {
|
|
163
|
+
...orderInformation,
|
|
164
|
+
packages,
|
|
165
|
+
context: { state: { domain: domain || null, user: user || null } }
|
|
166
|
+
})
|
|
167
|
+
performance.mark(`end:${newReleaseGood.refOrderId}`)
|
|
168
|
+
|
|
169
|
+
if (orderPack?.packages) {
|
|
170
|
+
roUpdateFields = {
|
|
171
|
+
marketPackCallSuccess: new Date(),
|
|
172
|
+
lastMarketPackCall: new Date(),
|
|
173
|
+
updatedAt: new Date()
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
let packages = orderPack.packages
|
|
177
|
+
await updatePackageId(packages, releaseGood, trxMgr)
|
|
192
178
|
}
|
|
193
179
|
}
|
|
194
180
|
} catch (error) {
|
|
@@ -207,8 +193,6 @@ export class PowrupController {
|
|
|
207
193
|
console.info(perf.toJSON())
|
|
208
194
|
}
|
|
209
195
|
|
|
210
|
-
await updateRO(releaseGood.id, roUpdateFields, trxMgr)
|
|
211
|
-
|
|
212
196
|
return releaseGood
|
|
213
197
|
}
|
|
214
198
|
|
|
@@ -253,13 +237,10 @@ export class PowrupController {
|
|
|
253
237
|
|
|
254
238
|
let orderInformation: any = {
|
|
255
239
|
refOrderId: releaseGood.refOrderId,
|
|
256
|
-
packageId: op.packageId
|
|
240
|
+
packageId: op.packageId,
|
|
241
|
+
platform: releaseGood?.platformCode
|
|
257
242
|
}
|
|
258
243
|
if (op?.releaseGood?.lmdOption) {
|
|
259
|
-
// let releaseGoodQuery: ReleaseGood = await releaseGoodRepo.findOne({
|
|
260
|
-
// where: { id: releaseGood.id },
|
|
261
|
-
// relations: ['lastMileDelivery']
|
|
262
|
-
// })
|
|
263
244
|
orderInformation = {
|
|
264
245
|
...orderInformation,
|
|
265
246
|
awb: op.airwayBill,
|
|
@@ -458,6 +439,135 @@ export class PowrupController {
|
|
|
458
439
|
}
|
|
459
440
|
}
|
|
460
441
|
}
|
|
442
|
+
|
|
443
|
+
//create orderPackage for non-sof / sof- non mps orders
|
|
444
|
+
async createOrderPackage(
|
|
445
|
+
tx: EntityManager,
|
|
446
|
+
releaseGood: ReleaseGood,
|
|
447
|
+
orderConsignment?: OrderConsignment,
|
|
448
|
+
user?: User,
|
|
449
|
+
pkg?: any
|
|
450
|
+
) {
|
|
451
|
+
try {
|
|
452
|
+
const orderPackage: any = {
|
|
453
|
+
id: uuidv4(),
|
|
454
|
+
name: OrderNoGenerator.orderPackage(),
|
|
455
|
+
packageId: pkg ? pkg.packageId : null,
|
|
456
|
+
status: ORDER_STATUS.PROCESSING,
|
|
457
|
+
releaseGood,
|
|
458
|
+
orderConsignment,
|
|
459
|
+
domain: releaseGood.domain,
|
|
460
|
+
bizplace: releaseGood.bizplace,
|
|
461
|
+
creator: user.id,
|
|
462
|
+
updater: user.id,
|
|
463
|
+
originalPackResponse: pkg ? JSON.stringify(pkg) : null
|
|
464
|
+
}
|
|
465
|
+
let savedOrderPackage: OrderPackage = await tx.getRepository(OrderPackage).save(orderPackage)
|
|
466
|
+
return savedOrderPackage
|
|
467
|
+
} catch (e) {
|
|
468
|
+
logger.error(`[lmd-create-order-consignment]: ${e} `)
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
async createOrderPackageItems(
|
|
473
|
+
orderProducts: OrderProduct[],
|
|
474
|
+
orderPackage: OrderPackage,
|
|
475
|
+
items: any[],
|
|
476
|
+
user: User,
|
|
477
|
+
unassignedItems?: Boolean,
|
|
478
|
+
releaseGood?: any
|
|
479
|
+
): Promise<any[]> {
|
|
480
|
+
try {
|
|
481
|
+
const processedItems = items.map(itm => {
|
|
482
|
+
const { refCode, qty, productDetail, releaseQty } = itm
|
|
483
|
+
|
|
484
|
+
if (!refCode && !unassignedItems) {
|
|
485
|
+
throw new Error(`universalIdentifier missing`)
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
const idx = orderProducts.findIndex(
|
|
489
|
+
op => op.productDetail?.refCode === refCode || op.productDetail?.refCode === productDetail?.refCode
|
|
490
|
+
)
|
|
491
|
+
|
|
492
|
+
const matchedOrderProduct: OrderProduct = idx !== -1 ? { ...orderProducts[idx] } : undefined
|
|
493
|
+
|
|
494
|
+
if (!matchedOrderProduct || matchedOrderProduct.releaseQty <= 0) {
|
|
495
|
+
return null // No matched product or no remaining quantity to release
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
const matchedOrderPackageItem: OrderPackageItem = orderPackage?.orderPackageItems?.find(
|
|
499
|
+
itm => itm.orderProductId === matchedOrderProduct.id
|
|
500
|
+
)
|
|
501
|
+
|
|
502
|
+
const commonProperties = {
|
|
503
|
+
orderProduct: matchedOrderProduct,
|
|
504
|
+
status: ORDER_STATUS.PROCESSING,
|
|
505
|
+
orderPackage: orderPackage,
|
|
506
|
+
domain: releaseGood.domain,
|
|
507
|
+
bizplace: releaseGood.bizplace,
|
|
508
|
+
creator: user.id,
|
|
509
|
+
updater: user.id,
|
|
510
|
+
productDetail: matchedOrderProduct.productDetail
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
let result = {}
|
|
514
|
+
|
|
515
|
+
if (matchedOrderPackageItem) {
|
|
516
|
+
result = {
|
|
517
|
+
...commonProperties,
|
|
518
|
+
id: matchedOrderPackageItem.id,
|
|
519
|
+
name: matchedOrderPackageItem.name,
|
|
520
|
+
releaseQty: (matchedOrderPackageItem.releaseQty || 0) + (releaseQty || 0)
|
|
521
|
+
}
|
|
522
|
+
} else {
|
|
523
|
+
orderProducts[idx].releaseQty = (orderProducts[idx].releaseQty || 0) - (qty || 0)
|
|
524
|
+
result = {
|
|
525
|
+
...commonProperties,
|
|
526
|
+
name: OrderNoGenerator.orderPackageItem(),
|
|
527
|
+
releaseQty: releaseQty
|
|
528
|
+
? releaseQty
|
|
529
|
+
: qty > matchedOrderProduct.releaseQty
|
|
530
|
+
? matchedOrderProduct.releaseQty
|
|
531
|
+
: qty
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
return result
|
|
536
|
+
})
|
|
537
|
+
|
|
538
|
+
return processedItems.filter(item => item != null)
|
|
539
|
+
} catch (e) {
|
|
540
|
+
logger.error(`unable-to-create-opi-powrup: ${e}`)
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
async unassignedOrderProducts(
|
|
545
|
+
unassignedOrderProducts: OrderProduct[],
|
|
546
|
+
releaseGood: ReleaseGood,
|
|
547
|
+
user: User,
|
|
548
|
+
trxMgr: EntityManager
|
|
549
|
+
) {
|
|
550
|
+
const orderPackages: OrderPackage[] = await trxMgr.getRepository(OrderPackage).find({
|
|
551
|
+
where: { releaseGood: releaseGood.id },
|
|
552
|
+
relations: ['orderPackageItems']
|
|
553
|
+
})
|
|
554
|
+
|
|
555
|
+
let selectedOrderPackage = orderPackages.reduce((minOrderPackage, currentOrderPackage) => {
|
|
556
|
+
return currentOrderPackage?.orderPackageItems.length < minOrderPackage?.orderPackageItems.length
|
|
557
|
+
? currentOrderPackage
|
|
558
|
+
: minOrderPackage
|
|
559
|
+
}, orderPackages[0])
|
|
560
|
+
|
|
561
|
+
const unassignedPackageItems = await this.createOrderPackageItems(
|
|
562
|
+
unassignedOrderProducts,
|
|
563
|
+
selectedOrderPackage,
|
|
564
|
+
unassignedOrderProducts,
|
|
565
|
+
user,
|
|
566
|
+
true,
|
|
567
|
+
releaseGood
|
|
568
|
+
)
|
|
569
|
+
await trxMgr.getRepository(OrderPackageItem).save(unassignedPackageItems)
|
|
570
|
+
}
|
|
461
571
|
}
|
|
462
572
|
|
|
463
573
|
export async function createOrderConsignment(
|
|
@@ -485,42 +595,24 @@ export async function createOrderConsignment(
|
|
|
485
595
|
}
|
|
486
596
|
}
|
|
487
597
|
|
|
488
|
-
export async function sortingProduct(
|
|
598
|
+
export async function sortingProduct(orderProducts): Promise<any> {
|
|
489
599
|
try {
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
return orderProducts.find(op => op.productDetail.refCode === refCode) || null
|
|
500
|
-
})
|
|
501
|
-
.filter(item => item) // Filter out any null values
|
|
502
|
-
.sort((a, b) => {
|
|
503
|
-
if (a.product.packingType !== b.product.packingType) {
|
|
504
|
-
return a.product.packingType < b.product.packingType ? -1 : 1
|
|
505
|
-
}
|
|
506
|
-
if (a.product.sku !== b.product.sku) {
|
|
507
|
-
return a.product.sku < b.product.sku ? -1 : 1
|
|
508
|
-
}
|
|
509
|
-
return 0
|
|
510
|
-
})
|
|
511
|
-
|
|
600
|
+
const sortedMatchedOrderProducts = orderProducts.sort((a, b) => {
|
|
601
|
+
if (a.product.packingType !== b.product.packingType) {
|
|
602
|
+
return a.product.packingType < b.product.packingType ? -1 : 1
|
|
603
|
+
}
|
|
604
|
+
if (a.product.sku !== b.product.sku) {
|
|
605
|
+
return a.product.sku < b.product.sku ? -1 : 1
|
|
606
|
+
}
|
|
607
|
+
return 0
|
|
608
|
+
})
|
|
512
609
|
return sortedMatchedOrderProducts
|
|
513
610
|
} catch (e) {
|
|
514
611
|
logger.error(`[lmd-sort-product]: ${e} `)
|
|
515
612
|
}
|
|
516
613
|
}
|
|
517
614
|
|
|
518
|
-
export async function splitOrderConsignment(
|
|
519
|
-
tx: EntityManager,
|
|
520
|
-
releaseGood: ReleaseGood,
|
|
521
|
-
items: any,
|
|
522
|
-
user: User
|
|
523
|
-
): Promise<any> {
|
|
615
|
+
export async function splitOrderConsignment(tx: EntityManager, releaseGood: ReleaseGood, user: User): Promise<any> {
|
|
524
616
|
try {
|
|
525
617
|
let currentConsignment = { id: uuidv4(), totalWeight: 0, orderPackages: [] }
|
|
526
618
|
let totalConsignments = []
|
|
@@ -530,8 +622,8 @@ export async function splitOrderConsignment(
|
|
|
530
622
|
let orderProducts = releaseGood.orderProducts
|
|
531
623
|
let maxConsignmentWeight = releaseGood.lastMileDelivery.consignmentWeight
|
|
532
624
|
|
|
533
|
-
//sort
|
|
534
|
-
let sortItems = await sortingProduct(
|
|
625
|
+
//sort products according to the packingType
|
|
626
|
+
let sortItems = await sortingProduct(orderProducts)
|
|
535
627
|
|
|
536
628
|
//initialise new orderConsignment created
|
|
537
629
|
const createdNewConsignment = () => ({
|
|
@@ -628,7 +720,7 @@ export async function splitOrderConsignment(
|
|
|
628
720
|
id: uuidv4(),
|
|
629
721
|
name: OrderNoGenerator.orderPackageItem(),
|
|
630
722
|
releaseQty: op.releaseQty,
|
|
631
|
-
|
|
723
|
+
orderProduct: op,
|
|
632
724
|
domain: releaseGood.domain,
|
|
633
725
|
bizplace: releaseGood.bizplace,
|
|
634
726
|
creator: releaseGood.creator,
|
|
@@ -707,14 +799,14 @@ export async function createConsignmentWithMultipackage(
|
|
|
707
799
|
const savedOrderConsignment = await createOrderConsignment(tx, releaseGood, user, orderCons)
|
|
708
800
|
|
|
709
801
|
for (const currentPackage of orderCons.orderPackages) {
|
|
710
|
-
const savedOrderPackage = await
|
|
802
|
+
const savedOrderPackage = await createSofOrderPackage(
|
|
711
803
|
tx,
|
|
712
804
|
currentPackage,
|
|
713
805
|
releaseGood,
|
|
714
806
|
user,
|
|
715
807
|
savedOrderConsignment
|
|
716
808
|
)
|
|
717
|
-
const orderPackageItems = await
|
|
809
|
+
const orderPackageItems = await createSofOrderPackageItem(
|
|
718
810
|
tx,
|
|
719
811
|
currentPackage.orderPackageItems,
|
|
720
812
|
savedOrderPackage,
|
|
@@ -738,7 +830,7 @@ export async function createConsignmentWithMultipackage(
|
|
|
738
830
|
}
|
|
739
831
|
}
|
|
740
832
|
|
|
741
|
-
export async function
|
|
833
|
+
export async function createSofOrderPackage(
|
|
742
834
|
tx: EntityManager,
|
|
743
835
|
orderPackageData: any,
|
|
744
836
|
releaseGood: ReleaseGood,
|
|
@@ -768,26 +860,36 @@ export async function createConsignmentPackage(
|
|
|
768
860
|
}
|
|
769
861
|
}
|
|
770
862
|
|
|
771
|
-
export async function
|
|
863
|
+
export async function createSofOrderPackageItem(
|
|
772
864
|
tx: EntityManager,
|
|
773
865
|
orderPackageItemsData: any[],
|
|
774
866
|
savedOrderPackage: OrderPackage,
|
|
775
867
|
releaseGood: ReleaseGood
|
|
776
868
|
): Promise<OrderPackageItem[]> {
|
|
777
869
|
try {
|
|
778
|
-
const orderPackageItems =
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
870
|
+
const orderPackageItems = (
|
|
871
|
+
orderPackageItemsData.length > 0 ? orderPackageItemsData : releaseGood.orderProducts
|
|
872
|
+
).map(item => {
|
|
873
|
+
const isOrderPackageItemData = orderPackageItemsData.length > 0
|
|
874
|
+
const id = isOrderPackageItemData ? item.id : uuidv4()
|
|
875
|
+
const name = isOrderPackageItemData ? item.name : OrderNoGenerator.orderPackageItem()
|
|
876
|
+
const orderProduct = isOrderPackageItemData ? item.orderProduct : item
|
|
877
|
+
const releaseQty = isOrderPackageItemData ? item.releaseQty : item.releaseQty
|
|
878
|
+
|
|
879
|
+
return {
|
|
880
|
+
id,
|
|
881
|
+
name,
|
|
882
|
+
orderProduct,
|
|
883
|
+
status: ORDER_STATUS.PROCESSING,
|
|
884
|
+
releaseQty,
|
|
885
|
+
orderPackage: savedOrderPackage,
|
|
886
|
+
domain: releaseGood.domain,
|
|
887
|
+
bizplace: releaseGood.bizplace,
|
|
888
|
+
creator: releaseGood.creator,
|
|
889
|
+
updater: releaseGood.updater,
|
|
890
|
+
productDetail: isOrderPackageItemData ? item.productDetail : item.productDetail
|
|
891
|
+
}
|
|
892
|
+
})
|
|
791
893
|
|
|
792
894
|
let savedOrderPackageItems: OrderPackageItem[] = await tx.getRepository(OrderPackageItem).save(orderPackageItems)
|
|
793
895
|
|
|
@@ -799,19 +901,42 @@ export async function createConsignmentPackageItem(
|
|
|
799
901
|
|
|
800
902
|
export async function updatePackageId(packages, releaseGood, trxMgr) {
|
|
801
903
|
try {
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
904
|
+
//open new transactiion - same transaction will cause blocking
|
|
905
|
+
await getConnection().transaction(async tx2 => {
|
|
906
|
+
const orderPackages: OrderPackage[] = await tx2.getRepository(OrderPackage).find({
|
|
907
|
+
where: { releaseGood: { id: releaseGood.id } },
|
|
908
|
+
relations: ['releaseGood']
|
|
909
|
+
})
|
|
910
|
+
|
|
911
|
+
for (let orderPackage of orderPackages) {
|
|
912
|
+
let matchedPackage = packages.find(p => {
|
|
913
|
+
return p.orderPackageId == orderPackage.id
|
|
914
|
+
})
|
|
915
|
+
|
|
916
|
+
if (matchedPackage) {
|
|
917
|
+
await tx2.getRepository(OrderPackage).update(
|
|
918
|
+
{ id: orderPackage.id },
|
|
919
|
+
{
|
|
920
|
+
packageId: matchedPackage.packageId
|
|
921
|
+
}
|
|
922
|
+
)
|
|
811
923
|
}
|
|
812
|
-
|
|
813
|
-
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
let rg = await tx2.getRepository(ReleaseGood).findOne({ id: releaseGood.id })
|
|
927
|
+
|
|
928
|
+
if (rg) {
|
|
929
|
+
await tx2.getRepository(ReleaseGood).update(
|
|
930
|
+
{ id: releaseGood.id },
|
|
931
|
+
{
|
|
932
|
+
marketPackCallSuccess: new Date(),
|
|
933
|
+
lastMarketPackCall: new Date(),
|
|
934
|
+
updatedAt: new Date()
|
|
935
|
+
}
|
|
936
|
+
)
|
|
937
|
+
}
|
|
938
|
+
})
|
|
814
939
|
} catch (e) {
|
|
815
|
-
logger.error('unable-to-update-package-id-
|
|
940
|
+
logger.error('unable-to-update-package-id-mps')
|
|
816
941
|
}
|
|
817
942
|
}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Field,
|
|
3
|
-
ID,
|
|
4
|
-
ObjectType
|
|
5
|
-
} from 'type-graphql'
|
|
1
|
+
import { Field, ID, ObjectType } from 'type-graphql'
|
|
6
2
|
import {
|
|
7
3
|
Column,
|
|
8
4
|
CreateDateColumn,
|
|
@@ -19,10 +15,7 @@ import {
|
|
|
19
15
|
|
|
20
16
|
import { Attachment } from '@things-factory/attachment-base'
|
|
21
17
|
import { User } from '@things-factory/auth-base'
|
|
22
|
-
import {
|
|
23
|
-
Bizplace,
|
|
24
|
-
ContactPoint
|
|
25
|
-
} from '@things-factory/biz-base'
|
|
18
|
+
import { Bizplace, ContactPoint } from '@things-factory/biz-base'
|
|
26
19
|
import { config } from '@things-factory/env'
|
|
27
20
|
import { LastMileDelivery } from '@things-factory/integration-lmd'
|
|
28
21
|
import { Domain } from '@things-factory/shell'
|
|
@@ -63,13 +56,11 @@ export enum DispatchmentStatus {
|
|
|
63
56
|
@Index('ix_release-good_2', (releaseGood: ReleaseGood) => [releaseGood.domain, releaseGood.refNo2])
|
|
64
57
|
@Index('ix_release-good_3', (releaseGood: ReleaseGood) => [releaseGood.domain, releaseGood.remark])
|
|
65
58
|
@Index('ix_release-good_4', (releaseGood: ReleaseGood) => [releaseGood.domain, releaseGood.bizplace])
|
|
66
|
-
@Index(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
)
|
|
59
|
+
@Index('ix_release-good_5', (releaseGood: ReleaseGood) => [
|
|
60
|
+
releaseGood.domain,
|
|
61
|
+
releaseGood.bizplace,
|
|
62
|
+
releaseGood.refOrderId
|
|
63
|
+
])
|
|
73
64
|
@ObjectType()
|
|
74
65
|
export class ReleaseGood {
|
|
75
66
|
@PrimaryGeneratedColumn('uuid')
|
|
@@ -667,4 +658,4 @@ export class ReleaseGood {
|
|
|
667
658
|
})
|
|
668
659
|
@Field({ nullable: true })
|
|
669
660
|
sourceData: string
|
|
670
|
-
}
|
|
661
|
+
}
|