midway-fatcms 0.0.1-beta.2 → 0.0.1-beta.20
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/.eslintrc.json +12 -0
- package/.prettierrc.js +4 -0
- package/README.md +7 -0
- package/dist/config/config.default.js +52 -15
- package/dist/configuration.d.ts +1 -0
- package/dist/configuration.js +33 -8
- package/dist/controller/base/BaseApiController.d.ts +1 -1
- package/dist/controller/base/BaseApiController.js +9 -6
- package/dist/controller/gateway/AsyncTaskController.d.ts +14 -0
- package/dist/controller/gateway/AsyncTaskController.js +108 -0
- package/dist/controller/gateway/CrudMtdGatewayController.d.ts +3 -3
- package/dist/controller/gateway/CrudMtdGatewayController.js +9 -6
- package/dist/controller/gateway/DocGatewayController.js +14 -9
- package/dist/controller/gateway/PublicApiController.js +4 -6
- package/dist/controller/gateway/StaticController.d.ts +2 -0
- package/dist/controller/gateway/StaticController.js +59 -40
- package/dist/controller/helpers.controller.d.ts +1 -1
- package/dist/controller/home.controller.js +2 -2
- package/dist/controller/manage/CrudStandardDesignApi.d.ts +1 -1
- package/dist/controller/manage/CrudStandardDesignApi.js +78 -75
- package/dist/controller/manage/DataDictManageApi.d.ts +1 -1
- package/dist/controller/manage/DeployManageApi.d.ts +1 -1
- package/dist/controller/manage/DeployManageApi.js +38 -34
- package/dist/controller/manage/MenuManageApi.js +1 -1
- package/dist/controller/manage/SuperAdminManageApi.d.ts +2 -2
- package/dist/controller/manage/SuperAdminManageApi.js +12 -8
- package/dist/controller/manage/SysConfigMangeApi.d.ts +1 -1
- package/dist/controller/manage/SysConfigMangeApi.js +6 -4
- package/dist/controller/manage/SystemInfoManageApi.d.ts +1 -1
- package/dist/controller/manage/SystemInfoManageApi.js +7 -1
- package/dist/controller/manage/UserAccountManageApi.d.ts +2 -2
- package/dist/controller/manage/UserAccountManageApi.js +5 -0
- package/dist/controller/manage/WorkbenchMangeApi.js +1 -1
- package/dist/controller/myinfo/AuthController.d.ts +0 -4
- package/dist/controller/myinfo/AuthController.js +1 -54
- package/dist/controller/render/AppRenderController.js +10 -4
- package/dist/controller/test.controller.d.ts +1 -1
- package/dist/controller/test.controller.js +5 -5
- package/dist/index.d.ts +34 -4
- package/dist/index.js +34 -4
- package/dist/libs/crud-pro/CrudPro.d.ts +1 -0
- package/dist/libs/crud-pro/CrudPro.js +5 -0
- package/dist/libs/crud-pro/defaultConfigs.js +2 -0
- package/dist/libs/crud-pro/interfaces.d.ts +7 -1
- package/dist/libs/crud-pro/models/ExecuteContext.d.ts +2 -1
- package/dist/libs/crud-pro/models/ExecuteContextFunc.d.ts +8 -1
- package/dist/libs/crud-pro/models/ExecuteContextFunc.js +8 -0
- package/dist/libs/crud-pro/models/RequestCfgModel.d.ts +1 -1
- package/dist/libs/crud-pro/models/ResModel.d.ts +16 -0
- package/dist/libs/crud-pro/models/ResModel.js +2 -0
- package/dist/libs/crud-pro/models/SqlCfgModel.d.ts +1 -1
- package/dist/libs/crud-pro/models/TransactionSqlServer.js +1 -1
- package/dist/libs/crud-pro/services/CrudProCachedCfgService.d.ts +1 -0
- package/dist/libs/crud-pro/services/CrudProCachedCfgService.js +22 -11
- package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +10 -9
- package/dist/libs/crud-pro/services/CrudProGenSqlCondition.d.ts +1 -1
- package/dist/libs/crud-pro/services/CrudProGenSqlCondition.js +10 -12
- package/dist/libs/crud-pro/services/CrudProGenSqlService.js +14 -23
- package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.js +7 -6
- package/dist/libs/crud-pro/services/CrudProServiceBase.d.ts +2 -6
- package/dist/libs/crud-pro/services/CrudProServiceBase.js +3 -2
- package/dist/libs/crud-pro/services/CrudProTableMetaService.d.ts +1 -0
- package/dist/libs/crud-pro/services/CrudProTableMetaService.js +31 -7
- package/dist/libs/crud-pro/utils/DatabaseName.js +24 -3
- package/dist/libs/crud-pro/utils/MixinUtils.js +1 -1
- package/dist/libs/crud-pro/utils/ValidateUtils.js +1 -1
- package/dist/libs/crud-pro/utils/sqlConvert/convertColumnName.js +2 -2
- package/dist/libs/global-config/global-config.d.ts +45 -0
- package/dist/libs/global-config/global-config.js +33 -0
- package/dist/libs/utils/errorToString.d.ts +2 -0
- package/dist/libs/utils/errorToString.js +57 -0
- package/dist/libs/utils/fatcms-request.js +2 -2
- package/dist/middleware/forbidden.middleware.js +4 -20
- package/dist/middleware/global.middleware.js +8 -1
- package/dist/models/AsyncTaskModel.d.ts +69 -0
- package/dist/models/AsyncTaskModel.js +26 -0
- package/dist/models/RedisKeys.d.ts +8 -0
- package/dist/models/RedisKeys.js +11 -0
- package/dist/models/SystemTables.d.ts +1 -3
- package/dist/models/SystemTables.js +2 -4
- package/dist/schedule/anonymousContext.d.ts +13 -0
- package/dist/schedule/anonymousContext.js +59 -0
- package/dist/schedule/index.d.ts +4 -3
- package/dist/schedule/index.js +8 -67
- package/dist/schedule/runSchedule.d.ts +15 -0
- package/dist/schedule/runSchedule.js +68 -0
- package/dist/schedule/scheduleNames.d.ts +13 -0
- package/dist/schedule/scheduleNames.js +17 -0
- package/dist/service/AuthService.js +8 -5
- package/dist/service/EnumInfoService.js +7 -4
- package/dist/service/FileCenterService.js +13 -9
- package/dist/service/SysConfigService.js +4 -2
- package/dist/service/UserAccountService.js +10 -6
- package/dist/service/UserSessionService.js +2 -1
- package/dist/service/VisitStatService.d.ts +1 -1
- package/dist/service/VisitStatService.js +20 -27
- package/dist/service/WorkbenchService.js +4 -2
- package/dist/service/anyapi/AnyApiService.js +4 -2
- package/dist/service/asyncTask/AsyncTaskRunnerService.d.ts +37 -0
- package/dist/service/asyncTask/AsyncTaskRunnerService.js +226 -0
- package/dist/service/asyncTask/AsyncTaskService.d.ts +7 -0
- package/dist/service/asyncTask/AsyncTaskService.js +34 -0
- package/dist/service/crudstd/CrudStdService.d.ts +1 -0
- package/dist/service/crudstd/CrudStdService.js +34 -3
- package/dist/service/curd/CrudProQuick.d.ts +24 -0
- package/dist/service/curd/CrudProQuick.js +105 -0
- package/dist/service/curd/CurdMixByAccountService.js +12 -6
- package/dist/service/curd/CurdMixByDictService.js +4 -2
- package/dist/service/curd/CurdMixByLinkToCustomService.d.ts +10 -1
- package/dist/service/curd/CurdMixByLinkToCustomService.js +72 -24
- package/dist/service/curd/CurdMixBySysConfigService.js +4 -2
- package/dist/service/curd/CurdMixByWorkbenchService.js +4 -2
- package/dist/service/curd/CurdMixService.d.ts +1 -1
- package/dist/service/curd/CurdMixService.js +2 -2
- package/dist/service/curd/CurdMixUtils.d.ts +7 -0
- package/dist/service/curd/CurdMixUtils.js +65 -28
- package/dist/service/curd/CurdProService.d.ts +2 -10
- package/dist/service/curd/CurdProService.js +31 -146
- package/dist/service/curd/fixCfgModel.d.ts +3 -0
- package/dist/service/curd/fixCfgModel.js +107 -0
- package/dist/service/proxyapi/ProxyApiLoadService.js +7 -4
- package/dist/views/404_app.html +31 -0
- package/dist/views/404_workbench.html +34 -0
- package/dist/views/static/favicon.ico +0 -0
- package/package.json +9 -2
- package/src/config/config.default.ts +58 -27
- package/src/configuration.ts +42 -9
- package/src/controller/base/BaseApiController.ts +19 -19
- package/src/controller/gateway/AnyApiGatewayController.ts +1 -1
- package/src/controller/gateway/AsyncTaskController.ts +83 -0
- package/src/controller/gateway/CrudMtdGatewayController.ts +17 -13
- package/src/controller/gateway/CrudStdGatewayController.ts +4 -4
- package/src/controller/gateway/DocGatewayController.ts +25 -17
- package/src/controller/gateway/FileController.ts +8 -9
- package/src/controller/gateway/ProxyApiGatewayController.ts +4 -4
- package/src/controller/gateway/PublicApiController.ts +19 -22
- package/src/controller/gateway/StaticController.ts +234 -242
- package/src/controller/helpers.controller.ts +1 -1
- package/src/controller/home.controller.ts +8 -15
- package/src/controller/manage/AnyApiMangeApi.ts +9 -9
- package/src/controller/manage/AppLogMangeApi.ts +3 -3
- package/src/controller/manage/AppMangeApi.ts +5 -5
- package/src/controller/manage/AppPageMangeApi.ts +3 -3
- package/src/controller/manage/AppSchemaHistoryApi.ts +1 -1
- package/src/controller/manage/CrudMethodsMangeApi.ts +3 -3
- package/src/controller/manage/CrudStandardDesignApi.ts +106 -113
- package/src/controller/manage/DataDictManageApi.ts +4 -4
- package/src/controller/manage/DeployManageApi.ts +85 -89
- package/src/controller/manage/DocLibManageApi.ts +3 -3
- package/src/controller/manage/DocManageApi.ts +8 -8
- package/src/controller/manage/MenuManageApi.ts +9 -14
- package/src/controller/manage/SuperAdminManageApi.ts +14 -13
- package/src/controller/manage/SysConfigMangeApi.ts +9 -9
- package/src/controller/manage/SystemInfoManageApi.ts +11 -6
- package/src/controller/manage/UserAccountManageApi.ts +8 -2
- package/src/controller/manage/WorkbenchMangeApi.ts +6 -6
- package/src/controller/myinfo/AuthController.ts +6 -72
- package/src/controller/render/AppRenderController.ts +24 -21
- package/src/controller/test.controller.ts +18 -18
- package/src/index.ts +38 -4
- package/src/libs/crud-pro/CrudPro.ts +7 -0
- package/src/libs/crud-pro/defaultConfigs.ts +2 -0
- package/src/libs/crud-pro/interfaces.ts +10 -3
- package/src/libs/crud-pro/models/ExecuteContext.ts +3 -3
- package/src/libs/crud-pro/models/ExecuteContextFunc.ts +11 -1
- package/src/libs/crud-pro/models/RequestCfgModel.ts +1 -1
- package/src/libs/crud-pro/models/RequestModel.ts +1 -1
- package/src/libs/crud-pro/models/ResModel.ts +19 -0
- package/src/libs/crud-pro/models/SqlCfgModel.ts +2 -2
- package/src/libs/crud-pro/models/Transaction.ts +8 -9
- package/src/libs/crud-pro/models/TransactionPostgres.ts +1 -1
- package/src/libs/crud-pro/models/TransactionSqlServer.ts +8 -13
- package/src/libs/crud-pro/services/CrudProCachedCfgService.ts +26 -19
- package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +38 -50
- package/src/libs/crud-pro/services/CrudProGenSqlCondition.ts +26 -45
- package/src/libs/crud-pro/services/CrudProGenSqlService.ts +23 -40
- package/src/libs/crud-pro/services/CrudProOriginToExecuteSql.ts +25 -29
- package/src/libs/crud-pro/services/CrudProServiceBase.ts +5 -9
- package/src/libs/crud-pro/services/CrudProTableMetaService.ts +35 -9
- package/src/libs/crud-pro/utils/DatabaseName.ts +35 -15
- package/src/libs/crud-pro/utils/DateTimeUtils.ts +2 -2
- package/src/libs/crud-pro/utils/MixinUtils.ts +1 -1
- package/src/libs/crud-pro/utils/ValidateUtils.ts +1 -3
- package/src/libs/crud-pro/utils/pool/MySQLUtils.ts +1 -1
- package/src/libs/crud-pro/utils/pool/PostgresUtils.ts +3 -3
- package/src/libs/crud-pro/utils/pool/SqlServerUtils.ts +3 -3
- package/src/libs/crud-pro/utils/sqlConvert/convertColumnName.ts +2 -2
- package/src/libs/global-config/global-config.ts +78 -0
- package/src/libs/utils/crypto-utils.ts +2 -4
- package/src/libs/utils/errorToString.ts +61 -0
- package/src/libs/utils/fatcms-request.ts +9 -21
- package/src/libs/utils/ordernum-utils.ts +2 -6
- package/src/libs/utils/parseConfig.ts +7 -15
- package/src/middleware/forbidden.middleware.ts +6 -25
- package/src/middleware/global.middleware.ts +18 -16
- package/src/models/AsyncTaskModel.ts +79 -0
- package/src/models/RedisKeys.ts +13 -0
- package/src/models/SystemTables.ts +1 -4
- package/src/models/bizmodels.ts +1 -2
- package/src/schedule/anonymousContext.ts +79 -0
- package/src/schedule/index.ts +11 -72
- package/src/schedule/runSchedule.ts +83 -0
- package/src/schedule/scheduleNames.ts +21 -0
- package/src/service/AuthService.ts +13 -8
- package/src/service/EnumInfoService.ts +8 -3
- package/src/service/FileCenterService.ts +12 -6
- package/src/service/SysConfigService.ts +10 -6
- package/src/service/UserAccountService.ts +14 -4
- package/src/service/UserSessionService.ts +5 -4
- package/src/service/VisitStatService.ts +57 -70
- package/src/service/WorkbenchService.ts +7 -2
- package/src/service/anyapi/AnyApiService.ts +11 -8
- package/src/service/asyncTask/AsyncTaskRunnerService.ts +249 -0
- package/src/service/asyncTask/AsyncTaskService.ts +21 -0
- package/src/service/base/BaseService.ts +2 -2
- package/src/service/crudstd/CrudStdService.ts +43 -5
- package/src/service/curd/CrudProQuick.ts +137 -0
- package/src/service/curd/CurdMixByAccountService.ts +14 -6
- package/src/service/curd/CurdMixByDictService.ts +8 -2
- package/src/service/curd/CurdMixByLinkToCustomService.ts +101 -50
- package/src/service/curd/CurdMixBySysConfigService.ts +7 -2
- package/src/service/curd/CurdMixByWorkbenchService.ts +6 -2
- package/src/service/curd/CurdMixService.ts +3 -3
- package/src/service/curd/CurdMixUtils.ts +82 -39
- package/src/service/curd/CurdProService.ts +45 -189
- package/src/service/curd/fixCfgModel.ts +139 -0
- package/src/service/proxyapi/ProxyApiLoadService.ts +12 -3
- package/src/views/404_app.html +31 -0
- package/src/views/404_workbench.html +34 -0
- package/src/views/static/favicon.ico +0 -0
- package/tsconfig.json +32 -0
- package/dist/controller/medstatistic/MedAdminController.d.ts +0 -35
- package/dist/controller/medstatistic/MedAdminController.js +0 -205
- package/dist/controller/medstatistic/MedClientController.d.ts +0 -28
- package/dist/controller/medstatistic/MedClientController.js +0 -188
- package/dist/controller/medstatistic/MedMessageService.d.ts +0 -19
- package/dist/controller/medstatistic/MedMessageService.js +0 -95
- package/dist/controller/medstatistic/MedScoreService.d.ts +0 -21
- package/dist/controller/medstatistic/MedScoreService.js +0 -107
- package/dist/controller/medstatistic/constants.d.ts +0 -32
- package/dist/controller/medstatistic/constants.js +0 -43
- package/src/controller/medstatistic/MedAdminController.ts +0 -221
- package/src/controller/medstatistic/MedClientController.ts +0 -188
- package/src/controller/medstatistic/MedMessageService.ts +0 -89
- package/src/controller/medstatistic/MedScoreService.ts +0 -108
- package/src/controller/medstatistic/constants.ts +0 -63
|
@@ -4,6 +4,7 @@ import { ICurdProServiceHub } from '../models/ServiceHub';
|
|
|
4
4
|
declare class CrudProCachedCfgService extends CrudProServiceBase {
|
|
5
5
|
constructor(serviceHub: ICurdProServiceHub);
|
|
6
6
|
getCachedCfgByMethod(method: string, isEnableCache: boolean): Promise<IRequestCfgModel | null>;
|
|
7
|
+
private getCachedCfgByMethodInner;
|
|
7
8
|
private loadMethodInfo;
|
|
8
9
|
private loadMethodInfoList;
|
|
9
10
|
}
|
|
@@ -17,25 +17,35 @@ class CrudProCachedCfgService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
17
17
|
super(serviceHub);
|
|
18
18
|
}
|
|
19
19
|
async getCachedCfgByMethod(method, isEnableCache) {
|
|
20
|
+
const methodInfo = await this.getCachedCfgByMethodInner(method, isEnableCache);
|
|
21
|
+
if (!methodInfo) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return { ...methodInfo };
|
|
25
|
+
}
|
|
26
|
+
async getCachedCfgByMethodInner(method, isEnableCache) {
|
|
20
27
|
// 不使用缓存
|
|
21
28
|
if (!isEnableCache) {
|
|
22
29
|
return await this.loadMethodInfo(method);
|
|
23
30
|
}
|
|
24
31
|
methodCache.setProps({
|
|
25
|
-
keepTime:
|
|
32
|
+
keepTime: 1000 * 60 * 2,
|
|
26
33
|
requestFn: () => this.loadMethodInfoList(),
|
|
27
34
|
getKeyFn: item => item.method,
|
|
28
35
|
});
|
|
29
|
-
|
|
36
|
+
const methodInfo = await methodCache.getItem(method);
|
|
37
|
+
if (methodInfo) {
|
|
38
|
+
return methodInfo;
|
|
39
|
+
}
|
|
40
|
+
return await this.loadMethodInfo(method);
|
|
30
41
|
}
|
|
31
42
|
async loadMethodInfo(method) {
|
|
32
|
-
const { methodsTableName, sysDatabaseName } = this.getContextCfg();
|
|
33
|
-
const sql = `select *
|
|
34
|
-
from ${methodsTableName}
|
|
35
|
-
where method = ? `; // 全部加载到内存
|
|
43
|
+
const { methodsTableName, sysDatabaseName, sysDatabaseDbType } = this.getContextCfg();
|
|
44
|
+
const sql = `select * from ${methodsTableName} where method = ? `; // 全部加载到内存
|
|
36
45
|
const baseInfo = {
|
|
37
|
-
|
|
38
|
-
|
|
46
|
+
sqlTable: methodsTableName,
|
|
47
|
+
sqlDatabase: sysDatabaseName,
|
|
48
|
+
sqlDbType: sysDatabaseDbType,
|
|
39
49
|
};
|
|
40
50
|
const [rows] = await this.executeUnsafeQuery(baseInfo, sql, [method]);
|
|
41
51
|
const rows2 = rows;
|
|
@@ -45,11 +55,12 @@ class CrudProCachedCfgService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
45
55
|
return null;
|
|
46
56
|
}
|
|
47
57
|
async loadMethodInfoList() {
|
|
48
|
-
const { methodsTableName, sysDatabaseName } = this.getContextCfg();
|
|
58
|
+
const { methodsTableName, sysDatabaseName, sysDatabaseDbType } = this.getContextCfg();
|
|
49
59
|
const sql = `select * from ${methodsTableName}`; // 全部加载到内存
|
|
50
60
|
const baseInfo = {
|
|
51
|
-
|
|
52
|
-
|
|
61
|
+
sqlTable: methodsTableName,
|
|
62
|
+
sqlDatabase: sysDatabaseName,
|
|
63
|
+
sqlDbType: sysDatabaseDbType,
|
|
53
64
|
};
|
|
54
65
|
const [rows] = await this.executeUnsafeQuery(baseInfo, sql);
|
|
55
66
|
const rows2 = rows;
|
|
@@ -32,17 +32,18 @@ class CrudProExecuteSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
32
32
|
const executeSqlArgs = this.handleExecuteSqlArgsByResModel(exeCtx, sqlCfgModel.executeSqlArgs || []);
|
|
33
33
|
let sqlRes;
|
|
34
34
|
let queryRes;
|
|
35
|
-
if (sqlCfgModel.
|
|
35
|
+
if (sqlCfgModel.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
36
|
+
// import { PoolClient } from 'pg';
|
|
36
37
|
const pgClient = connection;
|
|
37
38
|
const pgSql = (0, convertPgSql_1.replaceQuestionMarks)(sqlCfgModel.executeSql);
|
|
38
39
|
this.logger.info('executeSqlCfgModel_postgres', pgSql, executeSqlArgs, sqlCfgModel.resPicker);
|
|
39
40
|
queryRes = await pgClient.query({
|
|
40
41
|
text: pgSql,
|
|
41
|
-
values: executeSqlArgs || []
|
|
42
|
+
values: executeSqlArgs || [],
|
|
42
43
|
});
|
|
43
44
|
sqlRes = (0, convertPgType_1.pickAndConvertPgRows)(queryRes);
|
|
44
45
|
}
|
|
45
|
-
else if (sqlCfgModel.
|
|
46
|
+
else if (sqlCfgModel.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
46
47
|
const mssql = (0, convertMsSql_1.replaceQuestionMarksForMssql)(sqlCfgModel.executeSql);
|
|
47
48
|
this.logger.info('executeSqlCfgModel_sqlserver', mssql, executeSqlArgs, sqlCfgModel.resPicker);
|
|
48
49
|
// SQLServer
|
|
@@ -59,7 +60,7 @@ class CrudProExecuteSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
59
60
|
exeCtx.setResModelItem(sqlCfgModel.resName, resObject);
|
|
60
61
|
}
|
|
61
62
|
handleExecuteSqlArgsByResModel(exeCtx, executeSqlArgs) {
|
|
62
|
-
return executeSqlArgs.map(
|
|
63
|
+
return executeSqlArgs.map(arg => {
|
|
63
64
|
if (arg && typeof arg === 'object' && typeof arg.___GENERATE_GET_RES_ATTR___ === 'string') {
|
|
64
65
|
const word = arg.___GENERATE_GET_RES_ATTR___;
|
|
65
66
|
if (word.startsWith(keys_1.KeysOfCustomSQL.SQL_PICK_RES_AS_NUMBER)) {
|
|
@@ -70,7 +71,7 @@ class CrudProExecuteSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
70
71
|
}
|
|
71
72
|
if (word.startsWith(keys_1.KeysOfCustomSQL.SQL_PICK_RES_AS_STRING)) {
|
|
72
73
|
const resName = MixinUtils_1.MixinUtils.removeStringPrefix(word, keys_1.KeysOfCustomSQL.SQL_PICK_RES_AS_STRING);
|
|
73
|
-
return String(exeCtx.getResModelItemLodash(resName) ||
|
|
74
|
+
return String(exeCtx.getResModelItemLodash(resName) || '');
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
return arg;
|
|
@@ -198,16 +199,16 @@ class CrudProExecuteSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
198
199
|
}
|
|
199
200
|
// 增删改res的内容是修改结果:包括: insert\delete\update
|
|
200
201
|
if (keys_1.KeysOfSqlResPicker.UPDATE_RESULT === resPicker) {
|
|
201
|
-
if (sqlCfgModel.
|
|
202
|
+
if (sqlCfgModel.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
202
203
|
return {
|
|
203
204
|
insertId: _.get(queryRes, 'rows[0].id'),
|
|
204
|
-
affectedRows: _.get(queryRes, 'rowCount')
|
|
205
|
+
affectedRows: _.get(queryRes, 'rowCount'),
|
|
205
206
|
};
|
|
206
207
|
}
|
|
207
|
-
if (sqlCfgModel.
|
|
208
|
+
if (sqlCfgModel.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
208
209
|
return {
|
|
209
210
|
insertId: _.get(queryRes, 'recordset[0].id'),
|
|
210
|
-
affectedRows: _.get(queryRes, 'rowsAffected[0]')
|
|
211
|
+
affectedRows: _.get(queryRes, 'rowsAffected[0]'),
|
|
211
212
|
};
|
|
212
213
|
}
|
|
213
214
|
return sqlRes;
|
|
@@ -16,10 +16,8 @@ const createFunc = (sqlCfg) => {
|
|
|
16
16
|
},
|
|
17
17
|
toMatchSqlColumnName: (columnName) => {
|
|
18
18
|
const arr = columnName.split(',');
|
|
19
|
-
return arr
|
|
20
|
-
|
|
21
|
-
.join(',');
|
|
22
|
-
}
|
|
19
|
+
return arr.map(s => (0, convertColumnName_1.toSqlColumnName)(s.trim(), sqlCfg)).join(',');
|
|
20
|
+
},
|
|
23
21
|
};
|
|
24
22
|
};
|
|
25
23
|
class ValueChecker {
|
|
@@ -192,29 +190,29 @@ class CrudProGenSqlCondition {
|
|
|
192
190
|
else if (equalsIgnoreCase(keys_1.KeysOfConditions.$LIKE, compare)) {
|
|
193
191
|
tmpArgList.push(value0);
|
|
194
192
|
tmpSql = `${toSqlColumnName(key)} COLLATE UTF8MB4_GENERAL_CI like concat(?, '%')`; // like前缀匹配
|
|
195
|
-
if (this.sqlCfg.
|
|
196
|
-
tmpSql = `${toSqlColumnName(key)} like concat(
|
|
193
|
+
if (this.sqlCfg.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
194
|
+
tmpSql = `${toSqlColumnName(key)} like concat(?::text, '%')`; // like前缀匹配
|
|
197
195
|
}
|
|
198
196
|
}
|
|
199
197
|
else if (equalsIgnoreCase(keys_1.KeysOfConditions.$NOT_LIKE, compare)) {
|
|
200
198
|
tmpArgList.push(value0);
|
|
201
199
|
tmpSql = `${toSqlColumnName(key)} COLLATE UTF8MB4_GENERAL_CI not like concat(?, '%')`;
|
|
202
|
-
if (this.sqlCfg.
|
|
203
|
-
tmpSql = `${toSqlColumnName(key)} not like concat(
|
|
200
|
+
if (this.sqlCfg.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
201
|
+
tmpSql = `${toSqlColumnName(key)} not like concat(?::text, '%')`;
|
|
204
202
|
}
|
|
205
203
|
}
|
|
206
204
|
else if (equalsIgnoreCase(keys_1.KeysOfConditions.$LIKE_INCLUDE, compare)) {
|
|
207
205
|
tmpArgList.push(value0);
|
|
208
206
|
tmpSql = `${toSqlColumnName(key)} COLLATE UTF8MB4_GENERAL_CI like concat('%', ?, '%')`; // like包含
|
|
209
|
-
if (this.sqlCfg.
|
|
210
|
-
tmpSql = `${toSqlColumnName(key)} like concat('%',
|
|
207
|
+
if (this.sqlCfg.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
208
|
+
tmpSql = `${toSqlColumnName(key)} like concat('%', ?::text, '%')`; // like包含
|
|
211
209
|
}
|
|
212
210
|
}
|
|
213
211
|
else if (equalsIgnoreCase(keys_1.KeysOfConditions.$NOT_LIKE_INCLUDE, compare)) {
|
|
214
212
|
tmpArgList.push(value0);
|
|
215
213
|
tmpSql = `${toSqlColumnName(key)} COLLATE UTF8MB4_GENERAL_CI not like concat('%',?, '%')`; // like不包含
|
|
216
|
-
if (this.sqlCfg.
|
|
217
|
-
tmpSql = `${toSqlColumnName(key)} not like concat('%'
|
|
214
|
+
if (this.sqlCfg.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
215
|
+
tmpSql = `${toSqlColumnName(key)} not like concat('%',?::text, '%')`; // like不包含
|
|
218
216
|
}
|
|
219
217
|
}
|
|
220
218
|
else if (equalsIgnoreCase(keys_1.KeysOfConditions.$MATCH, compare)) {
|
|
@@ -91,10 +91,10 @@ class CrudProGenSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
91
91
|
* @private
|
|
92
92
|
*/
|
|
93
93
|
generateOriginSqlForDelete(cfgModel) {
|
|
94
|
-
if (cfgModel.
|
|
94
|
+
if (cfgModel.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
95
95
|
return 'delete from @@table where @@asWhere:condition ';
|
|
96
96
|
}
|
|
97
|
-
if (cfgModel.
|
|
97
|
+
if (cfgModel.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
98
98
|
return 'delete from @@table where @@asWhere:condition ';
|
|
99
99
|
}
|
|
100
100
|
return 'delete from @@table where @@asWhere:condition limit 100 '; // 删除操作,不能一次性删除太多
|
|
@@ -105,35 +105,26 @@ class CrudProGenSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
105
105
|
* @private
|
|
106
106
|
*/
|
|
107
107
|
generateOriginSqlForDuplicateInsert(cfgModel) {
|
|
108
|
-
if (cfgModel.
|
|
108
|
+
if (cfgModel.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
109
109
|
const uniqueColumn = cfgModel.uniqueColumn; // id
|
|
110
110
|
if (!Array.isArray(uniqueColumn) || uniqueColumn.length === 0) {
|
|
111
111
|
throw new exceptions_1.CommonException(exceptions_1.Exceptions.CFG_ERROR_POSTGRES_UNIQUE_COLUMNS_NULL);
|
|
112
112
|
}
|
|
113
|
-
const unique_column = uniqueColumn
|
|
113
|
+
const unique_column = uniqueColumn
|
|
114
|
+
.map(s => {
|
|
114
115
|
return `"${s}"`;
|
|
115
|
-
})
|
|
116
|
+
})
|
|
117
|
+
.join(',');
|
|
116
118
|
return `insert into @@table ( @@asInsertKeys:data ) values( @@asInsertValues:data ) ON CONFLICT (${unique_column}) DO UPDATE set @@asUpdate:data `; // 关键字的前后,必须有空格
|
|
117
119
|
}
|
|
118
|
-
if (cfgModel.
|
|
120
|
+
if (cfgModel.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
119
121
|
const uniqueColumn = cfgModel.uniqueColumn; // id
|
|
120
122
|
if (uniqueColumn.length !== 1) {
|
|
121
123
|
throw new exceptions_1.CommonException(exceptions_1.Exceptions.CFG_UNIQUE_COLUMN_COUNT_MUST_ONE);
|
|
122
124
|
}
|
|
123
125
|
const uniqueColumnStr = uniqueColumn[0];
|
|
124
|
-
const uniqueColumnVal =
|
|
125
|
-
const sql =
|
|
126
|
-
`IF EXISTS (SELECT 1 FROM @@table WHERE [${uniqueColumnStr}] = ${uniqueColumnVal})` +
|
|
127
|
-
"BEGIN\n" +
|
|
128
|
-
" UPDATE @@table\n" +
|
|
129
|
-
" SET @@asUpdate:data\n" +
|
|
130
|
-
` WHERE [${uniqueColumnStr}] = ${uniqueColumnVal} ;\n` +
|
|
131
|
-
"END\n" +
|
|
132
|
-
"ELSE\n" +
|
|
133
|
-
"BEGIN\n" +
|
|
134
|
-
" INSERT INTO @@table ( @@asInsertKeys:data )\n" +
|
|
135
|
-
" VALUES ( @@asInsertValues:data );\n" +
|
|
136
|
-
"END";
|
|
126
|
+
const uniqueColumnVal = '@@data.' + uniqueColumnStr;
|
|
127
|
+
const sql = '' + `IF EXISTS (SELECT 1 FROM @@table WHERE [${uniqueColumnStr}] = ${uniqueColumnVal})` + 'BEGIN\n' + ' UPDATE @@table\n' + ' SET @@asUpdate:data\n' + ` WHERE [${uniqueColumnStr}] = ${uniqueColumnVal} ;\n` + 'END\n' + 'ELSE\n' + 'BEGIN\n' + ' INSERT INTO @@table ( @@asInsertKeys:data )\n' + ' VALUES ( @@asInsertValues:data );\n' + 'END';
|
|
137
128
|
return sql;
|
|
138
129
|
}
|
|
139
130
|
return 'insert into @@table ( @@asInsertKeys:data ) values( @@asInsertValues:data ) on duplicate key update @@asUpdate:data '; // 关键字的前后,必须有空格
|
|
@@ -144,10 +135,10 @@ class CrudProGenSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
144
135
|
* @private
|
|
145
136
|
*/
|
|
146
137
|
generateOriginSqlForInsert(cfgModel) {
|
|
147
|
-
if (cfgModel.
|
|
138
|
+
if (cfgModel.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
148
139
|
return 'insert into @@table ( @@asInsertKeys:data ) values( @@asInsertValues:data ) RETURNING * ';
|
|
149
140
|
}
|
|
150
|
-
if (cfgModel.
|
|
141
|
+
if (cfgModel.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
151
142
|
return 'insert into @@table ( @@asInsertKeys:data ) OUTPUT INSERTED.* values( @@asInsertValues:data ) ';
|
|
152
143
|
}
|
|
153
144
|
return 'insert into @@table ( @@asInsertKeys:data ) values( @@asInsertValues:data )'; // 关键字的前后,必须有空格
|
|
@@ -156,10 +147,10 @@ class CrudProGenSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
156
147
|
const exeCtx = this.getExecuteContext();
|
|
157
148
|
const reqCfgModel = exeCtx.getCfgModel();
|
|
158
149
|
const sqlCfgList = reqCfgModel.sqlCfgList || [];
|
|
159
|
-
const { sqlTable, sqlSchema, sqlDatabase,
|
|
150
|
+
const { sqlTable, sqlSchema, sqlDatabase, sqlDbType, maxLimit, columns, columnsRelation } = reqCfgModel;
|
|
160
151
|
for (let i = 0; i < sqlCfgList.length; i++) {
|
|
161
152
|
const sqlCfgModel = sqlCfgList[i];
|
|
162
|
-
sqlCfgModel.
|
|
153
|
+
sqlCfgModel.sqlDbType = MixinUtils_1.MixinUtils.selectNotEmpty(sqlCfgModel.sqlDbType, sqlDbType);
|
|
163
154
|
sqlCfgModel.sqlDatabase = MixinUtils_1.MixinUtils.selectNotEmpty(sqlCfgModel.sqlDatabase, sqlDatabase);
|
|
164
155
|
sqlCfgModel.sqlSchema = MixinUtils_1.MixinUtils.selectNotEmpty(sqlCfgModel.sqlSchema, sqlSchema);
|
|
165
156
|
sqlCfgModel.sqlTable = MixinUtils_1.MixinUtils.selectNotEmpty(sqlCfgModel.sqlTable, sqlTable);
|
|
@@ -100,8 +100,7 @@ class CrudProOriginToExecuteSql extends CrudProServiceBase_1.CrudProServiceBase
|
|
|
100
100
|
else if (word === keys_1.KeysOfCustomSQL.SQL_ORDER_BYS) {
|
|
101
101
|
return this.generateOrderBys(reqModel, sqlCfg);
|
|
102
102
|
}
|
|
103
|
-
else if ((word.startsWith(keys_1.KeysOfCustomSQL.SQL_GET_DATA_ATTR_START) ||
|
|
104
|
-
word.startsWith(keys_1.KeysOfCustomSQL.SQL_GET_CONDITION_ATTR_START)) && word.indexOf('.') > 0) {
|
|
103
|
+
else if ((word.startsWith(keys_1.KeysOfCustomSQL.SQL_GET_DATA_ATTR_START) || word.startsWith(keys_1.KeysOfCustomSQL.SQL_GET_CONDITION_ATTR_START)) && word.indexOf('.') > 0) {
|
|
105
104
|
return this.generateGetAttr(reqModel, word); //// data.xxx, condition.xxx
|
|
106
105
|
}
|
|
107
106
|
else if (word.startsWith(keys_1.KeysOfCustomSQL.SQL_PICK_RES_AS_NUMBER) || word.startsWith(keys_1.KeysOfCustomSQL.SQL_PICK_RES_AS_STRING)) {
|
|
@@ -198,10 +197,10 @@ class CrudProOriginToExecuteSql extends CrudProServiceBase_1.CrudProServiceBase
|
|
|
198
197
|
const maxLimit = ModelUtils_1.ModelUtils.getMaxLimit(sqlCfg, requestCfg);
|
|
199
198
|
const reqLimit = req.limit;
|
|
200
199
|
const limit = Math.min(maxLimit, reqLimit);
|
|
201
|
-
if (sqlCfg.
|
|
200
|
+
if (sqlCfg.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
202
201
|
return new SqlSegArg_1.SqlSegArg(' LIMIT ? OFFSET ? ', [limit, req.offset]);
|
|
203
202
|
}
|
|
204
|
-
if (sqlCfg.
|
|
203
|
+
if (sqlCfg.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
205
204
|
return new SqlSegArg_1.SqlSegArg(' OFFSET ? ROWS FETCH NEXT ? ROWS ONLY ', [req.offset, limit]);
|
|
206
205
|
}
|
|
207
206
|
return new SqlSegArg_1.SqlSegArg(' limit ?,? ', [req.offset, limit]);
|
|
@@ -219,9 +218,11 @@ class CrudProOriginToExecuteSql extends CrudProServiceBase_1.CrudProServiceBase
|
|
|
219
218
|
return new SqlSegArg_1.SqlSegArg(sql);
|
|
220
219
|
}
|
|
221
220
|
generatePickResAs(req, world) {
|
|
222
|
-
return new SqlSegArg_1.SqlSegArg(' ? ', [
|
|
221
|
+
return new SqlSegArg_1.SqlSegArg(' ? ', [
|
|
222
|
+
{
|
|
223
223
|
___GENERATE_GET_RES_ATTR___: world,
|
|
224
|
-
}
|
|
224
|
+
},
|
|
225
|
+
]);
|
|
225
226
|
}
|
|
226
227
|
generateGetAttr(req, word) {
|
|
227
228
|
const attrName = MixinUtils_1.MixinUtils.removeStringPrefix(word, '@@');
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { ICurdProServiceHub } from '../models/ServiceHub';
|
|
2
|
-
import { ICrudProCfg, ILogger, IPoolConnectionClient } from '../interfaces';
|
|
2
|
+
import { ICrudProCfg, IExecuteUnsafeQueryCtx, ILogger, IPoolConnectionClient } from '../interfaces';
|
|
3
3
|
import { SqlCfgModel } from '../models/SqlCfgModel';
|
|
4
4
|
import { ExecuteContext } from '../models/ExecuteContext';
|
|
5
5
|
import { IExecuteContextFunc } from '../models/ExecuteContextFunc';
|
|
6
|
-
interface ExecuteUnsafeQueryCtx {
|
|
7
|
-
tableName: string;
|
|
8
|
-
dbName: string;
|
|
9
|
-
}
|
|
10
6
|
declare class CrudProServiceBase {
|
|
11
7
|
protected serviceHub: ICurdProServiceHub;
|
|
12
8
|
constructor(serviceHub: ICurdProServiceHub);
|
|
@@ -21,7 +17,7 @@ declare class CrudProServiceBase {
|
|
|
21
17
|
* @param values
|
|
22
18
|
* @protected
|
|
23
19
|
*/
|
|
24
|
-
protected executeUnsafeQuery(obj:
|
|
20
|
+
protected executeUnsafeQuery(obj: IExecuteUnsafeQueryCtx, sql: string, values?: any): Promise<any[]>;
|
|
25
21
|
protected getContextCfg(): ICrudProCfg;
|
|
26
22
|
protected getExecuteFunction(funcName: string): any;
|
|
27
23
|
}
|
|
@@ -45,8 +45,9 @@ class CrudProServiceBase {
|
|
|
45
45
|
*/
|
|
46
46
|
async executeUnsafeQuery(obj, sql, values) {
|
|
47
47
|
const sqlCfgModel = {
|
|
48
|
-
sqlTable: obj.
|
|
49
|
-
sqlDatabase: obj.
|
|
48
|
+
sqlTable: obj.sqlTable,
|
|
49
|
+
sqlDatabase: obj.sqlDatabase,
|
|
50
|
+
sqlDbType: obj.sqlDbType,
|
|
50
51
|
columns: [],
|
|
51
52
|
columnsRelation: [],
|
|
52
53
|
maxLimit: defaultConfigs_1.DEFAULT_MAX_LIMIT,
|
|
@@ -4,5 +4,6 @@ import { ITableMeta } from '../interfaces';
|
|
|
4
4
|
declare class CrudProTableMetaService extends CrudProServiceBase {
|
|
5
5
|
getTableMeta(sqlCfgModel: SqlCfgModel): Promise<ITableMeta>;
|
|
6
6
|
private loadTableMeta;
|
|
7
|
+
private loadTableColumnInfo;
|
|
7
8
|
}
|
|
8
9
|
export { CrudProTableMetaService };
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CrudProTableMetaService = void 0;
|
|
4
4
|
const CrudProServiceBase_1 = require("./CrudProServiceBase");
|
|
5
|
+
const keys_1 = require("../models/keys");
|
|
6
|
+
const convertPgType_1 = require("../utils/sqlConvert/convertPgType");
|
|
5
7
|
class CrudProTableMetaCache {
|
|
6
8
|
constructor() {
|
|
7
9
|
this.cacheMap = {};
|
|
@@ -39,15 +41,37 @@ class CrudProTableMetaService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
39
41
|
tableColumns: [],
|
|
40
42
|
};
|
|
41
43
|
const baseInfo = {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
sqlTable: sqlCfgModel.sqlTable,
|
|
45
|
+
sqlDatabase: sqlCfgModel.sqlDatabase,
|
|
46
|
+
sqlDbType: sqlCfgModel.sqlDbType,
|
|
44
47
|
};
|
|
45
|
-
|
|
46
|
-
const tableDescribe2 = JSON.parse(JSON.stringify(tableDescribe));
|
|
47
|
-
obj.tableColumns = tableDescribe2.map(fieldObj => {
|
|
48
|
-
return fieldObj['Field'];
|
|
49
|
-
});
|
|
48
|
+
obj.tableColumns = await this.loadTableColumnInfo(baseInfo);
|
|
50
49
|
return obj;
|
|
51
50
|
}
|
|
51
|
+
async loadTableColumnInfo(baseInfo) {
|
|
52
|
+
if (baseInfo.sqlDbType === keys_1.SqlDbType.mysql) {
|
|
53
|
+
const [tableDescribe] = await this.executeUnsafeQuery(baseInfo, 'describe ' + baseInfo.sqlTable);
|
|
54
|
+
const tableDescribe2 = JSON.parse(JSON.stringify(tableDescribe));
|
|
55
|
+
return tableDescribe2.map(fieldObj => {
|
|
56
|
+
return fieldObj['Field'];
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
else if (baseInfo.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
60
|
+
const schemaname = 'public';
|
|
61
|
+
const columnArraySql = `
|
|
62
|
+
SELECT
|
|
63
|
+
*
|
|
64
|
+
FROM information_schema.columns
|
|
65
|
+
WHERE table_schema = '${schemaname}' and table_name = '${baseInfo.sqlTable}'
|
|
66
|
+
ORDER BY ordinal_position;
|
|
67
|
+
`.trim();
|
|
68
|
+
const queryRes = await this.executeUnsafeQuery(baseInfo, columnArraySql);
|
|
69
|
+
const rows = (0, convertPgType_1.pickAndConvertPgRows)(queryRes);
|
|
70
|
+
return rows.map(fieldObj => {
|
|
71
|
+
return fieldObj['column_name'];
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
throw new Error('暂不支持的数据库类型:' + baseInfo.sqlDbType);
|
|
75
|
+
}
|
|
52
76
|
}
|
|
53
77
|
exports.CrudProTableMetaService = CrudProTableMetaService;
|
|
@@ -2,14 +2,35 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.toDatabaseNameStr = exports.parseDatabaseName = exports.SPLIT_CONST = void 0;
|
|
4
4
|
const keys_1 = require("../models/keys");
|
|
5
|
-
const SPLIT_CONST =
|
|
5
|
+
const SPLIT_CONST = '_________';
|
|
6
6
|
exports.SPLIT_CONST = SPLIT_CONST;
|
|
7
|
+
const PREFIX_MYSQL = `${keys_1.SqlDbType.mysql}${SPLIT_CONST}`;
|
|
8
|
+
const PREFIX_POSTGRES = `${keys_1.SqlDbType.postgres}${SPLIT_CONST}`;
|
|
9
|
+
const PREFIX_SQLSERVER = `${keys_1.SqlDbType.sqlserver}${SPLIT_CONST}`;
|
|
7
10
|
function parseDatabaseName(databaseName) {
|
|
8
11
|
const dbNameArr = databaseName.split(SPLIT_CONST);
|
|
12
|
+
if (databaseName.startsWith(PREFIX_MYSQL)) {
|
|
13
|
+
return {
|
|
14
|
+
dbType: keys_1.SqlDbType.mysql,
|
|
15
|
+
dbName: dbNameArr[1],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (databaseName.startsWith(PREFIX_POSTGRES)) {
|
|
19
|
+
return {
|
|
20
|
+
dbType: keys_1.SqlDbType.postgres,
|
|
21
|
+
dbName: dbNameArr[1],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (databaseName.startsWith(PREFIX_SQLSERVER)) {
|
|
25
|
+
return {
|
|
26
|
+
dbType: keys_1.SqlDbType.sqlserver,
|
|
27
|
+
dbName: dbNameArr[1],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
9
30
|
if (dbNameArr.length === 1) {
|
|
10
31
|
return {
|
|
11
32
|
dbType: keys_1.SqlDbType.mysql,
|
|
12
|
-
dbName: dbNameArr[0]
|
|
33
|
+
dbName: dbNameArr[0],
|
|
13
34
|
};
|
|
14
35
|
}
|
|
15
36
|
if (dbNameArr.length > 1) {
|
|
@@ -17,7 +38,7 @@ function parseDatabaseName(databaseName) {
|
|
|
17
38
|
const dbType = dbType0;
|
|
18
39
|
return {
|
|
19
40
|
dbType,
|
|
20
|
-
dbName
|
|
41
|
+
dbName,
|
|
21
42
|
};
|
|
22
43
|
}
|
|
23
44
|
return null;
|
|
@@ -43,7 +43,7 @@ const MixinUtils = {
|
|
|
43
43
|
return !str1 && !str2;
|
|
44
44
|
},
|
|
45
45
|
startsWith(str1, str2) {
|
|
46
|
-
if (typeof str1 ===
|
|
46
|
+
if (typeof str1 === 'string' && typeof str2 === 'string') {
|
|
47
47
|
return str1.startsWith(str2);
|
|
48
48
|
}
|
|
49
49
|
return false;
|
|
@@ -147,7 +147,7 @@ function validateByCfgString(validateCfg, itemValue, errPath) {
|
|
|
147
147
|
return;
|
|
148
148
|
}
|
|
149
149
|
// 必填
|
|
150
|
-
if (
|
|
150
|
+
if ('required' === validateCfg) {
|
|
151
151
|
if (isEmpty(itemValue)) {
|
|
152
152
|
throw new exceptions_1.CommonException(exceptions_1.Exceptions.VALIDATE_ERR, "'参数校验错误,字段 " + errPath + ' 不满足校验配置:' + validateCfg);
|
|
153
153
|
}
|
|
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.toSqlColumnNamesJoin = exports.toSqlColumnName = void 0;
|
|
4
4
|
const keys_1 = require("../../models/keys");
|
|
5
5
|
function toSqlColumnName(columnName, sqlCfgModel) {
|
|
6
|
-
if (sqlCfgModel.
|
|
6
|
+
if (sqlCfgModel.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
7
7
|
return '"' + columnName + '"';
|
|
8
8
|
}
|
|
9
|
-
if (sqlCfgModel.
|
|
9
|
+
if (sqlCfgModel.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
10
10
|
return '[' + columnName + ']';
|
|
11
11
|
}
|
|
12
12
|
return '`' + columnName + '`';
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { SqlDbType } from '../crud-pro/models/keys';
|
|
2
|
+
interface IGlobalStaticConfig {
|
|
3
|
+
/**
|
|
4
|
+
* CrudStd: 业务系统自定义的修改cfgModel
|
|
5
|
+
* @param reqJson
|
|
6
|
+
* @param cfgModel
|
|
7
|
+
* @param appInfo
|
|
8
|
+
* @param ctx
|
|
9
|
+
*/
|
|
10
|
+
bizUpdateCfgModelForCrudStd(reqJson: any, cfgModel: any, appInfo: any, ctx: any): Promise<any>;
|
|
11
|
+
/**
|
|
12
|
+
* CrudMtd: 业务系统自定义的修改cfgModel
|
|
13
|
+
* @param reqJson
|
|
14
|
+
* @param cfgModel
|
|
15
|
+
* @param methodInfo
|
|
16
|
+
* @param ctx
|
|
17
|
+
*/
|
|
18
|
+
bizUpdateCfgModelForCrudMtd(reqJson: any, cfgModel: any, methodInfo: any, ctx: any): Promise<any>;
|
|
19
|
+
/**
|
|
20
|
+
* CrudPro: 业务系统自定义的修改cfgModel。这是最底层的!!全局的!!全局的!!全局的!!!
|
|
21
|
+
* @param reqJson
|
|
22
|
+
* @param cfgModel
|
|
23
|
+
*/
|
|
24
|
+
bizUpdateCfgModelForCrudPro(reqJson: any, cfgModel: any): Promise<any>;
|
|
25
|
+
/**
|
|
26
|
+
* 生成用户的账号ID,业务系统可以生成类似工号的ID
|
|
27
|
+
* @param userSubmitData
|
|
28
|
+
*/
|
|
29
|
+
generateUserAccountId(userSubmitData: any): Promise<string>;
|
|
30
|
+
/**
|
|
31
|
+
* 将业务系统表中的userId映射为fatcms的UserAccountId
|
|
32
|
+
* @param bizTableUserId 业余系统表中的UserId
|
|
33
|
+
*/
|
|
34
|
+
toFatcmsUserAccountId(bizTableUserId: any): string;
|
|
35
|
+
SystemDbName: string;
|
|
36
|
+
SystemDbType: SqlDbType;
|
|
37
|
+
}
|
|
38
|
+
declare class GlobalStaticConfig {
|
|
39
|
+
private configObject;
|
|
40
|
+
constructor();
|
|
41
|
+
getConfig(): IGlobalStaticConfig;
|
|
42
|
+
setConfig(configObject: any): void;
|
|
43
|
+
}
|
|
44
|
+
declare const GLOBAL_STATIC_CONFIG: GlobalStaticConfig;
|
|
45
|
+
export { GLOBAL_STATIC_CONFIG };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GLOBAL_STATIC_CONFIG = void 0;
|
|
4
|
+
const keys_1 = require("../crud-pro/models/keys");
|
|
5
|
+
const noop = () => {
|
|
6
|
+
return Promise.resolve();
|
|
7
|
+
};
|
|
8
|
+
class GlobalStaticConfig {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.configObject = {
|
|
11
|
+
bizUpdateCfgModelForCrudStd: noop,
|
|
12
|
+
bizUpdateCfgModelForCrudMtd: noop,
|
|
13
|
+
bizUpdateCfgModelForCrudPro: noop,
|
|
14
|
+
generateUserAccountId: null,
|
|
15
|
+
toFatcmsUserAccountId: (bizTableUserId) => {
|
|
16
|
+
return bizTableUserId;
|
|
17
|
+
},
|
|
18
|
+
SystemDbName: 'fatcms',
|
|
19
|
+
SystemDbType: keys_1.SqlDbType.mysql,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
getConfig() {
|
|
23
|
+
return this.configObject;
|
|
24
|
+
}
|
|
25
|
+
setConfig(configObject) {
|
|
26
|
+
if (!configObject || typeof configObject !== 'object') {
|
|
27
|
+
throw new Error('参数configObject不能为空');
|
|
28
|
+
}
|
|
29
|
+
Object.assign(this.configObject, configObject);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const GLOBAL_STATIC_CONFIG = new GlobalStaticConfig();
|
|
33
|
+
exports.GLOBAL_STATIC_CONFIG = GLOBAL_STATIC_CONFIG;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.errorToString = void 0;
|
|
4
|
+
function errorToString(error) {
|
|
5
|
+
var _a;
|
|
6
|
+
// 处理非错误对象的情况
|
|
7
|
+
if (typeof error === 'undefined') {
|
|
8
|
+
return 'Error: undefined was thrown';
|
|
9
|
+
}
|
|
10
|
+
if (error === null) {
|
|
11
|
+
return 'Error: null was thrown';
|
|
12
|
+
}
|
|
13
|
+
// 处理原始值类型
|
|
14
|
+
const primitiveTypes = ['string', 'number', 'boolean', 'symbol'];
|
|
15
|
+
if (primitiveTypes.includes(typeof error)) {
|
|
16
|
+
return `Error: A primitive value was thrown\nValue: ${String(error)}`;
|
|
17
|
+
}
|
|
18
|
+
// 处理 Error 对象
|
|
19
|
+
if (error instanceof Error) {
|
|
20
|
+
const errorDetails = [];
|
|
21
|
+
errorDetails.push(`Error: ${error.name || 'Error'}`);
|
|
22
|
+
errorDetails.push(`Message: ${error.message || 'No error message'}`);
|
|
23
|
+
if (error.stack) {
|
|
24
|
+
errorDetails.push('Stack Trace:');
|
|
25
|
+
errorDetails.push(error.stack);
|
|
26
|
+
}
|
|
27
|
+
const extraProperties = ['code', 'fileName', 'lineNumber', 'columnNumber'];
|
|
28
|
+
extraProperties.forEach(prop => {
|
|
29
|
+
if (error[prop] !== undefined) {
|
|
30
|
+
errorDetails.push(`${prop}: ${error[prop]}`);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
const customProps = Object.keys(error).filter(key => !['name', 'message', 'stack', ...extraProperties].includes(key));
|
|
34
|
+
if (customProps.length > 0) {
|
|
35
|
+
errorDetails.push('Custom Properties:');
|
|
36
|
+
customProps.forEach(prop => {
|
|
37
|
+
try {
|
|
38
|
+
const value = JSON.stringify(error[prop], null, 2) || String(error[prop]);
|
|
39
|
+
errorDetails.push(` ${prop}: ${value}`);
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
errorDetails.push(` ${prop}: [Object cannot be serialized]`);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return errorDetails.join('\n');
|
|
47
|
+
}
|
|
48
|
+
// 处理普通对象
|
|
49
|
+
try {
|
|
50
|
+
const objectDetails = JSON.stringify(error, null, 2);
|
|
51
|
+
return `Error: A plain object was thrown\nObject: ${objectDetails}`;
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
return `Error: An object was thrown but could not be serialized\nType: ${((_a = error.constructor) === null || _a === void 0 ? void 0 : _a.name) || 'Unknown'}`;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.errorToString = errorToString;
|