Просмотр исходного кода

增加根据job查询record接口

o2sword 5 лет назад
Родитель
Сommit
5360653cf3

+ 91 - 0
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<List<Wo>> execute(EffectivePerson effectivePerson, String job) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ActionResult<List<Wo>> result = new ActionResult<>();
+
+			Business business = new Business(emc);
+
+			String workOrWorkCompleted = "";
+			List<String> 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<Wo> 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<Record, Wo> copier = WrapCopierFactory.wo(Record.class, Wo.class,
+				JpaObject.singularAttributeField(Record.class, true, false), JpaObject.FieldsInvisible);
+
+	}
+
+}

+ 91 - 0
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<List<Wo>> execute(EffectivePerson effectivePerson, String job, Integer page,
+			Integer size) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ActionResult<List<Wo>> result = new ActionResult<>();
+
+			Business business = new Business(emc);
+
+			String workOrWorkCompleted = "";
+			List<String> 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<Wo> 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<Record, Wo> copier = WrapCopierFactory.wo(Record.class, Wo.class,
+				JpaObject.singularAttributeField(Record.class, true, false), JpaObject.FieldsInvisible);
+
+	}
+
+}

+ 41 - 0
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<List<ActionListWithJob.Wo>> 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<List<ActionListWithJobPaging.Wo>> 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));
+	}
+
 }