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
|
@@ -20,7 +20,7 @@ const CurdMixService_1 = require("./curd/CurdMixService");
|
|
|
20
20
|
const keys_1 = require("../libs/crud-pro/models/keys");
|
|
21
21
|
const bizmodels_1 = require("../models/bizmodels");
|
|
22
22
|
const BaseService_1 = require("./base/BaseService");
|
|
23
|
-
const
|
|
23
|
+
const global_config_1 = require("../libs/global-config/global-config");
|
|
24
24
|
function getSuffix(s) {
|
|
25
25
|
if (s) {
|
|
26
26
|
const indexOf = s.lastIndexOf('.');
|
|
@@ -93,12 +93,13 @@ class FileDB {
|
|
|
93
93
|
this.curdMixService = curdMixService;
|
|
94
94
|
}
|
|
95
95
|
async getFileInfo(fileKey) {
|
|
96
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
96
97
|
const condition = { file_key: fileKey };
|
|
97
98
|
const cfgModel = {
|
|
98
99
|
sqlTable: 'sys_file',
|
|
99
100
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_ONE,
|
|
100
|
-
sqlDatabase:
|
|
101
|
-
|
|
101
|
+
sqlDatabase: SystemDbName,
|
|
102
|
+
sqlDbType: SystemDbType,
|
|
102
103
|
validateCfg: {
|
|
103
104
|
'condition.file_key': [keys_1.KeysOfValidators.REQUIRED, keys_1.KeysOfValidators.STRING],
|
|
104
105
|
},
|
|
@@ -107,11 +108,12 @@ class FileDB {
|
|
|
107
108
|
return res.getOneObj();
|
|
108
109
|
}
|
|
109
110
|
async saveFileInfo(fileInfo) {
|
|
111
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
110
112
|
const cfgModel = {
|
|
111
113
|
sqlTable: 'sys_file',
|
|
112
114
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_INSERT,
|
|
113
|
-
sqlDatabase:
|
|
114
|
-
|
|
115
|
+
sqlDatabase: SystemDbName,
|
|
116
|
+
sqlDbType: SystemDbType,
|
|
115
117
|
};
|
|
116
118
|
return await this.curdMixService.executeCrudByCfg({
|
|
117
119
|
data: fileInfo,
|
|
@@ -121,20 +123,22 @@ class FileDB {
|
|
|
121
123
|
}, cfgModel);
|
|
122
124
|
}
|
|
123
125
|
async saveAssetsLog(fileInfo) {
|
|
126
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
124
127
|
const cfgModel = {
|
|
125
128
|
sqlTable: 'sys_assets_log',
|
|
126
129
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_INSERT,
|
|
127
|
-
sqlDatabase:
|
|
128
|
-
|
|
130
|
+
sqlDatabase: SystemDbName,
|
|
131
|
+
sqlDbType: SystemDbType,
|
|
129
132
|
};
|
|
130
133
|
return await this.curdMixService.executeCrudByCfg({ data: fileInfo }, cfgModel);
|
|
131
134
|
}
|
|
132
135
|
async deleteFileInfo(id) {
|
|
136
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
133
137
|
const cfgModel = {
|
|
134
138
|
sqlTable: 'sys_file',
|
|
135
139
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_DELETE,
|
|
136
|
-
sqlDatabase:
|
|
137
|
-
|
|
140
|
+
sqlDatabase: SystemDbName,
|
|
141
|
+
sqlDbType: SystemDbType,
|
|
138
142
|
validateCfg: {
|
|
139
143
|
'condition.id': [keys_1.KeysOfValidators.REQUIRED, keys_1.KeysOfValidators.NUMBER],
|
|
140
144
|
},
|
|
@@ -15,18 +15,20 @@ const keys_1 = require("../libs/crud-pro/models/keys");
|
|
|
15
15
|
const SystemTables_1 = require("../models/SystemTables");
|
|
16
16
|
const BaseService_1 = require("./base/BaseService");
|
|
17
17
|
const CurdProService_1 = require("./curd/CurdProService");
|
|
18
|
+
const global_config_1 = require("../libs/global-config/global-config");
|
|
18
19
|
let SysConfigService = class SysConfigService extends BaseService_1.BaseService {
|
|
19
20
|
async getSysConfigOne(config_code) {
|
|
20
21
|
if (!config_code) {
|
|
21
22
|
throw new Error('[getSysConfigOne] config_code required');
|
|
22
23
|
}
|
|
24
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
23
25
|
const res1 = await this.curdProService.executeCrudByCfg({
|
|
24
26
|
condition: { config_code },
|
|
25
27
|
}, {
|
|
26
28
|
sqlTable: SystemTables_1.SystemTables.sys_configs,
|
|
27
29
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_ONE,
|
|
28
|
-
sqlDatabase:
|
|
29
|
-
|
|
30
|
+
sqlDatabase: SystemDbName,
|
|
31
|
+
sqlDbType: SystemDbType,
|
|
30
32
|
});
|
|
31
33
|
return res1.getOneObj();
|
|
32
34
|
}
|
|
@@ -18,20 +18,22 @@ const functions_1 = require("../libs/utils/functions");
|
|
|
18
18
|
const exceptions_1 = require("../libs/crud-pro/exceptions");
|
|
19
19
|
const SystemTables_1 = require("../models/SystemTables");
|
|
20
20
|
const common_dto_1 = require("../libs/utils/common-dto");
|
|
21
|
+
const global_config_1 = require("../libs/global-config/global-config");
|
|
21
22
|
let UserAccountService = class UserAccountService {
|
|
22
23
|
/**
|
|
23
24
|
* 查询用户: 根据loginName查询
|
|
24
25
|
* @param loginName
|
|
25
26
|
*/
|
|
26
27
|
async queryUserAccountByLoginName(loginName) {
|
|
28
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
27
29
|
const query = await this.curdMixService.executeCrudByCfg({
|
|
28
30
|
condition: { login_name: loginName },
|
|
29
31
|
}, {
|
|
30
32
|
method: 'UserAccountService.queryUserAccountByLoginName',
|
|
31
33
|
sqlTable: SystemTables_1.SystemTables.sys_user_account,
|
|
32
34
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_ONE,
|
|
33
|
-
sqlDatabase:
|
|
34
|
-
|
|
35
|
+
sqlDatabase: SystemDbName,
|
|
36
|
+
sqlDbType: SystemDbType,
|
|
35
37
|
});
|
|
36
38
|
const { row } = query.getResModel();
|
|
37
39
|
return row;
|
|
@@ -45,6 +47,7 @@ let UserAccountService = class UserAccountService {
|
|
|
45
47
|
if (!accountIdList || accountIdList.length === 0) {
|
|
46
48
|
return [];
|
|
47
49
|
}
|
|
50
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
48
51
|
const accountIds = accountIdList.map(userId => {
|
|
49
52
|
return `${userId}`;
|
|
50
53
|
});
|
|
@@ -52,8 +55,8 @@ let UserAccountService = class UserAccountService {
|
|
|
52
55
|
method: 'UserAccountService.queryAccountBasicInfoByIds',
|
|
53
56
|
sqlTable: SystemTables_1.SystemTables.sys_user_account,
|
|
54
57
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY,
|
|
55
|
-
sqlDatabase:
|
|
56
|
-
|
|
58
|
+
sqlDatabase: SystemDbName,
|
|
59
|
+
sqlDbType: SystemDbType,
|
|
57
60
|
};
|
|
58
61
|
const reqJson = {
|
|
59
62
|
columns: columns,
|
|
@@ -75,6 +78,7 @@ let UserAccountService = class UserAccountService {
|
|
|
75
78
|
if (!loginName) {
|
|
76
79
|
throw new exceptions_1.CommonException(exceptions_1.Exceptions.OTHER_EXCEPTION, 'loginName不存在');
|
|
77
80
|
}
|
|
81
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
78
82
|
const pwd_salt = (0, functions_1.createUniqueId)();
|
|
79
83
|
const pwd_md5 = md5(unsaltedPwd + pwd_salt);
|
|
80
84
|
const res1 = await this.curdMixService.executeCrudByCfg({
|
|
@@ -83,8 +87,8 @@ let UserAccountService = class UserAccountService {
|
|
|
83
87
|
}, {
|
|
84
88
|
sqlTable: SystemTables_1.SystemTables.sys_user_account,
|
|
85
89
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_UPDATE,
|
|
86
|
-
sqlDatabase:
|
|
87
|
-
|
|
90
|
+
sqlDatabase: SystemDbName,
|
|
91
|
+
sqlDbType: SystemDbType,
|
|
88
92
|
});
|
|
89
93
|
return common_dto_1.CommonResult.successRes(res1.getResModel());
|
|
90
94
|
}
|
|
@@ -14,6 +14,7 @@ const core_1 = require("@midwayjs/core");
|
|
|
14
14
|
const functions_1 = require("../libs/utils/functions");
|
|
15
15
|
const userSession_1 = require("../models/userSession");
|
|
16
16
|
const RedisCacheService_1 = require("./base/RedisCacheService");
|
|
17
|
+
const RedisKeys_1 = require("../models/RedisKeys");
|
|
17
18
|
function pickUserAvatar(avatar) {
|
|
18
19
|
if (!avatar) {
|
|
19
20
|
return null;
|
|
@@ -41,7 +42,7 @@ function pickUserAvatar(avatar) {
|
|
|
41
42
|
}
|
|
42
43
|
const SESSION_KEEP_TIME_SECOND = 3600 * 24 * 30;
|
|
43
44
|
const toCacheKey = (sessionId) => {
|
|
44
|
-
return
|
|
45
|
+
return `${RedisKeys_1.RedisKeys.USER_SESSION_PREFIX}${sessionId}`;
|
|
45
46
|
};
|
|
46
47
|
let UserSessionService = class UserSessionService {
|
|
47
48
|
async saveUserSession(sessionInfo) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context } from '@midwayjs/koa';
|
|
2
2
|
import { IScheduleService } from '../interface';
|
|
3
|
-
import { BaseService } from
|
|
3
|
+
import { BaseService } from './base/BaseService';
|
|
4
4
|
export declare class VisitStatService extends BaseService implements IScheduleService {
|
|
5
5
|
protected ctx: Context;
|
|
6
6
|
private curdProService;
|
|
@@ -17,6 +17,8 @@ const SystemTables_1 = require("../models/SystemTables");
|
|
|
17
17
|
const keys_1 = require("../libs/crud-pro/models/keys");
|
|
18
18
|
const bizmodels_1 = require("../models/bizmodels");
|
|
19
19
|
const common_dto_1 = require("../libs/utils/common-dto");
|
|
20
|
+
const global_config_1 = require("../libs/global-config/global-config");
|
|
21
|
+
const RedisKeys_1 = require("../models/RedisKeys");
|
|
20
22
|
// 3天 的秒数
|
|
21
23
|
const EXPIRE_TIME = 3 * 24 * 60 * 60;
|
|
22
24
|
const STAT_TYPES = {
|
|
@@ -27,25 +29,26 @@ const STAT_TYPES = {
|
|
|
27
29
|
let VisitStatService = class VisitStatService extends BaseService_1.BaseService {
|
|
28
30
|
async runBySchedule() {
|
|
29
31
|
const hours = new Date().getHours();
|
|
30
|
-
this.logInfo(
|
|
32
|
+
this.logInfo('[VisitStatService] runBySchedule called, hours = ' + hours);
|
|
31
33
|
return this.flushVisitStatToDB();
|
|
32
34
|
}
|
|
33
35
|
async flushVisitStatToDB() {
|
|
36
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
34
37
|
// 统计昨天的数据。
|
|
35
38
|
const stat_date = new Date(Date.now() - 24 * 3600 * 1000).toISOString().split('T')[0];
|
|
36
|
-
const lockKey =
|
|
39
|
+
const lockKey = `${RedisKeys_1.RedisKeys.VISIT_STAT_LOCK_PREFIX}${stat_date}`;
|
|
37
40
|
// 每天只能执行一次
|
|
38
41
|
const client = this.redisService;
|
|
39
42
|
const nxRes = await client.set(lockKey, 1, 'EX', EXPIRE_TIME, 'NX');
|
|
40
43
|
if (nxRes !== 'OK') {
|
|
41
|
-
this.logInfo(
|
|
42
|
-
return common_dto_1.CommonResult.errorRes(
|
|
44
|
+
this.logInfo('[VisitStatService] flushVisitStatToDB 每天只能执行一次 ');
|
|
45
|
+
return common_dto_1.CommonResult.errorRes('每天只能执行一次');
|
|
43
46
|
}
|
|
44
|
-
this.logInfo(
|
|
47
|
+
this.logInfo('[VisitStatService] flushVisitStatToDB start ');
|
|
45
48
|
let totalCount = 0;
|
|
46
49
|
let successCount = 0;
|
|
47
50
|
try {
|
|
48
|
-
const keys = await client.keys(
|
|
51
|
+
const keys = await client.keys(`${RedisKeys_1.RedisKeys.VISIT_STAT_DATE_PREFIX}${stat_date}::*`);
|
|
49
52
|
// `vs_${date}::${req_host}::${resource_type}::${stat_type}::${resource}`;
|
|
50
53
|
totalCount = keys.length;
|
|
51
54
|
for (const key of keys) {
|
|
@@ -57,7 +60,7 @@ let VisitStatService = class VisitStatService extends BaseService_1.BaseService
|
|
|
57
60
|
const stat_type = parts[3];
|
|
58
61
|
const stat_resource = parts[4];
|
|
59
62
|
let stat_count;
|
|
60
|
-
if (stat_type === STAT_TYPES.uv_ip || stat_type
|
|
63
|
+
if (stat_type === STAT_TYPES.uv_ip || stat_type === STAT_TYPES.uv_uid) {
|
|
61
64
|
stat_count = await client.scard(key);
|
|
62
65
|
}
|
|
63
66
|
else {
|
|
@@ -70,12 +73,12 @@ let VisitStatService = class VisitStatService extends BaseService_1.BaseService
|
|
|
70
73
|
stat_type,
|
|
71
74
|
resource_type,
|
|
72
75
|
stat_count,
|
|
73
|
-
req_host
|
|
74
|
-
}
|
|
76
|
+
req_host,
|
|
77
|
+
},
|
|
75
78
|
}, {
|
|
76
79
|
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_INSERT,
|
|
77
|
-
sqlDatabase:
|
|
78
|
-
|
|
80
|
+
sqlDatabase: SystemDbName,
|
|
81
|
+
sqlDbType: SystemDbType,
|
|
79
82
|
sqlTable: SystemTables_1.SystemTables.sys_visit_stats,
|
|
80
83
|
});
|
|
81
84
|
await client.del(key);
|
|
@@ -92,7 +95,7 @@ let VisitStatService = class VisitStatService extends BaseService_1.BaseService
|
|
|
92
95
|
this.logError('[VisitStatService] flushVisitStatToDB', error);
|
|
93
96
|
console.log('[VisitStatService] flushVisitStatToDB', error);
|
|
94
97
|
}
|
|
95
|
-
this.logInfo(
|
|
98
|
+
this.logInfo('[VisitStatService] flushVisitStatToDB end ');
|
|
96
99
|
return common_dto_1.CommonResult.successRes({ successCount, totalCount });
|
|
97
100
|
}
|
|
98
101
|
/**
|
|
@@ -122,34 +125,24 @@ let VisitStatService = class VisitStatService extends BaseService_1.BaseService
|
|
|
122
125
|
const client = this.redisService;
|
|
123
126
|
const ip = this.ctx.headers['x-real-ip'];
|
|
124
127
|
const userSession = this.ctx.userSession;
|
|
125
|
-
const req_host = ((_b = (_a = this.ctx) === null || _a === void 0 ? void 0 : _a.request) === null || _b === void 0 ? void 0 : _b.host) ||
|
|
128
|
+
const req_host = ((_b = (_a = this.ctx) === null || _a === void 0 ? void 0 : _a.request) === null || _b === void 0 ? void 0 : _b.host) || 'null'; // 域名
|
|
126
129
|
const date = new Date().toISOString().split('T')[0];
|
|
127
130
|
const toDateResourceKey = (stat_type) => {
|
|
128
|
-
return
|
|
131
|
+
return `${RedisKeys_1.RedisKeys.VISIT_STAT_DATE_PREFIX}${date}::${req_host}::${resource_type}::${stat_type}::${resource}`;
|
|
129
132
|
};
|
|
130
133
|
const pv_key = toDateResourceKey(STAT_TYPES.pv);
|
|
131
134
|
const uv_ip_key = toDateResourceKey(STAT_TYPES.uv_ip);
|
|
132
135
|
const uv_uid_key = toDateResourceKey(STAT_TYPES.uv_uid);
|
|
133
136
|
// 统计 PV
|
|
134
|
-
await Promise.all([
|
|
135
|
-
client.incr(pv_key),
|
|
136
|
-
client.expire(pv_key, EXPIRE_TIME)
|
|
137
|
-
]);
|
|
137
|
+
await Promise.all([client.incr(pv_key), client.expire(pv_key, EXPIRE_TIME)]);
|
|
138
138
|
// IP 访问 UV
|
|
139
|
-
await Promise.all([
|
|
140
|
-
client.sadd(uv_ip_key, `${ip}`),
|
|
141
|
-
client.expire(uv_ip_key, EXPIRE_TIME)
|
|
142
|
-
]);
|
|
139
|
+
await Promise.all([client.sadd(uv_ip_key, `${ip}`), client.expire(uv_ip_key, EXPIRE_TIME)]);
|
|
143
140
|
if (userSession && userSession.isLogin()) {
|
|
144
141
|
const accountId = userSession.getSessionInfo().accountId;
|
|
145
142
|
// 统计 UV
|
|
146
|
-
await Promise.all([
|
|
147
|
-
client.sadd(uv_uid_key, accountId),
|
|
148
|
-
client.expire(uv_uid_key, EXPIRE_TIME)
|
|
149
|
-
]);
|
|
143
|
+
await Promise.all([client.sadd(uv_uid_key, accountId), client.expire(uv_uid_key, EXPIRE_TIME)]);
|
|
150
144
|
}
|
|
151
145
|
}
|
|
152
|
-
;
|
|
153
146
|
};
|
|
154
147
|
__decorate([
|
|
155
148
|
(0, core_1.Inject)(),
|
|
@@ -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,226 @@
|
|
|
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 = [AsyncTaskModel_1.SysAsyncTaskStatus.SUCCEEDED, AsyncTaskModel_1.SysAsyncTaskStatus.FAILED, AsyncTaskModel_1.SysAsyncTaskStatus.PART_SUCCEEDED];
|
|
24
|
+
class AsyncTaskRunner {
|
|
25
|
+
constructor() {
|
|
26
|
+
this.isBusy = false;
|
|
27
|
+
this.taskHandlerMap = new Map();
|
|
28
|
+
}
|
|
29
|
+
async executeTaskList(taskList) {
|
|
30
|
+
if (!taskList || taskList.length === 0) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
this.isBusy = true;
|
|
34
|
+
for (let i = 0; i < taskList.length; i++) {
|
|
35
|
+
const taskElement = taskList[i];
|
|
36
|
+
taskElement.task_status = AsyncTaskModel_1.SysAsyncTaskStatus.RUNNING;
|
|
37
|
+
try {
|
|
38
|
+
// 任务状态的设置在自定义的执行器里面。
|
|
39
|
+
await this.executeTask(taskElement);
|
|
40
|
+
// 当前不是终止状态,并且没有异常就设置成成功。
|
|
41
|
+
if (!END_STATUS_LIST.includes(taskElement.task_status)) {
|
|
42
|
+
taskElement.task_status = AsyncTaskModel_1.SysAsyncTaskStatus.SUCCEEDED;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
taskElement.task_status = AsyncTaskModel_1.SysAsyncTaskStatus.FAILED;
|
|
47
|
+
taskElement.error_message = (0, errorToString_1.errorToString)(error);
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
await this.updateTaskStatus(taskElement, {
|
|
51
|
+
task_status: taskElement.task_status,
|
|
52
|
+
error_message: taskElement.error_message,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
schedule_1.ANONYMOUS_CONTEXT.getApp().getCoreLogger().error('executeTaskList error', error);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
this.isBusy = false;
|
|
60
|
+
}
|
|
61
|
+
async executeTask(taskElement) {
|
|
62
|
+
const taskType = taskElement.task_type;
|
|
63
|
+
const taskHandler = this.taskHandlerMap.get(taskType);
|
|
64
|
+
if (!taskHandler) {
|
|
65
|
+
throw new Error('TaskHandler not found , taskType = ' + taskType);
|
|
66
|
+
}
|
|
67
|
+
const updateTaskStatus = (updatePartials) => {
|
|
68
|
+
return this.updateTaskStatus(taskElement, updatePartials);
|
|
69
|
+
};
|
|
70
|
+
await taskHandler.execute({ task: taskElement, updateTaskStatus });
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 更新任务状态或任务进度
|
|
74
|
+
* @param taskElement
|
|
75
|
+
* @param updatePartials
|
|
76
|
+
* @private
|
|
77
|
+
*/
|
|
78
|
+
async updateTaskStatus(taskElement, updatePartials) {
|
|
79
|
+
if (!updatePartials) {
|
|
80
|
+
throw new Error('updatePartials not found');
|
|
81
|
+
}
|
|
82
|
+
return await schedule_1.ANONYMOUS_CONTEXT.runServiceAtAnonymousContext(async (ctx) => {
|
|
83
|
+
const curdProService = await ctx.requestContext.getAsync('curdProService');
|
|
84
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
85
|
+
const res = await curdProService.executeCrudByCfg({
|
|
86
|
+
condition: {
|
|
87
|
+
id: taskElement.id,
|
|
88
|
+
},
|
|
89
|
+
data: updatePartials,
|
|
90
|
+
}, {
|
|
91
|
+
sqlTable: SystemTables_1.SystemTables.sys_async_tasks,
|
|
92
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_UPDATE,
|
|
93
|
+
sqlDatabase: SystemDbName,
|
|
94
|
+
sqlDbType: SystemDbType,
|
|
95
|
+
});
|
|
96
|
+
return res.getResModel().affected;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 获取当前进程可以处理的任务类型。
|
|
101
|
+
*/
|
|
102
|
+
getHandlerTaskTypeList() {
|
|
103
|
+
const keys = this.taskHandlerMap.keys();
|
|
104
|
+
return [...keys];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 业务可以扩展
|
|
109
|
+
*/
|
|
110
|
+
exports.ASYNC_TASK_RUNNER = new AsyncTaskRunner();
|
|
111
|
+
/**
|
|
112
|
+
* Redis锁
|
|
113
|
+
*/
|
|
114
|
+
const ASYNC_TASK_LOCK = RedisKeys_1.RedisKeys.ASYNC_TASK_LOCK;
|
|
115
|
+
const ASYNC_TASK_RUNTIME_OBJ = {
|
|
116
|
+
LAST_CHECK_ASYNC_TASK_UPDATE_TIME: 0,
|
|
117
|
+
};
|
|
118
|
+
let AsyncTaskRunnerService = class AsyncTaskRunnerService extends BaseService_1.BaseService {
|
|
119
|
+
async fetchPendingTasks() {
|
|
120
|
+
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
121
|
+
// 只获取本进程能够处理的任务类型。
|
|
122
|
+
const taskTypeList = exports.ASYNC_TASK_RUNNER.getHandlerTaskTypeList();
|
|
123
|
+
if (taskTypeList.length === 0) {
|
|
124
|
+
return Promise.resolve();
|
|
125
|
+
}
|
|
126
|
+
// 查询等待处理的任务。
|
|
127
|
+
const queryRes = await this.curdProService.executeCrudByCfg({
|
|
128
|
+
condition: {
|
|
129
|
+
task_status: AsyncTaskModel_1.SysAsyncTaskStatus.PENDING,
|
|
130
|
+
task_type: {
|
|
131
|
+
$in: taskTypeList,
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
orderBy: 'id+',
|
|
135
|
+
limit: 10,
|
|
136
|
+
}, {
|
|
137
|
+
sqlTable: SystemTables_1.SystemTables.sys_async_tasks,
|
|
138
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_PAGE,
|
|
139
|
+
sqlDatabase: SystemDbName,
|
|
140
|
+
sqlDbType: SystemDbType,
|
|
141
|
+
});
|
|
142
|
+
const taskList = queryRes.getResRows();
|
|
143
|
+
if (taskList.length === 0) {
|
|
144
|
+
return Promise.resolve();
|
|
145
|
+
}
|
|
146
|
+
const taskIds = taskList.map(elem => elem.id).filter(Boolean);
|
|
147
|
+
// 将状态更新为处理中。防止其它进程重复处理。
|
|
148
|
+
await this.curdProService.executeCrudByCfg({
|
|
149
|
+
condition: {
|
|
150
|
+
id: {
|
|
151
|
+
$in: taskIds,
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
data: {
|
|
155
|
+
task_status: AsyncTaskModel_1.SysAsyncTaskStatus.RUNNING,
|
|
156
|
+
},
|
|
157
|
+
}, {
|
|
158
|
+
sqlTable: SystemTables_1.SystemTables.sys_async_tasks,
|
|
159
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_UPDATE,
|
|
160
|
+
sqlDatabase: SystemDbName,
|
|
161
|
+
sqlDbType: SystemDbType,
|
|
162
|
+
});
|
|
163
|
+
// 开始执行。
|
|
164
|
+
exports.ASYNC_TASK_RUNNER.executeTaskList(taskList).then(() => {
|
|
165
|
+
console.log('ASYNC_TASK_RUNNER finished taskIds ==> ' + JSON.stringify(taskIds));
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
async runBySchedule() {
|
|
169
|
+
// 1. 当前很忙
|
|
170
|
+
if (exports.ASYNC_TASK_RUNNER.isBusy) {
|
|
171
|
+
return Promise.resolve();
|
|
172
|
+
}
|
|
173
|
+
// 2. 发现了新任务
|
|
174
|
+
const isExistNewTask = await this.isExistNewTask();
|
|
175
|
+
if (!isExistNewTask) {
|
|
176
|
+
return Promise.resolve();
|
|
177
|
+
}
|
|
178
|
+
// 这里的过期时间1分钟即可。fetchPendingTasks函数不可能超过一分钟。
|
|
179
|
+
// 因为这里只是从数据库中获取一批任务,放到自己的任务队列里。还没触发执行。
|
|
180
|
+
const lock = await this.redisService.set(ASYNC_TASK_LOCK, 1, 'EX', 60, 'NX');
|
|
181
|
+
if (lock !== 'OK') {
|
|
182
|
+
return Promise.resolve();
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
await this.fetchPendingTasks();
|
|
186
|
+
}
|
|
187
|
+
catch (e) {
|
|
188
|
+
console.error('fetchPendingTasks error', (0, errorToString_1.errorToString)(e));
|
|
189
|
+
}
|
|
190
|
+
await this.redisService.del(ASYNC_TASK_LOCK);
|
|
191
|
+
return Promise.resolve();
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* 是否存在新任务
|
|
195
|
+
* @private
|
|
196
|
+
*/
|
|
197
|
+
async isExistNewTask() {
|
|
198
|
+
// 刚启动,没有检查过。
|
|
199
|
+
if (!ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME) {
|
|
200
|
+
ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME = Date.now();
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
//Redis没有任何内容
|
|
204
|
+
const updateTime = await this.redisService.get(RedisKeys_1.RedisKeys.ASYNC_TASK_UPDATE_TIME);
|
|
205
|
+
if (!updateTime) {
|
|
206
|
+
ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME = Date.now();
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
const updateTimeNumber = Number.parseInt(updateTime, 10);
|
|
210
|
+
const isExistNewTask = updateTimeNumber > ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME;
|
|
211
|
+
ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME = updateTimeNumber;
|
|
212
|
+
return isExistNewTask;
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
__decorate([
|
|
216
|
+
(0, core_1.Inject)(),
|
|
217
|
+
__metadata("design:type", Object)
|
|
218
|
+
], AsyncTaskRunnerService.prototype, "ctx", void 0);
|
|
219
|
+
__decorate([
|
|
220
|
+
(0, core_1.Inject)(),
|
|
221
|
+
__metadata("design:type", CurdProService_1.CurdProService)
|
|
222
|
+
], AsyncTaskRunnerService.prototype, "curdProService", void 0);
|
|
223
|
+
AsyncTaskRunnerService = __decorate([
|
|
224
|
+
(0, core_1.Provide)()
|
|
225
|
+
], AsyncTaskRunnerService);
|
|
226
|
+
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;
|