midway-fatcms 0.0.1-beta.6 → 0.0.1-beta.61

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