@things-factory/sales-base 4.3.524 → 4.3.526
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 +33 -341
- package/dist-server/controllers/ecommerce/powrup-controller.js.map +1 -1
- package/dist-server/controllers/ecommerce/webspert-controller.js +30 -10
- package/dist-server/controllers/ecommerce/webspert-controller.js.map +1 -1
- package/dist-server/service/order-consignment/order-consignment.js +6 -25
- package/dist-server/service/order-consignment/order-consignment.js.map +1 -1
- package/dist-server/service/order-package/order-package.js +5 -0
- package/dist-server/service/order-package/order-package.js.map +1 -1
- package/dist-server/service/release-good/release-good-mutation.js +1 -0
- package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
- package/dist-server/service/release-good/release-good-query.js +1 -1
- package/dist-server/service/release-good/release-good-query.js.map +1 -1
- package/dist-server/service/release-good/release-good.js +0 -5
- package/dist-server/service/release-good/release-good.js.map +1 -1
- package/dist-server/utils/order-no-generator.js +0 -3
- package/dist-server/utils/order-no-generator.js.map +1 -1
- package/package.json +16 -16
- package/server/controllers/ecommerce/powrup-controller.ts +36 -407
- package/server/controllers/ecommerce/webspert-controller.ts +49 -43
- package/server/service/order-consignment/order-consignment.ts +4 -22
- package/server/service/order-package/order-package.ts +5 -1
- package/server/service/release-good/release-good-mutation.ts +1 -0
- package/server/service/release-good/release-good-query.ts +1 -1
- package/server/service/release-good/release-good.ts +0 -5
- package/server/utils/order-no-generator.ts +0 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EntityManager, getConnection, getRepository } from 'typeorm'
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
import { Bizplace } from '@things-factory/biz-base'
|
|
4
4
|
import { logger } from '@things-factory/env'
|
|
5
5
|
import { Platform, Powrup, PowrupAPI } from '@things-factory/integration-powrup'
|
|
@@ -14,7 +14,6 @@ import { OrderProduct } from '../../service/order-product/order-product'
|
|
|
14
14
|
import { ReleaseGood } from '../../service/release-good/release-good'
|
|
15
15
|
import { OrderNoGenerator } from '../../utils'
|
|
16
16
|
import { DateTimeDifference } from '../../utils/datetime-util'
|
|
17
|
-
import { OrderConsignment } from '../../service/order-consignment/order-consignment'
|
|
18
17
|
|
|
19
18
|
const { PerformanceObserver, performance } = require('node:perf_hooks')
|
|
20
19
|
|
|
@@ -36,7 +35,9 @@ export class PowrupController {
|
|
|
36
35
|
|
|
37
36
|
try {
|
|
38
37
|
const orderProducts: OrderProduct[] = releaseGood.orderProducts
|
|
39
|
-
const orderInformation: any = {
|
|
38
|
+
const orderInformation: any = {
|
|
39
|
+
refOrderId: releaseGood.refOrderId
|
|
40
|
+
}
|
|
40
41
|
|
|
41
42
|
if (
|
|
42
43
|
releaseGood?.lastMarketPackCall &&
|
|
@@ -55,57 +56,47 @@ export class PowrupController {
|
|
|
55
56
|
context: { state: { domain: domain || null, user: user || null } }
|
|
56
57
|
})
|
|
57
58
|
performance.mark(`end:${releaseGood.refOrderId}`)
|
|
58
|
-
|
|
59
59
|
if (orderPack?.packages) {
|
|
60
60
|
const packages: any[] = orderPack.packages
|
|
61
|
+
|
|
61
62
|
await Promise.all(
|
|
62
63
|
packages.map(async pkg => {
|
|
63
64
|
const items = pkg.items
|
|
65
|
+
const orderPackage: any = {
|
|
66
|
+
name: OrderNoGenerator.orderPackage(),
|
|
67
|
+
packageId: pkg.packageId,
|
|
68
|
+
status: ORDER_STATUS.PROCESSING,
|
|
69
|
+
releaseGood,
|
|
70
|
+
domain: releaseGood.domain,
|
|
71
|
+
bizplace: releaseGood.bizplace,
|
|
72
|
+
creator: releaseGood.creator,
|
|
73
|
+
updater: releaseGood.updater
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
let savedOrderPackage: OrderPackage = await trxMgr.getRepository(OrderPackage).save(orderPackage)
|
|
64
77
|
|
|
65
|
-
const
|
|
78
|
+
const orderPackageItems: OrderPackageItem[] = items.map(itm => {
|
|
79
|
+
const { refCode, qty } = itm
|
|
80
|
+
if (!refCode) {
|
|
81
|
+
throw new Error(`universalIdentifier missing`)
|
|
82
|
+
}
|
|
83
|
+
const matchedOrderProduct: OrderProduct = orderProducts.find(op => op.productDetail.refCode == refCode)
|
|
66
84
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
} else {
|
|
71
|
-
let orderConsignment = await createOrderConsignment(trxMgr, releaseGood, user)
|
|
72
|
-
const orderPackage: any = {
|
|
73
|
-
name: OrderNoGenerator.orderPackage(),
|
|
74
|
-
packageId: pkg.packageId,
|
|
85
|
+
return {
|
|
86
|
+
name: OrderNoGenerator.orderPackageItem(),
|
|
87
|
+
orderProduct: matchedOrderProduct,
|
|
75
88
|
status: ORDER_STATUS.PROCESSING,
|
|
76
|
-
|
|
77
|
-
|
|
89
|
+
releaseQty: qty,
|
|
90
|
+
orderPackage: savedOrderPackage,
|
|
78
91
|
domain: releaseGood.domain,
|
|
79
92
|
bizplace: releaseGood.bizplace,
|
|
80
93
|
creator: releaseGood.creator,
|
|
81
|
-
updater: releaseGood.updater
|
|
94
|
+
updater: releaseGood.updater,
|
|
95
|
+
productDetail: matchedOrderProduct?.productDetail
|
|
82
96
|
}
|
|
97
|
+
})
|
|
83
98
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const orderPackageItems: OrderPackageItem[] = items.map(itm => {
|
|
87
|
-
const { refCode, qty } = itm
|
|
88
|
-
if (!refCode) {
|
|
89
|
-
throw new Error(`universalIdentifier missing`)
|
|
90
|
-
}
|
|
91
|
-
const matchedOrderProduct: OrderProduct = orderProducts.find(op => op.productDetail.refCode == refCode)
|
|
92
|
-
|
|
93
|
-
return {
|
|
94
|
-
name: OrderNoGenerator.orderPackageItem(),
|
|
95
|
-
orderProduct: matchedOrderProduct,
|
|
96
|
-
status: ORDER_STATUS.PROCESSING,
|
|
97
|
-
releaseQty: qty,
|
|
98
|
-
orderPackage: savedOrderPackage,
|
|
99
|
-
domain: releaseGood.domain,
|
|
100
|
-
bizplace: releaseGood.bizplace,
|
|
101
|
-
creator: releaseGood.creator,
|
|
102
|
-
updater: releaseGood.updater,
|
|
103
|
-
productDetail: matchedOrderProduct?.productDetail
|
|
104
|
-
}
|
|
105
|
-
})
|
|
106
|
-
|
|
107
|
-
await trxMgr.getRepository(OrderPackageItem).save(orderPackageItems)
|
|
108
|
-
}
|
|
99
|
+
await trxMgr.getRepository(OrderPackageItem).save(orderPackageItems)
|
|
109
100
|
})
|
|
110
101
|
)
|
|
111
102
|
|
|
@@ -239,9 +230,8 @@ export class PowrupController {
|
|
|
239
230
|
}
|
|
240
231
|
|
|
241
232
|
try {
|
|
242
|
-
let orderPackages: OrderPackage[] = await (
|
|
243
|
-
|
|
244
|
-
).find({ where: { releaseGood } })
|
|
233
|
+
let orderPackages: OrderPackage[] = await (trxMgr?.getRepository(OrderPackage) || getRepository(OrderPackage))
|
|
234
|
+
.find({ where: { releaseGood } })
|
|
245
235
|
|
|
246
236
|
if (orderPackages?.length) {
|
|
247
237
|
await Promise.all(
|
|
@@ -280,10 +270,7 @@ export class PowrupController {
|
|
|
280
270
|
updater: user
|
|
281
271
|
}
|
|
282
272
|
|
|
283
|
-
await (trxMgr?.getRepository(OrderPackage) || getRepository(OrderPackage)).update(
|
|
284
|
-
{ id: op.id },
|
|
285
|
-
{ ...updateInfo }
|
|
286
|
-
)
|
|
273
|
+
await (trxMgr?.getRepository(OrderPackage) || getRepository(OrderPackage)).update({ id: op.id }, { ...updateInfo })
|
|
287
274
|
}
|
|
288
275
|
} catch (error) {
|
|
289
276
|
performance.mark(`end:${releaseGood.refOrderId} - ${op.packageId}`)
|
|
@@ -298,9 +285,7 @@ export class PowrupController {
|
|
|
298
285
|
})
|
|
299
286
|
)
|
|
300
287
|
|
|
301
|
-
releaseGood = await (trxMgr?.getRepository(ReleaseGood) || getRepository(ReleaseGood)).findOne({
|
|
302
|
-
id: releaseGood.id
|
|
303
|
-
})
|
|
288
|
+
releaseGood = await (trxMgr?.getRepository(ReleaseGood) || getRepository(ReleaseGood)).findOne({ id: releaseGood.id })
|
|
304
289
|
}
|
|
305
290
|
|
|
306
291
|
return releaseGood
|
|
@@ -384,359 +369,3 @@ export class PowrupController {
|
|
|
384
369
|
}
|
|
385
370
|
}
|
|
386
371
|
}
|
|
387
|
-
|
|
388
|
-
export async function createOrderConsignment(
|
|
389
|
-
tx: EntityManager,
|
|
390
|
-
releaseGood: ReleaseGood,
|
|
391
|
-
user?: User,
|
|
392
|
-
orderCons?: OrderConsignment
|
|
393
|
-
): Promise<OrderConsignment> {
|
|
394
|
-
try {
|
|
395
|
-
const orderConsignment: OrderConsignment = {
|
|
396
|
-
id: uuidv4(),
|
|
397
|
-
name: OrderNoGenerator.orderConsignment(),
|
|
398
|
-
noOfPackages: orderCons?.orderPackages?.length ? orderCons.orderPackages.length : 1,
|
|
399
|
-
domain: releaseGood.domain,
|
|
400
|
-
bizplace: releaseGood.bizplace,
|
|
401
|
-
releaseGood: releaseGood,
|
|
402
|
-
orderPackages: [],
|
|
403
|
-
creator: user,
|
|
404
|
-
updater: user
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
return tx.getRepository(OrderConsignment).save(orderConsignment)
|
|
408
|
-
} catch (e) {
|
|
409
|
-
logger.error(`[lmd-create-order-consignment]: ${e} `)
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
export async function sortingProduct(items, releaseGood): Promise<any> {
|
|
414
|
-
try {
|
|
415
|
-
let orderProducts: OrderProduct[] = releaseGood.orderProducts
|
|
416
|
-
|
|
417
|
-
const sortedMatchedOrderProducts = items
|
|
418
|
-
.map(itm => {
|
|
419
|
-
const { refCode, qty } = itm
|
|
420
|
-
if (!refCode) {
|
|
421
|
-
throw new Error(`universalIdentifier missing`)
|
|
422
|
-
}
|
|
423
|
-
// Find matched order product for each item
|
|
424
|
-
return orderProducts.find(op => op.productDetail.refCode === refCode) || null
|
|
425
|
-
})
|
|
426
|
-
.filter(item => item) // Filter out any null values
|
|
427
|
-
.sort((a, b) => {
|
|
428
|
-
if (a.product.packingType !== b.product.packingType) {
|
|
429
|
-
return a.product.packingType < b.product.packingType ? -1 : 1
|
|
430
|
-
}
|
|
431
|
-
if (a.product.sku !== b.product.sku) {
|
|
432
|
-
return a.product.sku < b.product.sku ? -1 : 1
|
|
433
|
-
}
|
|
434
|
-
return 0
|
|
435
|
-
})
|
|
436
|
-
|
|
437
|
-
return sortedMatchedOrderProducts
|
|
438
|
-
} catch (e) {
|
|
439
|
-
logger.error(`[lmd-sort-product]: ${e} `)
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
export async function splitOrderConsignment(
|
|
444
|
-
tx: EntityManager,
|
|
445
|
-
releaseGood: ReleaseGood,
|
|
446
|
-
items: any,
|
|
447
|
-
user: User
|
|
448
|
-
): Promise<any> {
|
|
449
|
-
try {
|
|
450
|
-
let currentConsignment = { id: uuidv4(), totalWeight: 0, orderPackages: [] }
|
|
451
|
-
let totalConsignments = []
|
|
452
|
-
let currOrderProducts = []
|
|
453
|
-
let totalConsignmentWeight = 0
|
|
454
|
-
|
|
455
|
-
let orderProducts = releaseGood.orderProducts
|
|
456
|
-
let maxConsignmentWeight = releaseGood.lastMileDelivery.consignmentWeight
|
|
457
|
-
|
|
458
|
-
//sort items from packOrder API
|
|
459
|
-
let sortItems = await sortingProduct(items, releaseGood)
|
|
460
|
-
|
|
461
|
-
//initialise new orderConsignment created
|
|
462
|
-
const createdNewConsignment = () => ({
|
|
463
|
-
id: uuidv4(),
|
|
464
|
-
totalWeight: 0,
|
|
465
|
-
orderPackages: []
|
|
466
|
-
})
|
|
467
|
-
|
|
468
|
-
//push orderPackage & packageItems into consigment
|
|
469
|
-
const createPackageConsignment = (consignment, packageWeight, releaseGood, orderProduct, releaseQty, user) => {
|
|
470
|
-
consignment.totalWeight += packageWeight
|
|
471
|
-
|
|
472
|
-
currentConsignment.orderPackages.push({
|
|
473
|
-
id: uuidv4(),
|
|
474
|
-
name: OrderNoGenerator.orderPackage(),
|
|
475
|
-
packageId: null,
|
|
476
|
-
trackingNo: null,
|
|
477
|
-
transporter: null,
|
|
478
|
-
airwayBill: releaseGood?.airwayBill,
|
|
479
|
-
invoice: releaseGood?.invoice,
|
|
480
|
-
status: ORDER_STATUS.PROCESSING,
|
|
481
|
-
releaseGood,
|
|
482
|
-
domain: releaseGood.domain,
|
|
483
|
-
bizplace: releaseGood.bizplace,
|
|
484
|
-
creator: user,
|
|
485
|
-
updater: user,
|
|
486
|
-
orderPackageItems: [
|
|
487
|
-
{
|
|
488
|
-
id: uuidv4(),
|
|
489
|
-
name: OrderNoGenerator.orderPackageItem(),
|
|
490
|
-
releaseQty: releaseQty,
|
|
491
|
-
orderProduct: orderProduct,
|
|
492
|
-
domain: releaseGood.domain,
|
|
493
|
-
bizplace: releaseGood.bizplace,
|
|
494
|
-
creator: releaseGood.creator,
|
|
495
|
-
updater: releaseGood.updater,
|
|
496
|
-
productDetail: orderProduct.productDetail
|
|
497
|
-
}
|
|
498
|
-
]
|
|
499
|
-
})
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
const createPackage = op => {
|
|
503
|
-
let releaseQty = op.productDetail.packingType.toLowerCase() === 'carton' ? 1 : op.releaseQty
|
|
504
|
-
let packageWeight =
|
|
505
|
-
op.productDetail.packingType.toLowerCase() === 'carton'
|
|
506
|
-
? op.productDetail.grossWeight
|
|
507
|
-
: op.productDetail.grossWeight * releaseQty
|
|
508
|
-
|
|
509
|
-
const isCarton = op.productDetail.packingType.toLowerCase() === 'carton'
|
|
510
|
-
totalConsignmentWeight += packageWeight
|
|
511
|
-
const requiresNewConsignment = totalConsignmentWeight + packageWeight >= maxConsignmentWeight
|
|
512
|
-
|
|
513
|
-
if (isCarton || op.releaseQty > 1) {
|
|
514
|
-
if (requiresNewConsignment) {
|
|
515
|
-
//push the current consignment to create new consignment
|
|
516
|
-
totalConsignments.push(currentConsignment)
|
|
517
|
-
|
|
518
|
-
//Initialise the totalConsignment weight to the new data
|
|
519
|
-
totalConsignmentWeight = packageWeight + 0
|
|
520
|
-
currentConsignment = createdNewConsignment()
|
|
521
|
-
}
|
|
522
|
-
createPackageConsignment(currentConsignment, packageWeight, releaseGood, op, releaseQty, user)
|
|
523
|
-
} else {
|
|
524
|
-
currOrderProducts.push(op)
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
sortItems.forEach(item => {
|
|
529
|
-
let productDetail: ProductDetail = item.productDetail
|
|
530
|
-
if (productDetail.packingType.toLowerCase() === 'carton') {
|
|
531
|
-
for (let i = 0; i < item.releaseQty; i++) {
|
|
532
|
-
createPackage(item)
|
|
533
|
-
}
|
|
534
|
-
} else {
|
|
535
|
-
createPackage(item)
|
|
536
|
-
}
|
|
537
|
-
})
|
|
538
|
-
|
|
539
|
-
// Add any remaining items to the last orderPackage
|
|
540
|
-
if (currOrderProducts.length > 0) {
|
|
541
|
-
let availableConsignment
|
|
542
|
-
|
|
543
|
-
for (let i = 0; i < currOrderProducts.length; i++) {
|
|
544
|
-
let op = currOrderProducts[i]
|
|
545
|
-
let releaseQty = op.releaseQty
|
|
546
|
-
let currProductWeight = op.productDetail.grossWeight * op.releaseQty
|
|
547
|
-
let lastOrderPackage = currentConsignment.orderPackages[currentConsignment.orderPackages.length - 1]
|
|
548
|
-
|
|
549
|
-
//push the product into last current consignment orderPackage
|
|
550
|
-
if (currentConsignment.totalWeight + currProductWeight < maxConsignmentWeight) {
|
|
551
|
-
if (lastOrderPackage) {
|
|
552
|
-
lastOrderPackage.orderPackageItems.push({
|
|
553
|
-
id: uuidv4(),
|
|
554
|
-
name: OrderNoGenerator.orderPackageItem(),
|
|
555
|
-
releaseQty: op.releaseQty,
|
|
556
|
-
orderProducts: op,
|
|
557
|
-
domain: releaseGood.domain,
|
|
558
|
-
bizplace: releaseGood.bizplace,
|
|
559
|
-
creator: releaseGood.creator,
|
|
560
|
-
updater: releaseGood.updater,
|
|
561
|
-
productDetail: op.productDetail
|
|
562
|
-
})
|
|
563
|
-
} else {
|
|
564
|
-
await createPackageConsignment(currentConsignment, currProductWeight, releaseGood, op, releaseQty, user)
|
|
565
|
-
}
|
|
566
|
-
} else {
|
|
567
|
-
//push the currentConsignment into list of all the consignments
|
|
568
|
-
if (!totalConsignments.some(tc => tc.id === currentConsignment.id)) {
|
|
569
|
-
totalConsignments.push(currentConsignment)
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
//find one order consignment to include the product
|
|
573
|
-
availableConsignment = totalConsignments.find(tc => {
|
|
574
|
-
tc.totalWeight += currProductWeight < maxConsignmentWeight
|
|
575
|
-
})
|
|
576
|
-
|
|
577
|
-
if (availableConsignment) {
|
|
578
|
-
let lastOrderPackage = availableConsignment.orderPackages[currentConsignment.orderPackages.length - 1]
|
|
579
|
-
lastOrderPackage.orderPackageItems.push({
|
|
580
|
-
id: uuidv4(),
|
|
581
|
-
name: OrderNoGenerator.orderPackageItem(),
|
|
582
|
-
releaseQty: op.releaseQty,
|
|
583
|
-
orderProduct: op,
|
|
584
|
-
domain: releaseGood.domain,
|
|
585
|
-
bizplace: releaseGood.bizplace,
|
|
586
|
-
creator: releaseGood.creator,
|
|
587
|
-
updater: releaseGood.updater,
|
|
588
|
-
productDetail: op.productDetail
|
|
589
|
-
})
|
|
590
|
-
|
|
591
|
-
//update the totalConsignment data
|
|
592
|
-
totalConsignments = totalConsignments.map(tc => {
|
|
593
|
-
tc.id === availableConsignment.id ? availableConsignment : tc
|
|
594
|
-
})
|
|
595
|
-
} else {
|
|
596
|
-
//create new consignment if no consignment available
|
|
597
|
-
currentConsignment = createdNewConsignment()
|
|
598
|
-
createPackageConsignment(currentConsignment, currProductWeight, releaseGood, op, releaseQty, user)
|
|
599
|
-
|
|
600
|
-
totalConsignments.push(currentConsignment)
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
const existingConsignment = totalConsignments.find(tc => tc.id === currentConsignment.id)
|
|
607
|
-
|
|
608
|
-
if (!existingConsignment) {
|
|
609
|
-
totalConsignments.push(currentConsignment)
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
let orderConsignment = totalConsignments
|
|
613
|
-
let newReleaseGood = await createConsignmentWithMultipackage(tx, orderConsignment, releaseGood, user)
|
|
614
|
-
|
|
615
|
-
return newReleaseGood
|
|
616
|
-
} catch (e) {
|
|
617
|
-
logger.error(e)
|
|
618
|
-
}
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
export async function createConsignmentWithMultipackage(
|
|
622
|
-
tx: EntityManager,
|
|
623
|
-
orderConsList: OrderConsignment[],
|
|
624
|
-
releaseGood: ReleaseGood,
|
|
625
|
-
user: User
|
|
626
|
-
): Promise<any> {
|
|
627
|
-
try {
|
|
628
|
-
let newOrderPackages = []
|
|
629
|
-
let newOrderConsignments: OrderConsignment[] = []
|
|
630
|
-
|
|
631
|
-
for (const orderCons of orderConsList) {
|
|
632
|
-
const savedOrderConsignment = await createOrderConsignment(tx, releaseGood, user, orderCons)
|
|
633
|
-
|
|
634
|
-
for (const currentPackage of orderCons.orderPackages) {
|
|
635
|
-
const savedOrderPackage = await createConsignmentPackage(
|
|
636
|
-
tx,
|
|
637
|
-
currentPackage,
|
|
638
|
-
releaseGood,
|
|
639
|
-
user,
|
|
640
|
-
savedOrderConsignment
|
|
641
|
-
)
|
|
642
|
-
const orderPackageItems = await createConsignmentPackageItem(
|
|
643
|
-
tx,
|
|
644
|
-
currentPackage.orderPackageItems,
|
|
645
|
-
savedOrderPackage,
|
|
646
|
-
releaseGood
|
|
647
|
-
)
|
|
648
|
-
|
|
649
|
-
savedOrderPackage.orderPackageItems = orderPackageItems
|
|
650
|
-
savedOrderConsignment.orderPackages.push(savedOrderPackage)
|
|
651
|
-
newOrderPackages.push(savedOrderPackage)
|
|
652
|
-
}
|
|
653
|
-
newOrderConsignments.push(savedOrderConsignment)
|
|
654
|
-
}
|
|
655
|
-
|
|
656
|
-
releaseGood.orderConsignments = newOrderConsignments
|
|
657
|
-
releaseGood.orderPackages = newOrderPackages
|
|
658
|
-
|
|
659
|
-
return releaseGood
|
|
660
|
-
} catch (error) {
|
|
661
|
-
console.error('Error creating consignment with multiple packages:', error)
|
|
662
|
-
throw error
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
|
|
666
|
-
export async function createConsignmentPackage(
|
|
667
|
-
tx: EntityManager,
|
|
668
|
-
orderPackageData: any,
|
|
669
|
-
releaseGood: ReleaseGood,
|
|
670
|
-
user: User,
|
|
671
|
-
orderConsignment: OrderConsignment
|
|
672
|
-
): Promise<OrderPackage> {
|
|
673
|
-
try {
|
|
674
|
-
const orderPackage: any = {
|
|
675
|
-
id: uuidv4(),
|
|
676
|
-
name: OrderNoGenerator.orderPackage(),
|
|
677
|
-
packageId: null,
|
|
678
|
-
trackingNo: null,
|
|
679
|
-
transporter: null,
|
|
680
|
-
airwayBill: releaseGood?.airwayBill,
|
|
681
|
-
invoice: releaseGood?.invoice,
|
|
682
|
-
status: ORDER_STATUS.PROCESSING,
|
|
683
|
-
releaseGood,
|
|
684
|
-
domain: releaseGood.domain,
|
|
685
|
-
bizplace: releaseGood.bizplace,
|
|
686
|
-
creator: user,
|
|
687
|
-
updater: user,
|
|
688
|
-
orderConsignment
|
|
689
|
-
}
|
|
690
|
-
return tx.getRepository(OrderPackage).save(orderPackage)
|
|
691
|
-
} catch (e) {
|
|
692
|
-
logger.error(`[lmd-create-order-package]: ${e} `)
|
|
693
|
-
}
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
export async function createConsignmentPackageItem(
|
|
697
|
-
tx: EntityManager,
|
|
698
|
-
orderPackageItemsData: any[],
|
|
699
|
-
savedOrderPackage: OrderPackage,
|
|
700
|
-
releaseGood: ReleaseGood
|
|
701
|
-
): Promise<OrderPackageItem[]> {
|
|
702
|
-
try {
|
|
703
|
-
const orderPackageItems = orderPackageItemsData.map(opi => ({
|
|
704
|
-
id: opi.id,
|
|
705
|
-
name: opi.name,
|
|
706
|
-
orderProduct: opi.orderProduct,
|
|
707
|
-
status: ORDER_STATUS.PROCESSING,
|
|
708
|
-
releaseQty: opi.releaseQty,
|
|
709
|
-
orderPackage: savedOrderPackage,
|
|
710
|
-
domain: releaseGood.domain,
|
|
711
|
-
bizplace: releaseGood.bizplace,
|
|
712
|
-
creator: releaseGood.creator,
|
|
713
|
-
updater: releaseGood.updater,
|
|
714
|
-
productDetail: opi.productDetail
|
|
715
|
-
}))
|
|
716
|
-
|
|
717
|
-
let savedOrderPackageItems: OrderPackageItem[] = await tx.getRepository(OrderPackageItem).save(orderPackageItems)
|
|
718
|
-
|
|
719
|
-
return savedOrderPackageItems
|
|
720
|
-
} catch (e) {
|
|
721
|
-
logger.error(`[lmd-create-order-package]: ${e} `)
|
|
722
|
-
}
|
|
723
|
-
}
|
|
724
|
-
|
|
725
|
-
export async function updatePackageId(packages, releaseGood, trxMgr) {
|
|
726
|
-
try {
|
|
727
|
-
const orderPackage = await trxMgr.getRepository(OrderPackage).findOne({
|
|
728
|
-
where: { releaseGood: { id: releaseGood.id } },
|
|
729
|
-
relations: ['releaseGood']
|
|
730
|
-
})
|
|
731
|
-
if (orderPackage) {
|
|
732
|
-
await trxMgr.getRepository(OrderPackage).update(
|
|
733
|
-
{ name: orderPackage.name },
|
|
734
|
-
{
|
|
735
|
-
packageId: packages[0].packageId
|
|
736
|
-
}
|
|
737
|
-
)
|
|
738
|
-
}
|
|
739
|
-
} catch (e) {
|
|
740
|
-
logger.error('unable-to-update-package-id-powrup')
|
|
741
|
-
}
|
|
742
|
-
}
|
|
@@ -2,29 +2,22 @@ import { EntityManager, getConnection, getRepository } from 'typeorm'
|
|
|
2
2
|
|
|
3
3
|
import { logger } from '@things-factory/env'
|
|
4
4
|
import { Domain, User } from '@things-factory/shell'
|
|
5
|
-
import {
|
|
6
|
-
|
|
5
|
+
import { sleep } from '@things-factory/utils'
|
|
7
6
|
import { WebspertController as BaseWebspertController } from '@things-factory/warehouse-base'
|
|
8
7
|
|
|
9
8
|
import { ORDER_STATUS } from '../../constants'
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
import { sleep } from '@things-factory/utils'
|
|
9
|
+
import { OrderPackage, OrderPackageItem, OrderProduct, ReleaseGood } from '../../service'
|
|
13
10
|
import { OrderNoGenerator } from '../../utils'
|
|
14
11
|
|
|
15
12
|
export class WebspertController {
|
|
16
|
-
public static async packOrder(
|
|
17
|
-
releaseGood: ReleaseGood,
|
|
18
|
-
domain: Domain,
|
|
19
|
-
user: User
|
|
20
|
-
) {
|
|
13
|
+
public static async packOrder(releaseGood: ReleaseGood, domain: Domain, user: User) {
|
|
21
14
|
await getConnection().transaction(async trx => {
|
|
22
15
|
releaseGood = await trx.getRepository(ReleaseGood).findOne({ where: { id: releaseGood.id, domain } })
|
|
23
16
|
|
|
24
17
|
// let releaseOrder = await trx.getRepository(ReleaseGood).findOne({ refNo: releaseGood.refNo, refNo2: releaseGood.refNo2, refNo3: releaseGood.refNo3, domain })
|
|
25
18
|
|
|
26
19
|
// // only recall if releaseGood exists and pack Order fail
|
|
27
|
-
if (!releaseGood
|
|
20
|
+
if (!releaseGood || releaseGood?.marketPackCallSuccess) return false
|
|
28
21
|
|
|
29
22
|
try {
|
|
30
23
|
let results = await BaseWebspertController.sendRequestToAPI(
|
|
@@ -39,10 +32,11 @@ export class WebspertController {
|
|
|
39
32
|
throw new Error(results.statusText)
|
|
40
33
|
}
|
|
41
34
|
|
|
42
|
-
if (results?.data?.code ===
|
|
35
|
+
if (results?.data?.code === 0) {
|
|
43
36
|
await updatePackOrderStatus(trx, releaseGood)
|
|
44
37
|
return true
|
|
45
38
|
}
|
|
39
|
+
throw results?.data
|
|
46
40
|
} catch (error) {
|
|
47
41
|
logger.error(`webspert-controller[packOrder]: ${error}`)
|
|
48
42
|
await updatePackOrderStatus(trx, releaseGood, true)
|
|
@@ -51,20 +45,22 @@ export class WebspertController {
|
|
|
51
45
|
})
|
|
52
46
|
}
|
|
53
47
|
|
|
54
|
-
public static async fetchPackageAndDocument(
|
|
55
|
-
releaseGood: ReleaseGood,
|
|
56
|
-
domain: Domain,
|
|
57
|
-
user: User
|
|
58
|
-
) {
|
|
48
|
+
public static async fetchPackageAndDocument(releaseGood: ReleaseGood, domain: Domain, user: User) {
|
|
59
49
|
await getConnection().transaction(async trx => {
|
|
60
50
|
let roUpdateFields: Partial<ReleaseGood> = null
|
|
61
51
|
|
|
62
52
|
let releaseOrder = await trx.getRepository(ReleaseGood).findOne({
|
|
63
53
|
where: { id: releaseGood.id, domain },
|
|
64
|
-
relations: [
|
|
54
|
+
relations: [
|
|
55
|
+
'bizplace',
|
|
56
|
+
'domain',
|
|
57
|
+
'orderProducts',
|
|
58
|
+
'orderProducts.productDetail',
|
|
59
|
+
'orderProducts.productDetail.product'
|
|
60
|
+
]
|
|
65
61
|
})
|
|
66
62
|
|
|
67
|
-
if (releaseOrder) {
|
|
63
|
+
if (releaseOrder && releaseOrder.marketPackCallSuccess) {
|
|
68
64
|
try {
|
|
69
65
|
// capture update fields
|
|
70
66
|
roUpdateFields = {
|
|
@@ -103,13 +99,12 @@ export class WebspertController {
|
|
|
103
99
|
releaseGood: ReleaseGood,
|
|
104
100
|
orderPackages: OrderPackage[],
|
|
105
101
|
domain: Domain,
|
|
106
|
-
user: User
|
|
102
|
+
user: User
|
|
107
103
|
) {
|
|
108
104
|
if (orderPackages == null || orderPackages.length == 0) {
|
|
109
105
|
if (releaseGood) {
|
|
110
106
|
orderPackages = await getRepository(OrderPackage).find({ where: { releaseGood } })
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
107
|
+
} else {
|
|
113
108
|
console.error('webspert-controller[initiateShipment]: releaseGood is not found')
|
|
114
109
|
return false
|
|
115
110
|
}
|
|
@@ -143,18 +138,13 @@ export class WebspertController {
|
|
|
143
138
|
})
|
|
144
139
|
}
|
|
145
140
|
|
|
146
|
-
public static async triggerOrderProcesses(
|
|
147
|
-
releaseGood: ReleaseGood,
|
|
148
|
-
domain: Domain,
|
|
149
|
-
user: User,
|
|
150
|
-
triggerRTS: false
|
|
151
|
-
) {
|
|
141
|
+
public static async triggerOrderProcesses(releaseGood: ReleaseGood, domain: Domain, user: User, triggerRTS: false) {
|
|
152
142
|
try {
|
|
153
143
|
const waitTime = 200
|
|
154
144
|
|
|
155
145
|
releaseGood = await getRepository(ReleaseGood).findOne({ where: { id: releaseGood.id, domain } })
|
|
156
146
|
// // only recall if fail
|
|
157
|
-
if (releaseGood
|
|
147
|
+
if (!releaseGood?.marketPackCallSuccess) {
|
|
158
148
|
await this.packOrder(releaseGood, domain, user)
|
|
159
149
|
await sleep(waitTime)
|
|
160
150
|
}
|
|
@@ -167,7 +157,6 @@ export class WebspertController {
|
|
|
167
157
|
}
|
|
168
158
|
|
|
169
159
|
return true
|
|
170
|
-
|
|
171
160
|
} catch (error) {
|
|
172
161
|
logger.error(error)
|
|
173
162
|
}
|
|
@@ -180,16 +169,17 @@ async function updateRO(releaseGoodId, roUpdateFields, trxMgr) {
|
|
|
180
169
|
}
|
|
181
170
|
}
|
|
182
171
|
|
|
183
|
-
async function generatePackage(
|
|
184
|
-
releaseGood: ReleaseGood,
|
|
185
|
-
packages: any[],
|
|
186
|
-
user: User,
|
|
187
|
-
trxMgr: EntityManager
|
|
188
|
-
) {
|
|
172
|
+
async function generatePackage(releaseGood: ReleaseGood, packages: any[], user: User, trxMgr: EntityManager) {
|
|
189
173
|
if (packages.length > 0) {
|
|
190
174
|
packages = await Promise.all(
|
|
191
175
|
packages.map(async pkg => {
|
|
192
|
-
const [items, awbUrl, packageId, trackingNo, transporter] = [
|
|
176
|
+
const [items, awbUrl, packageId, trackingNo, transporter] = [
|
|
177
|
+
pkg.products,
|
|
178
|
+
pkg.awb_link,
|
|
179
|
+
pkg.package_id,
|
|
180
|
+
pkg.tracking_number,
|
|
181
|
+
pkg.transporter
|
|
182
|
+
]
|
|
193
183
|
|
|
194
184
|
if (items.length < 1) {
|
|
195
185
|
throw new Error('No items found in package')
|
|
@@ -235,12 +225,16 @@ async function generatePackage(
|
|
|
235
225
|
if (!sku) {
|
|
236
226
|
throw new Error(`universalIdentifier missing`)
|
|
237
227
|
}
|
|
238
|
-
const matchedOrderPackageItem: OrderPackageItem = orderPackageItems.find(
|
|
228
|
+
const matchedOrderPackageItem: OrderPackageItem = orderPackageItems.find(
|
|
229
|
+
op => op.productDetail.product.sku == sku && op.releaseQty == qty
|
|
230
|
+
)
|
|
239
231
|
|
|
240
232
|
if (matchedOrderPackageItem) {
|
|
241
233
|
return matchedOrderPackageItem
|
|
242
234
|
} else {
|
|
243
|
-
const matchedOrderProduct: OrderProduct = releaseGood.orderProducts.find(
|
|
235
|
+
const matchedOrderProduct: OrderProduct = releaseGood.orderProducts.find(
|
|
236
|
+
op => op.productDetail.product.sku == sku
|
|
237
|
+
)
|
|
244
238
|
return {
|
|
245
239
|
name: OrderNoGenerator.orderPackageItem(),
|
|
246
240
|
orderProduct: matchedOrderProduct,
|
|
@@ -268,20 +262,32 @@ async function generatePackage(
|
|
|
268
262
|
if (packages.length == packages.filter(pkg => pkg.packageId).length) {
|
|
269
263
|
return {
|
|
270
264
|
packageId: packages[0].packageId,
|
|
271
|
-
|
|
265
|
+
packOrderFail: false,
|
|
272
266
|
lastMarketPackCall: new Date(),
|
|
273
267
|
updatedAt: new Date()
|
|
274
268
|
}
|
|
275
269
|
} else {
|
|
276
270
|
return {
|
|
277
271
|
lastMarketPackCall: new Date(),
|
|
278
|
-
|
|
272
|
+
packOrderFail: true,
|
|
273
|
+
updatedAt: new Date(),
|
|
279
274
|
}
|
|
280
275
|
}
|
|
281
276
|
}
|
|
282
277
|
}
|
|
283
278
|
|
|
284
279
|
async function updatePackOrderStatus(trx, releaseOrder, status: Boolean = false) {
|
|
285
|
-
|
|
280
|
+
let updateValues: any = {
|
|
281
|
+
lastMarketPackCall: new Date()
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
if (status == false) {
|
|
285
|
+
updateValues = {
|
|
286
|
+
...updateValues,
|
|
287
|
+
marketPackCallSuccess: new Date()
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
await trx.getRepository(ReleaseGood).update({ id: releaseOrder.id }, updateValues)
|
|
286
292
|
return true
|
|
287
|
-
}
|
|
293
|
+
}
|