@steedos/data-import 2.5.17-beta.1 → 2.5.17-beta.10
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 +79 -21
- package/lib/imports/ImportFlow.d.ts +1 -1
- package/lib/imports/ImportFlow.js +1 -2
- package/lib/imports/ImportFlow.js.map +1 -1
- package/lib/imports/ImportJson.d.ts +2 -1
- package/lib/imports/ImportJson.js +2 -3
- package/lib/imports/ImportJson.js.map +1 -1
- package/lib/index.d.ts +7 -3
- package/lib/index.js +22 -13
- package/lib/index.js.map +1 -1
- package/package.json +6 -6
- package/package.service.js +63 -7
package/README.md
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
* @Author: sunhaolin@hotoa.com
|
|
3
3
|
* @Date: 2021-10-21 09:57:01
|
|
4
|
-
* @LastEditors: sunhaolin@
|
|
5
|
-
* @LastEditTime:
|
|
4
|
+
* @LastEditors: 孙浩林 sunhaolin@steedos.com
|
|
5
|
+
* @LastEditTime: 2023-10-27 12:55:47
|
|
6
6
|
* @Description:
|
|
7
7
|
-->
|
|
8
8
|
## 功能说明
|
|
9
9
|
- 此包是系统设置中的数据导入功能,可通过excel导入对象数据
|
|
10
10
|
|
|
11
|
-
### 提供importData
|
|
11
|
+
### 提供importData action 支持导入{objectname}.data.json、{objectname}.data.csv、{flowApiname}.flow.data.json数据
|
|
12
12
|
|
|
13
|
-
- 比如在自定义的软件包package.service.js
|
|
13
|
+
- 比如在自定义的软件包package.service.js中监听系统初始化事件调用importData导入软件包中的数据:
|
|
14
14
|
|
|
15
15
|
```js
|
|
16
|
-
|
|
17
|
-
const path = require('path')
|
|
16
|
+
|
|
18
17
|
module.exports = {
|
|
19
18
|
/**
|
|
20
19
|
* Events
|
|
@@ -22,26 +21,85 @@ module.exports = {
|
|
|
22
21
|
events: {
|
|
23
22
|
// 系统初始化成功
|
|
24
23
|
'service-cloud-init.succeeded': async function (ctx) {
|
|
25
|
-
await
|
|
24
|
+
await this.broker.call("~packages-@steedos/data-import.importData", {
|
|
25
|
+
data: {
|
|
26
|
+
"csv": csvData,
|
|
27
|
+
"json": jsonData,
|
|
28
|
+
"flow": flowData,
|
|
29
|
+
},
|
|
30
|
+
spaceId,
|
|
31
|
+
onlyInsert: true,
|
|
32
|
+
})
|
|
26
33
|
}
|
|
27
34
|
},
|
|
28
|
-
/**
|
|
29
|
-
* Service started lifecycle event handler
|
|
30
|
-
*/
|
|
31
|
-
async started() {
|
|
32
|
-
await importData(path.join(__dirname, 'main', 'default', 'data'));
|
|
33
|
-
},
|
|
34
35
|
};
|
|
35
36
|
```
|
|
36
37
|
|
|
37
|
-
- importData
|
|
38
|
+
- importData action 参数说明
|
|
38
39
|
```js
|
|
39
40
|
/**
|
|
40
|
-
*
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
* 参数示例:
|
|
42
|
+
{
|
|
43
|
+
data: {
|
|
44
|
+
"csv": [{ objectName: 'warehouse', records: [ [Object] ]],
|
|
45
|
+
"json": [{ objectName: 'house', records: [ [Object] ]],
|
|
46
|
+
"flow": { flowApiName1: {}, flowApiName2: {} },
|
|
47
|
+
},
|
|
48
|
+
spaceId,
|
|
49
|
+
onlyInsert: true,
|
|
50
|
+
}
|
|
51
|
+
*/
|
|
52
|
+
"importData": {
|
|
53
|
+
params: {
|
|
54
|
+
data: {
|
|
55
|
+
type: "object",
|
|
56
|
+
props: {
|
|
57
|
+
csv: {
|
|
58
|
+
type: "array",
|
|
59
|
+
items: {
|
|
60
|
+
type: "object",
|
|
61
|
+
props: {
|
|
62
|
+
objectName: { type: "string" },
|
|
63
|
+
records: { type: "array", items: "object" },
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
optional: true,
|
|
67
|
+
},
|
|
68
|
+
json: {
|
|
69
|
+
type: "array",
|
|
70
|
+
items: {
|
|
71
|
+
type: "object",
|
|
72
|
+
props: {
|
|
73
|
+
objectName: { type: "string" },
|
|
74
|
+
records: { type: "array", items: "object" },
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
optional: true,
|
|
78
|
+
},
|
|
79
|
+
flow: {
|
|
80
|
+
type: "object",
|
|
81
|
+
optional: true,
|
|
82
|
+
},
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
spaceId: { type: "string" },
|
|
86
|
+
onlyInsert: { type: "boolean", optional: true, default: true }, // 仅新增,在导入数据之前先检查,如果存在任意一条记录,则不执行导入,默认true,如果是false, 则如果存在则执行更新操作。
|
|
87
|
+
},
|
|
88
|
+
async handler(ctx) {
|
|
89
|
+
|
|
90
|
+
}
|
|
46
91
|
}
|
|
47
|
-
```
|
|
92
|
+
```
|
|
93
|
+
## 使用mongodb cli 导出演示数据
|
|
94
|
+
- json: 使用命令导出。例如: `mongoexport --uri="mongodb://192.168.3.31:27017/steedos-apps" --jsonArray --collection=contract_types --out=contract_types.data.json`
|
|
95
|
+
- csv: 使用命令导出。例如: `mongoexport --uri="mongodb://192.168.3.31:27017/steedos-apps" --collection=contract_types --type=csv --fields=name,code --out=contract_types.data.csv`
|
|
96
|
+
|
|
97
|
+
## 编码要求
|
|
98
|
+
json、csv中文件请使用`utf-8`编码
|
|
99
|
+
|
|
100
|
+
## 示例,导出合同模块数据, 进入`main\default\data`文件夹后执行以下命令
|
|
101
|
+
```
|
|
102
|
+
mongoexport --uri="mongodb://192.168.3.31:27017/steedos-apps" --collection=contract_types --type=csv --fields=name,code --out=contract_types.data.csv
|
|
103
|
+
|
|
104
|
+
mongoexport --uri="mongodb://192.168.3.31:27017/steedos-apps" --jsonArray --collection=contracts --out=contracts.data.json
|
|
105
|
+
```
|
|
@@ -51,10 +51,9 @@ class ImportFlow {
|
|
|
51
51
|
}
|
|
52
52
|
return flows;
|
|
53
53
|
}
|
|
54
|
-
async fileRecordsToDB(
|
|
54
|
+
async fileRecordsToDB(flows) {
|
|
55
55
|
const dbManager = new dbManager_1.DbManager(this.userSession);
|
|
56
56
|
try {
|
|
57
|
-
const flows = await this.readFile(filePath);
|
|
58
57
|
await dbManager.connect();
|
|
59
58
|
const session = await dbManager.startSession();
|
|
60
59
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImportFlow.js","sourceRoot":"","sources":["../../src/imports/ImportFlow.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ImportFlow.js","sourceRoot":"","sources":["../../src/imports/ImportFlow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Base } from './Base';
|
|
2
|
+
import { readFileResult } from '..';
|
|
2
3
|
export default class ImportJson implements Base {
|
|
3
4
|
userSession: any;
|
|
4
5
|
constructor(userSession: any);
|
|
@@ -7,5 +8,5 @@ export default class ImportJson implements Base {
|
|
|
7
8
|
objectName: string;
|
|
8
9
|
records: Array<any>;
|
|
9
10
|
}>>;
|
|
10
|
-
fileRecordsToDB(
|
|
11
|
+
fileRecordsToDB(jsonData: readFileResult[]): Promise<void>;
|
|
11
12
|
}
|
|
@@ -38,14 +38,13 @@ class ImportJson {
|
|
|
38
38
|
});
|
|
39
39
|
return results;
|
|
40
40
|
}
|
|
41
|
-
async fileRecordsToDB(
|
|
41
|
+
async fileRecordsToDB(jsonData) {
|
|
42
42
|
const userSession = this.userSession;
|
|
43
43
|
const { spaceId, userId, company_id, company_ids } = userSession;
|
|
44
44
|
var dbManager = new dbManager_1.DbManager(userSession);
|
|
45
45
|
const now = new Date();
|
|
46
46
|
try {
|
|
47
|
-
let results =
|
|
48
|
-
results = (0, __1.formatResults)(results, userSession);
|
|
47
|
+
let results = (0, __1.formatResults)(jsonData, userSession);
|
|
49
48
|
await dbManager.connect();
|
|
50
49
|
await (0, __1.preCreateCollection)(dbManager, results);
|
|
51
50
|
var session = await dbManager.startSession();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImportJson.js","sourceRoot":"","sources":["../../src/imports/ImportJson.ts"],"names":[],"mappings":";;AAAA,mCAA0D;AAE1D,wEAAoE;AACpE,qCAAmC;AACnC,0DAAwD;AACxD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,+BAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"ImportJson.js","sourceRoot":"","sources":["../../src/imports/ImportJson.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { userSessionType } from './types';
|
|
2
2
|
export declare function getUserSession(spaceId?: string): Promise<userSessionType | any>;
|
|
3
3
|
export declare function preCreateCollection(dbManager: any, results: readFileResult[]): Promise<void>;
|
|
4
|
-
declare type readFileResult = {
|
|
4
|
+
export declare type readFileResult = {
|
|
5
5
|
readonly objectName: string;
|
|
6
6
|
readonly records: any[];
|
|
7
7
|
};
|
|
8
|
+
export declare type importDataType = {
|
|
9
|
+
csv: readFileResult[];
|
|
10
|
+
json: readFileResult[];
|
|
11
|
+
flow: object;
|
|
12
|
+
};
|
|
8
13
|
export declare function formatResults(results: readFileResult[], userSession: userSessionType): readFileResult[];
|
|
9
|
-
export declare function importData(
|
|
10
|
-
export {};
|
|
14
|
+
export declare function importData(data: importDataType, onlyInsert?: boolean, spaceId?: string): Promise<void>;
|
package/lib/index.js
CHANGED
|
@@ -10,6 +10,7 @@ const objectql_1 = require("@steedos/objectql");
|
|
|
10
10
|
const ImportJson_1 = __importDefault(require("./imports/ImportJson"));
|
|
11
11
|
const ImportCsv_1 = __importDefault(require("./imports/ImportCsv"));
|
|
12
12
|
const ImportFlow_1 = __importDefault(require("./imports/ImportFlow"));
|
|
13
|
+
const lodash_2 = __importDefault(require("lodash"));
|
|
13
14
|
async function getUserSession(spaceId) {
|
|
14
15
|
var dbManager = new dbManager_1.DbManager({});
|
|
15
16
|
const now = new Date();
|
|
@@ -57,7 +58,11 @@ async function preCreateCollection(dbManager, results) {
|
|
|
57
58
|
for (const result of results) {
|
|
58
59
|
const objectName = result.objectName;
|
|
59
60
|
if (!collectionsMap[objectName]) {
|
|
60
|
-
|
|
61
|
+
try {
|
|
62
|
+
await db.createCollection(objectName, options);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
}
|
|
61
66
|
}
|
|
62
67
|
}
|
|
63
68
|
}
|
|
@@ -67,21 +72,26 @@ function formatResults(results, userSession) {
|
|
|
67
72
|
return JSON.parse(JSON.stringify(results).replace(/\${space_id}/g, spaceId).replace(/\${space_owner_id}/g, userId));
|
|
68
73
|
}
|
|
69
74
|
exports.formatResults = formatResults;
|
|
70
|
-
async function importData(
|
|
75
|
+
async function importData(data, onlyInsert = true, spaceId) {
|
|
71
76
|
const userSession = await getUserSession(spaceId);
|
|
72
77
|
if ((0, lodash_1.isEmpty)(userSession)) {
|
|
73
78
|
return;
|
|
74
79
|
}
|
|
80
|
+
if (lodash_2.default.isEmpty(data)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
75
83
|
const importer = {
|
|
76
84
|
csv: new ImportCsv_1.default(userSession),
|
|
77
85
|
json: new ImportJson_1.default(userSession),
|
|
78
86
|
flow: new ImportFlow_1.default(userSession)
|
|
79
87
|
};
|
|
88
|
+
const csvData = (data === null || data === void 0 ? void 0 : data.csv) || [];
|
|
89
|
+
const jsonData = (data === null || data === void 0 ? void 0 : data.json) || [];
|
|
90
|
+
const flowData = (data === null || data === void 0 ? void 0 : data.flow) || {};
|
|
80
91
|
if (onlyInsert) {
|
|
81
92
|
var dbManager = new dbManager_1.DbManager(userSession);
|
|
82
93
|
try {
|
|
83
94
|
await dbManager.connect();
|
|
84
|
-
const csvData = await importer.csv.readFile(filePath);
|
|
85
95
|
for (const result of csvData) {
|
|
86
96
|
for (let record of result.records) {
|
|
87
97
|
const dbRecord = await dbManager.findOne(result.objectName, { _id: record._id }, true);
|
|
@@ -90,16 +100,15 @@ async function importData(filePath, onlyInsert = true, spaceId) {
|
|
|
90
100
|
}
|
|
91
101
|
}
|
|
92
102
|
}
|
|
93
|
-
const jsonData = await importer.json.readFile(filePath);
|
|
94
103
|
for (const result of jsonData) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
104
|
+
const objectName = result.objectName;
|
|
105
|
+
const records = result.records;
|
|
106
|
+
const recordsIds = lodash_2.default.map(records, '_id');
|
|
107
|
+
const dbRecords = await dbManager.find(objectName, { _id: { $in: recordsIds } }, false, 0, { projection: { _id: 1 } });
|
|
108
|
+
if (dbRecords.length > 0) {
|
|
109
|
+
throw new Error(`停止导入数据:${result.objectName}对象已存在${dbRecords.length}条记录`);
|
|
100
110
|
}
|
|
101
111
|
}
|
|
102
|
-
const flowData = await importer.flow.readFile(filePath);
|
|
103
112
|
for (const formName in flowData) {
|
|
104
113
|
var form = flowData[formName];
|
|
105
114
|
let flowApiName = form.api_name;
|
|
@@ -120,9 +129,9 @@ async function importData(filePath, onlyInsert = true, spaceId) {
|
|
|
120
129
|
await dbManager.close();
|
|
121
130
|
}
|
|
122
131
|
}
|
|
123
|
-
importer.csv.fileRecordsToDB(
|
|
124
|
-
importer.json.fileRecordsToDB(
|
|
125
|
-
importer.flow.fileRecordsToDB(
|
|
132
|
+
importer.csv.fileRecordsToDB(csvData);
|
|
133
|
+
importer.json.fileRecordsToDB(jsonData);
|
|
134
|
+
importer.flow.fileRecordsToDB(flowData);
|
|
126
135
|
}
|
|
127
136
|
exports.importData = importData;
|
|
128
137
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/data-import",
|
|
3
|
-
"version": "2.5.17-beta.
|
|
3
|
+
"version": "2.5.17-beta.10",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "rm -rf ./lib && tsc"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@steedos/core": "2.5.17-beta.
|
|
11
|
-
"@steedos/metadata-api": "2.5.17-beta.
|
|
12
|
-
"@steedos/metadata-core": "2.5.17-beta.
|
|
13
|
-
"@steedos/objectql": "2.5.17-beta.
|
|
10
|
+
"@steedos/core": "2.5.17-beta.10",
|
|
11
|
+
"@steedos/metadata-api": "2.5.17-beta.10",
|
|
12
|
+
"@steedos/metadata-core": "2.5.17-beta.10",
|
|
13
|
+
"@steedos/objectql": "2.5.17-beta.10",
|
|
14
14
|
"bson": "4.6.4",
|
|
15
15
|
"csvtojson": "~2.0.10",
|
|
16
16
|
"dotenv-flow": "^3.1.0",
|
|
@@ -24,5 +24,5 @@
|
|
|
24
24
|
"publishConfig": {
|
|
25
25
|
"access": "public"
|
|
26
26
|
},
|
|
27
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "d4a1c8b4938c6b7853b4890902ec7b9ea60a1a70"
|
|
28
28
|
}
|
package/package.service.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* @Author: baozhoutao@steedos.com
|
|
3
3
|
* @Date: 2022-03-28 09:35:34
|
|
4
|
-
* @LastEditors:
|
|
5
|
-
* @LastEditTime:
|
|
4
|
+
* @LastEditors: 孙浩林 sunhaolin@steedos.com
|
|
5
|
+
* @LastEditTime: 2023-10-27 12:09:49
|
|
6
6
|
* @Description:
|
|
7
7
|
*/
|
|
8
8
|
"use strict";
|
|
@@ -11,6 +11,7 @@ const packageName = project.name;
|
|
|
11
11
|
const packageLoader = require('@steedos/service-package-loader');
|
|
12
12
|
const path = require('path');
|
|
13
13
|
const objectql = require('@steedos/objectql');
|
|
14
|
+
const { importData } = require('./lib')
|
|
14
15
|
/**
|
|
15
16
|
* @typedef {import('moleculer').Context} Context Moleculer's Context
|
|
16
17
|
* 软件包服务启动后也需要抛出事件。
|
|
@@ -24,10 +25,10 @@ module.exports = {
|
|
|
24
25
|
*/
|
|
25
26
|
settings: {
|
|
26
27
|
packageInfo: {
|
|
27
|
-
|
|
28
|
+
path: path.join(__dirname, 'lib'),
|
|
28
29
|
name: packageName,
|
|
29
30
|
isPackage: false
|
|
30
|
-
|
|
31
|
+
}
|
|
31
32
|
},
|
|
32
33
|
|
|
33
34
|
/**
|
|
@@ -42,9 +43,11 @@ module.exports = {
|
|
|
42
43
|
'hasImportTemplates': {
|
|
43
44
|
async handler(ctx) {
|
|
44
45
|
const { objectName } = ctx.params;
|
|
45
|
-
const count = await objectql.getObject('queue_import').count({
|
|
46
|
-
[
|
|
47
|
-
|
|
46
|
+
const count = await objectql.getObject('queue_import').count({
|
|
47
|
+
filters: [
|
|
48
|
+
['object_name', '=', objectName]
|
|
49
|
+
]
|
|
50
|
+
});
|
|
48
51
|
return count > 0
|
|
49
52
|
}
|
|
50
53
|
},
|
|
@@ -54,6 +57,59 @@ module.exports = {
|
|
|
54
57
|
return records;
|
|
55
58
|
}
|
|
56
59
|
},
|
|
60
|
+
/**
|
|
61
|
+
* 参数示例:
|
|
62
|
+
{
|
|
63
|
+
data: {
|
|
64
|
+
"csv": [{ objectName: 'warehouse', records: [ [Object] ]],
|
|
65
|
+
"json": [{ objectName: 'house', records: [ [Object] ]],
|
|
66
|
+
"flow": { flowApiName1: {}, flowApiName2: {} },
|
|
67
|
+
},
|
|
68
|
+
spaceId,
|
|
69
|
+
onlyInsert: true,
|
|
70
|
+
}
|
|
71
|
+
*/
|
|
72
|
+
"importData": {
|
|
73
|
+
params: {
|
|
74
|
+
data: {
|
|
75
|
+
type: "object",
|
|
76
|
+
props: {
|
|
77
|
+
csv: {
|
|
78
|
+
type: "array",
|
|
79
|
+
items: {
|
|
80
|
+
type: "object",
|
|
81
|
+
props: {
|
|
82
|
+
objectName: { type: "string" },
|
|
83
|
+
records: { type: "array", items: "object" },
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
optional: true,
|
|
87
|
+
},
|
|
88
|
+
json: {
|
|
89
|
+
type: "array",
|
|
90
|
+
items: {
|
|
91
|
+
type: "object",
|
|
92
|
+
props: {
|
|
93
|
+
objectName: { type: "string" },
|
|
94
|
+
records: { type: "array", items: "object" },
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
optional: true,
|
|
98
|
+
},
|
|
99
|
+
flow: {
|
|
100
|
+
type: "object",
|
|
101
|
+
optional: true,
|
|
102
|
+
},
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
spaceId: { type: "string" },
|
|
106
|
+
onlyInsert: { type: "boolean", optional: true, default: true },
|
|
107
|
+
},
|
|
108
|
+
async handler(ctx) {
|
|
109
|
+
const { data, spaceId, onlyInsert } = ctx.params;
|
|
110
|
+
await importData(data, onlyInsert, spaceId)
|
|
111
|
+
}
|
|
112
|
+
}
|
|
57
113
|
},
|
|
58
114
|
|
|
59
115
|
/**
|