@things-factory/operato-hub 4.3.822 → 4.3.824
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/config.development.js +89 -45
- package/dist-server/graphql/resolvers/email/send-emails.js +5 -1
- package/dist-server/graphql/resolvers/email/send-emails.js.map +1 -1
- package/dist-server/graphql/resolvers/synchronization/powrup-get-airway-bill.js +103 -53
- package/dist-server/graphql/resolvers/synchronization/powrup-get-airway-bill.js.map +1 -1
- package/dist-server/graphql/resolvers/synchronization/powrup-get-tracking-no.js +80 -39
- package/dist-server/graphql/resolvers/synchronization/powrup-get-tracking-no.js.map +1 -1
- package/dist-server/graphql/resolvers/synchronization/powrup-initiate-shipment.js +95 -65
- package/dist-server/graphql/resolvers/synchronization/powrup-initiate-shipment.js.map +1 -1
- package/dist-server/graphql/resolvers/synchronization/sellercraft-initiate-shipment.js +109 -74
- package/dist-server/graphql/resolvers/synchronization/sellercraft-initiate-shipment.js.map +1 -1
- package/dist-server/graphql/types/synchronization/index.js +7 -4
- package/dist-server/graphql/types/synchronization/index.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/utils/params.js +1 -0
- package/dist-server/routers/api/restful-apis/v1/utils/params.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/warehouse/add-release-order.js +3 -2
- package/dist-server/routers/api/restful-apis/v1/warehouse/add-release-order.js.map +1 -1
- package/dist-server/routers/xilnex-router.js +92 -7
- package/dist-server/routers/xilnex-router.js.map +1 -1
- package/package.json +20 -20
- package/server/graphql/resolvers/email/send-emails.ts +5 -1
- package/server/graphql/resolvers/synchronization/powrup-get-airway-bill.ts +119 -66
- package/server/graphql/resolvers/synchronization/powrup-get-tracking-no.ts +81 -41
- package/server/graphql/resolvers/synchronization/powrup-initiate-shipment.ts +117 -79
- package/server/graphql/resolvers/synchronization/sellercraft-initiate-shipment.ts +132 -89
- package/server/graphql/types/synchronization/index.ts +7 -4
- package/server/routers/api/restful-apis/v1/utils/params.ts +1 -0
- package/server/routers/api/restful-apis/v1/warehouse/add-release-order.ts +14 -2
- package/server/routers/xilnex-router.ts +165 -37
|
@@ -6,56 +6,97 @@ const auth_base_1 = require("@things-factory/auth-base");
|
|
|
6
6
|
const env_1 = require("@things-factory/env");
|
|
7
7
|
const integration_powrup_1 = require("@things-factory/integration-powrup");
|
|
8
8
|
const sales_base_1 = require("@things-factory/sales-base");
|
|
9
|
+
const ADVISORY_LOCK_KEY = 'powrup-get-tracking-no';
|
|
9
10
|
exports.powrupGetTrackingNoResolver = {
|
|
10
11
|
async powrupGetTrackingNo(_, {}, context) {
|
|
12
|
+
var _a;
|
|
13
|
+
// Same fix as powrupGetAirwayBill: avoid wrapping the resolver in a long
|
|
14
|
+
// transaction across an external API call. Use a single QueryRunner with a
|
|
15
|
+
// session-level advisory lock for concurrency safety, and let each UPDATE
|
|
16
|
+
// auto-commit on its own.
|
|
17
|
+
const queryRunner = (0, typeorm_1.getConnection)().createQueryRunner();
|
|
18
|
+
let connected = false;
|
|
11
19
|
try {
|
|
12
|
-
await
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
20
|
+
await queryRunner.connect();
|
|
21
|
+
connected = true;
|
|
22
|
+
const lockResult = await queryRunner.query(`SELECT pg_try_advisory_lock(hashtextextended($1, 0)) AS acquired`, [ADVISORY_LOCK_KEY]);
|
|
23
|
+
if (!((_a = lockResult === null || lockResult === void 0 ? void 0 : lockResult[0]) === null || _a === void 0 ? void 0 : _a.acquired)) {
|
|
24
|
+
env_1.logger.info(`powrupGetTrackingNo: another instance is running, skipping`);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const manager = queryRunner.manager;
|
|
29
|
+
const powrup = await manager.findOne(integration_powrup_1.Powrup, {
|
|
30
|
+
where: { platform: integration_powrup_1.Platform.POWRUP, active: true }
|
|
31
|
+
});
|
|
32
|
+
const orderPackagesWithoutTrackingNo = await manager
|
|
33
|
+
.createQueryBuilder(sales_base_1.OrderPackage, 'opk')
|
|
34
|
+
.innerJoinAndSelect('opk.releaseGood', 'rg')
|
|
35
|
+
.innerJoinAndSelect('opk.domain', 'domain')
|
|
36
|
+
.innerJoinAndSelect('opk.bizplace', 'bizplace')
|
|
37
|
+
.innerJoinAndSelect('opk.creator', 'creator')
|
|
38
|
+
.where(`rg.source = :source`, { source: auth_base_1.ApplicationType.POWRUP })
|
|
39
|
+
.andWhere(`rg.type = :rgType`, { rgType: 'b2c' })
|
|
40
|
+
.andWhere(`rg.ref_order_id NOTNULL`)
|
|
41
|
+
.andWhere(`rg.status NOT IN(:...status) `, {
|
|
42
|
+
status: [sales_base_1.ORDER_STATUS.CANCELLED, sales_base_1.ORDER_STATUS.PENDING_CANCEL]
|
|
43
|
+
})
|
|
44
|
+
.andWhere(`opk.tracking_no IS NULL`)
|
|
45
|
+
.andWhere(`opk.airway_bill NOTNULL`)
|
|
46
|
+
.andWhere(`opk.package_id NOTNULL`)
|
|
47
|
+
.limit(500)
|
|
48
|
+
.getMany();
|
|
49
|
+
if ((orderPackagesWithoutTrackingNo === null || orderPackagesWithoutTrackingNo === void 0 ? void 0 : orderPackagesWithoutTrackingNo.length) > 0) {
|
|
50
|
+
// Batch the API call for all package IDs in one shot.
|
|
51
|
+
const orderPackageIds = orderPackagesWithoutTrackingNo.map(op => op.packageId);
|
|
52
|
+
const trackingNos = await integration_powrup_1.PowrupAPI.getTrackingNo(powrup, {
|
|
53
|
+
context: { state: { domain: null, user: null } },
|
|
54
|
+
packageIds: orderPackageIds
|
|
55
|
+
});
|
|
56
|
+
if (trackingNos === null || trackingNos === void 0 ? void 0 : trackingNos.length) {
|
|
57
|
+
// Run UPDATEs sequentially as auto-commits. Parallel saves on the same
|
|
58
|
+
// QueryRunner connection are not safe (single connection), and parallel
|
|
59
|
+
// saves across separate connections gain little because the rows are
|
|
60
|
+
// independent and each UPDATE is fast.
|
|
61
|
+
for (const tn of trackingNos) {
|
|
62
|
+
const { packageId, trackingNo } = tn;
|
|
63
|
+
await manager.update(sales_base_1.OrderPackage, { packageId }, { trackingNo });
|
|
48
64
|
}
|
|
49
65
|
}
|
|
50
66
|
}
|
|
51
|
-
|
|
52
|
-
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
env_1.logger.error(`powrupGetTrackingNo[GetTrackingNo]: ${e}`);
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
try {
|
|
73
|
+
await queryRunner.query(`SELECT pg_advisory_unlock(hashtextextended($1, 0))`, [ADVISORY_LOCK_KEY]);
|
|
74
|
+
}
|
|
75
|
+
catch (releaseErr) {
|
|
76
|
+
env_1.logger.error(`powrupGetTrackingNo[AdvisoryUnlock]: ${releaseErr}`);
|
|
53
77
|
}
|
|
54
|
-
}
|
|
78
|
+
}
|
|
55
79
|
}
|
|
56
80
|
catch (e) {
|
|
57
81
|
env_1.logger.error(`powrupGetTrackingNo[MainError]: ${e}`);
|
|
58
82
|
}
|
|
83
|
+
finally {
|
|
84
|
+
// Defensive: clear any session-level advisory locks still held on this
|
|
85
|
+
// connection before returning it to the pool. Guards against the lock
|
|
86
|
+
// leaking if pg_advisory_unlock above failed (DB blip, statement timeout)
|
|
87
|
+
// and the pool then hands this connection to a future invocation.
|
|
88
|
+
// Skip when connect() itself failed — querying an unconnected QueryRunner
|
|
89
|
+
// would just throw with nothing to actually clean up.
|
|
90
|
+
if (connected) {
|
|
91
|
+
try {
|
|
92
|
+
await queryRunner.query(`SELECT pg_advisory_unlock_all()`);
|
|
93
|
+
}
|
|
94
|
+
catch (unlockAllErr) {
|
|
95
|
+
env_1.logger.error(`powrupGetTrackingNo[AdvisoryUnlockAll]: ${unlockAllErr}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
await queryRunner.release();
|
|
99
|
+
}
|
|
59
100
|
}
|
|
60
101
|
};
|
|
61
102
|
//# sourceMappingURL=powrup-get-tracking-no.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"powrup-get-tracking-no.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/powrup-get-tracking-no.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAEvC,yDAA2D;AAC3D,6CAA4C;AAC5C,2EAAgF;AAChF,2DAAuE;
|
|
1
|
+
{"version":3,"file":"powrup-get-tracking-no.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/powrup-get-tracking-no.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,83 +6,113 @@ const auth_base_1 = require("@things-factory/auth-base");
|
|
|
6
6
|
const env_1 = require("@things-factory/env");
|
|
7
7
|
const integration_powrup_1 = require("@things-factory/integration-powrup");
|
|
8
8
|
const sales_base_1 = require("@things-factory/sales-base");
|
|
9
|
+
const ADVISORY_LOCK_KEY = 'powrup-initiate-shipment';
|
|
9
10
|
exports.powrupInitiateShipmentResolver = {
|
|
10
11
|
async powrupInitiateShipment(_, {}, context) {
|
|
12
|
+
var _a, _b, _c, _d, _e;
|
|
11
13
|
const maxRTSRetry = 10;
|
|
14
|
+
// Same fix as powrupGetAirwayBill / powrupGetTrackingNo: avoid wrapping the
|
|
15
|
+
// resolver in a long transaction across external PowrupAPI HTTP calls. Use a
|
|
16
|
+
// single QueryRunner with a session-level advisory lock for concurrency safety,
|
|
17
|
+
// and let each UPDATE auto-commit so row locks are held only for the duration
|
|
18
|
+
// of the UPDATE statement, not across the API call.
|
|
19
|
+
const queryRunner = (0, typeorm_1.getConnection)().createQueryRunner();
|
|
20
|
+
let connected = false;
|
|
12
21
|
try {
|
|
13
|
-
await
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
22
|
+
await queryRunner.connect();
|
|
23
|
+
connected = true;
|
|
24
|
+
const lockResult = await queryRunner.query(`SELECT pg_try_advisory_lock(hashtextextended($1, 0)) AS acquired`, [ADVISORY_LOCK_KEY]);
|
|
25
|
+
if (!((_a = lockResult === null || lockResult === void 0 ? void 0 : lockResult[0]) === null || _a === void 0 ? void 0 : _a.acquired)) {
|
|
26
|
+
env_1.logger.info(`powrupInitiateShipment: another instance is running, skipping`);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const manager = queryRunner.manager;
|
|
31
|
+
const powrup = await manager.findOne(integration_powrup_1.Powrup, {
|
|
32
|
+
where: { platform: integration_powrup_1.Platform.POWRUP, active: true }
|
|
33
|
+
});
|
|
34
|
+
const orderPackagesWithoutRTS = await manager
|
|
35
|
+
.createQueryBuilder(sales_base_1.OrderPackage, 'opk')
|
|
36
|
+
.innerJoinAndSelect('opk.releaseGood', 'rg')
|
|
37
|
+
.innerJoinAndSelect('opk.domain', 'domain')
|
|
38
|
+
.innerJoinAndSelect('opk.bizplace', 'bizplace')
|
|
39
|
+
.leftJoinAndSelect('opk.creator', 'creator')
|
|
40
|
+
.leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
|
|
41
|
+
.where(`rg.source = :source`, { source: auth_base_1.ApplicationType.POWRUP })
|
|
42
|
+
.andWhere(`rg.type = :rgType`, { rgType: 'b2c' })
|
|
43
|
+
.andWhere(`rg.ref_order_id NOTNULL`)
|
|
44
|
+
.andWhere(`rg.status = :status`, { status: sales_base_1.ORDER_STATUS.DONE })
|
|
45
|
+
.andWhere(`opk.market_rts_call_success ISNULL`)
|
|
46
|
+
.andWhere(`COALESCE(opk.market_rts_call_retry, 0) <= :maxRTSRetry`, { maxRTSRetry })
|
|
47
|
+
.orderBy(`opk.created_at`)
|
|
48
|
+
.getMany();
|
|
49
|
+
if ((orderPackagesWithoutRTS === null || orderPackagesWithoutRTS === void 0 ? void 0 : orderPackagesWithoutRTS.length) > 0) {
|
|
50
|
+
for (let i = 0; i < orderPackagesWithoutRTS.length; i++) {
|
|
51
|
+
const orderPackage = orderPackagesWithoutRTS[i];
|
|
52
|
+
const releaseGood = orderPackage.releaseGood;
|
|
53
|
+
if (releaseGood.lmdOption == true && (orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.trackingNo) == null) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
let orderInformation = {
|
|
57
|
+
refOrderId: orderPackage.releaseGood.refOrderId,
|
|
58
|
+
packageId: orderPackage.packageId,
|
|
59
|
+
platform: orderPackage.releaseGood.platformCode
|
|
60
|
+
};
|
|
61
|
+
if ((_b = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _b === void 0 ? void 0 : _b.lmdOption) {
|
|
62
|
+
orderInformation = Object.assign(Object.assign({}, orderInformation), { awb: orderPackage.airwayBill, trackingNo: orderPackage.trackingNo, lmdOption: (_c = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _c === void 0 ? void 0 : _c.lmdOption, shipperName: (_e = (_d = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _d === void 0 ? void 0 : _d.lastMileDelivery) === null || _e === void 0 ? void 0 : _e.platform });
|
|
63
|
+
}
|
|
64
|
+
performance.mark(`start:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`);
|
|
65
|
+
try {
|
|
66
|
+
await integration_powrup_1.PowrupAPI.initiateShipment(powrup, Object.assign(Object.assign({}, orderInformation), { context: { state: { domain: null, user: null } } }));
|
|
67
|
+
// Auto-commit single-statement UPDATE — row lock held only for this UPDATE,
|
|
68
|
+
// not across the API call above.
|
|
69
|
+
await manager.update(sales_base_1.OrderPackage, { id: orderPackage.id }, { marketRtsCallSuccess: new Date() });
|
|
70
|
+
performance.mark(`end:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
performance.mark(`end:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`);
|
|
74
|
+
env_1.logger.error(`powrupInitiateShipment[InitiateShipment][Order Package ID: ${orderPackage.id}]: ${error}`);
|
|
75
|
+
await manager
|
|
76
|
+
.createQueryBuilder()
|
|
77
|
+
.update(sales_base_1.OrderPackage)
|
|
78
|
+
.set({ marketRtsCallRetry: () => `coalesce("market_rts_call_retry", 0) + 1` })
|
|
79
|
+
.where('id = :id', { id: orderPackage.id })
|
|
80
|
+
.execute();
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
let perf = performance.measure(`powrupInitiateShipment: ${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`, `start:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`, `end:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`);
|
|
85
|
+
console.info(perf.toJSON());
|
|
75
86
|
}
|
|
76
87
|
}
|
|
77
88
|
}
|
|
78
|
-
|
|
79
|
-
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
env_1.logger.error(`powrupInitiateShipment[InitiateShipment]: ${e}`);
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
try {
|
|
95
|
+
await queryRunner.query(`SELECT pg_advisory_unlock(hashtextextended($1, 0))`, [ADVISORY_LOCK_KEY]);
|
|
80
96
|
}
|
|
81
|
-
|
|
97
|
+
catch (releaseErr) {
|
|
98
|
+
env_1.logger.error(`powrupInitiateShipment[AdvisoryUnlock]: ${releaseErr}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
82
101
|
}
|
|
83
102
|
catch (e) {
|
|
84
103
|
env_1.logger.error(`powrupInitiateShipment[MainError]: ${e}`);
|
|
85
104
|
}
|
|
105
|
+
finally {
|
|
106
|
+
if (connected) {
|
|
107
|
+
try {
|
|
108
|
+
await queryRunner.query(`SELECT pg_advisory_unlock_all()`);
|
|
109
|
+
}
|
|
110
|
+
catch (unlockAllErr) {
|
|
111
|
+
env_1.logger.error(`powrupInitiateShipment[AdvisoryUnlockAll]: ${unlockAllErr}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
await queryRunner.release();
|
|
115
|
+
}
|
|
86
116
|
}
|
|
87
117
|
};
|
|
88
118
|
//# sourceMappingURL=powrup-initiate-shipment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"powrup-initiate-shipment.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/powrup-initiate-shipment.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"powrup-initiate-shipment.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/powrup-initiate-shipment.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,92 +6,127 @@ const auth_base_1 = require("@things-factory/auth-base");
|
|
|
6
6
|
const env_1 = require("@things-factory/env");
|
|
7
7
|
const integration_sellercraft_1 = require("@things-factory/integration-sellercraft");
|
|
8
8
|
const sales_base_1 = require("@things-factory/sales-base");
|
|
9
|
+
const ADVISORY_LOCK_KEY = 'sellercraft-initiate-shipment';
|
|
9
10
|
exports.sellercraftInitiateShipmentResolver = {
|
|
10
11
|
async sellercraftInitiateShipment(_, {}, context) {
|
|
12
|
+
var _a, _b, _c, _d, _e;
|
|
11
13
|
const maxRTSRetry = 10;
|
|
14
|
+
// Same fix as powrupGetAirwayBill / powrupGetTrackingNo: do not wrap the
|
|
15
|
+
// resolver in a single long transaction across external SellercraftAPI HTTP
|
|
16
|
+
// calls. The previous version held row locks on every UPDATE'd order_packages
|
|
17
|
+
// row until the loop finished, which was the direct cause of the order_packages
|
|
18
|
+
// lock chains observed in pg_stat_activity (sessions stuck `idle in transaction`
|
|
19
|
+
// for 10+ minutes after `UPDATE order_packages SET market_rts_call_success`).
|
|
20
|
+
//
|
|
21
|
+
// Use a single QueryRunner with a session-level advisory lock for concurrency
|
|
22
|
+
// safety, and let each UPDATE auto-commit on its own (row lock held only for
|
|
23
|
+
// the duration of that single statement).
|
|
24
|
+
const queryRunner = (0, typeorm_1.getConnection)().createQueryRunner();
|
|
25
|
+
let connected = false;
|
|
12
26
|
try {
|
|
13
|
-
await
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
27
|
+
await queryRunner.connect();
|
|
28
|
+
connected = true;
|
|
29
|
+
const lockResult = await queryRunner.query(`SELECT pg_try_advisory_lock(hashtextextended($1, 0)) AS acquired`, [ADVISORY_LOCK_KEY]);
|
|
30
|
+
if (!((_a = lockResult === null || lockResult === void 0 ? void 0 : lockResult[0]) === null || _a === void 0 ? void 0 : _a.acquired)) {
|
|
31
|
+
env_1.logger.info(`sellercraftInitiateShipment: another instance is running, skipping`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const manager = queryRunner.manager;
|
|
36
|
+
const orderPackagesWithoutRTS = await manager
|
|
37
|
+
.createQueryBuilder(sales_base_1.OrderPackage, 'opk')
|
|
38
|
+
.innerJoinAndSelect('opk.releaseGood', 'rg')
|
|
39
|
+
.innerJoinAndSelect('opk.domain', 'domain')
|
|
40
|
+
.innerJoinAndSelect('opk.bizplace', 'bizplace')
|
|
41
|
+
.innerJoinAndSelect('bizplace.domain', 'bdomain')
|
|
42
|
+
.leftJoinAndSelect('opk.creator', 'creator')
|
|
43
|
+
.leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
|
|
44
|
+
.where(`rg.source = :source`, { source: auth_base_1.ApplicationType.SELLERCRAFT })
|
|
45
|
+
.andWhere(`rg.type = :rgType`, { rgType: 'b2c' })
|
|
46
|
+
.andWhere(`rg.status = :status`, { status: sales_base_1.ORDER_STATUS.DONE })
|
|
47
|
+
.andWhere(`opk.market_rts_call_success ISNULL`)
|
|
48
|
+
.andWhere(`COALESCE(opk.market_rts_call_retry, 0) <= :maxRTSRetry`, { maxRTSRetry })
|
|
49
|
+
.orderBy(`opk.created_at`)
|
|
50
|
+
.getMany();
|
|
51
|
+
if ((orderPackagesWithoutRTS === null || orderPackagesWithoutRTS === void 0 ? void 0 : orderPackagesWithoutRTS.length) > 0) {
|
|
52
|
+
for (let i = 0; i < orderPackagesWithoutRTS.length; i++) {
|
|
53
|
+
const orderPackage = orderPackagesWithoutRTS[i];
|
|
54
|
+
const releaseGood = orderPackage.releaseGood;
|
|
55
|
+
const sellercraft = await manager.findOne(integration_sellercraft_1.Sellercraft, {
|
|
56
|
+
where: { domain: { id: orderPackage.bizplace.domain.id }, status: 'ACTIVE' }
|
|
57
|
+
});
|
|
58
|
+
if (!sellercraft) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
let sellercraftSetting = sellercraft.sellercraftSetting;
|
|
62
|
+
let disableInitiateOrderShipment = (sellercraftSetting === null || sellercraftSetting === void 0 ? void 0 : sellercraftSetting.disableInitiateOrderShipment) &&
|
|
63
|
+
(sellercraftSetting === null || sellercraftSetting === void 0 ? void 0 : sellercraftSetting.disableInitiateOrderShipment) == 1
|
|
64
|
+
? true
|
|
65
|
+
: false;
|
|
66
|
+
if (disableInitiateOrderShipment === true ||
|
|
67
|
+
(releaseGood.lmdOption == true && (orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.trackingNo) == null)) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
let orderInformation = {
|
|
71
|
+
accountId: sellercraft.accountId,
|
|
72
|
+
orderId: releaseGood.refNo2,
|
|
73
|
+
packageId: orderPackage.packageId
|
|
74
|
+
};
|
|
75
|
+
if ((_b = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _b === void 0 ? void 0 : _b.lmdOption) {
|
|
76
|
+
orderInformation = Object.assign(Object.assign({}, orderInformation), { awb: orderPackage.airwayBill, trackingNo: orderPackage.trackingNo, lmdOption: (_c = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _c === void 0 ? void 0 : _c.lmdOption, shipperName: (_e = (_d = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _d === void 0 ? void 0 : _d.lastMileDelivery) === null || _e === void 0 ? void 0 : _e.platform });
|
|
77
|
+
}
|
|
78
|
+
performance.mark(`start:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`);
|
|
79
|
+
try {
|
|
80
|
+
await integration_sellercraft_1.SellercraftAPI.initiateOrderShipment(sellercraft, Object.assign(Object.assign({}, orderInformation), { context: { state: { domain: null, user: null } } }));
|
|
81
|
+
// Auto-commit single-statement UPDATE — row lock held only for this UPDATE,
|
|
82
|
+
// not across the API call above.
|
|
83
|
+
await manager.update(sales_base_1.OrderPackage, { id: orderPackage.id }, { marketRtsCallSuccess: new Date() });
|
|
84
|
+
performance.mark(`end:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
performance.mark(`end:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`);
|
|
88
|
+
env_1.logger.error(`sellercraftInitiateShipment[InitiateShipment][Order Package ID: ${orderPackage.id}]: ${error}`);
|
|
89
|
+
await manager
|
|
90
|
+
.createQueryBuilder()
|
|
91
|
+
.update(sales_base_1.OrderPackage)
|
|
92
|
+
.set({ marketRtsCallRetry: () => `coalesce("market_rts_call_retry", 0) + 1` })
|
|
93
|
+
.where('id = :id', { id: orderPackage.id })
|
|
94
|
+
.execute();
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
let perf = performance.measure(`sellercraftInitiateShipment: ${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`, `start:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`, `end:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`);
|
|
99
|
+
console.info(perf.toJSON());
|
|
84
100
|
}
|
|
85
101
|
}
|
|
86
102
|
}
|
|
87
|
-
|
|
88
|
-
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
env_1.logger.error(`sellercraftInitiateShipment[InitiateShipment]: ${e}`);
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
try {
|
|
109
|
+
await queryRunner.query(`SELECT pg_advisory_unlock(hashtextextended($1, 0))`, [ADVISORY_LOCK_KEY]);
|
|
110
|
+
}
|
|
111
|
+
catch (releaseErr) {
|
|
112
|
+
env_1.logger.error(`sellercraftInitiateShipment[AdvisoryUnlock]: ${releaseErr}`);
|
|
89
113
|
}
|
|
90
|
-
}
|
|
114
|
+
}
|
|
91
115
|
}
|
|
92
116
|
catch (e) {
|
|
93
117
|
env_1.logger.error(`sellercraftInitiateShipment[MainError]: ${e}`);
|
|
94
118
|
}
|
|
119
|
+
finally {
|
|
120
|
+
if (connected) {
|
|
121
|
+
try {
|
|
122
|
+
await queryRunner.query(`SELECT pg_advisory_unlock_all()`);
|
|
123
|
+
}
|
|
124
|
+
catch (unlockAllErr) {
|
|
125
|
+
env_1.logger.error(`sellercraftInitiateShipment[AdvisoryUnlockAll]: ${unlockAllErr}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
await queryRunner.release();
|
|
129
|
+
}
|
|
95
130
|
}
|
|
96
131
|
};
|
|
97
132
|
//# sourceMappingURL=sellercraft-initiate-shipment.js.map
|