提交 6677f5a4 编写于 作者: O o2null

Merge branch 'feature/prevTask' into 'develop'

增加上一处理人意见

See merge request o2oa/o2oa!972

(cherry picked from commit dc843541)

b5cd6998 增加上一处理人意见
上级 546c4fd9
package com.x.processplatform.assemble.surface.jaxrs.task;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
......@@ -9,7 +10,6 @@ import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.project.Applications;
import com.x.base.core.project.logger.Audit;
import com.x.base.core.project.x_processplatform_service_processing;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.bean.WrapCopier;
......@@ -23,6 +23,7 @@ import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.jaxrs.WoId;
import com.x.base.core.project.jaxrs.WrapBoolean;
import com.x.base.core.project.jaxrs.WrapStringList;
import com.x.base.core.project.logger.Audit;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.ListTools;
......@@ -34,6 +35,7 @@ import com.x.processplatform.core.entity.content.RecordProperties.NextManual;
import com.x.processplatform.core.entity.content.Task;
import com.x.processplatform.core.entity.content.TaskCompleted;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.core.entity.content.WorkLog;
import com.x.processplatform.core.entity.element.Manual;
import com.x.processplatform.core.entity.element.Route;
......@@ -41,6 +43,7 @@ import com.x.processplatform.core.express.ProcessingAttributes;
import com.x.processplatform.core.express.service.processing.jaxrs.task.WrapAppend;
import com.x.processplatform.core.express.service.processing.jaxrs.task.WrapProcessing;
import com.x.processplatform.core.express.service.processing.jaxrs.task.WrapUpdatePrevTaskIdentity;
import com.x.processplatform.core.express.service.processing.jaxrs.task.WrapUpdatePrevTaskIdentity.PrevTask;
import com.x.processplatform.core.express.service.processing.jaxrs.taskcompleted.WrapUpdateNextTaskIdentity;
import org.apache.commons.lang3.StringUtils;
......@@ -58,6 +61,7 @@ class ActionProcessing extends BaseAction {
private String taskCompletedId;
private String type;
private EffectivePerson effectivePerson;
private List<TaskCompleted> taskCompleteds = new ArrayList<>();
private List<Task> newTasks = new ArrayList<>();
private Record record;
......@@ -76,6 +80,9 @@ class ActionProcessing extends BaseAction {
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());
......@@ -207,6 +214,13 @@ class ActionProcessing extends BaseAction {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
final List<String> nextTaskIdentities = new ArrayList<>();
record = new Record(workLog, task);
// 校验workCompleted,如果存在,那么说明工作已经完成,标识状态为已经完成.
WorkCompleted workCompleted = emc.firstEqual(WorkCompleted.class, WorkCompleted.job_FIELDNAME,
task.getJob());
if (null != workCompleted) {
record.setCompleted(true);
record.setWorkCompleted(workCompleted.getId());
}
record.getProperties().setElapsed(
Config.workTime().betweenMinutes(record.getProperties().getStartTime(), record.getRecordTime()));
record.setType(type);
......@@ -218,13 +232,12 @@ class ActionProcessing extends BaseAction {
Task.job_FIELDNAME, task.getJob(), Task.series_FIELDNAME, this.series);
list.stream().collect(Collectors.groupingBy(Task::getActivity, Collectors.toList())).entrySet().stream()
.forEach(o -> {
Task task = o.getValue().get(0);
NextManual nextManual = new NextManual();
nextManual.setActivity(task.getActivity());
nextManual.setActivityAlias(task.getActivityAlias());
nextManual.setActivityName(task.getActivityName());
nextManual.setActivityToken(task.getActivityToken());
nextManual.setActivityType(task.getActivityType());
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());
for (Task t : o.getValue()) {
nextManual.getTaskIdentityList().add(t.getIdentity());
this.newTasks.add(t);
......@@ -232,11 +245,11 @@ class ActionProcessing extends BaseAction {
}
record.getProperties().getNextManualList().add(nextManual);
});
/* 去重 */
// 去重
record.getProperties().setNextManualTaskIdentityList(ListTools.trim(nextTaskIdentities, true, true));
TaskCompleted taskCompleted = emc.find(taskCompletedId, TaskCompleted.class);
if (null != taskCompleted) {
/* 处理完成后在重新写入待办信息 */
// 处理完成后在重新写入待办信息
record.getProperties().setOpinion(taskCompleted.getOpinion());
record.getProperties().setRouteName(taskCompleted.getRouteName());
record.getProperties().setMediaOpinion(taskCompleted.getMediaOpinion());
......@@ -252,7 +265,7 @@ class ActionProcessing extends BaseAction {
}
private void processing_updateTaskCompleted() throws Exception {
/* 记录下一处理人信息 */
// 记录下一处理人信息
WrapUpdateNextTaskIdentity req = new WrapUpdateNextTaskIdentity();
req.getTaskCompletedList().add(taskCompletedId);
req.setNextTaskIdentityList(record.getProperties().getNextManualTaskIdentityList());
......@@ -263,11 +276,35 @@ class ActionProcessing extends BaseAction {
}
private void processing_updateTask() throws Exception {
/* 记录上一处理人信息 */
// 记录上一处理人信息
if (ListTools.isNotEmpty(newTasks)) {
WrapUpdatePrevTaskIdentity req = new WrapUpdatePrevTaskIdentity();
req.setTaskList(ListTools.extractProperty(newTasks, JpaObject.id_FIELDNAME, String.class, true, true));
req.getPrevTaskIdentityList().add(task.getIdentity());
this.taskCompleteds.stream().forEach(o -> {
PrevTask prevTask = new PrevTask();
prevTask.setCompletedTime(o.getCompletedTime());
prevTask.setStartTime(o.getStartTime());
prevTask.setOpinion(o.getOpinion());
prevTask.setPerson(o.getPerson());
prevTask.setIdentity(o.getIdentity());
prevTask.setUnit(o.getUnit());
prevTask.setRouteName(o.getRouteName());
req.getPrevTaskIdentityList().add(prevTask.getIdentity());
req.getPrevTaskList().add(prevTask);
});
PrevTask prevTask = new PrevTask();
prevTask.setCompletedTime(new Date());
prevTask.setStartTime(task.getStartTime());
prevTask.setOpinion(task.getOpinion());
prevTask.setPerson(task.getPerson());
prevTask.setIdentity(task.getIdentity());
prevTask.setUnit(task.getUnit());
prevTask.setRouteName(task.getRouteName());
req.getPrevTaskIdentityList().add(prevTask.getIdentity());
req.getPrevTaskList().add(prevTask);
req.setPrevTask(prevTask);
// 去重
req.setPrevTaskIdentityList(ListTools.trim(req.getPrevTaskIdentityList(), true, true));
ThisApplication.context().applications()
.putQuery(effectivePerson.getDebugger(), x_processplatform_service_processing.class,
Applications.joinQueryUri("task", "prev", "task", "identity"), req, task.getJob())
......
......@@ -28,6 +28,7 @@ import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.tools.DateTools;
import com.x.base.core.project.tools.StringTools;
import com.x.processplatform.core.entity.PersistenceProperties;
import com.x.processplatform.core.entity.content.TaskCompletedProperties.PrevTask;
import com.x.processplatform.core.entity.element.ActivityType;
import com.x.processplatform.core.entity.element.Route;
......@@ -212,14 +213,13 @@ public class TaskCompleted extends SliceJpaObject implements ProjectionInterface
this.opinion = "";
this.task = "";
this.duration = 0L;
// this.manualMode = manual.getManualMode();
this.processingType = PROCESSINGTYPE_SAMETARGET;
this.retractTime = null;
this.latest = true;
this.copyProjectionFields(work);
}
/* 用于相同处理人流转时使用的创建TaskCompleted */
// 用于相同处理人流转时使用的创建TaskCompleted
public TaskCompleted(Work work) {
this();
Date now = new Date();
......@@ -252,7 +252,6 @@ public class TaskCompleted extends SliceJpaObject implements ProjectionInterface
this.opinion = "";
this.task = "";
this.duration = 0L;
// this.processingType = ProcessingType.sameTarget;
this.retractTime = null;
this.latest = true;
this.copyProjectionFields(work);
......@@ -290,6 +289,32 @@ public class TaskCompleted extends SliceJpaObject implements ProjectionInterface
this.mediaOpinion = task.getMediaOpinion();
this.task = task.getId();
this.getProperties().setPrevTaskIdentityList(task.getProperties().getPrevTaskIdentityList());
if (null != task.getProperties().getPrevTask()) {
PrevTask prevTask = new PrevTask();
prevTask.setCompletedTime(task.getProperties().getPrevTask().getCompletedTime());
prevTask.setStartTime(task.getProperties().getPrevTask().getStartTime());
prevTask.setOpinion(task.getProperties().getPrevTask().getOpinion());
prevTask.setPerson(task.getProperties().getPrevTask().getPerson());
prevTask.setIdentity(task.getProperties().getPrevTask().getIdentity());
prevTask.setUnit(task.getProperties().getPrevTask().getUnit());
prevTask.setRouteName(task.getProperties().getPrevTask().getRouteName());
this.getProperties().setPrevTask(prevTask);
}
if (null != task.getProperties().getPrevTaskList()) {
for (com.x.processplatform.core.entity.content.TaskProperties.PrevTask p : task.getProperties()
.getPrevTaskList()) {
PrevTask prevTask = new PrevTask();
prevTask.setCompletedTime(p.getCompletedTime());
prevTask.setStartTime(p.getStartTime());
prevTask.setOpinion(p.getOpinion());
prevTask.setPerson(p.getPerson());
prevTask.setIdentity(p.getIdentity());
prevTask.setUnit(p.getUnit());
prevTask.setRouteName(p.getRouteName());
this.getProperties().getPrevTaskList().add(prevTask);
}
}
this.getProperties().setPrevTaskIdentityList(task.getProperties().getPrevTaskIdentityList());
if ((null != this.expireTime) && (expireTime.before(completedTime))) {
this.expired = true;
} else {
......
package com.x.processplatform.core.entity.content;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.x.base.core.entity.JsonProperties;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.gson.GsonPropertyObject;
public class TaskCompletedProperties extends JsonProperties {
......@@ -14,12 +16,25 @@ public class TaskCompletedProperties extends JsonProperties {
@FieldDescribe("后续处理人")
private List<String> nextTaskIdentityList = new ArrayList<>();
@FieldDescribe("上一人工环节待办对象列表")
private List<PrevTask> prevTaskList;
@FieldDescribe("上一人工环节最近待办对象")
private PrevTask prevTask;
@FieldDescribe("标题")
private String title;
@FieldDescribe("意见")
private String opinion;
public List<PrevTask> getPrevTaskList() {
if (null == this.prevTaskList) {
this.prevTaskList = new ArrayList<>();
}
return prevTaskList;
}
public String getTitle() {
return title;
}
......@@ -58,4 +73,84 @@ public class TaskCompletedProperties extends JsonProperties {
this.opinion = opinion;
}
public static class PrevTask extends GsonPropertyObject {
private String routeName;
private String unit;
private String identity;
private String person;
private String opinion;
private Date startTime;
private Date completedTime;
public String getIdentity() {
return identity;
}
public void setIdentity(String identity) {
this.identity = identity;
}
public String getOpinion() {
return opinion;
}
public void setOpinion(String opinion) {
this.opinion = opinion;
}
public String getPerson() {
return person;
}
public void setPerson(String person) {
this.person = person;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getCompletedTime() {
return completedTime;
}
public void setCompletedTime(Date completedTime) {
this.completedTime = completedTime;
}
public String getRouteName() {
return routeName;
}
public void setRouteName(String routeName) {
this.routeName = routeName;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
}
public void setPrevTaskList(List<PrevTask> prevTaskList) {
this.prevTaskList = prevTaskList;
}
public PrevTask getPrevTask() {
return prevTask;
}
public void setPrevTask(PrevTask prevTask) {
this.prevTask = prevTask;
}
}
package com.x.processplatform.core.entity.content;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.x.base.core.entity.JsonProperties;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.gson.GsonPropertyObject;
public class TaskProperties extends JsonProperties {
@FieldDescribe("上一人工环节处理人")
private List<String> prevTaskIdentityList;
@FieldDescribe("标题")
......@@ -16,13 +19,26 @@ public class TaskProperties extends JsonProperties {
@FieldDescribe("意见")
private String opinion;
@FieldDescribe("上一人工环节待办对象列表")
private List<PrevTask> prevTaskList;
@FieldDescribe("上一人工环节最近待办对象")
private PrevTask prevTask;
public List<String> getPrevTaskIdentityList() {
if (null == prevTaskIdentityList) {
this.prevTaskIdentityList = new ArrayList<String>();
this.prevTaskIdentityList = new ArrayList<>();
}
return prevTaskIdentityList;
}
public List<PrevTask> getPrevTaskList() {
if (null == prevTaskList) {
this.prevTaskList = new ArrayList<>();
}
return prevTaskList;
}
public void setPrevTaskIdentityList(List<String> prevTaskIdentityList) {
this.prevTaskIdentityList = prevTaskIdentityList;
}
......@@ -43,4 +59,84 @@ public class TaskProperties extends JsonProperties {
this.opinion = opinion;
}
public static class PrevTask extends GsonPropertyObject {
private String routeName;
private String unit;
private String identity;
private String person;
private String opinion;
private Date startTime;
private Date completedTime;
public String getIdentity() {
return identity;
}
public void setIdentity(String identity) {
this.identity = identity;
}
public String getOpinion() {
return opinion;
}
public void setOpinion(String opinion) {
this.opinion = opinion;
}
public String getPerson() {
return person;
}
public void setPerson(String person) {
this.person = person;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getCompletedTime() {
return completedTime;
}
public void setCompletedTime(Date completedTime) {
this.completedTime = completedTime;
}
public String getRouteName() {
return routeName;
}
public void setRouteName(String routeName) {
this.routeName = routeName;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
}
public void setPrevTaskList(List<PrevTask> prevTaskList) {
this.prevTaskList = prevTaskList;
}
public PrevTask getPrevTask() {
return prevTask;
}
public void setPrevTask(PrevTask prevTask) {
this.prevTask = prevTask;
}
}
\ No newline at end of file
package com.x.processplatform.core.express.service.processing.jaxrs.task;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.gson.GsonPropertyObject;
public class WrapUpdatePrevTaskIdentity extends GsonPropertyObject {
@FieldDescribe("上一人工环节处理人列表")
private List<String> prevTaskIdentityList = new ArrayList<>();
@FieldDescribe("要更新的待办对象")
private List<String> taskList;
@FieldDescribe("上一人工环节处理的待办列表")
private List<PrevTask> prevTaskList;
@FieldDescribe("上一人工环节处理的最近一个待办")
private PrevTask prevTask;
public List<String> getPrevTaskIdentityList() {
if (null == this.prevTaskIdentityList) {
this.prevTaskIdentityList = new ArrayList<String>();
......@@ -18,8 +28,11 @@ public class WrapUpdatePrevTaskIdentity extends GsonPropertyObject {
return prevTaskIdentityList;
}
public void setPrevTaskIdentityList(List<String> prevTaskIdentityList) {
this.prevTaskIdentityList = prevTaskIdentityList;
public List<PrevTask> getPrevTaskList() {
if (null == this.prevTaskList) {
this.prevTaskList = new ArrayList<PrevTask>();
}
return prevTaskList;
}
public List<String> getTaskList() {
......@@ -33,4 +46,88 @@ public class WrapUpdatePrevTaskIdentity extends GsonPropertyObject {
this.taskList = taskList;
}
public void setPrevTaskIdentityList(List<String> prevTaskIdentityList) {
this.prevTaskIdentityList = prevTaskIdentityList;
}
public void setPrevTaskList(List<PrevTask> prevTaskList) {
this.prevTaskList = prevTaskList;
}
public PrevTask getPrevTask() {
return prevTask;
}
public void setPrevTask(PrevTask prevTask) {
this.prevTask = prevTask;
}
public static class PrevTask extends GsonPropertyObject {
private String identity;
private String person;
private String unit;
private String routeName;
private String opinion;
private Date startTime;
private Date completedTime;
public String getIdentity() {
return identity;
}
public void setIdentity(String identity) {
this.identity = identity;
}
public String getOpinion() {
return opinion;
}
public void setOpinion(String opinion) {
this.opinion = opinion;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getCompletedTime() {
return completedTime;
}
public void setCompletedTime(Date completedTime) {
this.completedTime = completedTime;
}
public String getPerson() {
return person;
}
public void setPerson(String person) {
this.person = person;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public String getRouteName() {
return routeName;
}
public void setRouteName(String routeName) {
this.routeName = routeName;
}
}
}
\ No newline at end of file
......@@ -17,6 +17,7 @@ import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.ListTools;
import com.x.processplatform.core.entity.content.Task;
import com.x.processplatform.core.entity.content.TaskProperties.PrevTask;
import com.x.processplatform.core.express.service.processing.jaxrs.task.WrapUpdatePrevTaskIdentity;
import org.apache.commons.collections4.ListUtils;
......@@ -42,25 +43,45 @@ class ActionUpdatePrevTaskIdentity extends BaseAction {
}
}
Callable<ActionResult<Wo>> callable = new Callable<ActionResult<Wo>>() {
public ActionResult<Wo> call() throws Exception {
Wo wo = new Wo();
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Task> os = emc.listIn(Task.class, JpaObject.id_FIELDNAME, bag.wi.getTaskList());
emc.beginTransaction(Task.class);
for (Task o : os) {
o.getProperties().setPrevTaskIdentityList(
ListTools.trim(ListUtils.sum(o.getProperties().getPrevTaskIdentityList(),
bag.wi.getPrevTaskIdentityList()), true, true));
emc.check(o, CheckPersistType.all);
wo.getValueList().add(o.getId());
Callable<ActionResult<Wo>> callable = () -> {
Wo wo = new Wo();
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Task> os = emc.listIn(Task.class, JpaObject.id_FIELDNAME, bag.wi.getTaskList());
emc.beginTransaction(Task.class);
for (Task o : os) {
o.getProperties().setPrevTaskIdentityList(
ListTools.trim(ListUtils.sum(o.getProperties().getPrevTaskIdentityList(),
bag.wi.getPrevTaskIdentityList()), true, true));
bag.wi.getPrevTaskList().stream().forEach(p -> {
PrevTask prevTask = new PrevTask();
prevTask.setCompletedTime(p.getCompletedTime());
prevTask.setStartTime(p.getStartTime());
prevTask.setPerson(p.getPerson());
prevTask.setOpinion(p.getOpinion());
prevTask.setIdentity(p.getIdentity());
prevTask.setUnit(p.getUnit());
prevTask.setRouteName(p.getRouteName());
o.getProperties().getPrevTaskList().add(prevTask);
});
if (null != bag.wi.getPrevTask()) {
PrevTask prevTask = new PrevTask();
prevTask.setCompletedTime(bag.wi.getPrevTask().getCompletedTime());
prevTask.setStartTime(bag.wi.getPrevTask().getStartTime());
prevTask.setPerson(bag.wi.getPrevTask().getPerson());
prevTask.setOpinion(bag.wi.getPrevTask().getOpinion());
prevTask.setIdentity(bag.wi.getPrevTask().getIdentity());
prevTask.setUnit(bag.wi.getPrevTask().getUnit());
prevTask.setRouteName(bag.wi.getPrevTask().getRouteName());
o.getProperties().setPrevTask(prevTask);
}
emc.commit();
emc.check(o, CheckPersistType.all);
wo.getValueList().add(o.getId());
}
ActionResult<Wo> result = new ActionResult<>();
result.setData(wo);
return result;
emc.commit();
}
ActionResult<Wo> result = new ActionResult<>();
result.setData(wo);
return result;
};
return ProcessPlatformExecutorFactory.get(bag.job).submit(callable).get();
......
......@@ -15,8 +15,6 @@ import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.project.Applications;
import com.x.base.core.project.x_processplatform_service_processing;
import com.x.base.core.project.annotation.ActionLogger;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.bean.WrapCopier;
......@@ -132,7 +130,7 @@ class ActionAssignCreate extends BaseAction {
Processing p = new Processing(processingAttributes);
p.processing(work.getId());
}
wo.setId(work.getId());
result.setData(wo);
return result;
......@@ -250,8 +248,7 @@ class ActionAssignCreate extends BaseAction {
p = cb.or(p, cb.equal(root.get(Process_.alias), processFlag));
p = cb.or(p, cb.equal(root.get(Process_.id), processFlag));
p = cb.and(p, root.get(Process_.application).in(applicationIds));
p = cb.and(p, cb.or(cb.isTrue(root.get(Process_.editionEnable)),
cb.isNull(root.get(Process_.editionEnable))));
p = cb.and(p, cb.or(cb.isTrue(root.get(Process_.editionEnable)), cb.isNull(root.get(Process_.editionEnable))));
cq.select(root).where(p).orderBy(cb.desc(root.get(Process_.editionNumber)));
List<Process> list = em.createQuery(cq).getResultList();
if (list.isEmpty()) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册