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,193 +0,0 @@
|
|
|
1
|
-
# CrudPro 内置函数参考
|
|
2
|
-
|
|
3
|
-
CrudPro 的 `IFuncCfgModel` 支持 `functionName` 方式调用内置函数。内置函数由四个工具类注册:`DateTimeUtils`、`CompareUtils`、`MixinUtils`、`TypeUtils`。
|
|
4
|
-
|
|
5
|
-
> 源码位置:`src/libs/crud-pro/services/CrudProServiceBase.ts` → `createBuildInExecuteFuncMap()`
|
|
6
|
-
|
|
7
|
-
## 调用方式
|
|
8
|
-
|
|
9
|
-
`functionName` 是 `IFuncCfgModel` 的属性之一,可在 `updateCfg`、`validateCfg`、`executeWhen`、`validate` 等配置中使用。
|
|
10
|
-
|
|
11
|
-
### 无参调用
|
|
12
|
-
|
|
13
|
-
```typescript
|
|
14
|
-
'data.created_at': { functionName: 'getCurrentTimeString' }
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
### 带参调用
|
|
18
|
-
|
|
19
|
-
```typescript
|
|
20
|
-
'data.order_date': { functionName: 'getCurrentDateFormat', functionParams: ['YYYYMMDD'] }
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
`functionParams` 中的每个元素可以是基础类型(string / number / boolean),也可以嵌套 `IFuncCfgModel` 对象:
|
|
24
|
-
|
|
25
|
-
```typescript
|
|
26
|
-
{
|
|
27
|
-
functionName: 'eq',
|
|
28
|
-
functionParams: [
|
|
29
|
-
{ contextAsBool: 'res.is_exist' },
|
|
30
|
-
{ constBool: false }
|
|
31
|
-
]
|
|
32
|
-
}
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## DateTimeUtils — 日期时间
|
|
36
|
-
|
|
37
|
-
| 函数名 | 参数 | 返回值 | 说明 |
|
|
38
|
-
|--------|------|--------|------|
|
|
39
|
-
| `getCurrentTimeStampMs` | 无 | `number` | 当前时间戳(毫秒) |
|
|
40
|
-
| `getCurrentTimeStampSecond` | 无 | `number` | 当前时间戳(秒) |
|
|
41
|
-
| `getCurrentTimeString` | 无 | `string` | 当前时间,格式 `YYYY-MM-DD HH:mm:ss` |
|
|
42
|
-
| `getCurrentDateFormat` | `format: string` | `string` | 按指定格式返回当前时间 |
|
|
43
|
-
| `getYesterdayDateFormat` | `format: string` | `string` | 按指定格式返回昨天时间 |
|
|
44
|
-
|
|
45
|
-
**示例:**
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
updateCfg: {
|
|
49
|
-
'data.created_at': { functionName: 'getCurrentTimeString' },
|
|
50
|
-
'data.created_ts': { functionName: 'getCurrentTimeStampMs' },
|
|
51
|
-
'data.order_date': { functionName: 'getCurrentDateFormat', functionParams: ['YYYYMMDD'] },
|
|
52
|
-
'data.yesterday': { functionName: 'getYesterdayDateFormat', functionParams: ['YYYY-MM-DD'] },
|
|
53
|
-
}
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## CompareUtils — 比较运算
|
|
57
|
-
|
|
58
|
-
| 函数名 | 参数 | 返回值 | 说明 |
|
|
59
|
-
|--------|------|--------|------|
|
|
60
|
-
| `eq` | `a: any, b: any` | `boolean` | 相等比较(`==`,兼容类型转换) |
|
|
61
|
-
| `ne` | `a: any, b: any` | `boolean` | 不相等 |
|
|
62
|
-
| `gt` | `a: any, b: any` | `boolean` | 大于 |
|
|
63
|
-
| `gte` | `a: any, b: any` | `boolean` | 大于等于 |
|
|
64
|
-
| `lt` | `a: any, b: any` | `boolean` | 小于 |
|
|
65
|
-
| `lte` | `a: any, b: any` | `boolean` | 小于等于 |
|
|
66
|
-
|
|
67
|
-
**示例:**
|
|
68
|
-
|
|
69
|
-
```typescript
|
|
70
|
-
// executeWhen:仅当 is_exist 为 false 时执行插入
|
|
71
|
-
executeWhen: {
|
|
72
|
-
functionName: 'eq',
|
|
73
|
-
functionParams: [{ contextAsBool: 'res.is_exist' }, { constBool: false }]
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// validate:确保数量大于 0
|
|
77
|
-
validate: {
|
|
78
|
-
functionName: 'gt',
|
|
79
|
-
functionParams: [{ context: '$current' }, { constNumber: 0 }],
|
|
80
|
-
message: '数量必须大于0'
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## MixinUtils — 通用工具
|
|
85
|
-
|
|
86
|
-
| 函数名 | 参数 | 返回值 | 说明 |
|
|
87
|
-
|--------|------|--------|------|
|
|
88
|
-
| `isNil` | `obj: any` | `boolean` | 是否为 null 或 undefined |
|
|
89
|
-
| `isNotNil` | `obj: any` | `boolean` | 不为 null 且不为 undefined |
|
|
90
|
-
| `isEmpty` | `obj: any` | `boolean` | 是否为空(null / undefined / 空字符串 / 空数组 / 空对象) |
|
|
91
|
-
| `isNotEmpty` | `obj: any` | `boolean` | 是否非空 |
|
|
92
|
-
| `equals` | `obj1: any, obj2: any` | `boolean` | 严格相等(`===`) |
|
|
93
|
-
| `equalsIgnoreCase` | `str1: string, str2: string` | `boolean` | 忽略大小写比较字符串 |
|
|
94
|
-
| `startsWith` | `str1: string, str2: string` | `boolean` | 字符串前缀判断 |
|
|
95
|
-
| `isValidFieldName` | `s: string` | `boolean` | 合法字段名(字母开头,仅含字母/数字/下划线) |
|
|
96
|
-
| `selectNotEmpty` | `a: any, b: any` | `any` | 返回第一个非空值 |
|
|
97
|
-
| `hasAny` | `a: string[], b: string[]` | `boolean` | 集合 A 是否包含集合 B 中的任意元素 |
|
|
98
|
-
| `parseValueByType` | `value: any, targetType: string` | `any` | 按类型转换值(string / number / boolean / array / JSONObject) |
|
|
99
|
-
| `sleepMs` | `ms: number` | `Promise` | 延时等待 |
|
|
100
|
-
| `uuid` | 无 | `string` | 生成 UUID v4(优先 `crypto.getRandomValues`,降级 `Math.random`) |
|
|
101
|
-
| `generateSnowflakeId` | `machineId?: number` | `string` | 生成雪花ID(64位整数字符串) |
|
|
102
|
-
|
|
103
|
-
**uuid 和雪花ID 示例:**
|
|
104
|
-
|
|
105
|
-
```typescript
|
|
106
|
-
updateCfg: {
|
|
107
|
-
// UUID v4:适合需要标准唯一标识的场景
|
|
108
|
-
'data.id': { functionName: 'uuid' },
|
|
109
|
-
|
|
110
|
-
// 雪花ID:适合需要趋势递增、时间有序的场景
|
|
111
|
-
'data.order_id': { functionName: 'generateSnowflakeId' },
|
|
112
|
-
|
|
113
|
-
// 雪花ID:指定机器ID(0-1023),多实例部署时区分
|
|
114
|
-
'data.trace_id': { functionName: 'generateSnowflakeId', functionParams: [1] },
|
|
115
|
-
}
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
> **雪花ID machineId 获取优先级**:函数参数 > 环境变量 `SNOWFLAKE_MACHINE_ID` > `process.pid` 低10位。多实例部署时建议设置环境变量 `SNOWFLAKE_MACHINE_ID` 为 0-1023 的唯一值。
|
|
119
|
-
|
|
120
|
-
## TypeUtils — 类型判断
|
|
121
|
-
|
|
122
|
-
| 函数名 | 参数 | 返回值 | 说明 |
|
|
123
|
-
|--------|------|--------|------|
|
|
124
|
-
| `isBasicType` | `value: any` | `boolean` | 基础类型(boolean / string / number / null) |
|
|
125
|
-
| `isBoolean` | `value: any` | `boolean` | 布尔值 |
|
|
126
|
-
| `isString` | `value: any` | `boolean` | 字符串 |
|
|
127
|
-
| `isInteger` | `value: any` | `boolean` | 整数 |
|
|
128
|
-
| `isNumber` | `value: any` | `boolean` | 数字 |
|
|
129
|
-
| `isNumeric` | `value: any` | `boolean` | 数字或可转换数字的字符串 |
|
|
130
|
-
| `isValidName` | `value: any` | `boolean` | 合法命名(字母开头,字母/数字/下划线) |
|
|
131
|
-
| `isChinesePhone` | `value: string` | `boolean` | 中文手机号 |
|
|
132
|
-
| `isEmailStrValid` | `value: string` | `boolean` | 合法邮箱地址 |
|
|
133
|
-
| `pickNumber` | `s: string` | `number \| null` | 从字符串中提取数字部分 |
|
|
134
|
-
|
|
135
|
-
## 自定义函数扩展
|
|
136
|
-
|
|
137
|
-
除内置函数外,可通过覆写 `IExecuteContextFunc.getFunctionMap()` 注册自定义函数。
|
|
138
|
-
|
|
139
|
-
函数查找顺序:`getFunctionMap()` → `buildInExecuteFuncMap`(内置函数),自定义函数优先级更高,可覆盖内置函数。
|
|
140
|
-
|
|
141
|
-
### 注册方式
|
|
142
|
-
|
|
143
|
-
继承 `BaseExecuteContextFunc`,覆写 `getFunctionMap()` 方法返回函数映射表:
|
|
144
|
-
|
|
145
|
-
```typescript
|
|
146
|
-
import { BaseExecuteContextFunc } from './libs/crud-pro/models/ExecuteContextFunc';
|
|
147
|
-
|
|
148
|
-
class MyContextFunc extends BaseExecuteContextFunc {
|
|
149
|
-
|
|
150
|
-
// 覆写此方法,返回自定义函数映射表
|
|
151
|
-
getFunctionMap(): any {
|
|
152
|
-
return {
|
|
153
|
-
// 无参函数
|
|
154
|
-
generateOrderNo: (prefix: string) => {
|
|
155
|
-
return prefix + Date.now().toString(36).toUpperCase();
|
|
156
|
-
},
|
|
157
|
-
|
|
158
|
-
// 带参函数:参数来自 functionParams 配置
|
|
159
|
-
formatAmount: (amount: number, currency: string) => {
|
|
160
|
-
return currency + ' ' + amount.toFixed(2);
|
|
161
|
-
},
|
|
162
|
-
|
|
163
|
-
// 可访问 FuncContext 的函数(通过 this 关键字)
|
|
164
|
-
getVisitorName: function(this: any) {
|
|
165
|
-
return this.reqModel?.visitor?.nickName || 'anonymous';
|
|
166
|
-
},
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// 创建 CrudPro 实例时注入
|
|
172
|
-
const crudPro = new CrudPro();
|
|
173
|
-
crudPro.contextFunc = new MyContextFunc(/* 构造参数 */);
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
### 在配置中使用
|
|
177
|
-
|
|
178
|
-
注册后即可在 `updateCfg`、`validateCfg`、`functionCfg` 等场景中通过 `functionName` 调用:
|
|
179
|
-
|
|
180
|
-
```typescript
|
|
181
|
-
const cfgJson: IRequestCfgModel = {
|
|
182
|
-
method: 'order.create',
|
|
183
|
-
sqlSimpleName: KeysOfSimpleSQL.SIMPLE_INSERT,
|
|
184
|
-
updateCfg: {
|
|
185
|
-
'data.order_no': { functionName: 'generateOrderNo', functionParams: ['PRE'] },
|
|
186
|
-
},
|
|
187
|
-
};
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
> **注意**:`functionParams` 中配置的参数会按顺序传入函数。如果函数需要访问 `FuncContext`(如 `reqModel`、`resModel`、`currentValue`),
|
|
191
|
-
> 需使用普通 `function`(非箭头函数)并通过 `this` 访问,框架会以 `func.apply(funcContext, params)` 方式调用。
|
|
192
|
-
|
|
193
|
-
> **注意**:`generateOrderNo` 等并非内置函数,需通过 `contextFunc` 扩展注册后才可使用,否则运行时抛出 `RUN_FUNCTION_NOT_FOUND` 异常。
|