midway-fatcms 0.0.7 → 0.0.8
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.
- package/.qoder/skills/midway-fatcms/01-quick-start.md +231 -0
- package/.qoder/skills/midway-fatcms/02-crud-quick.md +337 -0
- package/.qoder/skills/midway-fatcms/03-crud-sharding.md +488 -0
- package/.qoder/skills/midway-fatcms/04-condition-operators.md +93 -0
- package/.qoder/skills/midway-fatcms/05-configuration.md +290 -0
- package/.qoder/skills/midway-fatcms/06-builtin-functions.md +241 -0
- package/.qoder/skills/midway-fatcms/07-examples.md +500 -0
- package/.qoder/skills/midway-fatcms/SKILL.md +96 -0
- package/README.md +9 -9
- package/dist/controller/base/BaseApiController.d.ts +1 -2
- package/dist/controller/base/BaseApiController.js +0 -4
- package/dist/controller/gateway/DocGatewayController.js +1 -1
- package/dist/controller/manage/FlowConfigManageApi.js +4 -2
- package/dist/controller/manage/SysConfigMangeApi.js +6 -1
- package/dist/controller/manage/UserAccountManageApi.js +7 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/libs/crud-pro/CrudPro.d.ts +23 -2
- package/dist/libs/crud-pro/CrudPro.js +53 -2
- package/dist/libs/crud-pro/interfaces.d.ts +82 -12
- package/dist/libs/crud-pro/models/CrudResult.d.ts +115 -0
- package/dist/libs/crud-pro/models/CrudResult.js +126 -0
- package/dist/libs/crud-pro/models/RequestModel.d.ts +2 -2
- package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +36 -2
- package/dist/libs/crud-pro/services/CrudProGenSqlCondition.js +8 -4
- package/dist/libs/crud-pro/services/CrudProTableMetaService.js +1 -2
- package/dist/libs/crud-pro-quick/CrudProQuick.d.ts +295 -0
- package/dist/libs/crud-pro-quick/CrudProQuick.js +529 -0
- package/dist/libs/crud-pro-quick/fixSoftDelete.d.ts +30 -0
- package/dist/{service/curd → libs/crud-pro-quick}/fixSoftDelete.js +3 -6
- package/dist/libs/crud-pro-quick/index.d.ts +36 -0
- package/dist/libs/crud-pro-quick/index.js +49 -0
- package/dist/libs/crud-pro-quick/models.d.ts +33 -0
- package/dist/libs/crud-pro-quick/models.js +2 -0
- package/dist/libs/crud-sharding/ShardingConfig.d.ts +15 -2
- package/dist/libs/crud-sharding/ShardingConfig.js +2 -2
- package/dist/libs/crud-sharding/ShardingCrudPro.d.ts +119 -274
- package/dist/libs/crud-sharding/ShardingCrudPro.js +544 -340
- package/dist/libs/crud-sharding/ShardingMerger.d.ts +10 -18
- package/dist/libs/crud-sharding/ShardingMerger.js +27 -44
- package/dist/libs/crud-sharding/ShardingResult.d.ts +33 -0
- package/dist/libs/crud-sharding/ShardingResult.js +16 -0
- package/dist/libs/crud-sharding/ShardingRouter.d.ts +1 -0
- package/dist/libs/crud-sharding/ShardingRouter.js +25 -6
- package/dist/libs/crud-sharding/ShardingTableCreator.d.ts +21 -4
- package/dist/libs/crud-sharding/ShardingTableCreator.js +193 -59
- package/dist/libs/crud-sharding/ShardingUtils.d.ts +48 -0
- package/dist/libs/crud-sharding/ShardingUtils.js +122 -1
- package/dist/libs/crud-sharding/TIME_COLUMN_CLEAN_SPEC.md +488 -0
- package/dist/libs/crud-sharding/index.d.ts +4 -3
- package/dist/libs/crud-sharding/index.js +14 -2
- package/dist/models/bizmodels.d.ts +2 -6
- package/dist/service/SysAppService.d.ts +2 -2
- package/dist/service/SysAppService.js +16 -5
- package/dist/service/SysConfigService.d.ts +1 -1
- package/dist/service/SysConfigService.js +7 -2
- package/dist/service/SysDictDataService.js +14 -4
- package/dist/service/SysMenuService.js +7 -2
- package/dist/service/curd/CurdMixService.d.ts +6 -4
- package/dist/service/curd/CurdMixService.js +16 -2
- package/dist/service/curd/CurdProService.d.ts +43 -27
- package/dist/service/curd/CurdProService.js +32 -33
- package/dist/service/flow/FlowConfigService.js +7 -2
- package/dist/service/flow/FlowInstanceCrudService.js +22 -19
- package/package.json +1 -1
- package/src/controller/base/BaseApiController.ts +0 -5
- package/src/controller/gateway/DocGatewayController.ts +1 -1
- package/src/controller/manage/CrudStandardDesignApi.ts +4 -3
- package/src/controller/manage/FlowConfigManageApi.ts +4 -2
- package/src/controller/manage/SysConfigMangeApi.ts +6 -1
- package/src/controller/manage/UserAccountManageApi.ts +7 -2
- package/src/index.ts +2 -2
- package/src/libs/crud-pro/CrudPro.ts +62 -4
- package/src/libs/crud-pro/interfaces.ts +110 -15
- package/src/libs/crud-pro/models/CrudResult.ts +178 -0
- package/src/libs/crud-pro/models/RequestModel.ts +2 -2
- package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +41 -2
- package/src/libs/crud-pro/services/CrudProGenSqlCondition.ts +11 -7
- package/src/libs/crud-pro/services/CrudProTableMetaService.ts +1 -2
- package/src/libs/crud-pro-quick/CrudProQuick.ts +594 -0
- package/src/{service/curd → libs/crud-pro-quick}/fixSoftDelete.ts +23 -13
- package/src/libs/crud-pro-quick/index.ts +52 -0
- package/src/libs/crud-pro-quick/models.ts +35 -0
- package/src/libs/crud-sharding/ShardingConfig.ts +18 -2
- package/src/libs/crud-sharding/ShardingCrudPro.ts +660 -390
- package/src/libs/crud-sharding/ShardingMerger.ts +35 -63
- package/src/libs/crud-sharding/ShardingResult.ts +29 -0
- package/src/libs/crud-sharding/ShardingRouter.ts +27 -6
- package/src/libs/crud-sharding/ShardingTableCreator.ts +214 -71
- package/src/libs/crud-sharding/ShardingUtils.ts +137 -0
- package/src/libs/crud-sharding/TIME_COLUMN_CLEAN_SPEC.md +488 -0
- package/src/libs/crud-sharding/index.ts +14 -3
- package/src/models/bizmodels.ts +4 -7
- package/src/service/SysAppService.ts +18 -7
- package/src/service/SysConfigService.ts +8 -3
- package/src/service/SysDictDataService.ts +14 -4
- package/src/service/SysMenuService.ts +7 -2
- package/src/service/crudstd/CrudStdService.ts +2 -2
- package/src/service/curd/CurdMixService.ts +26 -5
- package/src/service/curd/CurdProService.ts +58 -39
- package/src/service/flow/FlowConfigService.ts +7 -2
- package/src/service/flow/FlowInstanceCrudService.ts +23 -20
- package/.qoder/skills/midway-fatcms-crud/SKILL.md +0 -375
- package/.qoder/skills/midway-fatcms-crud/examples.md +0 -990
- package/.qoder/skills/midway-fatcms-crud/reference.md +0 -568
- package/dist/libs/crud-pro/README.md +0 -809
- package/dist/libs/crud-pro/README_FUNC.md +0 -193
- package/dist/libs/crud-sharding/ROUTING_LOGIC.md +0 -944
- package/dist/models/StandardColumns.d.ts +0 -71
- package/dist/models/StandardColumns.js +0 -28
- package/dist/service/curd/CrudProQuick.d.ts +0 -190
- package/dist/service/curd/CrudProQuick.js +0 -319
- package/dist/service/curd/README.md +0 -1100
- package/dist/service/curd/fixSoftDelete.d.ts +0 -20
- package/src/libs/crud-pro/README.md +0 -809
- package/src/libs/crud-pro/README_FUNC.md +0 -193
- package/src/libs/crud-sharding/ROUTING_LOGIC.md +0 -944
- package/src/models/StandardColumns.ts +0 -76
- package/src/service/curd/CrudProQuick.ts +0 -360
- package/src/service/curd/README.md +0 -1100
|
@@ -1,375 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: midway-fatcms-crud
|
|
3
|
-
description: >-
|
|
4
|
-
帮助用户在 midway-fatcms 项目中使用 CRUD 数据库操作能力(CurdMixService、CurdProService、CrudProQuick、ShardingCrudPro)。
|
|
5
|
-
支持 MySQL、PostgreSQL、SQL Server 数据库的增删改查、批量插入、Upsert、分表查询、关联数据填充、软删除等特性。
|
|
6
|
-
当用户需要执行数据库查询、插入、更新、删除操作,或处理分表、字典翻译、用户信息填充时使用本 Skill。
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# midway-fatcms CRUD 使用指南
|
|
10
|
-
|
|
11
|
-
## 核心架构
|
|
12
|
-
|
|
13
|
-
三层架构,从高到低:
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
CurdMixService (协调层 - 带数据关联/字典翻译)
|
|
17
|
-
└── CurdProService (核心层 - 带权限/验证/上下文)
|
|
18
|
-
├── CrudProQuick (便捷层 - 单表快速操作)
|
|
19
|
-
├── ShardingCrudPro (分表层 - 自动路由分表)
|
|
20
|
-
└── CrudPro (底层引擎 - SQL生成与执行)
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
**服务选择指南:**
|
|
24
|
-
- 需要字典翻译/用户信息填充 → **CurdMixService**
|
|
25
|
-
- 仅需单表 CURD → **CrudProQuick** via `curdMixService.getBbUtil()` 或 `curdProService.getQuickCrud()`
|
|
26
|
-
- 分表场景 → **ShardingCrudPro** via `curdProService.getShardingCrud()`
|
|
27
|
-
- 配置驱动 CRUD(数据库存 method)→ **CurdMixService.executeCrud()** 或 **CurdProService.executeCrudByCfg()`
|
|
28
|
-
- 自定义 SQL → **CrudProQuick.executeSQL()** 或 **CrudProQuick.executeNativeSQL()`
|
|
29
|
-
|
|
30
|
-
## 快速开始
|
|
31
|
-
|
|
32
|
-
### 1. 安装 npm 包
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npm install midway-fatcms
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### 2. 注入服务
|
|
39
|
-
|
|
40
|
-
```typescript
|
|
41
|
-
import { Provide, Inject } from '@midwayjs/core';
|
|
42
|
-
import { CurdMixService, CurdProService } from 'midway-fatcms';
|
|
43
|
-
import { SqlDbType } from 'midway-fatcms';
|
|
44
|
-
|
|
45
|
-
@Provide()
|
|
46
|
-
export class MyService {
|
|
47
|
-
@Inject()
|
|
48
|
-
curdMixService: CurdMixService;
|
|
49
|
-
|
|
50
|
-
@Inject()
|
|
51
|
-
curdProService: CurdProService;
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 3. 获取 QuickCrud 实例
|
|
56
|
-
|
|
57
|
-
```typescript
|
|
58
|
-
// 方式1:通过 CurdMixService(推荐,自动注册关联数据处理器)
|
|
59
|
-
const quick = this.curdMixService.getBbUtil('mydb', SqlDbType.mysql, 't_user');
|
|
60
|
-
|
|
61
|
-
// 方式2:通过 CurdProService
|
|
62
|
-
const quick = this.curdProService.getQuickCrud('mydb', SqlDbType.mysql, 't_user');
|
|
63
|
-
|
|
64
|
-
// 设置基础配置(软删除、标准字段填充)
|
|
65
|
-
quick.setBaseCfgModel({
|
|
66
|
-
enableSoftDelete: true,
|
|
67
|
-
enableStandardUpdateCfg: true,
|
|
68
|
-
});
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## 基础 CURD 操作
|
|
72
|
-
|
|
73
|
-
### 查询类方法
|
|
74
|
-
|
|
75
|
-
```typescript
|
|
76
|
-
const quick = this.curdMixService.getBbUtil('mydb', SqlDbType.mysql, 't_order');
|
|
77
|
-
|
|
78
|
-
// 列表查询
|
|
79
|
-
const list = await quick.getList({
|
|
80
|
-
condition: { status: 'paid', amount: { $gt: 100 } },
|
|
81
|
-
orderBy: 'created_at DESC',
|
|
82
|
-
columns: ['id', 'order_no', 'amount'],
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
// 分页查询
|
|
86
|
-
const page = await quick.getListPage({
|
|
87
|
-
condition: { status: 'paid' },
|
|
88
|
-
pageNo: 1,
|
|
89
|
-
pageSize: 20,
|
|
90
|
-
orderBy: 'created_at DESC',
|
|
91
|
-
});
|
|
92
|
-
// 返回:{ rows: [], total_count: number }
|
|
93
|
-
|
|
94
|
-
// 唯一查询(0条返回 null,多条抛出异常)
|
|
95
|
-
const order = await quick.getUniqueOne({
|
|
96
|
-
condition: { order_no: 'ORD2024001' },
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
// 存在性判断(比 COUNT 高效)
|
|
100
|
-
const exists = await quick.isExist({
|
|
101
|
-
condition: { order_no: 'ORD2024001' },
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
// 统计总数
|
|
105
|
-
const count = await quick.getTotalCount({
|
|
106
|
-
condition: { status: 'active' },
|
|
107
|
-
});
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### 写入类方法
|
|
111
|
-
|
|
112
|
-
```typescript
|
|
113
|
-
// 插入单条
|
|
114
|
-
const result = await quick.insertObject({
|
|
115
|
-
data: {
|
|
116
|
-
order_no: 'ORD001',
|
|
117
|
-
amount: 199.99,
|
|
118
|
-
status: 'pending',
|
|
119
|
-
},
|
|
120
|
-
});
|
|
121
|
-
// 返回:{ insertId, affectedRows }
|
|
122
|
-
|
|
123
|
-
// 批量插入(效率更高)
|
|
124
|
-
const result = await quick.batchInsert({
|
|
125
|
-
data: [
|
|
126
|
-
{ order_no: '001', amount: 100 },
|
|
127
|
-
{ order_no: '002', amount: 200 },
|
|
128
|
-
],
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
// 更新(必须带 condition)
|
|
132
|
-
await quick.updateObject({
|
|
133
|
-
condition: { id: 1 },
|
|
134
|
-
data: { status: 'completed', updated_at: new Date() },
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
// 插入或更新(先查询存在性,再决定插入或更新)
|
|
138
|
-
await quick.insertOrUpdate({
|
|
139
|
-
condition: { order_no: 'ORD001' },
|
|
140
|
-
data: { order_no: 'ORD001', amount: 150 },
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
// 原生 Upsert(MySQL: ON DUPLICATE KEY UPDATE,更高效)
|
|
144
|
-
await quick.insertOnDuplicate(
|
|
145
|
-
{ data: { id: 1, order_no: 'ORD001', amount: 150 } },
|
|
146
|
-
['id'], // 唯一列,PostgreSQL/SQL Server 必填
|
|
147
|
-
);
|
|
148
|
-
|
|
149
|
-
// 删除(受软删除配置影响)
|
|
150
|
-
await quick.deleteObject({
|
|
151
|
-
condition: { id: 1 },
|
|
152
|
-
});
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### 条件操作符
|
|
156
|
-
|
|
157
|
-
```typescript
|
|
158
|
-
const condition = {
|
|
159
|
-
// 基础等于
|
|
160
|
-
status: 'active',
|
|
161
|
-
|
|
162
|
-
// 比较操作
|
|
163
|
-
age: { $gt: 18, $lt: 60 }, // 大于且小于
|
|
164
|
-
score: { $gte: 60 }, // 大于等于
|
|
165
|
-
level: { $ne: 'deleted' }, // 不等于
|
|
166
|
-
|
|
167
|
-
// 范围操作
|
|
168
|
-
id: { $in: [1, 2, 3] }, // IN
|
|
169
|
-
amount: { $between: [100, 500] }, // BETWEEN
|
|
170
|
-
|
|
171
|
-
// 模糊查询
|
|
172
|
-
name: { $like: '张%' }, // 前缀匹配(LIKE '张%')
|
|
173
|
-
name: { $likeInclude: '%张三%' }, // 包含匹配(LIKE '%张三%')
|
|
174
|
-
name: { $notLike: 'test%' }, // 不匹配前缀
|
|
175
|
-
|
|
176
|
-
// NULL 判断
|
|
177
|
-
deleted_at: { $isNull: true }, // IS NULL
|
|
178
|
-
phone: { $isNotNull: true }, // IS NOT NULL
|
|
179
|
-
|
|
180
|
-
// 逻辑组合
|
|
181
|
-
$and: [{ status: 'active' }, { age: { $gte: 18 } }],
|
|
182
|
-
$or: [{ status: 'pending' }, { status: 'processing' }],
|
|
183
|
-
};
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
## 分表操作
|
|
187
|
-
|
|
188
|
-
### 获取分表实例
|
|
189
|
-
|
|
190
|
-
```typescript
|
|
191
|
-
import { ShardingType } from 'midway-fatcms';
|
|
192
|
-
|
|
193
|
-
// 按月分表(如 t_order_202401, t_order_202402)
|
|
194
|
-
const sharding = this.curdProService.getShardingCrud('mydb', SqlDbType.mysql, {
|
|
195
|
-
type: ShardingType.MONTH,
|
|
196
|
-
baseTable: 't_order',
|
|
197
|
-
timeColumn: 'created_at',
|
|
198
|
-
autoCreateTable: true, // 自动创建月表
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
// 哈希分表(如 t_user_01 ~ t_user_16)
|
|
202
|
-
const sharding = this.curdProService.getShardingCrud('mydb', SqlDbType.mysql, {
|
|
203
|
-
type: ShardingType.HASH,
|
|
204
|
-
baseTable: 't_user',
|
|
205
|
-
shardingColumn: 'user_id',
|
|
206
|
-
tableCount: 16,
|
|
207
|
-
});
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### 分表 CURD
|
|
211
|
-
|
|
212
|
-
```typescript
|
|
213
|
-
// 插入(自动路由到对应分表)
|
|
214
|
-
await sharding.insert({
|
|
215
|
-
data: { order_id: '001', amount: 100, created_at: '2024-03-15' },
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
// 批量插入(自动分组并行写入)
|
|
219
|
-
const result = await sharding.batchInsert({
|
|
220
|
-
data: [
|
|
221
|
-
{ order_id: '001', created_at: '2024-01-15' }, // → t_order_202401
|
|
222
|
-
{ order_id: '002', created_at: '2024-02-10' }, // → t_order_202402
|
|
223
|
-
],
|
|
224
|
-
});
|
|
225
|
-
// 返回:{ totalAffected, tableCount, tableResults }
|
|
226
|
-
|
|
227
|
-
// 查询(自动合并多表结果)
|
|
228
|
-
const orders = await sharding.query({
|
|
229
|
-
condition: {
|
|
230
|
-
status: 'paid',
|
|
231
|
-
created_at: { $gte: '2024-01-01', $lte: '2024-03-31' },
|
|
232
|
-
},
|
|
233
|
-
orderBy: 'created_at DESC', // 时间分表必须传
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
// 分页查询(跨分表自动处理)
|
|
237
|
-
const page = await sharding.queryPage({
|
|
238
|
-
condition: { status: 'paid' },
|
|
239
|
-
pageNo: 1,
|
|
240
|
-
pageSize: 10,
|
|
241
|
-
orderBy: 'created_at DESC',
|
|
242
|
-
});
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
### 分表重要约束
|
|
246
|
-
|
|
247
|
-
1. **时间分表查询**必须传 `orderBy: '{timeColumn} DESC/ASC'`
|
|
248
|
-
2. **插入/更新/删除**必须在 data 或 condition 中包含分表字段
|
|
249
|
-
3. **批量插入**支持跨分表并行写入
|
|
250
|
-
|
|
251
|
-
## 关联数据填充
|
|
252
|
-
|
|
253
|
-
使用 `CurdMixService` 执行配置,自动填充关联数据:
|
|
254
|
-
|
|
255
|
-
```typescript
|
|
256
|
-
// 配置 columnsRelation
|
|
257
|
-
const cfgModel = {
|
|
258
|
-
method: 'order.list',
|
|
259
|
-
sqlTable: 't_order',
|
|
260
|
-
sqlSimpleName: 'SIMPLE_QUERY_PAGE',
|
|
261
|
-
columnsRelation: [
|
|
262
|
-
// 字典翻译
|
|
263
|
-
{
|
|
264
|
-
relatedType: 'dict',
|
|
265
|
-
relatedCode: 'OrderStatusEnum',
|
|
266
|
-
sourceColumn: 'status',
|
|
267
|
-
targetColumns: [{ from: 'label', to: 'status_text' }],
|
|
268
|
-
},
|
|
269
|
-
// 用户信息填充
|
|
270
|
-
{
|
|
271
|
-
relatedType: 'accountBasic',
|
|
272
|
-
sourceColumn: 'created_by',
|
|
273
|
-
targetColumns: [], // 空数组使用默认映射
|
|
274
|
-
},
|
|
275
|
-
],
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
// 执行
|
|
279
|
-
const ctx = await this.curdMixService.executeCrudByCfg(
|
|
280
|
-
{ condition: {}, pageNo: 1, pageSize: 10, orderBy: 'created_at DESC' },
|
|
281
|
-
cfgModel
|
|
282
|
-
);
|
|
283
|
-
const { rows } = ctx.getResModelForQueryPage();
|
|
284
|
-
// rows 自动包含 status_text、created_by_nickname 等字段
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
### 关联类型
|
|
288
|
-
|
|
289
|
-
| 类型 | 说明 | sourceColumn |
|
|
290
|
-
|------|------|--------------|
|
|
291
|
-
| `dict` | 数据字典 | 字典 value 字段 |
|
|
292
|
-
| `sysCfgEnum` | 系统配置枚举 | 配置 code |
|
|
293
|
-
| `accountBasic` | 用户基本信息 | 用户 ID |
|
|
294
|
-
| `workbenchBasic` | 工作台站点信息 | workbench_code |
|
|
295
|
-
| `linkToCustom` | 自定义表关联 | 关联字段 |
|
|
296
|
-
|
|
297
|
-
### 独立关联填充
|
|
298
|
-
|
|
299
|
-
```typescript
|
|
300
|
-
// 对已有数据(如从缓存获取的)执行关联填充
|
|
301
|
-
await this.curdMixService.linkColumnRelationDatas(rows, {
|
|
302
|
-
columnsRelations: [
|
|
303
|
-
{
|
|
304
|
-
relatedType: 'dict',
|
|
305
|
-
relatedCode: 'OrderStatusEnum',
|
|
306
|
-
sourceColumn: 'status',
|
|
307
|
-
targetColumns: [{ from: 'label', to: 'status_text' }],
|
|
308
|
-
},
|
|
309
|
-
],
|
|
310
|
-
});
|
|
311
|
-
```
|
|
312
|
-
|
|
313
|
-
## 高级配置
|
|
314
|
-
|
|
315
|
-
### 标准字段自动填充
|
|
316
|
-
|
|
317
|
-
```typescript
|
|
318
|
-
quick.setBaseCfgModel({
|
|
319
|
-
// 自动填充 created_by、modified_by 等
|
|
320
|
-
enableStandardUpdateCfg: true,
|
|
321
|
-
|
|
322
|
-
// 查询条件自动注入 created_by(只能查自己的数据)
|
|
323
|
-
enableStandardUpdateCfgCondition: ['by'],
|
|
324
|
-
});
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
**自动填充规则:**
|
|
328
|
-
|
|
329
|
-
| 操作类型 | data 字段 | condition 字段 |
|
|
330
|
-
|---------|-----------|---------------|
|
|
331
|
-
| INSERT | `created_by`, `created_avatar`, `created_nickname`, `created_account_type` | — |
|
|
332
|
-
| UPDATE | `modified_by`, `modified_avatar`, `modified_nickname`, `modified_account_type` | `created_by`, `created_account_type` |
|
|
333
|
-
| DELETE | — | `created_by`, `created_account_type` |
|
|
334
|
-
|
|
335
|
-
### 软删除
|
|
336
|
-
|
|
337
|
-
```typescript
|
|
338
|
-
quick.setBaseCfgModel({
|
|
339
|
-
enableSoftDelete: true,
|
|
340
|
-
});
|
|
341
|
-
|
|
342
|
-
// 删除时自动执行 UPDATE 设置 deleted_at 和 deleted_by
|
|
343
|
-
await quick.deleteObject({ condition: { id: 1 } });
|
|
344
|
-
|
|
345
|
-
// 查询时自动追加 condition.deleted_at = 0
|
|
346
|
-
await quick.getList({ condition: { status: 1 } });
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
### 链式配置
|
|
350
|
-
|
|
351
|
-
```typescript
|
|
352
|
-
const sharding = this.curdProService
|
|
353
|
-
.getShardingCrud('mydb', SqlDbType.mysql, {
|
|
354
|
-
type: ShardingType.MONTH,
|
|
355
|
-
baseTable: 't_order',
|
|
356
|
-
timeColumn: 'created_at',
|
|
357
|
-
})
|
|
358
|
-
.setBaseCfg({
|
|
359
|
-
enableStandardUpdateCfg: true,
|
|
360
|
-
enableSoftDelete: true,
|
|
361
|
-
});
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
## 关键规则
|
|
365
|
-
|
|
366
|
-
1. **sqlTable 必填**:CrudProQuick 构造函数或每个方法调用时必须传入表名
|
|
367
|
-
2. **时间分表查询必须传 orderBy**:格式为 `timeColumn DESC/ASC`
|
|
368
|
-
3. **软删除行为**:启用 `enableSoftDelete` 后,`deleteObject` 执行 UPDATE 而非 DELETE
|
|
369
|
-
4. **insertOnDuplicate 参数**:PostgreSQL/SQL Server 必须传入 `uniqueColumn` 参数
|
|
370
|
-
5. **batchInsert 限制**:`data` 必须是对象数组;`insertId` 只返回第一行的 ID
|
|
371
|
-
|
|
372
|
-
## 进阶参考
|
|
373
|
-
|
|
374
|
-
- **完整 API 参考**:[reference.md](reference.md) - 包含条件操作符、配置模型、分表配置、内置函数、错误码等
|
|
375
|
-
- **使用示例大全**:[examples.md](examples.md) - 包含基础查询、分表操作、关联填充、业务场景等
|