@steedos-labs/plugin-workflow 3.0.0-beta.9 → 3.0.1-beta.1

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 (82) hide show
  1. package/main/default/client/instance.client.js +6 -6
  2. package/main/default/client/object_workflows.client.js +8 -7
  3. package/main/default/client/socket.client.js +46 -3
  4. package/main/default/manager/import.js +17 -1
  5. package/main/default/manager/instance_manager.js +20 -6
  6. package/main/default/manager/push_manager.js +20 -12
  7. package/main/default/manager/uuflowManagerForInitApproval.js +794 -0
  8. package/main/default/manager/uuflow_manager.js +53 -4
  9. package/main/default/manager/workflow_manager.js +1 -1
  10. package/main/default/methods/instance_approve.js +258 -0
  11. package/main/default/methods/trace_approve_cc.js +571 -0
  12. package/main/default/objectTranslations/flows.en/flows.en.objectTranslation.yml +19 -0
  13. package/main/default/objectTranslations/flows.zh-CN/flows.zh-CN.objectTranslation.yml +19 -0
  14. package/main/default/objectTranslations/forms.en/forms.en.objectTranslation.yml +191 -0
  15. package/main/default/objectTranslations/forms.zh-CN/forms.zh-CN.objectTranslation.yml +246 -0
  16. package/main/default/objectTranslations/instance_tasks.en/instance_tasks.en.objectTranslation.yml +213 -0
  17. package/main/default/objectTranslations/instance_tasks.zh-CN/instance_tasks.zh-CN.objectTranslation.yml +213 -0
  18. package/main/default/objectTranslations/instances.en/instances.en.objectTranslation.yml +212 -0
  19. package/main/default/objectTranslations/instances.zh-CN/instances.zh-CN.objectTranslation.yml +209 -0
  20. package/main/default/objects/categories.object.yml +1 -0
  21. package/main/default/objects/flows/buttons/del.button.yml +7 -10
  22. package/main/default/objects/flows/buttons/design_form_layout.button.js +5 -2
  23. package/main/default/objects/flows/buttons/distributeAdmin.button.yml +5 -5
  24. package/main/default/objects/flows/buttons/newexport.button.yml +1 -1
  25. package/main/default/objects/flows/buttons/newimport.button.yml +2 -1
  26. package/main/default/objects/flows/flows.object.yml +12 -4
  27. package/main/default/objects/forms/forms.object.yml +85 -0
  28. package/main/default/objects/instance_tasks/buttons/instance_new.button.yml +3 -5
  29. package/main/default/objects/instances/buttons/instance_cc.button.yml +7 -7
  30. package/main/default/objects/instances/buttons/instance_delete.button.yml +2 -2
  31. package/main/default/objects/instances/buttons/instance_delete_many.button.yml +6 -6
  32. package/main/default/objects/instances/buttons/instance_distribute.button.yml +14 -13
  33. package/main/default/objects/instances/buttons/instance_flow_chart.button.yml +1 -1
  34. package/main/default/objects/instances/buttons/instance_forward.button.yml +8 -8
  35. package/main/default/objects/instances/buttons/instance_new.button.yml +3 -5
  36. package/main/default/objects/instances/buttons/instance_reassign.button.yml +1 -16
  37. package/main/default/objects/instances/buttons/instance_related.button.yml +4 -4
  38. package/main/default/objects/instances/buttons/instance_relocate.button.yml +9 -12
  39. package/main/default/objects/instances/buttons/instance_retrieve.button.yml +106 -2
  40. package/main/default/objects/instances/buttons/instance_save.button.yml +3 -9
  41. package/main/default/objects/instances/buttons/instance_submit.button.yml +1 -1
  42. package/main/default/objects/instances/buttons/instance_terminate.button.yml +7 -10
  43. package/main/default/objects/instances/listviews/monitor.listview.yml +0 -1
  44. package/main/default/pages/flowdetail.page.amis.json +11 -11
  45. package/main/default/pages/instance_detail.page.amis.json +25 -37
  46. package/main/default/pages/instance_tasks_detail.page.amis.json +21 -5
  47. package/main/default/pages/instance_tasks_list.page.amis.json +147 -110
  48. package/main/default/pages/instances_list.page.amis.json +146 -110
  49. package/main/default/routes/afterHook.js +34 -0
  50. package/main/default/routes/am.router.js +49 -2
  51. package/main/default/routes/api_cc.router.js +5 -12
  52. package/main/default/routes/api_flow_permission.router.js +7 -2
  53. package/main/default/routes/api_get_object_workflows.router.js +79 -22
  54. package/main/default/routes/api_have_read.router.js +73 -0
  55. package/main/default/routes/api_object_workflow_drafts.router.js +18 -19
  56. package/main/default/routes/api_workflow_approve_save.router.js +2 -1
  57. package/main/default/routes/api_workflow_chart.router.js +682 -0
  58. package/main/default/routes/api_workflow_engine.router.js +4 -4
  59. package/main/default/routes/api_workflow_flow_version.router.js +61 -0
  60. package/main/default/routes/api_workflow_form_version.router.js +61 -0
  61. package/main/default/routes/api_workflow_instance_return.router.js +164 -167
  62. package/main/default/routes/api_workflow_next_step_users.router.js +13 -8
  63. package/main/default/routes/api_workflow_reassign.router.js +200 -196
  64. package/main/default/routes/api_workflow_relocate.router.js +4 -3
  65. package/main/default/routes/api_workflow_retrieve.router.js +246 -237
  66. package/main/default/routes/export.router.js +5 -4
  67. package/main/default/routes/flow_form_design.ejs +33 -8
  68. package/main/default/routes/flow_form_design.router.js +4 -3
  69. package/main/default/routes/import.router.js +6 -7
  70. package/main/default/services/flows.service.js +1 -1
  71. package/main/default/translations/en.translation.yml +5 -0
  72. package/main/default/translations/zh-CN.translation.yml +2 -1
  73. package/main/default/triggers/amis_form_design.trigger.js +27 -5
  74. package/main/default/triggers/instances.trigger.js +9 -7
  75. package/main/default/utils/designerManager.js +12 -5
  76. package/package.json +4 -4
  77. package/package.service.js +21 -7
  78. package/public/workflow/index.css +4 -0
  79. package/src/instance_record_queue.js +1 -3
  80. package/src/rests/api_workflow_instance_batch_remove.js +4 -3
  81. package/src/webhook_queue.js +283 -0
  82. package/main/default/manager/index.js +0 -23
@@ -1,8 +1,8 @@
1
1
  /*
2
2
  * @Author: sunhaolin@hotoa.com
3
3
  * @Date: 2022-12-24 14:38:27
4
- * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2023-03-18 14:32:35
4
+ * @LastEditors: 孙浩林 sunhaolin@steedos.com
5
+ * @LastEditTime: 2025-10-08 14:50:07
6
6
  * @Description:
7
7
  */
8
8
  'use strict';
@@ -11,7 +11,6 @@ const express = require('express');
11
11
  const router = express.Router();
12
12
  const { requireAuthentication } = require("@steedos/auth");
13
13
  const _ = require('underscore');
14
- const Fiber = function(fun){console.log('TODO Fiber...')}
15
14
  const {
16
15
  remove_many_instance_tasks,
17
16
  insert_many_instance_tasks,
@@ -19,6 +18,7 @@ const {
19
18
  const PermissionManager = require('../manager/permission_manager');
20
19
  const UUFlowManager = require('../manager/uuflow_manager');
21
20
  const pushManager = require('../manager/push_manager');
21
+ const { getCollection, _makeNewID } = require('../utils/collection');
22
22
  /**
23
23
  @api {post} /api/workflow/reassign 接口说明
24
24
  @apiVersion 0.0.0
@@ -38,209 +38,213 @@ const pushManager = require('../manager/push_manager');
38
38
  router.post('/api/workflow/reassign', requireAuthentication, async function (req, res) {
39
39
  try {
40
40
  let userSession = req.user;
41
- Fiber(async function () {
42
- try {
43
- var current_user, current_user_info, hashData;
44
- current_user_info = Object.assign({}, userSession, { _id: userSession.userId })
45
- current_user = current_user_info._id;
46
- hashData = req.body;
47
- _.each(hashData['Instances'], function (instance_from_client) {
48
- var _users, approve_users_handlers, assignee_appr, current_space_user, current_user_organization, i, inbox_users, inbox_users_from_client, ins, instance, instance_id, last_trace, last_trace_from_client, new_inbox_users, not_in_inbox_users, now, permissions, r, reassign_reason, setObj, space, space_id;
49
- instance_id = instance_from_client['_id'];
50
- instance = UUFlowManager.getInstance(instance_id);
51
- space_id = instance.space;
52
- // 验证instance为审核中状态
53
- UUFlowManager.isInstancePending(instance);
54
- // 验证当前执行转签核的trace未结束
55
- last_trace_from_client = _.last(instance["traces"]);
56
- last_trace = _.find(instance.traces, function (t) {
57
- return t._id === last_trace_from_client["_id"];
58
- });
59
- if (last_trace.is_finished === true) {
60
- return;
61
- }
62
- // 验证login user_id对该流程有管理申请单的权限
63
- permissions = PermissionManager.getFlowPermissions(instance.flow, current_user);
64
- space = db.spaces.findOne({
65
- _id: space_id
66
- }, {
67
- fields: {
68
- admins: 1
69
- }
70
- });
71
- if ((!permissions.includes("admin")) && (!space.admins.includes(current_user))) {
72
- throw new Error("用户没有对当前流程的管理权限");
41
+ var current_user, current_user_info, hashData;
42
+ current_user_info = Object.assign({}, userSession, { _id: userSession.userId })
43
+ current_user = current_user_info._id;
44
+ const { is_space_admin } = userSession;
45
+ hashData = req.body;
46
+
47
+ const instancesCollection = await getCollection('instances');
48
+ const usersCollection = await getCollection('users');
49
+ const spaceUsersCollection = await getCollection('space_users');
50
+ const organizationsCollection = await getCollection('organizations');
51
+
52
+ for (const instance_from_client of hashData['Instances']) {
53
+ var _users, approve_users_handlers, assignee_appr, current_space_user, current_user_organization, i, inbox_users, inbox_users_from_client, ins, instance, instance_id, last_trace, last_trace_from_client, new_inbox_users, not_in_inbox_users, now, permissions, r, reassign_reason, setObj, space, space_id;
54
+ instance_id = instance_from_client['_id'];
55
+ instance = await UUFlowManager.getInstance(instance_id);
56
+ space_id = instance.space;
57
+ // 验证instance为审核中状态
58
+ await UUFlowManager.isInstancePending(instance);
59
+ // 验证当前执行转签核的trace未结束
60
+ last_trace_from_client = _.last(instance["traces"]);
61
+ last_trace = _.find(instance.traces, function (t) {
62
+ return t._id === last_trace_from_client["_id"];
63
+ });
64
+ if (last_trace.is_finished === true) {
65
+ continue;
66
+ }
67
+ // 验证login user_id对该流程有管理申请单的权限
68
+ permissions = await PermissionManager.getFlowPermissions(instance.flow, current_user);
69
+
70
+ if ((!permissions.includes("admin")) && !is_space_admin) {
71
+ throw new Error("用户没有对当前流程的管理权限");
72
+ }
73
+ inbox_users = instance.inbox_users;
74
+ inbox_users_from_client = instance_from_client["inbox_users"];
75
+ reassign_reason = instance_from_client["reassign_reason"];
76
+ not_in_inbox_users = _.difference(inbox_users, inbox_users_from_client);
77
+ new_inbox_users = _.difference(inbox_users_from_client, inbox_users);
78
+ // 若assignee=原inbox_users,说明不需要执行转签核,系统什么都不做
79
+ if (not_in_inbox_users.length === 0 && new_inbox_users.length === 0) {
80
+ continue;
81
+ }
82
+ setObj = new Object;
83
+ now = new Date;
84
+ const finishedApproveIds = []
85
+ const newApproveIds = []
86
+ i = 0;
87
+ approve_users_handlers = [];
88
+ while (i < last_trace.approves.length) {
89
+ if (not_in_inbox_users.includes(last_trace.approves[i].handler)) {
90
+ if (last_trace.approves[i].is_finished === false && last_trace.approves[i].type !== "cc" && last_trace.approves[i].type !== "distribute") {
91
+ last_trace.approves[i].is_finished = true;
92
+ last_trace.approves[i].finish_date = now;
93
+ last_trace.approves[i].judge = "terminated";
94
+ last_trace.approves[i].description = "";
95
+ last_trace.approves[i].cost_time = last_trace.approves[i].finish_date - last_trace.approves[i].start_date;
96
+ approve_users_handlers.push(last_trace.approves[i].user);
97
+ approve_users_handlers.push(last_trace.approves[i].handler);
98
+ finishedApproveIds.push(last_trace.approves[i]._id)
73
99
  }
74
- inbox_users = instance.inbox_users;
75
- inbox_users_from_client = instance_from_client["inbox_users"];
76
- reassign_reason = instance_from_client["reassign_reason"];
77
- not_in_inbox_users = _.difference(inbox_users, inbox_users_from_client);
78
- new_inbox_users = _.difference(inbox_users_from_client, inbox_users);
79
- // 若assignee=原inbox_users,说明不需要执行转签核,系统什么都不做
80
- if (not_in_inbox_users.length === 0 && new_inbox_users.length === 0) {
81
- return;
100
+ }
101
+ i++;
102
+ }
103
+ // 在同一trace下插入转签核操作者的approve记录
104
+ current_space_user = await UUFlowManager.getSpaceUser(space_id, current_user);
105
+
106
+ current_user_organization = await organizationsCollection.findOne({ _id: current_space_user.organization }, {
107
+ projection: {
108
+ name: 1,
109
+ fullname: 1
110
+ }
111
+ })
112
+
113
+ assignee_appr = new Object;
114
+ assignee_appr._id = _makeNewID();
115
+ assignee_appr.instance = last_trace.instance;
116
+ assignee_appr.trace = last_trace._id;
117
+ assignee_appr.is_finished = true;
118
+ assignee_appr.user = current_user;
119
+ assignee_appr.user_name = current_user_info.name;
120
+ assignee_appr.handler = current_user;
121
+ assignee_appr.handler_name = current_user_info.name;
122
+ assignee_appr.handler_organization = current_space_user.organization;
123
+ assignee_appr.handler_organization_name = current_user_organization.name;
124
+ assignee_appr.handler_organization_fullname = current_user_organization.fullname;
125
+ assignee_appr.start_date = now;
126
+ assignee_appr.finish_date = now;
127
+ assignee_appr.due_date = last_trace.due_date;
128
+ assignee_appr.read_date = now;
129
+ assignee_appr.judge = "reassigned";
130
+ assignee_appr.is_read = true;
131
+ assignee_appr.description = reassign_reason;
132
+ assignee_appr.is_error = false;
133
+ assignee_appr.values = new Object;
134
+ assignee_appr.cost_time = assignee_appr.finish_date - assignee_appr.start_date;
135
+ last_trace.approves.push(assignee_appr);
136
+ // 对新增的每位待审核人,各增加一条新的approve
137
+ for (const user_id of new_inbox_users) {
138
+ var agent, handler_id, handler_info, new_appr, new_user, space_user, user_organization;
139
+
140
+ new_user = await usersCollection.findOne({ _id: user_id }, {
141
+ projection: {
142
+ name: 1
82
143
  }
83
- setObj = new Object;
84
- now = new Date;
85
- const finishedApproveIds = []
86
- const newApproveIds = []
87
- i = 0;
88
- approve_users_handlers = [];
89
- while (i < last_trace.approves.length) {
90
- if (not_in_inbox_users.includes(last_trace.approves[i].handler)) {
91
- if (last_trace.approves[i].is_finished === false && last_trace.approves[i].type !== "cc" && last_trace.approves[i].type !== "distribute") {
92
- last_trace.approves[i].is_finished = true;
93
- last_trace.approves[i].finish_date = now;
94
- last_trace.approves[i].judge = "terminated";
95
- last_trace.approves[i].description = "";
96
- last_trace.approves[i].cost_time = last_trace.approves[i].finish_date - last_trace.approves[i].start_date;
97
- approve_users_handlers.push(last_trace.approves[i].user);
98
- approve_users_handlers.push(last_trace.approves[i].handler);
99
- finishedApproveIds.push(last_trace.approves[i]._id)
100
- }
101
- }
102
- i++;
144
+ })
145
+
146
+ space_user = await UUFlowManager.getSpaceUser(space_id, user_id);
147
+
148
+ user_organization = await organizationsCollection.findOne({ _id: space_user.organization }, {
149
+ projection: {
150
+ name: 1,
151
+ fullname: 1
103
152
  }
104
- // 在同一trace下插入转签核操作者的approve记录
105
- current_space_user = UUFlowManager.getSpaceUser(space_id, current_user);
106
- current_user_organization = db.organizations.findOne({
107
- _id: current_space_user.organization
108
- }, {
109
- fields: {
110
- name: 1,
111
- fullname: 1
112
- }
113
- });
114
- assignee_appr = new Object;
115
- assignee_appr._id = _makeNewID();
116
- assignee_appr.instance = last_trace.instance;
117
- assignee_appr.trace = last_trace._id;
118
- assignee_appr.is_finished = true;
119
- assignee_appr.user = current_user;
120
- assignee_appr.user_name = current_user_info.name;
121
- assignee_appr.handler = current_user;
122
- assignee_appr.handler_name = current_user_info.name;
123
- assignee_appr.handler_organization = current_space_user.organization;
124
- assignee_appr.handler_organization_name = current_user_organization.name;
125
- assignee_appr.handler_organization_fullname = current_user_organization.fullname;
126
- assignee_appr.start_date = now;
127
- assignee_appr.finish_date = now;
128
- assignee_appr.due_date = last_trace.due_date;
129
- assignee_appr.read_date = now;
130
- assignee_appr.judge = "reassigned";
131
- assignee_appr.is_read = true;
132
- assignee_appr.description = reassign_reason;
133
- assignee_appr.is_error = false;
134
- assignee_appr.values = new Object;
135
- assignee_appr.cost_time = assignee_appr.finish_date - assignee_appr.start_date;
136
- last_trace.approves.push(assignee_appr);
137
- // 对新增的每位待审核人,各增加一条新的approve
138
- _.each(new_inbox_users, function (user_id) {
139
- var agent, handler_id, handler_info, new_appr, new_user, space_user, user_organization;
140
- new_user = db.users.findOne(user_id, {
141
- fields: {
142
- name: 1
143
- }
144
- });
145
- space_user = UUFlowManager.getSpaceUser(space_id, user_id);
146
- user_organization = db.organizations.findOne(space_user.organization, {
147
- fields: {
148
- name: 1,
149
- fullname: 1
150
- }
151
- });
152
- new_appr = new Object;
153
- new_appr._id = _makeNewID();
154
- new_appr.instance = last_trace.instance;
155
- new_appr.trace = last_trace._id;
156
- new_appr.is_finished = false;
157
- new_appr.user = user_id;
158
- new_appr.user_name = new_user.name;
159
- handler_id = user_id;
160
- handler_info = new_user;
161
- agent = UUFlowManager.getAgent(space_id, user_id);
162
- if (agent) {
163
- inbox_users_from_client[inbox_users_from_client.indexOf(user_id)] = agent;
164
- handler_id = agent;
165
- handler_info = db.users.findOne({
166
- _id: agent
167
- }, {
168
- fields: {
169
- name: 1
170
- }
171
- });
172
- new_appr.agent = agent;
153
+ })
154
+
155
+ new_appr = new Object;
156
+ new_appr._id = _makeNewID();
157
+ new_appr.instance = last_trace.instance;
158
+ new_appr.trace = last_trace._id;
159
+ new_appr.is_finished = false;
160
+ new_appr.user = user_id;
161
+ new_appr.user_name = new_user.name;
162
+ handler_id = user_id;
163
+ handler_info = new_user;
164
+ agent = await UUFlowManager.getAgent(space_id, user_id);
165
+ if (agent) {
166
+ inbox_users_from_client[inbox_users_from_client.indexOf(user_id)] = agent;
167
+ handler_id = agent;
168
+
169
+ handler_info = await usersCollection.findOne({ _id: agent }, {
170
+ projection: {
171
+ name: 1
173
172
  }
174
- new_appr.handler = handler_id;
175
- new_appr.handler_name = handler_info.name;
176
- new_appr.handler_organization = space_user.organization;
177
- new_appr.handler_organization_name = user_organization.name;
178
- new_appr.handler_organization_fullname = user_organization.fullname;
179
- new_appr.from_user = current_user;
180
- new_appr.from_user_name = current_user_info.name;
181
- new_appr.type = "reassign";
182
- new_appr.start_date = now;
183
- new_appr.due_date = last_trace.due_date;
184
- new_appr.is_read = false;
185
- new_appr.is_error = false;
186
- new_appr.values = new Object;
187
- UUFlowManager.setRemindInfo(instance.values, new_appr);
188
- last_trace.approves.push(new_appr);
189
- newApproveIds.push(new_appr._id)
190
- });
191
- instance.outbox_users.push(current_user);
192
- instance.outbox_users = instance.outbox_users.concat(approve_users_handlers);
193
- setObj.outbox_users = _.uniq(instance.outbox_users);
194
- setObj.inbox_users = inbox_users_from_client;
195
- setObj.modified = now;
196
- setObj.modified_by = current_user;
197
- setObj["traces.$.approves"] = last_trace.approves;
198
- r = db.instances.update({
199
- _id: instance_id,
200
- "traces._id": last_trace._id
201
- }, {
202
- $set: setObj
203
- });
173
+ })
204
174
 
205
- // 删除当前结束的approve
206
- remove_many_instance_tasks(finishedApproveIds)
207
- // 生成新待审核的approve
208
- insert_many_instance_tasks(instance_id, last_trace._id, newApproveIds)
175
+ new_appr.agent = agent;
176
+ }
177
+ new_appr.handler = handler_id;
178
+ new_appr.handler_name = handler_info.name;
179
+ new_appr.handler_organization = space_user.organization;
180
+ new_appr.handler_organization_name = user_organization.name;
181
+ new_appr.handler_organization_fullname = user_organization.fullname;
182
+ new_appr.from_user = current_user;
183
+ new_appr.from_user_name = current_user_info.name;
184
+ new_appr.type = "reassign";
185
+ new_appr.start_date = now;
186
+ new_appr.due_date = last_trace.due_date;
187
+ new_appr.is_read = false;
188
+ new_appr.is_error = false;
189
+ new_appr.values = new Object;
190
+ await UUFlowManager.setRemindInfo(instance.values, new_appr);
191
+ last_trace.approves.push(new_appr);
192
+ newApproveIds.push(new_appr._id)
193
+ };
194
+ instance.outbox_users.push(current_user);
195
+ instance.outbox_users = instance.outbox_users.concat(approve_users_handlers);
196
+ setObj.outbox_users = _.uniq(instance.outbox_users);
197
+ setObj.inbox_users = inbox_users_from_client;
198
+ setObj.modified = now;
199
+ setObj.modified_by = current_user;
200
+ setObj["traces.$.approves"] = last_trace.approves;
209
201
 
210
- if (r) {
211
- ins = UUFlowManager.getInstance(instance_id);
212
- // 给被删除的inbox_users 和 当前用户 发送push
213
- pushManager.send_message_current_user(current_user_info);
214
- _.each(not_in_inbox_users, function (user_id) {
215
- if (user_id !== current_user) {
216
- return pushManager.send_message_to_specifyUser("current_user", user_id);
217
- }
218
- });
219
- // 提取instances.outbox_users数组和填单人、申请人
220
- _users = new Array;
221
- _users.push(ins.applicant);
222
- _users.push(ins.submitter);
223
- _users = _.uniq(_users.concat(ins.outbox_users));
224
- _.each(_users, function (user_id) {
225
- return pushManager.send_message_to_specifyUser("current_user", user_id);
226
- });
227
- // 给新加入的inbox_users发送push message
228
- pushManager.send_instance_notification("reassign_new_inbox_users", ins, reassign_reason, current_user_info);
229
- // 如果已经配置webhook并已激活则触发
230
- return pushManager.triggerWebhook(ins.flow, ins, {}, 'reassign', current_user, ins.inbox_users);
202
+ r = await instancesCollection.updateOne({
203
+ _id: instance_id,
204
+ "traces._id": last_trace._id
205
+ }, {
206
+ $set: setObj,
207
+ });
208
+
209
+ // 删除当前结束的approve
210
+ await remove_many_instance_tasks(finishedApproveIds)
211
+ // 生成新待审核的approve
212
+ await insert_many_instance_tasks(instance_id, last_trace._id, newApproveIds)
213
+
214
+ if (r) {
215
+ ins = await UUFlowManager.getInstance(instance_id);
216
+ // 给被删除的inbox_users 当前用户 发送push
217
+ await pushManager.send_message_current_user(current_user_info);
218
+ for (const user_id of not_in_inbox_users) {
219
+ if (user_id !== current_user) {
220
+ await pushManager.send_message_to_specifyUser("current_user", user_id);
231
221
  }
232
- });
233
- res.status(200).send({});
234
- } catch (e) {
235
- console.error(e);
236
- res.status(200).send({
237
- errors: [{ errorMessage: e.message }]
238
- });
222
+ };
223
+ // 提取instances.outbox_users数组和填单人、申请人
224
+ _users = new Array;
225
+ _users.push(ins.applicant);
226
+ _users.push(ins.submitter);
227
+ _users = _.uniq(_users.concat(ins.outbox_users));
228
+ for (const user_id of _users) {
229
+ await pushManager.send_message_to_specifyUser("current_user", user_id);
230
+ };
231
+ // 给新加入的inbox_users发送push message
232
+ await pushManager.send_instance_notification("reassign_new_inbox_users", ins, reassign_reason, current_user_info);
233
+ // 如果已经配置webhook并已激活则触发
234
+ await pushManager.triggerWebhook(ins.flow, ins, {}, 'reassign', current_user, ins.inbox_users);
239
235
  }
240
- }).run()
236
+ };
237
+
238
+ res.status(200).send({
239
+ status: 0,
240
+ data: {}
241
+ });
241
242
  } catch (e) {
243
+ console.log(e);
242
244
  res.status(200).send({
243
- errors: [{ errorMessage: e.message }]
245
+ status: -1,
246
+ msg: e.message,
247
+ data: {}
244
248
  });
245
249
  }
246
250
  });
@@ -10,8 +10,9 @@ const router = express.Router();
10
10
  const { requireAuthentication } = require("@steedos/auth");
11
11
  const objectql = require('@steedos/objectql');
12
12
  const { excuteTriggers } = require('../utils/trigger');
13
- const { getStep } = require('../uuFlowManager');
13
+ const { getStep } = require('../uuflowManager');
14
14
  const UUFlowManager = require('../manager/uuflow_manager');
15
+ const afterHook = require('./afterHook');
15
16
  /**
16
17
  * 重定位申请单
17
18
  * body {
@@ -22,7 +23,7 @@ const UUFlowManager = require('../manager/uuflow_manager');
22
23
  * ]
23
24
  * }
24
25
  */
25
- router.post('/api/workflow/relocate', requireAuthentication, async function (req, res) {
26
+ router.post('/api/workflow/relocate', requireAuthentication, afterHook, async function (req, res) {
26
27
  try {
27
28
  let userSession = req.user;
28
29
  const spaceId = userSession.spaceId;
@@ -44,7 +45,7 @@ router.post('/api/workflow/relocate', requireAuthentication, async function (req
44
45
  await excuteTriggers({ when: 'beforeEnd', userId, flowId, insId });
45
46
  }
46
47
 
47
- UUFlowManager.relocate(instance_from_client, userSession)
48
+ await UUFlowManager.relocate(instance_from_client, userSession)
48
49
  // afterEnd
49
50
  if (next_step_type === 'end') {
50
51
  await excuteTriggers({ when: 'afterEnd', userId, flowId, insId });