midway-fatcms 0.0.7 → 0.0.9

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 (159) hide show
  1. package/.qoder/skills/midway-fatcms/01-quick-start.md +231 -0
  2. package/.qoder/skills/midway-fatcms/02-crud-quick.md +375 -0
  3. package/.qoder/skills/midway-fatcms/03-crud-sharding.md +489 -0
  4. package/.qoder/skills/midway-fatcms/04-condition-operators.md +93 -0
  5. package/.qoder/skills/midway-fatcms/05-configuration.md +290 -0
  6. package/.qoder/skills/midway-fatcms/06-builtin-functions.md +241 -0
  7. package/.qoder/skills/midway-fatcms/07-examples.md +504 -0
  8. package/.qoder/skills/midway-fatcms/SKILL.md +96 -0
  9. package/README.md +9 -9
  10. package/dist/configuration.d.ts +10 -0
  11. package/dist/configuration.js +26 -0
  12. package/dist/controller/base/BaseApiController.d.ts +1 -2
  13. package/dist/controller/base/BaseApiController.js +0 -4
  14. package/dist/controller/gateway/DocGatewayController.js +1 -1
  15. package/dist/controller/helpers.controller.d.ts +6 -0
  16. package/dist/controller/helpers.controller.js +19 -0
  17. package/dist/controller/manage/FlowConfigManageApi.js +4 -2
  18. package/dist/controller/manage/SysConfigMangeApi.js +6 -1
  19. package/dist/controller/manage/UserAccountManageApi.js +7 -2
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.js +2 -2
  22. package/dist/libs/crud-pro/CrudPro.d.ts +51 -3
  23. package/dist/libs/crud-pro/CrudPro.js +111 -4
  24. package/dist/libs/crud-pro/exceptions.d.ts +7 -0
  25. package/dist/libs/crud-pro/exceptions.js +7 -0
  26. package/dist/libs/crud-pro/interfaces.d.ts +83 -12
  27. package/dist/libs/crud-pro/models/CrudResult.d.ts +116 -0
  28. package/dist/libs/crud-pro/models/CrudResult.js +126 -0
  29. package/dist/libs/crud-pro/models/RequestModel.d.ts +2 -2
  30. package/dist/libs/crud-pro/models/ServiceHub.d.ts +2 -0
  31. package/dist/libs/crud-pro/services/CrudProDataTypeConvertService.d.ts +70 -2
  32. package/dist/libs/crud-pro/services/CrudProDataTypeConvertService.js +205 -13
  33. package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +36 -2
  34. package/dist/libs/crud-pro/services/CrudProGenSqlCondition.js +8 -4
  35. package/dist/libs/crud-pro/services/CrudProTableMetaService.d.ts +36 -0
  36. package/dist/libs/crud-pro/services/CrudProTableMetaService.js +97 -4
  37. package/dist/libs/crud-pro/services/CurdProServiceHub.d.ts +2 -0
  38. package/dist/libs/crud-pro/services/CurdProServiceHub.js +6 -0
  39. package/dist/libs/crud-pro-quick/CrudProQuick.d.ts +382 -0
  40. package/dist/libs/crud-pro-quick/CrudProQuick.js +689 -0
  41. package/dist/libs/crud-pro-quick/fixSoftDelete.d.ts +30 -0
  42. package/dist/{service/curd → libs/crud-pro-quick}/fixSoftDelete.js +3 -6
  43. package/dist/libs/crud-pro-quick/index.d.ts +36 -0
  44. package/dist/libs/crud-pro-quick/index.js +49 -0
  45. package/dist/libs/crud-pro-quick/models.d.ts +33 -0
  46. package/dist/libs/crud-pro-quick/models.js +2 -0
  47. package/dist/libs/crud-sharding/ShardingBase.d.ts +78 -0
  48. package/dist/libs/crud-sharding/ShardingBase.js +179 -0
  49. package/dist/libs/crud-sharding/ShardingByCustomCrud.d.ts +35 -0
  50. package/dist/libs/crud-sharding/ShardingByCustomCrud.js +297 -0
  51. package/dist/libs/crud-sharding/ShardingByHashCrud.d.ts +38 -0
  52. package/dist/libs/crud-sharding/ShardingByHashCrud.js +86 -0
  53. package/dist/libs/crud-sharding/ShardingByKeyCrud.d.ts +39 -0
  54. package/dist/libs/crud-sharding/ShardingByKeyCrud.js +74 -0
  55. package/dist/libs/crud-sharding/ShardingByTimeCrud.d.ts +66 -0
  56. package/dist/libs/crud-sharding/ShardingByTimeCrud.js +524 -0
  57. package/dist/libs/crud-sharding/ShardingConfig.d.ts +25 -10
  58. package/dist/libs/crud-sharding/ShardingConfig.js +5 -5
  59. package/dist/libs/crud-sharding/ShardingMerger.d.ts +10 -18
  60. package/dist/libs/crud-sharding/ShardingMerger.js +27 -44
  61. package/dist/libs/crud-sharding/ShardingResult.d.ts +33 -0
  62. package/dist/libs/crud-sharding/ShardingResult.js +16 -0
  63. package/dist/libs/crud-sharding/ShardingTableCreator.d.ts +21 -4
  64. package/dist/libs/crud-sharding/ShardingTableCreator.js +193 -59
  65. package/dist/libs/crud-sharding/ShardingUtils.d.ts +48 -0
  66. package/dist/libs/crud-sharding/ShardingUtils.js +122 -1
  67. package/dist/libs/crud-sharding/TIME_COLUMN_CLEAN_SPEC.md +488 -0
  68. package/dist/libs/crud-sharding/index.d.ts +13 -15
  69. package/dist/libs/crud-sharding/index.js +33 -17
  70. package/dist/models/RedisKeys.d.ts +1 -0
  71. package/dist/models/RedisKeys.js +1 -0
  72. package/dist/models/bizmodels.d.ts +2 -6
  73. package/dist/service/SysAppService.d.ts +2 -2
  74. package/dist/service/SysAppService.js +16 -5
  75. package/dist/service/SysConfigService.d.ts +1 -1
  76. package/dist/service/SysConfigService.js +7 -2
  77. package/dist/service/SysDictDataService.js +14 -4
  78. package/dist/service/SysMenuService.js +7 -2
  79. package/dist/service/TableMetaCacheRedisSubscriber.d.ts +31 -0
  80. package/dist/service/TableMetaCacheRedisSubscriber.js +98 -0
  81. package/dist/service/curd/CurdMixService.d.ts +6 -4
  82. package/dist/service/curd/CurdMixService.js +16 -2
  83. package/dist/service/curd/CurdProService.d.ts +149 -29
  84. package/dist/service/curd/CurdProService.js +157 -38
  85. package/dist/service/flow/FlowConfigService.js +7 -2
  86. package/dist/service/flow/FlowInstanceCrudService.js +22 -19
  87. package/package.json +1 -1
  88. package/src/configuration.ts +27 -0
  89. package/src/controller/base/BaseApiController.ts +0 -5
  90. package/src/controller/gateway/DocGatewayController.ts +1 -1
  91. package/src/controller/helpers.controller.ts +15 -0
  92. package/src/controller/manage/CrudStandardDesignApi.ts +4 -3
  93. package/src/controller/manage/FlowConfigManageApi.ts +4 -2
  94. package/src/controller/manage/SysConfigMangeApi.ts +6 -1
  95. package/src/controller/manage/UserAccountManageApi.ts +7 -2
  96. package/src/index.ts +2 -2
  97. package/src/libs/crud-pro/CrudPro.ts +134 -7
  98. package/src/libs/crud-pro/exceptions.ts +8 -0
  99. package/src/libs/crud-pro/interfaces.ts +111 -15
  100. package/src/libs/crud-pro/models/CrudResult.ts +178 -0
  101. package/src/libs/crud-pro/models/RequestModel.ts +2 -2
  102. package/src/libs/crud-pro/models/ServiceHub.ts +4 -0
  103. package/src/libs/crud-pro/services/CrudProDataTypeConvertService.ts +238 -15
  104. package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +41 -2
  105. package/src/libs/crud-pro/services/CrudProGenSqlCondition.ts +11 -7
  106. package/src/libs/crud-pro/services/CrudProTableMetaService.ts +110 -3
  107. package/src/libs/crud-pro/services/CurdProServiceHub.ts +8 -0
  108. package/src/libs/crud-pro-quick/CrudProQuick.ts +782 -0
  109. package/src/{service/curd → libs/crud-pro-quick}/fixSoftDelete.ts +23 -13
  110. package/src/libs/crud-pro-quick/index.ts +52 -0
  111. package/src/libs/crud-pro-quick/models.ts +35 -0
  112. package/src/libs/crud-sharding/ShardingBase.ts +256 -0
  113. package/src/libs/crud-sharding/ShardingByCustomCrud.ts +329 -0
  114. package/src/libs/crud-sharding/ShardingByHashCrud.ts +111 -0
  115. package/src/libs/crud-sharding/ShardingByKeyCrud.ts +97 -0
  116. package/src/libs/crud-sharding/ShardingByTimeCrud.ts +628 -0
  117. package/src/libs/crud-sharding/ShardingConfig.ts +28 -10
  118. package/src/libs/crud-sharding/ShardingMerger.ts +35 -63
  119. package/src/libs/crud-sharding/ShardingResult.ts +29 -0
  120. package/src/libs/crud-sharding/ShardingTableCreator.ts +214 -71
  121. package/src/libs/crud-sharding/ShardingUtils.ts +137 -0
  122. package/src/libs/crud-sharding/TIME_COLUMN_CLEAN_SPEC.md +488 -0
  123. package/src/libs/crud-sharding/index.ts +30 -16
  124. package/src/models/RedisKeys.ts +1 -0
  125. package/src/models/bizmodels.ts +4 -7
  126. package/src/service/SysAppService.ts +18 -7
  127. package/src/service/SysConfigService.ts +8 -3
  128. package/src/service/SysDictDataService.ts +14 -4
  129. package/src/service/SysMenuService.ts +7 -2
  130. package/src/service/TableMetaCacheRedisSubscriber.ts +105 -0
  131. package/src/service/crudstd/CrudStdService.ts +2 -2
  132. package/src/service/curd/CurdMixService.ts +26 -5
  133. package/src/service/curd/CurdProService.ts +186 -45
  134. package/src/service/flow/FlowConfigService.ts +7 -2
  135. package/src/service/flow/FlowInstanceCrudService.ts +23 -20
  136. package/.qoder/skills/midway-fatcms-crud/SKILL.md +0 -375
  137. package/.qoder/skills/midway-fatcms-crud/examples.md +0 -990
  138. package/.qoder/skills/midway-fatcms-crud/reference.md +0 -568
  139. package/dist/libs/crud-pro/README.md +0 -809
  140. package/dist/libs/crud-pro/README_FUNC.md +0 -193
  141. package/dist/libs/crud-sharding/ROUTING_LOGIC.md +0 -944
  142. package/dist/libs/crud-sharding/ShardingCrudPro.d.ts +0 -363
  143. package/dist/libs/crud-sharding/ShardingCrudPro.js +0 -675
  144. package/dist/libs/crud-sharding/ShardingRouter.d.ts +0 -69
  145. package/dist/libs/crud-sharding/ShardingRouter.js +0 -377
  146. package/dist/models/StandardColumns.d.ts +0 -71
  147. package/dist/models/StandardColumns.js +0 -28
  148. package/dist/service/curd/CrudProQuick.d.ts +0 -190
  149. package/dist/service/curd/CrudProQuick.js +0 -319
  150. package/dist/service/curd/README.md +0 -1100
  151. package/dist/service/curd/fixSoftDelete.d.ts +0 -20
  152. package/src/libs/crud-pro/README.md +0 -809
  153. package/src/libs/crud-pro/README_FUNC.md +0 -193
  154. package/src/libs/crud-sharding/ROUTING_LOGIC.md +0 -944
  155. package/src/libs/crud-sharding/ShardingCrudPro.ts +0 -835
  156. package/src/libs/crud-sharding/ShardingRouter.ts +0 -512
  157. package/src/models/StandardColumns.ts +0 -76
  158. package/src/service/curd/CrudProQuick.ts +0 -360
  159. package/src/service/curd/README.md +0 -1100
@@ -7,15 +7,15 @@
7
7
  * - YEAR: 按年分表,如 order_2024, order_2025
8
8
  * - MONTH: 按月分表,如 order_202401, order_202402
9
9
  * - DAY: 按日分表,如 order_20240101
10
- * - RANGE: 按范围分表,如 user_0 ~ user_99
11
10
  * - HASH: 按哈希分表,如 order_01 ~ order_16
11
+ * - KEY: 按键值分表,字段原值=表后缀,如 order_east, order_west
12
12
  * - CUSTOM: 自定义分表规则
13
13
  *
14
14
  * @example
15
- * import { ShardingCrudPro, ShardingType } from '../../libs/crud-sharding';
15
+ * import { ShardingByTimeCrud, ShardingType } from '../../libs/crud-sharding';
16
16
  *
17
- * // 创建分表操作器
18
- * const sharding = new ShardingCrudPro(crudPro, {
17
+ * // 创建时间分表操作器
18
+ * const sharding = new ShardingByTimeCrud(crudProFactory, {
19
19
  * type: ShardingType.MONTH,
20
20
  * baseTable: 't_order',
21
21
  * timeColumn: 'created_at',
@@ -25,21 +25,19 @@
25
25
  * await sharding.insert({
26
26
  * data: { order_id: '001', amount: 100, created_at: '2024-03-15' },
27
27
  * });
28
- *
29
- * // 分页查询(自动合并多表结果)
30
- * const result = await sharding.queryPage({
31
- * condition: { created_at: { $gte: '2024-01-01', $lte: '2024-03-31' } },
32
- * pageNo: 1,
33
- * pageSize: 10,
34
- * });
35
28
  */
36
- export { ShardingCrudPro } from './ShardingCrudPro';
37
- export { ShardingRouter } from './ShardingRouter';
29
+ export { ShardingBase } from './ShardingBase';
30
+ export { ShardingByTimeCrud } from './ShardingByTimeCrud';
31
+ export { ShardingByHashCrud } from './ShardingByHashCrud';
32
+ export { ShardingByKeyCrud } from './ShardingByKeyCrud';
33
+ export { ShardingByCustomCrud } from './ShardingByCustomCrud';
34
+ export { ShardingBase as ShardingCrudPro } from './ShardingBase';
38
35
  export { ShardingMerger } from './ShardingMerger';
39
36
  export { ShardingType } from './ShardingConfig';
40
37
  export type { IShardingConfig, IShardingRouterContext, IShardingRouterFunc, IShardingTimeRange, IShardingTableCreateOptions, IShardingTableCreateResult, IShardingCountCacheConfig, } from './ShardingConfig';
41
- export type { IShardingPageQueryResult } from './ShardingMerger';
42
- export type { IShardingSmartBatchInsertResult } from './ShardingCrudPro';
38
+ export { ShardingBatchInsertResult } from './ShardingResult';
39
+ export type { IShardingPageQueryResult, IShardingListQueryResult } from './ShardingMerger';
40
+ export { CrudWriteResult, CrudQueryOneResult, CrudQueryListResult, CrudQueryPageResult, CrudExistResult, CrudCountResult, CrudUpsertResult, } from '../../libs/crud-pro/models/CrudResult';
43
41
  export { ShardingTableCreator } from './ShardingTableCreator';
44
42
  export { ShardingCountCache, shardingHashCondition } from './ShardingCountCache';
45
43
  export type { ShardingTimeGranularity } from './ShardingUtils';
@@ -8,15 +8,15 @@
8
8
  * - YEAR: 按年分表,如 order_2024, order_2025
9
9
  * - MONTH: 按月分表,如 order_202401, order_202402
10
10
  * - DAY: 按日分表,如 order_20240101
11
- * - RANGE: 按范围分表,如 user_0 ~ user_99
12
11
  * - HASH: 按哈希分表,如 order_01 ~ order_16
12
+ * - KEY: 按键值分表,字段原值=表后缀,如 order_east, order_west
13
13
  * - CUSTOM: 自定义分表规则
14
14
  *
15
15
  * @example
16
- * import { ShardingCrudPro, ShardingType } from '../../libs/crud-sharding';
16
+ * import { ShardingByTimeCrud, ShardingType } from '../../libs/crud-sharding';
17
17
  *
18
- * // 创建分表操作器
19
- * const sharding = new ShardingCrudPro(crudPro, {
18
+ * // 创建时间分表操作器
19
+ * const sharding = new ShardingByTimeCrud(crudProFactory, {
20
20
  * type: ShardingType.MONTH,
21
21
  * baseTable: 't_order',
22
22
  * timeColumn: 'created_at',
@@ -26,26 +26,42 @@
26
26
  * await sharding.insert({
27
27
  * data: { order_id: '001', amount: 100, created_at: '2024-03-15' },
28
28
  * });
29
- *
30
- * // 分页查询(自动合并多表结果)
31
- * const result = await sharding.queryPage({
32
- * condition: { created_at: { $gte: '2024-01-01', $lte: '2024-03-31' } },
33
- * pageNo: 1,
34
- * pageSize: 10,
35
- * });
36
29
  */
37
30
  Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.shardingHashCondition = exports.ShardingCountCache = exports.ShardingTableCreator = exports.ShardingType = exports.ShardingMerger = exports.ShardingRouter = exports.ShardingCrudPro = void 0;
39
- // 核心类
40
- var ShardingCrudPro_1 = require("./ShardingCrudPro");
41
- Object.defineProperty(exports, "ShardingCrudPro", { enumerable: true, get: function () { return ShardingCrudPro_1.ShardingCrudPro; } });
42
- var ShardingRouter_1 = require("./ShardingRouter");
43
- Object.defineProperty(exports, "ShardingRouter", { enumerable: true, get: function () { return ShardingRouter_1.ShardingRouter; } });
31
+ exports.shardingHashCondition = exports.ShardingCountCache = exports.ShardingTableCreator = exports.CrudUpsertResult = exports.CrudCountResult = exports.CrudExistResult = exports.CrudQueryPageResult = exports.CrudQueryListResult = exports.CrudQueryOneResult = exports.CrudWriteResult = exports.ShardingBatchInsertResult = exports.ShardingType = exports.ShardingMerger = exports.ShardingCrudPro = exports.ShardingByCustomCrud = exports.ShardingByKeyCrud = exports.ShardingByHashCrud = exports.ShardingByTimeCrud = exports.ShardingBase = void 0;
32
+ // 基类
33
+ var ShardingBase_1 = require("./ShardingBase");
34
+ Object.defineProperty(exports, "ShardingBase", { enumerable: true, get: function () { return ShardingBase_1.ShardingBase; } });
35
+ // 四个子类
36
+ var ShardingByTimeCrud_1 = require("./ShardingByTimeCrud");
37
+ Object.defineProperty(exports, "ShardingByTimeCrud", { enumerable: true, get: function () { return ShardingByTimeCrud_1.ShardingByTimeCrud; } });
38
+ var ShardingByHashCrud_1 = require("./ShardingByHashCrud");
39
+ Object.defineProperty(exports, "ShardingByHashCrud", { enumerable: true, get: function () { return ShardingByHashCrud_1.ShardingByHashCrud; } });
40
+ var ShardingByKeyCrud_1 = require("./ShardingByKeyCrud");
41
+ Object.defineProperty(exports, "ShardingByKeyCrud", { enumerable: true, get: function () { return ShardingByKeyCrud_1.ShardingByKeyCrud; } });
42
+ var ShardingByCustomCrud_1 = require("./ShardingByCustomCrud");
43
+ Object.defineProperty(exports, "ShardingByCustomCrud", { enumerable: true, get: function () { return ShardingByCustomCrud_1.ShardingByCustomCrud; } });
44
+ // 兼容旧代码:ShardingCrudPro → ShardingBase
45
+ var ShardingBase_2 = require("./ShardingBase");
46
+ Object.defineProperty(exports, "ShardingCrudPro", { enumerable: true, get: function () { return ShardingBase_2.ShardingBase; } });
47
+ // 合并器(仅 Time 使用)
44
48
  var ShardingMerger_1 = require("./ShardingMerger");
45
49
  Object.defineProperty(exports, "ShardingMerger", { enumerable: true, get: function () { return ShardingMerger_1.ShardingMerger; } });
46
50
  // 配置和类型
47
51
  var ShardingConfig_1 = require("./ShardingConfig");
48
52
  Object.defineProperty(exports, "ShardingType", { enumerable: true, get: function () { return ShardingConfig_1.ShardingType; } });
53
+ // 结果类型
54
+ var ShardingResult_1 = require("./ShardingResult");
55
+ Object.defineProperty(exports, "ShardingBatchInsertResult", { enumerable: true, get: function () { return ShardingResult_1.ShardingBatchInsertResult; } });
56
+ // 重新导出 CrudResult 类型
57
+ var CrudResult_1 = require("../../libs/crud-pro/models/CrudResult");
58
+ Object.defineProperty(exports, "CrudWriteResult", { enumerable: true, get: function () { return CrudResult_1.CrudWriteResult; } });
59
+ Object.defineProperty(exports, "CrudQueryOneResult", { enumerable: true, get: function () { return CrudResult_1.CrudQueryOneResult; } });
60
+ Object.defineProperty(exports, "CrudQueryListResult", { enumerable: true, get: function () { return CrudResult_1.CrudQueryListResult; } });
61
+ Object.defineProperty(exports, "CrudQueryPageResult", { enumerable: true, get: function () { return CrudResult_1.CrudQueryPageResult; } });
62
+ Object.defineProperty(exports, "CrudExistResult", { enumerable: true, get: function () { return CrudResult_1.CrudExistResult; } });
63
+ Object.defineProperty(exports, "CrudCountResult", { enumerable: true, get: function () { return CrudResult_1.CrudCountResult; } });
64
+ Object.defineProperty(exports, "CrudUpsertResult", { enumerable: true, get: function () { return CrudResult_1.CrudUpsertResult; } });
49
65
  // 分表创建器
50
66
  var ShardingTableCreator_1 = require("./ShardingTableCreator");
51
67
  Object.defineProperty(exports, "ShardingTableCreator", { enumerable: true, get: function () { return ShardingTableCreator_1.ShardingTableCreator; } });
@@ -11,5 +11,6 @@ declare const RedisKeys: {
11
11
  CURD_MIX_BY_DICT_PREFIX: string;
12
12
  QUERY_ENUM_INFO_PREFIX: string;
13
13
  REDIS_LOCK_MIDDILEWARE: string;
14
+ TABLE_META_CACHE_INVALIDATE_CHANNEL: string;
14
15
  };
15
16
  export { RedisKeys };
@@ -14,5 +14,6 @@ const RedisKeys = {
14
14
  CURD_MIX_BY_DICT_PREFIX: 'FatCurdMixByDict@@',
15
15
  QUERY_ENUM_INFO_PREFIX: 'FatQueryEnum@@',
16
16
  REDIS_LOCK_MIDDILEWARE: 'FatRedisLock@@',
17
+ TABLE_META_CACHE_INVALIDATE_CHANNEL: 'FatTableMetaCacheInvalidate',
17
18
  };
18
19
  exports.RedisKeys = RedisKeys;
@@ -1,5 +1,6 @@
1
- import { IRequestCfgModel, IVisitor } from '../libs/crud-pro/interfaces';
1
+ import { IVisitor } from '../libs/crud-pro/interfaces';
2
2
  import { CacheLevelEnum } from "../models/SystemEntities";
3
+ export type { IRequestCfgModel2 } from '../libs/crud-pro-quick';
3
4
  export interface IAccountEntity {
4
5
  nick_name: string;
5
6
  avatar: string;
@@ -81,11 +82,6 @@ export declare const CTX_VISITOR_AVATAR = "visitor.avatar";
81
82
  export declare const CTX_VISITOR_NICKNAME = "visitor.nickName";
82
83
  export declare const CTX_VISITOR_ACCOUNT_TYPE = "visitor.accountType";
83
84
  export declare const CTX_WORKBENCH_CODE = "visitor.workbenchCode";
84
- export interface IRequestCfgModel2 extends IRequestCfgModel {
85
- enableStandardUpdateCfg?: boolean | string[];
86
- enableStandardUpdateCfgCondition?: boolean | string[];
87
- enableSoftDelete?: boolean;
88
- }
89
85
  export interface IVisitorExt extends IVisitor {
90
86
  workbenchCode: string;
91
87
  avatar: string;
@@ -7,8 +7,8 @@ export declare class SysAppService extends BaseService {
7
7
  getSysAppPageOne({ page_path, workbench_code }: {
8
8
  page_path: string;
9
9
  workbench_code: string;
10
- }): Promise<any>;
11
- getSysAppOne(app_code: string): Promise<any>;
10
+ }): Promise<Record<string, any>>;
11
+ getSysAppOne(app_code: string): Promise<Record<string, any>>;
12
12
  deletePrivateField(parsedAppInfo: any): any;
13
13
  removeSysAppOneCache(app_code: string): Promise<any>;
14
14
  removeSysAppCacheByCondition({ condition }: any): Promise<void>;
@@ -20,11 +20,19 @@ const bizmodels_1 = require("../models/bizmodels");
20
20
  let SysAppService = class SysAppService extends BaseService_1.BaseService {
21
21
  get sysAppDao() {
22
22
  const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
23
- return this.curdProService.getQuickCrud(SystemDbName, SystemDbType, SystemTables_1.SystemTables.sys_app);
23
+ return this.curdProService.getQuickCrud({
24
+ sqlDatabase: SystemDbName,
25
+ sqlDbType: SystemDbType,
26
+ sqlTable: SystemTables_1.SystemTables.sys_app,
27
+ });
24
28
  }
25
29
  get sysAppPageDao() {
26
30
  const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
27
- return this.curdProService.getQuickCrud(SystemDbName, SystemDbType, SystemTables_1.SystemTables.sys_app_page);
31
+ return this.curdProService.getQuickCrud({
32
+ sqlDatabase: SystemDbName,
33
+ sqlDbType: SystemDbType,
34
+ sqlTable: SystemTables_1.SystemTables.sys_app_page,
35
+ });
28
36
  }
29
37
  async getSysAppPageOne({ page_path, workbench_code }) {
30
38
  if (!page_path || typeof page_path !== 'string') {
@@ -37,9 +45,10 @@ let SysAppService = class SysAppService extends BaseService_1.BaseService {
37
45
  cacheKey: `${workbench_code}#${page_path}`,
38
46
  cacheName: bizmodels_1.CacheNameEnum.GetSysAppPageOne,
39
47
  getter: async () => {
40
- return await this.sysAppPageDao.getUniqueOne({
48
+ const res = await this.sysAppPageDao.findOne({
41
49
  condition: { page_path, workbench_code, deleted_at: 0 }
42
50
  });
51
+ return res.row;
43
52
  },
44
53
  });
45
54
  }
@@ -51,9 +60,10 @@ let SysAppService = class SysAppService extends BaseService_1.BaseService {
51
60
  cacheKey: app_code,
52
61
  cacheName: bizmodels_1.CacheNameEnum.GetSysAppOne,
53
62
  getter: async () => {
54
- return await this.sysAppDao.getUniqueOne({
63
+ const res = await this.sysAppDao.findOne({
55
64
  condition: { app_code, deleted_at: 0 }
56
65
  });
66
+ return res.row;
57
67
  },
58
68
  });
59
69
  }
@@ -85,10 +95,11 @@ let SysAppService = class SysAppService extends BaseService_1.BaseService {
85
95
  if (!condition) {
86
96
  throw new Error('[removeSysAppCacheByCondition] condition required');
87
97
  }
88
- const appList = await this.sysAppDao.getList({
98
+ const res = await this.sysAppDao.findList({
89
99
  condition: condition,
90
100
  columns: ['id', 'app_code']
91
101
  });
102
+ const appList = res.rows;
92
103
  for (const app of appList) {
93
104
  await this.removeSysAppOneCache(app.app_code);
94
105
  }
@@ -5,6 +5,6 @@ export declare class SysConfigService extends BaseService {
5
5
  private curdProService;
6
6
  private cacheServiceFactory;
7
7
  private get sysConfigsDao();
8
- getSysConfigOne(config_code: string): Promise<any>;
8
+ getSysConfigOne(config_code: string): Promise<Record<string, any>>;
9
9
  removeSysConfigOneCache(config_code: string): Promise<any>;
10
10
  }
@@ -20,7 +20,11 @@ const CacheServiceFactory_1 = require("../service/base/cache/CacheServiceFactory
20
20
  let SysConfigService = class SysConfigService extends BaseService_1.BaseService {
21
21
  get sysConfigsDao() {
22
22
  const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
23
- return this.curdProService.getQuickCrud(SystemDbName, SystemDbType, SystemTables_1.SystemTables.sys_configs);
23
+ return this.curdProService.getQuickCrud({
24
+ sqlDatabase: SystemDbName,
25
+ sqlDbType: SystemDbType,
26
+ sqlTable: SystemTables_1.SystemTables.sys_configs,
27
+ });
24
28
  }
25
29
  async getSysConfigOne(config_code) {
26
30
  if (!config_code || typeof config_code !== 'string') {
@@ -30,9 +34,10 @@ let SysConfigService = class SysConfigService extends BaseService_1.BaseService
30
34
  cacheKey: config_code,
31
35
  cacheName: bizmodels_1.CacheNameEnum.GetSysConfigOne,
32
36
  getter: async () => {
33
- return await this.sysConfigsDao.getUniqueOne({
37
+ const res = await this.sysConfigsDao.findOne({
34
38
  condition: { config_code, deleted_at: 0 }
35
39
  });
40
+ return res.row;
36
41
  },
37
42
  });
38
43
  }
@@ -20,11 +20,19 @@ const bizmodels_1 = require("../models/bizmodels");
20
20
  let SysDictDataService = class SysDictDataService extends BaseService_1.BaseService {
21
21
  get sys_data_dict_item() {
22
22
  const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
23
- return this.curdProService.getQuickCrud(SystemDbName, SystemDbType, SystemTables_1.SystemTables.sys_data_dict_item);
23
+ return this.curdProService.getQuickCrud({
24
+ sqlDatabase: SystemDbName,
25
+ sqlDbType: SystemDbType,
26
+ sqlTable: SystemTables_1.SystemTables.sys_data_dict_item,
27
+ });
24
28
  }
25
29
  // private get sys_data_dict(){
26
30
  // const { SystemDbName, SystemDbType } = GLOBAL_STATIC_CONFIG.getConfig();
27
- // return this.curdProService.getQuickCrud(SystemDbName, SystemDbType, SystemTables.sys_data_dict)
31
+ // return this.curdProService.getQuickCrud({
32
+ // sqlDatabase: SystemDbName,
33
+ // sqlDbType: SystemDbType,
34
+ // sqlTable: SystemTables.sys_data_dict,
35
+ // })
28
36
  // }
29
37
  async getDataDictItemsByDictCode(dict_code) {
30
38
  if (!dict_code || typeof dict_code !== 'string') {
@@ -34,14 +42,16 @@ let SysDictDataService = class SysDictDataService extends BaseService_1.BaseServ
34
42
  cacheKey: dict_code,
35
43
  cacheName: bizmodels_1.CacheNameEnum.GetDataDictItemsByDictCode,
36
44
  getter: async () => {
37
- return await this.sys_data_dict_item.getList({
45
+ const res = await this.sys_data_dict_item.findList({
38
46
  condition: { dict_code, status: 1, deleted_at: 0 }
39
47
  });
48
+ return res.rows;
40
49
  },
41
50
  });
42
51
  }
43
52
  async removeCacheByDictItemId(dict_item_id) {
44
- const dictItemObj = await this.sys_data_dict_item.getUniqueOne({ condition: { id: dict_item_id } });
53
+ const res = await this.sys_data_dict_item.findOne({ condition: { id: dict_item_id } });
54
+ const dictItemObj = res.row;
45
55
  return this.removeCacheByDictCode(dictItemObj['dict_code']);
46
56
  }
47
57
  // public async removeCacheByDictId(dict_id: string) {
@@ -20,7 +20,11 @@ const bizmodels_1 = require("../models/bizmodels");
20
20
  let SysMenuService = class SysMenuService extends BaseService_1.BaseService {
21
21
  get sys_menus_table() {
22
22
  const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
23
- return this.curdProService.getQuickCrud(SystemDbName, SystemDbType, SystemTables_1.SystemTables.sys_menus);
23
+ return this.curdProService.getQuickCrud({
24
+ sqlDatabase: SystemDbName,
25
+ sqlDbType: SystemDbType,
26
+ sqlTable: SystemTables_1.SystemTables.sys_menus,
27
+ });
24
28
  }
25
29
  /**
26
30
  * 获取所有菜单列表
@@ -31,9 +35,10 @@ let SysMenuService = class SysMenuService extends BaseService_1.BaseService {
31
35
  cacheKey: bizmodels_1.CacheNameEnum.GetSysMenusList,
32
36
  cacheName: bizmodels_1.CacheNameEnum.GetSysMenusList,
33
37
  getter: async () => {
34
- return await this.sys_menus_table.getList({
38
+ const res = await this.sys_menus_table.findList({
35
39
  condition: {}
36
40
  });
41
+ return res.rows;
37
42
  },
38
43
  });
39
44
  }
@@ -0,0 +1,31 @@
1
+ import { RedisService } from '@midwayjs/redis';
2
+ /**
3
+ * 初始化发布客户端
4
+ *
5
+ * 在 Midway 容器初始化完成后调用,注入已有的 RedisService 实例
6
+ * @param client RedisService 实例
7
+ */
8
+ export declare function initTableMetaCachePublishClient(client: RedisService): void;
9
+ /**
10
+ * 初始化 Redis 订阅,监听缓存失效广播
11
+ *
12
+ * 使用 RedisService.duplicate() 创建独立的订阅连接。
13
+ * 收到广播后自动清空本节点的本地缓存。
14
+ *
15
+ * @param mainClient 已有的 RedisService 实例,用于 duplicate 出订阅连接
16
+ */
17
+ export declare function initTableMetaCacheSubscriber(mainClient: RedisService): void;
18
+ /**
19
+ * 清空本节点缓存并广播通知集群中其他节点
20
+ *
21
+ * 调用流程:
22
+ * 1. 清空本节点本地缓存
23
+ * 2. 通过 Redis PUBLISH 广播消息
24
+ * 3. 其他节点收到消息后清空各自的本地缓存
25
+ *
26
+ * @returns 清空前的缓存统计
27
+ */
28
+ export declare function clearTableMetaCacheWithBroadcast(): {
29
+ metaCacheCount: number;
30
+ tableInfoCacheCount: number;
31
+ };
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clearTableMetaCacheWithBroadcast = exports.initTableMetaCacheSubscriber = exports.initTableMetaCachePublishClient = void 0;
4
+ const CrudProTableMetaService_1 = require("../libs/crud-pro/services/CrudProTableMetaService");
5
+ const RedisKeys_1 = require("../models/RedisKeys");
6
+ const CHANNEL = RedisKeys_1.RedisKeys.TABLE_META_CACHE_INVALIDATE_CHANNEL;
7
+ /**
8
+ * 本节点唯一标识,用于区分是自己发出的广播还是其他节点发出的
9
+ * 避免重复清空(本节点已在发布前清空过)
10
+ */
11
+ const NODE_ID = `node_${process.pid}_${Date.now()}`;
12
+ /**
13
+ * 用于发布消息的 Redis 客户端(复用 @midwayjs/redis 注入的实例)
14
+ */
15
+ let publishClient = null;
16
+ /**
17
+ * 用于订阅的 Redis 客户端(独立连接,ioredis 规定订阅连接不能执行普通命令)
18
+ */
19
+ let subscribeClient = null;
20
+ /**
21
+ * 初始化发布客户端
22
+ *
23
+ * 在 Midway 容器初始化完成后调用,注入已有的 RedisService 实例
24
+ * @param client RedisService 实例
25
+ */
26
+ function initTableMetaCachePublishClient(client) {
27
+ publishClient = client;
28
+ }
29
+ exports.initTableMetaCachePublishClient = initTableMetaCachePublishClient;
30
+ /**
31
+ * 初始化 Redis 订阅,监听缓存失效广播
32
+ *
33
+ * 使用 RedisService.duplicate() 创建独立的订阅连接。
34
+ * 收到广播后自动清空本节点的本地缓存。
35
+ *
36
+ * @param mainClient 已有的 RedisService 实例,用于 duplicate 出订阅连接
37
+ */
38
+ function initTableMetaCacheSubscriber(mainClient) {
39
+ if (subscribeClient) {
40
+ return; // 防止重复初始化
41
+ }
42
+ // duplicate() 创建一个同配置的独立连接
43
+ subscribeClient = mainClient.duplicate();
44
+ subscribeClient.subscribe(CHANNEL).catch((err) => {
45
+ console.error('[TableMetaCacheRedis] subscribe failed:', err.message);
46
+ });
47
+ subscribeClient.on('message', (channel, message) => {
48
+ if (channel !== CHANNEL)
49
+ return;
50
+ try {
51
+ const data = JSON.parse(message);
52
+ // 跳过自己发出的广播(本节点已在发布前清空过)
53
+ if (data.nodeId === NODE_ID)
54
+ return;
55
+ const stats = (0, CrudProTableMetaService_1.clearTableMetaCache)();
56
+ console.info(`[TableMetaCacheRedis] 收到其他节点(${data.nodeId})的缓存清空广播,已清空本地缓存:`, stats);
57
+ }
58
+ catch (e) {
59
+ console.error('[TableMetaCacheRedis] 处理缓存失效广播异常:', e);
60
+ }
61
+ });
62
+ subscribeClient.on('error', (err) => {
63
+ console.error('[TableMetaCacheRedis] subscriber connection error:', err.message);
64
+ });
65
+ console.info('[TableMetaCacheRedis] 订阅已启动,监听频道:', CHANNEL);
66
+ }
67
+ exports.initTableMetaCacheSubscriber = initTableMetaCacheSubscriber;
68
+ /**
69
+ * 清空本节点缓存并广播通知集群中其他节点
70
+ *
71
+ * 调用流程:
72
+ * 1. 清空本节点本地缓存
73
+ * 2. 通过 Redis PUBLISH 广播消息
74
+ * 3. 其他节点收到消息后清空各自的本地缓存
75
+ *
76
+ * @returns 清空前的缓存统计
77
+ */
78
+ function clearTableMetaCacheWithBroadcast() {
79
+ // 1. 清空本节点缓存
80
+ const stats = (0, CrudProTableMetaService_1.clearTableMetaCache)();
81
+ // 2. 广播通知其他节点
82
+ if (publishClient && typeof publishClient.publish === 'function') {
83
+ const message = JSON.stringify({
84
+ nodeId: NODE_ID,
85
+ timestamp: Date.now(),
86
+ beforeClear: stats,
87
+ });
88
+ publishClient.publish(CHANNEL, message).catch((err) => {
89
+ console.error('[TableMetaCacheRedis] publish failed:', err.message);
90
+ });
91
+ }
92
+ else {
93
+ // 没有 Redis 连接时仅清空本地(单节点部署降级)
94
+ console.info('[TableMetaCacheRedis] 无 Redis 发布客户端,仅清空本节点缓存');
95
+ }
96
+ return stats;
97
+ }
98
+ exports.clearTableMetaCacheWithBroadcast = clearTableMetaCacheWithBroadcast;
@@ -1,7 +1,8 @@
1
- import { ColumnRelation, IRequestCfgModel, IRequestModel, ISqlCfgModel, ITableListResult, ITableNamesOptions, ITableNamesQuery } from '../../libs/crud-pro/interfaces';
1
+ import { ColumnRelation, IRequestCfgModel, IRequestModel, ISqlCfgModel, ITableListResult, ITableNamesOptions, ITableNamesQuery, ExecuteSQLResult } from '../../libs/crud-pro/interfaces';
2
2
  import { IRequestCfgModel2 } from '../../models/bizmodels';
3
- import { SqlDbType } from '../../libs/crud-pro/models/keys';
4
3
  import { ExecuteContext } from '../../libs/crud-pro/models/ExecuteContext';
4
+ import { ShardingBase } from "../../libs/crud-sharding";
5
+ import { IGetQuickCrudParam, IGetShardingCrudParam } from './CurdProService';
5
6
  export interface ILinkColumnRelationParam {
6
7
  columnsRelations: ColumnRelation[];
7
8
  }
@@ -14,8 +15,9 @@ export declare class CurdMixService {
14
15
  private curdMixByLinkToCustomService;
15
16
  private prepare;
16
17
  executeCrudByCfg(reqJson: IRequestModel, cfgModel: IRequestCfgModel2): Promise<ExecuteContext>;
17
- getBbUtil(sqlDatabase: string, sqlDbType: SqlDbType, sqlTable?: string): import("./CrudProQuick").CrudProQuick;
18
- executeSQL(sqlCfgModel: ISqlCfgModel): Promise<any>;
18
+ getQuickCrud(param: IGetQuickCrudParam): import("../..").CrudProQuick;
19
+ getShardingCrud(param: IGetShardingCrudParam): ShardingBase;
20
+ executeSQL(sqlCfgModel: ISqlCfgModel): Promise<ExecuteSQLResult>;
19
21
  executeCrud(reqJson: IRequestModel): Promise<ExecuteContext>;
20
22
  getCachedCfgByMethod(method: string): Promise<IRequestCfgModel>;
21
23
  /**
@@ -30,9 +30,23 @@ let CurdMixService = class CurdMixService {
30
30
  this.prepare();
31
31
  return this.curdProService.executeCrudByCfg(reqJson, cfgModel);
32
32
  }
33
- getBbUtil(sqlDatabase, sqlDbType, sqlTable) {
33
+ // /**
34
+ // * @deprecated 请使用 getQuickCrud 替代
35
+ // * @param sqlDatabase
36
+ // * @param sqlDbType
37
+ // * @param sqlTable
38
+ // */
39
+ // getBbUtil(sqlDatabase: string, sqlDbType: SqlDbType, sqlTable?: string) {
40
+ // this.prepare();
41
+ // return this.curdProService.getQuickCrud({ sqlDatabase, sqlDbType, sqlTable });
42
+ // }
43
+ getQuickCrud(param) {
34
44
  this.prepare();
35
- return this.curdProService.getQuickCrud(sqlDatabase, sqlDbType, sqlTable);
45
+ return this.curdProService.getQuickCrud(param);
46
+ }
47
+ getShardingCrud(param) {
48
+ this.prepare();
49
+ return this.curdProService.getShardingCrud(param);
36
50
  }
37
51
  async executeSQL(sqlCfgModel) {
38
52
  this.prepare();