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.
Files changed (265) hide show
  1. package/.eslintrc.json +12 -0
  2. package/.prettierrc.js +4 -0
  3. package/README.md +7 -0
  4. package/dist/config/config.default.js +52 -15
  5. package/dist/configuration.d.ts +1 -0
  6. package/dist/configuration.js +33 -8
  7. package/dist/controller/base/BaseApiController.d.ts +1 -1
  8. package/dist/controller/base/BaseApiController.js +14 -6
  9. package/dist/controller/gateway/AsyncTaskController.d.ts +14 -0
  10. package/dist/controller/gateway/AsyncTaskController.js +108 -0
  11. package/dist/controller/gateway/CrudMtdGatewayController.d.ts +3 -3
  12. package/dist/controller/gateway/CrudMtdGatewayController.js +9 -6
  13. package/dist/controller/gateway/CrudStdGatewayController.d.ts +5 -5
  14. package/dist/controller/gateway/DocGatewayController.js +14 -9
  15. package/dist/controller/gateway/PublicApiController.js +4 -6
  16. package/dist/controller/gateway/StaticController.d.ts +2 -0
  17. package/dist/controller/gateway/StaticController.js +59 -40
  18. package/dist/controller/helpers.controller.d.ts +1 -1
  19. package/dist/controller/home.controller.js +2 -2
  20. package/dist/controller/manage/AnyApiMangeApi.js +2 -2
  21. package/dist/controller/manage/AppLogMangeApi.js +2 -2
  22. package/dist/controller/manage/AppMangeApi.js +2 -2
  23. package/dist/controller/manage/AppPageMangeApi.js +2 -2
  24. package/dist/controller/manage/AppSchemaHistoryApi.js +2 -2
  25. package/dist/controller/manage/CrudMethodsMangeApi.js +2 -2
  26. package/dist/controller/manage/CrudStandardDesignApi.d.ts +1 -1
  27. package/dist/controller/manage/CrudStandardDesignApi.js +78 -75
  28. package/dist/controller/manage/DataDictManageApi.d.ts +1 -1
  29. package/dist/controller/manage/DataDictManageApi.js +1 -1
  30. package/dist/controller/manage/DeployManageApi.d.ts +1 -1
  31. package/dist/controller/manage/DeployManageApi.js +38 -34
  32. package/dist/controller/manage/DocLibManageApi.js +2 -2
  33. package/dist/controller/manage/DocManageApi.js +2 -2
  34. package/dist/controller/manage/FileManageApi.js +1 -1
  35. package/dist/controller/manage/LowCodeTplManageApi.js +2 -2
  36. package/dist/controller/manage/MenuManageApi.js +2 -2
  37. package/dist/controller/manage/ProxyApiMangeApi.js +2 -2
  38. package/dist/controller/manage/SuperAdminManageApi.d.ts +2 -2
  39. package/dist/controller/manage/SuperAdminManageApi.js +12 -8
  40. package/dist/controller/manage/SysConfigMangeApi.d.ts +1 -1
  41. package/dist/controller/manage/SysConfigMangeApi.js +8 -6
  42. package/dist/controller/manage/SystemInfoManageApi.d.ts +1 -1
  43. package/dist/controller/manage/SystemInfoManageApi.js +7 -1
  44. package/dist/controller/manage/UserAccountManageApi.d.ts +2 -2
  45. package/dist/controller/manage/UserAccountManageApi.js +7 -2
  46. package/dist/controller/manage/WorkbenchMangeApi.js +3 -3
  47. package/dist/controller/myinfo/AuthController.d.ts +0 -4
  48. package/dist/controller/myinfo/AuthController.js +1 -54
  49. package/dist/controller/render/AppRenderController.js +10 -4
  50. package/dist/controller/test.controller.d.ts +1 -1
  51. package/dist/controller/test.controller.js +5 -5
  52. package/dist/index.d.ts +34 -4
  53. package/dist/index.js +34 -4
  54. package/dist/libs/crud-pro/CrudPro.d.ts +1 -0
  55. package/dist/libs/crud-pro/CrudPro.js +5 -0
  56. package/dist/libs/crud-pro/defaultConfigs.js +2 -0
  57. package/dist/libs/crud-pro/interfaces.d.ts +7 -1
  58. package/dist/libs/crud-pro/models/ExecuteContext.d.ts +2 -1
  59. package/dist/libs/crud-pro/models/ExecuteContextFunc.d.ts +8 -1
  60. package/dist/libs/crud-pro/models/ExecuteContextFunc.js +8 -0
  61. package/dist/libs/crud-pro/models/RequestCfgModel.d.ts +1 -1
  62. package/dist/libs/crud-pro/models/ResModel.d.ts +16 -0
  63. package/dist/libs/crud-pro/models/ResModel.js +2 -0
  64. package/dist/libs/crud-pro/models/SqlCfgModel.d.ts +1 -1
  65. package/dist/libs/crud-pro/models/TransactionSqlServer.js +1 -1
  66. package/dist/libs/crud-pro/services/CrudProCachedCfgService.d.ts +1 -0
  67. package/dist/libs/crud-pro/services/CrudProCachedCfgService.js +27 -15
  68. package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +13 -17
  69. package/dist/libs/crud-pro/services/CrudProGenSqlCondition.d.ts +1 -1
  70. package/dist/libs/crud-pro/services/CrudProGenSqlCondition.js +10 -12
  71. package/dist/libs/crud-pro/services/CrudProGenSqlService.js +14 -23
  72. package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.js +7 -6
  73. package/dist/libs/crud-pro/services/CrudProServiceBase.d.ts +2 -6
  74. package/dist/libs/crud-pro/services/CrudProServiceBase.js +3 -2
  75. package/dist/libs/crud-pro/services/CrudProTableMetaService.d.ts +1 -0
  76. package/dist/libs/crud-pro/services/CrudProTableMetaService.js +32 -7
  77. package/dist/libs/crud-pro/utils/DatabaseName.js +24 -3
  78. package/dist/libs/crud-pro/utils/MixinUtils.js +1 -1
  79. package/dist/libs/crud-pro/utils/ValidateUtils.js +1 -1
  80. package/dist/libs/crud-pro/utils/sqlConvert/convertColumnName.js +2 -2
  81. package/dist/libs/crud-pro/utils/sqlConvert/convertMix.d.ts +3 -0
  82. package/dist/libs/crud-pro/utils/sqlConvert/convertMix.js +22 -0
  83. package/dist/libs/global-config/global-config.d.ts +45 -0
  84. package/dist/libs/global-config/global-config.js +33 -0
  85. package/dist/libs/utils/errorToString.d.ts +2 -0
  86. package/dist/libs/utils/errorToString.js +57 -0
  87. package/dist/libs/utils/fatcms-request.js +2 -2
  88. package/dist/middleware/forbidden.middleware.js +4 -20
  89. package/dist/middleware/global.middleware.js +8 -1
  90. package/dist/models/AsyncTaskModel.d.ts +69 -0
  91. package/dist/models/AsyncTaskModel.js +26 -0
  92. package/dist/models/RedisKeys.d.ts +8 -0
  93. package/dist/models/RedisKeys.js +11 -0
  94. package/dist/models/SystemTables.d.ts +1 -3
  95. package/dist/models/SystemTables.js +2 -4
  96. package/dist/schedule/anonymousContext.d.ts +13 -0
  97. package/dist/schedule/anonymousContext.js +59 -0
  98. package/dist/schedule/index.d.ts +4 -3
  99. package/dist/schedule/index.js +8 -67
  100. package/dist/schedule/runSchedule.d.ts +15 -0
  101. package/dist/schedule/runSchedule.js +68 -0
  102. package/dist/schedule/scheduleNames.d.ts +13 -0
  103. package/dist/schedule/scheduleNames.js +17 -0
  104. package/dist/service/AuthService.js +8 -5
  105. package/dist/service/EnumInfoService.js +7 -4
  106. package/dist/service/FileCenterService.js +13 -9
  107. package/dist/service/SysConfigService.js +4 -2
  108. package/dist/service/UserAccountService.js +10 -6
  109. package/dist/service/UserSessionService.js +2 -1
  110. package/dist/service/VisitStatService.d.ts +1 -1
  111. package/dist/service/VisitStatService.js +20 -27
  112. package/dist/service/WorkbenchService.js +4 -2
  113. package/dist/service/anyapi/AnyApiService.js +4 -2
  114. package/dist/service/asyncTask/AsyncTaskRunnerService.d.ts +37 -0
  115. package/dist/service/asyncTask/AsyncTaskRunnerService.js +232 -0
  116. package/dist/service/asyncTask/AsyncTaskService.d.ts +7 -0
  117. package/dist/service/asyncTask/AsyncTaskService.js +34 -0
  118. package/dist/service/crudstd/CrudStdService.d.ts +2 -1
  119. package/dist/service/crudstd/CrudStdService.js +48 -3
  120. package/dist/service/curd/CrudProQuick.d.ts +24 -0
  121. package/dist/service/curd/CrudProQuick.js +105 -0
  122. package/dist/service/curd/CurdMixByAccountService.js +12 -6
  123. package/dist/service/curd/CurdMixByDictService.js +4 -2
  124. package/dist/service/curd/CurdMixByLinkToCustomService.d.ts +10 -1
  125. package/dist/service/curd/CurdMixByLinkToCustomService.js +72 -24
  126. package/dist/service/curd/CurdMixBySysConfigService.js +4 -2
  127. package/dist/service/curd/CurdMixByWorkbenchService.js +4 -2
  128. package/dist/service/curd/CurdMixService.d.ts +1 -1
  129. package/dist/service/curd/CurdMixService.js +2 -2
  130. package/dist/service/curd/CurdMixUtils.d.ts +7 -0
  131. package/dist/service/curd/CurdMixUtils.js +65 -28
  132. package/dist/service/curd/CurdProService.d.ts +2 -10
  133. package/dist/service/curd/CurdProService.js +31 -146
  134. package/dist/service/curd/fixCfgModel.d.ts +3 -0
  135. package/dist/service/curd/fixCfgModel.js +107 -0
  136. package/dist/service/proxyapi/ProxyApiLoadService.js +7 -4
  137. package/dist/views/404_app.html +31 -0
  138. package/dist/views/404_workbench.html +34 -0
  139. package/dist/views/static/favicon.ico +0 -0
  140. package/package.json +9 -2
  141. package/src/config/config.default.ts +58 -27
  142. package/src/configuration.ts +42 -9
  143. package/src/controller/base/BaseApiController.ts +26 -19
  144. package/src/controller/gateway/AnyApiGatewayController.ts +1 -1
  145. package/src/controller/gateway/AsyncTaskController.ts +83 -0
  146. package/src/controller/gateway/CrudMtdGatewayController.ts +17 -13
  147. package/src/controller/gateway/CrudStdGatewayController.ts +4 -4
  148. package/src/controller/gateway/DocGatewayController.ts +25 -17
  149. package/src/controller/gateway/FileController.ts +8 -9
  150. package/src/controller/gateway/ProxyApiGatewayController.ts +4 -4
  151. package/src/controller/gateway/PublicApiController.ts +19 -22
  152. package/src/controller/gateway/StaticController.ts +234 -242
  153. package/src/controller/helpers.controller.ts +1 -1
  154. package/src/controller/home.controller.ts +8 -15
  155. package/src/controller/manage/AnyApiMangeApi.ts +11 -11
  156. package/src/controller/manage/AppLogMangeApi.ts +5 -5
  157. package/src/controller/manage/AppMangeApi.ts +7 -7
  158. package/src/controller/manage/AppPageMangeApi.ts +5 -5
  159. package/src/controller/manage/AppSchemaHistoryApi.ts +3 -3
  160. package/src/controller/manage/CrudMethodsMangeApi.ts +5 -5
  161. package/src/controller/manage/CrudStandardDesignApi.ts +106 -113
  162. package/src/controller/manage/DataDictManageApi.ts +5 -5
  163. package/src/controller/manage/DeployManageApi.ts +85 -89
  164. package/src/controller/manage/DocLibManageApi.ts +5 -5
  165. package/src/controller/manage/DocManageApi.ts +10 -10
  166. package/src/controller/manage/FileManageApi.ts +1 -1
  167. package/src/controller/manage/LowCodeTplManageApi.ts +2 -2
  168. package/src/controller/manage/MenuManageApi.ts +10 -15
  169. package/src/controller/manage/ProxyApiMangeApi.ts +2 -2
  170. package/src/controller/manage/SuperAdminManageApi.ts +14 -13
  171. package/src/controller/manage/SysConfigMangeApi.ts +11 -11
  172. package/src/controller/manage/SystemInfoManageApi.ts +11 -6
  173. package/src/controller/manage/UserAccountManageApi.ts +10 -4
  174. package/src/controller/manage/WorkbenchMangeApi.ts +8 -8
  175. package/src/controller/myinfo/AuthController.ts +6 -72
  176. package/src/controller/render/AppRenderController.ts +24 -21
  177. package/src/controller/test.controller.ts +18 -18
  178. package/src/index.ts +38 -4
  179. package/src/libs/crud-pro/CrudPro.ts +7 -0
  180. package/src/libs/crud-pro/defaultConfigs.ts +2 -0
  181. package/src/libs/crud-pro/interfaces.ts +10 -3
  182. package/src/libs/crud-pro/models/ExecuteContext.ts +3 -3
  183. package/src/libs/crud-pro/models/ExecuteContextFunc.ts +11 -1
  184. package/src/libs/crud-pro/models/RequestCfgModel.ts +1 -1
  185. package/src/libs/crud-pro/models/RequestModel.ts +1 -1
  186. package/src/libs/crud-pro/models/ResModel.ts +19 -0
  187. package/src/libs/crud-pro/models/SqlCfgModel.ts +2 -2
  188. package/src/libs/crud-pro/models/Transaction.ts +8 -9
  189. package/src/libs/crud-pro/models/TransactionPostgres.ts +1 -1
  190. package/src/libs/crud-pro/models/TransactionSqlServer.ts +8 -13
  191. package/src/libs/crud-pro/services/CrudProCachedCfgService.ts +32 -23
  192. package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +38 -54
  193. package/src/libs/crud-pro/services/CrudProGenSqlCondition.ts +26 -45
  194. package/src/libs/crud-pro/services/CrudProGenSqlService.ts +23 -40
  195. package/src/libs/crud-pro/services/CrudProOriginToExecuteSql.ts +25 -29
  196. package/src/libs/crud-pro/services/CrudProServiceBase.ts +5 -9
  197. package/src/libs/crud-pro/services/CrudProTableMetaService.ts +36 -9
  198. package/src/libs/crud-pro/utils/DatabaseName.ts +35 -15
  199. package/src/libs/crud-pro/utils/DateTimeUtils.ts +2 -2
  200. package/src/libs/crud-pro/utils/MixinUtils.ts +1 -1
  201. package/src/libs/crud-pro/utils/ValidateUtils.ts +1 -3
  202. package/src/libs/crud-pro/utils/pool/MySQLUtils.ts +1 -1
  203. package/src/libs/crud-pro/utils/pool/PostgresUtils.ts +3 -3
  204. package/src/libs/crud-pro/utils/pool/SqlServerUtils.ts +3 -3
  205. package/src/libs/crud-pro/utils/sqlConvert/convertColumnName.ts +2 -2
  206. package/src/libs/crud-pro/utils/sqlConvert/convertMix.ts +26 -0
  207. package/src/libs/global-config/global-config.ts +78 -0
  208. package/src/libs/utils/crypto-utils.ts +2 -4
  209. package/src/libs/utils/errorToString.ts +61 -0
  210. package/src/libs/utils/fatcms-request.ts +9 -21
  211. package/src/libs/utils/ordernum-utils.ts +2 -6
  212. package/src/libs/utils/parseConfig.ts +7 -15
  213. package/src/middleware/forbidden.middleware.ts +6 -25
  214. package/src/middleware/global.middleware.ts +18 -16
  215. package/src/models/AsyncTaskModel.ts +79 -0
  216. package/src/models/RedisKeys.ts +13 -0
  217. package/src/models/SystemTables.ts +1 -4
  218. package/src/models/bizmodels.ts +1 -2
  219. package/src/schedule/anonymousContext.ts +79 -0
  220. package/src/schedule/index.ts +11 -72
  221. package/src/schedule/runSchedule.ts +83 -0
  222. package/src/schedule/scheduleNames.ts +21 -0
  223. package/src/service/AuthService.ts +13 -8
  224. package/src/service/EnumInfoService.ts +8 -3
  225. package/src/service/FileCenterService.ts +12 -6
  226. package/src/service/SysConfigService.ts +10 -6
  227. package/src/service/UserAccountService.ts +14 -4
  228. package/src/service/UserSessionService.ts +5 -4
  229. package/src/service/VisitStatService.ts +57 -70
  230. package/src/service/WorkbenchService.ts +7 -2
  231. package/src/service/anyapi/AnyApiService.ts +11 -8
  232. package/src/service/asyncTask/AsyncTaskRunnerService.ts +255 -0
  233. package/src/service/asyncTask/AsyncTaskService.ts +21 -0
  234. package/src/service/base/BaseService.ts +2 -2
  235. package/src/service/crudstd/CrudStdService.ts +60 -5
  236. package/src/service/curd/CrudProQuick.ts +137 -0
  237. package/src/service/curd/CurdMixByAccountService.ts +14 -6
  238. package/src/service/curd/CurdMixByDictService.ts +8 -2
  239. package/src/service/curd/CurdMixByLinkToCustomService.ts +101 -50
  240. package/src/service/curd/CurdMixBySysConfigService.ts +7 -2
  241. package/src/service/curd/CurdMixByWorkbenchService.ts +6 -2
  242. package/src/service/curd/CurdMixService.ts +3 -3
  243. package/src/service/curd/CurdMixUtils.ts +82 -39
  244. package/src/service/curd/CurdProService.ts +45 -189
  245. package/src/service/curd/fixCfgModel.ts +139 -0
  246. package/src/service/proxyapi/ProxyApiLoadService.ts +12 -3
  247. package/src/views/404_app.html +31 -0
  248. package/src/views/404_workbench.html +34 -0
  249. package/src/views/static/favicon.ico +0 -0
  250. package/tsconfig.json +32 -0
  251. package/dist/controller/medstatistic/MedAdminController.d.ts +0 -35
  252. package/dist/controller/medstatistic/MedAdminController.js +0 -205
  253. package/dist/controller/medstatistic/MedClientController.d.ts +0 -28
  254. package/dist/controller/medstatistic/MedClientController.js +0 -188
  255. package/dist/controller/medstatistic/MedMessageService.d.ts +0 -19
  256. package/dist/controller/medstatistic/MedMessageService.js +0 -95
  257. package/dist/controller/medstatistic/MedScoreService.d.ts +0 -21
  258. package/dist/controller/medstatistic/MedScoreService.js +0 -107
  259. package/dist/controller/medstatistic/constants.d.ts +0 -32
  260. package/dist/controller/medstatistic/constants.js +0 -43
  261. package/src/controller/medstatistic/MedAdminController.ts +0 -221
  262. package/src/controller/medstatistic/MedClientController.ts +0 -188
  263. package/src/controller/medstatistic/MedMessageService.ts +0 -89
  264. package/src/controller/medstatistic/MedScoreService.ts +0 -108
  265. 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 "./functions";
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 dataSource.map((item: any) => {
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') || path.endsWith('/.git/config'));
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({"content-type": "text/html; charset=utf-8"});
43
+ ctx.set({ 'content-type': 'text/html; charset=utf-8' });
63
44
  ctx.status = 404;
64
- ctx.body = "404!404!404!重要的事情说三遍!"
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 '../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';
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 "../service/VisitStatService";
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
- return !(path.startsWith('/ns/static/'));
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';
@@ -85,5 +85,4 @@ export interface IVisitorExt extends IVisitor {
85
85
  accountType: string;
86
86
  }
87
87
 
88
-
89
- export const FILE_GET_TYPES = ['thumbnail','preview', 'download'];
88
+ export const FILE_GET_TYPES = ['thumbnail', 'preview', 'download'];
@@ -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
+ }
@@ -1,73 +1,12 @@
1
- import * as koa from '@midwayjs/koa';
2
- import { IScheduleService } from '../interface';
3
- import { ContextLogger } from '../models/contextLogger';
4
- import { Transaction } from '../libs/crud-pro/models/Transaction';
5
- import {ISessionInfo, SYS_ACCOUNT_TYPE, UserSessionInfo} from '../models/userSession';
6
- import { IWorkbenchEntity } from '../models/SystemEntities';
7
-
8
- const scheduleUserInfo:ISessionInfo = {
9
- nickName: 'schedule_user',
10
- avatar: '',
11
- roleCodes: [],
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 {SystemDbName, SystemDbType, SystemTables} from '../models/SystemTables';
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
- sqlDdType: SystemDbType,
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
- sqlDdType: SystemDbType,
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