From 8795af90a51f9872997921e0f0ace13d966b8216 Mon Sep 17 00:00:00 2001 From: o2sword <171715986@qq.com> Date: Thu, 4 Jun 2020 17:16:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A0=B9=E6=8D=AEjob?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2record=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jaxrs/record/ActionListWithJob.java | 91 +++++++++++++++++++ .../jaxrs/record/ActionListWithJobPaging.java | 91 +++++++++++++++++++ .../surface/jaxrs/record/RecordAction.java | 41 +++++++++ 3 files changed, 223 insertions(+) create mode 100644 o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionListWithJob.java create mode 100644 o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionListWithJobPaging.java diff --git a/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionListWithJob.java b/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionListWithJob.java new file mode 100644 index 0000000000..2002802042 --- /dev/null +++ b/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionListWithJob.java @@ -0,0 +1,91 @@ +package com.x.processplatform.assemble.surface.jaxrs.record; + +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.bean.WrapCopier; +import com.x.base.core.project.bean.WrapCopierFactory; +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; +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.assemble.surface.Business; +import com.x.processplatform.core.entity.content.Record; +import com.x.processplatform.core.entity.content.Task; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +class ActionListWithJob extends BaseAction { + + private static Logger logger = LoggerFactory.getLogger(ActionListWithJob.class); + + ActionResult> execute(EffectivePerson effectivePerson, String job) throws Exception { + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + ActionResult> result = new ActionResult<>(); + + Business business = new Business(emc); + + String workOrWorkCompleted = ""; + List works = business.work().listWithJob(job); + if(ListTools.isNotEmpty(works)){ + workOrWorkCompleted = works.get(0); + }else{ + works = business.workCompleted().listWithJob(job); + if(ListTools.isNotEmpty(works)){ + workOrWorkCompleted = works.get(0); + }else{ + throw new ExceptionEntityNotExist(job); + } + } + + if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted, + new ExceptionEntityNotExist(workOrWorkCompleted))) { + throw new ExceptionAccessDenied(effectivePerson); + } + + List wos = emc.fetchEqual(Record.class, Wo.copier, Record.job_FIELDNAME, job); + + wos = wos.stream().sorted(Comparator.comparing(Wo::getOrder)).collect(Collectors.toList()); + + for (Task task : emc.listEqual(Task.class, Task.job_FIELDNAME, job).stream() + .sorted(Comparator.comparing(Task::getStartTime)).collect(Collectors.toList())) { + Record record = this.taskToRecord(task); + wos.add(Wo.copier.copy(record)); + } + + result.setData(wos); + return result; + } + + } + + private Record taskToRecord(Task task) { + Record o = new Record(); + o.setType(Record.TYPE_CURRENTTASK); + o.setFromActivity(task.getActivity()); + o.setFromActivityAlias(task.getActivityAlias()); + o.setFromActivityName(task.getActivityName()); + o.setFromActivityToken(task.getActivityToken()); + o.setFromActivityType(task.getActivityType()); + o.setPerson(task.getPerson()); + o.setIdentity(o.getIdentity()); + o.setUnit(task.getUnit()); + o.getProperties().setStartTime(task.getStartTime()); + o.getProperties().setEmpowerFromIdentity(task.getEmpowerFromIdentity()); + return o; + } + + public static class Wo extends Record { + + private static final long serialVersionUID = -7666329770246726197L; + + static WrapCopier copier = WrapCopierFactory.wo(Record.class, Wo.class, + JpaObject.singularAttributeField(Record.class, true, false), JpaObject.FieldsInvisible); + + } + +} \ No newline at end of file diff --git a/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionListWithJobPaging.java b/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionListWithJobPaging.java new file mode 100644 index 0000000000..c11b5fd9a7 --- /dev/null +++ b/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionListWithJobPaging.java @@ -0,0 +1,91 @@ +package com.x.processplatform.assemble.surface.jaxrs.record; + +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.bean.WrapCopier; +import com.x.base.core.project.bean.WrapCopierFactory; +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; +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.assemble.surface.Business; +import com.x.processplatform.core.entity.content.Record; +import com.x.processplatform.core.entity.content.Task; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +class ActionListWithJobPaging extends BaseAction { + + private static Logger logger = LoggerFactory.getLogger(ActionListWithJobPaging.class); + + ActionResult> execute(EffectivePerson effectivePerson, String job, Integer page, + Integer size) throws Exception { + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + ActionResult> result = new ActionResult<>(); + + Business business = new Business(emc); + + String workOrWorkCompleted = ""; + List works = business.work().listWithJob(job); + if(ListTools.isNotEmpty(works)){ + workOrWorkCompleted = works.get(0); + }else{ + works = business.workCompleted().listWithJob(job); + if(ListTools.isNotEmpty(works)){ + workOrWorkCompleted = works.get(0); + }else{ + throw new ExceptionEntityNotExist(job); + } + } + + if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted, + new ExceptionEntityNotExist(workOrWorkCompleted))) { + throw new ExceptionAccessDenied(effectivePerson); + } + + List wos = emc.fetchEqualAscPaging(Record.class, Wo.copier, Record.job_FIELDNAME, job, page, size, + Record.order_FIELDNAME); + + for (Task task : emc.listEqual(Task.class, Task.job_FIELDNAME, job).stream() + .sorted(Comparator.comparing(Task::getStartTime)).collect(Collectors.toList())) { + Record record = this.taskToRecord(task); + wos.add(Wo.copier.copy(record)); + } + + result.setData(wos); + return result; + } + + } + + private Record taskToRecord(Task task) { + Record o = new Record(); + o.setType(Record.TYPE_CURRENTTASK); + o.setFromActivity(task.getActivity()); + o.setFromActivityAlias(task.getActivityAlias()); + o.setFromActivityName(task.getActivityName()); + o.setFromActivityToken(task.getActivityToken()); + o.setFromActivityType(task.getActivityType()); + o.setPerson(task.getPerson()); + o.setIdentity(o.getIdentity()); + o.setUnit(task.getUnit()); + o.getProperties().setStartTime(task.getStartTime()); + o.getProperties().setEmpowerFromIdentity(task.getEmpowerFromIdentity()); + return o; + } + + public static class Wo extends Record { + + private static final long serialVersionUID = -7666329770246726197L; + + static WrapCopier copier = WrapCopierFactory.wo(Record.class, Wo.class, + JpaObject.singularAttributeField(Record.class, true, false), JpaObject.FieldsInvisible); + + } + +} \ No newline at end of file diff --git a/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/RecordAction.java b/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/RecordAction.java index 94f67cd546..a3d1b7c316 100644 --- a/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/RecordAction.java +++ b/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/RecordAction.java @@ -71,4 +71,45 @@ public class RecordAction extends StandardJaxrsAction { asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); } + @JaxrsMethodDescribe(value = "根据(已完成)工作的job获取记录.", action = ActionListWithJob.class) + @GET + @Path("list/job/{job}") + @Produces(HttpMediaType.APPLICATION_JSON_UTF_8) + @Consumes(MediaType.APPLICATION_JSON) + public void listWithJob(@Suspended final AsyncResponse asyncResponse, + @Context HttpServletRequest request, + @JaxrsParameterDescribe("工作的job") @PathParam("job") String job) { + ActionResult> result = new ActionResult<>(); + EffectivePerson effectivePerson = this.effectivePerson(request); + try { + result = new ActionListWithJob().execute(effectivePerson, job); + } catch (Exception e) { + logger.error(e, effectivePerson, request, null); + result.error(e); + } + asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); + } + + @JaxrsMethodDescribe(value = "根据(已完成)工作的job获取记录分页.", action = ActionListWithJobPaging.class) + @GET + @Path("list/job/{job}/paging/{page}/size/{size}") + @Produces(HttpMediaType.APPLICATION_JSON_UTF_8) + @Consumes(MediaType.APPLICATION_JSON) + public void listWithJobPaging(@Suspended final AsyncResponse asyncResponse, + @Context HttpServletRequest request, + @JaxrsParameterDescribe("工作的job") @PathParam("job") String job, + @JaxrsParameterDescribe("分页") @PathParam("page") Integer page, + @JaxrsParameterDescribe("数量") @PathParam("size") Integer size) { + ActionResult> result = new ActionResult<>(); + EffectivePerson effectivePerson = this.effectivePerson(request); + try { + result = new ActionListWithJobPaging().execute(effectivePerson, job, page, + size); + } catch (Exception e) { + logger.error(e, effectivePerson, request, null); + result.error(e); + } + asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); + } + } \ No newline at end of file -- GitLab