@mldong/jeeflow 1.6.2 → 1.6.3
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/dist/persist.d.ts +6 -0
- package/dist/persist.js +19 -3
- package/package.json +1 -1
package/dist/persist.d.ts
CHANGED
|
@@ -32,12 +32,18 @@ export declare class SqliteDynamicTableWriter implements DynamicTableWriter {
|
|
|
32
32
|
updateTimeColumn?: string | null;
|
|
33
33
|
updateUserColumn?: string | null;
|
|
34
34
|
isDeletedColumn?: string | null;
|
|
35
|
+
/** 用户列默认值(issues/19):优先取 data 中已注入的 apply_user_id=流程 operator,
|
|
36
|
+
* 否则用此配置值,缺省 "system"——多数框架业务表 create_user/update_user 为 BIGINT 存 userId */
|
|
37
|
+
defaultUserValue: unknown;
|
|
35
38
|
constructor(db: DatabaseSync);
|
|
36
39
|
private tableColumns;
|
|
37
40
|
filterColumns(tableName: string, columns: string[]): string[];
|
|
38
41
|
insert(tableName: string, data: Record<string, unknown>): unknown;
|
|
39
42
|
exists(tableName: string, bizKey: string, bizKeyValue: unknown): boolean;
|
|
40
43
|
fillSystemFields(data: Record<string, unknown>, isInsert: boolean): void;
|
|
44
|
+
/** 默认用户值(issues/19):优先取 data 中已注入的 apply_user_id
|
|
45
|
+
* (拦截器场景 = 流程 operator,BIGINT 用户列表开箱即用),否则回落配置默认值 */
|
|
46
|
+
private resolveDefaultUser;
|
|
41
47
|
}
|
|
42
48
|
/** 流程定义加载器(用于解析 relTableName / 流程 name),通常透传仓库 findDefineById */
|
|
43
49
|
export type DefineLoader = (defineId: number) => Promise<ProcessDefine | null>;
|
package/dist/persist.js
CHANGED
|
@@ -31,6 +31,9 @@ export class SqliteDynamicTableWriter {
|
|
|
31
31
|
updateTimeColumn = 'update_time';
|
|
32
32
|
updateUserColumn = 'update_user';
|
|
33
33
|
isDeletedColumn = 'is_deleted';
|
|
34
|
+
/** 用户列默认值(issues/19):优先取 data 中已注入的 apply_user_id=流程 operator,
|
|
35
|
+
* 否则用此配置值,缺省 "system"——多数框架业务表 create_user/update_user 为 BIGINT 存 userId */
|
|
36
|
+
defaultUserValue = 'system';
|
|
34
37
|
constructor(db) {
|
|
35
38
|
this.db = db;
|
|
36
39
|
}
|
|
@@ -89,11 +92,11 @@ export class SqliteDynamicTableWriter {
|
|
|
89
92
|
if (this.createTimeColumn)
|
|
90
93
|
data[this.createTimeColumn] ??= now;
|
|
91
94
|
if (this.createUserColumn)
|
|
92
|
-
data[this.createUserColumn] ??=
|
|
95
|
+
data[this.createUserColumn] ??= this.resolveDefaultUser(data);
|
|
93
96
|
if (this.updateTimeColumn)
|
|
94
97
|
data[this.updateTimeColumn] ??= now;
|
|
95
98
|
if (this.updateUserColumn)
|
|
96
|
-
data[this.updateUserColumn] ??=
|
|
99
|
+
data[this.updateUserColumn] ??= this.resolveDefaultUser(data);
|
|
97
100
|
if (this.isDeletedColumn)
|
|
98
101
|
data[this.isDeletedColumn] ??= 0;
|
|
99
102
|
}
|
|
@@ -101,9 +104,14 @@ export class SqliteDynamicTableWriter {
|
|
|
101
104
|
if (this.updateTimeColumn)
|
|
102
105
|
data[this.updateTimeColumn] = now;
|
|
103
106
|
if (this.updateUserColumn)
|
|
104
|
-
data[this.updateUserColumn] ??=
|
|
107
|
+
data[this.updateUserColumn] ??= this.resolveDefaultUser(data);
|
|
105
108
|
}
|
|
106
109
|
}
|
|
110
|
+
/** 默认用户值(issues/19):优先取 data 中已注入的 apply_user_id
|
|
111
|
+
* (拦截器场景 = 流程 operator,BIGINT 用户列表开箱即用),否则回落配置默认值 */
|
|
112
|
+
resolveDefaultUser(data) {
|
|
113
|
+
return data['apply_user_id'] ?? this.defaultUserValue;
|
|
114
|
+
}
|
|
107
115
|
}
|
|
108
116
|
/**
|
|
109
117
|
* 工作流业务数据入库适配拦截器——流程结束同意后,f_ 表单数据写入业务表。
|
|
@@ -141,6 +149,14 @@ export class PersistPostInterceptor {
|
|
|
141
149
|
const submitType = Number(inst.variables[KeySubmitType]);
|
|
142
150
|
if (submitType !== SubmitType.Agree)
|
|
143
151
|
return;
|
|
152
|
+
// 同链重复触发防护(issues/19):最后任务节点与结束节点都会触发后置拦截器,
|
|
153
|
+
// 同一执行链(共享 inst.variables)只插一次。标记写入时实例已完成持久化
|
|
154
|
+
// (引擎 executeNode 先 updateInstance 后触发拦截器,repo 存副本)不会落库;
|
|
155
|
+
// exists 保留作为跨请求/重启的幂等兜底(先查后插语义不变)。
|
|
156
|
+
const chainKey = `__persist_executed_${inst.id}`;
|
|
157
|
+
if (inst.variables[chainKey] === true)
|
|
158
|
+
return;
|
|
159
|
+
inst.variables[chainKey] = true;
|
|
144
160
|
// 表名:流程定义顶层 relTableName,缺省回落流程 name
|
|
145
161
|
const tableName = await this.resolveTableName(inst);
|
|
146
162
|
if (!tableName)
|