midway-fatcms 0.0.5 → 0.0.7

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 (132) hide show
  1. package/.qoder/skills/midway-fatcms-crud/SKILL.md +375 -0
  2. package/.qoder/skills/midway-fatcms-crud/examples.md +990 -0
  3. package/.qoder/skills/midway-fatcms-crud/reference.md +568 -0
  4. package/README.md +377 -134
  5. package/dist/controller/manage/CrudStandardDesignApi.d.ts +0 -2
  6. package/dist/controller/manage/CrudStandardDesignApi.js +11 -85
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.js +2 -0
  9. package/dist/libs/crud-pro/CrudPro.d.ts +9 -1
  10. package/dist/libs/crud-pro/CrudPro.js +15 -0
  11. package/dist/libs/crud-pro/README.md +809 -0
  12. package/dist/libs/crud-pro/README_FUNC.md +193 -0
  13. package/dist/libs/crud-pro/exceptions.d.ts +2 -0
  14. package/dist/libs/crud-pro/exceptions.js +2 -0
  15. package/dist/libs/crud-pro/interfaces.d.ts +34 -1
  16. package/dist/libs/crud-pro/models/ExecuteContext.d.ts +3 -3
  17. package/dist/libs/crud-pro/models/ExecuteContext.js +2 -0
  18. package/dist/libs/crud-pro/models/RequestModel.d.ts +6 -2
  19. package/dist/libs/crud-pro/models/RequestModel.js +20 -53
  20. package/dist/libs/crud-pro/models/ResModel.d.ts +6 -4
  21. package/dist/libs/crud-pro/models/ServiceHub.d.ts +1 -0
  22. package/dist/libs/crud-pro/models/keys.d.ts +6 -1
  23. package/dist/libs/crud-pro/models/keys.js +5 -0
  24. package/dist/libs/crud-pro/services/CrudProDataTypeConvertService.d.ts +52 -0
  25. package/dist/libs/crud-pro/services/CrudProDataTypeConvertService.js +158 -0
  26. package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +20 -1
  27. package/dist/libs/crud-pro/services/CrudProFieldValidateService.d.ts +7 -0
  28. package/dist/libs/crud-pro/services/CrudProFieldValidateService.js +32 -0
  29. package/dist/libs/crud-pro/services/CrudProGenSqlService.d.ts +13 -0
  30. package/dist/libs/crud-pro/services/CrudProGenSqlService.js +44 -7
  31. package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.d.ts +43 -0
  32. package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.js +132 -1
  33. package/dist/libs/crud-pro/services/CrudProTableMetaService.d.ts +15 -1
  34. package/dist/libs/crud-pro/services/CrudProTableMetaService.js +107 -0
  35. package/dist/libs/crud-pro/services/CurdProServiceHub.d.ts +5 -1
  36. package/dist/libs/crud-pro/services/CurdProServiceHub.js +11 -0
  37. package/dist/libs/crud-pro/utils/DateTimeUtils.d.ts +1 -0
  38. package/dist/libs/crud-pro/utils/DateTimeUtils.js +3 -0
  39. package/dist/libs/crud-pro/utils/MixinUtils.d.ts +32 -0
  40. package/dist/libs/crud-pro/utils/MixinUtils.js +85 -1
  41. package/dist/libs/crud-pro/utils/OrderByUtils.d.ts +70 -0
  42. package/dist/libs/crud-pro/utils/OrderByUtils.js +158 -0
  43. package/dist/libs/crud-pro/utils/ValidateUtils.js +1 -1
  44. package/dist/libs/crud-sharding/ROUTING_LOGIC.md +944 -0
  45. package/dist/libs/crud-sharding/ShardingConfig.d.ts +218 -0
  46. package/dist/libs/crud-sharding/ShardingConfig.js +32 -0
  47. package/dist/libs/crud-sharding/ShardingCountCache.d.ts +69 -0
  48. package/dist/libs/crud-sharding/ShardingCountCache.js +160 -0
  49. package/dist/libs/crud-sharding/ShardingCrudPro.d.ts +363 -0
  50. package/dist/libs/crud-sharding/ShardingCrudPro.js +675 -0
  51. package/dist/libs/crud-sharding/ShardingMerger.d.ts +130 -0
  52. package/dist/libs/crud-sharding/ShardingMerger.js +282 -0
  53. package/dist/libs/crud-sharding/ShardingRouter.d.ts +69 -0
  54. package/dist/libs/crud-sharding/ShardingRouter.js +377 -0
  55. package/dist/libs/crud-sharding/ShardingTableCreator.d.ts +146 -0
  56. package/dist/libs/crud-sharding/ShardingTableCreator.js +805 -0
  57. package/dist/libs/crud-sharding/ShardingUtils.d.ts +38 -0
  58. package/dist/libs/crud-sharding/ShardingUtils.js +77 -0
  59. package/dist/libs/crud-sharding/index.d.ts +45 -0
  60. package/dist/libs/crud-sharding/index.js +55 -0
  61. package/dist/models/StandardColumns.d.ts +71 -0
  62. package/dist/models/StandardColumns.js +28 -0
  63. package/dist/service/SysAppService.js +2 -2
  64. package/dist/service/SysConfigService.js +1 -1
  65. package/dist/service/SysDictDataService.js +2 -2
  66. package/dist/service/SysMenuService.js +1 -1
  67. package/dist/service/UserAccountService.d.ts +1 -1
  68. package/dist/service/crudstd/CrudStdService.d.ts +0 -1
  69. package/dist/service/crudstd/CrudStdService.js +0 -27
  70. package/dist/service/curd/CrudProQuick.d.ts +134 -4
  71. package/dist/service/curd/CrudProQuick.js +155 -3
  72. package/dist/service/curd/CurdMixService.d.ts +2 -1
  73. package/dist/service/curd/CurdMixService.js +5 -1
  74. package/dist/service/curd/CurdProService.d.ts +44 -2
  75. package/dist/service/curd/CurdProService.js +53 -1
  76. package/dist/service/curd/README.md +1100 -0
  77. package/dist/service/curd/fixSoftDelete.d.ts +14 -0
  78. package/dist/service/curd/fixSoftDelete.js +29 -11
  79. package/dist/service/flow/FlowConfigService.js +1 -1
  80. package/dist/service/flow/FlowInstanceCrudService.js +1 -1
  81. package/package.json +4 -1
  82. package/src/controller/gateway/AsyncTaskController.ts +1 -1
  83. package/src/controller/manage/CrudStandardDesignApi.ts +16 -100
  84. package/src/index.ts +3 -0
  85. package/src/libs/crud-pro/CrudPro.ts +19 -1
  86. package/src/libs/crud-pro/README.md +809 -0
  87. package/src/libs/crud-pro/README_FUNC.md +193 -0
  88. package/src/libs/crud-pro/exceptions.ts +2 -0
  89. package/src/libs/crud-pro/interfaces.ts +38 -1
  90. package/src/libs/crud-pro/models/ExecuteContext.ts +6 -3
  91. package/src/libs/crud-pro/models/RequestModel.ts +23 -65
  92. package/src/libs/crud-pro/models/ResModel.ts +10 -4
  93. package/src/libs/crud-pro/models/ServiceHub.ts +2 -0
  94. package/src/libs/crud-pro/models/keys.ts +5 -0
  95. package/src/libs/crud-pro/services/CrudProDataTypeConvertService.ts +171 -0
  96. package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +24 -1
  97. package/src/libs/crud-pro/services/CrudProFieldValidateService.ts +53 -1
  98. package/src/libs/crud-pro/services/CrudProGenSqlService.ts +51 -7
  99. package/src/libs/crud-pro/services/CrudProOriginToExecuteSql.ts +159 -2
  100. package/src/libs/crud-pro/services/CrudProTableMetaService.ts +139 -1
  101. package/src/libs/crud-pro/services/CurdProServiceHub.ts +16 -1
  102. package/src/libs/crud-pro/utils/DateTimeUtils.ts +3 -0
  103. package/src/libs/crud-pro/utils/MixinUtils.ts +97 -1
  104. package/src/libs/crud-pro/utils/OrderByUtils.ts +169 -0
  105. package/src/libs/crud-pro/utils/ValidateUtils.ts +1 -1
  106. package/src/libs/crud-sharding/ROUTING_LOGIC.md +944 -0
  107. package/src/libs/crud-sharding/ShardingConfig.ts +240 -0
  108. package/src/libs/crud-sharding/ShardingCountCache.ts +200 -0
  109. package/src/libs/crud-sharding/ShardingCrudPro.ts +835 -0
  110. package/src/libs/crud-sharding/ShardingMerger.ts +384 -0
  111. package/src/libs/crud-sharding/ShardingRouter.ts +512 -0
  112. package/src/libs/crud-sharding/ShardingTableCreator.ts +1007 -0
  113. package/src/libs/crud-sharding/ShardingUtils.ts +84 -0
  114. package/src/libs/crud-sharding/index.ts +64 -0
  115. package/src/models/StandardColumns.ts +76 -0
  116. package/src/service/FileCenterService.ts +1 -1
  117. package/src/service/SysAppService.ts +2 -2
  118. package/src/service/SysConfigService.ts +1 -1
  119. package/src/service/SysDictDataService.ts +2 -2
  120. package/src/service/SysMenuService.ts +2 -2
  121. package/src/service/WorkbenchService.ts +1 -1
  122. package/src/service/anyapi/AnyApiService.ts +1 -1
  123. package/src/service/asyncTask/AsyncTaskRunnerService.ts +1 -1
  124. package/src/service/crudstd/CrudStdService.ts +0 -32
  125. package/src/service/curd/CrudProQuick.ts +164 -5
  126. package/src/service/curd/CurdMixService.ts +7 -2
  127. package/src/service/curd/CurdProService.ts +62 -3
  128. package/src/service/curd/README.md +1100 -0
  129. package/src/service/curd/fixCfgModel.ts +1 -2
  130. package/src/service/curd/fixSoftDelete.ts +38 -16
  131. package/src/service/flow/FlowConfigService.ts +1 -1
  132. package/src/service/flow/FlowInstanceCrudService.ts +1 -1
@@ -0,0 +1,384 @@
1
+ import { CrudPro } from '@/libs/crud-pro/CrudPro';
2
+ import { IRequestModel, IRequestCfgModel } from '@/libs/crud-pro/interfaces';
3
+ import { ExecuteContext } from '@/libs/crud-pro/models/ExecuteContext';
4
+ import { KeysOfSimpleSQL } from '@/libs/crud-pro/models/keys';
5
+ import { ShardingCountCache, shardingHashCondition } from './ShardingCountCache';
6
+
7
+ /**
8
+ * 分页查询结果
9
+ */
10
+ export interface IShardingPageQueryResult {
11
+ rows: any[];
12
+ total_count: number;
13
+ }
14
+
15
+ /**
16
+ * 分表查询结果合并器
17
+ *
18
+ * 处理跨多个分表的查询结果合并:
19
+ * - 分页查询:顺序累计查询 + 结果合并
20
+ * - 列表查询:并行查询 + 结果合并
21
+ *
22
+ * 使用约束(时间分表专用):
23
+ * - 排序字段必须是分表字段(timeColumn/created_at)
24
+ * - 排序方向支持 DESC(最新在前)和 ASC(最旧在前)
25
+ * - DESC 时表顺序为 新→旧,ASC 时表顺序为 旧→新(由 ShardingCrudPro 保证)
26
+ *
27
+ * 在上述约束下,无需内存排序,直接按表顺序拼接即可。
28
+ */
29
+ export class ShardingMerger {
30
+ private countCache: ShardingCountCache | undefined;
31
+
32
+ /**
33
+ * 设置 COUNT 缓存实例
34
+ */
35
+ public setCountCache(cache: ShardingCountCache): void {
36
+ this.countCache = cache;
37
+ }
38
+ /**
39
+ * 合并多表分页查询结果(时间分表专用,按表顺序拼接优化)
40
+ *
41
+ * 前提条件:
42
+ * - DESC 时 tables 已按时间倒序排列(新→旧),ASC 时已按时间正序排列(旧→新)
43
+ * - orderBy 为 timeColumn DESC 或 timeColumn ASC
44
+ *
45
+ * 执行流程:
46
+ * 1. 并行统计各分表记录数
47
+ * 2. 根据累计数量直接定位目标表,跳过无关表
48
+ * 3. 只查询包含目标数据的分表,精确计算表内偏移
49
+ *
50
+ * @param crudPro CrudPro 实例
51
+ * @param tables 分表列表(DESC: 新→旧,ASC: 旧→新)
52
+ * @param reqJson 请求参数
53
+ * @param cfgJson 配置
54
+ * @returns 分页结果
55
+ */
56
+ public async mergePageQuery(
57
+ crudPro: CrudPro,
58
+ tables: string[],
59
+ reqJson: IRequestModel,
60
+ cfgJson: IRequestCfgModel
61
+ ): Promise<IShardingPageQueryResult> {
62
+ const { pageNo = 1, pageSize = 10 } = reqJson;
63
+ const offset = (pageNo - 1) * pageSize;
64
+ const targetEnd = offset + pageSize; // 需要取到第几条
65
+
66
+ // 1. 并行查询所有分表的记录数
67
+ const countPromises = tables.map(table =>
68
+ this.queryCountSafe(crudPro, table, reqJson, cfgJson)
69
+ );
70
+ const counts = await Promise.all(countPromises);
71
+ const totalCount = counts.reduce((sum, c) => sum + c, 0);
72
+
73
+ // 总数为0,直接返回
74
+ if (totalCount === 0) {
75
+ return { rows: [], total_count: 0 };
76
+ }
77
+
78
+ // 2. 根据累计数量直接定位目标表
79
+ const targetTables = this.locateTargetTables(tables, counts, offset, targetEnd);
80
+
81
+ // 3. 只查询包含目标数据的分表
82
+ let allRows: any[] = [];
83
+ for (const target of targetTables) {
84
+ const rows = await this.queryRowsSafeWithOffset(
85
+ crudPro, target.table, reqJson, cfgJson,
86
+ target.innerOffset, target.innerLimit
87
+ );
88
+ allRows = allRows.concat(rows);
89
+ }
90
+
91
+ return {
92
+ rows: allRows,
93
+ total_count: totalCount,
94
+ };
95
+ }
96
+
97
+ /**
98
+ * 合并多表普通查询结果(时间分表专用,按表顺序拼接优化)
99
+ *
100
+ * 前提条件:
101
+ * - DESC 时 tables 已按时间倒序排列(新→旧),ASC 时已按时间正序排列(旧→新)
102
+ * - orderBy 为 timeColumn DESC 或 timeColumn ASC
103
+ *
104
+ * 执行流程:
105
+ * 1. 串行查询分表,按表顺序拼接
106
+ * 2. 达到 maxRows 上限后立即停止,避免查询无关表
107
+ *
108
+ * @param crudPro CrudPro 实例
109
+ * @param tables 分表列表(DESC: 新→旧,ASC: 旧→新)
110
+ * @param reqJson 请求参数
111
+ * @param cfgJson 配置
112
+ * @param maxRows 最大返回行数(默认 10000,防止 OOM)
113
+ * @returns 数据列表
114
+ */
115
+ public async mergeQuery(
116
+ crudPro: CrudPro,
117
+ tables: string[],
118
+ reqJson: IRequestModel,
119
+ cfgJson: IRequestCfgModel,
120
+ maxRows: number = 10000
121
+ ): Promise<any[]> {
122
+ // 串行查询分表,按表顺序拼接,达到上限即停
123
+ let allRows: any[] = [];
124
+
125
+ for (const table of tables) {
126
+ const needMore = maxRows - allRows.length;
127
+ if (needMore <= 0) {
128
+ break;
129
+ }
130
+
131
+ const rows = await this.queryRowsSafe(crudPro, table, reqJson, cfgJson, needMore);
132
+ allRows = allRows.concat(rows);
133
+
134
+ // 达到上限后停止,不再查询后续表
135
+ if (allRows.length >= maxRows) {
136
+ allRows = allRows.slice(0, maxRows);
137
+ break;
138
+ }
139
+ }
140
+
141
+ return allRows;
142
+ }
143
+
144
+ // ============ 私有方法:分页定位 ============
145
+
146
+ /**
147
+ * 根据各表数量和分页偏移,直接定位目标表
148
+ *
149
+ * 核心优化:跳过不包含目标数据的分表,只返回需要查询的表及其表内偏移
150
+ *
151
+ * 示例:
152
+ * tables: [t_order_202403, t_order_202402, t_order_202401]
153
+ * counts: [5, 20, 1000]
154
+ * 累计: [5, 25, 1025]
155
+ *
156
+ * offset=990, targetEnd=1000
157
+ * → 202403 累计5 < 990,跳过
158
+ * → 202402 累计25 < 990,跳过
159
+ * → 202401 累计1025 >= 990,命中
160
+ * innerOffset = 990 - 25 = 965
161
+ * innerLimit = min(1000-25, 1025-990) = 10
162
+ *
163
+ * @param tables 分表列表
164
+ * @param counts 各表记录数
165
+ * @param offset 全局偏移
166
+ * @param targetEnd 全局截止位置
167
+ */
168
+ private locateTargetTables(
169
+ tables: string[],
170
+ counts: number[],
171
+ offset: number,
172
+ targetEnd: number
173
+ ): Array<{ table: string; innerOffset: number; innerLimit: number }> {
174
+ const result: Array<{ table: string; innerOffset: number; innerLimit: number }> = [];
175
+ let accumulated = 0; // 累计已跳过的记录数
176
+
177
+ for (let i = 0; i < tables.length; i++) {
178
+ const count = counts[i];
179
+
180
+ // 跳过空表
181
+ if (count === 0) continue;
182
+
183
+ // 当前表的累计终点
184
+ const tableEnd = accumulated + count;
185
+
186
+ // 当前表完全在目标范围之前,跳过
187
+ if (tableEnd <= offset) {
188
+ accumulated = tableEnd;
189
+ continue;
190
+ }
191
+
192
+ // 当前表完全在目标范围之后,停止
193
+ if (accumulated >= targetEnd) {
194
+ break;
195
+ }
196
+
197
+ // 当前表与目标范围有交集,计算表内偏移
198
+ const innerOffset = Math.max(0, offset - accumulated);
199
+ const innerEnd = Math.min(count, targetEnd - accumulated);
200
+ const innerLimit = innerEnd - innerOffset;
201
+
202
+ result.push({
203
+ table: tables[i],
204
+ innerOffset,
205
+ innerLimit,
206
+ });
207
+
208
+ accumulated = tableEnd;
209
+
210
+ // 已经取够数据,停止
211
+ if (accumulated >= targetEnd) {
212
+ break;
213
+ }
214
+ }
215
+
216
+ return result;
217
+ }
218
+
219
+ // ============ 私有方法:查询执行 ============
220
+
221
+ /**
222
+ * 安全查询记录数(表不存在时返回0)
223
+ *
224
+ * 支持 COUNT 缓存:历史时间分表使用缓存,当前表实时查询
225
+ */
226
+ private async queryCountSafe(
227
+ crudPro: CrudPro,
228
+ table: string,
229
+ reqJson: IRequestModel,
230
+ cfgJson: IRequestCfgModel
231
+ ): Promise<number> {
232
+ const conditionHash = shardingHashCondition(reqJson.condition);
233
+
234
+ // 尝试从缓存获取(历史表)
235
+ if (this.countCache) {
236
+ const cachedCount = this.countCache.get(table, conditionHash);
237
+ if (cachedCount !== undefined) {
238
+ return cachedCount;
239
+ }
240
+ }
241
+
242
+ // 缓存未命中或当前表,执行真实查询
243
+ try {
244
+ const ctx = await this.executeCountQuery(crudPro, table, reqJson, cfgJson);
245
+ const count = ctx.getResModelItem('total_count') || 0;
246
+
247
+ // 写入缓存(仅历史表会被缓存)
248
+ if (this.countCache) {
249
+ this.countCache.set(table, conditionHash, count);
250
+ }
251
+
252
+ return count;
253
+ } catch (e) {
254
+ // 表不存在或其他错误,返回0
255
+ return 0;
256
+ }
257
+ }
258
+
259
+ /**
260
+ * 安全查询数据行(表不存在时返回空数组)
261
+ */
262
+ private async queryRowsSafe(
263
+ crudPro: CrudPro,
264
+ table: string,
265
+ reqJson: IRequestModel,
266
+ cfgJson: IRequestCfgModel,
267
+ limit?: number
268
+ ): Promise<any[]> {
269
+ try {
270
+ const ctx = await this.executeQuery(crudPro, table, reqJson, cfgJson, limit);
271
+ return ctx.getResRows() || [];
272
+ } catch (e) {
273
+ // 表不存在或其他错误,返回空数组
274
+ return [];
275
+ }
276
+ }
277
+
278
+ /**
279
+ * 安全查询数据行(支持表内偏移,表不存在时返回空数组)
280
+ *
281
+ * 用于分页定位后,直接从某张表指定偏移处取数据
282
+ *
283
+ * @param crudPro CrudPro 实例
284
+ * @param table 分表名
285
+ * @param reqJson 请求参数
286
+ * @param cfgJson 配置
287
+ * @param innerOffset 表内偏移(跳过前 N 条)
288
+ * @param innerLimit 取多少条
289
+ */
290
+ private async queryRowsSafeWithOffset(
291
+ crudPro: CrudPro,
292
+ table: string,
293
+ reqJson: IRequestModel,
294
+ cfgJson: IRequestCfgModel,
295
+ innerOffset: number,
296
+ innerLimit: number
297
+ ): Promise<any[]> {
298
+ try {
299
+ const ctx = await this.executeQueryWithOffset(crudPro, table, reqJson, cfgJson, innerOffset, innerLimit);
300
+ return ctx.getResRows() || [];
301
+ } catch (e) {
302
+ // 表不存在或其他错误,返回空数组
303
+ return [];
304
+ }
305
+ }
306
+
307
+ /**
308
+ * 执行 COUNT 查询
309
+ */
310
+ private async executeCountQuery(
311
+ crudPro: CrudPro,
312
+ table: string,
313
+ reqJson: IRequestModel,
314
+ cfgJson: IRequestCfgModel
315
+ ): Promise<ExecuteContext> {
316
+ const tempCfg: IRequestCfgModel = {
317
+ ...cfgJson,
318
+ sqlTable: table,
319
+ sqlSimpleName: KeysOfSimpleSQL.SIMPLE_QUERY_COUNT,
320
+ };
321
+
322
+ return crudPro.executeCrudByCfg({ condition: reqJson.condition }, tempCfg);
323
+ }
324
+
325
+ /**
326
+ * 执行数据查询
327
+ */
328
+ private async executeQuery(
329
+ crudPro: CrudPro,
330
+ table: string,
331
+ reqJson: IRequestModel,
332
+ cfgJson: IRequestCfgModel,
333
+ limit?: number
334
+ ): Promise<ExecuteContext> {
335
+ const tempCfg: IRequestCfgModel = {
336
+ ...cfgJson,
337
+ sqlTable: table,
338
+ };
339
+
340
+ const queryReq: IRequestModel = {
341
+ condition: reqJson.condition,
342
+ columns: reqJson.columns,
343
+ orderBy: reqJson.orderBy,
344
+ };
345
+
346
+ // 设置查询限制
347
+ if (limit) {
348
+ queryReq.pageNo = 1;
349
+ queryReq.pageSize = limit;
350
+ }
351
+
352
+ return crudPro.executeCrudByCfg(queryReq, tempCfg);
353
+ }
354
+
355
+ /**
356
+ * 执行数据查询(带表内偏移)
357
+ *
358
+ * 用于分页定位后,直接从指定偏移处取数据
359
+ * innerOffset=965, innerLimit=10 表示跳过该表前 965 条,取 10 条
360
+ */
361
+ private async executeQueryWithOffset(
362
+ crudPro: CrudPro,
363
+ table: string,
364
+ reqJson: IRequestModel,
365
+ cfgJson: IRequestCfgModel,
366
+ innerOffset: number,
367
+ innerLimit: number
368
+ ): Promise<ExecuteContext> {
369
+ const tempCfg: IRequestCfgModel = {
370
+ ...cfgJson,
371
+ sqlTable: table,
372
+ };
373
+
374
+ const queryReq: IRequestModel = {
375
+ condition: reqJson.condition,
376
+ columns: reqJson.columns,
377
+ orderBy: reqJson.orderBy,
378
+ offset: innerOffset,
379
+ limit: innerLimit,
380
+ };
381
+
382
+ return crudPro.executeCrudByCfg(queryReq, tempCfg);
383
+ }
384
+ }