提交 3363ac33 编写于 作者: O o2null

Merge branch 'fix/mock' into 'wrdp'

增加WoFastETag

See merge request o2oa/o2oa!1930
package com.x.base.core.project.jaxrs; package com.x.base.core.project.jaxrs;
import java.net.URI; import java.net.URI;
import java.util.Date;
import java.util.Objects; import java.util.Objects;
import java.util.zip.CRC32; import java.util.zip.CRC32;
...@@ -81,7 +80,7 @@ public class ResponseFactory { ...@@ -81,7 +80,7 @@ public class ResponseFactory {
} }
} else { } else {
if ((null != result.getData()) && (result.getData() instanceof WoFile)) { if ((null != result.getData()) && (result.getData() instanceof WoFile)) {
/* 附件,二进制流文件 */ // 附件,二进制流文件
WoFile wo = (WoFile) result.getData(); WoFile wo = (WoFile) result.getData();
EntityTag tag = new EntityTag(etagWoFile(wo)); EntityTag tag = new EntityTag(etagWoFile(wo));
if (notModified(request, tag)) { if (notModified(request, tag)) {
...@@ -91,14 +90,12 @@ public class ResponseFactory { ...@@ -91,14 +90,12 @@ public class ResponseFactory {
.header(Content_Type, wo.getContentType()).header(Content_Length, wo.getBytes().length) .header(Content_Type, wo.getContentType()).header(Content_Length, wo.getBytes().length)
.header(Accept_Ranges, "bytes").tag(tag).build(); .header(Accept_Ranges, "bytes").tag(tag).build();
} else if ((null != result.getData()) && (result.getData() instanceof WoText)) { } else if ((null != result.getData()) && (result.getData() instanceof WoText)) {
/* 纯文本text */ // 纯文本text
WoText wo = (WoText) result.getData(); WoText wo = (WoText) result.getData();
EntityTag tag = new EntityTag(etagWoText(wo)); EntityTag tag = new EntityTag(etagWoText(wo));
if (notModified(request, tag)) { if (notModified(request, tag)) {
return Response.notModified().tag(tag).build(); return Response.notModified().tag(tag).build();
} }
// return
// Response.ok(wo.getText()).type(HttpMediaType.TEXT_PLAIN_UTF_8).tag(tag).build();
return Response.ok(wo.getText()).type(wo.getContentType()).tag(tag).build(); return Response.ok(wo.getText()).type(wo.getContentType()).tag(tag).build();
} else if ((null != result.getData()) && (result.getData() instanceof WoContentType)) { } else if ((null != result.getData()) && (result.getData() instanceof WoContentType)) {
WoContentType wo = (WoContentType) result.getData(); WoContentType wo = (WoContentType) result.getData();
...@@ -108,10 +105,10 @@ public class ResponseFactory { ...@@ -108,10 +105,10 @@ public class ResponseFactory {
} }
return Response.ok(wo.getBody()).type(wo.getContentType()).tag(tag).build(); return Response.ok(wo.getBody()).type(wo.getContentType()).tag(tag).build();
} else if ((null != result.getData()) && (result.getData() instanceof WoCallback)) { } else if ((null != result.getData()) && (result.getData() instanceof WoCallback)) {
/* jsonp callback */ // jsonp callback
return Response.ok(callback((WoCallback) result.getData())).build(); return Response.ok(callback((WoCallback) result.getData())).build();
} else if ((null != result.getData()) && (result.getData() instanceof WoSeeOther)) { } else if ((null != result.getData()) && (result.getData() instanceof WoSeeOther)) {
/* 303 */ // 303
WoSeeOther wo = (WoSeeOther) result.getData(); WoSeeOther wo = (WoSeeOther) result.getData();
try { try {
return Response.seeOther(new URI(wo.getUrl())).build(); return Response.seeOther(new URI(wo.getUrl())).build();
...@@ -119,7 +116,7 @@ public class ResponseFactory { ...@@ -119,7 +116,7 @@ public class ResponseFactory {
return Response.serverError().entity(Objects.toString(wo.getUrl(), "")).build(); return Response.serverError().entity(Objects.toString(wo.getUrl(), "")).build();
} }
} else if ((null != result.getData()) && (result.getData() instanceof WoTemporaryRedirect)) { } else if ((null != result.getData()) && (result.getData() instanceof WoTemporaryRedirect)) {
/* 304 */ // 304
WoTemporaryRedirect wo = (WoTemporaryRedirect) result.getData(); WoTemporaryRedirect wo = (WoTemporaryRedirect) result.getData();
try { try {
return Response.temporaryRedirect(new URI(wo.getUrl())).build(); return Response.temporaryRedirect(new URI(wo.getUrl())).build();
...@@ -127,7 +124,7 @@ public class ResponseFactory { ...@@ -127,7 +124,7 @@ public class ResponseFactory {
return Response.serverError().entity(Objects.toString(wo.getUrl(), "")).build(); return Response.serverError().entity(Objects.toString(wo.getUrl(), "")).build();
} }
} else { } else {
/* default */ // default
EntityTag tag = new EntityTag(etagDefault(result.getData())); EntityTag tag = new EntityTag(etagDefault(result.getData()));
if (notModified(request, tag)) { if (notModified(request, tag)) {
return Response.notModified().tag(tag).build(); return Response.notModified().tag(tag).build();
...@@ -149,7 +146,11 @@ public class ResponseFactory { ...@@ -149,7 +146,11 @@ public class ResponseFactory {
private static String etagWoFile(WoFile wo) { private static String etagWoFile(WoFile wo) {
CRC32 crc = new CRC32(); CRC32 crc = new CRC32();
crc.update(wo.getBytes()); if (StringUtils.isNotEmpty(wo.getFastETag())) {
crc.update(wo.getFastETag().getBytes(DefaultCharset.charset_utf_8));
} else {
crc.update(wo.getBytes());
}
return crc.getValue() + ""; return crc.getValue() + "";
} }
...@@ -161,13 +162,26 @@ public class ResponseFactory { ...@@ -161,13 +162,26 @@ public class ResponseFactory {
private static String etagWoText(WoText wo) { private static String etagWoText(WoText wo) {
CRC32 crc = new CRC32(); CRC32 crc = new CRC32();
crc.update(wo.getText().getBytes(DefaultCharset.charset_utf_8)); if (StringUtils.isNotEmpty(wo.getFastETag())) {
crc.update(wo.getFastETag().getBytes(DefaultCharset.charset_utf_8));
} else {
crc.update(wo.getText().getBytes(DefaultCharset.charset_utf_8));
}
return crc.getValue() + ""; return crc.getValue() + "";
} }
private static String etagDefault(Object o) { private static String etagDefault(Object o) {
CRC32 crc = new CRC32(); CRC32 crc = new CRC32();
crc.update(XGsonBuilder.toJson(o).getBytes(DefaultCharset.charset_utf_8)); if (o instanceof WoFastETag) {
WoFastETag fast = ((WoFastETag) o);
if (StringUtils.isNotEmpty(fast.getFastETag())) {
crc.update(fast.getFastETag().getBytes(DefaultCharset.charset_utf_8));
} else {
crc.update(XGsonBuilder.toJson(o).getBytes(DefaultCharset.charset_utf_8));
}
} else {
crc.update(XGsonBuilder.toJson(o).getBytes(DefaultCharset.charset_utf_8));
}
return crc.getValue() + ""; return crc.getValue() + "";
} }
......
package com.x.base.core.project.jaxrs;
import com.x.base.core.project.gson.GsonPropertyObject;
public class WoFastETag extends GsonPropertyObject {
private String fastETag;
public String getFastETag() {
return fastETag;
}
public void setFastETag(String fastETag) {
this.fastETag = fastETag;
}
}
package com.x.base.core.project.jaxrs; package com.x.base.core.project.jaxrs;
import com.x.base.core.project.annotation.FieldDescribe; import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.gson.GsonPropertyObject;
public abstract class WoFile extends GsonPropertyObject { public abstract class WoFile extends WoFastETag {
private static final long serialVersionUID = -4566232046358204025L; private static final long serialVersionUID = -4566232046358204025L;
@FieldDescribe("说明") @FieldDescribe("说明")
......
...@@ -6,7 +6,7 @@ import com.x.base.core.project.annotation.FieldDescribe; ...@@ -6,7 +6,7 @@ import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.gson.GsonPropertyObject; import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.http.HttpMediaType; import com.x.base.core.project.http.HttpMediaType;
public class WoText extends GsonPropertyObject { public class WoText extends WoFastETag {
public WoText() { public WoText() {
} }
......
...@@ -2,6 +2,7 @@ package com.x.processplatform.assemble.surface.jaxrs.control; ...@@ -2,6 +2,7 @@ package com.x.processplatform.assemble.surface.jaxrs.control;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.CompletableFuture;
import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.BooleanUtils;
...@@ -50,23 +51,57 @@ class ActionGetWorkOrWorkCompleted extends BaseAction { ...@@ -50,23 +51,57 @@ class ActionGetWorkOrWorkCompleted extends BaseAction {
Business business = new Business(emc); Business business = new Business(emc);
if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted, CompletableFuture<Wo> _wo = CompletableFuture.supplyAsync(() -> {
new ExceptionEntityNotExist(workOrWorkCompleted))) { Wo wo = null;
throw new ExceptionAccessDenied(effectivePerson); try {
} Work work = emc.find(workOrWorkCompleted, Work.class);
if (null != work) {
Wo wo = null; wo = this.work(business, effectivePerson, work);
} else {
Work work = emc.find(workOrWorkCompleted, Work.class); wo = this.workCompleted(business, effectivePerson,
emc.flag(workOrWorkCompleted, WorkCompleted.class));
}
} catch (Exception e) {
logger.error(e);
}
return wo;
});
CompletableFuture<Boolean> _control = CompletableFuture.supplyAsync(() -> {
Boolean value = false;
try {
value = business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
new ExceptionEntityNotExist(workOrWorkCompleted));
} catch (Exception e) {
logger.error(e);
}
return value;
});
if (null != work) { if (BooleanUtils.isFalse(_control.get())) {
wo = this.work(business, effectivePerson, work); throw new ExceptionAccessDenied(effectivePerson, workOrWorkCompleted);
} else {
wo = this.workCompleted(business, effectivePerson, emc.flag(workOrWorkCompleted, WorkCompleted.class));
} }
result.setData(wo); result.setData(_wo.get());
return result; return result;
// if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
// new ExceptionEntityNotExist(workOrWorkCompleted))) {
// throw new ExceptionAccessDenied(effectivePerson);
// }
//
// Wo wo = null;
//
// Work work = emc.find(workOrWorkCompleted, Work.class);
//
// if (null != work) {
// wo = this.work(business, effectivePerson, work);
// } else {
// wo = this.workCompleted(business, effectivePerson, emc.flag(workOrWorkCompleted, WorkCompleted.class));
// }
//
// result.setData(wo);
// return result;
} }
} }
......
package com.x.processplatform.assemble.surface.jaxrs.form; package com.x.processplatform.assemble.surface.jaxrs.form;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.concurrent.CompletableFuture;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.google.gson.JsonElement;
import com.x.base.core.container.EntityManagerContainer; import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.exception.ExceptionAccessDenied; import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.exception.ExceptionEntityNotExist; import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.logger.Audit;
import com.x.base.core.project.logger.Logger; import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory; import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.DateTools;
import com.x.base.core.project.tools.PropertyTools; import com.x.base.core.project.tools.PropertyTools;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.core.entity.content.Work; import com.x.processplatform.core.entity.content.Work;
...@@ -27,29 +28,43 @@ class ActionGetWithWorkOrWorkCompleted extends BaseAction { ...@@ -27,29 +28,43 @@ class ActionGetWithWorkOrWorkCompleted extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionGetWithWorkOrWorkCompleted.class); private static Logger logger = LoggerFactory.getLogger(ActionGetWithWorkOrWorkCompleted.class);
ActionResult<JsonElement> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception { ActionResult<Wo> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
Audit audit = logger.audit(effectivePerson); ActionResult<Wo> result = new ActionResult<>();
ActionResult<JsonElement> result = new ActionResult<>();
Business business = new Business(emc); Business business = new Business(emc);
if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted, CompletableFuture<Wo> _wo = CompletableFuture.supplyAsync(() -> {
new ExceptionEntityNotExist(workOrWorkCompleted))) { Wo wo = null;
throw new ExceptionAccessDenied(effectivePerson); try {
} Work work = emc.find(workOrWorkCompleted, Work.class);
if (null != work) {
JsonElement wo = null; wo = this.work(business, work);
} else {
Work work = emc.find(workOrWorkCompleted, Work.class); wo = this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class));
}
} catch (Exception e) {
logger.error(e);
}
return wo;
});
CompletableFuture<Boolean> _control = CompletableFuture.supplyAsync(() -> {
Boolean value = false;
try {
value = business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
new ExceptionEntityNotExist(workOrWorkCompleted));
} catch (Exception e) {
logger.error(e);
}
return value;
});
if (null != work) { if (BooleanUtils.isFalse(_control.get())) {
wo = gson.toJsonTree(this.work(business, work)); throw new ExceptionAccessDenied(effectivePerson, workOrWorkCompleted);
} else {
wo = gson.toJsonTree(this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class)));
} }
audit.log(null, "查看");
result.setData(wo); result.setData(_wo.get());
return result; return result;
} }
} }
...@@ -65,6 +80,7 @@ class ActionGetWithWorkOrWorkCompleted extends BaseAction { ...@@ -65,6 +80,7 @@ class ActionGetWithWorkOrWorkCompleted extends BaseAction {
Form form = business.form().pick(id); Form form = business.form().pick(id);
if (null != form) { if (null != form) {
wo.setForm(toWoFormDataOrMobileData(form)); wo.setForm(toWoFormDataOrMobileData(form));
wo.setFastETag(DateTools.format(form.getUpdateTime()) + form.getId());
related(business, wo, form); related(business, wo, form);
} }
} }
...@@ -78,6 +94,7 @@ class ActionGetWithWorkOrWorkCompleted extends BaseAction { ...@@ -78,6 +94,7 @@ class ActionGetWithWorkOrWorkCompleted extends BaseAction {
Form form = business.form().pick(workCompleted.getForm()); Form form = business.form().pick(workCompleted.getForm());
if (null != form) { if (null != form) {
wo.setForm(toWoFormDataOrMobileData(form)); wo.setForm(toWoFormDataOrMobileData(form));
wo.setFastETag(DateTools.format(form.getUpdateTime()) + form.getId());
related(business, wo, form); related(business, wo, form);
} }
} else if (null != workCompleted.getProperties().getForm()) { } else if (null != workCompleted.getProperties().getForm()) {
......
package com.x.processplatform.assemble.surface.jaxrs.form; package com.x.processplatform.assemble.surface.jaxrs.form;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.concurrent.CompletableFuture;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.google.gson.JsonElement;
import com.x.base.core.container.EntityManagerContainer; import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.exception.ExceptionAccessDenied; import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.exception.ExceptionEntityNotExist; import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.logger.Audit;
import com.x.base.core.project.logger.Logger; import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory; import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.PropertyTools; import com.x.base.core.project.tools.PropertyTools;
...@@ -27,29 +27,43 @@ class ActionGetWithWorkOrWorkCompletedMobile extends BaseAction { ...@@ -27,29 +27,43 @@ class ActionGetWithWorkOrWorkCompletedMobile extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionGetWithWorkOrWorkCompletedMobile.class); private static Logger logger = LoggerFactory.getLogger(ActionGetWithWorkOrWorkCompletedMobile.class);
ActionResult<JsonElement> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception { ActionResult<Wo> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
Audit audit = logger.audit(effectivePerson); ActionResult<Wo> result = new ActionResult<>();
ActionResult<JsonElement> result = new ActionResult<>();
Business business = new Business(emc); Business business = new Business(emc);
if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted, CompletableFuture<Wo> _wo = CompletableFuture.supplyAsync(() -> {
new ExceptionEntityNotExist(workOrWorkCompleted))) { Wo wo = null;
throw new ExceptionAccessDenied(effectivePerson); try {
} Work work = emc.find(workOrWorkCompleted, Work.class);
if (null != work) {
JsonElement wo = null; wo = this.work(business, work);
} else {
Work work = emc.find(workOrWorkCompleted, Work.class); wo = this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class));
}
} catch (Exception e) {
logger.error(e);
}
return wo;
});
CompletableFuture<Boolean> _control = CompletableFuture.supplyAsync(() -> {
Boolean value = false;
try {
value = business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
new ExceptionEntityNotExist(workOrWorkCompleted));
} catch (Exception e) {
logger.error(e);
}
return value;
});
if (null != work) { if (BooleanUtils.isFalse(_control.get())) {
wo = gson.toJsonTree(this.work(business, work)); throw new ExceptionAccessDenied(effectivePerson, workOrWorkCompleted);
} else {
wo = gson.toJsonTree(this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class)));
} }
audit.log(null, "查看");
result.setData(wo); result.setData(_wo.get());
return result; return result;
} }
} }
......
...@@ -2,12 +2,11 @@ package com.x.processplatform.assemble.surface.jaxrs.form; ...@@ -2,12 +2,11 @@ package com.x.processplatform.assemble.surface.jaxrs.form;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import com.x.base.core.project.cache.ApplicationCache; import com.x.base.core.project.cache.ApplicationCache;
import com.x.base.core.project.gson.GsonPropertyObject; import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.jaxrs.StandardJaxrsAction; import com.x.base.core.project.jaxrs.StandardJaxrsAction;
import com.x.processplatform.assemble.surface.Business; import com.x.base.core.project.jaxrs.WoFastETag;
import com.x.processplatform.core.entity.content.WorkCompletedProperties; import com.x.processplatform.core.entity.content.WorkCompletedProperties;
import com.x.processplatform.core.entity.element.Form; import com.x.processplatform.core.entity.element.Form;
import com.x.processplatform.core.entity.element.Script; import com.x.processplatform.core.entity.element.Script;
...@@ -186,7 +185,7 @@ abstract class BaseAction extends StandardJaxrsAction { ...@@ -186,7 +185,7 @@ abstract class BaseAction extends StandardJaxrsAction {
} }
public static class AbstractWo extends GsonPropertyObject { public static class AbstractWo extends WoFastETag {
private String id; private String id;
...@@ -228,7 +227,6 @@ abstract class BaseAction extends StandardJaxrsAction { ...@@ -228,7 +227,6 @@ abstract class BaseAction extends StandardJaxrsAction {
this.id = id; this.id = id;
} }
} }
} }
\ No newline at end of file
...@@ -11,7 +11,6 @@ import javax.ws.rs.container.Suspended; ...@@ -11,7 +11,6 @@ import javax.ws.rs.container.Suspended;
import javax.ws.rs.core.Context; import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import com.google.gson.JsonElement;
import com.x.base.core.project.annotation.JaxrsDescribe; import com.x.base.core.project.annotation.JaxrsDescribe;
import com.x.base.core.project.annotation.JaxrsMethodDescribe; import com.x.base.core.project.annotation.JaxrsMethodDescribe;
import com.x.base.core.project.annotation.JaxrsParameterDescribe; import com.x.base.core.project.annotation.JaxrsParameterDescribe;
...@@ -37,7 +36,7 @@ public class FormAction extends StandardJaxrsAction { ...@@ -37,7 +36,7 @@ public class FormAction extends StandardJaxrsAction {
public void getWithWorkOrWorkCompleted(@Suspended final AsyncResponse asyncResponse, public void getWithWorkOrWorkCompleted(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request, @Context HttpServletRequest request,
@JaxrsParameterDescribe("工作或完成工作标识") @PathParam("workOrWorkCompleted") String workOrWorkCompleted) { @JaxrsParameterDescribe("工作或完成工作标识") @PathParam("workOrWorkCompleted") String workOrWorkCompleted) {
ActionResult<JsonElement> result = new ActionResult<>(); ActionResult<ActionGetWithWorkOrWorkCompleted.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request); EffectivePerson effectivePerson = this.effectivePerson(request);
try { try {
result = new ActionGetWithWorkOrWorkCompleted().execute(effectivePerson, workOrWorkCompleted); result = new ActionGetWithWorkOrWorkCompleted().execute(effectivePerson, workOrWorkCompleted);
...@@ -56,7 +55,7 @@ public class FormAction extends StandardJaxrsAction { ...@@ -56,7 +55,7 @@ public class FormAction extends StandardJaxrsAction {
public void getWithWorkOrWorkCompletedMobile(@Suspended final AsyncResponse asyncResponse, public void getWithWorkOrWorkCompletedMobile(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request, @Context HttpServletRequest request,
@JaxrsParameterDescribe("工作或完成工作标识") @PathParam("workOrWorkCompleted") String workOrWorkCompleted) { @JaxrsParameterDescribe("工作或完成工作标识") @PathParam("workOrWorkCompleted") String workOrWorkCompleted) {
ActionResult<JsonElement> result = new ActionResult<>(); ActionResult<ActionGetWithWorkOrWorkCompletedMobile.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request); EffectivePerson effectivePerson = this.effectivePerson(request);
try { try {
result = new ActionGetWithWorkOrWorkCompletedMobile().execute(effectivePerson, workOrWorkCompleted); result = new ActionGetWithWorkOrWorkCompletedMobile().execute(effectivePerson, workOrWorkCompleted);
......
...@@ -3,8 +3,11 @@ package com.x.processplatform.assemble.surface.jaxrs.record; ...@@ -3,8 +3,11 @@ package com.x.processplatform.assemble.surface.jaxrs.record;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.lang3.BooleanUtils;
import com.x.base.core.container.EntityManagerContainer; import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.entity.JpaObject; import com.x.base.core.entity.JpaObject;
...@@ -32,35 +35,50 @@ class ActionListWithWorkOrWorkCompleted extends BaseAction { ...@@ -32,35 +35,50 @@ class ActionListWithWorkOrWorkCompleted extends BaseAction {
Business business = new Business(emc); Business business = new Business(emc);
if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted, CompletableFuture<List<Wo>> _wos = CompletableFuture.supplyAsync(() -> {
new ExceptionEntityNotExist(workOrWorkCompleted))) { List<Wo> wos = new ArrayList<>();
throw new ExceptionAccessDenied(effectivePerson); try {
} String job = business.job().findWithWork(workOrWorkCompleted);
if (null != job) {
String job = business.job().findWithWork(workOrWorkCompleted); wos = emc.fetchEqual(Record.class, Wo.copier, Record.job_FIELDNAME, job);
} else {
List<Wo> wos = new ArrayList<>(); job = business.job().findWithWorkCompleted(workOrWorkCompleted);
if (null != job) { WorkCompleted workCompleted = emc.firstEqual(WorkCompleted.class, WorkCompleted.job_FIELDNAME,
wos = emc.fetchEqual(Record.class, Wo.copier, Record.job_FIELDNAME, job); job);
} else { if (ListTools.isNotEmpty(workCompleted.getProperties().getRecordList())) {
job = business.job().findWithWorkCompleted(workOrWorkCompleted); wos = Wo.copier.copy(workCompleted.getProperties().getRecordList());
WorkCompleted workCompleted = emc.firstEqual(WorkCompleted.class, WorkCompleted.job_FIELDNAME, job); } else {
if (ListTools.isNotEmpty(workCompleted.getProperties().getRecordList())) { wos = emc.fetchEqual(Record.class, Wo.copier, Record.job_FIELDNAME, job);
wos = Wo.copier.copy(workCompleted.getProperties().getRecordList()); }
} else { }
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));
}
} catch (Exception e) {
logger.error(e);
} }
} return wos;
});
wos = wos.stream().sorted(Comparator.comparing(Wo::getOrder)).collect(Collectors.toList());
CompletableFuture<Boolean> _control = CompletableFuture.supplyAsync(() -> {
Boolean value = false;
try {
value = business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
new ExceptionEntityNotExist(workOrWorkCompleted));
} catch (Exception e) {
logger.error(e);
}
return value;
});
for (Task task : emc.listEqual(Task.class, Task.job_FIELDNAME, job).stream() if (BooleanUtils.isFalse(_control.get())) {
.sorted(Comparator.comparing(Task::getStartTime)).collect(Collectors.toList())) { throw new ExceptionAccessDenied(effectivePerson, workOrWorkCompleted);
Record record = this.taskToRecord(task);
wos.add(Wo.copier.copy(record));
} }
result.setData(wos); result.setData(_wos.get());
return result; return result;
} }
......
...@@ -3,8 +3,11 @@ package com.x.processplatform.assemble.surface.jaxrs.record; ...@@ -3,8 +3,11 @@ package com.x.processplatform.assemble.surface.jaxrs.record;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.lang3.BooleanUtils;
import com.x.base.core.container.EntityManagerContainer; import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.entity.JpaObject; import com.x.base.core.entity.JpaObject;
...@@ -33,39 +36,56 @@ class ActionListWithWorkOrWorkCompletedPaging extends BaseAction { ...@@ -33,39 +36,56 @@ class ActionListWithWorkOrWorkCompletedPaging extends BaseAction {
Business business = new Business(emc); Business business = new Business(emc);
if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted, CompletableFuture<List<Wo>> _wos = CompletableFuture.supplyAsync(() -> {
new ExceptionEntityNotExist(workOrWorkCompleted))) { List<Wo> wos = new ArrayList<>();
throw new ExceptionAccessDenied(effectivePerson); try {
} String job = business.job().findWithWork(workOrWorkCompleted);
if (null != job) {
String job = business.job().findWithWork(workOrWorkCompleted); wos = emc.fetchEqualAscPaging(Record.class, Wo.copier, Record.job_FIELDNAME, job, page, size,
Record.order_FIELDNAME);
List<Wo> wos = new ArrayList<>(); } else {
if (null != job) { job = business.job().findWithWorkCompleted(workOrWorkCompleted);
wos = emc.fetchEqualAscPaging(Record.class, Wo.copier, Record.job_FIELDNAME, job, page, size, WorkCompleted workCompleted = emc.firstEqual(WorkCompleted.class, WorkCompleted.job_FIELDNAME,
Record.order_FIELDNAME); job);
} else { if (ListTools.isNotEmpty(workCompleted.getProperties().getRecordList())) {
job = business.job().findWithWorkCompleted(workOrWorkCompleted); List<Record> os = workCompleted.getProperties().getRecordList();
WorkCompleted workCompleted = emc.firstEqual(WorkCompleted.class, WorkCompleted.job_FIELDNAME, job); int start = (page - 1) * size;
if (ListTools.isNotEmpty(workCompleted.getProperties().getRecordList())) { start = Math.min(start, os.size());
List<Record> os = workCompleted.getProperties().getRecordList(); wos = Wo.copier.copy(os.stream().sorted(Comparator.comparing(Record::getOrder)).skip(start)
int start = (page - 1) * size; .limit(size).collect(Collectors.toList()));
start = Math.min(start, os.size()); } else {
wos = Wo.copier.copy(os.stream().sorted(Comparator.comparing(Record::getOrder)).skip(start) wos = emc.fetchEqualAscPaging(Record.class, Wo.copier, Record.job_FIELDNAME, job, page,
.limit(size).collect(Collectors.toList())); size, Record.order_FIELDNAME);
} else { }
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));
}
} catch (Exception e) {
logger.error(e);
} }
} return wos;
});
CompletableFuture<Boolean> _control = CompletableFuture.supplyAsync(() -> {
Boolean value = false;
try {
value = business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
new ExceptionEntityNotExist(workOrWorkCompleted));
} catch (Exception e) {
logger.error(e);
}
return value;
});
for (Task task : emc.listEqual(Task.class, Task.job_FIELDNAME, job).stream() if (BooleanUtils.isFalse(_control.get())) {
.sorted(Comparator.comparing(Task::getStartTime)).collect(Collectors.toList())) { throw new ExceptionAccessDenied(effectivePerson, workOrWorkCompleted);
Record record = this.taskToRecord(task);
wos.add(Wo.copier.copy(record));
} }
result.setData(wos); result.setData(_wos.get());
return result; return result;
} }
......
package com.x.processplatform.assemble.surface.jaxrs.snap;
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.processplatform.assemble.surface.Business;
import com.x.processplatform.core.entity.content.Snap;
class ActionGet extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionGet.class);
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
Business business = new Business(emc);
Snap snap = emc.find(id, Snap.class);
if (null == snap) {
throw new ExceptionEntityNotExist(id, Snap.class);
}
if (!allow(effectivePerson, business, snap)) {
throw new ExceptionAccessDenied(effectivePerson, snap);
}
result.setData(Wo.copier.copy(snap));
}
return result;
}
private boolean allow(EffectivePerson effectivePerson, Business business, Snap snap) throws Exception {
return (business.canManageApplicationOrProcess(effectivePerson, snap.getApplication(), snap.getProcess())
|| effectivePerson.isNotPerson(snap.getPerson()));
}
public static class Wo extends Snap {
private static final long serialVersionUID = -2577413577740827608L;
static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class, null,
JpaObject.FieldsInvisible);
}
}
...@@ -12,6 +12,7 @@ import com.x.base.core.project.bean.WrapCopierFactory; ...@@ -12,6 +12,7 @@ import com.x.base.core.project.bean.WrapCopierFactory;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.snap.ActionListMyFilterPaging.Wo;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
class ActionListMyPaging extends BaseAction { class ActionListMyPaging extends BaseAction {
...@@ -31,8 +32,8 @@ class ActionListMyPaging extends BaseAction { ...@@ -31,8 +32,8 @@ class ActionListMyPaging extends BaseAction {
private static final long serialVersionUID = 2279846765261247910L; private static final long serialVersionUID = 2279846765261247910L;
static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class, null, static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class,
JpaObject.FieldsInvisibleIncludeProperites); JpaObject.singularAttributeField(Snap.class, true, true), null);
} }
......
...@@ -12,6 +12,7 @@ import com.x.base.core.project.bean.WrapCopierFactory; ...@@ -12,6 +12,7 @@ import com.x.base.core.project.bean.WrapCopierFactory;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.snap.ActionListMyFilterPaging.Wo;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
class ActionListNext extends BaseAction { class ActionListNext extends BaseAction {
...@@ -28,8 +29,8 @@ class ActionListNext extends BaseAction { ...@@ -28,8 +29,8 @@ class ActionListNext extends BaseAction {
public static class Wo extends RankWo { public static class Wo extends RankWo {
private static final long serialVersionUID = 6502735971303449356L; private static final long serialVersionUID = 6502735971303449356L;
static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class, null, static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class,
JpaObject.FieldsInvisibleIncludeProperites); JpaObject.singularAttributeField(Snap.class, true, true), null);
} }
} }
...@@ -17,6 +17,7 @@ import com.x.base.core.project.exception.ExceptionEntityNotExist; ...@@ -17,6 +17,7 @@ import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.snap.ActionListMyFilterPaging.Wo;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
import com.x.processplatform.core.entity.element.Application; import com.x.processplatform.core.entity.element.Application;
...@@ -42,8 +43,8 @@ class ActionListNextWithApplication extends BaseAction { ...@@ -42,8 +43,8 @@ class ActionListNextWithApplication extends BaseAction {
private static final long serialVersionUID = 3075270584151179370L; private static final long serialVersionUID = 3075270584151179370L;
static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class, null, static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class,
JpaObject.FieldsInvisibleIncludeProperites); JpaObject.singularAttributeField(Snap.class, true, true), null);
} }
} }
\ No newline at end of file
...@@ -13,6 +13,7 @@ import com.x.base.core.project.exception.ExceptionEntityNotExist; ...@@ -13,6 +13,7 @@ import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.snap.ActionListMyFilterPaging.Wo;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
import com.x.processplatform.core.entity.element.Process; import com.x.processplatform.core.entity.element.Process;
...@@ -36,8 +37,8 @@ class ActionListNextWithProcess extends BaseAction { ...@@ -36,8 +37,8 @@ class ActionListNextWithProcess extends BaseAction {
private static final long serialVersionUID = 2988668146783909521L; private static final long serialVersionUID = 2988668146783909521L;
static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class, null, static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class,
JpaObject.FieldsInvisibleIncludeProperites); JpaObject.singularAttributeField(Snap.class, true, true), null);
} }
} }
...@@ -12,6 +12,7 @@ import com.x.base.core.project.bean.WrapCopierFactory; ...@@ -12,6 +12,7 @@ import com.x.base.core.project.bean.WrapCopierFactory;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.snap.ActionListMyFilterPaging.Wo;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
class ActionListPrev extends BaseAction { class ActionListPrev extends BaseAction {
...@@ -28,8 +29,8 @@ class ActionListPrev extends BaseAction { ...@@ -28,8 +29,8 @@ class ActionListPrev extends BaseAction {
public static class Wo extends RankWo { public static class Wo extends RankWo {
private static final long serialVersionUID = 6502735971303449356L; private static final long serialVersionUID = 6502735971303449356L;
static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class, null, static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class,
JpaObject.FieldsInvisibleIncludeProperites); JpaObject.singularAttributeField(Snap.class, true, true), null);
} }
} }
...@@ -13,6 +13,7 @@ import com.x.base.core.project.exception.ExceptionEntityNotExist; ...@@ -13,6 +13,7 @@ import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.snap.ActionListMyFilterPaging.Wo;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
import com.x.processplatform.core.entity.element.Application; import com.x.processplatform.core.entity.element.Application;
...@@ -36,8 +37,8 @@ class ActionListPrevWithApplication extends BaseAction { ...@@ -36,8 +37,8 @@ class ActionListPrevWithApplication extends BaseAction {
private static final long serialVersionUID = 3075270584151179370L; private static final long serialVersionUID = 3075270584151179370L;
static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class, null, static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class,
JpaObject.FieldsInvisibleIncludeProperites); JpaObject.singularAttributeField(Snap.class, true, true), null);
} }
......
...@@ -13,6 +13,7 @@ import com.x.base.core.project.exception.ExceptionEntityNotExist; ...@@ -13,6 +13,7 @@ import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.snap.ActionListMyFilterPaging.Wo;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
import com.x.processplatform.core.entity.element.Process; import com.x.processplatform.core.entity.element.Process;
...@@ -36,8 +37,8 @@ class ActionListPrevWithProcess extends BaseAction { ...@@ -36,8 +37,8 @@ class ActionListPrevWithProcess extends BaseAction {
private static final long serialVersionUID = 2988668146783909521L; private static final long serialVersionUID = 2988668146783909521L;
static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class, null, static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class,
JpaObject.FieldsInvisibleIncludeProperites); JpaObject.singularAttributeField(Snap.class, true, true), null);
} }
......
...@@ -21,6 +21,7 @@ import com.x.base.core.project.exception.ExceptionAccessDenied; ...@@ -21,6 +21,7 @@ import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.snap.ActionListMyFilterPaging.Wo;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
class ActionManageListFilterPaging extends BaseAction { class ActionManageListFilterPaging extends BaseAction {
......
...@@ -13,6 +13,7 @@ import com.x.base.core.project.exception.ExceptionAccessDenied; ...@@ -13,6 +13,7 @@ import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.snap.ActionListMyFilterPaging.Wo;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
class ActionManageListNext extends BaseAction { class ActionManageListNext extends BaseAction {
...@@ -31,8 +32,8 @@ class ActionManageListNext extends BaseAction { ...@@ -31,8 +32,8 @@ class ActionManageListNext extends BaseAction {
private static final long serialVersionUID = 7593097665520980060L; private static final long serialVersionUID = 7593097665520980060L;
static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class, null, static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class,
JpaObject.FieldsInvisible); JpaObject.singularAttributeField(Snap.class, true, true), null);
} }
......
...@@ -16,6 +16,7 @@ import com.x.base.core.project.exception.ExceptionAccessDenied; ...@@ -16,6 +16,7 @@ import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.snap.ActionListMyFilterPaging.Wo;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
class ActionManageListNextFilter extends BaseAction { class ActionManageListNextFilter extends BaseAction {
...@@ -42,8 +43,8 @@ class ActionManageListNextFilter extends BaseAction { ...@@ -42,8 +43,8 @@ class ActionManageListNextFilter extends BaseAction {
private static final long serialVersionUID = 2279846765261247910L; private static final long serialVersionUID = 2279846765261247910L;
static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class, null, static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class,
JpaObject.FieldsInvisible); JpaObject.singularAttributeField(Snap.class, true, true), null);
} }
......
...@@ -13,6 +13,7 @@ import com.x.base.core.project.exception.ExceptionAccessDenied; ...@@ -13,6 +13,7 @@ import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.snap.ActionListMyFilterPaging.Wo;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
class ActionManageListPrev extends BaseAction { class ActionManageListPrev extends BaseAction {
...@@ -31,8 +32,8 @@ class ActionManageListPrev extends BaseAction { ...@@ -31,8 +32,8 @@ class ActionManageListPrev extends BaseAction {
private static final long serialVersionUID = 7593097665520980060L; private static final long serialVersionUID = 7593097665520980060L;
static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class, null, static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class,
JpaObject.FieldsInvisible); JpaObject.singularAttributeField(Snap.class, true, true), null);
} }
......
...@@ -16,6 +16,7 @@ import com.x.base.core.project.exception.ExceptionAccessDenied; ...@@ -16,6 +16,7 @@ import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.snap.ActionListMyFilterPaging.Wo;
import com.x.processplatform.core.entity.content.Snap; import com.x.processplatform.core.entity.content.Snap;
class ActionManageListPrevFilter extends BaseAction { class ActionManageListPrevFilter extends BaseAction {
...@@ -42,8 +43,8 @@ class ActionManageListPrevFilter extends BaseAction { ...@@ -42,8 +43,8 @@ class ActionManageListPrevFilter extends BaseAction {
private static final long serialVersionUID = 2279846765261247910L; private static final long serialVersionUID = 2279846765261247910L;
static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class, null, static WrapCopier<Snap, Wo> copier = WrapCopierFactory.wo(Snap.class, Wo.class,
JpaObject.FieldsInvisible); JpaObject.singularAttributeField(Snap.class, true, true), null);
} }
......
...@@ -11,7 +11,6 @@ import javax.persistence.criteria.Root; ...@@ -11,7 +11,6 @@ import javax.persistence.criteria.Root;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.x.base.core.project.annotation.FieldDescribe; import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.jaxrs.StandardJaxrsAction; import com.x.base.core.project.jaxrs.StandardJaxrsAction;
import com.x.base.core.project.tools.ListTools; import com.x.base.core.project.tools.ListTools;
...@@ -89,8 +88,9 @@ abstract class BaseAction extends StandardJaxrsAction { ...@@ -89,8 +88,9 @@ abstract class BaseAction extends StandardJaxrsAction {
p = cb.and(p, cb.equal(root.get(Snap_.application), application.getId())); p = cb.and(p, cb.equal(root.get(Snap_.application), application.getId()));
return p; return p;
} }
protected Predicate myProcessFilter(EffectivePerson effectivePerson, Business business, Process process) throws Exception { protected Predicate myProcessFilter(EffectivePerson effectivePerson, Business business, Process process)
throws Exception {
EntityManager em = business.entityManagerContainer().get(Snap.class); EntityManager em = business.entityManagerContainer().get(Snap.class);
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Snap> cq = cb.createQuery(Snap.class); CriteriaQuery<Snap> cq = cb.createQuery(Snap.class);
...@@ -100,7 +100,6 @@ abstract class BaseAction extends StandardJaxrsAction { ...@@ -100,7 +100,6 @@ abstract class BaseAction extends StandardJaxrsAction {
return p; return p;
} }
protected class FilterWi { protected class FilterWi {
@FieldDescribe("应用id") @FieldDescribe("应用id")
...@@ -149,10 +148,20 @@ abstract class BaseAction extends StandardJaxrsAction { ...@@ -149,10 +148,20 @@ abstract class BaseAction extends StandardJaxrsAction {
} }
protected abstract static class RankWo extends GsonPropertyObject { protected abstract static class RankWo extends Snap {
private Long rank;
private static final long serialVersionUID = 2279846765261247910L; private static final long serialVersionUID = 2279846765261247910L;
public Long getRank() {
return rank;
}
public void setRank(Long rank) {
this.rank = rank;
}
} }
} }
...@@ -87,6 +87,24 @@ public class SnapAction extends StandardJaxrsAction { ...@@ -87,6 +87,24 @@ public class SnapAction extends StandardJaxrsAction {
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
} }
@JaxrsMethodDescribe(value = "获取快照对象.", action = ActionGet.class)
@GET
@Path("{id}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void get(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
@JaxrsParameterDescribe("标识") @PathParam("id") String id) {
ActionResult<ActionGet.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionGet().execute(effectivePerson, id);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "删除快照", action = ActionDelete.class) @JaxrsMethodDescribe(value = "删除快照", action = ActionDelete.class)
@DELETE @DELETE
@Path("{id}") @Path("{id}")
......
...@@ -45,18 +45,40 @@ class ActionGetWithWorkOrWorkCompleted extends BaseAction { ...@@ -45,18 +45,40 @@ class ActionGetWithWorkOrWorkCompleted extends BaseAction {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
ActionResult<Wo> result = new ActionResult<>(); ActionResult<Wo> result = new ActionResult<>();
Business business = new Business(emc); Business business = new Business(emc);
if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
new ExceptionEntityNotExist(workOrWorkCompleted))) { CompletableFuture<Wo> _wo = CompletableFuture.supplyAsync(() -> {
throw new ExceptionAccessDenied(effectivePerson); Wo wo = null;
} try {
Wo wo = null; Work work = emc.find(workOrWorkCompleted, Work.class);
Work work = emc.find(workOrWorkCompleted, Work.class); if (null != work) {
if (null != work) { wo = this.work(business, effectivePerson, work);
wo = this.work(business, effectivePerson, work); } else {
} else { wo = this.workCompleted(business, effectivePerson,
wo = this.workCompleted(business, effectivePerson, emc.flag(workOrWorkCompleted, WorkCompleted.class)); emc.flag(workOrWorkCompleted, WorkCompleted.class));
}
} catch (Exception e) {
logger.error(e);
}
return wo;
});
CompletableFuture<Boolean> _control = CompletableFuture.supplyAsync(() -> {
Boolean value = false;
try {
value = business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
new ExceptionEntityNotExist(workOrWorkCompleted));
} catch (Exception e) {
logger.error(e);
}
return value;
});
if (BooleanUtils.isFalse(_control.get())) {
throw new ExceptionAccessDenied(effectivePerson, workOrWorkCompleted);
} }
result.setData(wo);
result.setData(_wo.get());
return result; return result;
} }
} }
......
...@@ -49,33 +49,42 @@ class ActionListWithWorkOrWorkCompleted extends BaseAction { ...@@ -49,33 +49,42 @@ class ActionListWithWorkOrWorkCompleted extends BaseAction {
Business business = new Business(emc); Business business = new Business(emc);
if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
new ExceptionEntityNotExist(workOrWorkCompleted))) {
throw new ExceptionAccessDenied(effectivePerson);
}
final String job = business.job().findWithWorkOrWorkCompleted(workOrWorkCompleted); final String job = business.job().findWithWorkOrWorkCompleted(workOrWorkCompleted);
CompletableFuture<List<WoTask>> future_tasks = CompletableFuture.supplyAsync(() -> { CompletableFuture<List<WoTask>> _tasks = CompletableFuture.supplyAsync(() -> {
return this.tasks(business, job); return this.tasks(business, job);
}); });
CompletableFuture<List<WoTaskCompleted>> future_taskCompleteds = CompletableFuture.supplyAsync(() -> { CompletableFuture<List<WoTaskCompleted>> _taskCompleteds = CompletableFuture.supplyAsync(() -> {
return this.taskCompleteds(business, job); return this.taskCompleteds(business, job);
}); });
CompletableFuture<List<WoRead>> future_reads = CompletableFuture.supplyAsync(() -> { CompletableFuture<List<WoRead>> _reads = CompletableFuture.supplyAsync(() -> {
return this.reads(business, job); return this.reads(business, job);
}); });
CompletableFuture<List<WoReadCompleted>> future_readCompleteds = CompletableFuture.supplyAsync(() -> { CompletableFuture<List<WoReadCompleted>> _readCompleteds = CompletableFuture.supplyAsync(() -> {
return this.readCompleteds(business, job); return this.readCompleteds(business, job);
}); });
CompletableFuture<List<WorkLog>> future_workLogs = CompletableFuture.supplyAsync(() -> { CompletableFuture<List<WorkLog>> _workLogs = CompletableFuture.supplyAsync(() -> {
return this.workLogs(business, job); return this.workLogs(business, job);
}); });
List<WoTask> tasks = future_tasks.get(); CompletableFuture<Boolean> _control = CompletableFuture.supplyAsync(() -> {
List<WoTaskCompleted> taskCompleteds = future_taskCompleteds.get(); Boolean value = false;
List<WoRead> reads = future_reads.get(); try {
List<WoReadCompleted> readCompleteds = future_readCompleteds.get(); value = business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
List<WorkLog> workLogs = future_workLogs.get(); new ExceptionEntityNotExist(workOrWorkCompleted));
} catch (Exception e) {
logger.error(e);
}
return value;
});
if (BooleanUtils.isFalse(_control.get())) {
throw new ExceptionAccessDenied(effectivePerson, workOrWorkCompleted);
}
List<WoTask> tasks = _tasks.get();
List<WoTaskCompleted> taskCompleteds = _taskCompleteds.get();
List<WoRead> reads = _reads.get();
List<WoReadCompleted> readCompleteds = _readCompleteds.get();
List<WorkLog> workLogs = _workLogs.get();
WorkLogTree tree = new WorkLogTree(workLogs); WorkLogTree tree = new WorkLogTree(workLogs);
...@@ -137,11 +146,6 @@ class ActionListWithWorkOrWorkCompleted extends BaseAction { ...@@ -137,11 +146,6 @@ class ActionListWithWorkOrWorkCompleted extends BaseAction {
private List<WoTask> tasks(Business business, String job) { private List<WoTask> tasks(Business business, String job) {
List<WoTask> os = new ArrayList<>(); List<WoTask> os = new ArrayList<>();
try { try {
// os = business.entityManagerContainer().fetchEqual(Task.class, WoTask.copier,
// WoTask.job_FIELDNAME, job)
// .stream().sorted(Comparator.comparing(Task::getStartTime,
// Comparator.nullsLast(Date::compareTo)))
// .collect(Collectors.toList());
os = WoTask.copier.copy(business.entityManagerContainer().listEqual(Task.class, Task.job_FIELDNAME, job) os = WoTask.copier.copy(business.entityManagerContainer().listEqual(Task.class, Task.job_FIELDNAME, job)
.stream().sorted(Comparator.comparing(Task::getStartTime, Comparator.nullsLast(Date::compareTo))) .stream().sorted(Comparator.comparing(Task::getStartTime, Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList())); .collect(Collectors.toList()));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册