midway-fatcms 0.0.1-beta.2 → 0.0.1-beta.22
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 +14 -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/CrudStdGatewayController.d.ts +5 -5
- 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/AnyApiMangeApi.js +2 -2
- package/dist/controller/manage/AppLogMangeApi.js +2 -2
- package/dist/controller/manage/AppMangeApi.js +2 -2
- package/dist/controller/manage/AppPageMangeApi.js +2 -2
- package/dist/controller/manage/AppSchemaHistoryApi.js +2 -2
- package/dist/controller/manage/CrudMethodsMangeApi.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/DataDictManageApi.js +1 -1
- package/dist/controller/manage/DeployManageApi.d.ts +1 -1
- package/dist/controller/manage/DeployManageApi.js +38 -34
- package/dist/controller/manage/DocLibManageApi.js +2 -2
- package/dist/controller/manage/DocManageApi.js +2 -2
- package/dist/controller/manage/FileManageApi.js +1 -1
- package/dist/controller/manage/LowCodeTplManageApi.js +2 -2
- package/dist/controller/manage/MenuManageApi.js +2 -2
- package/dist/controller/manage/ProxyApiMangeApi.js +2 -2
- 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 +8 -6
- 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 +7 -2
- package/dist/controller/manage/WorkbenchMangeApi.js +3 -3
- 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 +27 -15
- package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +13 -17
- 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 +32 -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/crud-pro/utils/sqlConvert/convertMix.d.ts +3 -0
- package/dist/libs/crud-pro/utils/sqlConvert/convertMix.js +22 -0
- 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 +232 -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 +2 -1
- package/dist/service/crudstd/CrudStdService.js +48 -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 +26 -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 +11 -11
- package/src/controller/manage/AppLogMangeApi.ts +5 -5
- package/src/controller/manage/AppMangeApi.ts +7 -7
- package/src/controller/manage/AppPageMangeApi.ts +5 -5
- package/src/controller/manage/AppSchemaHistoryApi.ts +3 -3
- package/src/controller/manage/CrudMethodsMangeApi.ts +5 -5
- package/src/controller/manage/CrudStandardDesignApi.ts +106 -113
- package/src/controller/manage/DataDictManageApi.ts +5 -5
- package/src/controller/manage/DeployManageApi.ts +85 -89
- package/src/controller/manage/DocLibManageApi.ts +5 -5
- package/src/controller/manage/DocManageApi.ts +10 -10
- package/src/controller/manage/FileManageApi.ts +1 -1
- package/src/controller/manage/LowCodeTplManageApi.ts +2 -2
- package/src/controller/manage/MenuManageApi.ts +10 -15
- package/src/controller/manage/ProxyApiMangeApi.ts +2 -2
- package/src/controller/manage/SuperAdminManageApi.ts +14 -13
- package/src/controller/manage/SysConfigMangeApi.ts +11 -11
- package/src/controller/manage/SystemInfoManageApi.ts +11 -6
- package/src/controller/manage/UserAccountManageApi.ts +10 -4
- package/src/controller/manage/WorkbenchMangeApi.ts +8 -8
- 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 +32 -23
- package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +38 -54
- 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 +36 -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/crud-pro/utils/sqlConvert/convertMix.ts +26 -0
- 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 +255 -0
- package/src/service/asyncTask/AsyncTaskService.ts +21 -0
- package/src/service/base/BaseService.ts +2 -2
- package/src/service/crudstd/CrudStdService.ts +60 -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
|
@@ -20,6 +20,7 @@ const exceptions_1 = require("../libs/crud-pro/exceptions");
|
|
|
20
20
|
const functions_1 = require("../libs/utils/functions");
|
|
21
21
|
const fatcms_request_1 = require("../libs/utils/fatcms-request");
|
|
22
22
|
const MixinUtils_1 = require("../libs/crud-pro/utils/MixinUtils");
|
|
23
|
+
const global_config_1 = require("../libs/global-config/global-config");
|
|
23
24
|
//
|
|
24
25
|
// const lruCache = new LRUCache<string, any>({
|
|
25
26
|
// max: 500,
|
|
@@ -38,14 +39,15 @@ let WorkbenchService = class WorkbenchService extends BaseService_1.BaseService
|
|
|
38
39
|
await this.getAllWorkbenchInfoMap(true);
|
|
39
40
|
}
|
|
40
41
|
async getAllWorkbenchInfoList(isForceRefresh) {
|
|
42
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
41
43
|
let listData = lruCache.get(CACHE_KEY_WORKBENCH_LIST);
|
|
42
44
|
if (!listData || isForceRefresh === true) {
|
|
43
45
|
const reqJson = { condition: {}, pageSize: 1000, limit: 1000 };
|
|
44
46
|
const res = await this.curdProService.executeCrudByCfg(reqJson, {
|
|
45
47
|
sqlTable: SystemTables_1.SystemTables.sys_workbench,
|
|
46
48
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY,
|
|
47
|
-
sqlDatabase:
|
|
48
|
-
|
|
49
|
+
sqlDatabase: SystemDbName,
|
|
50
|
+
sqlDbType: SystemDbType,
|
|
49
51
|
});
|
|
50
52
|
listData = res.getResRows();
|
|
51
53
|
lruCache.set(CACHE_KEY_WORKBENCH_LIST, listData);
|
|
@@ -23,6 +23,7 @@ const MixinUtils_1 = require("../../libs/crud-pro/utils/MixinUtils");
|
|
|
23
23
|
const WorkbenchService_1 = require("../WorkbenchService");
|
|
24
24
|
const ValidateUtils_1 = require("../../libs/crud-pro/utils/ValidateUtils");
|
|
25
25
|
const ApiBaseService_1 = require("../base/ApiBaseService");
|
|
26
|
+
const global_config_1 = require("../../libs/global-config/global-config");
|
|
26
27
|
const lruCache = new lru_cache_1.LRUCache({
|
|
27
28
|
max: 500,
|
|
28
29
|
ttl: 1000 * 60,
|
|
@@ -65,12 +66,13 @@ let AnyApiService = class AnyApiService extends ApiBaseService_1.ApiBaseService
|
|
|
65
66
|
return anyApi;
|
|
66
67
|
}
|
|
67
68
|
async _getAnyApiMethod(methodCode) {
|
|
69
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
68
70
|
const res = await this.curdMixService.executeCrudByCfg({ condition: { method: methodCode } }, {
|
|
69
71
|
sqlTable: SystemTables_1.SystemTables.sys_anyapi,
|
|
70
72
|
method: `get_sys_anyapi_${methodCode}`,
|
|
71
73
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_ONE,
|
|
72
|
-
sqlDatabase:
|
|
73
|
-
|
|
74
|
+
sqlDatabase: SystemDbName,
|
|
75
|
+
sqlDbType: SystemDbType,
|
|
74
76
|
updateCfg: {},
|
|
75
77
|
});
|
|
76
78
|
const obj = res.getOneObj();
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Context } from '@midwayjs/koa';
|
|
2
|
+
import { BaseService } from '../../service/base/BaseService';
|
|
3
|
+
import { IScheduleService } from '../../interface';
|
|
4
|
+
import { ISysAsyncTaskHandler, SysAsyncTaskEntity } from '../../models/AsyncTaskModel';
|
|
5
|
+
declare class AsyncTaskRunner {
|
|
6
|
+
isBusy: boolean;
|
|
7
|
+
taskHandlerMap: Map<string, ISysAsyncTaskHandler>;
|
|
8
|
+
executeTaskList(taskList: SysAsyncTaskEntity[]): Promise<void>;
|
|
9
|
+
private executeTask;
|
|
10
|
+
/**
|
|
11
|
+
* 更新任务状态或任务进度
|
|
12
|
+
* @param taskElement
|
|
13
|
+
* @param updatePartials
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
private updateTaskStatus;
|
|
17
|
+
/**
|
|
18
|
+
* 获取当前进程可以处理的任务类型。
|
|
19
|
+
*/
|
|
20
|
+
getHandlerTaskTypeList(): string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 业务可以扩展
|
|
24
|
+
*/
|
|
25
|
+
export declare const ASYNC_TASK_RUNNER: AsyncTaskRunner;
|
|
26
|
+
export declare class AsyncTaskRunnerService extends BaseService implements IScheduleService {
|
|
27
|
+
protected ctx: Context;
|
|
28
|
+
private curdProService;
|
|
29
|
+
fetchPendingTasks(): Promise<void>;
|
|
30
|
+
runBySchedule(): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* 是否存在新任务
|
|
33
|
+
* @private
|
|
34
|
+
*/
|
|
35
|
+
private isExistNewTask;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AsyncTaskRunnerService = exports.ASYNC_TASK_RUNNER = void 0;
|
|
13
|
+
const core_1 = require("@midwayjs/core");
|
|
14
|
+
const BaseService_1 = require("../../service/base/BaseService");
|
|
15
|
+
const CurdProService_1 = require("../../service/curd/CurdProService");
|
|
16
|
+
const AsyncTaskModel_1 = require("../../models/AsyncTaskModel");
|
|
17
|
+
const global_config_1 = require("../../libs/global-config/global-config");
|
|
18
|
+
const SystemTables_1 = require("../../models/SystemTables");
|
|
19
|
+
const keys_1 = require("../../libs/crud-pro/models/keys");
|
|
20
|
+
const errorToString_1 = require("../../libs/utils/errorToString");
|
|
21
|
+
const schedule_1 = require("../../schedule");
|
|
22
|
+
const RedisKeys_1 = require("../../models/RedisKeys");
|
|
23
|
+
const END_STATUS_LIST = [
|
|
24
|
+
AsyncTaskModel_1.SysAsyncTaskStatus.PART_SUCCEEDED,
|
|
25
|
+
AsyncTaskModel_1.SysAsyncTaskStatus.SUCCEEDED,
|
|
26
|
+
AsyncTaskModel_1.SysAsyncTaskStatus.FAILED,
|
|
27
|
+
AsyncTaskModel_1.SysAsyncTaskStatus.CANCELLED,
|
|
28
|
+
AsyncTaskModel_1.SysAsyncTaskStatus.PAUSED,
|
|
29
|
+
];
|
|
30
|
+
class AsyncTaskRunner {
|
|
31
|
+
constructor() {
|
|
32
|
+
this.isBusy = false;
|
|
33
|
+
this.taskHandlerMap = new Map();
|
|
34
|
+
}
|
|
35
|
+
async executeTaskList(taskList) {
|
|
36
|
+
if (!taskList || taskList.length === 0) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this.isBusy = true;
|
|
40
|
+
for (let i = 0; i < taskList.length; i++) {
|
|
41
|
+
const taskElement = taskList[i];
|
|
42
|
+
taskElement.task_status = AsyncTaskModel_1.SysAsyncTaskStatus.RUNNING;
|
|
43
|
+
try {
|
|
44
|
+
// 任务状态的设置在自定义的执行器里面。
|
|
45
|
+
await this.executeTask(taskElement);
|
|
46
|
+
// 当前不是终止状态,并且没有异常就设置成成功。
|
|
47
|
+
if (!END_STATUS_LIST.includes(taskElement.task_status)) {
|
|
48
|
+
taskElement.task_status = AsyncTaskModel_1.SysAsyncTaskStatus.SUCCEEDED;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
taskElement.task_status = AsyncTaskModel_1.SysAsyncTaskStatus.FAILED;
|
|
53
|
+
taskElement.error_message = (0, errorToString_1.errorToString)(error);
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
await this.updateTaskStatus(taskElement, {
|
|
57
|
+
task_status: taskElement.task_status,
|
|
58
|
+
error_message: taskElement.error_message,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
schedule_1.ANONYMOUS_CONTEXT.getApp().getCoreLogger().error('executeTaskList error', error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
this.isBusy = false;
|
|
66
|
+
}
|
|
67
|
+
async executeTask(taskElement) {
|
|
68
|
+
const taskType = taskElement.task_type;
|
|
69
|
+
const taskHandler = this.taskHandlerMap.get(taskType);
|
|
70
|
+
if (!taskHandler) {
|
|
71
|
+
throw new Error('TaskHandler not found , taskType = ' + taskType);
|
|
72
|
+
}
|
|
73
|
+
const updateTaskStatus = (updatePartials) => {
|
|
74
|
+
return this.updateTaskStatus(taskElement, updatePartials);
|
|
75
|
+
};
|
|
76
|
+
await taskHandler.execute({ task: taskElement, updateTaskStatus });
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 更新任务状态或任务进度
|
|
80
|
+
* @param taskElement
|
|
81
|
+
* @param updatePartials
|
|
82
|
+
* @private
|
|
83
|
+
*/
|
|
84
|
+
async updateTaskStatus(taskElement, updatePartials) {
|
|
85
|
+
if (!updatePartials) {
|
|
86
|
+
throw new Error('updatePartials not found');
|
|
87
|
+
}
|
|
88
|
+
return await schedule_1.ANONYMOUS_CONTEXT.runServiceAtAnonymousContext(async (ctx) => {
|
|
89
|
+
const curdProService = await ctx.requestContext.getAsync('curdProService');
|
|
90
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
91
|
+
const res = await curdProService.executeCrudByCfg({
|
|
92
|
+
condition: {
|
|
93
|
+
id: taskElement.id,
|
|
94
|
+
},
|
|
95
|
+
data: updatePartials,
|
|
96
|
+
}, {
|
|
97
|
+
sqlTable: SystemTables_1.SystemTables.sys_async_tasks,
|
|
98
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_UPDATE,
|
|
99
|
+
sqlDatabase: SystemDbName,
|
|
100
|
+
sqlDbType: SystemDbType,
|
|
101
|
+
});
|
|
102
|
+
return res.getResModel().affected;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 获取当前进程可以处理的任务类型。
|
|
107
|
+
*/
|
|
108
|
+
getHandlerTaskTypeList() {
|
|
109
|
+
const keys = this.taskHandlerMap.keys();
|
|
110
|
+
return [...keys];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 业务可以扩展
|
|
115
|
+
*/
|
|
116
|
+
exports.ASYNC_TASK_RUNNER = new AsyncTaskRunner();
|
|
117
|
+
/**
|
|
118
|
+
* Redis锁
|
|
119
|
+
*/
|
|
120
|
+
const ASYNC_TASK_LOCK = RedisKeys_1.RedisKeys.ASYNC_TASK_LOCK;
|
|
121
|
+
const ASYNC_TASK_RUNTIME_OBJ = {
|
|
122
|
+
LAST_CHECK_ASYNC_TASK_UPDATE_TIME: 0,
|
|
123
|
+
};
|
|
124
|
+
let AsyncTaskRunnerService = class AsyncTaskRunnerService extends BaseService_1.BaseService {
|
|
125
|
+
async fetchPendingTasks() {
|
|
126
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
127
|
+
// 只获取本进程能够处理的任务类型。
|
|
128
|
+
const taskTypeList = exports.ASYNC_TASK_RUNNER.getHandlerTaskTypeList();
|
|
129
|
+
if (taskTypeList.length === 0) {
|
|
130
|
+
return Promise.resolve();
|
|
131
|
+
}
|
|
132
|
+
// 查询等待处理的任务。
|
|
133
|
+
const queryRes = await this.curdProService.executeCrudByCfg({
|
|
134
|
+
condition: {
|
|
135
|
+
task_status: AsyncTaskModel_1.SysAsyncTaskStatus.PENDING,
|
|
136
|
+
task_type: {
|
|
137
|
+
$in: taskTypeList,
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
orderBy: 'id+',
|
|
141
|
+
limit: 10,
|
|
142
|
+
}, {
|
|
143
|
+
sqlTable: SystemTables_1.SystemTables.sys_async_tasks,
|
|
144
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_PAGE,
|
|
145
|
+
sqlDatabase: SystemDbName,
|
|
146
|
+
sqlDbType: SystemDbType,
|
|
147
|
+
});
|
|
148
|
+
const taskList = queryRes.getResRows();
|
|
149
|
+
if (taskList.length === 0) {
|
|
150
|
+
return Promise.resolve();
|
|
151
|
+
}
|
|
152
|
+
const taskIds = taskList.map(elem => elem.id).filter(Boolean);
|
|
153
|
+
// 将状态更新为处理中。防止其它进程重复处理。
|
|
154
|
+
await this.curdProService.executeCrudByCfg({
|
|
155
|
+
condition: {
|
|
156
|
+
id: {
|
|
157
|
+
$in: taskIds,
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
data: {
|
|
161
|
+
task_status: AsyncTaskModel_1.SysAsyncTaskStatus.RUNNING,
|
|
162
|
+
},
|
|
163
|
+
}, {
|
|
164
|
+
sqlTable: SystemTables_1.SystemTables.sys_async_tasks,
|
|
165
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_UPDATE,
|
|
166
|
+
sqlDatabase: SystemDbName,
|
|
167
|
+
sqlDbType: SystemDbType,
|
|
168
|
+
});
|
|
169
|
+
// 开始执行。
|
|
170
|
+
exports.ASYNC_TASK_RUNNER.executeTaskList(taskList).then(() => {
|
|
171
|
+
console.log('ASYNC_TASK_RUNNER finished taskIds ==> ' + JSON.stringify(taskIds));
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
async runBySchedule() {
|
|
175
|
+
// 1. 当前很忙
|
|
176
|
+
if (exports.ASYNC_TASK_RUNNER.isBusy) {
|
|
177
|
+
return Promise.resolve();
|
|
178
|
+
}
|
|
179
|
+
// 2. 发现了新任务
|
|
180
|
+
const isExistNewTask = await this.isExistNewTask();
|
|
181
|
+
if (!isExistNewTask) {
|
|
182
|
+
return Promise.resolve();
|
|
183
|
+
}
|
|
184
|
+
// 这里的过期时间1分钟即可。fetchPendingTasks函数不可能超过一分钟。
|
|
185
|
+
// 因为这里只是从数据库中获取一批任务,放到自己的任务队列里。还没触发执行。
|
|
186
|
+
const lock = await this.redisService.set(ASYNC_TASK_LOCK, 1, 'EX', 60, 'NX');
|
|
187
|
+
if (lock !== 'OK') {
|
|
188
|
+
return Promise.resolve();
|
|
189
|
+
}
|
|
190
|
+
try {
|
|
191
|
+
await this.fetchPendingTasks();
|
|
192
|
+
}
|
|
193
|
+
catch (e) {
|
|
194
|
+
console.error('fetchPendingTasks error', (0, errorToString_1.errorToString)(e));
|
|
195
|
+
}
|
|
196
|
+
await this.redisService.del(ASYNC_TASK_LOCK);
|
|
197
|
+
return Promise.resolve();
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* 是否存在新任务
|
|
201
|
+
* @private
|
|
202
|
+
*/
|
|
203
|
+
async isExistNewTask() {
|
|
204
|
+
// 刚启动,没有检查过。
|
|
205
|
+
if (!ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME) {
|
|
206
|
+
ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME = Date.now();
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
//Redis没有任何内容
|
|
210
|
+
const updateTime = await this.redisService.get(RedisKeys_1.RedisKeys.ASYNC_TASK_UPDATE_TIME);
|
|
211
|
+
if (!updateTime) {
|
|
212
|
+
ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME = Date.now();
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
const updateTimeNumber = Number.parseInt(updateTime, 10);
|
|
216
|
+
const isExistNewTask = updateTimeNumber > ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME;
|
|
217
|
+
ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME = updateTimeNumber;
|
|
218
|
+
return isExistNewTask;
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
__decorate([
|
|
222
|
+
(0, core_1.Inject)(),
|
|
223
|
+
__metadata("design:type", Object)
|
|
224
|
+
], AsyncTaskRunnerService.prototype, "ctx", void 0);
|
|
225
|
+
__decorate([
|
|
226
|
+
(0, core_1.Inject)(),
|
|
227
|
+
__metadata("design:type", CurdProService_1.CurdProService)
|
|
228
|
+
], AsyncTaskRunnerService.prototype, "curdProService", void 0);
|
|
229
|
+
AsyncTaskRunnerService = __decorate([
|
|
230
|
+
(0, core_1.Provide)()
|
|
231
|
+
], AsyncTaskRunnerService);
|
|
232
|
+
exports.AsyncTaskRunnerService = AsyncTaskRunnerService;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AsyncTaskService = void 0;
|
|
13
|
+
const core_1 = require("@midwayjs/core");
|
|
14
|
+
const BaseService_1 = require("../../service/base/BaseService");
|
|
15
|
+
const schedule_1 = require("../../schedule");
|
|
16
|
+
const scheduleNames_1 = require("../../schedule/scheduleNames");
|
|
17
|
+
const RedisKeys_1 = require("../../models/RedisKeys");
|
|
18
|
+
let AsyncTaskService = class AsyncTaskService extends BaseService_1.BaseService {
|
|
19
|
+
async startTask() {
|
|
20
|
+
await this.redisService.set(RedisKeys_1.RedisKeys.ASYNC_TASK_UPDATE_TIME, `${Date.now()}`);
|
|
21
|
+
(0, schedule_1.runScheduleTaskOnce)(scheduleNames_1.INNER_SCHEDULE_NAMES.asyncTaskRunnerService).then(schedule => {
|
|
22
|
+
console.log(schedule);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
async cancelTask(id) { }
|
|
26
|
+
};
|
|
27
|
+
__decorate([
|
|
28
|
+
(0, core_1.Inject)(),
|
|
29
|
+
__metadata("design:type", Object)
|
|
30
|
+
], AsyncTaskService.prototype, "ctx", void 0);
|
|
31
|
+
AsyncTaskService = __decorate([
|
|
32
|
+
(0, core_1.Provide)()
|
|
33
|
+
], AsyncTaskService);
|
|
34
|
+
exports.AsyncTaskService = AsyncTaskService;
|
|
@@ -19,7 +19,7 @@ export declare class CrudStdService extends ApiBaseService {
|
|
|
19
19
|
/**
|
|
20
20
|
* 执行普通CRUD
|
|
21
21
|
*/
|
|
22
|
-
executeStdQuery(appCode: string, settingKey: string, params: IRequestModel, sqlSimpleName: KeysOfSimpleSQL): Promise<
|
|
22
|
+
executeStdQuery(appCode: string, settingKey: string, params: IRequestModel, sqlSimpleName: KeysOfSimpleSQL): Promise<any>;
|
|
23
23
|
/**
|
|
24
24
|
* 获取appInfo 并且拿到当前settingKey相关的信息
|
|
25
25
|
* @param appCode
|
|
@@ -47,4 +47,5 @@ export declare class CrudStdService extends ApiBaseService {
|
|
|
47
47
|
*/
|
|
48
48
|
getParsedCrudStdAppInfo(appCode: string): Promise<ICrudStdAppInfo>;
|
|
49
49
|
private hasOperationPerm;
|
|
50
|
+
private fixDataFieldTypeBySqlTableField;
|
|
50
51
|
}
|
|
@@ -21,6 +21,8 @@ const CrudStdRelationService_1 = require("./CrudStdRelationService");
|
|
|
21
21
|
const _ = require("lodash");
|
|
22
22
|
const ApiBaseService_1 = require("../base/ApiBaseService");
|
|
23
23
|
const DatabaseName_1 = require("../../libs/crud-pro/utils/DatabaseName");
|
|
24
|
+
const global_config_1 = require("../../libs/global-config/global-config");
|
|
25
|
+
const MixinUtils_1 = require("../../libs/crud-pro/utils/MixinUtils");
|
|
24
26
|
exports.SPECIAL_SETTING_KEY = {
|
|
25
27
|
QUERY_LIST: 'QUERY_LIST',
|
|
26
28
|
QUERY_ONE: 'QUERY_ONE',
|
|
@@ -35,11 +37,25 @@ let CrudStdService = class CrudStdService extends ApiBaseService_1.ApiBaseServic
|
|
|
35
37
|
if (!appInfo || appInfo.status !== 1) {
|
|
36
38
|
throw new devops_1.BizException('应用不存在或已下线:' + appCode);
|
|
37
39
|
}
|
|
40
|
+
// 查询列表功能
|
|
41
|
+
if (settingKey === exports.SPECIAL_SETTING_KEY.QUERY_LIST) {
|
|
42
|
+
// 正确启用了自定义查询功能
|
|
43
|
+
const customQueryApi = _.get(stdCrudCfgObj, 'othersSetting.values.customQueryApi');
|
|
44
|
+
if (typeof customQueryApi === 'string') {
|
|
45
|
+
const customQueryApiArr = customQueryApi.split('.');
|
|
46
|
+
const serviceName = customQueryApiArr[0] || "";
|
|
47
|
+
const serviceFunc = customQueryApiArr[1] || "";
|
|
48
|
+
if (serviceName.endsWith('Service')) {
|
|
49
|
+
const serviceObj = await this.ctx.requestContext.getAsync(serviceName);
|
|
50
|
+
return serviceObj[serviceFunc](params);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
38
54
|
const databaseName = stdCrudCfgObj.tableBaseInfo.databaseName;
|
|
39
55
|
const { dbType, dbName } = (0, DatabaseName_1.parseDatabaseName)(databaseName);
|
|
40
56
|
const cfgModel = {
|
|
41
57
|
sqlDatabase: dbName,
|
|
42
|
-
|
|
58
|
+
sqlDbType: dbType,
|
|
43
59
|
sqlTable: stdCrudCfgObj.tableBaseInfo.tableName,
|
|
44
60
|
sqlSimpleName,
|
|
45
61
|
};
|
|
@@ -53,6 +69,10 @@ let CrudStdService = class CrudStdService extends ApiBaseService_1.ApiBaseServic
|
|
|
53
69
|
}
|
|
54
70
|
// 根据用户配置,设置关联查询的数据信息。
|
|
55
71
|
await this.crudStdRelationService.addCfgModelColumnsRelation(cfgModel, appInfo);
|
|
72
|
+
// 根据表结构的数据类型,修正数据类型
|
|
73
|
+
await this.fixDataFieldTypeBySqlTableField(params, cfgModel, appInfo, { dbType, dbName });
|
|
74
|
+
// 业务系统自定义的修改cfgModel
|
|
75
|
+
await global_config_1.GLOBAL_STATIC_CONFIG.getConfig().bizUpdateCfgModelForCrudStd(params, cfgModel, appInfo, this.ctx);
|
|
56
76
|
return await this.curdMixService.executeCrudByCfg(params, cfgModel);
|
|
57
77
|
}
|
|
58
78
|
/**
|
|
@@ -112,12 +132,13 @@ let CrudStdService = class CrudStdService extends ApiBaseService_1.ApiBaseServic
|
|
|
112
132
|
* @private
|
|
113
133
|
*/
|
|
114
134
|
async getCrudStdAppInfo(appCode) {
|
|
135
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
115
136
|
this.logInfo('getCrudStdAppInfo', appCode);
|
|
116
137
|
const ss = {
|
|
117
138
|
sqlTable: SystemTables_1.SystemTables.sys_app,
|
|
118
139
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_ONE,
|
|
119
|
-
sqlDatabase:
|
|
120
|
-
|
|
140
|
+
sqlDatabase: SystemDbName,
|
|
141
|
+
sqlDbType: SystemDbType,
|
|
121
142
|
};
|
|
122
143
|
return await this.curdMixService.executeCrudByCfg({ condition: { app_code: appCode } }, ss);
|
|
123
144
|
}
|
|
@@ -159,6 +180,30 @@ let CrudStdService = class CrudStdService extends ApiBaseService_1.ApiBaseServic
|
|
|
159
180
|
}
|
|
160
181
|
return true; // 无需鉴权
|
|
161
182
|
}
|
|
183
|
+
async fixDataFieldTypeBySqlTableField(params, cfgModel, appInfo, arg3) {
|
|
184
|
+
const tableFields = _.get(appInfo, 'stdCrudCfgObj.tableFields');
|
|
185
|
+
const tableFieldMap = MixinUtils_1.MixinUtils.toMap(tableFields, (e) => {
|
|
186
|
+
return e.fieldIndex;
|
|
187
|
+
});
|
|
188
|
+
if (arg3.dbType === keys_1.SqlDbType.postgres) {
|
|
189
|
+
if (cfgModel.sqlSimpleName === keys_1.KeysOfSimpleSQL.SIMPLE_INSERT || cfgModel.sqlSimpleName === keys_1.KeysOfSimpleSQL.SIMPLE_UPDATE) {
|
|
190
|
+
const data = params.data || {};
|
|
191
|
+
const dataKeys = Object.keys(data);
|
|
192
|
+
for (let index = 0; index < dataKeys.length; index++) {
|
|
193
|
+
const dataKey = dataKeys[index];
|
|
194
|
+
const dataValue = data[dataKey];
|
|
195
|
+
const fieldInfo = tableFieldMap[dataKey];
|
|
196
|
+
const fieldType = ('' + _.get(fieldInfo, 'type')).toUpperCase();
|
|
197
|
+
if (fieldType === 'ARRAY') {
|
|
198
|
+
const dataValueArray = (0, functions_1.parseJsonObject)(dataValue);
|
|
199
|
+
if (Array.isArray(dataValueArray)) {
|
|
200
|
+
data[dataKey] = `{${dataValueArray.map(v => `"${v}"`).join(',')}}`;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
162
207
|
};
|
|
163
208
|
__decorate([
|
|
164
209
|
(0, core_1.Inject)(),
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SqlDbType } from "../../libs/crud-pro/models/keys";
|
|
2
|
+
import { IRequestModel } from "../../libs/crud-pro/interfaces";
|
|
3
|
+
import { IRequestCfgModel2 } from "../../models/bizmodels";
|
|
4
|
+
import { CrudPro } from "../../libs/crud-pro/CrudPro";
|
|
5
|
+
import { ResModelAffected, ResModelStandard } from "../../libs/crud-pro/models/ResModel";
|
|
6
|
+
export declare class CrudProQuick {
|
|
7
|
+
private readonly curdPro;
|
|
8
|
+
private readonly sqlDbType;
|
|
9
|
+
private readonly sqlDatabase;
|
|
10
|
+
private readonly sqlTable?;
|
|
11
|
+
private baseCfgModel;
|
|
12
|
+
constructor(curdPro: CrudPro, sqlDatabase: string, sqlDbType: SqlDbType, sqlTable?: string);
|
|
13
|
+
setBaseCfgModel(baseCfgModel: IRequestCfgModel2): void;
|
|
14
|
+
private executeCrudByCfg;
|
|
15
|
+
getOne(reqJson: IRequestModel, sqlTable?: string): Promise<any>;
|
|
16
|
+
getList(reqJson: IRequestModel, sqlTable?: string): Promise<any[]>;
|
|
17
|
+
getListPage(reqJson: IRequestModel, sqlTable?: string): Promise<ResModelStandard>;
|
|
18
|
+
getTotalCount(reqJson: IRequestModel, sqlTable?: string): Promise<number>;
|
|
19
|
+
insertObject(reqJson: IRequestModel, sqlTable?: string): Promise<ResModelAffected>;
|
|
20
|
+
updateObject(reqJson: IRequestModel, sqlTable?: string): Promise<ResModelAffected>;
|
|
21
|
+
insertOrUpdate(reqJson: IRequestModel, sqlTable?: string): Promise<ResModelStandard>;
|
|
22
|
+
deleteObject(reqJson: IRequestModel, sqlTable?: string): Promise<ResModelAffected>;
|
|
23
|
+
executeSQL(executeSql: string, args?: any[]): Promise<any>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CrudProQuick = void 0;
|
|
4
|
+
const keys_1 = require("../../libs/crud-pro/models/keys");
|
|
5
|
+
class CrudProQuick {
|
|
6
|
+
constructor(curdPro, sqlDatabase, sqlDbType, sqlTable) {
|
|
7
|
+
this.baseCfgModel = {};
|
|
8
|
+
this.sqlDatabase = sqlDatabase;
|
|
9
|
+
this.sqlDbType = sqlDbType;
|
|
10
|
+
this.curdPro = curdPro;
|
|
11
|
+
this.sqlTable = sqlTable; // 全局sqlTable为空时,单独调用时就必须传sqlTable参数。
|
|
12
|
+
}
|
|
13
|
+
setBaseCfgModel(baseCfgModel) {
|
|
14
|
+
Object.assign(this.baseCfgModel, baseCfgModel);
|
|
15
|
+
}
|
|
16
|
+
async executeCrudByCfg(reqJson, cfgModel2) {
|
|
17
|
+
const cfgModel = { ...this.baseCfgModel };
|
|
18
|
+
Object.assign(cfgModel, cfgModel2);
|
|
19
|
+
cfgModel.method = 'CrudProQuickAnonymous';
|
|
20
|
+
cfgModel.updateCfg = {};
|
|
21
|
+
cfgModel.sqlDatabase = this.sqlDatabase;
|
|
22
|
+
cfgModel.sqlDbType = this.sqlDbType;
|
|
23
|
+
if (!cfgModel.sqlTable) {
|
|
24
|
+
cfgModel.sqlTable = this.sqlTable;
|
|
25
|
+
}
|
|
26
|
+
if (!cfgModel.sqlTable) {
|
|
27
|
+
throw new Error('[CrudProQuick] sqlTable not found');
|
|
28
|
+
}
|
|
29
|
+
return await this.curdPro.executeCrudByCfg(reqJson, cfgModel);
|
|
30
|
+
}
|
|
31
|
+
async getOne(reqJson, sqlTable) {
|
|
32
|
+
const cfgModel = {
|
|
33
|
+
sqlTable,
|
|
34
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_ONE,
|
|
35
|
+
};
|
|
36
|
+
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
37
|
+
return res.getOneObj();
|
|
38
|
+
}
|
|
39
|
+
async getList(reqJson, sqlTable) {
|
|
40
|
+
const cfgModel = {
|
|
41
|
+
sqlTable,
|
|
42
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY,
|
|
43
|
+
};
|
|
44
|
+
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
45
|
+
return res.getResRows();
|
|
46
|
+
}
|
|
47
|
+
async getListPage(reqJson, sqlTable) {
|
|
48
|
+
const cfgModel = {
|
|
49
|
+
sqlTable,
|
|
50
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_PAGE,
|
|
51
|
+
};
|
|
52
|
+
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
53
|
+
return res.getResModel(); // 因为它有2个返回值
|
|
54
|
+
}
|
|
55
|
+
async getTotalCount(reqJson, sqlTable) {
|
|
56
|
+
const cfgModel = {
|
|
57
|
+
sqlTable,
|
|
58
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_COUNT,
|
|
59
|
+
};
|
|
60
|
+
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
61
|
+
return res.getResModel().total_count;
|
|
62
|
+
}
|
|
63
|
+
async insertObject(reqJson, sqlTable) {
|
|
64
|
+
const cfgModel = {
|
|
65
|
+
sqlTable,
|
|
66
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_INSERT,
|
|
67
|
+
};
|
|
68
|
+
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
69
|
+
return res.getResModel().affected;
|
|
70
|
+
}
|
|
71
|
+
async updateObject(reqJson, sqlTable) {
|
|
72
|
+
const cfgModel = {
|
|
73
|
+
sqlTable,
|
|
74
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_UPDATE,
|
|
75
|
+
};
|
|
76
|
+
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
77
|
+
return res.getResModel().affected;
|
|
78
|
+
}
|
|
79
|
+
async insertOrUpdate(reqJson, sqlTable) {
|
|
80
|
+
const cfgModel = {
|
|
81
|
+
sqlTable,
|
|
82
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_INSERT_OR_UPDATE,
|
|
83
|
+
};
|
|
84
|
+
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
85
|
+
return res.getResModel(); // 因为它有三个返回值
|
|
86
|
+
}
|
|
87
|
+
async deleteObject(reqJson, sqlTable) {
|
|
88
|
+
const cfgModel = {
|
|
89
|
+
sqlTable,
|
|
90
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_DELETE,
|
|
91
|
+
};
|
|
92
|
+
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
93
|
+
return res.getResModel().affected;
|
|
94
|
+
}
|
|
95
|
+
async executeSQL(executeSql, args) {
|
|
96
|
+
const sqlCfgModel = {
|
|
97
|
+
executeSql: executeSql,
|
|
98
|
+
executeSqlArgs: args,
|
|
99
|
+
sqlDatabase: this.sqlDatabase,
|
|
100
|
+
sqlDbType: this.sqlDbType,
|
|
101
|
+
};
|
|
102
|
+
return await this.curdPro.executeSQL(sqlCfgModel);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.CrudProQuick = CrudProQuick;
|
|
@@ -17,10 +17,12 @@ const CurdMixUtils_1 = require("./CurdMixUtils");
|
|
|
17
17
|
const SystemTables_1 = require("../../models/SystemTables");
|
|
18
18
|
const keys_1 = require("../../libs/crud-pro/models/keys");
|
|
19
19
|
const MixinUtils_1 = require("../../libs/crud-pro/utils/MixinUtils");
|
|
20
|
+
const global_config_1 = require("../../libs/global-config/global-config");
|
|
20
21
|
const dictMixUtils = new CurdMixUtils_1.CrudMixUtils(CurdMixUtils_1.RelatedType.accountBasic);
|
|
21
22
|
const TMP_CTX_KEY = _.uniqueId('CurdMixByAccountService');
|
|
22
23
|
let CurdMixByAccountService = class CurdMixByAccountService {
|
|
23
24
|
async handleExecuteContextPrepare(executeContext) {
|
|
25
|
+
const { SystemDbName, SystemDbType, toFatcmsUserAccountId } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
24
26
|
const relations = dictMixUtils.pickColumnRelations(executeContext);
|
|
25
27
|
if (!relations || relations.length === 0) {
|
|
26
28
|
return;
|
|
@@ -28,9 +30,13 @@ let CurdMixByAccountService = class CurdMixByAccountService {
|
|
|
28
30
|
const accountIds = new Set();
|
|
29
31
|
dictMixUtils.forEachRowAndColumnsRelation(executeContext, (row, columnRelation) => {
|
|
30
32
|
const { sourceColumn } = columnRelation;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
if (sourceColumn) {
|
|
34
|
+
const accountId = _.get(row, sourceColumn);
|
|
35
|
+
if (accountId) {
|
|
36
|
+
const fatcmsUserAccountId = toFatcmsUserAccountId(accountId);
|
|
37
|
+
accountIds.add(fatcmsUserAccountId);
|
|
38
|
+
row['__fatcmsUserAccountId__'] = fatcmsUserAccountId;
|
|
39
|
+
}
|
|
34
40
|
}
|
|
35
41
|
});
|
|
36
42
|
if (accountIds.size === 0) {
|
|
@@ -40,8 +46,8 @@ let CurdMixByAccountService = class CurdMixByAccountService {
|
|
|
40
46
|
method: 'UserAccountService.queryAccountBasicInfoByIds',
|
|
41
47
|
sqlTable: SystemTables_1.SystemTables.sys_user_account,
|
|
42
48
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY,
|
|
43
|
-
sqlDatabase:
|
|
44
|
-
|
|
49
|
+
sqlDatabase: SystemDbName,
|
|
50
|
+
sqlDbType: SystemDbType,
|
|
45
51
|
};
|
|
46
52
|
const reqJson = {
|
|
47
53
|
columns: ['nick_name', 'avatar', 'account_id'],
|
|
@@ -69,7 +75,7 @@ let CurdMixByAccountService = class CurdMixByAccountService {
|
|
|
69
75
|
{ from: 'avatar', to: `${sourceColumn}_user.avatar` },
|
|
70
76
|
];
|
|
71
77
|
}
|
|
72
|
-
dictMixUtils.
|
|
78
|
+
dictMixUtils.copyUserInfoToRowNoRelatedCode(row, userInfoMap, columnRelation);
|
|
73
79
|
});
|
|
74
80
|
}
|
|
75
81
|
};
|