@steedos/data-import 2.2.54-beta.4 → 2.2.54-beta.7

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/README.md CHANGED
@@ -1,2 +1,47 @@
1
+ <!--
2
+ * @Author: sunhaolin@hotoa.com
3
+ * @Date: 2021-10-21 09:57:01
4
+ * @LastEditors: sunhaolin@hotoa.com
5
+ * @LastEditTime: 2022-07-15 14:18:13
6
+ * @Description:
7
+ -->
1
8
  ## 功能说明
2
- - 此包是系统设置中的数据导入功能,可通过excel导入对象数据
9
+ - 此包是系统设置中的数据导入功能,可通过excel导入对象数据
10
+
11
+ ### 提供importData函数支持导入.data.json、.data.csv、.flow.json数据
12
+
13
+ - 比如在自定义的软件包package.service.js中监听系统初始化事件或者服务启动时调用importData导入软件包中的数据:
14
+
15
+ ```js
16
+ const { importData } = require('@steedos/data-import')
17
+ const path = require('path')
18
+ module.exports = {
19
+ /**
20
+ * Events
21
+ */
22
+ events: {
23
+ // 系统初始化成功
24
+ 'service-cloud-init.succeeded': async function (ctx) {
25
+ await importData(path.join(__dirname, 'main', 'default', 'data'));
26
+ }
27
+ },
28
+ /**
29
+ * Service started lifecycle event handler
30
+ */
31
+ async started() {
32
+ await importData(path.join(__dirname, 'main', 'default', 'data'));
33
+ },
34
+ };
35
+ ```
36
+
37
+ - importData 函数参数说明
38
+ ```js
39
+ /**
40
+ *
41
+ * @param {*} filePath 要导入数据的文件夹路径
42
+ * @param {*} onlyInsert 仅导入,在导入数据之前先检查,如果存在任意一条记录,则不执行导入,默认true,如果是false, 则如果存在则执行更新操作。
43
+ */
44
+ export async function importData(filePath: string, onlyInsert: boolean = true) {
45
+ // 函数体
46
+ }
47
+ ```
@@ -0,0 +1,5 @@
1
+ export interface Base {
2
+ userSession: any;
3
+ readFile(filePath: string, options?: any): any;
4
+ fileRecordsToDB(filePath: any): any;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Base.js","sourceRoot":"","sources":["../../src/imports/Base.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import ImportJson from './ImportJson';
2
+ export default class ImportCsv extends ImportJson {
3
+ constructor(userSession: any);
4
+ readFile(filePath: string): Promise<Array<{
5
+ objectName: string;
6
+ records: Array<any>;
7
+ }>>;
8
+ }
@@ -0,0 +1,30 @@
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
+ const ImportJson_1 = __importDefault(require("./ImportJson"));
7
+ const csv = require('csvtojson');
8
+ const path = require('path');
9
+ const globby = require("globby");
10
+ class ImportCsv extends ImportJson_1.default {
11
+ constructor(userSession) {
12
+ super(userSession);
13
+ }
14
+ async readFile(filePath) {
15
+ let results = [];
16
+ const filePatten = [
17
+ path.join(filePath, "**", "*.data.csv"),
18
+ "!" + path.join(filePath, "node_modules"),
19
+ ];
20
+ const matchedPaths = globby.sync(filePatten);
21
+ for (const matchedPath of matchedPaths) {
22
+ let records = await csv().fromFile(matchedPath);
23
+ let objectName = path.basename(matchedPath).split('.')[0];
24
+ results.push({ objectName: objectName, records: records });
25
+ }
26
+ return results;
27
+ }
28
+ }
29
+ exports.default = ImportCsv;
30
+ //# sourceMappingURL=ImportCsv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImportCsv.js","sourceRoot":"","sources":["../../src/imports/ImportCsv.ts"],"names":[],"mappings":";;;;;AAAA,8DAAsC;AACtC,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;AAChC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEjC,MAAqB,SAAU,SAAQ,oBAAU;IAE7C,YAAY,WAAgB;QACxB,KAAK,CAAC,WAAW,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC3B,IAAI,OAAO,GAAQ,EAAE,CAAA;QACrB,MAAM,UAAU,GAAG;YACf,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC;YACvC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;SAC5C,CAAA;QACD,MAAM,YAAY,GAAa,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;YACpC,IAAI,OAAO,GAAG,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;SAC9D;QACD,OAAO,OAAO,CAAA;IAClB,CAAC;CACJ;AApBD,4BAoBC"}
@@ -0,0 +1,21 @@
1
+ import { Base } from './Base';
2
+ export default class ImportExcel implements Base {
3
+ objectName: string;
4
+ userSession: any;
5
+ constructor(objectName: string, userSession: any);
6
+ readFile(filePath: string, options?: any): {
7
+ datas: Array<any>;
8
+ headers: Array<string>;
9
+ };
10
+ getObjectFieldMappings(): Promise<{
11
+ api_name: string;
12
+ header: string;
13
+ }[]>;
14
+ getOptions(headers: any): Promise<any>;
15
+ fileRecordsToDB(filePath: string): Promise<{
16
+ errorList: any[];
17
+ total_count: any;
18
+ success_count: any;
19
+ failure_count: any;
20
+ }>;
21
+ }
@@ -0,0 +1,100 @@
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
+ const node_xlsx_1 = __importDefault(require("node-xlsx"));
7
+ const objectql_1 = require("@steedos/objectql");
8
+ const objectImport_1 = require("../objectImport");
9
+ const lodash_1 = require("lodash");
10
+ const NOT_IMPORT_FIELDS = ['space', 'created', 'modified', 'owner', 'created_by', 'modified_by', 'company_id', 'company_ids'];
11
+ class ImportExcel {
12
+ constructor(objectName, userSession) {
13
+ this.objectName = objectName;
14
+ this.userSession = userSession;
15
+ }
16
+ readFile(filePath, options = {}) {
17
+ const { sheetIndex = 0, headerIndex = 0 } = options;
18
+ let workbook = node_xlsx_1.default.parse(filePath, {
19
+ cellDates: true,
20
+ });
21
+ const data = workbook[sheetIndex].data;
22
+ const headers = data[headerIndex];
23
+ const datas = data.slice(1);
24
+ return {
25
+ headers,
26
+ datas
27
+ };
28
+ }
29
+ async getObjectFieldMappings() {
30
+ const objectConfig = await (0, objectql_1.getObjectConfig)(this.objectName);
31
+ const mappings = [{ api_name: '_id', header: '_id' }]; //TODO, 只有meteormongodb \ mongodb 数据源才添加_id
32
+ (0, lodash_1.each)(objectConfig.fields, (field, key) => {
33
+ if (!(0, lodash_1.includes)(NOT_IMPORT_FIELDS, key)) {
34
+ mappings.push({ api_name: key, header: key });
35
+ }
36
+ });
37
+ return mappings;
38
+ }
39
+ async getOptions(headers) {
40
+ const mappings = await this.getObjectFieldMappings();
41
+ const options = {
42
+ objectName: this.objectName,
43
+ operation: 'upset',
44
+ fieldMappings: mappings,
45
+ externalIdName: ['_id'],
46
+ lookupFieldMap: null,
47
+ userSession: this.userSession,
48
+ mappings: mappings,
49
+ keyIndexes: null
50
+ };
51
+ let fieldMappings = options.fieldMappings;
52
+ let keyIndexes = [];
53
+ let lookupFieldMap = {};
54
+ let parsedMappings = [];
55
+ let headerMap = {};
56
+ for (let i = 0; i < headers.length; i++) {
57
+ let header = headers[i];
58
+ for (let j = 0; j < fieldMappings.length; j++) {
59
+ let mapping = fieldMappings[j];
60
+ if (mapping.header == header) {
61
+ if ((0, lodash_1.includes)(options.externalIdName, mapping.api_name)) {
62
+ keyIndexes.push(i);
63
+ }
64
+ lookupFieldMap[mapping.api_name] = {
65
+ save_key_while_fail: mapping.save_key_while_fail,
66
+ };
67
+ if (mapping.matched_by) {
68
+ lookupFieldMap[mapping.api_name]["matched_by"] = mapping.matched_by;
69
+ }
70
+ mapping.mapped = true;
71
+ if (!parsedMappings[i]) {
72
+ parsedMappings[i] = [];
73
+ }
74
+ parsedMappings[i].push(mapping.api_name);
75
+ headers[i] = null;
76
+ }
77
+ }
78
+ if (!parsedMappings[i]) {
79
+ parsedMappings[i] = null;
80
+ }
81
+ if (headerMap[header]) {
82
+ throw new Error(`The Excel file contained duplicate header(s): ${header}`);
83
+ }
84
+ else {
85
+ headerMap[header] = true;
86
+ }
87
+ }
88
+ options.mappings = parsedMappings;
89
+ options.keyIndexes = keyIndexes;
90
+ options.lookupFieldMap = lookupFieldMap;
91
+ return options;
92
+ }
93
+ async fileRecordsToDB(filePath) {
94
+ const result = await this.readFile(filePath);
95
+ const options = await this.getOptions(result.headers);
96
+ return await (0, objectImport_1.importWithRecords)(result.datas, options);
97
+ }
98
+ }
99
+ exports.default = ImportExcel;
100
+ //# sourceMappingURL=ImportExcel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImportExcel.js","sourceRoot":"","sources":["../../src/imports/ImportExcel.ts"],"names":[],"mappings":";;;;;AAAA,0DAA6B;AAC7B,gDAAoD;AACpD,kDAAoD;AACpD,mCAAwC;AAGxC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AAE9H,MAAqB,WAAW;IAI5B,YAAY,UAAkB,EAAE,WAAgB;QAC5C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,QAAQ,CAAC,QAAgB,EAAE,UAAe,EAAE;QACxC,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;QACpD,IAAI,QAAQ,GAAG,mBAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YAChC,SAAS,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO;YACH,OAAO;YACP,KAAK;SACR,CAAC;IACN,CAAC;IAED,KAAK,CAAC,sBAAsB;QACxB,MAAM,YAAY,GAAG,MAAM,IAAA,0BAAe,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,2CAA2C;QAClG,IAAA,aAAI,EAAC,YAAY,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACrC,IAAI,CAAC,IAAA,iBAAQ,EAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE;gBACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;aAChD;QACL,CAAC,CAAC,CAAA;QACF,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAO;QACpB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACrD,MAAM,OAAO,GAAQ;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,OAAO;YAClB,aAAa,EAAE,QAAQ;YACvB,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,IAAI;SACnB,CAAA;QAED,IAAI,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC1C,IAAI,UAAU,GAAa,EAAE,CAAC;QAC9B,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,cAAc,GAAQ,EAAE,CAAC;QAE7B,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAI,OAAO,GAAQ,aAAa,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE;oBAC1B,IAAI,IAAA,iBAAQ,EAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;wBACpD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACtB;oBACD,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;wBAC/B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;qBACnD,CAAC;oBACF,IAAI,OAAO,CAAC,UAAU,EAAE;wBACpB,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;qBACvE;oBACD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;oBACtB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;wBACpB,cAAc,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;qBAC1B;oBACD,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACzC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;iBACrB;aACJ;YACD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;gBACpB,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;aAC5B;YACD,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE;gBACnB,MAAM,IAAI,KAAK,CACX,iDAAiD,MAAM,EAAE,CAC5D,CAAC;aACL;iBAAM;gBACH,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;aAC5B;SACJ;QACD,OAAO,CAAC,QAAQ,GAAG,cAAc,CAAC;QAClC,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;QAChC,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;QACxC,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB;QAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,MAAM,IAAA,gCAAiB,EAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACzD,CAAC;CACJ;AAjGD,8BAiGC"}
@@ -0,0 +1,8 @@
1
+ import { Base } from './Base';
2
+ export default class ImportFlow implements Base {
3
+ objectName: string;
4
+ userSession: any;
5
+ constructor(userSession: any);
6
+ readFile(filePath: string): any;
7
+ fileRecordsToDB(filePath: string): Promise<void>;
8
+ }
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const dbManager_1 = require("@steedos/metadata-api/lib/util/dbManager");
4
+ const flow_1 = require("@steedos/metadata-api/lib/metadata/collection/flow");
5
+ // import { checkNameEquals } from '@steedos/metadata-api/lib/util/check_name_equals'
6
+ const metadata_core_1 = require("@steedos/metadata-core");
7
+ const path = require('path');
8
+ const globby = require("globby");
9
+ const _ = require('underscore');
10
+ const transactionOptions = {
11
+ readPreference: 'primary',
12
+ readConcern: { level: 'majority' },
13
+ writeConcern: { w: 'majority' }
14
+ };
15
+ class ImportFlow {
16
+ constructor(userSession) {
17
+ this.objectName = "flows";
18
+ this.userSession = userSession;
19
+ }
20
+ readFile(filePath) {
21
+ const filePatten = [
22
+ path.join(filePath, "**", "*.flow.data.json"),
23
+ "!" + path.join(filePath, "node_modules"),
24
+ ];
25
+ const matchedPaths = globby.sync(filePatten);
26
+ let flows = {};
27
+ for (let k = 0; k < matchedPaths.length; k++) {
28
+ let matchedPath = matchedPaths[k];
29
+ let json = (0, metadata_core_1.loadFile)(matchedPath);
30
+ let formName = matchedPath.substring(matchedPath.lastIndexOf('/') + 1, matchedPath.indexOf('.flow'));
31
+ let form = {};
32
+ try {
33
+ if (json) {
34
+ // checkNameEquals(json, formName, matchedPath, TypeInfoKeys.Flow);
35
+ let flowKeys = _.keys(json);
36
+ for (let m in flowKeys) {
37
+ let key = flowKeys[m];
38
+ if (typeof key === 'function') {
39
+ continue;
40
+ }
41
+ let val = json[key];
42
+ if (typeof val === 'function') {
43
+ json[key] = val.toString();
44
+ }
45
+ form[key] = json[key];
46
+ }
47
+ flows[formName] = json;
48
+ }
49
+ }
50
+ catch (error) {
51
+ console.error('loadFlows error', matchedPath, error);
52
+ throw error;
53
+ }
54
+ }
55
+ return flows;
56
+ }
57
+ async fileRecordsToDB(filePath) {
58
+ const dbManager = new dbManager_1.DbManager(this.userSession);
59
+ try {
60
+ const flows = await this.readFile(filePath);
61
+ await dbManager.connect();
62
+ const session = await dbManager.startSession();
63
+ try {
64
+ await session.withTransaction(async () => {
65
+ await (0, flow_1.flowsToDb)(dbManager, flows, true);
66
+ }, transactionOptions);
67
+ }
68
+ catch (err) {
69
+ console.log(err);
70
+ throw err;
71
+ }
72
+ }
73
+ catch (error) {
74
+ console.error(error);
75
+ }
76
+ finally {
77
+ await dbManager.endSession();
78
+ await dbManager.close();
79
+ }
80
+ }
81
+ }
82
+ exports.default = ImportFlow;
83
+ //# sourceMappingURL=ImportFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImportFlow.js","sourceRoot":"","sources":["../../src/imports/ImportFlow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Base } from './Base';
2
+ export default class ImportJson implements Base {
3
+ userSession: any;
4
+ constructor(userSession: any);
5
+ format(record: any): any;
6
+ readFile(filePath: string): Promise<Array<{
7
+ objectName: string;
8
+ records: Array<any>;
9
+ }>>;
10
+ fileRecordsToDB(filePath: string): Promise<void>;
11
+ }
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lodash_1 = require("lodash");
4
+ const dbManager_1 = require("@steedos/metadata-api/lib/util/dbManager");
5
+ const mongodb_1 = require("mongodb");
6
+ const path = require('path');
7
+ const globby = require("globby");
8
+ const fs = require("fs");
9
+ const bson_1 = require("bson");
10
+ const __1 = require("..");
11
+ const transactionOptions = {
12
+ readPreference: 'primary',
13
+ readConcern: { level: 'majority' },
14
+ writeConcern: { w: 'majority' }
15
+ };
16
+ class ImportJson {
17
+ constructor(userSession) {
18
+ this.userSession = userSession;
19
+ }
20
+ format(record) {
21
+ if (!record) {
22
+ return record;
23
+ }
24
+ // each(record, (v, k) => {
25
+ // if (includes(keys(v), '$date')) {
26
+ // record[k] = new Date(v.$date)
27
+ // } else if (isArray(v)) {
28
+ // each(v, (v2) => {
29
+ // this.format(v2)
30
+ // })
31
+ // }
32
+ // })
33
+ return bson_1.EJSON.parse(JSON.stringify(record));
34
+ }
35
+ async readFile(filePath) {
36
+ let results = [];
37
+ const filePatten = [
38
+ path.join(filePath, "**", "*.data.json"),
39
+ "!" + path.join(filePath, "**", "*.flow.data.json"),
40
+ "!" + path.join(filePath, "node_modules")
41
+ ];
42
+ const matchedPaths = globby.sync(filePatten);
43
+ (0, lodash_1.each)(matchedPaths, (matchedPath) => {
44
+ let records = JSON.parse(fs.readFileSync(matchedPath, 'utf8').normalize('NFC'));
45
+ let objectName = path.basename(matchedPath).split('.')[0];
46
+ results.push({ objectName: objectName, records: records });
47
+ });
48
+ return results;
49
+ }
50
+ async fileRecordsToDB(filePath) {
51
+ var dbManager = new dbManager_1.DbManager(this.userSession);
52
+ const now = new Date();
53
+ try {
54
+ const results = await this.readFile(filePath);
55
+ await dbManager.connect();
56
+ // 如果库中没有collection则提前新建好
57
+ await (0, __1.preCreateCollection)(dbManager, results);
58
+ var session = await dbManager.startSession();
59
+ try {
60
+ await session.withTransaction(async () => {
61
+ for (const result of results) {
62
+ try {
63
+ for (let record of result.records) {
64
+ record = this.format(record);
65
+ const dbRecord = await dbManager.findOne(result.objectName, { _id: record._id }, true);
66
+ if (dbRecord) {
67
+ delete record.space;
68
+ delete record.owner;
69
+ delete record.created;
70
+ delete record.created_by;
71
+ await dbManager.update(result.objectName, { _id: record._id }, Object.assign(record, {
72
+ modified: now,
73
+ modified_by: this.userSession.userId,
74
+ company_id: this.userSession.company_id,
75
+ company_ids: this.userSession.company_ids,
76
+ }));
77
+ }
78
+ else {
79
+ await dbManager.insert(result.objectName, Object.assign(record, {
80
+ _id: record._id || new mongodb_1.ObjectId().toHexString(),
81
+ space: this.userSession.spaceId,
82
+ owner: this.userSession.userId,
83
+ created: now,
84
+ created_by: this.userSession.userId,
85
+ modified: now,
86
+ modified_by: this.userSession.userId,
87
+ company_id: this.userSession.company_id,
88
+ company_ids: this.userSession.company_ids,
89
+ }), false);
90
+ }
91
+ }
92
+ }
93
+ catch (error) {
94
+ console.error(`import ${result.objectName} error`, error.message);
95
+ throw error;
96
+ }
97
+ }
98
+ }, transactionOptions);
99
+ }
100
+ catch (err) {
101
+ console.log(err);
102
+ throw err;
103
+ }
104
+ }
105
+ catch (error) {
106
+ console.error(error);
107
+ }
108
+ finally {
109
+ await dbManager.endSession();
110
+ await dbManager.close();
111
+ }
112
+ }
113
+ }
114
+ exports.default = ImportJson;
115
+ //# sourceMappingURL=ImportJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImportJson.js","sourceRoot":"","sources":["../../src/imports/ImportJson.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ export declare function getUserSession(): Promise<any>;
2
+ /**
3
+ * 如果库中没有collection则提前新建好
4
+ * @param dbManager mongodb 数据库操作类
5
+ * @param results 需要导入的数据
6
+ */
7
+ export declare function preCreateCollection(dbManager: any, results: readFileResult[]): Promise<void>;
8
+ declare type readFileResult = {
9
+ readonly objectName: string;
10
+ readonly records: any[];
11
+ };
12
+ /**
13
+ *
14
+ * @param {*} filePath 要导入数据的文件夹路径
15
+ * @param {*} onlyInsert 仅导入,在导入数据之前先检查,如果存在任意一条记录,则不执行导入
16
+ */
17
+ export declare function importData(filePath: string, onlyInsert?: boolean): Promise<void>;
18
+ export {};
package/lib/index.js ADDED
@@ -0,0 +1,132 @@
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.importData = exports.preCreateCollection = exports.getUserSession = void 0;
7
+ const dbManager_1 = require("@steedos/metadata-api/lib/util/dbManager");
8
+ const lodash_1 = require("lodash");
9
+ const objectql_1 = require("@steedos/objectql");
10
+ const ImportJson_1 = __importDefault(require("./imports/ImportJson"));
11
+ const ImportCsv_1 = __importDefault(require("./imports/ImportCsv"));
12
+ const ImportFlow_1 = __importDefault(require("./imports/ImportFlow"));
13
+ async function getUserSession() {
14
+ var dbManager = new dbManager_1.DbManager({});
15
+ const now = new Date();
16
+ try {
17
+ await dbManager.connect();
18
+ const space = await dbManager.findOne('spaces', {}, false);
19
+ if (!space) {
20
+ return;
21
+ }
22
+ const spaceOwner = space.owner;
23
+ const spaceUser = await dbManager.findOne('space_users', { space: space._id, user: spaceOwner }, false);
24
+ if (!spaceUser) {
25
+ return;
26
+ }
27
+ return {
28
+ spaceId: space._id,
29
+ userId: spaceOwner,
30
+ company_id: spaceUser.company_id,
31
+ company_ids: spaceUser.company_ids
32
+ };
33
+ }
34
+ catch (error) {
35
+ console.error(error);
36
+ }
37
+ finally {
38
+ await dbManager.endSession();
39
+ await dbManager.close();
40
+ }
41
+ }
42
+ exports.getUserSession = getUserSession;
43
+ /**
44
+ * 如果库中没有collection则提前新建好
45
+ * @param dbManager mongodb 数据库操作类
46
+ * @param results 需要导入的数据
47
+ */
48
+ async function preCreateCollection(dbManager, results) {
49
+ const db = dbManager.client.db();
50
+ const collectionInfos = await db.listCollections({}, { nameOnly: true }).toArray();
51
+ const collectionsMap = (0, lodash_1.keyBy)(collectionInfos, 'name');
52
+ const config = (0, objectql_1.getSteedosConfig)();
53
+ const datasourceConfig = config.datasources['default'];
54
+ const locale = datasourceConfig.locale || 'zh';
55
+ const options = {
56
+ 'collation': { 'locale': locale },
57
+ };
58
+ for (const result of results) {
59
+ const objectName = result.objectName;
60
+ if (!collectionsMap[objectName]) {
61
+ await db.createCollection(objectName, options);
62
+ }
63
+ }
64
+ }
65
+ exports.preCreateCollection = preCreateCollection;
66
+ /**
67
+ *
68
+ * @param {*} filePath 要导入数据的文件夹路径
69
+ * @param {*} onlyInsert 仅导入,在导入数据之前先检查,如果存在任意一条记录,则不执行导入
70
+ */
71
+ async function importData(filePath, onlyInsert = true) {
72
+ const userSession = await getUserSession();
73
+ if ((0, lodash_1.isEmpty)(userSession)) {
74
+ return;
75
+ }
76
+ const importer = {
77
+ csv: new ImportCsv_1.default(userSession),
78
+ json: new ImportJson_1.default(userSession),
79
+ flow: new ImportFlow_1.default(userSession)
80
+ };
81
+ if (onlyInsert) {
82
+ var dbManager = new dbManager_1.DbManager(userSession);
83
+ try {
84
+ await dbManager.connect();
85
+ //检查csv数据是否存在
86
+ const csvData = await importer.csv.readFile(filePath);
87
+ for (const result of csvData) {
88
+ for (let record of result.records) {
89
+ const dbRecord = await dbManager.findOne(result.objectName, { _id: record._id }, true);
90
+ if (dbRecord) {
91
+ throw new Error(`停止导入数据:${result.objectName}对象的${record._id}记录已存在`);
92
+ }
93
+ }
94
+ }
95
+ //检查json数据是否存在
96
+ const jsonData = await importer.json.readFile(filePath);
97
+ for (const result of jsonData) {
98
+ for (let record of result.records) {
99
+ const dbRecord = await dbManager.findOne(result.objectName, { _id: record._id }, true);
100
+ if (dbRecord) {
101
+ throw new Error(`停止导入数据:${result.objectName}对象的${record._id}记录已存在`);
102
+ }
103
+ }
104
+ }
105
+ //检查flow数据是否存在
106
+ const flowData = await importer.flow.readFile(filePath);
107
+ for (const formName in flowData) {
108
+ var form = flowData[formName];
109
+ let flowApiName = form.api_name;
110
+ if (flowApiName) {
111
+ let flow = await dbManager.findOneWithProjection('flows', { api_name: flowApiName }, { form: 1 });
112
+ if (flow) {
113
+ throw new Error(`停止导入数据:流程${flowApiName}已存在`);
114
+ }
115
+ }
116
+ }
117
+ }
118
+ catch (error) {
119
+ console.info(error.message);
120
+ return;
121
+ }
122
+ finally {
123
+ await dbManager.endSession();
124
+ await dbManager.close();
125
+ }
126
+ }
127
+ importer.csv.fileRecordsToDB(filePath);
128
+ importer.json.fileRecordsToDB(filePath);
129
+ importer.flow.fileRecordsToDB(filePath);
130
+ }
131
+ exports.importData = importData;
132
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,wEAAoE;AACpE,mCAAuC;AACvC,gDAAoD;AACpD,sEAA6C;AAC7C,oEAA2C;AAC3C,sEAA6C;AAEtC,KAAK,UAAU,cAAc;IAChC,IAAI,SAAS,GAAG,IAAI,qBAAS,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,IAAI;QACA,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,EAAE;YACR,OAAO;SACV;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;QACxG,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO;SACV;QACD,OAAO;YACH,OAAO,EAAE,KAAK,CAAC,GAAG;YAClB,MAAM,EAAE,UAAU;YAClB,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,WAAW,EAAE,SAAS,CAAC,WAAW;SACrC,CAAC;KACL;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;KACvB;YAAS;QACN,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;QAC7B,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;KAC3B;AACL,CAAC;AA1BD,wCA0BC;AAED;;;;GAIG;AACI,KAAK,UAAU,mBAAmB,CAAC,SAAS,EAAE,OAAyB;IAC1E,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,CAAA;IAChC,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;IAClF,MAAM,cAAc,GAAG,IAAA,cAAK,EAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,IAAA,2BAAgB,GAAE,CAAA;IACjC,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IACtD,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,IAAI,IAAI,CAAA;IAC9C,MAAM,OAAO,GAAG;QACZ,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;KACpC,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QACpC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YAC7B,MAAM,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;SACjD;KACJ;AACL,CAAC;AAhBD,kDAgBC;AAOD;;;;GAIG;AACI,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,aAAsB,IAAI;IACzE,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAA;IAC1C,IAAI,IAAA,gBAAO,EAAC,WAAW,CAAC,EAAE;QACtB,OAAO;KACV;IACD,MAAM,QAAQ,GAAG;QACb,GAAG,EAAE,IAAI,mBAAS,CAAC,WAAW,CAAC;QAC/B,IAAI,EAAE,IAAI,oBAAU,CAAC,WAAW,CAAC;QACjC,IAAI,EAAE,IAAI,oBAAU,CAAC,WAAW,CAAC;KACpC,CAAA;IAED,IAAI,UAAU,EAAE;QACZ,IAAI,SAAS,GAAG,IAAI,qBAAS,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI;YACA,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;YAC1B,aAAa;YACb,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACtD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC1B,KAAK,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;oBAC/B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;oBACvF,IAAI,QAAQ,EAAE;wBACV,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;qBACvE;iBACJ;aACJ;YACD,cAAc;YACd,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACxD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;gBAC3B,KAAK,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;oBAC/B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;oBACvF,IAAI,QAAQ,EAAE;wBACV,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;qBACvE;iBACJ;aACJ;YACD,cAAc;YACd,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAExD,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE;gBAC7B,IAAI,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAE9B,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAA;gBAE/B,IAAI,WAAW,EAAE;oBACb,IAAI,IAAI,GAAG,MAAM,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;oBACjG,IAAI,IAAI,EAAE;wBACN,MAAM,IAAI,KAAK,CAAC,YAAY,WAAW,KAAK,CAAC,CAAC;qBACjD;iBACJ;aACJ;SACJ;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO;SACV;gBAAS;YACN,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;YAC7B,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;SAC3B;KACJ;IACD,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACxC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AA7DD,gCA6DC"}
package/package.json CHANGED
@@ -1,15 +1,20 @@
1
1
  {
2
2
  "name": "@steedos/data-import",
3
- "version": "2.2.54-beta.4",
3
+ "version": "2.2.54-beta.7",
4
4
  "main": "lib/index.js",
5
5
  "license": "MIT",
6
6
  "scripts": {
7
- "build": "tsc"
7
+ "build": "rm -rf ./lib && tsc"
8
8
  },
9
9
  "dependencies": {
10
- "@steedos/core": "2.2.54-beta.4",
11
- "@steedos/objectql": "2.2.54-beta.4",
10
+ "@steedos/core": "2.2.54-beta.7",
11
+ "@steedos/metadata-api": "2.2.54-beta.7",
12
+ "@steedos/metadata-core": "2.2.54-beta.7",
13
+ "@steedos/objectql": "2.2.54-beta.7",
14
+ "bson": "4.6.4",
15
+ "csvtojson": "~2.0.10",
12
16
  "dotenv-flow": "^3.1.0",
17
+ "globby": "9.2.0",
13
18
  "lodash": "^4.17.21",
14
19
  "node-xlsx": "^0.16.1"
15
20
  },
@@ -20,5 +25,5 @@
20
25
  "publishConfig": {
21
26
  "access": "public"
22
27
  },
23
- "gitHead": "f68c327098f378d5e3d8dc5b12508e31ad368947"
28
+ "gitHead": "1de03714622c2de137a7a51623e94bb7df45f204"
24
29
  }