@things-factory/operato-hub 4.3.404 → 4.3.406
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/graphql/resolvers/synchronization/retry-create-lmd-parcels.js +0 -2
- package/dist-server/graphql/resolvers/synchronization/retry-create-lmd-parcels.js.map +1 -1
- package/dist-server/routers/support-router.js +40 -0
- package/dist-server/routers/support-router.js.map +1 -0
- package/dist-server/routes.js +2 -1
- package/dist-server/routes.js.map +1 -1
- package/package.json +3 -3
- package/server/graphql/resolvers/synchronization/retry-create-lmd-parcels.ts +0 -1
- package/server/routers/support-router.ts +42 -0
- package/server/routes.ts +4 -1
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.retryCreateLmdParcelsResolver = void 0;
|
|
4
4
|
const typeorm_1 = require("typeorm");
|
|
5
5
|
const env_1 = require("@things-factory/env");
|
|
6
|
-
const marketplace_base_1 = require("@things-factory/marketplace-base");
|
|
7
6
|
const sales_base_1 = require("@things-factory/sales-base");
|
|
8
7
|
const worksheet_base_1 = require("@things-factory/worksheet-base");
|
|
9
8
|
exports.retryCreateLmdParcelsResolver = {
|
|
@@ -16,7 +15,6 @@ exports.retryCreateLmdParcelsResolver = {
|
|
|
16
15
|
.innerJoinAndSelect('rg.domain', 'domain')
|
|
17
16
|
.innerJoinAndSelect('rg.bizplace', 'bizplace')
|
|
18
17
|
.innerJoinAndSelect('rg.creator', 'creator')
|
|
19
|
-
.leftJoinAndMapOne('rg.marketplaceOrder', marketplace_base_1.MarketplaceOrder, 'mo', 'mo.order_no = rg.ref_no')
|
|
20
18
|
.where(`rg.lmd_option = true`)
|
|
21
19
|
.andWhere(`rg.status IN (:...status)`, {
|
|
22
20
|
status: [sales_base_1.ORDER_STATUS.PICKING, sales_base_1.ORDER_STATUS.READY_TO_PACK, sales_base_1.ORDER_STATUS.PACKING]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry-create-lmd-parcels.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/retry-create-lmd-parcels.ts"],"names":[],"mappings":";;;AAAA,qCAAsD;AAEtD,6CAA4C;
|
|
1
|
+
{"version":3,"file":"retry-create-lmd-parcels.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/retry-create-lmd-parcels.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.supportRouter = void 0;
|
|
7
|
+
const koa_router_1 = __importDefault(require("koa-router"));
|
|
8
|
+
const typeorm_1 = require("typeorm");
|
|
9
|
+
const sales_base_1 = require("@things-factory/sales-base");
|
|
10
|
+
const shell_1 = require("@things-factory/shell");
|
|
11
|
+
const worksheet_base_1 = require("@things-factory/worksheet-base");
|
|
12
|
+
const debug = require('debug')('things-factory:integration-accounting:xilnex-router');
|
|
13
|
+
exports.supportRouter = new koa_router_1.default();
|
|
14
|
+
exports.supportRouter.post('/fetch-lmd-awb', async (context, next) => {
|
|
15
|
+
try {
|
|
16
|
+
await (0, typeorm_1.getConnection)().transaction(async (tx) => {
|
|
17
|
+
const { id, domainId } = context.query;
|
|
18
|
+
const domain = await tx.getRepository(shell_1.Domain).findOne({ id: domainId });
|
|
19
|
+
const qb = tx
|
|
20
|
+
.getRepository(sales_base_1.OrderPackage)
|
|
21
|
+
.createQueryBuilder('op')
|
|
22
|
+
.innerJoinAndSelect('op.releaseGood', 'rg')
|
|
23
|
+
.innerJoinAndSelect('rg.domain', 'd')
|
|
24
|
+
.innerJoinAndSelect('rg.bizplace', 'b')
|
|
25
|
+
.innerJoinAndSelect('b.company', 'c')
|
|
26
|
+
.innerJoinAndSelect('c.domain', 'companyDomain')
|
|
27
|
+
.innerJoinAndSelect('b.domain', 'd2')
|
|
28
|
+
.leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
|
|
29
|
+
.where('op.name IN (:...orderPackageIds)', {
|
|
30
|
+
orderPackageIds: [id]
|
|
31
|
+
});
|
|
32
|
+
let orderPackages = await qb.getMany();
|
|
33
|
+
await (0, worksheet_base_1.processAwbAndTrackingNo)(orderPackages, tx, domain, null, null);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
console.log(e);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=support-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-router.js","sourceRoot":"","sources":["../../server/routers/support-router.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA+B;AAC/B,qCAAkG;AAClG,2DAEmC;AACnC,iDAA8C;AAC9C,mEAAwE;AAGxE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,qDAAqD,CAAC,CAAA;AAExE,QAAA,aAAa,GAAG,IAAI,oBAAM,EAAE,CAAA;AAEzC,qBAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACzD,IAAI;QACA,MAAM,IAAA,uBAAa,GAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAiB,EAAE,EAAE;YAC1D,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;YAEtC,MAAM,MAAM,GAAW,MAAM,EAAE,CAAC,aAAa,CAAC,cAAM,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;YAE/E,MAAM,EAAE,GAAqC,EAAE;iBAC1C,aAAa,CAAC,yBAAY,CAAC;iBAC3B,kBAAkB,CAAC,IAAI,CAAC;iBACxB,kBAAkB,CAAC,gBAAgB,EAAE,IAAI,CAAC;iBAC1C,kBAAkB,CAAC,WAAW,EAAE,GAAG,CAAC;iBACpC,kBAAkB,CAAC,aAAa,EAAE,GAAG,CAAC;iBACtC,kBAAkB,CAAC,WAAW,EAAE,GAAG,CAAC;iBACpC,kBAAkB,CAAC,UAAU,EAAE,eAAe,CAAC;iBAC/C,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC;iBACpC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,CAAC;iBAC/C,KAAK,CAAC,kCAAkC,EAAE;gBACvC,eAAe,EAAE,CAAC,EAAE,CAAC;aACxB,CAAC,CAAA;YAEN,IAAI,aAAa,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;YAEtC,MAAM,IAAA,wCAAuB,EAAC,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QACxE,CAAC,CAAC,CAAA;KACL;IAAC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;KACjB;AACL,CAAC,CAAC,CAAA"}
|
package/dist-server/routes.js
CHANGED
|
@@ -5,9 +5,10 @@ const business_1 = require("./routers/business");
|
|
|
5
5
|
const powrup_router_1 = require("./routers/internal/powrup-router");
|
|
6
6
|
const sellercraft_router_1 = require("./routers/internal/sellercraft-router");
|
|
7
7
|
const xilnex_router_1 = require("./routers/xilnex-router");
|
|
8
|
+
const support_router_1 = require("./routers/support-router");
|
|
8
9
|
const debug = require('debug')('things-factory:operato-hub:routes');
|
|
9
10
|
process.on('bootstrap-module-global-public-route', (app, globalPublicRouter) => {
|
|
10
|
-
globalPublicRouter.use(xilnex_router_1.xilnexRouter.routes(), xilnex_router_1.xilnexRouter.allowedMethods(), powrup_router_1.powrupRouter.routes(), powrup_router_1.powrupRouter.allowedMethods(), sellercraft_router_1.sellercraftRouter.routes(), sellercraft_router_1.sellercraftRouter.allowedMethods());
|
|
11
|
+
globalPublicRouter.use(xilnex_router_1.xilnexRouter.routes(), xilnex_router_1.xilnexRouter.allowedMethods(), powrup_router_1.powrupRouter.routes(), powrup_router_1.powrupRouter.allowedMethods(), sellercraft_router_1.sellercraftRouter.routes(), sellercraft_router_1.sellercraftRouter.allowedMethods(), support_router_1.supportRouter.routes(), support_router_1.supportRouter.allowedMethods());
|
|
11
12
|
});
|
|
12
13
|
process.on('bootstrap-module-global-private-route', (app, globalPrivateRouter) => {
|
|
13
14
|
globalPrivateRouter.use('/business-register', business_1.businessRegisterRouter.routes(), business_1.businessRegisterRouter.allowedMethods());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":";;AAAA,2EAAsE;AACtE,iDAG2B;AAC3B,oEAA+D;AAC/D,8EAAyE;AACzE,2DAAsD;
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":";;AAAA,2EAAsE;AACtE,iDAG2B;AAC3B,oEAA+D;AAC/D,8EAAyE;AACzE,2DAAsD;AACtD,6DAAwD;AAExD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,mCAAmC,CAAC,CAAA;AAEnE,OAAO,CAAC,EAAE,CAAC,sCAA6C,EAAE,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE;IACpF,kBAAkB,CAAC,GAAG,CACpB,4BAAY,CAAC,MAAM,EAAE,EACrB,4BAAY,CAAC,cAAc,EAAE,EAC7B,4BAAY,CAAC,MAAM,EAAE,EACrB,4BAAY,CAAC,cAAc,EAAE,EAC7B,sCAAiB,CAAC,MAAM,EAAE,EAC1B,sCAAiB,CAAC,cAAc,EAAE,EAClC,8BAAa,CAAC,MAAM,EAAE,EACtB,8BAAa,CAAC,cAAc,EAAE,CAC/B,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,uCAA8C,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IACtF,mBAAmB,CAAC,GAAG,CACrB,oBAAoB,EACpB,iCAAsB,CAAC,MAAM,EAAE,EAC/B,iCAAsB,CAAC,cAAc,EAAE,CACxC,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,sCAA6C,EAAE,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE;IACpF,mGAAmG;IACnG,kBAAkB,CAAC,GAAG,CAAC,wCAAkB,CAAC,CAAA;AAC5C,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,uCAA8C,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IACtF,mBAAmB,CAAC,GAAG,CAAC,wCAAkB,CAAC,CAAA;IAE3C,8CAA8C;IAC9C,mBAAmB,CAAC,GAAG,CACrB,oBAAoB,EACpB,iCAAsB,CAAC,MAAM,EAAE,EAC/B,iCAAsB,CAAC,cAAc,EAAE,CACxC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/operato-hub",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.406",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"@things-factory/system-ui": "^4.3.381",
|
|
110
110
|
"@things-factory/transport-base": "^4.3.381",
|
|
111
111
|
"@things-factory/warehouse-base": "^4.3.398",
|
|
112
|
-
"@things-factory/worksheet-base": "^4.3.
|
|
112
|
+
"@things-factory/worksheet-base": "^4.3.406",
|
|
113
113
|
"cron-parser": "^4.7.0",
|
|
114
114
|
"koa2-swagger-ui": "^5.0.2",
|
|
115
115
|
"swagger-jsdoc": "^5.0.0",
|
|
@@ -121,5 +121,5 @@
|
|
|
121
121
|
"resolutions": {
|
|
122
122
|
"core-js": "^3.16.0"
|
|
123
123
|
},
|
|
124
|
-
"gitHead": "
|
|
124
|
+
"gitHead": "f59aac78d34f5fe74f7488314a52bba281bb19c8"
|
|
125
125
|
}
|
|
@@ -15,7 +15,6 @@ export const retryCreateLmdParcelsResolver = {
|
|
|
15
15
|
.innerJoinAndSelect('rg.domain', 'domain')
|
|
16
16
|
.innerJoinAndSelect('rg.bizplace', 'bizplace')
|
|
17
17
|
.innerJoinAndSelect('rg.creator', 'creator')
|
|
18
|
-
.leftJoinAndMapOne('rg.marketplaceOrder', MarketplaceOrder, 'mo', 'mo.order_no = rg.ref_no')
|
|
19
18
|
.where(`rg.lmd_option = true`)
|
|
20
19
|
.andWhere(`rg.status IN (:...status)`, {
|
|
21
20
|
status: [ORDER_STATUS.PICKING, ORDER_STATUS.READY_TO_PACK, ORDER_STATUS.PACKING]
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import Router from 'koa-router'
|
|
2
|
+
import { EntityManager, getConnection, getRepository, In, Not, SelectQueryBuilder } from 'typeorm'
|
|
3
|
+
import {
|
|
4
|
+
OrderPackage
|
|
5
|
+
} from '@things-factory/sales-base'
|
|
6
|
+
import { Domain } from '@things-factory/shell'
|
|
7
|
+
import { processAwbAndTrackingNo } from '@things-factory/worksheet-base'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
const debug = require('debug')('things-factory:integration-accounting:xilnex-router')
|
|
11
|
+
|
|
12
|
+
export const supportRouter = new Router()
|
|
13
|
+
|
|
14
|
+
supportRouter.post('/fetch-lmd-awb', async (context, next) => {
|
|
15
|
+
try {
|
|
16
|
+
await getConnection().transaction(async (tx: EntityManager) => {
|
|
17
|
+
const { id, domainId } = context.query
|
|
18
|
+
|
|
19
|
+
const domain: Domain = await tx.getRepository(Domain).findOne({ id: domainId })
|
|
20
|
+
|
|
21
|
+
const qb: SelectQueryBuilder<OrderPackage> = tx
|
|
22
|
+
.getRepository(OrderPackage)
|
|
23
|
+
.createQueryBuilder('op')
|
|
24
|
+
.innerJoinAndSelect('op.releaseGood', 'rg')
|
|
25
|
+
.innerJoinAndSelect('rg.domain', 'd')
|
|
26
|
+
.innerJoinAndSelect('rg.bizplace', 'b')
|
|
27
|
+
.innerJoinAndSelect('b.company', 'c')
|
|
28
|
+
.innerJoinAndSelect('c.domain', 'companyDomain')
|
|
29
|
+
.innerJoinAndSelect('b.domain', 'd2')
|
|
30
|
+
.leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
|
|
31
|
+
.where('op.name IN (:...orderPackageIds)', {
|
|
32
|
+
orderPackageIds: [id]
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
let orderPackages = await qb.getMany()
|
|
36
|
+
|
|
37
|
+
await processAwbAndTrackingNo(orderPackages, tx, domain, null, null)
|
|
38
|
+
})
|
|
39
|
+
} catch (e) {
|
|
40
|
+
console.log(e)
|
|
41
|
+
}
|
|
42
|
+
})
|
package/server/routes.ts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
import { powrupRouter } from './routers/internal/powrup-router'
|
|
7
7
|
import { sellercraftRouter } from './routers/internal/sellercraft-router'
|
|
8
8
|
import { xilnexRouter } from './routers/xilnex-router'
|
|
9
|
+
import { supportRouter } from './routers/support-router'
|
|
9
10
|
|
|
10
11
|
const debug = require('debug')('things-factory:operato-hub:routes')
|
|
11
12
|
|
|
@@ -16,7 +17,9 @@ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRout
|
|
|
16
17
|
powrupRouter.routes(),
|
|
17
18
|
powrupRouter.allowedMethods(),
|
|
18
19
|
sellercraftRouter.routes(),
|
|
19
|
-
sellercraftRouter.allowedMethods()
|
|
20
|
+
sellercraftRouter.allowedMethods(),
|
|
21
|
+
supportRouter.routes(),
|
|
22
|
+
supportRouter.allowedMethods()
|
|
20
23
|
)
|
|
21
24
|
})
|
|
22
25
|
|