midway-fatcms 0.0.1-beta.26 → 0.0.1-beta.29

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.
Files changed (188) hide show
  1. package/dist/config/config.default.js +6 -4
  2. package/dist/controller/home.controller.js +2 -1
  3. package/dist/controller/manage/CrudStandardDesignApi.js +8 -8
  4. package/dist/controller/render/AppRenderController.js +2 -1
  5. package/dist/middleware/global.middleware.js +22 -9
  6. package/dist/models/AsyncTaskModel.d.ts +2 -0
  7. package/dist/models/AsyncTaskModel.js +3 -1
  8. package/dist/models/RedisKeys.d.ts +2 -0
  9. package/dist/models/RedisKeys.js +2 -0
  10. package/dist/models/bizmodels.d.ts +1 -0
  11. package/dist/service/UserSessionService.d.ts +21 -0
  12. package/dist/service/UserSessionService.js +71 -1
  13. package/dist/service/WorkbenchService.d.ts +32 -0
  14. package/dist/service/WorkbenchService.js +54 -11
  15. package/dist/service/anyapi/AnyApiSandboxService.js +12 -12
  16. package/dist/service/asyncTask/AsyncTaskRunnerService.d.ts +14 -1
  17. package/dist/service/asyncTask/AsyncTaskRunnerService.js +70 -25
  18. package/dist/service/asyncTask/handler/ExportExcelAsyncTaskHandler.js +1 -1
  19. package/dist/service/asyncTask/handler/ExportExcelByInnerHttpHandler.js +11 -2
  20. package/dist/service/base/RedisCacheService.d.ts +7 -0
  21. package/dist/service/base/RedisCacheService.js +7 -0
  22. package/dist/service/crudstd/CrudStdService.d.ts +0 -6
  23. package/dist/service/crudstd/CrudStdService.js +13 -33
  24. package/package.json +1 -5
  25. package/src/config/config.default.ts +0 -207
  26. package/src/config/seed/aeskey.txt +0 -1
  27. package/src/config/utils.ts +0 -22
  28. package/src/configuration.ts +0 -109
  29. package/src/controller/base/BaseApiController.ts +0 -170
  30. package/src/controller/gateway/AnyApiGatewayController.ts +0 -33
  31. package/src/controller/gateway/AsyncTaskController.ts +0 -157
  32. package/src/controller/gateway/CrudMtdGatewayController.ts +0 -111
  33. package/src/controller/gateway/CrudStdGatewayController.ts +0 -101
  34. package/src/controller/gateway/DocGatewayController.ts +0 -173
  35. package/src/controller/gateway/FileController.ts +0 -109
  36. package/src/controller/gateway/ProxyApiGatewayController.ts +0 -47
  37. package/src/controller/gateway/PublicApiController.ts +0 -142
  38. package/src/controller/gateway/StaticController.ts +0 -298
  39. package/src/controller/helpers.controller.ts +0 -161
  40. package/src/controller/home.controller.ts +0 -64
  41. package/src/controller/manage/AnyApiMangeApi.ts +0 -66
  42. package/src/controller/manage/AppLogMangeApi.ts +0 -53
  43. package/src/controller/manage/AppMangeApi.ts +0 -53
  44. package/src/controller/manage/AppPageMangeApi.ts +0 -52
  45. package/src/controller/manage/AppSchemaHistoryApi.ts +0 -49
  46. package/src/controller/manage/CrudMethodsMangeApi.ts +0 -49
  47. package/src/controller/manage/CrudStandardDesignApi.ts +0 -346
  48. package/src/controller/manage/DataDictManageApi.ts +0 -78
  49. package/src/controller/manage/DeployManageApi.ts +0 -175
  50. package/src/controller/manage/DocLibManageApi.ts +0 -69
  51. package/src/controller/manage/DocManageApi.ts +0 -99
  52. package/src/controller/manage/FileManageApi.ts +0 -45
  53. package/src/controller/manage/LowCodeTplManageApi.ts +0 -52
  54. package/src/controller/manage/MenuManageApi.ts +0 -58
  55. package/src/controller/manage/ProxyApiMangeApi.ts +0 -52
  56. package/src/controller/manage/SuperAdminManageApi.ts +0 -139
  57. package/src/controller/manage/SysConfigMangeApi.ts +0 -95
  58. package/src/controller/manage/SystemInfoManageApi.ts +0 -53
  59. package/src/controller/manage/UserAccountManageApi.ts +0 -94
  60. package/src/controller/manage/WorkbenchMangeApi.ts +0 -72
  61. package/src/controller/myinfo/AuthController.ts +0 -108
  62. package/src/controller/myinfo/MyInfoController.ts +0 -32
  63. package/src/controller/render/AppRenderController.ts +0 -79
  64. package/src/controller/test.controller.ts +0 -37
  65. package/src/filter/default.filter.ts +0 -13
  66. package/src/filter/notfound.filter.ts +0 -10
  67. package/src/index.ts +0 -106
  68. package/src/interface.ts +0 -31
  69. package/src/libs/crud-pro/CrudPro.ts +0 -165
  70. package/src/libs/crud-pro/defaultConfigs.ts +0 -15
  71. package/src/libs/crud-pro/exceptions.ts +0 -124
  72. package/src/libs/crud-pro/interfaces.ts +0 -190
  73. package/src/libs/crud-pro/models/ExecuteContext.ts +0 -120
  74. package/src/libs/crud-pro/models/ExecuteContextFunc.ts +0 -96
  75. package/src/libs/crud-pro/models/FuncContext.ts +0 -21
  76. package/src/libs/crud-pro/models/RequestCfgModel.ts +0 -141
  77. package/src/libs/crud-pro/models/RequestModel.ts +0 -141
  78. package/src/libs/crud-pro/models/ResModel.ts +0 -19
  79. package/src/libs/crud-pro/models/ServiceHub.ts +0 -32
  80. package/src/libs/crud-pro/models/SqlCfgModel.ts +0 -52
  81. package/src/libs/crud-pro/models/SqlSegArg.ts +0 -13
  82. package/src/libs/crud-pro/models/Transaction.ts +0 -73
  83. package/src/libs/crud-pro/models/TransactionMySQL.ts +0 -79
  84. package/src/libs/crud-pro/models/TransactionPostgres.ts +0 -91
  85. package/src/libs/crud-pro/models/TransactionSqlServer.ts +0 -102
  86. package/src/libs/crud-pro/models/keys.ts +0 -159
  87. package/src/libs/crud-pro/services/CrudProCachedCfgService.ts +0 -83
  88. package/src/libs/crud-pro/services/CrudProExecuteFuncService.ts +0 -128
  89. package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +0 -262
  90. package/src/libs/crud-pro/services/CrudProFieldUpdateService.ts +0 -60
  91. package/src/libs/crud-pro/services/CrudProFieldValidateService.ts +0 -180
  92. package/src/libs/crud-pro/services/CrudProGenSqlCondition.ts +0 -354
  93. package/src/libs/crud-pro/services/CrudProGenSqlService.ts +0 -185
  94. package/src/libs/crud-pro/services/CrudProOriginToExecuteSql.ts +0 -393
  95. package/src/libs/crud-pro/services/CrudProServiceBase.ts +0 -94
  96. package/src/libs/crud-pro/services/CrudProTableMetaService.ts +0 -86
  97. package/src/libs/crud-pro/services/CurdProServiceHub.ts +0 -92
  98. package/src/libs/crud-pro/sql.txt +0 -120
  99. package/src/libs/crud-pro/utils/CompareUtils.ts +0 -23
  100. package/src/libs/crud-pro/utils/DatabaseName.ts +0 -60
  101. package/src/libs/crud-pro/utils/DateTimeUtils.ts +0 -20
  102. package/src/libs/crud-pro/utils/MemoryRefreshCache.ts +0 -64
  103. package/src/libs/crud-pro/utils/MessageParseUtils.ts +0 -33
  104. package/src/libs/crud-pro/utils/MixinUtils.ts +0 -285
  105. package/src/libs/crud-pro/utils/ModelUtils.ts +0 -55
  106. package/src/libs/crud-pro/utils/MultiKeyMap.ts +0 -72
  107. package/src/libs/crud-pro/utils/SqlFuncUtils.ts +0 -29
  108. package/src/libs/crud-pro/utils/TypeUtils.ts +0 -188
  109. package/src/libs/crud-pro/utils/ValidateUtils.ts +0 -165
  110. package/src/libs/crud-pro/utils/pool/MySQLUtils.ts +0 -20
  111. package/src/libs/crud-pro/utils/pool/PostgresUtils.ts +0 -22
  112. package/src/libs/crud-pro/utils/pool/SqlServerUtils.ts +0 -22
  113. package/src/libs/crud-pro/utils/sqlConvert/convertColumnName.ts +0 -26
  114. package/src/libs/crud-pro/utils/sqlConvert/convertMix.ts +0 -26
  115. package/src/libs/crud-pro/utils/sqlConvert/convertMsSql.ts +0 -11
  116. package/src/libs/crud-pro/utils/sqlConvert/convertPgSql.ts +0 -11
  117. package/src/libs/crud-pro/utils/sqlConvert/convertPgType.ts +0 -129
  118. package/src/libs/global-config/global-config.ts +0 -78
  119. package/src/libs/utils/common-dto.ts +0 -52
  120. package/src/libs/utils/crypto-utils.ts +0 -50
  121. package/src/libs/utils/errorToString.ts +0 -61
  122. package/src/libs/utils/fatcms-request.ts +0 -103
  123. package/src/libs/utils/functions.ts +0 -73
  124. package/src/libs/utils/ordernum-utils.ts +0 -14
  125. package/src/libs/utils/parseConfig.ts +0 -54
  126. package/src/libs/utils/parseCreateSql.ts +0 -91
  127. package/src/libs/utils/render-utils.ts +0 -184
  128. package/src/middleware/forbidden.middleware.ts +0 -52
  129. package/src/middleware/global.middleware.ts +0 -280
  130. package/src/middleware/permission.middleware.ts +0 -80
  131. package/src/middleware/tx.middleware.ts +0 -30
  132. package/src/models/AsyncTaskModel.ts +0 -82
  133. package/src/models/RedisKeys.ts +0 -13
  134. package/src/models/SystemEntities.ts +0 -115
  135. package/src/models/SystemPerm.ts +0 -105
  136. package/src/models/SystemTables.ts +0 -27
  137. package/src/models/bizmodels.ts +0 -120
  138. package/src/models/contextLogger.ts +0 -132
  139. package/src/models/devops.ts +0 -17
  140. package/src/models/userSession.ts +0 -216
  141. package/src/schedule/anonymousContext.ts +0 -73
  142. package/src/schedule/index.ts +0 -12
  143. package/src/schedule/runSchedule.ts +0 -82
  144. package/src/schedule/scheduleNames.ts +0 -21
  145. package/src/service/AuthService.ts +0 -272
  146. package/src/service/EnumInfoService.ts +0 -130
  147. package/src/service/FileCenterService.ts +0 -395
  148. package/src/service/SysConfigService.ts +0 -37
  149. package/src/service/UserAccountService.ts +0 -107
  150. package/src/service/UserSessionService.ts +0 -78
  151. package/src/service/VisitStatService.ts +0 -166
  152. package/src/service/WorkbenchService.ts +0 -165
  153. package/src/service/anyapi/AnyApiSandboxService.ts +0 -121
  154. package/src/service/anyapi/AnyApiService.ts +0 -186
  155. package/src/service/asyncTask/AsyncTaskRunnerService.ts +0 -266
  156. package/src/service/asyncTask/AsyncTaskService.ts +0 -21
  157. package/src/service/asyncTask/handler/ExcelInfoModel.ts +0 -11
  158. package/src/service/asyncTask/handler/ExportExcelAsyncTaskHandler.ts +0 -245
  159. package/src/service/asyncTask/handler/ExportExcelByInnerHttpHandler.ts +0 -147
  160. package/src/service/asyncTask/handler/ExportExcelByStdCrudHandler.ts +0 -138
  161. package/src/service/base/ApiBaseService.ts +0 -42
  162. package/src/service/base/ApiRateLimiter.ts +0 -59
  163. package/src/service/base/BaseService.ts +0 -100
  164. package/src/service/base/RedisCacheService.ts +0 -38
  165. package/src/service/crudstd/CrudStdActionService.ts +0 -27
  166. package/src/service/crudstd/CrudStdConstant.ts +0 -62
  167. package/src/service/crudstd/CrudStdRelationService.ts +0 -78
  168. package/src/service/crudstd/CrudStdService.ts +0 -283
  169. package/src/service/curd/CrudProQuick.ts +0 -131
  170. package/src/service/curd/CurdMixByAccountService.ts +0 -90
  171. package/src/service/curd/CurdMixByDictService.ts +0 -114
  172. package/src/service/curd/CurdMixByLinkToCustomService.ts +0 -219
  173. package/src/service/curd/CurdMixBySysConfigService.ts +0 -78
  174. package/src/service/curd/CurdMixByWorkbenchService.ts +0 -71
  175. package/src/service/curd/CurdMixService.ts +0 -97
  176. package/src/service/curd/CurdMixUtils.ts +0 -311
  177. package/src/service/curd/CurdProService.ts +0 -229
  178. package/src/service/curd/fixCfgModel.ts +0 -139
  179. package/src/service/proxyapi/ProxyApiLoadService.ts +0 -174
  180. package/src/service/proxyapi/ProxyApiService.ts +0 -262
  181. package/src/service/proxyapi/ProxyApiUtils.ts +0 -32
  182. package/src/service/proxyapi/RouteHandler.ts +0 -8
  183. package/src/service/proxyapi/RouteTrie.ts +0 -74
  184. package/src/service/proxyapi/WeightedRandom.ts +0 -37
  185. package/src/service/proxyapi/WeightedRoundRobin.ts +0 -44
  186. package/src/views/404_app.html +0 -31
  187. package/src/views/404_workbench.html +0 -34
  188. package/src/views/static/favicon.ico +0 -0
@@ -31,10 +31,10 @@ exports.default = (appInfo) => {
31
31
  },
32
32
  bodyParser: {
33
33
  enableTypes: ['json', 'form', 'text', 'xml'],
34
- formLimit: '1mb',
35
- jsonLimit: '1mb',
36
- textLimit: '1mb',
37
- xmlLimit: '1mb',
34
+ formLimit: '10mb',
35
+ jsonLimit: '10mb',
36
+ textLimit: '10mb',
37
+ xmlLimit: '10mb',
38
38
  ignore: [
39
39
  '/ns/gw/proxy/*',
40
40
  '/ns/gw/file/uploadFile',
@@ -179,6 +179,8 @@ exports.default = (appInfo) => {
179
179
  headerKey: 'fatcmsSAEnable',
180
180
  headerSecret: '222',
181
181
  },
182
+ // 用户会话保持时间,单位秒
183
+ fatcmsUserSessionKeepTimeSecond: 3600 * 24 * 30,
182
184
  // 是否启用内置的定时任务
183
185
  fatcmsScheduleService: true,
184
186
  // Excel导出文件的临时目录
@@ -39,7 +39,8 @@ let HomeController = class HomeController extends BaseApiController_1.BaseApiCon
39
39
  package_assets: workbenchInfo.package_assets,
40
40
  fatcmscsrftoken,
41
41
  });
42
- return this.ctx.renderString(html_content, { workbenchInfo, userInfo, utils }, { viewEngine: 'ejs' });
42
+ const query = this.ctx.query || {};
43
+ return this.ctx.renderString(html_content, { workbenchInfo, userInfo, utils, query }, { viewEngine: 'ejs' });
43
44
  }
44
45
  async robots() {
45
46
  return `User-agent: * \nDisallow: /ns/api/manage/`;
@@ -254,14 +254,14 @@ let CrudStandardDesignApi = class CrudStandardDesignApi extends BaseApiControlle
254
254
  throw new exceptions_1.CommonException('DB_NOT_FOUND', '数据库配置没有找到:' + dbName);
255
255
  }
256
256
  const schemaname = 'public';
257
- const columnArraySql = `
258
-
259
- SELECT
260
- *
261
- FROM information_schema.columns
262
- WHERE table_schema = $1 and table_name = $2
263
- ORDER BY ordinal_position;
264
-
257
+ const columnArraySql = `
258
+
259
+ SELECT
260
+ *
261
+ FROM information_schema.columns
262
+ WHERE table_schema = $1 and table_name = $2
263
+ ORDER BY ordinal_position;
264
+
265
265
  `.trim();
266
266
  const dbType = keys_1.SqlDbType.postgres;
267
267
  const columnArray = await this.curdMixService.executeSQL({
@@ -61,7 +61,8 @@ let AppRenderController = class AppRenderController extends BaseApiController_1.
61
61
  package_assets: appInfo.package_assets,
62
62
  fatcmscsrftoken,
63
63
  });
64
- return this.ctx.renderString(html_content, { appInfo, workbenchInfo, userInfo, utils }, { viewEngine: 'ejs' });
64
+ const query = this.ctx.query || {};
65
+ return this.ctx.renderString(html_content, { appInfo, workbenchInfo, userInfo, utils, query }, { viewEngine: 'ejs' });
65
66
  }
66
67
  async isSupportCurrentWorkbench(appInfo) {
67
68
  if (this.isLocalEnv()) {
@@ -37,6 +37,15 @@ function isBlob(obj) {
37
37
  function isStream(obj) {
38
38
  return obj && obj instanceof node_stream_1.Stream;
39
39
  }
40
+ async function getUserSessionService(ctx) {
41
+ return ctx.requestContext.getAsync(UserSessionService_1.UserSessionService);
42
+ }
43
+ async function getWorkbenchService(ctx) {
44
+ return ctx.requestContext.getAsync(WorkbenchService_1.WorkbenchService);
45
+ }
46
+ async function getVisitStatService(ctx) {
47
+ return ctx.requestContext.getAsync(VisitStatService_1.VisitStatService);
48
+ }
40
49
  /**
41
50
  * 专门对ExecuteSqlContext对象进行处理
42
51
  * @param res
@@ -121,15 +130,6 @@ function handleDebugRes(beforeRes, ctx, originRes) {
121
130
  nextRes.debugInfo = debugInfo;
122
131
  return nextRes;
123
132
  }
124
- async function getUserSessionService(ctx) {
125
- return ctx.requestContext.getAsync(UserSessionService_1.UserSessionService);
126
- }
127
- async function getWorkbenchService(ctx) {
128
- return ctx.requestContext.getAsync(WorkbenchService_1.WorkbenchService);
129
- }
130
- async function getVisitStatService(ctx) {
131
- return ctx.requestContext.getAsync(VisitStatService_1.VisitStatService);
132
- }
133
133
  /**
134
134
  * 检查是否是超级管理员
135
135
  * @param ctx
@@ -155,6 +155,12 @@ function checkIsSuperAdmin(ctx, sessionInfo) {
155
155
  }
156
156
  return false;
157
157
  }
158
+ /**
159
+ * 处理调试错误
160
+ * @param e
161
+ * @param ctx
162
+ * @returns
163
+ */
158
164
  function handleDebugError(e, ctx) {
159
165
  ctx.logger.error('GlobalMiddleware', e);
160
166
  let errorStack = null;
@@ -177,6 +183,10 @@ function handleDebugError(e, ctx) {
177
183
  }
178
184
  return res;
179
185
  }
186
+ /**
187
+ * 数据埋点
188
+ * @param ctx
189
+ */
180
190
  async function trackRequest(ctx) {
181
191
  try {
182
192
  const visitStatService = await getVisitStatService(ctx);
@@ -186,6 +196,9 @@ async function trackRequest(ctx) {
186
196
  console.error('trackRequestError', e);
187
197
  }
188
198
  }
199
+ /**
200
+ * 这些路径不需要配置用户信息等操作
201
+ */
189
202
  const excludePathPrefix = ['/ns/static/', '/ns/api/helpers'];
190
203
  /**
191
204
  * 全局中间件
@@ -70,3 +70,5 @@ export interface SysAsyncTaskHandlerConfig {
70
70
  priority?: number;
71
71
  expireSeconds?: number;
72
72
  }
73
+ export declare const HEADER_KEY_RUN_BY_ASYNC_TASK_ID = "run-by-async-task-id";
74
+ export declare const HEADER_KEY_RUN_BY_ASYNC_TASK_WORKBENCH_CODE = "run-by-async-task-workbenchcode";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SysAsyncFileFormat = exports.SysAsyncTaskStatus = void 0;
3
+ exports.HEADER_KEY_RUN_BY_ASYNC_TASK_WORKBENCH_CODE = exports.HEADER_KEY_RUN_BY_ASYNC_TASK_ID = exports.SysAsyncFileFormat = exports.SysAsyncTaskStatus = void 0;
4
4
  var SysAsyncTaskStatus;
5
5
  (function (SysAsyncTaskStatus) {
6
6
  SysAsyncTaskStatus["PENDING"] = "PENDING";
@@ -27,3 +27,5 @@ var SysAsyncFileFormat;
27
27
  SysAsyncFileFormat["PNG"] = "png";
28
28
  SysAsyncFileFormat["JPG"] = "jpg";
29
29
  })(SysAsyncFileFormat = exports.SysAsyncFileFormat || (exports.SysAsyncFileFormat = {}));
30
+ exports.HEADER_KEY_RUN_BY_ASYNC_TASK_ID = 'run-by-async-task-id';
31
+ exports.HEADER_KEY_RUN_BY_ASYNC_TASK_WORKBENCH_CODE = 'run-by-async-task-workbenchcode';
@@ -1,7 +1,9 @@
1
1
  declare const RedisKeys: {
2
2
  ASYNC_TASK_LOCK: string;
3
+ ASYNC_TASK_TIMEOUT_LOCK: string;
3
4
  ASYNC_TASK_UPDATE_TIME: string;
4
5
  USER_SESSION_PREFIX: string;
6
+ USER_SESSION_ASYNC_TASK_ID_PREFIX: string;
5
7
  USER_ACTION_TIME_LIMIT_PREFIX: string;
6
8
  VISIT_STAT_LOCK_PREFIX: string;
7
9
  VISIT_STAT_DATE_PREFIX: string;
@@ -3,8 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RedisKeys = void 0;
4
4
  const RedisKeys = {
5
5
  ASYNC_TASK_LOCK: 'FatAsyncTaskLock',
6
+ ASYNC_TASK_TIMEOUT_LOCK: 'FatAsyncTaskTimeoutLock',
6
7
  ASYNC_TASK_UPDATE_TIME: 'FatAsyncTaskUpdateTime',
7
8
  USER_SESSION_PREFIX: 'FatUserSession_',
9
+ USER_SESSION_ASYNC_TASK_ID_PREFIX: 'FatUserSessionAsyncTaskId_',
8
10
  USER_ACTION_TIME_LIMIT_PREFIX: 'FatUserActionTimeLimit_',
9
11
  VISIT_STAT_LOCK_PREFIX: 'FatVsLock_',
10
12
  VISIT_STAT_DATE_PREFIX: 'FatVsDate_',
@@ -24,6 +24,7 @@ export interface IStdCrudCfgObj {
24
24
  toolbarList?: any[];
25
25
  }
26
26
  export interface ICrudStdAppInfo {
27
+ app_code: string;
27
28
  stdCrudCfgObj?: IStdCrudCfgObj;
28
29
  actionsMap?: any;
29
30
  status: number;
@@ -2,13 +2,34 @@ import { ISessionInfo } from '../models/userSession';
2
2
  export declare class UserSessionService {
3
3
  private ctx;
4
4
  private redisCacheService;
5
+ private curdProService;
6
+ private fatcmsUserSessionKeepTimeSecond;
7
+ /**
8
+ * 获取用户会话保持时间: 单位秒
9
+ * @returns
10
+ */
11
+ private getSessionKeepTimeSecond;
12
+ /**
13
+ * 保存用户会话信息
14
+ * @param sessionInfo
15
+ */
5
16
  saveUserSession(sessionInfo: ISessionInfo): Promise<void>;
6
17
  /**
7
18
  * 移除Session
8
19
  * @param sessionId
9
20
  */
10
21
  removeUserSession(sessionId: string): Promise<any>;
22
+ /**
23
+ * 获取用户会话信息
24
+ * @param sessionId
25
+ * @returns
26
+ */
11
27
  private getCurrentUserSessionForMiddleware1;
28
+ /**
29
+ * 从异步任务队列中获取当时用户的Session信息
30
+ * @param asyncTaskId
31
+ */
32
+ private getCurrentUserSessionByAsyncTaskId;
12
33
  /**
13
34
  * 专门给中间件点调用的
14
35
  */
@@ -15,6 +15,11 @@ const functions_1 = require("../libs/utils/functions");
15
15
  const userSession_1 = require("../models/userSession");
16
16
  const RedisCacheService_1 = require("./base/RedisCacheService");
17
17
  const RedisKeys_1 = require("../models/RedisKeys");
18
+ const AsyncTaskModel_1 = require("../models/AsyncTaskModel");
19
+ const CurdProService_1 = require("./curd/CurdProService");
20
+ const keys_1 = require("../libs/crud-pro/models/keys");
21
+ const SystemTables_1 = require("../models/SystemTables");
22
+ const global_config_1 = require("../libs/global-config/global-config");
18
23
  function pickUserAvatar(avatar) {
19
24
  if (!avatar) {
20
25
  return null;
@@ -45,10 +50,25 @@ const toCacheKey = (sessionId) => {
45
50
  return `${RedisKeys_1.RedisKeys.USER_SESSION_PREFIX}${sessionId}`;
46
51
  };
47
52
  let UserSessionService = class UserSessionService {
53
+ /**
54
+ * 获取用户会话保持时间: 单位秒
55
+ * @returns
56
+ */
57
+ getSessionKeepTimeSecond() {
58
+ if (typeof this.fatcmsUserSessionKeepTimeSecond === 'number' && this.fatcmsUserSessionKeepTimeSecond > 0) {
59
+ return this.fatcmsUserSessionKeepTimeSecond;
60
+ }
61
+ return SESSION_KEEP_TIME_SECOND;
62
+ }
63
+ /**
64
+ * 保存用户会话信息
65
+ * @param sessionInfo
66
+ */
48
67
  async saveUserSession(sessionInfo) {
49
68
  sessionInfo.avatar = pickUserAvatar(sessionInfo.avatar);
50
69
  const sessionId = sessionInfo.sessionId;
51
- await this.redisCacheService.setJsonObject(toCacheKey(sessionId), sessionInfo, SESSION_KEEP_TIME_SECOND);
70
+ const keepTime = this.getSessionKeepTimeSecond();
71
+ await this.redisCacheService.setJsonObject(toCacheKey(sessionId), sessionInfo, keepTime);
52
72
  }
53
73
  /**
54
74
  * 移除Session
@@ -57,16 +77,58 @@ let UserSessionService = class UserSessionService {
57
77
  async removeUserSession(sessionId) {
58
78
  return await this.redisCacheService.removeItem(toCacheKey(sessionId));
59
79
  }
80
+ /**
81
+ * 获取用户会话信息
82
+ * @param sessionId
83
+ * @returns
84
+ */
60
85
  async getCurrentUserSessionForMiddleware1(sessionId) {
61
86
  if (!sessionId) {
62
87
  return null;
63
88
  }
64
89
  return await this.redisCacheService.getJsonObject(toCacheKey(sessionId));
65
90
  }
91
+ /**
92
+ * 从异步任务队列中获取当时用户的Session信息
93
+ * @param asyncTaskId
94
+ */
95
+ async getCurrentUserSessionByAsyncTaskId(asyncTaskId) {
96
+ const taskSessionCacheKey = `${RedisKeys_1.RedisKeys.USER_SESSION_ASYNC_TASK_ID_PREFIX}${asyncTaskId}`;
97
+ const loadSessionInfo = async () => {
98
+ const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
99
+ const asyncTaskRes = await this.curdProService.executeCrudByCfg({
100
+ columns: ['id', 'created_user_session'],
101
+ condition: {
102
+ id: asyncTaskId,
103
+ }
104
+ }, {
105
+ sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_ONE,
106
+ sqlTable: SystemTables_1.SystemTables.sys_async_tasks,
107
+ sqlDatabase: SystemDbName,
108
+ sqlDbType: SystemDbType,
109
+ });
110
+ const asyncTaskObj = asyncTaskRes.getOneObj();
111
+ if (!asyncTaskObj) {
112
+ return null;
113
+ }
114
+ return (0, functions_1.parseJsonObject)(asyncTaskObj.created_user_session);
115
+ };
116
+ let sessionInfo1 = await this.redisCacheService.getJsonObject(taskSessionCacheKey);
117
+ if (!sessionInfo1) {
118
+ sessionInfo1 = await loadSessionInfo();
119
+ await this.redisCacheService.setJsonObject(taskSessionCacheKey, sessionInfo1, 3600); // 只缓存一小时即可
120
+ }
121
+ return sessionInfo1;
122
+ }
66
123
  /**
67
124
  * 专门给中间件点调用的
68
125
  */
69
126
  async getCurrentUserSessionForMiddleware() {
127
+ // 先从Header中获取:异步任务队列的任务ID
128
+ const asyncTaskId = this.ctx.headers[AsyncTaskModel_1.HEADER_KEY_RUN_BY_ASYNC_TASK_ID];
129
+ if (asyncTaskId && typeof asyncTaskId === 'string') {
130
+ return this.getCurrentUserSessionByAsyncTaskId(asyncTaskId);
131
+ }
70
132
  const cookies = this.ctx.cookies;
71
133
  const sessionId = cookies.get(userSession_1.SESSION_ID_KEY, userSession_1.sessionCookieCfg);
72
134
  return this.getCurrentUserSessionForMiddleware1(sessionId);
@@ -80,6 +142,14 @@ __decorate([
80
142
  (0, core_1.Inject)(),
81
143
  __metadata("design:type", RedisCacheService_1.RedisCacheService)
82
144
  ], UserSessionService.prototype, "redisCacheService", void 0);
145
+ __decorate([
146
+ (0, core_1.Inject)(),
147
+ __metadata("design:type", CurdProService_1.CurdProService)
148
+ ], UserSessionService.prototype, "curdProService", void 0);
149
+ __decorate([
150
+ (0, core_1.Config)('fatcmsUserSessionKeepTimeSecond'),
151
+ __metadata("design:type", Number)
152
+ ], UserSessionService.prototype, "fatcmsUserSessionKeepTimeSecond", void 0);
83
153
  UserSessionService = __decorate([
84
154
  (0, core_1.Provide)()
85
155
  ], UserSessionService);
@@ -7,13 +7,45 @@ export declare class WorkbenchService extends BaseService implements IScheduleSe
7
7
  private curdProService;
8
8
  clearCache(): void;
9
9
  runBySchedule(): Promise<void>;
10
+ /**
11
+ * 获取所有站点列表
12
+ * @param isForceRefresh 是否强制刷新缓存
13
+ * @returns
14
+ */
10
15
  getAllWorkbenchInfoList(isForceRefresh?: boolean): Promise<IWorkbenchEntity[]>;
16
+ /**
17
+ * 获取所有站点列表,以map的形式返回。其中key为站点域名,value为站点信息
18
+ * @param isForceRefresh 是否强制刷新缓存
19
+ * @returns
20
+ */
11
21
  getAllWorkbenchInfoMap(isForceRefresh?: boolean): Promise<Record<any, IWorkbenchEntity>>;
22
+ /**
23
+ * 检查站点编码是否匹配
24
+ * @param workbench_code_array 站点编码数组
25
+ * @param workbench_code 站点编码
26
+ * @returns
27
+ */
12
28
  isMatchWorkbenchCode(workbench_code_array: string | string[], workbench_code: string): boolean;
29
+ /**
30
+ * 根据站点编码获取站点信息
31
+ * @param workbenchCode 站点编码
32
+ * @returns
33
+ */
34
+ private getWorkbenchInfoByCode;
35
+ /**
36
+ * 根据域名获取站点信息
37
+ * @param host 域名
38
+ * @returns
39
+ */
40
+ private getWorkbenchInfoByHost;
13
41
  /**
14
42
  * 获取当前请求的域名所对应的站点信息
15
43
  */
16
44
  getCurrentHostWorkbenchInfo(): Promise<IWorkbenchEntity>;
45
+ /**
46
+ * 获取当前请求的域名
47
+ * @returns
48
+ */
17
49
  private getCurrentHost;
18
50
  isSupportCurrentWorkbench(workbench_code_array: string | string[]): Promise<boolean>;
19
51
  isSupportCurrentHostForForMiddleware(): Promise<string | boolean>;
@@ -21,6 +21,7 @@ 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
23
  const global_config_1 = require("../libs/global-config/global-config");
24
+ const AsyncTaskModel_1 = require("../models/AsyncTaskModel");
24
25
  //
25
26
  // const lruCache = new LRUCache<string, any>({
26
27
  // max: 500,
@@ -38,6 +39,11 @@ let WorkbenchService = class WorkbenchService extends BaseService_1.BaseService
38
39
  async runBySchedule() {
39
40
  await this.getAllWorkbenchInfoMap(true);
40
41
  }
42
+ /**
43
+ * 获取所有站点列表
44
+ * @param isForceRefresh 是否强制刷新缓存
45
+ * @returns
46
+ */
41
47
  async getAllWorkbenchInfoList(isForceRefresh) {
42
48
  const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
43
49
  let listData = lruCache.get(CACHE_KEY_WORKBENCH_LIST);
@@ -54,6 +60,11 @@ let WorkbenchService = class WorkbenchService extends BaseService_1.BaseService
54
60
  }
55
61
  return listData;
56
62
  }
63
+ /**
64
+ * 获取所有站点列表,以map的形式返回。其中key为站点域名,value为站点信息
65
+ * @param isForceRefresh 是否强制刷新缓存
66
+ * @returns
67
+ */
57
68
  async getAllWorkbenchInfoMap(isForceRefresh) {
58
69
  let listData;
59
70
  let domainMap = lruCache.get(CACHE_KEY_DOMAIN_MAP);
@@ -67,6 +78,12 @@ let WorkbenchService = class WorkbenchService extends BaseService_1.BaseService
67
78
  }
68
79
  return domainMap;
69
80
  }
81
+ /**
82
+ * 检查站点编码是否匹配
83
+ * @param workbench_code_array 站点编码数组
84
+ * @param workbench_code 站点编码
85
+ * @returns
86
+ */
70
87
  isMatchWorkbenchCode(workbench_code_array, workbench_code) {
71
88
  if (workbench_code_array === '*') {
72
89
  return true;
@@ -76,6 +93,30 @@ let WorkbenchService = class WorkbenchService extends BaseService_1.BaseService
76
93
  .filter(Boolean);
77
94
  return supportWorkbenchArray.includes('*') || supportWorkbenchArray.includes(workbench_code);
78
95
  }
96
+ /**
97
+ * 根据站点编码获取站点信息
98
+ * @param workbenchCode 站点编码
99
+ * @returns
100
+ */
101
+ async getWorkbenchInfoByCode(workbenchCode) {
102
+ const list = await this.getAllWorkbenchInfoList();
103
+ for (let i = 0; i < list.length; i++) {
104
+ const workbenchInfo = list[i];
105
+ if (workbenchInfo.workbench_code === workbenchCode) {
106
+ return workbenchInfo;
107
+ }
108
+ }
109
+ return null;
110
+ }
111
+ /**
112
+ * 根据域名获取站点信息
113
+ * @param host 域名
114
+ * @returns
115
+ */
116
+ async getWorkbenchInfoByHost(host) {
117
+ const domainMap = await this.getAllWorkbenchInfoMap();
118
+ return domainMap[host];
119
+ }
79
120
  /**
80
121
  * 获取当前请求的域名所对应的站点信息
81
122
  */
@@ -86,24 +127,26 @@ let WorkbenchService = class WorkbenchService extends BaseService_1.BaseService
86
127
  if (!debugWorkbenchCode) {
87
128
  throw new exceptions_1.CommonException('本地环境调试时需要使用ModHeader浏览器插件,指定站点编码');
88
129
  }
89
- const list = await this.getAllWorkbenchInfoList();
90
- for (let i = 0; i < list.length; i++) {
91
- const workbenchInfo = list[i];
92
- if (workbenchInfo.workbench_code === debugWorkbenchCode) {
93
- return workbenchInfo;
94
- }
95
- }
96
- return null;
130
+ return await this.getWorkbenchInfoByCode(debugWorkbenchCode);
131
+ }
132
+ // 内部异步任务,指定了workbench code
133
+ const asyncTaskWorkbenchCode = this.ctx.headers[AsyncTaskModel_1.HEADER_KEY_RUN_BY_ASYNC_TASK_WORKBENCH_CODE];
134
+ if (asyncTaskWorkbenchCode && typeof asyncTaskWorkbenchCode === 'string') {
135
+ return await this.getWorkbenchInfoByCode(asyncTaskWorkbenchCode);
97
136
  }
98
137
  //正式环境: 根据域名获取站点配置
99
138
  const host = this.getCurrentHost();
100
- const domainMap = await this.getAllWorkbenchInfoMap();
101
- const workbenchInfo = domainMap[host];
139
+ const workbenchInfo = await this.getWorkbenchInfoByHost(host);
102
140
  if (workbenchInfo) {
103
141
  return workbenchInfo;
104
142
  }
105
- return domainMap['*']; // 最后兜底
143
+ // 最后兜底
144
+ return await this.getWorkbenchInfoByHost("*");
106
145
  }
146
+ /**
147
+ * 获取当前请求的域名
148
+ * @returns
149
+ */
107
150
  getCurrentHost() {
108
151
  const host = this.ctx.request.host;
109
152
  if (!host) {
@@ -74,18 +74,18 @@ let AnyApiSandboxService = class AnyApiSandboxService extends BaseService_1.Base
74
74
  };
75
75
  const nextLine100 = new Array(10).fill('\n').join('');
76
76
  const bindCode = this.toBindCodeString('httpController', newContext, 'sandbox');
77
- const code = `
78
- (async () => {
79
- ${nextLine100}${func_code}; // 必须有一个 class HttpController { async handleRequest(params){} }
80
- ${nextLine100}
81
- try {
82
- const httpController = new HttpController();
83
- ${bindCode}
84
- const res = await httpController.handleRequest(sandbox.allParams.params);
85
- sandbox.returnSuccess(res);
86
- } catch (e) {
87
- sandbox.returnError(e)
88
- }
77
+ const code = `
78
+ (async () => {
79
+ ${nextLine100}${func_code}; // 必须有一个 class HttpController { async handleRequest(params){} }
80
+ ${nextLine100}
81
+ try {
82
+ const httpController = new HttpController();
83
+ ${bindCode}
84
+ const res = await httpController.handleRequest(sandbox.allParams.params);
85
+ sandbox.returnSuccess(res);
86
+ } catch (e) {
87
+ sandbox.returnError(e)
88
+ }
89
89
  })(); `;
90
90
  try {
91
91
  const script = getCompiledScript(anyApi, code);
@@ -26,8 +26,21 @@ export declare const ASYNC_TASK_RUNNER: AsyncTaskRunner;
26
26
  export declare class AsyncTaskRunnerService extends BaseService implements IScheduleService {
27
27
  protected ctx: Context;
28
28
  private curdProService;
29
- fetchPendingTasks(): Promise<void>;
29
+ /**
30
+ * 定时任务执行
31
+ */
30
32
  runBySchedule(): Promise<void>;
33
+ /**
34
+ * 更新超时的任务状态
35
+ * @returns
36
+ */
37
+ private runByScheduleForTimeoutTasks;
38
+ /**
39
+ * 检查是否有新任务。如果有,就从数据库中获取一批任务,放到自己的任务队列里。
40
+ * @returns
41
+ */
42
+ private runByScheduleForPendingTasks;
43
+ fetchPendingTasks(): Promise<void>;
31
44
  /**
32
45
  * 是否存在新任务
33
46
  * @private