ActionProcessing.java 18.0 KB
Newer Older
R
roo00 已提交
1 2 3 4
package com.x.processplatform.assemble.surface.jaxrs.task;

import java.util.ArrayList;
import java.util.List;
Z
zhourui 已提交
5
import java.util.concurrent.LinkedBlockingQueue;
R
roo00 已提交
6 7
import java.util.stream.Collectors;

Z
zhourui 已提交
8
import org.apache.commons.lang3.BooleanUtils;
Z
zhourui 已提交
9 10
import org.apache.commons.lang3.StringUtils;

R
roo00 已提交
11 12 13
import com.google.gson.JsonElement;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
NoSubject's avatar
NoSubject 已提交
14
import com.x.base.core.entity.JpaObject;
R
roo00 已提交
15
import com.x.base.core.project.Applications;
R
roo00 已提交
16 17 18
import com.x.base.core.project.x_processplatform_service_processing;
import com.x.base.core.project.bean.WrapCopier;
import com.x.base.core.project.bean.WrapCopierFactory;
NoSubject's avatar
NoSubject 已提交
19
import com.x.base.core.project.config.Config;
R
roo00 已提交
20 21 22 23
import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
R
update  
roo00 已提交
24 25 26 27
import com.x.base.core.project.jaxrs.WoId;
import com.x.base.core.project.jaxrs.WrapStringList;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
R
roo00 已提交
28
import com.x.base.core.project.tools.ListTools;
NoSubject's avatar
NoSubject 已提交
29
import com.x.base.core.project.tools.StringTools;
R
roo00 已提交
30
import com.x.processplatform.assemble.surface.Business;
31
import com.x.processplatform.assemble.surface.RecordBuilder;
Z
zhourui 已提交
32 33
import com.x.processplatform.assemble.surface.TaskBuilder;
import com.x.processplatform.assemble.surface.TaskCompletedBuilder;
R
roo00 已提交
34
import com.x.processplatform.assemble.surface.ThisApplication;
NoSubject's avatar
NoSubject 已提交
35 36
import com.x.processplatform.core.entity.content.Record;
import com.x.processplatform.core.entity.content.RecordProperties.NextManual;
R
roo00 已提交
37
import com.x.processplatform.core.entity.content.Task;
R
roo00 已提交
38
import com.x.processplatform.core.entity.content.TaskCompleted;
NoSubject's avatar
NoSubject 已提交
39
import com.x.processplatform.core.entity.content.Work;
Z
zhourui 已提交
40
import com.x.processplatform.core.entity.content.WorkCompleted;
R
roo00 已提交
41
import com.x.processplatform.core.entity.content.WorkLog;
R
roo00 已提交
42 43
import com.x.processplatform.core.entity.element.Manual;
import com.x.processplatform.core.entity.element.Route;
Z
zhourui 已提交
44
import com.x.processplatform.core.entity.log.SignalStack;
NoSubject's avatar
NoSubject 已提交
45
import com.x.processplatform.core.express.ProcessingAttributes;
Z
zhourui 已提交
46 47
import com.x.processplatform.core.express.assemble.surface.jaxrs.task.ActionProcessingWi;
import com.x.processplatform.core.express.assemble.surface.jaxrs.task.ActionProcessingWo;
Z
zhourui 已提交
48
import com.x.processplatform.core.express.service.processing.jaxrs.task.ProcessingWi;
NoSubject's avatar
NoSubject 已提交
49
import com.x.processplatform.core.express.service.processing.jaxrs.task.WrapAppend;
Z
fix  
zhourui 已提交
50
import com.x.processplatform.core.express.service.processing.jaxrs.work.ActionProcessingSignalWo;
R
roo00 已提交
51

Z
zhourui 已提交
52 53
import io.swagger.v3.oas.annotations.media.Schema;

R
roo00 已提交
54 55
class ActionProcessing extends BaseAction {

Z
zhourui 已提交
56
	private static final Logger LOGGER = LoggerFactory.getLogger(ActionProcessing.class);
R
update  
roo00 已提交
57

NoSubject's avatar
NoSubject 已提交
58 59 60 61 62 63 64
	private ActionResult<Wo> result = new ActionResult<>();

	private Wi wi;
	private Task task;
	private WorkLog workLog;
	private Work work;
	private String taskCompletedId;
Z
zhourui 已提交
65 66
	private String type = TYPE_TASK;
	private Boolean asyncSupported = true;
NoSubject's avatar
NoSubject 已提交
67
	private EffectivePerson effectivePerson;
Z
zhourui 已提交
68
	private List<TaskCompleted> taskCompleteds = new ArrayList<>();
NoSubject's avatar
NoSubject 已提交
69
	private List<Task> newTasks = new ArrayList<>();
Z
zhourui 已提交
70
	private Exception exception = null;
NoSubject's avatar
NoSubject 已提交
71

Z
zhourui 已提交
72
	private Record rec;
NoSubject's avatar
NoSubject 已提交
73 74
	private String series = StringTools.uniqueToken();

Z
zhourui 已提交
75 76
	private static final String TYPE_APPENDTASK = "appendTask";
	private static final String TYPE_TASK = "task";
NoSubject's avatar
NoSubject 已提交
77

Z
zhourui 已提交
78 79
	private static final String STRING_PROCESSING = "processing";

NoSubject's avatar
NoSubject 已提交
80
	ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, JsonElement jsonElement) throws Exception {
Z
zhourui 已提交
81

R
roo00 已提交
82
		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
R
roo00 已提交
83
			Business business = new Business(emc);
Z
zhourui 已提交
84 85
			init(effectivePerson, business, id, jsonElement);
			updateTaskIfNecessary(business);
Z
zhourui 已提交
86
			seeManualRoute(business);
R
update  
roo00 已提交
87
		}
Z
zhourui 已提交
88 89 90

		LinkedBlockingQueue<Wo> responeQueue = new LinkedBlockingQueue<>();

Z
zhourui 已提交
91
		new Thread(() -> {
Z
zhourui 已提交
92 93 94 95 96 97 98
			Wo wo = new Wo();
			try {
				if (StringUtils.equals(type, TYPE_APPENDTASK)) {
					processingAppendTask();
				} else {
					processingTask();
				}
Z
zhourui 已提交
99
				wo = Wo.copier.copy(rec);
Z
zhourui 已提交
100 101 102 103 104
			} catch (Exception e) {
				exception = e;
			} finally {
				try {
					responeQueue.put(wo);
Z
zhourui 已提交
105 106
				} catch (InterruptedException e) {
					Thread.currentThread().interrupt();
Z
zhourui 已提交
107 108
					exception = e;
				}
Z
zhourui 已提交
109
			}
Z
zhourui 已提交
110 111
		}, String.format("%s:processing:%s", ActionProcessing.class.getName(), id)).start();

Z
zhourui 已提交
112 113 114 115 116 117 118 119 120 121 122 123 124
		startSignalThreadIfAsyncSupported(effectivePerson, id, responeQueue);

		Wo wo = responeQueue.take();

		if (exception != null) {
			throw exception;
		}
		result.setData(wo);
		return result;
	}

	private void startSignalThreadIfAsyncSupported(EffectivePerson effectivePerson, String id,
			LinkedBlockingQueue<Wo> responeQueue) {
Z
zhourui 已提交
125 126 127 128
		if (BooleanUtils.isNotFalse(this.asyncSupported)) {
			new Thread(() -> {
				RespProcessingSignal resp = null;
				try {
Z
zhourui 已提交
129 130 131
					resp = ThisApplication.context().applications()
							.getQuery(effectivePerson.getDebugger(), x_processplatform_service_processing.class,
									Applications.joinQueryUri("work", task.getWork(), "series", series, "activitytoken",
Z
zhourui 已提交
132
											this.task.getActivityToken(), STRING_PROCESSING, "signal"),
Z
zhourui 已提交
133 134 135 136 137 138
									task.getJob())
							.getData(RespProcessingSignal.class);
				} catch (Exception e) {
					exception = e;
				} finally {
					Wo wo = new Wo();
Z
zhourui 已提交
139
					wo.setOccurSignalStack(true);
Z
zhourui 已提交
140 141 142
					if ((null != resp) && (null != resp.getSignalStack()) && (!resp.getSignalStack().isEmpty())) {
						wo.setSignalStack(resp.getSignalStack());
					} else {
Z
zhourui 已提交
143
						wo.setSignalStack(new SignalStack());
Z
zhourui 已提交
144 145 146
					}
					try {
						responeQueue.put(wo);
Z
zhourui 已提交
147 148
					} catch (InterruptedException e) {
						Thread.currentThread().interrupt();
Z
zhourui 已提交
149 150 151 152 153
						exception = e;
					}
				}
			}, String.format("%s:processingSignal:%s", ActionProcessing.class.getName(), id)).start();
		}
NoSubject's avatar
NoSubject 已提交
154
	}
R
roo00 已提交
155

Z
zhourui 已提交
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
	private void init(EffectivePerson effectivePerson, Business business, String id, JsonElement jsonElement)
			throws Exception {
		EntityManagerContainer emc = business.entityManagerContainer();
		this.effectivePerson = effectivePerson;
		this.wi = this.convertToWrapIn(jsonElement, Wi.class);
		this.task = emc.find(id, Task.class);
		if (null == this.task) {
			throw new ExceptionEntityNotExist(id, Task.class);
		}
		// 获取当前环节已经完成的待办
		this.taskCompleteds = emc.listEqual(TaskCompleted.class, TaskCompleted.activityToken_FIELDNAME,
				task.getActivityToken());
		this.workLog = emc.firstEqualAndEqual(WorkLog.class, WorkLog.job_FIELDNAME, task.getJob(),
				WorkLog.fromActivityToken_FIELDNAME, task.getActivityToken());

		if (null == workLog) {
			throw new ExceptionEntityNotExist(WorkLog.class);
		}
		this.work = emc.find(this.task.getWork(), Work.class);
		if (null == this.work) {
			throw new ExceptionEntityNotExist(this.task.getWork(), Work.class);
		}
		if ((!effectivePerson.isCipher()) && effectivePerson.isNotPerson(this.task.getPerson())) {
			throw new ExceptionAccessDenied(effectivePerson, this.task);
R
roo00 已提交
180
		}
Z
zhourui 已提交
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
	}

	private void updateTaskIfNecessary(Business business) throws Exception {
		if (StringUtils.isNotEmpty(this.wi.getRouteName()) || StringUtils.isNotEmpty(this.wi.getOpinion())
				|| (!StringUtils.equals(this.task.getMediaOpinion(), this.wi.getMediaOpinion()))) {
			business.entityManagerContainer().beginTransaction(Task.class);
			// 如果有输入新的路由决策覆盖原有决策
			if (StringUtils.isNotEmpty(this.wi.getRouteName())) {
				this.task.setRouteName(this.wi.getRouteName());
			}
			// 如果有新的流程意见那么覆盖原有流程意见
			if (StringUtils.isNotEmpty(this.wi.getOpinion())) {
				this.task.setOpinion(this.wi.getOpinion());
			}
			// 强制覆盖多媒体意见
			this.task.setMediaOpinion(this.wi.getMediaOpinion());
			business.entityManagerContainer().commit();
R
roo00 已提交
198
		}
199 200 201 202 203 204 205 206
		// 校验路由选择不能为空
		if (StringUtils.isBlank(this.task.getRouteName())) {
			throw new ExceptionEmptyRouteName();
		}
		// 校验路由在可选择范围内
		if (!this.task.getRouteNameList().contains(this.task.getRouteName())) {
			throw new ExceptionErrorRouteName(this.task.getRouteName());
		}
R
roo00 已提交
207 208
	}

Z
zhourui 已提交
209
	private void seeManualRoute(Business business) throws Exception {
Z
zhourui 已提交
210
		Manual manual = business.manual().pick(this.task.getActivity());
R
roo00 已提交
211 212 213
		if (null != manual) {
			Route route = null;
			for (Route o : business.route().pick(manual.getRouteList())) {
Z
zhourui 已提交
214
				if (StringUtils.equals(o.getName(), this.task.getRouteName())) {
R
roo00 已提交
215 216
					route = o;
					break;
R
roo00 已提交
217 218
				}
			}
Z
zhourui 已提交
219 220 221 222 223 224
			if (null != route) {
				this.asyncSupported = BooleanUtils.isNotFalse(route.getAsyncSupported());
				if (StringUtils.equals(route.getType(), Route.TYPE_APPENDTASK)
						&& StringUtils.equals(manual.getId(), route.getActivity())) {
					this.type = TYPE_APPENDTASK;
				}
R
roo00 已提交
225
			}
R
roo00 已提交
226 227 228
		}
	}

Z
zhourui 已提交
229 230 231 232 233 234 235
	private void processingAppendTask() throws Exception {
		this.processingAppendTaskAppend();
		this.taskCompletedId = this.processingProcessingTask(TaskCompleted.PROCESSINGTYPE_APPENDTASK);
		this.processingProcessingWork(ProcessingAttributes.TYPE_APPENDTASK);
		this.processingRecord(Record.TYPE_APPENDTASK);
		this.processingUpdateTaskCompleted();
		this.processingUpdateTask();
NoSubject's avatar
NoSubject 已提交
236
	}
R
roo00 已提交
237

Z
zhourui 已提交
238
	private void processingAppendTaskAppend() throws Exception {
NoSubject's avatar
NoSubject 已提交
239 240 241 242 243 244 245
		WrapAppend req = new WrapAppend();
		req.setIdentityList(this.wi.getAppendTaskIdentityList());
		ThisApplication.context().applications()
				.putQuery(x_processplatform_service_processing.class,
						Applications.joinQueryUri("task", this.task.getId(), "append"), req, this.task.getJob())
				.getData(WrapStringList.class);
	}
R
roo00 已提交
246

Z
zhourui 已提交
247 248 249
	private void processingTask() throws Exception {
		this.taskCompletedId = this.processingProcessingTask(TaskCompleted.PROCESSINGTYPE_TASK);
		this.processingProcessingWork(ProcessingAttributes.TYPE_TASK);
250
		// 流程流转到取消环节,此时工作已被删除.flag =true 代表存在,false 已经被删除
Z
zhourui 已提交
251 252 253 254 255
		boolean flag = true;
		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
			if ((emc.countEqual(Work.class, Work.job_FIELDNAME, task.getJob()) == 0)
					&& (emc.countEqual(WorkCompleted.class, WorkCompleted.job_FIELDNAME, task.getJob()) == 0)) {
				flag = false;
Z
zhourui 已提交
256
			}
Z
zhourui 已提交
257 258 259 260 261 262
		}
		if (flag) {
			this.processingRecord(Record.TYPE_TASK);
			this.processingUpdateTaskCompleted();
			this.processingUpdateTask();
		} else {
Z
zhourui 已提交
263
			rec = new Record(workLog, task);
264 265 266
			try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
				Business business = new Business(emc);
				// 后续需要记录unitDutyList所以在一个emc中进行计算.
Z
zhourui 已提交
267
				rec.getProperties()
268 269
						.setUnitDutyList(business.organization().unitDuty().listNameWithIdentity(task.getIdentity()));
				// 记录处理身份的排序号
Z
zhourui 已提交
270
				rec.getProperties().setIdentityOrderNumber(
271 272
						business.organization().identity().getOrderNumber(task.getIdentity(), Integer.MAX_VALUE));
				// 记录处理身份所在组织的排序号
Z
zhourui 已提交
273
				rec.getProperties().setUnitOrderNumber(
274
						business.organization().unit().getOrderNumber(task.getUnit(), Integer.MAX_VALUE));
275
				// 记录处理身份所在组织层级组织排序号
Z
zhourui 已提交
276
				rec.getProperties().setUnitLevelOrderNumber(
277
						business.organization().unit().getLevelOrderNumber(task.getUnit(), ""));
278
				// 记录task中身份所有的组织职务.
Z
zhourui 已提交
279 280
				rec.setCompleted(true);
				rec.setType(Record.TYPE_TASK);
281
			}
282
		}
NoSubject's avatar
NoSubject 已提交
283
	}
R
roo00 已提交
284

Z
zhourui 已提交
285
	private String processingProcessingTask(String processType) throws Exception {
Z
zhourui 已提交
286
		ProcessingWi req = new ProcessingWi();
NoSubject's avatar
NoSubject 已提交
287 288 289
		req.setProcessingType(processType);
		WoId resp = ThisApplication.context().applications()
				.putQuery(x_processplatform_service_processing.class,
Z
zhourui 已提交
290
						Applications.joinQueryUri("task", task.getId(), STRING_PROCESSING), req, task.getJob())
NoSubject's avatar
NoSubject 已提交
291 292
				.getData(WoId.class);
		if (StringUtils.isBlank(resp.getId())) {
293
			throw new ExceptionProcessingTask(task.getId());
NoSubject's avatar
NoSubject 已提交
294 295 296
		} else {
			/* 获得已办id */
			return resp.getId();
R
roo00 已提交
297
		}
NoSubject's avatar
NoSubject 已提交
298
	}
R
roo00 已提交
299

Z
zhourui 已提交
300
	private void processingProcessingWork(String workProcessingType) throws Exception {
NoSubject's avatar
NoSubject 已提交
301 302
		ProcessingAttributes req = new ProcessingAttributes();
		req.setIgnoreEmpowerIdentityList(wi.getIgnoreEmpowerIdentityList());
Z
zhourui 已提交
303
		req.setType(workProcessingType);
NoSubject's avatar
NoSubject 已提交
304
		req.setSeries(this.series);
Z
zhourui 已提交
305 306
		req.setPerson(task.getPerson());
		req.setIdentity(task.getIdentity());
Z
zhourui 已提交
307
		WoId resp = ThisApplication.context().applications()
NoSubject's avatar
NoSubject 已提交
308
				.putQuery(effectivePerson.getDebugger(), x_processplatform_service_processing.class,
Z
zhourui 已提交
309
						Applications.joinQueryUri("work", task.getWork(), STRING_PROCESSING), req, task.getJob())
Z
zhourui 已提交
310
				.getData(WoId.class);
NoSubject's avatar
NoSubject 已提交
311 312
		if (StringUtils.isBlank(resp.getId())) {
			throw new ExceptionWorkProcessing(task.getId());
R
roo00 已提交
313
		}
NoSubject's avatar
NoSubject 已提交
314
	}
R
roo00 已提交
315

Z
zhourui 已提交
316
	private void processingRecord(String type) throws Exception {
NoSubject's avatar
NoSubject 已提交
317
		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
318
			Business business = new Business(emc);
NoSubject's avatar
NoSubject 已提交
319
			final List<String> nextTaskIdentities = new ArrayList<>();
Z
zhourui 已提交
320
			rec = new Record(workLog, task);
321
			// 获取在record中需要记录的task中身份所有的组织职务.
Z
zhourui 已提交
322
			rec.getProperties()
323
					.setUnitDutyList(business.organization().unitDuty().listNameWithIdentity(task.getIdentity()));
324
			// 记录处理身份的排序号
Z
zhourui 已提交
325
			rec.getProperties().setIdentityOrderNumber(
326 327
					business.organization().identity().getOrderNumber(task.getIdentity(), Integer.MAX_VALUE));
			// 记录处理身份所在组织的排序号
Z
zhourui 已提交
328
			rec.getProperties().setUnitOrderNumber(
329
					business.organization().unit().getOrderNumber(task.getUnit(), Integer.MAX_VALUE));
330
			// 记录处理身份所在组织层级组织排序号
Z
zhourui 已提交
331
			rec.getProperties()
332
					.setUnitLevelOrderNumber(business.organization().unit().getLevelOrderNumber(task.getUnit(), ""));
Z
zhourui 已提交
333 334 335 336
			// 校验workCompleted,如果存在,那么说明工作已经完成,标识状态为已经完成.
			WorkCompleted workCompleted = emc.firstEqual(WorkCompleted.class, WorkCompleted.job_FIELDNAME,
					task.getJob());
			if (null != workCompleted) {
Z
zhourui 已提交
337 338
				rec.setCompleted(true);
				rec.setWorkCompleted(workCompleted.getId());
Z
zhourui 已提交
339
			}
Z
zhourui 已提交
340 341 342
			rec.getProperties().setElapsed(
					Config.workTime().betweenMinutes(rec.getProperties().getStartTime(), rec.getRecordTime()));
			rec.setType(type);
NoSubject's avatar
NoSubject 已提交
343 344 345 346 347 348 349 350 351
			List<Task> list = emc.fetchEqualAndEqual(Task.class,
					ListTools.toList(Task.person_FIELDNAME, Task.identity_FIELDNAME, Task.unit_FIELDNAME,
							Task.job_FIELDNAME, Task.work_FIELDNAME, Task.activity_FIELDNAME,
							Task.activityAlias_FIELDNAME, Task.activityName_FIELDNAME, Task.activityToken_FIELDNAME,
							Task.activityType_FIELDNAME, Task.empowerFromIdentity_FIELDNAME),
					Task.job_FIELDNAME, task.getJob(), Task.series_FIELDNAME, this.series);
			list.stream().collect(Collectors.groupingBy(Task::getActivity, Collectors.toList())).entrySet().stream()
					.forEach(o -> {
						NextManual nextManual = new NextManual();
Z
zhourui 已提交
352 353 354 355 356
						nextManual.setActivity(o.getValue().get(0).getActivity());
						nextManual.setActivityAlias(o.getValue().get(0).getActivityAlias());
						nextManual.setActivityName(o.getValue().get(0).getActivityName());
						nextManual.setActivityToken(o.getValue().get(0).getActivityToken());
						nextManual.setActivityType(o.getValue().get(0).getActivityType());
NoSubject's avatar
NoSubject 已提交
357 358 359 360 361
						for (Task t : o.getValue()) {
							nextManual.getTaskIdentityList().add(t.getIdentity());
							this.newTasks.add(t);
							nextTaskIdentities.add(t.getIdentity());
						}
Z
zhourui 已提交
362
						rec.getProperties().getNextManualList().add(nextManual);
NoSubject's avatar
NoSubject 已提交
363
					});
Z
zhourui 已提交
364
			// 去重
Z
zhourui 已提交
365
			rec.getProperties().setNextManualTaskIdentityList(ListTools.trim(nextTaskIdentities, true, true));
NoSubject's avatar
NoSubject 已提交
366 367
			TaskCompleted taskCompleted = emc.find(taskCompletedId, TaskCompleted.class);
			if (null != taskCompleted) {
Z
zhourui 已提交
368
				// 处理完成后在重新写入待办信息
Z
zhourui 已提交
369 370 371
				rec.getProperties().setOpinion(taskCompleted.getOpinion());
				rec.getProperties().setRouteName(taskCompleted.getRouteName());
				rec.getProperties().setMediaOpinion(taskCompleted.getMediaOpinion());
NoSubject's avatar
NoSubject 已提交
372
			}
R
roo00 已提交
373
		}
Z
zhourui 已提交
374 375 376 377
		new Thread(() -> {
			try {
				WoId resp = ThisApplication.context().applications()
						.postQuery(effectivePerson.getDebugger(), x_processplatform_service_processing.class,
Z
zhourui 已提交
378
								Applications.joinQueryUri("record", "job", this.work.getJob()), rec, this.task.getJob())
Z
zhourui 已提交
379 380 381 382 383
						.getData(WoId.class);
				if (StringUtils.isBlank(resp.getId())) {
					throw new ExceptionWorkProcessing(this.work.getId());
				}
			} catch (Exception e) {
Z
zhourui 已提交
384
				LOGGER.error(e);
Z
zhourui 已提交
385
			}
Z
fix  
zhourui 已提交
386
		}, String.format("%s:record:%s", ActionProcessing.class.getName(), this.task.getId())).start();
R
roo00 已提交
387 388
	}

Z
zhourui 已提交
389
	private void processingUpdateTaskCompleted() throws Exception {
Z
zhourui 已提交
390 391 392

		TaskCompletedBuilder.updateNextTaskIdentity(taskCompletedId,
				rec.getProperties().getNextManualTaskIdentityList(), task.getJob());
R
roo00 已提交
393 394
	}

Z
zhourui 已提交
395
	private void processingUpdateTask() throws Exception {
Z
zhourui 已提交
396 397 398 399

		TaskBuilder.updatePrevTaskIdentity(newTasks.stream().map(Task::getId).collect(Collectors.toList()),
				taskCompleteds, task);

NoSubject's avatar
NoSubject 已提交
400 401 402 403 404 405
		List<Task> empowerTasks = new ArrayList<>();
		for (Task o : newTasks) {
			if (StringUtils.isNotEmpty(o.getEmpowerFromIdentity())
					&& (!StringUtils.equals(o.getEmpowerFromIdentity(), o.getIdentity()))) {
				empowerTasks.add(o);
			}
R
update  
roo00 已提交
406 407
		}

NoSubject's avatar
NoSubject 已提交
408 409 410 411
		if (!empowerTasks.isEmpty()) {
			try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
				Business business = new Business(emc);
				for (Task o : empowerTasks) {
412 413 414 415
					Record r = RecordBuilder.ofTaskEmpower(o, task.getEmpowerFromIdentity(),
							business.organization().person().getWithIdentity(task.getEmpowerFromIdentity()),
							business.organization().unit().getWithIdentity(task.getEmpowerFromIdentity()));
					RecordBuilder.processing(r);
NoSubject's avatar
NoSubject 已提交
416 417
				}
			}
R
update  
roo00 已提交
418
		}
NoSubject's avatar
NoSubject 已提交
419
	}
R
update  
roo00 已提交
420

Z
zhourui 已提交
421 422
	@Schema(name = "com.x.processplatform.assemble.surface.jaxrs.task.ActionProcessing.Wo")
	public static class Wo extends ActionProcessingWo {
R
roo00 已提交
423

NoSubject's avatar
NoSubject 已提交
424
		private static final long serialVersionUID = -1771383649634969945L;
Z
zhourui 已提交
425

NoSubject's avatar
NoSubject 已提交
426 427
		static WrapCopier<Record, Wo> copier = WrapCopierFactory.wo(Record.class, Wo.class, null,
				JpaObject.FieldsInvisible);
Z
zhourui 已提交
428

NoSubject's avatar
NoSubject 已提交
429
	}
R
roo00 已提交
430

Z
fix  
zhourui 已提交
431
	public static class RespProcessingSignal extends ActionProcessingSignalWo {
Z
zhourui 已提交
432

433 434
		private static final long serialVersionUID = -8806173185445267895L;

Z
zhourui 已提交
435 436
	}

Z
zhourui 已提交
437 438
	@Schema(name = "com.x.processplatform.assemble.surface.jaxrs.task.ActionProcessing.Wi")
	public static class Wi extends ActionProcessingWi {
439

Z
zhourui 已提交
440
		private static final long serialVersionUID = 76807621172437765L;
R
roo00 已提交
441 442 443 444

	}

}