midway-fatcms 0.0.1-beta.55 → 0.0.1-beta.56

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 (497) hide show
  1. package/.eslintrc.json +14 -14
  2. package/.prettierrc.js +4 -4
  3. package/README.md +8 -8
  4. package/dist/config/config.default.d.ts +3 -3
  5. package/dist/config/config.default.js +160 -160
  6. package/dist/config/utils.d.ts +1 -1
  7. package/dist/config/utils.js +23 -23
  8. package/dist/configuration.d.ts +7 -7
  9. package/dist/configuration.js +113 -113
  10. package/dist/controller/base/BaseApiController.d.ts +37 -37
  11. package/dist/controller/base/BaseApiController.js +164 -164
  12. package/dist/controller/gateway/AnyApiGatewayController.d.ts +13 -13
  13. package/dist/controller/gateway/AnyApiGatewayController.js +55 -55
  14. package/dist/controller/gateway/AsyncTaskController.d.ts +20 -20
  15. package/dist/controller/gateway/AsyncTaskController.js +181 -181
  16. package/dist/controller/gateway/CrudMtdGatewayController.d.ts +21 -21
  17. package/dist/controller/gateway/CrudMtdGatewayController.js +122 -119
  18. package/dist/controller/gateway/CrudStdGatewayController.d.ts +38 -38
  19. package/dist/controller/gateway/CrudStdGatewayController.js +129 -129
  20. package/dist/controller/gateway/DocGatewayController.d.ts +27 -27
  21. package/dist/controller/gateway/DocGatewayController.js +179 -179
  22. package/dist/controller/gateway/FileController.d.ts +26 -26
  23. package/dist/controller/gateway/FileController.js +129 -129
  24. package/dist/controller/gateway/ProxyApiGatewayController.d.ts +18 -18
  25. package/dist/controller/gateway/ProxyApiGatewayController.js +78 -78
  26. package/dist/controller/gateway/PublicApiController.d.ts +27 -27
  27. package/dist/controller/gateway/PublicApiController.js +162 -162
  28. package/dist/controller/gateway/StaticController.d.ts +23 -23
  29. package/dist/controller/gateway/StaticController.js +286 -286
  30. package/dist/controller/helpers.controller.d.ts +39 -39
  31. package/dist/controller/helpers.controller.js +188 -188
  32. package/dist/controller/home.controller.d.ts +9 -9
  33. package/dist/controller/home.controller.js +72 -72
  34. package/dist/controller/manage/AnyApiMangeApi.d.ts +10 -10
  35. package/dist/controller/manage/AnyApiMangeApi.js +98 -98
  36. package/dist/controller/manage/AppLogMangeApi.d.ts +10 -10
  37. package/dist/controller/manage/AppLogMangeApi.js +88 -88
  38. package/dist/controller/manage/AppMangeApi.d.ts +10 -10
  39. package/dist/controller/manage/AppMangeApi.js +88 -88
  40. package/dist/controller/manage/AppPageMangeApi.d.ts +10 -10
  41. package/dist/controller/manage/AppPageMangeApi.js +87 -87
  42. package/dist/controller/manage/AppSchemaHistoryApi.d.ts +10 -10
  43. package/dist/controller/manage/AppSchemaHistoryApi.js +83 -83
  44. package/dist/controller/manage/CrudMethodsMangeApi.d.ts +10 -10
  45. package/dist/controller/manage/CrudMethodsMangeApi.js +84 -84
  46. package/dist/controller/manage/CrudStandardDesignApi.d.ts +46 -46
  47. package/dist/controller/manage/CrudStandardDesignApi.js +395 -395
  48. package/dist/controller/manage/DataDictManageApi.d.ts +15 -15
  49. package/dist/controller/manage/DataDictManageApi.js +133 -133
  50. package/dist/controller/manage/DeployManageApi.d.ts +19 -19
  51. package/dist/controller/manage/DeployManageApi.js +180 -180
  52. package/dist/controller/manage/DocLibManageApi.d.ts +10 -10
  53. package/dist/controller/manage/DocLibManageApi.js +104 -104
  54. package/dist/controller/manage/DocManageApi.d.ts +11 -11
  55. package/dist/controller/manage/DocManageApi.js +130 -130
  56. package/dist/controller/manage/FileManageApi.d.ts +13 -13
  57. package/dist/controller/manage/FileManageApi.js +77 -77
  58. package/dist/controller/manage/LowCodeTplManageApi.d.ts +13 -13
  59. package/dist/controller/manage/LowCodeTplManageApi.js +86 -86
  60. package/dist/controller/manage/MenuManageApi.d.ts +10 -10
  61. package/dist/controller/manage/MenuManageApi.js +93 -93
  62. package/dist/controller/manage/ProxyApiMangeApi.d.ts +10 -10
  63. package/dist/controller/manage/ProxyApiMangeApi.js +87 -87
  64. package/dist/controller/manage/SuperAdminManageApi.d.ts +24 -24
  65. package/dist/controller/manage/SuperAdminManageApi.js +153 -153
  66. package/dist/controller/manage/SysConfigMangeApi.d.ts +11 -11
  67. package/dist/controller/manage/SysConfigMangeApi.js +126 -126
  68. package/dist/controller/manage/SystemInfoManageApi.d.ts +12 -12
  69. package/dist/controller/manage/SystemInfoManageApi.js +72 -72
  70. package/dist/controller/manage/UserAccountManageApi.d.ts +14 -14
  71. package/dist/controller/manage/UserAccountManageApi.js +129 -129
  72. package/dist/controller/manage/WorkbenchMangeApi.d.ts +11 -11
  73. package/dist/controller/manage/WorkbenchMangeApi.js +103 -103
  74. package/dist/controller/myinfo/AuthController.d.ts +33 -33
  75. package/dist/controller/myinfo/AuthController.js +136 -136
  76. package/dist/controller/myinfo/MyInfoController.d.ts +13 -13
  77. package/dist/controller/myinfo/MyInfoController.js +51 -51
  78. package/dist/controller/render/AppRenderController.d.ts +11 -11
  79. package/dist/controller/render/AppRenderController.js +92 -92
  80. package/dist/controller/test.controller.d.ts +8 -8
  81. package/dist/controller/test.controller.js +51 -51
  82. package/dist/filter/default.filter.d.ts +7 -7
  83. package/dist/filter/default.filter.js +23 -23
  84. package/dist/filter/notfound.filter.d.ts +5 -5
  85. package/dist/filter/notfound.filter.js +20 -20
  86. package/dist/index.d.ts +103 -103
  87. package/dist/index.js +121 -121
  88. package/dist/interface.d.ts +27 -27
  89. package/dist/interface.js +3 -3
  90. package/dist/libs/crud-pro/CrudPro.d.ts +37 -37
  91. package/dist/libs/crud-pro/CrudPro.js +136 -136
  92. package/dist/libs/crud-pro/defaultConfigs.d.ts +4 -4
  93. package/dist/libs/crud-pro/defaultConfigs.js +15 -15
  94. package/dist/libs/crud-pro/exceptions.d.ts +104 -104
  95. package/dist/libs/crud-pro/exceptions.js +117 -117
  96. package/dist/libs/crud-pro/interfaces.d.ts +163 -163
  97. package/dist/libs/crud-pro/interfaces.js +12 -12
  98. package/dist/libs/crud-pro/models/ExecuteContext.d.ts +49 -49
  99. package/dist/libs/crud-pro/models/ExecuteContext.js +79 -79
  100. package/dist/libs/crud-pro/models/ExecuteContextFunc.d.ts +38 -38
  101. package/dist/libs/crud-pro/models/ExecuteContextFunc.js +72 -72
  102. package/dist/libs/crud-pro/models/FuncContext.d.ts +18 -18
  103. package/dist/libs/crud-pro/models/FuncContext.js +6 -6
  104. package/dist/libs/crud-pro/models/RequestCfgModel.d.ts +65 -65
  105. package/dist/libs/crud-pro/models/RequestCfgModel.js +81 -81
  106. package/dist/libs/crud-pro/models/RequestModel.d.ts +25 -25
  107. package/dist/libs/crud-pro/models/RequestModel.js +113 -113
  108. package/dist/libs/crud-pro/models/ResModel.d.ts +16 -16
  109. package/dist/libs/crud-pro/models/ResModel.js +2 -2
  110. package/dist/libs/crud-pro/models/ServiceHub.d.ts +20 -20
  111. package/dist/libs/crud-pro/models/ServiceHub.js +2 -2
  112. package/dist/libs/crud-pro/models/SqlCfgModel.d.ts +22 -22
  113. package/dist/libs/crud-pro/models/SqlCfgModel.js +40 -40
  114. package/dist/libs/crud-pro/models/SqlSegArg.d.ts +6 -6
  115. package/dist/libs/crud-pro/models/SqlSegArg.js +12 -12
  116. package/dist/libs/crud-pro/models/Transaction.d.ts +30 -30
  117. package/dist/libs/crud-pro/models/Transaction.js +74 -74
  118. package/dist/libs/crud-pro/models/TransactionMySQL.d.ts +28 -28
  119. package/dist/libs/crud-pro/models/TransactionMySQL.js +76 -76
  120. package/dist/libs/crud-pro/models/TransactionPostgres.d.ts +28 -28
  121. package/dist/libs/crud-pro/models/TransactionPostgres.js +85 -85
  122. package/dist/libs/crud-pro/models/TransactionSqlServer.d.ts +34 -34
  123. package/dist/libs/crud-pro/models/TransactionSqlServer.js +92 -92
  124. package/dist/libs/crud-pro/models/keys.d.ts +106 -106
  125. package/dist/libs/crud-pro/models/keys.js +149 -149
  126. package/dist/libs/crud-pro/services/CrudProCachedCfgService.d.ts +11 -11
  127. package/dist/libs/crud-pro/services/CrudProCachedCfgService.js +73 -73
  128. package/dist/libs/crud-pro/services/CrudProExecuteFuncService.d.ts +9 -9
  129. package/dist/libs/crud-pro/services/CrudProExecuteFuncService.js +112 -112
  130. package/dist/libs/crud-pro/services/CrudProExecuteSqlService.d.ts +17 -17
  131. package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +225 -225
  132. package/dist/libs/crud-pro/services/CrudProFieldUpdateService.d.ts +9 -9
  133. package/dist/libs/crud-pro/services/CrudProFieldUpdateService.js +51 -51
  134. package/dist/libs/crud-pro/services/CrudProFieldValidateService.d.ts +13 -13
  135. package/dist/libs/crud-pro/services/CrudProFieldValidateService.js +148 -148
  136. package/dist/libs/crud-pro/services/CrudProGenSqlCondition.d.ts +24 -24
  137. package/dist/libs/crud-pro/services/CrudProGenSqlCondition.js +340 -340
  138. package/dist/libs/crud-pro/services/CrudProGenSqlService.d.ts +25 -25
  139. package/dist/libs/crud-pro/services/CrudProGenSqlService.js +165 -165
  140. package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.d.ts +32 -32
  141. package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.js +334 -334
  142. package/dist/libs/crud-pro/services/CrudProServiceBase.d.ts +24 -24
  143. package/dist/libs/crud-pro/services/CrudProServiceBase.js +90 -90
  144. package/dist/libs/crud-pro/services/CrudProTableMetaService.d.ts +9 -9
  145. package/dist/libs/crud-pro/services/CrudProTableMetaService.js +72 -72
  146. package/dist/libs/crud-pro/services/CurdProServiceHub.d.ts +32 -32
  147. package/dist/libs/crud-pro/services/CurdProServiceHub.js +64 -64
  148. package/dist/libs/crud-pro/utils/CompareUtils.d.ts +9 -9
  149. package/dist/libs/crud-pro/utils/CompareUtils.js +25 -25
  150. package/dist/libs/crud-pro/utils/DatabaseName.d.ts +9 -9
  151. package/dist/libs/crud-pro/utils/DatabaseName.js +50 -50
  152. package/dist/libs/crud-pro/utils/DateTimeUtils.d.ts +7 -7
  153. package/dist/libs/crud-pro/utils/DateTimeUtils.js +21 -21
  154. package/dist/libs/crud-pro/utils/MemoryRefreshCache.d.ts +19 -19
  155. package/dist/libs/crud-pro/utils/MemoryRefreshCache.js +47 -47
  156. package/dist/libs/crud-pro/utils/MessageParseUtils.d.ts +5 -5
  157. package/dist/libs/crud-pro/utils/MessageParseUtils.js +33 -33
  158. package/dist/libs/crud-pro/utils/MixinUtils.d.ts +39 -39
  159. package/dist/libs/crud-pro/utils/MixinUtils.js +255 -255
  160. package/dist/libs/crud-pro/utils/ModelUtils.d.ts +11 -11
  161. package/dist/libs/crud-pro/utils/ModelUtils.js +49 -49
  162. package/dist/libs/crud-pro/utils/MultiKeyMap.d.ts +11 -11
  163. package/dist/libs/crud-pro/utils/MultiKeyMap.js +63 -63
  164. package/dist/libs/crud-pro/utils/SqlFuncUtils.d.ts +5 -5
  165. package/dist/libs/crud-pro/utils/SqlFuncUtils.js +29 -29
  166. package/dist/libs/crud-pro/utils/TypeUtils.d.ts +40 -40
  167. package/dist/libs/crud-pro/utils/TypeUtils.js +166 -166
  168. package/dist/libs/crud-pro/utils/ValidateUtils.d.ts +3 -3
  169. package/dist/libs/crud-pro/utils/ValidateUtils.js +165 -165
  170. package/dist/libs/crud-pro/utils/pool/MySQLUtils.d.ts +3 -3
  171. package/dist/libs/crud-pro/utils/pool/MySQLUtils.js +19 -19
  172. package/dist/libs/crud-pro/utils/pool/PostgresUtils.d.ts +3 -3
  173. package/dist/libs/crud-pro/utils/pool/PostgresUtils.js +20 -20
  174. package/dist/libs/crud-pro/utils/pool/SqlServerUtils.d.ts +3 -3
  175. package/dist/libs/crud-pro/utils/pool/SqlServerUtils.js +20 -20
  176. package/dist/libs/crud-pro/utils/sqlConvert/convertColumnName.d.ts +4 -4
  177. package/dist/libs/crud-pro/utils/sqlConvert/convertColumnName.js +21 -21
  178. package/dist/libs/crud-pro/utils/sqlConvert/convertMix.d.ts +3 -3
  179. package/dist/libs/crud-pro/utils/sqlConvert/convertMix.js +22 -22
  180. package/dist/libs/crud-pro/utils/sqlConvert/convertMsSql.d.ts +2 -2
  181. package/dist/libs/crud-pro/utils/sqlConvert/convertMsSql.js +11 -11
  182. package/dist/libs/crud-pro/utils/sqlConvert/convertPgSql.d.ts +2 -2
  183. package/dist/libs/crud-pro/utils/sqlConvert/convertPgSql.js +11 -11
  184. package/dist/libs/crud-pro/utils/sqlConvert/convertPgType.d.ts +2 -2
  185. package/dist/libs/crud-pro/utils/sqlConvert/convertPgType.js +128 -128
  186. package/dist/libs/global-config/global-config.d.ts +69 -60
  187. package/dist/libs/global-config/global-config.js +36 -35
  188. package/dist/libs/utils/base64.d.ts +9 -9
  189. package/dist/libs/utils/base64.js +42 -42
  190. package/dist/libs/utils/common-dto.d.ts +18 -18
  191. package/dist/libs/utils/common-dto.js +40 -40
  192. package/dist/libs/utils/crypto-utils.d.ts +3 -3
  193. package/dist/libs/utils/crypto-utils.js +46 -46
  194. package/dist/libs/utils/errorToString.d.ts +2 -2
  195. package/dist/libs/utils/errorToString.js +57 -57
  196. package/dist/libs/utils/fatcms-request.d.ts +30 -30
  197. package/dist/libs/utils/fatcms-request.js +104 -104
  198. package/dist/libs/utils/functions.d.ts +5 -5
  199. package/dist/libs/utils/functions.js +72 -72
  200. package/dist/libs/utils/ordernum-utils.d.ts +2 -2
  201. package/dist/libs/utils/ordernum-utils.js +13 -13
  202. package/dist/libs/utils/parseConfig.d.ts +7 -7
  203. package/dist/libs/utils/parseConfig.js +44 -44
  204. package/dist/libs/utils/parseCreateSql.d.ts +10 -10
  205. package/dist/libs/utils/parseCreateSql.js +87 -87
  206. package/dist/libs/utils/render-utils.d.ts +28 -28
  207. package/dist/libs/utils/render-utils.js +135 -135
  208. package/dist/middleware/forbidden.middleware.d.ts +10 -10
  209. package/dist/middleware/forbidden.middleware.js +54 -54
  210. package/dist/middleware/global.middleware.d.ts +10 -10
  211. package/dist/middleware/global.middleware.js +266 -266
  212. package/dist/middleware/permission.middleware.d.ts +18 -18
  213. package/dist/middleware/permission.middleware.js +74 -74
  214. package/dist/middleware/rediscache.middleware.d.ts +3 -3
  215. package/dist/middleware/rediscache.middleware.js +77 -77
  216. package/dist/middleware/redislock.middleware.d.ts +7 -7
  217. package/dist/middleware/redislock.middleware.js +72 -72
  218. package/dist/middleware/tx.middleware.d.ts +9 -9
  219. package/dist/middleware/tx.middleware.js +40 -40
  220. package/dist/models/AsyncTaskModel.d.ts +74 -74
  221. package/dist/models/AsyncTaskModel.js +31 -31
  222. package/dist/models/RedisKeys.d.ts +15 -15
  223. package/dist/models/RedisKeys.js +18 -18
  224. package/dist/models/SystemEntities.d.ts +105 -105
  225. package/dist/models/SystemEntities.js +9 -9
  226. package/dist/models/SystemPerm.d.ts +95 -95
  227. package/dist/models/SystemPerm.js +100 -100
  228. package/dist/models/SystemTables.d.ts +25 -25
  229. package/dist/models/SystemTables.js +28 -28
  230. package/dist/models/bizmodels.d.ts +99 -99
  231. package/dist/models/bizmodels.js +39 -39
  232. package/dist/models/contextLogger.d.ts +25 -25
  233. package/dist/models/contextLogger.js +112 -112
  234. package/dist/models/devops.d.ts +12 -12
  235. package/dist/models/devops.js +19 -19
  236. package/dist/models/userSession.d.ts +62 -62
  237. package/dist/models/userSession.js +165 -165
  238. package/dist/schedule/anonymousContext.d.ts +14 -14
  239. package/dist/schedule/anonymousContext.js +59 -59
  240. package/dist/schedule/index.d.ts +4 -4
  241. package/dist/schedule/index.js +10 -10
  242. package/dist/schedule/runSchedule.d.ts +12 -12
  243. package/dist/schedule/runSchedule.js +68 -68
  244. package/dist/schedule/scheduleNames.d.ts +13 -13
  245. package/dist/schedule/scheduleNames.js +17 -17
  246. package/dist/service/AuthService.d.ts +71 -71
  247. package/dist/service/AuthService.js +259 -259
  248. package/dist/service/EnumInfoService.d.ts +30 -30
  249. package/dist/service/EnumInfoService.js +127 -127
  250. package/dist/service/FileCenterService.d.ts +43 -43
  251. package/dist/service/FileCenterService.js +351 -351
  252. package/dist/service/SysConfigService.d.ts +7 -7
  253. package/dist/service/SysConfigService.js +47 -47
  254. package/dist/service/UserAccountService.d.ts +23 -23
  255. package/dist/service/UserAccountService.js +107 -107
  256. package/dist/service/UserSessionService.d.ts +38 -38
  257. package/dist/service/UserSessionService.js +157 -157
  258. package/dist/service/VisitStatService.d.ts +14 -14
  259. package/dist/service/VisitStatService.js +158 -158
  260. package/dist/service/WorkbenchService.d.ts +53 -53
  261. package/dist/service/WorkbenchService.js +211 -211
  262. package/dist/service/anyapi/AnyApiSandboxService.d.ts +15 -15
  263. package/dist/service/anyapi/AnyApiSandboxService.js +110 -110
  264. package/dist/service/anyapi/AnyApiService.d.ts +27 -27
  265. package/dist/service/anyapi/AnyApiService.js +181 -181
  266. package/dist/service/asyncTask/AsyncTaskRunnerService.d.ts +50 -50
  267. package/dist/service/asyncTask/AsyncTaskRunnerService.js +287 -287
  268. package/dist/service/asyncTask/AsyncTaskService.d.ts +7 -7
  269. package/dist/service/asyncTask/AsyncTaskService.js +34 -34
  270. package/dist/service/asyncTask/handler/ExcelInfoModel.d.ts +10 -10
  271. package/dist/service/asyncTask/handler/ExcelInfoModel.js +2 -2
  272. package/dist/service/asyncTask/handler/ExportExcelAsyncTaskHandler.d.ts +7 -7
  273. package/dist/service/asyncTask/handler/ExportExcelAsyncTaskHandler.js +216 -216
  274. package/dist/service/asyncTask/handler/ExportExcelByInnerHttpHandler.d.ts +36 -36
  275. package/dist/service/asyncTask/handler/ExportExcelByInnerHttpHandler.js +141 -141
  276. package/dist/service/asyncTask/handler/ExportExcelByStdCrudHandler.d.ts +46 -46
  277. package/dist/service/asyncTask/handler/ExportExcelByStdCrudHandler.js +135 -135
  278. package/dist/service/base/ApiBaseService.d.ts +15 -15
  279. package/dist/service/base/ApiBaseService.js +50 -50
  280. package/dist/service/base/ApiRateLimiter.d.ts +10 -10
  281. package/dist/service/base/ApiRateLimiter.js +51 -51
  282. package/dist/service/base/BaseService.d.ts +41 -41
  283. package/dist/service/base/BaseService.js +101 -101
  284. package/dist/service/base/RedisCacheService.d.ts +20 -20
  285. package/dist/service/base/RedisCacheService.js +57 -57
  286. package/dist/service/crudstd/CrudStdActionService.d.ts +17 -17
  287. package/dist/service/crudstd/CrudStdActionService.js +32 -32
  288. package/dist/service/crudstd/CrudStdConstant.d.ts +58 -58
  289. package/dist/service/crudstd/CrudStdConstant.js +64 -64
  290. package/dist/service/crudstd/CrudStdRelationService.d.ts +10 -10
  291. package/dist/service/crudstd/CrudStdRelationService.js +112 -112
  292. package/dist/service/crudstd/CrudStdService.d.ts +68 -68
  293. package/dist/service/crudstd/CrudStdService.js +347 -347
  294. package/dist/service/curd/CrudProQuick.d.ts +44 -44
  295. package/dist/service/curd/CrudProQuick.js +147 -147
  296. package/dist/service/curd/CurdMixByAccountService.d.ts +9 -9
  297. package/dist/service/curd/CurdMixByAccountService.js +92 -92
  298. package/dist/service/curd/CurdMixByDictService.d.ts +13 -13
  299. package/dist/service/curd/CurdMixByDictService.js +114 -114
  300. package/dist/service/curd/CurdMixByLinkToCustomService.d.ts +31 -31
  301. package/dist/service/curd/CurdMixByLinkToCustomService.js +203 -203
  302. package/dist/service/curd/CurdMixBySysConfigService.d.ts +9 -9
  303. package/dist/service/curd/CurdMixBySysConfigService.js +80 -80
  304. package/dist/service/curd/CurdMixByWorkbenchService.d.ts +10 -10
  305. package/dist/service/curd/CurdMixByWorkbenchService.js +78 -78
  306. package/dist/service/curd/CurdMixService.d.ts +28 -28
  307. package/dist/service/curd/CurdMixService.js +100 -100
  308. package/dist/service/curd/CurdMixUtils.d.ts +51 -51
  309. package/dist/service/curd/CurdMixUtils.js +277 -277
  310. package/dist/service/curd/CurdProService.d.ts +32 -32
  311. package/dist/service/curd/CurdProService.js +212 -212
  312. package/dist/service/curd/fixCfgModel.d.ts +3 -3
  313. package/dist/service/curd/fixCfgModel.js +104 -104
  314. package/dist/service/proxyapi/ProxyApiLoadService.d.ts +21 -21
  315. package/dist/service/proxyapi/ProxyApiLoadService.js +167 -167
  316. package/dist/service/proxyapi/ProxyApiService.d.ts +61 -61
  317. package/dist/service/proxyapi/ProxyApiService.js +294 -294
  318. package/dist/service/proxyapi/ProxyApiUtils.d.ts +15 -15
  319. package/dist/service/proxyapi/ProxyApiUtils.js +34 -34
  320. package/dist/service/proxyapi/RouteHandler.d.ts +5 -5
  321. package/dist/service/proxyapi/RouteHandler.js +9 -9
  322. package/dist/service/proxyapi/RouteTrie.d.ts +12 -12
  323. package/dist/service/proxyapi/RouteTrie.js +63 -63
  324. package/dist/service/proxyapi/WeightedRandom.d.ts +9 -9
  325. package/dist/service/proxyapi/WeightedRandom.js +31 -31
  326. package/dist/service/proxyapi/WeightedRoundRobin.d.ts +8 -8
  327. package/dist/service/proxyapi/WeightedRoundRobin.js +32 -32
  328. package/index.d.ts +10 -10
  329. package/package.json +87 -81
  330. package/src/config/config.default.ts +179 -0
  331. package/src/config/seed/aeskey.txt +1 -0
  332. package/src/config/utils.ts +22 -0
  333. package/src/configuration.ts +109 -0
  334. package/src/controller/base/BaseApiController.ts +170 -0
  335. package/src/controller/gateway/AnyApiGatewayController.ts +1 -0
  336. package/src/controller/gateway/AsyncTaskController.ts +157 -0
  337. package/src/controller/gateway/CrudMtdGatewayController.ts +116 -0
  338. package/src/controller/gateway/CrudStdGatewayController.ts +87 -0
  339. package/src/controller/gateway/DocGatewayController.ts +173 -0
  340. package/src/controller/gateway/FileController.ts +109 -0
  341. package/src/controller/gateway/ProxyApiGatewayController.ts +47 -0
  342. package/src/controller/gateway/PublicApiController.ts +140 -0
  343. package/src/controller/gateway/StaticController.ts +296 -0
  344. package/src/controller/helpers.controller.ts +161 -0
  345. package/src/controller/home.controller.ts +66 -0
  346. package/src/controller/manage/AnyApiMangeApi.ts +66 -0
  347. package/src/controller/manage/AppLogMangeApi.ts +53 -0
  348. package/src/controller/manage/AppMangeApi.ts +53 -0
  349. package/src/controller/manage/AppPageMangeApi.ts +52 -0
  350. package/src/controller/manage/AppSchemaHistoryApi.ts +49 -0
  351. package/src/controller/manage/CrudMethodsMangeApi.ts +49 -0
  352. package/src/controller/manage/CrudStandardDesignApi.ts +406 -0
  353. package/src/controller/manage/DataDictManageApi.ts +78 -0
  354. package/src/controller/manage/DeployManageApi.ts +175 -0
  355. package/src/controller/manage/DocLibManageApi.ts +69 -0
  356. package/src/controller/manage/DocManageApi.ts +99 -0
  357. package/src/controller/manage/FileManageApi.ts +45 -0
  358. package/src/controller/manage/LowCodeTplManageApi.ts +52 -0
  359. package/src/controller/manage/MenuManageApi.ts +58 -0
  360. package/src/controller/manage/ProxyApiMangeApi.ts +52 -0
  361. package/src/controller/manage/SuperAdminManageApi.ts +139 -0
  362. package/src/controller/manage/SysConfigMangeApi.ts +95 -0
  363. package/src/controller/manage/SystemInfoManageApi.ts +53 -0
  364. package/src/controller/manage/UserAccountManageApi.ts +94 -0
  365. package/src/controller/manage/WorkbenchMangeApi.ts +72 -0
  366. package/src/controller/myinfo/AuthController.ts +108 -0
  367. package/src/controller/myinfo/MyInfoController.ts +32 -0
  368. package/src/controller/render/AppRenderController.ts +81 -0
  369. package/src/controller/test.controller.ts +37 -0
  370. package/src/filter/default.filter.ts +13 -0
  371. package/src/filter/notfound.filter.ts +10 -0
  372. package/src/index.ts +107 -0
  373. package/src/interface.ts +31 -0
  374. package/src/libs/crud-pro/CrudPro.ts +165 -0
  375. package/src/libs/crud-pro/defaultConfigs.ts +15 -0
  376. package/src/libs/crud-pro/exceptions.ts +124 -0
  377. package/src/libs/crud-pro/interfaces.ts +190 -0
  378. package/src/libs/crud-pro/models/ExecuteContext.ts +120 -0
  379. package/src/libs/crud-pro/models/ExecuteContextFunc.ts +96 -0
  380. package/src/libs/crud-pro/models/FuncContext.ts +21 -0
  381. package/src/libs/crud-pro/models/RequestCfgModel.ts +141 -0
  382. package/src/libs/crud-pro/models/RequestModel.ts +141 -0
  383. package/src/libs/crud-pro/models/ResModel.ts +19 -0
  384. package/src/libs/crud-pro/models/ServiceHub.ts +32 -0
  385. package/src/libs/crud-pro/models/SqlCfgModel.ts +52 -0
  386. package/src/libs/crud-pro/models/SqlSegArg.ts +13 -0
  387. package/src/libs/crud-pro/models/Transaction.ts +83 -0
  388. package/src/libs/crud-pro/models/TransactionMySQL.ts +79 -0
  389. package/src/libs/crud-pro/models/TransactionPostgres.ts +91 -0
  390. package/src/libs/crud-pro/models/TransactionSqlServer.ts +102 -0
  391. package/src/libs/crud-pro/models/keys.ts +159 -0
  392. package/src/libs/crud-pro/services/CrudProCachedCfgService.ts +83 -0
  393. package/src/libs/crud-pro/services/CrudProExecuteFuncService.ts +128 -0
  394. package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +262 -0
  395. package/src/libs/crud-pro/services/CrudProFieldUpdateService.ts +60 -0
  396. package/src/libs/crud-pro/services/CrudProFieldValidateService.ts +180 -0
  397. package/src/libs/crud-pro/services/CrudProGenSqlCondition.ts +354 -0
  398. package/src/libs/crud-pro/services/CrudProGenSqlService.ts +185 -0
  399. package/src/libs/crud-pro/services/CrudProOriginToExecuteSql.ts +393 -0
  400. package/src/libs/crud-pro/services/CrudProServiceBase.ts +107 -0
  401. package/src/libs/crud-pro/services/CrudProTableMetaService.ts +86 -0
  402. package/src/libs/crud-pro/services/CurdProServiceHub.ts +92 -0
  403. package/src/libs/crud-pro/sql.txt +120 -0
  404. package/src/libs/crud-pro/utils/CompareUtils.ts +23 -0
  405. package/src/libs/crud-pro/utils/DatabaseName.ts +60 -0
  406. package/src/libs/crud-pro/utils/DateTimeUtils.ts +20 -0
  407. package/src/libs/crud-pro/utils/MemoryRefreshCache.ts +64 -0
  408. package/src/libs/crud-pro/utils/MessageParseUtils.ts +33 -0
  409. package/src/libs/crud-pro/utils/MixinUtils.ts +285 -0
  410. package/src/libs/crud-pro/utils/ModelUtils.ts +55 -0
  411. package/src/libs/crud-pro/utils/MultiKeyMap.ts +72 -0
  412. package/src/libs/crud-pro/utils/SqlFuncUtils.ts +29 -0
  413. package/src/libs/crud-pro/utils/TypeUtils.ts +188 -0
  414. package/src/libs/crud-pro/utils/ValidateUtils.ts +165 -0
  415. package/src/libs/crud-pro/utils/pool/MySQLUtils.ts +20 -0
  416. package/src/libs/crud-pro/utils/pool/PostgresUtils.ts +22 -0
  417. package/src/libs/crud-pro/utils/pool/SqlServerUtils.ts +22 -0
  418. package/src/libs/crud-pro/utils/sqlConvert/convertColumnName.ts +26 -0
  419. package/src/libs/crud-pro/utils/sqlConvert/convertMix.ts +26 -0
  420. package/src/libs/crud-pro/utils/sqlConvert/convertMsSql.ts +11 -0
  421. package/src/libs/crud-pro/utils/sqlConvert/convertPgSql.ts +11 -0
  422. package/src/libs/crud-pro/utils/sqlConvert/convertPgType.ts +129 -0
  423. package/src/libs/global-config/global-config.ts +109 -0
  424. package/src/libs/utils/base64.ts +47 -0
  425. package/src/libs/utils/common-dto.ts +52 -0
  426. package/src/libs/utils/crypto-utils.ts +50 -0
  427. package/src/libs/utils/errorToString.ts +61 -0
  428. package/src/libs/utils/fatcms-request.ts +103 -0
  429. package/src/libs/utils/functions.ts +78 -0
  430. package/src/libs/utils/ordernum-utils.ts +14 -0
  431. package/src/libs/utils/parseConfig.ts +54 -0
  432. package/src/libs/utils/parseCreateSql.ts +91 -0
  433. package/src/libs/utils/render-utils.ts +184 -0
  434. package/src/middleware/forbidden.middleware.ts +52 -0
  435. package/src/middleware/global.middleware.ts +293 -0
  436. package/src/middleware/permission.middleware.ts +80 -0
  437. package/src/middleware/rediscache.middleware.ts +91 -0
  438. package/src/middleware/redislock.middleware.ts +83 -0
  439. package/src/middleware/tx.middleware.ts +30 -0
  440. package/src/models/AsyncTaskModel.ts +85 -0
  441. package/src/models/RedisKeys.ts +16 -0
  442. package/src/models/SystemEntities.ts +125 -0
  443. package/src/models/SystemPerm.ts +105 -0
  444. package/src/models/SystemTables.ts +27 -0
  445. package/src/models/bizmodels.ts +123 -0
  446. package/src/models/contextLogger.ts +132 -0
  447. package/src/models/devops.ts +17 -0
  448. package/src/models/userSession.ts +217 -0
  449. package/src/schedule/anonymousContext.ts +73 -0
  450. package/src/schedule/index.ts +12 -0
  451. package/src/schedule/runSchedule.ts +82 -0
  452. package/src/schedule/scheduleNames.ts +21 -0
  453. package/src/service/AuthService.ts +284 -0
  454. package/src/service/EnumInfoService.ts +130 -0
  455. package/src/service/FileCenterService.ts +395 -0
  456. package/src/service/SysConfigService.ts +37 -0
  457. package/src/service/UserAccountService.ts +107 -0
  458. package/src/service/UserSessionService.ts +161 -0
  459. package/src/service/VisitStatService.ts +166 -0
  460. package/src/service/WorkbenchService.ts +220 -0
  461. package/src/service/anyapi/AnyApiSandboxService.ts +121 -0
  462. package/src/service/anyapi/AnyApiService.ts +186 -0
  463. package/src/service/asyncTask/AsyncTaskRunnerService.ts +325 -0
  464. package/src/service/asyncTask/AsyncTaskService.ts +21 -0
  465. package/src/service/asyncTask/handler/ExcelInfoModel.ts +11 -0
  466. package/src/service/asyncTask/handler/ExportExcelAsyncTaskHandler.ts +245 -0
  467. package/src/service/asyncTask/handler/ExportExcelByInnerHttpHandler.ts +159 -0
  468. package/src/service/asyncTask/handler/ExportExcelByStdCrudHandler.ts +159 -0
  469. package/src/service/base/ApiBaseService.ts +42 -0
  470. package/src/service/base/ApiRateLimiter.ts +59 -0
  471. package/src/service/base/BaseService.ts +100 -0
  472. package/src/service/base/RedisCacheService.ts +45 -0
  473. package/src/service/crudstd/CrudStdActionService.ts +27 -0
  474. package/src/service/crudstd/CrudStdConstant.ts +62 -0
  475. package/src/service/crudstd/CrudStdRelationService.ts +118 -0
  476. package/src/service/crudstd/CrudStdService.ts +420 -0
  477. package/src/service/curd/CrudProQuick.ts +172 -0
  478. package/src/service/curd/CurdMixByAccountService.ts +89 -0
  479. package/src/service/curd/CurdMixByDictService.ts +114 -0
  480. package/src/service/curd/CurdMixByLinkToCustomService.ts +219 -0
  481. package/src/service/curd/CurdMixBySysConfigService.ts +78 -0
  482. package/src/service/curd/CurdMixByWorkbenchService.ts +71 -0
  483. package/src/service/curd/CurdMixService.ts +97 -0
  484. package/src/service/curd/CurdMixUtils.ts +316 -0
  485. package/src/service/curd/CurdProService.ts +231 -0
  486. package/src/service/curd/fixCfgModel.ts +120 -0
  487. package/src/service/proxyapi/ProxyApiLoadService.ts +174 -0
  488. package/src/service/proxyapi/ProxyApiService.ts +298 -0
  489. package/src/service/proxyapi/ProxyApiUtils.ts +32 -0
  490. package/src/service/proxyapi/RouteHandler.ts +8 -0
  491. package/src/service/proxyapi/RouteTrie.ts +74 -0
  492. package/src/service/proxyapi/WeightedRandom.ts +37 -0
  493. package/src/service/proxyapi/WeightedRoundRobin.ts +44 -0
  494. package/src/views/404_app.html +31 -0
  495. package/src/views/404_workbench.html +34 -0
  496. package/src/views/static/favicon.ico +0 -0
  497. package/tsconfig.json +32 -32
@@ -0,0 +1,325 @@
1
+ import * as moment from 'moment';
2
+ import { Inject, Provide } from '@midwayjs/core';
3
+ import { Context, IMidwayKoaContext } from '@midwayjs/koa';
4
+ import { BaseService } from '@/service/base/BaseService';
5
+ import { IScheduleService } from '@/interface';
6
+ import { CurdProService } from '@/service/curd/CurdProService';
7
+ import { ISysAsyncTaskHandler, SysAsyncTaskEntity, SysAsyncTaskPartial, SysAsyncTaskStatus } from '@/models/AsyncTaskModel';
8
+ import { GLOBAL_STATIC_CONFIG } from '@/libs/global-config/global-config';
9
+ import { SystemTables } from '@/models/SystemTables';
10
+ import { KeysOfSimpleSQL } from '@/libs/crud-pro/models/keys';
11
+ import { errorToString } from '@/libs/utils/errorToString';
12
+ import { ANONYMOUS_CONTEXT } from '@/schedule';
13
+ import { RedisKeys } from '@/models/RedisKeys';
14
+ import { getCurrentFullMoment } from '@/libs/utils/functions';
15
+ import { ExportExcelAsyncTaskHandler } from './handler/ExportExcelAsyncTaskHandler';
16
+
17
+ const END_STATUS_LIST = [SysAsyncTaskStatus.PART_SUCCEEDED, SysAsyncTaskStatus.SUCCEEDED, SysAsyncTaskStatus.FAILED, SysAsyncTaskStatus.CANCELLED, SysAsyncTaskStatus.PAUSED];
18
+
19
+ class AsyncTaskRunner {
20
+ isBusy = false;
21
+ taskHandlerMap: Map<string, ISysAsyncTaskHandler> = new Map();
22
+
23
+ async executeTaskList(taskList: SysAsyncTaskEntity[]) {
24
+ if (!taskList || taskList.length === 0) {
25
+ return;
26
+ }
27
+
28
+ this.isBusy = true;
29
+
30
+ for (let i = 0; i < taskList.length; i++) {
31
+ const taskElement = taskList[i];
32
+ taskElement.task_status = SysAsyncTaskStatus.RUNNING;
33
+
34
+ try {
35
+ // 1. 更新当前这个任务的状态
36
+ await this.updateTaskStatus(taskElement, {
37
+ task_status: taskElement.task_status,
38
+ started_at: getCurrentFullMoment(),
39
+ updated_at: getCurrentFullMoment(),
40
+ });
41
+
42
+ // 任务状态的设置在自定义的执行器里面。
43
+ await this.executeTask(taskElement);
44
+
45
+ // 当前不是终止状态,并且没有异常就设置成成功。
46
+ if (!END_STATUS_LIST.includes(taskElement.task_status)) {
47
+ taskElement.task_status = SysAsyncTaskStatus.SUCCEEDED;
48
+ }
49
+ } catch (error) {
50
+ taskElement.task_status = SysAsyncTaskStatus.FAILED;
51
+ taskElement.error_message = errorToString(error);
52
+ }
53
+
54
+ try {
55
+ // 2. 更新当前这个任务的状态
56
+ await this.updateTaskStatus(taskElement, {
57
+ task_status: taskElement.task_status,
58
+ error_message: taskElement.error_message,
59
+ updated_at: getCurrentFullMoment(),
60
+ completed_at: getCurrentFullMoment(),
61
+ });
62
+ } catch (error) {
63
+ ANONYMOUS_CONTEXT.getApp().getCoreLogger().error('[AsyncTaskRunner] executeTaskList error', error);
64
+ }
65
+ }
66
+
67
+ this.isBusy = false;
68
+ }
69
+
70
+ private async executeTask(taskElement: SysAsyncTaskEntity) {
71
+ const taskType = taskElement.task_type;
72
+ const taskHandler = this.taskHandlerMap.get(taskType);
73
+ if (!taskHandler) {
74
+ throw new Error('TaskHandler not found , taskType = ' + taskType);
75
+ }
76
+ const updateTaskStatus = (updatePartials: SysAsyncTaskPartial) => {
77
+ return this.updateTaskStatus(taskElement, updatePartials);
78
+ };
79
+ await taskHandler.execute({ task: taskElement, updateTaskStatus });
80
+ }
81
+
82
+ /**
83
+ * 更新任务状态或任务进度
84
+ * @param taskElement
85
+ * @param updatePartials
86
+ * @private
87
+ */
88
+ private async updateTaskStatus(taskElement: SysAsyncTaskEntity, updatePartials: SysAsyncTaskPartial) {
89
+ if (!updatePartials) {
90
+ throw new Error('updatePartials not found');
91
+ }
92
+ return await ANONYMOUS_CONTEXT.runServiceAtAnonymousContext(async (ctx: IMidwayKoaContext) => {
93
+ const curdProService: CurdProService = await ctx.requestContext.getAsync('curdProService');
94
+ const { SystemDbName, SystemDbType } = GLOBAL_STATIC_CONFIG.getConfig();
95
+
96
+ // 一定要有一个更新时间字段
97
+ updatePartials.updated_at = getCurrentFullMoment();
98
+
99
+ const res = await curdProService.executeCrudByCfg(
100
+ {
101
+ condition: {
102
+ id: taskElement.id,
103
+ },
104
+ data: updatePartials,
105
+ },
106
+ {
107
+ sqlTable: SystemTables.sys_async_tasks,
108
+ sqlSimpleName: KeysOfSimpleSQL.SIMPLE_UPDATE,
109
+ sqlDatabase: SystemDbName,
110
+ sqlDbType: SystemDbType,
111
+ }
112
+ );
113
+ return res.getResModel().affected;
114
+ });
115
+ }
116
+
117
+ /**
118
+ * 获取当前进程可以处理的任务类型。
119
+ */
120
+ public getHandlerTaskTypeList(): string[] {
121
+ const keys = this.taskHandlerMap.keys();
122
+ return [...keys];
123
+ }
124
+ }
125
+
126
+ /**
127
+ * 业务可以扩展
128
+ */
129
+ export const ASYNC_TASK_RUNNER = new AsyncTaskRunner();
130
+
131
+ //内置的异步任务处理器:EXCEL导出
132
+ ASYNC_TASK_RUNNER.taskHandlerMap.set('EXCEL_EXPORT', new ExportExcelAsyncTaskHandler());
133
+
134
+ /**
135
+ * Redis锁
136
+ */
137
+ const ASYNC_TASK_LOCK = RedisKeys.ASYNC_TASK_LOCK;
138
+ const ASYNC_TASK_TIMEOUT_LOCK = RedisKeys.ASYNC_TASK_TIMEOUT_LOCK;
139
+
140
+ /**
141
+ * 上次检查异步任务的时间点
142
+ */
143
+ const ASYNC_TASK_RUNTIME_OBJ = {
144
+ LAST_CHECK_ASYNC_TASK_UPDATE_TIME: 0,
145
+ };
146
+
147
+ @Provide()
148
+ export class AsyncTaskRunnerService extends BaseService implements IScheduleService {
149
+ @Inject()
150
+ protected ctx: Context;
151
+
152
+ @Inject()
153
+ private curdProService: CurdProService;
154
+
155
+
156
+ /**
157
+ * 定时任务执行
158
+ */
159
+ async runBySchedule() {
160
+ await this.runByScheduleForPendingTasks();
161
+ await this.runByScheduleForTimeoutTasks();
162
+ }
163
+
164
+
165
+ /**
166
+ * 更新超时的任务状态
167
+ * @returns
168
+ */
169
+ private async runByScheduleForTimeoutTasks() {
170
+ const { SystemDbName, SystemDbType } = GLOBAL_STATIC_CONFIG.getConfig();
171
+
172
+ // 每隔一小时执行一次,即可。
173
+ const lock = await this.redisService.set(ASYNC_TASK_TIMEOUT_LOCK, 1, 'EX', 60 * 60, 'NX');
174
+ if (lock !== 'OK') {
175
+ return Promise.resolve();
176
+ }
177
+
178
+ const timeoutTime = moment().subtract(24, 'hours').format("YYYY-MM-DD HH:mm:ss.SSS");
179
+ await this.curdProService.executeCrudByCfg(
180
+ {
181
+ condition: {
182
+ task_status: SysAsyncTaskStatus.RUNNING, // 虽然状态是RUNNING,但是已经超过24小时没有进展了。
183
+ updated_at: {
184
+ $lt: timeoutTime,
185
+ }
186
+ },
187
+ data: {
188
+ task_status: SysAsyncTaskStatus.FAILED,
189
+ error_message: '任务超时',
190
+ }
191
+ },
192
+ {
193
+ sqlTable: SystemTables.sys_async_tasks,
194
+ sqlSimpleName: KeysOfSimpleSQL.SIMPLE_UPDATE,
195
+ sqlDatabase: SystemDbName,
196
+ sqlDbType: SystemDbType,
197
+ }
198
+ );
199
+ }
200
+
201
+
202
+
203
+ /**
204
+ * 检查是否有新任务。如果有,就从数据库中获取一批任务,放到自己的任务队列里。
205
+ * @returns
206
+ */
207
+ private async runByScheduleForPendingTasks() {
208
+
209
+ // 1. 当前很忙
210
+ if (ASYNC_TASK_RUNNER.isBusy) {
211
+ return Promise.resolve();
212
+ }
213
+
214
+ // 2. 发现了新任务
215
+ const isExistNewTask = await this.isExistNewTask();
216
+ if (!isExistNewTask) {
217
+ return Promise.resolve();
218
+ }
219
+
220
+ // 这里的过期时间1分钟即可。fetchPendingTasks函数不可能超过一分钟。
221
+ // 因为这里只是从数据库中获取一批任务,放到自己的任务队列里。还没触发执行。
222
+ const lock = await this.redisService.set(ASYNC_TASK_LOCK, 1, 'EX', 60, 'NX');
223
+ if (lock !== 'OK') {
224
+ return Promise.resolve();
225
+ }
226
+
227
+ try {
228
+ await this.fetchPendingTasks();
229
+ } catch (e) {
230
+ console.error('[AsyncTaskRunnerService] fetchPendingTasks error', errorToString(e));
231
+ }
232
+
233
+ await this.redisService.del(ASYNC_TASK_LOCK);
234
+
235
+ return Promise.resolve();
236
+ }
237
+
238
+ async fetchPendingTasks(): Promise<void> {
239
+ const { SystemDbName, SystemDbType } = GLOBAL_STATIC_CONFIG.getConfig();
240
+
241
+ // 只获取本进程能够处理的任务类型。
242
+ const taskTypeList = ASYNC_TASK_RUNNER.getHandlerTaskTypeList();
243
+ if (taskTypeList.length === 0) {
244
+ return Promise.resolve();
245
+ }
246
+
247
+ // 查询等待处理的任务。
248
+ const queryRes = await this.curdProService.executeCrudByCfg(
249
+ {
250
+ condition: {
251
+ task_status: SysAsyncTaskStatus.PENDING,
252
+ task_type: {
253
+ $in: taskTypeList,
254
+ },
255
+ },
256
+ orderBy: 'id+',
257
+ limit: 10,
258
+ },
259
+ {
260
+ sqlTable: SystemTables.sys_async_tasks,
261
+ sqlSimpleName: KeysOfSimpleSQL.SIMPLE_QUERY_PAGE,
262
+ sqlDatabase: SystemDbName,
263
+ sqlDbType: SystemDbType,
264
+ }
265
+ );
266
+
267
+ const taskList = queryRes.getResRows();
268
+
269
+ if (taskList.length === 0) {
270
+ return Promise.resolve();
271
+ }
272
+ const taskIds = taskList.map(elem => elem.id).filter(Boolean);
273
+
274
+ // 将状态更新为处理中。防止其它进程重复处理。
275
+ await this.curdProService.executeCrudByCfg(
276
+ {
277
+ condition: {
278
+ id: {
279
+ $in: taskIds,
280
+ },
281
+ },
282
+ data: {
283
+ task_status: SysAsyncTaskStatus.RUNNING,
284
+ },
285
+ },
286
+ {
287
+ sqlTable: SystemTables.sys_async_tasks,
288
+ sqlSimpleName: KeysOfSimpleSQL.SIMPLE_UPDATE,
289
+ sqlDatabase: SystemDbName,
290
+ sqlDbType: SystemDbType,
291
+ }
292
+ );
293
+
294
+ // 开始执行。
295
+ await ASYNC_TASK_RUNNER.executeTaskList(taskList).then(() => {
296
+ console.log('[AsyncTaskRunnerService] ASYNC_TASK_RUNNER finished taskIds ==> ' + JSON.stringify(taskIds));
297
+ });
298
+
299
+ }
300
+
301
+ /**
302
+ * 是否存在新任务
303
+ * @private
304
+ */
305
+ private async isExistNewTask(): Promise<boolean> {
306
+ // 刚启动,没有检查过。
307
+ if (!ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME) {
308
+ ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME = Date.now();
309
+ return true;
310
+ }
311
+
312
+ //Redis没有任何内容
313
+ const updateTime = await this.redisService.get(RedisKeys.ASYNC_TASK_UPDATE_TIME);
314
+ if (!updateTime) {
315
+ ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME = Date.now();
316
+ return false;
317
+ }
318
+
319
+ const updateTimeNumber = Number.parseInt(updateTime, 10);
320
+
321
+ const isExistNewTask: boolean = updateTimeNumber > ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME;
322
+ ASYNC_TASK_RUNTIME_OBJ.LAST_CHECK_ASYNC_TASK_UPDATE_TIME = updateTimeNumber;
323
+ return isExistNewTask;
324
+ }
325
+ }
@@ -0,0 +1,21 @@
1
+ import { Inject, Provide } from '@midwayjs/core';
2
+ import { Context } from '@midwayjs/koa';
3
+ import { BaseService } from '@/service/base/BaseService';
4
+ import { runScheduleTaskOnce } from '@/schedule';
5
+ import { INNER_SCHEDULE_NAMES } from '@/schedule/scheduleNames';
6
+ import { RedisKeys } from '@/models/RedisKeys';
7
+
8
+ @Provide()
9
+ export class AsyncTaskService extends BaseService {
10
+ @Inject()
11
+ protected ctx: Context;
12
+
13
+ async startTask() {
14
+ await this.redisService.set(RedisKeys.ASYNC_TASK_UPDATE_TIME, `${Date.now()}`);
15
+ runScheduleTaskOnce(INNER_SCHEDULE_NAMES.asyncTaskRunnerService).then(schedule => {
16
+ console.log(schedule);
17
+ });
18
+ }
19
+
20
+ async cancelTask(id: number) {}
21
+ }
@@ -0,0 +1,11 @@
1
+ export interface IExcelHeaderInfo {
2
+ title: string;
3
+ dataIndex: string;
4
+ }
5
+
6
+ export interface IExcelAsyncTaskHandler {
7
+ getExcelHeader(): Promise<IExcelHeaderInfo[]>;
8
+ getPageSize(): Promise<number>;
9
+ getTotalCount(): Promise<number>;
10
+ getExcelDataList(pageNo: number, pageSize: number): Promise<any[]>;
11
+ }
@@ -0,0 +1,245 @@
1
+ import { IMidwayKoaContext } from '@midwayjs/koa';
2
+ import { ISysAsyncTaskHandler, SysAsyncTaskContext, SysAsyncTaskStatus } from '@/models/AsyncTaskModel';
3
+ import { ANONYMOUS_CONTEXT } from '@/schedule';
4
+ import { IExcelHeaderInfo, IExcelAsyncTaskHandler } from './ExcelInfoModel';
5
+ import { SysAsyncFileFormat } from '@/models/AsyncTaskModel';
6
+ import { ExportExcelByStdCrudHandler } from './ExportExcelByStdCrudHandler';
7
+ import { ExportExcelByInnerHttpHandler } from './ExportExcelByInnerHttpHandler';
8
+ import { IStdCrudExportInputParams, StdCrudExportInputParamsAppType } from '@/models/bizmodels';
9
+
10
+ import * as _ from 'lodash';
11
+ import * as fastcsv from 'fast-csv';
12
+ import * as fs from 'node:fs';
13
+ import * as fs2 from 'node:fs/promises';
14
+ import * as path from 'node:path';
15
+ import { parseJsonObject } from '@/libs/utils/functions';
16
+ import { UserSessionInfo } from '@/models/userSession';
17
+ import { errorToString } from '@/libs/utils/errorToString';
18
+
19
+ const indexRef = { current: 0 };
20
+
21
+ async function createFileFolder(distFileFolder: string) {
22
+ try {
23
+ await fs2.access(distFileFolder);
24
+ } catch (e) {
25
+ await fs2.mkdir(distFileFolder, { recursive: true });
26
+ }
27
+ }
28
+
29
+ function getExcelAsyncTaskHandler(asyncTaskContext: SysAsyncTaskContext, ctx: IMidwayKoaContext): IExcelAsyncTaskHandler {
30
+ const inputParams: IStdCrudExportInputParams = parseJsonObject(asyncTaskContext?.task?.input_params);
31
+ if (inputParams && inputParams.appType === StdCrudExportInputParamsAppType.STD_CRUD) {
32
+ return new ExportExcelByStdCrudHandler(asyncTaskContext, inputParams, ctx);
33
+ }
34
+ if (inputParams && inputParams.appType === StdCrudExportInputParamsAppType.INNER_HTTP) {
35
+ return new ExportExcelByInnerHttpHandler(asyncTaskContext, inputParams, ctx);
36
+ }
37
+ throw new Error('[getExcelAsyncTaskHandler]appType不支持;appType = ' + inputParams.appType);
38
+ }
39
+
40
+ /**
41
+ * 多实例,每个任务一个实例。
42
+ * 导出EXCEL异步任务:
43
+ */
44
+ class ExportExcelAsyncTask {
45
+ protected asyncTaskContext: SysAsyncTaskContext;
46
+ protected ctx: IMidwayKoaContext;
47
+ protected headerColumns: IExcelHeaderInfo[];
48
+ protected excelAsyncTaskHandler: IExcelAsyncTaskHandler;
49
+
50
+ constructor(asyncTaskContext: SysAsyncTaskContext, ctx: IMidwayKoaContext) {
51
+ this.asyncTaskContext = asyncTaskContext;
52
+ this.ctx = ctx;
53
+ this.excelAsyncTaskHandler = getExcelAsyncTaskHandler(asyncTaskContext, ctx);
54
+ }
55
+
56
+ private getDistFileFolder() {
57
+ const app = ANONYMOUS_CONTEXT.getApp();
58
+ const config = app.getConfig();
59
+ const fatcmsExportExcelTmpFilePath = config.fatcmsExportExcelTmpFilePath;
60
+ if (!fatcmsExportExcelTmpFilePath) {
61
+ return path.join(__dirname, '../../tmp');
62
+ }
63
+ return fatcmsExportExcelTmpFilePath;
64
+ }
65
+
66
+ async executeWithContext() {
67
+ const taskElement = this.asyncTaskContext.task;
68
+ const taskId = _.get(this.asyncTaskContext, 'task.id');
69
+
70
+ this.ctx.logger.info('[ExportExcelAsyncTask] executeWithContext start, taskId=' + taskId);
71
+
72
+ const pageSize = await this.excelAsyncTaskHandler.getPageSize();
73
+
74
+ const fileName = await this.getExcelFileName(); // 文件名
75
+ const distFileFolder = this.getDistFileFolder();
76
+ await createFileFolder(distFileFolder);
77
+ const diskFilePath = path.resolve(distFileFolder, fileName); // 磁盘文件路径
78
+
79
+ const totalCount = await this.getTotalCount();
80
+
81
+ await this.asyncTaskContext.updateTaskStatus({
82
+ output_total_records: totalCount,
83
+ output_file_format: SysAsyncFileFormat.CSV,
84
+ output_file_path: diskFilePath,
85
+ });
86
+
87
+ this.headerColumns = await this.getExcelHeader();
88
+
89
+ const ws = fs.createWriteStream(diskFilePath, {
90
+ encoding: 'utf-8',
91
+ });
92
+
93
+ const csvStream = fastcsv.format({ writeHeaders: false, headers: false, delimiter: ',' });
94
+ csvStream.pipe(ws);
95
+ csvStream.write('\ufeff'); // 写入BOM头,解决中文乱码问题
96
+
97
+ csvStream.write(this.formatToCsvHeader(this.headerColumns));
98
+
99
+ let processed_records = 0;
100
+
101
+ try {
102
+ if (typeof totalCount === 'number' && totalCount > 0) {
103
+ const batchCount = Math.ceil(totalCount / pageSize);
104
+ for (let i = 0; i < batchCount; i++) {
105
+ const num = await this.writeExcelBatchData(csvStream, i + 1, pageSize);
106
+ processed_records = processed_records + num;
107
+ const progress = Math.round((processed_records / totalCount) * 100);
108
+ await this.asyncTaskContext.updateTaskStatus({
109
+ processed_records,
110
+ progress,
111
+ });
112
+ }
113
+ }
114
+
115
+ taskElement.task_status = SysAsyncTaskStatus.SUCCEEDED;
116
+ } catch (error) {
117
+ taskElement.task_status = SysAsyncTaskStatus.FAILED;
118
+ taskElement.error_message = errorToString(error);
119
+ const progress = Math.round((processed_records / totalCount) * 100);
120
+ await this.asyncTaskContext.updateTaskStatus({
121
+ processed_records,
122
+ progress,
123
+ task_status: taskElement.task_status,
124
+ error_message: taskElement.error_message,
125
+ });
126
+ }
127
+
128
+ csvStream.end();
129
+ ws.on('finish', async () => {
130
+ this.ctx.logger.info('[ExportExcelAsyncTask] executeWithContext finish, taskId=' + taskId);
131
+ const fsStat = await fs2.stat(diskFilePath);
132
+ const output_file_size = fsStat.size;
133
+ this.asyncTaskContext.updateTaskStatus({
134
+ output_file_size,
135
+ });
136
+ });
137
+ this.ctx.logger.info('[ExportExcelAsyncTask] executeWithContext end, taskId=' + taskId);
138
+ }
139
+
140
+ private formatToCsvHeader(headerColumns: IExcelHeaderInfo[]): string[] {
141
+ return headerColumns.map(item => {
142
+ return item.title;
143
+ });
144
+ }
145
+
146
+ private async writeExcelBatchData(csvStream: fastcsv.CsvFormatterStream<any, any>, pageNo: number, pageSize: number): Promise<number> {
147
+ const dataList: any[] = await this.getExcelDataList(pageNo, pageSize);
148
+ for (let i = 0; i < dataList.length; i++) {
149
+ const csvRow = this.formatToCsvRow(dataList[i]);
150
+ csvStream.write(csvRow);
151
+ }
152
+ return dataList.length;
153
+ }
154
+
155
+ private formatToCsvRow(rowObj: any): string[] {
156
+ return this.headerColumns.map(obj => {
157
+ const dataIndex = obj.dataIndex;
158
+ const value = _.get(rowObj, dataIndex);
159
+ if (typeof value === 'undefined' || value === null) {
160
+ return '';
161
+ }
162
+ if (typeof value !== 'string') {
163
+ // boolean , number
164
+ return '' + value;
165
+ }
166
+ return value;
167
+ });
168
+ }
169
+
170
+ /**
171
+ * 获取文件名
172
+ * @returns 文件名
173
+ */
174
+ private async getExcelFileName() {
175
+ indexRef.current = indexRef.current + 1;
176
+ if (indexRef.current > 100000) {
177
+ indexRef.current = 1;
178
+ }
179
+ const num = `${indexRef.current}`.padStart(10, '0');
180
+ return `export_${Date.now()}_${num}.csv`;
181
+ }
182
+
183
+ /**
184
+ * 获取Excel的表头
185
+ * @returns
186
+ */
187
+ private async getExcelHeader(): Promise<IExcelHeaderInfo[]> {
188
+ return this.excelAsyncTaskHandler.getExcelHeader();
189
+ // const inputParams = parseJsonObject(this.asyncTaskContext?.task?.input_params);
190
+ // if (inputParams && inputParams.appType === 'STD_CRUD') {
191
+ // // const appCode = inputParams.appCode;
192
+ // console.log(this)
193
+ // }
194
+ // return [
195
+ // { title: 'ID', dataIndex: 'id' },
196
+ // { title: '姓名', dataIndex: 'name' },
197
+ // { title: '邮箱', dataIndex: 'email' }
198
+ // ]
199
+ }
200
+
201
+ /**
202
+ * 获取文件总数
203
+ */
204
+ private async getTotalCount(): Promise<number> {
205
+ const totalCount = await this.excelAsyncTaskHandler.getTotalCount();
206
+ // 最多导出10万条数据
207
+ return Math.min(totalCount, 10 * 10000);
208
+ }
209
+
210
+ /**
211
+ * 获取数据内容数组
212
+ * @param pageNo 当前页号,从1开始
213
+ * @param pageSize 每页获取的数量。
214
+ */
215
+ private async getExcelDataList(pageNo: number, pageSize: number): Promise<any[]> {
216
+ return this.excelAsyncTaskHandler.getExcelDataList(pageNo, pageSize);
217
+ // const dataList = [];
218
+ // for (var i = 0; i < pageSize; i++) {
219
+ // dataList.push({ id: i, name: 'nmae' + i, email: 'www.dss@dd.dom' })
220
+ // }
221
+ // return dataList;
222
+ }
223
+ }
224
+
225
+ /**
226
+ * 单例
227
+ */
228
+ export class ExportExcelAsyncTaskHandler implements ISysAsyncTaskHandler {
229
+ public async execute(asyncTaskContext: SysAsyncTaskContext): Promise<any> {
230
+ const taskId = _.get(asyncTaskContext, 'task.id');
231
+
232
+ console.log('[ExportExcelAsyncTaskHandler] execute, taskId=>' + taskId);
233
+
234
+ const res = await ANONYMOUS_CONTEXT.runServiceAtAnonymousContext(async (ctx: IMidwayKoaContext) => {
235
+ const createdUserSession = parseJsonObject(asyncTaskContext?.task?.created_user_session);
236
+ ctx.userSession = new UserSessionInfo(createdUserSession, false);
237
+ const task = new ExportExcelAsyncTask(asyncTaskContext, ctx);
238
+ return task.executeWithContext();
239
+ });
240
+ if (res.error) {
241
+ throw res.error;
242
+ }
243
+ return res.result;
244
+ }
245
+ }