提交 23a44cb9 编写于 作者: O o2null

Merge branch 'fix/mock' into 'wrdp'

增加WoFastETag

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