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
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as moment from 'moment';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
function generateOrderNumber(prefix:string = 'NO'): string {
|
|
3
|
+
function generateOrderNumber(prefix = 'NO'): string {
|
|
5
4
|
// 获取当前时间并格式化为YYYYMMDDHHmmss
|
|
6
5
|
const timestamp = moment().format('YYYYMMDDHHmmss');
|
|
7
6
|
|
|
@@ -12,7 +11,4 @@ function generateOrderNumber(prefix:string = 'NO'): string {
|
|
|
12
11
|
return prefix + timestamp + randomDigits;
|
|
13
12
|
}
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
export {
|
|
17
|
-
generateOrderNumber
|
|
18
|
-
}
|
|
14
|
+
export { generateOrderNumber };
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import * as _ from 'lodash';
|
|
2
|
-
import {parseJsonObject} from
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { parseJsonObject } from './functions';
|
|
5
3
|
|
|
6
4
|
interface IEnumInfo {
|
|
7
5
|
label: string;
|
|
@@ -9,14 +7,14 @@ interface IEnumInfo {
|
|
|
9
7
|
children?: IEnumInfo[];
|
|
10
8
|
}
|
|
11
9
|
|
|
12
|
-
function parseTreeTableToIEnumInfo(dataSource:any[]): IEnumInfo[]{
|
|
10
|
+
function parseTreeTableToIEnumInfo(dataSource: any[]): IEnumInfo[] {
|
|
13
11
|
if (!dataSource || !Array.isArray(dataSource)) {
|
|
14
12
|
return undefined;
|
|
15
13
|
}
|
|
16
|
-
return
|
|
17
|
-
const {key, nodeName, value, label } = item;
|
|
14
|
+
return dataSource.map((item: any) => {
|
|
15
|
+
const { key, nodeName, value, label } = item;
|
|
18
16
|
const children = parseTreeTableToIEnumInfo(item.children);
|
|
19
|
-
const enumInfo: IEnumInfo =
|
|
17
|
+
const enumInfo: IEnumInfo = {
|
|
20
18
|
label: label || nodeName,
|
|
21
19
|
value: value || key,
|
|
22
20
|
};
|
|
@@ -27,9 +25,7 @@ function parseTreeTableToIEnumInfo(dataSource:any[]): IEnumInfo[]{
|
|
|
27
25
|
});
|
|
28
26
|
}
|
|
29
27
|
|
|
30
|
-
|
|
31
28
|
function parseConfigContentToEnumInfo(configEntity: any): IEnumInfo[] {
|
|
32
|
-
|
|
33
29
|
const { config_content, config_type } = configEntity;
|
|
34
30
|
|
|
35
31
|
const configObj = parseJsonObject(config_content);
|
|
@@ -52,11 +48,7 @@ function parseConfigContentToEnumInfo(configEntity: any): IEnumInfo[] {
|
|
|
52
48
|
if (Array.isArray(configObj)) {
|
|
53
49
|
return configObj;
|
|
54
50
|
}
|
|
55
|
-
return []
|
|
51
|
+
return [];
|
|
56
52
|
}
|
|
57
53
|
|
|
58
|
-
|
|
59
|
-
export {
|
|
60
|
-
parseConfigContentToEnumInfo,
|
|
61
|
-
IEnumInfo
|
|
62
|
-
}
|
|
54
|
+
export { parseConfigContentToEnumInfo, IEnumInfo };
|
|
@@ -1,36 +1,18 @@
|
|
|
1
1
|
import { Middleware, IMiddleware } from '@midwayjs/core';
|
|
2
2
|
import { NextFunction, Context } from '@midwayjs/koa';
|
|
3
3
|
|
|
4
|
-
|
|
5
4
|
// 一些爬虫/漏洞分析工具会来请求这玩意。
|
|
6
|
-
const blackEqualList = [
|
|
7
|
-
'/config.json',
|
|
8
|
-
'/backend/.env',
|
|
9
|
-
'/application.yml',
|
|
10
|
-
'/db.ini',
|
|
11
|
-
'/.well-known/security.txt',
|
|
12
|
-
];
|
|
5
|
+
const blackEqualList = ['/config.json', '/backend/.env', '/application.yml', '/db.ini', '/.well-known/security.txt'];
|
|
13
6
|
|
|
14
|
-
const blackPrefixList = [
|
|
15
|
-
'/.aws/',
|
|
16
|
-
'/.git/',
|
|
17
|
-
'/.svn/',
|
|
18
|
-
'/.env/',
|
|
19
|
-
'/src/',
|
|
20
|
-
'/var/logs/',
|
|
21
|
-
'/var/log/',
|
|
22
|
-
'/cgi-bin/',
|
|
23
|
-
'/php-cgi/',
|
|
24
|
-
];
|
|
7
|
+
const blackPrefixList = ['/.aws/', '/.git/', '/.svn/', '/.env/', '/src/', '/var/logs/', '/var/log/', '/cgi-bin/', '/php-cgi/'];
|
|
25
8
|
|
|
26
9
|
/**
|
|
27
10
|
* 针对一些路径禁止访问。避免一些爬虫抓取网站内容,实际上这里枚举的路径,本身就是不存在的。只是为了提前拦截,为了服务器性能考虑。
|
|
28
11
|
*/
|
|
29
12
|
@Middleware()
|
|
30
13
|
export class ForbiddenMiddleware implements IMiddleware<Context, NextFunction> {
|
|
31
|
-
|
|
32
14
|
match(ctx: Context): boolean {
|
|
33
|
-
const path = ctx.path
|
|
15
|
+
const path = ctx.path;
|
|
34
16
|
if (path === '/') {
|
|
35
17
|
return false;
|
|
36
18
|
}
|
|
@@ -53,15 +35,14 @@ export class ForbiddenMiddleware implements IMiddleware<Context, NextFunction> {
|
|
|
53
35
|
}
|
|
54
36
|
}
|
|
55
37
|
|
|
56
|
-
return !!(path.includes('/wp-includes/') || path.endsWith('.php') ||
|
|
38
|
+
return !!(path.includes('/wp-includes/') || path.endsWith('.php') || path.endsWith('/.git/config'));
|
|
57
39
|
}
|
|
58
40
|
|
|
59
|
-
|
|
60
41
|
resolve() {
|
|
61
42
|
return async (ctx: Context, next: NextFunction) => {
|
|
62
|
-
ctx.set({
|
|
43
|
+
ctx.set({ 'content-type': 'text/html; charset=utf-8' });
|
|
63
44
|
ctx.status = 404;
|
|
64
|
-
ctx.body =
|
|
45
|
+
ctx.body = '404!404!404!重要的事情说三遍!';
|
|
65
46
|
};
|
|
66
47
|
}
|
|
67
48
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Middleware, IMiddleware } from '@midwayjs/core';
|
|
2
2
|
import { NextFunction, Context } from '@midwayjs/koa';
|
|
3
3
|
import * as _ from 'lodash';
|
|
4
|
-
import { Transaction } from '
|
|
5
|
-
import { UserSessionService } from '
|
|
6
|
-
import { WorkbenchService } from '
|
|
7
|
-
import { ISessionInfo, UserSessionInfo } from '
|
|
8
|
-
import { ICommonResult, CommonResult } from '
|
|
9
|
-
import {isEnableDebug, isEnableSuperAdmin} from '
|
|
10
|
-
import { ContextLogger } from '
|
|
4
|
+
import { Transaction } from '@/libs/crud-pro/models/Transaction';
|
|
5
|
+
import { UserSessionService } from '@/service/UserSessionService';
|
|
6
|
+
import { WorkbenchService } from '@/service/WorkbenchService';
|
|
7
|
+
import { ISessionInfo, UserSessionInfo } from '@/models/userSession';
|
|
8
|
+
import { ICommonResult, CommonResult } from '@/libs/utils/common-dto';
|
|
9
|
+
import { isEnableDebug, isEnableSuperAdmin } from '@/libs/utils/fatcms-request';
|
|
10
|
+
import { ContextLogger } from '@/models/contextLogger';
|
|
11
11
|
import { Stream } from 'node:stream';
|
|
12
|
-
import {VisitStatService} from
|
|
12
|
+
import { VisitStatService } from '@/service/VisitStatService';
|
|
13
13
|
|
|
14
14
|
function isFunction(fun: any): boolean {
|
|
15
15
|
return typeof fun === 'function';
|
|
@@ -141,8 +141,6 @@ async function getVisitStatService(ctx: Context): Promise<VisitStatService> {
|
|
|
141
141
|
return ctx.requestContext.getAsync(VisitStatService);
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
-
|
|
145
|
-
|
|
146
144
|
/**
|
|
147
145
|
* 检查是否是超级管理员
|
|
148
146
|
* @param ctx
|
|
@@ -199,7 +197,6 @@ function handleDebugError(e: any, ctx: Context): ICommonResult {
|
|
|
199
197
|
return res;
|
|
200
198
|
}
|
|
201
199
|
|
|
202
|
-
|
|
203
200
|
async function trackRequest(ctx: Context) {
|
|
204
201
|
try {
|
|
205
202
|
const visitStatService = await getVisitStatService(ctx);
|
|
@@ -209,15 +206,22 @@ async function trackRequest(ctx: Context) {
|
|
|
209
206
|
}
|
|
210
207
|
}
|
|
211
208
|
|
|
209
|
+
const excludePathPrefix = ['/ns/static/', '/ns/api/helpers'];
|
|
210
|
+
|
|
212
211
|
/**
|
|
213
212
|
* 全局中间件
|
|
214
213
|
*/
|
|
215
214
|
@Middleware()
|
|
216
215
|
export class GlobalMiddleware implements IMiddleware<Context, NextFunction> {
|
|
217
|
-
|
|
218
216
|
match(ctx: Context): boolean {
|
|
219
217
|
const path: string = ctx.path;
|
|
220
|
-
|
|
218
|
+
for (let i = 0; i < excludePathPrefix.length; i++) {
|
|
219
|
+
const excludePathPrefix1 = excludePathPrefix[i];
|
|
220
|
+
if (path.startsWith(excludePathPrefix1)) {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return true;
|
|
221
225
|
}
|
|
222
226
|
|
|
223
227
|
resolve() {
|
|
@@ -226,7 +230,6 @@ export class GlobalMiddleware implements IMiddleware<Context, NextFunction> {
|
|
|
226
230
|
ctx.transaction = new Transaction();
|
|
227
231
|
|
|
228
232
|
try {
|
|
229
|
-
|
|
230
233
|
// 支持的站点
|
|
231
234
|
const workbenchService = await getWorkbenchService(ctx);
|
|
232
235
|
const isSupportTheHost = await workbenchService.isSupportCurrentHostForForMiddleware();
|
|
@@ -242,7 +245,7 @@ export class GlobalMiddleware implements IMiddleware<Context, NextFunction> {
|
|
|
242
245
|
ctx.workbenchInfo = await workbenchService.getCurrentHostWorkbenchInfo();
|
|
243
246
|
|
|
244
247
|
// 数据埋点
|
|
245
|
-
await trackRequest(ctx)
|
|
248
|
+
await trackRequest(ctx);
|
|
246
249
|
|
|
247
250
|
const res0 = await next();
|
|
248
251
|
|
|
@@ -256,7 +259,6 @@ export class GlobalMiddleware implements IMiddleware<Context, NextFunction> {
|
|
|
256
259
|
return res0;
|
|
257
260
|
}
|
|
258
261
|
|
|
259
|
-
|
|
260
262
|
// 其他:普通的JSON数据
|
|
261
263
|
let res = handleExecuteSqlContext(res0);
|
|
262
264
|
res = handleNullRes(res);
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export interface SysAsyncTaskEntity {
|
|
2
|
+
id: number;
|
|
3
|
+
task_uuid: string;
|
|
4
|
+
task_name: string;
|
|
5
|
+
task_description: string | null;
|
|
6
|
+
task_type: string;
|
|
7
|
+
task_status: SysAsyncTaskStatus;
|
|
8
|
+
input_params: any;
|
|
9
|
+
output_result: any | null;
|
|
10
|
+
|
|
11
|
+
input_file_path: string | null;
|
|
12
|
+
input_file_format: SysAsyncFileFormat | null;
|
|
13
|
+
input_file_size: number | null;
|
|
14
|
+
|
|
15
|
+
output_file_path: string | null;
|
|
16
|
+
output_file_format: SysAsyncFileFormat | null;
|
|
17
|
+
output_file_size: number | null;
|
|
18
|
+
|
|
19
|
+
input_total_records: number | null;
|
|
20
|
+
output_total_records: number | null;
|
|
21
|
+
processed_records: number;
|
|
22
|
+
progress: number;
|
|
23
|
+
error_message: string | null;
|
|
24
|
+
error_records: any | null;
|
|
25
|
+
created_by: string | null;
|
|
26
|
+
priority: number;
|
|
27
|
+
retry_count: number;
|
|
28
|
+
max_retries: number;
|
|
29
|
+
|
|
30
|
+
parent_task_id: number | null;
|
|
31
|
+
created_at: Date;
|
|
32
|
+
started_at: Date | null;
|
|
33
|
+
updated_at: Date;
|
|
34
|
+
expired_at: Date | null;
|
|
35
|
+
completed_at: Date | null;
|
|
36
|
+
created_user_session: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export type SysAsyncTaskPartial = Partial<SysAsyncTaskEntity>;
|
|
40
|
+
|
|
41
|
+
export enum SysAsyncTaskStatus {
|
|
42
|
+
PENDING = 'PENDING', // 等待中,还未进入排队
|
|
43
|
+
RUNNING = 'RUNNING', // 运行中
|
|
44
|
+
SUCCEEDED = 'SUCCEEDED', // 终止状态:全部成功
|
|
45
|
+
PART_SUCCEEDED = 'PART_SUCCEEDED',// 终止状态:部分成功
|
|
46
|
+
FAILED = 'FAILED', // 终止状态:失败
|
|
47
|
+
CANCELLED = 'CANCELLED', // 取消
|
|
48
|
+
PAUSED = 'PAUSED', // 暂停
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export enum SysAsyncFileFormat {
|
|
52
|
+
XLSX = 'xlsx',
|
|
53
|
+
CSV = 'csv',
|
|
54
|
+
JSON = 'json',
|
|
55
|
+
PDF = 'pdf',
|
|
56
|
+
TXT = 'txt',
|
|
57
|
+
XML = 'xml',
|
|
58
|
+
ZIP = 'zip',
|
|
59
|
+
HTML = 'html',
|
|
60
|
+
PNG = 'png',
|
|
61
|
+
JPG = 'jpg',
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface ISysAsyncTaskHandler {
|
|
65
|
+
execute(asyncTaskContext: SysAsyncTaskContext): Promise<void>;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface SysAsyncTaskContext {
|
|
69
|
+
task: SysAsyncTaskEntity;
|
|
70
|
+
updateTaskStatus: (sysAsyncTaskPartial: SysAsyncTaskPartial) => any;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface SysAsyncTaskHandlerConfig {
|
|
74
|
+
taskType: string;
|
|
75
|
+
handler: ISysAsyncTaskHandler;
|
|
76
|
+
maxRetries?: number;
|
|
77
|
+
priority?: number;
|
|
78
|
+
expireSeconds?: number;
|
|
79
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const RedisKeys = {
|
|
4
|
+
ASYNC_TASK_LOCK : "FatAsyncTaskLock",
|
|
5
|
+
ASYNC_TASK_UPDATE_TIME : "FatAsyncTaskUpdateTime",
|
|
6
|
+
USER_SESSION_PREFIX : "FatUserSession_",
|
|
7
|
+
VISIT_STAT_LOCK_PREFIX : "FatVsLock_",
|
|
8
|
+
VISIT_STAT_DATE_PREFIX : "FatVsDate_",
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export {
|
|
12
|
+
RedisKeys
|
|
13
|
+
}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import {SqlDbType} from "../libs/crud-pro/models/keys";
|
|
2
|
-
|
|
3
1
|
export const SystemTables = {
|
|
4
2
|
sys_workbench: 'sys_workbench',
|
|
5
3
|
sys_user_account: 'sys_user_account',
|
|
@@ -22,9 +20,8 @@ export const SystemTables = {
|
|
|
22
20
|
sys_anyapi: 'sys_anyapi',
|
|
23
21
|
sys_proxyapi: 'sys_proxyapi',
|
|
24
22
|
sys_visit_stats: 'sys_visit_stats',
|
|
23
|
+
sys_async_tasks: 'sys_async_tasks',
|
|
25
24
|
};
|
|
26
25
|
|
|
27
|
-
export const SystemDbName = 'fatcms';
|
|
28
|
-
export const SystemDbType = SqlDbType.mysql;
|
|
29
26
|
|
|
30
27
|
export const SystemDevOpsWorkbench = 'devops';
|
package/src/models/bizmodels.ts
CHANGED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import * as koa from '@midwayjs/koa';
|
|
2
|
+
import {ContextLogger} from "@/models/contextLogger";
|
|
3
|
+
import {Transaction} from "@/libs/crud-pro/models/Transaction";
|
|
4
|
+
import {ISessionInfo, SYS_ACCOUNT_TYPE, UserSessionInfo} from "@/models/userSession";
|
|
5
|
+
import {IWorkbenchEntity} from "@/models/SystemEntities";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
const anonymousUserInfo:ISessionInfo = {
|
|
9
|
+
nickName: 'anonymous_user',
|
|
10
|
+
avatar: '',
|
|
11
|
+
roleCodes: [],
|
|
12
|
+
functionCodes: [],
|
|
13
|
+
loginName: 'anonymous_user',
|
|
14
|
+
sessionId: '',
|
|
15
|
+
accountId: '',
|
|
16
|
+
workbenchCode: '',
|
|
17
|
+
accountType: SYS_ACCOUNT_TYPE,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const anonymousWorkbenchInfo: IWorkbenchEntity = {
|
|
21
|
+
id: 0,
|
|
22
|
+
workbench_code: 'anonymous_workbench',
|
|
23
|
+
workbench_name: 'anonymous_workbench',
|
|
24
|
+
workbench_domain: 'anonymous_workbench',
|
|
25
|
+
workbench_desc: 'anonymous_workbench',
|
|
26
|
+
html_content: 'anonymous_workbench',
|
|
27
|
+
status: 1,
|
|
28
|
+
workbench_type: 0,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
export type RunServiceAtAnonymousContextRunner = (ctx: koa.IMidwayKoaContext)=>any;
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class AnonymousContext {
|
|
36
|
+
private app: koa.Application;
|
|
37
|
+
|
|
38
|
+
setApp(app: koa.Application){
|
|
39
|
+
this.app = app;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
getApp(){
|
|
43
|
+
return this.app;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
async runServiceAtAnonymousContext( runner: RunServiceAtAnonymousContextRunner) {
|
|
48
|
+
const app = this.app;
|
|
49
|
+
const ctx: koa.IMidwayKoaContext = app.createAnonymousContext();
|
|
50
|
+
|
|
51
|
+
ctx.app = app;
|
|
52
|
+
ctx.contextLogger = new ContextLogger(ctx as any);
|
|
53
|
+
ctx.transaction = new Transaction();
|
|
54
|
+
ctx.userSession = new UserSessionInfo(anonymousUserInfo, true);
|
|
55
|
+
ctx.workbenchInfo = anonymousWorkbenchInfo;
|
|
56
|
+
|
|
57
|
+
let result: any = null;
|
|
58
|
+
let error: any = null;
|
|
59
|
+
try {
|
|
60
|
+
result = await runner(ctx);
|
|
61
|
+
} catch (e) {
|
|
62
|
+
error = e;
|
|
63
|
+
ctx.logger.error(`runServiceAtAnonymousContext error `, e);
|
|
64
|
+
} finally {
|
|
65
|
+
await ctx.transaction.releaseTx();
|
|
66
|
+
}
|
|
67
|
+
return {result: result, error: error};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
const ANONYMOUS_CONTEXT = new AnonymousContext()
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
export {
|
|
78
|
+
ANONYMOUS_CONTEXT
|
|
79
|
+
}
|
package/src/schedule/index.ts
CHANGED
|
@@ -1,73 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
functionCodes: [],
|
|
13
|
-
loginName: 'schedule_user',
|
|
14
|
-
sessionId: '',
|
|
15
|
-
accountId: '',
|
|
16
|
-
workbenchCode: '',
|
|
17
|
-
accountType: SYS_ACCOUNT_TYPE,
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const scheduleWorkbenchInfo: IWorkbenchEntity = {
|
|
21
|
-
id: 0,
|
|
22
|
-
workbench_code: 'schedule_workbench',
|
|
23
|
-
workbench_name: 'schedule_workbench',
|
|
24
|
-
workbench_domain: 'schedule_workbench',
|
|
25
|
-
workbench_desc: 'schedule_workbench',
|
|
26
|
-
html_content: 'schedule_workbench',
|
|
27
|
-
status: 1,
|
|
28
|
-
workbench_type: 0,
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
async function runScheduleService(app: koa.Application, serviceName: string) {
|
|
32
|
-
const ctx = app.createAnonymousContext();
|
|
33
|
-
|
|
34
|
-
ctx.app = app;
|
|
35
|
-
ctx.contextLogger = new ContextLogger(ctx as any);
|
|
36
|
-
ctx.transaction = new Transaction();
|
|
37
|
-
ctx.userSession = new UserSessionInfo(scheduleUserInfo, true);
|
|
38
|
-
ctx.workbenchInfo = scheduleWorkbenchInfo;
|
|
39
|
-
|
|
40
|
-
try {
|
|
41
|
-
const serviceObject: IScheduleService = await ctx.requestContext.getAsync(serviceName);
|
|
42
|
-
if (serviceObject && serviceObject.runBySchedule) {
|
|
43
|
-
await serviceObject.runBySchedule();
|
|
44
|
-
} else {
|
|
45
|
-
ctx.logger.error(`runSchedule error , serviceName = ${serviceName}, 没有找到服务`);
|
|
46
|
-
}
|
|
47
|
-
} catch (e) {
|
|
48
|
-
ctx.logger.error(`runSchedule error , serviceName = ${serviceName}`, e);
|
|
49
|
-
} finally {
|
|
50
|
-
await ctx.transaction.releaseTx();
|
|
51
|
-
}
|
|
1
|
+
import {SCHEDULE_QUEUE, runScheduleTaskOnce} from './runSchedule'
|
|
2
|
+
import {ANONYMOUS_CONTEXT} from './anonymousContext'
|
|
3
|
+
import {
|
|
4
|
+
INNER_SCHEDULE_INTERVAL
|
|
5
|
+
} from './scheduleNames'
|
|
6
|
+
|
|
7
|
+
export {
|
|
8
|
+
INNER_SCHEDULE_INTERVAL,
|
|
9
|
+
ANONYMOUS_CONTEXT,
|
|
10
|
+
SCHEDULE_QUEUE,
|
|
11
|
+
runScheduleTaskOnce
|
|
52
12
|
}
|
|
53
|
-
|
|
54
|
-
async function runSchedule(app: koa.Application, serviceList: string[]) {
|
|
55
|
-
for (let i = 0; i < serviceList.length; i++) {
|
|
56
|
-
const serviceName = serviceList[i];
|
|
57
|
-
try {
|
|
58
|
-
await runScheduleService(app, serviceName);
|
|
59
|
-
} catch (e) {
|
|
60
|
-
const ctx = app.createAnonymousContext();
|
|
61
|
-
ctx.logger.error(`runSchedule error , serviceName = ${serviceName}`, e);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
async function startSchedule(app: koa.Application, serviceList: string[]) {
|
|
67
|
-
await runSchedule(app, serviceList);
|
|
68
|
-
setInterval(() => {
|
|
69
|
-
runSchedule(app, serviceList);
|
|
70
|
-
}, 2 * 60 * 1000);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export { startSchedule };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as koa from '@midwayjs/koa';
|
|
2
|
+
import {IScheduleService} from '@/interface';
|
|
3
|
+
import {ANONYMOUS_CONTEXT} from "./anonymousContext";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
// 上次执行时间
|
|
7
|
+
const lastExecuteTimeMap = {};
|
|
8
|
+
|
|
9
|
+
const DEFAULT_SCHEDULE_INTERVAL = 2 * 60 * 1000;
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
async function runScheduleTaskOnce(serviceName: string) {
|
|
13
|
+
|
|
14
|
+
return await ANONYMOUS_CONTEXT.runServiceAtAnonymousContext(async (ctx: koa.IMidwayKoaContext) => {
|
|
15
|
+
const serviceObject: IScheduleService = await ctx.requestContext.getAsync(serviceName);
|
|
16
|
+
if (serviceObject && serviceObject.runBySchedule) {
|
|
17
|
+
await serviceObject.runBySchedule();
|
|
18
|
+
} else {
|
|
19
|
+
ctx.logger.error(`runSchedule error , serviceName = ${serviceName}, 没有找到服务`);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ScheduleQueue {
|
|
26
|
+
private scheduleIntervalMap: Map<string, number> = new Map();
|
|
27
|
+
|
|
28
|
+
public setScheduleTask(serviceName: string, intervalTime: number) {
|
|
29
|
+
this.scheduleIntervalMap.set(serviceName, intervalTime);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public removeScheduleTask(serviceName: string) {
|
|
33
|
+
this.scheduleIntervalMap.delete(serviceName);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private isAlreadyTimeToExecute(serviceName: string): boolean {
|
|
37
|
+
if (!lastExecuteTimeMap[serviceName]) {
|
|
38
|
+
return true; // 可以执行
|
|
39
|
+
}
|
|
40
|
+
const intervalTime1 = this.scheduleIntervalMap.get(serviceName);
|
|
41
|
+
const intervalTime = intervalTime1 || DEFAULT_SCHEDULE_INTERVAL; // 时间间隔
|
|
42
|
+
const lastExecuteTime = lastExecuteTimeMap[serviceName];
|
|
43
|
+
return (Date.now() - lastExecuteTime) >= intervalTime;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
private async runScheduleTaskOnceCheckTime(serviceName: string) {
|
|
48
|
+
// 还没有到可以执行时间
|
|
49
|
+
if (!this.isAlreadyTimeToExecute(serviceName)) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
lastExecuteTimeMap[serviceName] = Date.now();
|
|
53
|
+
await runScheduleTaskOnce(serviceName);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private async runScheduleServiceList() {
|
|
57
|
+
const serviceListKeys = this.scheduleIntervalMap.keys();
|
|
58
|
+
const serviceList = [...serviceListKeys];
|
|
59
|
+
for (let i = 0; i < serviceList.length; i++) {
|
|
60
|
+
const serviceName = serviceList[i];
|
|
61
|
+
try {
|
|
62
|
+
await this.runScheduleTaskOnceCheckTime(serviceName);
|
|
63
|
+
} catch (e) {
|
|
64
|
+
ANONYMOUS_CONTEXT.getApp().getCoreLogger().error(`runSchedule error , serviceName = ${serviceName}`, e);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
public async startScheduleLoop() {
|
|
71
|
+
await this.runScheduleServiceList();
|
|
72
|
+
setInterval(() => {
|
|
73
|
+
this.runScheduleServiceList();
|
|
74
|
+
}, 1000); // 最少1秒执行一次
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
const SCHEDULE_QUEUE = new ScheduleQueue();
|
|
82
|
+
|
|
83
|
+
export {SCHEDULE_QUEUE, runScheduleTaskOnce};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
const INNER_SCHEDULE_INTERVAL = {
|
|
3
|
+
proxyApiLoadService: 2 * 60 * 1000, // 2分钟重新加载一次,
|
|
4
|
+
workbenchService: 60 * 1000, // 1分钟重新加载一次,
|
|
5
|
+
visitStatService: 10 * 60 * 1000, // 10分钟重新加载一次,
|
|
6
|
+
asyncTaskRunnerService: 1000, // 1s可以执行
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const INNER_SCHEDULE_NAMES = {
|
|
10
|
+
proxyApiLoadService: 'proxyApiLoadService',
|
|
11
|
+
workbenchService: 'workbenchService',
|
|
12
|
+
visitStatService: "visitStatService",
|
|
13
|
+
asyncTaskRunnerService: "asyncTaskRunnerService",
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
INNER_SCHEDULE_INTERVAL,
|
|
20
|
+
INNER_SCHEDULE_NAMES
|
|
21
|
+
}
|
|
@@ -5,12 +5,13 @@ import { CurdMixService } from './curd/CurdMixService';
|
|
|
5
5
|
import * as md5 from 'md5';
|
|
6
6
|
import { UserAccountService } from './UserAccountService';
|
|
7
7
|
import { createUniqueId } from '../libs/utils/functions';
|
|
8
|
-
import {IConsumerUserInfo, ISessionInfo, SYS_ACCOUNT_TYPE} from '../models/userSession';
|
|
9
|
-
import {
|
|
8
|
+
import { IConsumerUserInfo, ISessionInfo, SYS_ACCOUNT_TYPE } from '../models/userSession';
|
|
9
|
+
import { SystemTables } from '../models/SystemTables';
|
|
10
10
|
import { UserSessionService } from './UserSessionService';
|
|
11
11
|
import { CommonResult } from '../libs/utils/common-dto';
|
|
12
12
|
import { isEnableSuperAdmin } from "../libs/utils/fatcms-request";
|
|
13
|
-
import {CommonException} from "../libs/crud-pro/exceptions";
|
|
13
|
+
import { CommonException } from "../libs/crud-pro/exceptions";
|
|
14
|
+
import { GLOBAL_STATIC_CONFIG } from '@/libs/global-config/global-config';
|
|
14
15
|
|
|
15
16
|
@Provide()
|
|
16
17
|
export class AuthService {
|
|
@@ -94,7 +95,7 @@ export class AuthService {
|
|
|
94
95
|
nickName: consumerUserInfo.nickName,
|
|
95
96
|
avatar: consumerUserInfo.avatar,
|
|
96
97
|
roleCodes: [],
|
|
97
|
-
functionCodes:[],
|
|
98
|
+
functionCodes: [],
|
|
98
99
|
loginName: consumerUserInfo.loginName,
|
|
99
100
|
sessionId,
|
|
100
101
|
accountId: consumerUserInfo.accountId,
|
|
@@ -141,7 +142,7 @@ export class AuthService {
|
|
|
141
142
|
sessionId,
|
|
142
143
|
accountId,
|
|
143
144
|
workbenchCode,
|
|
144
|
-
accountType: SYS_ACCOUNT_TYPE
|
|
145
|
+
accountType: SYS_ACCOUNT_TYPE,
|
|
145
146
|
};
|
|
146
147
|
|
|
147
148
|
await this.userSessionService.saveUserSession(sessionInfo);
|
|
@@ -203,6 +204,8 @@ export class AuthService {
|
|
|
203
204
|
* @private
|
|
204
205
|
*/
|
|
205
206
|
private async queryUserRoleCodeList(accountId: string): Promise<string[]> {
|
|
207
|
+
const { SystemDbName, SystemDbType } = GLOBAL_STATIC_CONFIG.getConfig();
|
|
208
|
+
|
|
206
209
|
const res = await this.curdMixService.executeCrudByCfg(
|
|
207
210
|
{
|
|
208
211
|
condition: { account_id: accountId },
|
|
@@ -212,7 +215,7 @@ export class AuthService {
|
|
|
212
215
|
sqlTable: SystemTables.sys_perm_user_role,
|
|
213
216
|
sqlSimpleName: KeysOfSimpleSQL.SIMPLE_QUERY,
|
|
214
217
|
sqlDatabase: SystemDbName,
|
|
215
|
-
|
|
218
|
+
sqlDbType: SystemDbType,
|
|
216
219
|
}
|
|
217
220
|
);
|
|
218
221
|
const rows = res.getResModel().rows || [];
|
|
@@ -232,6 +235,8 @@ export class AuthService {
|
|
|
232
235
|
return [];
|
|
233
236
|
}
|
|
234
237
|
|
|
238
|
+
const { SystemDbName, SystemDbType } = GLOBAL_STATIC_CONFIG.getConfig();
|
|
239
|
+
|
|
235
240
|
const res = await this.curdMixService.executeCrudByCfg(
|
|
236
241
|
{
|
|
237
242
|
condition: { role_code: { $in: roleCodeList } },
|
|
@@ -241,7 +246,7 @@ export class AuthService {
|
|
|
241
246
|
sqlTable: SystemTables.sys_perm_role_func,
|
|
242
247
|
sqlSimpleName: KeysOfSimpleSQL.SIMPLE_QUERY,
|
|
243
248
|
sqlDatabase: SystemDbName,
|
|
244
|
-
|
|
249
|
+
sqlDbType: SystemDbType,
|
|
245
250
|
}
|
|
246
251
|
);
|
|
247
252
|
const rows = res.getResModel().rows || [];
|
|
@@ -259,7 +264,7 @@ export class AuthService {
|
|
|
259
264
|
const oldSessionId = sessionInfo.sessionId;
|
|
260
265
|
|
|
261
266
|
const sessionId = createUniqueId();
|
|
262
|
-
const newSessionInfo: ISessionInfo = {...sessionInfo, sessionId};
|
|
267
|
+
const newSessionInfo: ISessionInfo = { ...sessionInfo, sessionId };
|
|
263
268
|
|
|
264
269
|
await this.userSessionService.saveUserSession(newSessionInfo);
|
|
265
270
|
|