@mldong/jeeflow 1.3.0 → 1.5.0

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/model.d.ts CHANGED
@@ -80,13 +80,52 @@ export interface ProcessSurrogate {
80
80
  export declare enum InstanceState {
81
81
  Doing = 10,
82
82
  Done = 20,
83
- Reject = 45
83
+ Withdraw = 30,
84
+ Interrupt = 40,
85
+ Reject = 45,
86
+ Pending = 50,
87
+ Abandon = 99
84
88
  }
85
89
  export declare enum TaskState {
86
90
  Doing = 10,
87
91
  Done = 20,
92
+ Withdraw = 30,
93
+ Interrupt = 40,
94
+ Pending = 50,
88
95
  Abandoned = 99
89
96
  }
97
+ /** 流程定义状态(wf_process_define_state) */
98
+ export declare enum DefineState {
99
+ Disable = 0,
100
+ Enable = 1
101
+ }
102
+ /** 流程提交类型(wf_process_submit_type) */
103
+ export declare enum SubmitType {
104
+ Apply = 0,
105
+ Agree = 1,
106
+ Reject = 2,
107
+ Rollback = 3,
108
+ Jump = 4,
109
+ ReApply = 5,
110
+ RollbackToOperator = 6,
111
+ CountersignDisagree = 20
112
+ }
113
+ /** 任务类型(wf_process_task_type) */
114
+ export declare enum TaskType {
115
+ Major = 0,
116
+ Secondary = 1,
117
+ Record = 2
118
+ }
119
+ /** 任务参与方式(wf_process_task_perform_type) */
120
+ export declare enum PerformType {
121
+ Normal = 0,
122
+ Countersign = 1
123
+ }
124
+ /** 会签类型(wf_countersign_type) */
125
+ export declare enum CountersignType {
126
+ Parallel = 0,
127
+ Sequential = 1
128
+ }
90
129
  export declare const BusinessNoKey = "BUSINESS_NO";
91
130
  export declare class ProcessInstance {
92
131
  id: number;
@@ -186,3 +225,57 @@ export interface CcInstanceRow {
186
225
  defineDisplayName: string;
187
226
  defineVersion: number;
188
227
  }
228
+ export interface DefineRow {
229
+ id: number;
230
+ name: string;
231
+ displayName: string;
232
+ type: string;
233
+ state: number;
234
+ version: number;
235
+ createTime: Date;
236
+ createUser: string;
237
+ updateTime: Date;
238
+ updateUser: string;
239
+ }
240
+ export interface InstanceRow {
241
+ id: number;
242
+ parentId?: number;
243
+ defineId: number;
244
+ state: InstanceState;
245
+ parentNodeName: string;
246
+ businessNo: string;
247
+ operator: string;
248
+ expireTime?: Date;
249
+ variables: Record<string, any>;
250
+ createTime: Date;
251
+ createUser: string;
252
+ updateTime: Date;
253
+ updateUser: string;
254
+ defineName: string;
255
+ defineDisplayName: string;
256
+ defineVersion: number;
257
+ }
258
+ export interface TaskRow {
259
+ id: number;
260
+ processInstanceId: number;
261
+ taskName: string;
262
+ displayName: string;
263
+ taskType: number;
264
+ performType: number;
265
+ taskState: TaskState;
266
+ operator: string;
267
+ finishTime?: Date;
268
+ expireTime?: Date;
269
+ formKey: string;
270
+ taskParentId?: number;
271
+ variables: Record<string, any>;
272
+ createTime: Date;
273
+ createUser: string;
274
+ updateTime: Date;
275
+ updateUser: string;
276
+ processDefineName: string;
277
+ processDefineDisplayName: string;
278
+ defineVersion: number;
279
+ instanceVariable: string;
280
+ instanceCreateTime: Date;
281
+ }
package/dist/model.js CHANGED
@@ -11,14 +11,59 @@ export var InstanceState;
11
11
  (function (InstanceState) {
12
12
  InstanceState[InstanceState["Doing"] = 10] = "Doing";
13
13
  InstanceState[InstanceState["Done"] = 20] = "Done";
14
+ InstanceState[InstanceState["Withdraw"] = 30] = "Withdraw";
15
+ InstanceState[InstanceState["Interrupt"] = 40] = "Interrupt";
14
16
  InstanceState[InstanceState["Reject"] = 45] = "Reject";
17
+ InstanceState[InstanceState["Pending"] = 50] = "Pending";
18
+ InstanceState[InstanceState["Abandon"] = 99] = "Abandon";
15
19
  })(InstanceState || (InstanceState = {}));
16
20
  export var TaskState;
17
21
  (function (TaskState) {
18
22
  TaskState[TaskState["Doing"] = 10] = "Doing";
19
23
  TaskState[TaskState["Done"] = 20] = "Done";
24
+ TaskState[TaskState["Withdraw"] = 30] = "Withdraw";
25
+ TaskState[TaskState["Interrupt"] = 40] = "Interrupt";
26
+ TaskState[TaskState["Pending"] = 50] = "Pending";
20
27
  TaskState[TaskState["Abandoned"] = 99] = "Abandoned";
21
28
  })(TaskState || (TaskState = {}));
29
+ // ─── 字典枚举(v1.4.0,对齐 Java enums,值与 boot3 字典一致) ───────────────
30
+ /** 流程定义状态(wf_process_define_state) */
31
+ export var DefineState;
32
+ (function (DefineState) {
33
+ DefineState[DefineState["Disable"] = 0] = "Disable";
34
+ DefineState[DefineState["Enable"] = 1] = "Enable";
35
+ })(DefineState || (DefineState = {}));
36
+ /** 流程提交类型(wf_process_submit_type) */
37
+ export var SubmitType;
38
+ (function (SubmitType) {
39
+ SubmitType[SubmitType["Apply"] = 0] = "Apply";
40
+ SubmitType[SubmitType["Agree"] = 1] = "Agree";
41
+ SubmitType[SubmitType["Reject"] = 2] = "Reject";
42
+ SubmitType[SubmitType["Rollback"] = 3] = "Rollback";
43
+ SubmitType[SubmitType["Jump"] = 4] = "Jump";
44
+ SubmitType[SubmitType["ReApply"] = 5] = "ReApply";
45
+ SubmitType[SubmitType["RollbackToOperator"] = 6] = "RollbackToOperator";
46
+ SubmitType[SubmitType["CountersignDisagree"] = 20] = "CountersignDisagree";
47
+ })(SubmitType || (SubmitType = {}));
48
+ /** 任务类型(wf_process_task_type) */
49
+ export var TaskType;
50
+ (function (TaskType) {
51
+ TaskType[TaskType["Major"] = 0] = "Major";
52
+ TaskType[TaskType["Secondary"] = 1] = "Secondary";
53
+ TaskType[TaskType["Record"] = 2] = "Record";
54
+ })(TaskType || (TaskType = {}));
55
+ /** 任务参与方式(wf_process_task_perform_type) */
56
+ export var PerformType;
57
+ (function (PerformType) {
58
+ PerformType[PerformType["Normal"] = 0] = "Normal";
59
+ PerformType[PerformType["Countersign"] = 1] = "Countersign";
60
+ })(PerformType || (PerformType = {}));
61
+ /** 会签类型(wf_countersign_type) */
62
+ export var CountersignType;
63
+ (function (CountersignType) {
64
+ CountersignType[CountersignType["Parallel"] = 0] = "Parallel";
65
+ CountersignType[CountersignType["Sequential"] = 1] = "Sequential";
66
+ })(CountersignType || (CountersignType = {}));
22
67
  export const BusinessNoKey = 'BUSINESS_NO';
23
68
  // ─── 聚合根:ProcessInstance ───────────────────────────────────────────────────
24
69
  export class ProcessInstance {
@@ -7,12 +7,30 @@ export interface IAssignmentHandler {
7
7
  export interface IDecisionHandler {
8
8
  decide(node: FlowNode, inst: ProcessInstance, vars: Record<string, any>): string | Promise<string>;
9
9
  }
10
- /** 处理器注册表——按名称注册/解析(对标 Spring IoC) */
10
+ /** 处理器元数据(v1.4.0,SPI 实现清单字典源) */
11
+ export interface HandlerMeta {
12
+ /** 处理器标识:节点配置的 handlerName(与字典 value 一致) */
13
+ name: string;
14
+ /** 显示名(字典 label) */
15
+ displayName?: string;
16
+ /** 排序(小在前) */
17
+ order?: number;
18
+ /** 分组(拦截器 pre/post 显式声明;其余可为空) */
19
+ group?: string;
20
+ }
21
+ /** 处理器注册表——按名称注册/解析 + 元数据清单(对标 Spring IoC / Java HandlerRegistry) */
11
22
  export declare class HandlerRegistry {
12
23
  private assignments;
13
24
  private decisions;
14
- registerAssignment(name: string, handler: IAssignmentHandler): void;
15
- registerDecision(name: string, handler: IDecisionHandler): void;
25
+ private metas;
26
+ registerAssignment(name: string, handler: IAssignmentHandler, meta?: Omit<HandlerMeta, 'name'>): void;
27
+ registerDecision(name: string, handler: IDecisionHandler, meta?: Omit<HandlerMeta, 'name'>): void;
16
28
  resolveAssignment(name: string): IAssignmentHandler | undefined;
17
29
  resolveDecision(name: string): IDecisionHandler | undefined;
30
+ /** 按处理器类型列出可用实现的元数据(typeName: AssignmentHandler / DecisionHandler,按 order 升序) */
31
+ listHandlers(typeName: 'AssignmentHandler' | 'DecisionHandler'): HandlerMeta[];
32
+ /** 按处理器类型 + 分组列出(拦截器 pre/post) */
33
+ listHandlersGroup(typeName: 'AssignmentHandler' | 'DecisionHandler', group: string): HandlerMeta[];
34
+ /** 已注册的处理器名称清单(含未带元数据的) */
35
+ listHandlerNames(): string[];
18
36
  }
package/dist/registry.js CHANGED
@@ -1,12 +1,17 @@
1
- /** 处理器注册表——按名称注册/解析(对标 Spring IoC) */
1
+ /** 处理器注册表——按名称注册/解析 + 元数据清单(对标 Spring IoC / Java HandlerRegistry) */
2
2
  export class HandlerRegistry {
3
3
  assignments = new Map();
4
4
  decisions = new Map();
5
- registerAssignment(name, handler) {
5
+ metas = new Map();
6
+ registerAssignment(name, handler, meta) {
6
7
  this.assignments.set(name, handler);
8
+ if (meta)
9
+ this.metas.set(name, { name, ...meta });
7
10
  }
8
- registerDecision(name, handler) {
11
+ registerDecision(name, handler, meta) {
9
12
  this.decisions.set(name, handler);
13
+ if (meta)
14
+ this.metas.set(name, { name, ...meta });
10
15
  }
11
16
  resolveAssignment(name) {
12
17
  return this.assignments.get(name);
@@ -14,4 +19,22 @@ export class HandlerRegistry {
14
19
  resolveDecision(name) {
15
20
  return this.decisions.get(name);
16
21
  }
22
+ // ── SPI 实现清单(v1.4.0)──
23
+ /** 按处理器类型列出可用实现的元数据(typeName: AssignmentHandler / DecisionHandler,按 order 升序) */
24
+ listHandlers(typeName) {
25
+ const names = typeName === 'AssignmentHandler'
26
+ ? [...this.assignments.keys()]
27
+ : [...this.decisions.keys()];
28
+ return names
29
+ .map(n => this.metas.get(n) ?? { name: n })
30
+ .sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
31
+ }
32
+ /** 按处理器类型 + 分组列出(拦截器 pre/post) */
33
+ listHandlersGroup(typeName, group) {
34
+ return this.listHandlers(typeName).filter(m => m.group === group);
35
+ }
36
+ /** 已注册的处理器名称清单(含未带元数据的) */
37
+ listHandlerNames() {
38
+ return [...this.assignments.keys(), ...this.decisions.keys()];
39
+ }
17
40
  }
package/dist/spi.d.ts CHANGED
@@ -1,4 +1,9 @@
1
- import type { CcInstanceRow, ProcessDefine, ProcessDesign, ProcessDesignHis, ProcessInstance, ProcessSurrogate, ProcessTask, UserInfo } from './model.js';
1
+ import type { CcInstanceRow, DefineRow, InstanceRow, TaskRow, ProcessDefine, ProcessDesign, ProcessDesignHis, ProcessInstance, ProcessSurrogate, ProcessTask, UserInfo } from './model.js';
2
+ export interface QueryCondition {
3
+ column: string;
4
+ operator: string;
5
+ value: any;
6
+ }
2
7
  export interface ProcessRepository {
3
8
  findDefineById(id: number): Promise<ProcessDefine | null>;
4
9
  findDefineByName(name: string): Promise<ProcessDefine | null>;
@@ -20,10 +25,26 @@ export interface ProcessRepository {
20
25
  removeTaskActor(taskId: number, actors: string[]): Promise<void>;
21
26
  createCcInstance(instanceId: number, creator: string, ...actorIds: string[]): Promise<void>;
22
27
  updateCcStatus(instanceId: number, actorId: string): Promise<void>;
23
- pageCcInstances(pageNum: number, pageSize: number, actorId: string): Promise<{
28
+ pageCcInstances(pageNum: number, pageSize: number, actorId: string, conditions?: QueryCondition[]): Promise<{
24
29
  rows: CcInstanceRow[];
25
30
  total: number;
26
31
  }>;
32
+ pageDefines(pageNum: number, pageSize: number, conditions?: QueryCondition[]): Promise<{
33
+ rows: DefineRow[];
34
+ total: number;
35
+ }>;
36
+ pageInstances(pageNum: number, pageSize: number, operator: string, conditions?: QueryCondition[]): Promise<{
37
+ rows: InstanceRow[];
38
+ total: number;
39
+ }>;
40
+ pageTodoTasks(pageNum: number, pageSize: number, actorId: string, conditions?: QueryCondition[]): Promise<{
41
+ rows: TaskRow[];
42
+ total: number;
43
+ }>;
44
+ pageDoneTasks(pageNum: number, pageSize: number, operator: string, conditions?: QueryCondition[]): Promise<{
45
+ rows: TaskRow[];
46
+ total: number;
47
+ }>;
27
48
  }
28
49
  export interface UserProvider {
29
50
  getUser(userId: string): Promise<UserInfo | null>;
@@ -39,13 +60,13 @@ export interface ProcessExtRepository {
39
60
  saveDesign(d: ProcessDesign): Promise<void>;
40
61
  updateDesign(d: ProcessDesign): Promise<void>;
41
62
  removeDesign(id: number): Promise<void>;
42
- pageDesigns(pageNum?: number, pageSize?: number, filters?: Record<string, any>): Promise<[ProcessDesign[], number]>;
63
+ pageDesigns(pageNum?: number, pageSize?: number, filters?: Record<string, any>, conditions?: QueryCondition[]): Promise<[ProcessDesign[], number]>;
43
64
  saveDesignHis(his: ProcessDesignHis): Promise<void>;
44
65
  listDesignHis(designId: number): Promise<ProcessDesignHis[]>;
45
66
  findSurrogateById(id: number): Promise<ProcessSurrogate | null>;
46
67
  saveSurrogate(s: ProcessSurrogate): Promise<void>;
47
68
  updateSurrogate(s: ProcessSurrogate): Promise<void>;
48
69
  removeSurrogate(id: number): Promise<void>;
49
- pageSurrogates(pageNum?: number, pageSize?: number, filters?: Record<string, any>): Promise<[ProcessSurrogate[], number]>;
70
+ pageSurrogates(pageNum?: number, pageSize?: number, filters?: Record<string, any>, conditions?: QueryCondition[]): Promise<[ProcessSurrogate[], number]>;
50
71
  getSurrogate(operator: string, processName: string, at?: Date): Promise<ProcessSurrogate | null>;
51
72
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mldong/jeeflow",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "jeeflow workflow engine — Node.js / TypeScript implementation",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -29,7 +29,9 @@
29
29
  ],
30
30
  "license": "Apache-2.0",
31
31
  "devDependencies": {
32
+ "@types/express": "^4.17.25",
32
33
  "@types/pg": "^8.20.3",
34
+ "express": "^4.22.2",
33
35
  "tsx": "^4.19.0",
34
36
  "typescript": "^5.5.0"
35
37
  },