提交 f17caf84 编写于 作者: O o2sword

修复根据job更新已完成文档数据失败的问题

上级 b3755df0
......@@ -1155,6 +1155,33 @@ public class Business {
return false;
}
public boolean editable(EffectivePerson effectivePerson, String job) throws Exception {
if (effectivePerson.isManager()) {
return true;
}
if (this.task().countWithPersonWithJob(effectivePerson.getDistinguishedName(), job) > 0) {
return true;
}
String application = null, process = null;
Work work = this.entityManagerContainer().firstEqual(Work.class, Work.job_FIELDNAME, job);
if(work==null){
WorkCompleted workCompleted = this.entityManagerContainer().firstEqual(WorkCompleted.class, Work.job_FIELDNAME, job);
if(workCompleted!=null){
application = work.getApplication();
process = work.getProcess();
}
}else{
application = work.getApplication();
process = work.getProcess();
}
if (StringUtils.isNotBlank(application) && BooleanUtils.isTrue(
this.canManageApplicationOrProcess(effectivePerson, application, process))) {
return true;
}
return false;
}
public boolean controllerable(EffectivePerson effectivePerson, Application application, Process process,
Attachment attachment) throws Exception {
if (ListTools.isEmpty(attachment.getControllerIdentityList(), attachment.getControllerUnitList())) {
......
......@@ -64,6 +64,18 @@ public class ReviewFactory extends AbstractFactory {
return em.createQuery(cq).getResultList();
}
public Review getWithPersonAndJob(String person, String job) throws Exception {
EntityManager em = this.entityManagerContainer().get(Review.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Review> cq = cb.createQuery(Review.class);
Root<Review> root = cq.from(Review.class);
Predicate p = cb.equal(root.get(Review_.job), job);
p = cb.and(p, cb.equal(root.get(Review_.person), person));
cq.select(root).where(p);
List<Review> list = em.createQuery(cq).setMaxResults(1).getResultList();
return ListTools.isEmpty(list) ? null : list.get(0);
}
public Long countWithPersonWithWork(String person, Work work) throws Exception {
EntityManager em = this.entityManagerContainer().get(Review.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
......@@ -113,4 +125,4 @@ public class ReviewFactory extends AbstractFactory {
return list;
}
}
\ No newline at end of file
}
......@@ -340,23 +340,20 @@ abstract class BaseAction extends StandardJaxrsAction {
/**
* ActionUpdateWithJob的权限校验方法
*
*
* @param effectivePerson
* @param job
* @param jsonElement
* @throws Exception
* @throws ExceptionJobNotExist
* @throws ExceptionWorkAccessDenied
*/
protected void checkUpdateWithJobControl(EffectivePerson effectivePerson, Business business, String job)
throws Exception {
// 通过job获取任意一个work用于判断权限
Work work = business.entityManagerContainer().firstEqual(Work.class, Work.job_FIELDNAME, job);
if (null == work) {
if (!business.job().jobExist(job)) {
throw new ExceptionJobNotExist(job);
}
if (!business.editable(effectivePerson, work)) {
throw new ExceptionWorkAccessDenied(effectivePerson.getDistinguishedName(), work.getTitle(), work.getId());
if (!business.editable(effectivePerson, job)) {
throw new ExceptionJobAccessDenied(effectivePerson.getDistinguishedName(), job);
}
}
......@@ -365,4 +362,4 @@ abstract class BaseAction extends StandardJaxrsAction {
private static final long serialVersionUID = 7690414994902239024L;
}
}
\ No newline at end of file
}
package com.x.processplatform.service.processing.jaxrs.data;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import com.google.gson.JsonElement;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
......@@ -16,8 +11,13 @@ import com.x.base.core.project.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.service.processing.Business;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
class ActionUpdateWithJob extends BaseAction {
private static final Logger LOGGER = LoggerFactory.getLogger(ActionUpdateWithJob.class);
......@@ -25,16 +25,7 @@ class ActionUpdateWithJob extends BaseAction {
ActionResult<Wo> execute(EffectivePerson effectivePerson, String job, JsonElement jsonElement) throws Exception {
LOGGER.debug("execute:{}, job:{}.", effectivePerson::getDistinguishedName, () -> job);
String executorSeed = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Work> works = emc.fetchEqual(Work.class, Arrays.asList(Work.job_FIELDNAME), Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
executorSeed = job;
} else {
throw new ExceptionJobNotExist(job);
}
}
String executorSeed = job;
Callable<ActionResult<Wo>> callable = new CallableImpl(job, jsonElement);
......@@ -64,9 +55,9 @@ class ActionUpdateWithJob extends BaseAction {
Wo wo = new Wo();
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
Business business = new Business(emc);
List<Work> works = emc.listEqual(Work.class, Work.job_FIELDNAME, job);
JsonElement source = getData(business, job);
JsonElement merge = XGsonBuilder.merge(jsonElement, source);
List<Work> works = emc.listEqual(Work.class, Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
for (Work work : works) {
/* 先更新title和serial,再更新DataItem,因为旧的DataItem中也有title和serial数据. */
......@@ -74,6 +65,16 @@ class ActionUpdateWithJob extends BaseAction {
}
/* updateTitleSerial 和 updateData 方法内进行了提交 */
updateData(business, works.get(0), merge);
}else {
List<WorkCompleted> workCompletedList = emc.listEqual(WorkCompleted.class, Work.job_FIELDNAME, job);
if (!workCompletedList.isEmpty()) {
for (WorkCompleted work : workCompletedList) {
/* 先更新title和serial,再更新DataItem,因为旧的DataItem中也有title和serial数据. */
updateTitleSerial(business, work, merge);
}
/* updateTitleSerial 和 updateData 方法内进行了提交 */
updateData(business, workCompletedList.get(0), merge);
}
}
wo.setId(job);
}
......@@ -81,4 +82,4 @@ class ActionUpdateWithJob extends BaseAction {
return result;
}
}
}
\ No newline at end of file
}
......@@ -15,6 +15,7 @@ import com.x.base.core.project.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.service.processing.Business;
class ActionUpdateWithJobPath0 extends BaseAction {
......@@ -26,16 +27,7 @@ class ActionUpdateWithJobPath0 extends BaseAction {
LOGGER.debug("execute:{}, job:{}, path0:{}.", effectivePerson::getDistinguishedName, () -> job, () -> path0);
ActionResult<Wo> result = new ActionResult<>();
String executorSeed = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Work> works = emc.fetchEqual(Work.class, Arrays.asList(Work.job_FIELDNAME), Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
executorSeed = job;
} else {
throw new ExceptionJobNotExist(job);
}
}
String executorSeed = job;
Callable<Wo> callable = callable(job, path0, jsonElement);
......@@ -53,6 +45,11 @@ class ActionUpdateWithJobPath0 extends BaseAction {
List<Work> works = emc.listEqual(Work.class, Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
updateData(business, works.get(0), jsonElement, path0);
}else{
List<WorkCompleted> workCompletedList = emc.listEqual(WorkCompleted.class, Work.job_FIELDNAME, job);
if(!workCompletedList.isEmpty()) {
updateData(business, workCompletedList.get(0), jsonElement, path0);
}
}
wo.setId(job);
}
......
......@@ -15,6 +15,7 @@ import com.x.base.core.project.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.service.processing.Business;
class ActionUpdateWithJobPath1 extends BaseAction {
......@@ -27,16 +28,7 @@ class ActionUpdateWithJobPath1 extends BaseAction {
() -> path0, () -> path1);
ActionResult<Wo> result = new ActionResult<>();
String executorSeed = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Work> works = emc.fetchEqual(Work.class, Arrays.asList(Work.job_FIELDNAME), Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
executorSeed = job;
} else {
throw new ExceptionJobNotExist(job);
}
}
String executorSeed = job;
Callable<Wo> callable = callable(job, path0, path1, jsonElement);
......@@ -54,6 +46,11 @@ class ActionUpdateWithJobPath1 extends BaseAction {
List<Work> works = emc.listEqual(Work.class, Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
updateData(business, works.get(0), jsonElement, path0, path1);
}else{
List<WorkCompleted> workCompletedList = emc.listEqual(WorkCompleted.class, Work.job_FIELDNAME, job);
if(!workCompletedList.isEmpty()) {
updateData(business, workCompletedList.get(0), jsonElement, path0, path1);
}
}
wo.setId(job);
}
......
......@@ -15,6 +15,7 @@ import com.x.base.core.project.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.service.processing.Business;
class ActionUpdateWithJobPath2 extends BaseAction {
......@@ -27,16 +28,7 @@ class ActionUpdateWithJobPath2 extends BaseAction {
() -> job, () -> path0, () -> path1, () -> path2);
ActionResult<Wo> result = new ActionResult<>();
String executorSeed = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Work> works = emc.fetchEqual(Work.class, Arrays.asList(Work.job_FIELDNAME), Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
executorSeed = job;
} else {
throw new ExceptionJobNotExist(job);
}
}
String executorSeed = job;
Callable<Wo> callable = callable(job, path0, path1, path2, jsonElement);
......@@ -54,6 +46,11 @@ class ActionUpdateWithJobPath2 extends BaseAction {
List<Work> works = emc.listEqual(Work.class, Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
updateData(business, works.get(0), jsonElement, path0, path1, path2);
}else{
List<WorkCompleted> workCompletedList = emc.listEqual(WorkCompleted.class, Work.job_FIELDNAME, job);
if(!workCompletedList.isEmpty()) {
updateData(business, workCompletedList.get(0), jsonElement, path0, path1, path2);
}
}
wo.setId(job);
}
......
......@@ -15,6 +15,7 @@ import com.x.base.core.project.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.service.processing.Business;
class ActionUpdateWithJobPath3 extends BaseAction {
......@@ -27,16 +28,7 @@ class ActionUpdateWithJobPath3 extends BaseAction {
effectivePerson::getDistinguishedName, () -> job, () -> path0, () -> path1, () -> path2, () -> path3);
ActionResult<Wo> result = new ActionResult<>();
String executorSeed = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Work> works = emc.fetchEqual(Work.class, Arrays.asList(Work.job_FIELDNAME), Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
executorSeed = job;
} else {
throw new ExceptionJobNotExist(job);
}
}
String executorSeed = job;
Callable<Wo> callable = callable(job, path0, path1, path2, path3, jsonElement);
......@@ -55,6 +47,11 @@ class ActionUpdateWithJobPath3 extends BaseAction {
List<Work> works = emc.listEqual(Work.class, Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
updateData(business, works.get(0), jsonElement, path0, path1, path2, path3);
}else{
List<WorkCompleted> workCompletedList = emc.listEqual(WorkCompleted.class, Work.job_FIELDNAME, job);
if(!workCompletedList.isEmpty()) {
updateData(business, workCompletedList.get(0), jsonElement, path0, path1, path2, path3);
}
}
wo.setId(job);
}
......
......@@ -15,6 +15,7 @@ import com.x.base.core.project.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.service.processing.Business;
class ActionUpdateWithJobPath4 extends BaseAction {
......@@ -28,16 +29,7 @@ class ActionUpdateWithJobPath4 extends BaseAction {
() -> path4);
ActionResult<Wo> result = new ActionResult<>();
String executorSeed = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Work> works = emc.fetchEqual(Work.class, Arrays.asList(Work.job_FIELDNAME), Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
executorSeed = job;
} else {
throw new ExceptionJobNotExist(job);
}
}
String executorSeed = job;
Callable<Wo> callable = callable(job, path0, path1, path2, path3, path4, jsonElement);
......@@ -56,6 +48,11 @@ class ActionUpdateWithJobPath4 extends BaseAction {
List<Work> works = emc.listEqual(Work.class, Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
updateData(business, works.get(0), jsonElement, path0, path1, path2, path3, path4);
}else{
List<WorkCompleted> workCompletedList = emc.listEqual(WorkCompleted.class, Work.job_FIELDNAME, job);
if(!workCompletedList.isEmpty()) {
updateData(business, workCompletedList.get(0), jsonElement, path0, path1, path2, path3, path4);
}
}
wo.setId(job);
}
......
......@@ -15,6 +15,7 @@ import com.x.base.core.project.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.service.processing.Business;
class ActionUpdateWithJobPath5 extends BaseAction {
......@@ -28,16 +29,7 @@ class ActionUpdateWithJobPath5 extends BaseAction {
() -> path4, () -> path5);
ActionResult<Wo> result = new ActionResult<>();
String executorSeed = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Work> works = emc.fetchEqual(Work.class, Arrays.asList(Work.job_FIELDNAME), Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
executorSeed = job;
} else {
throw new ExceptionJobNotExist(job);
}
}
String executorSeed = job;
Callable<Wo> callable = callable(job, path0, path1, path2, path3, path4, path5, jsonElement);
......@@ -56,6 +48,11 @@ class ActionUpdateWithJobPath5 extends BaseAction {
List<Work> works = emc.listEqual(Work.class, Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
updateData(business, works.get(0), jsonElement, path0, path1, path2, path3, path4, path5);
}else{
List<WorkCompleted> workCompletedList = emc.listEqual(WorkCompleted.class, Work.job_FIELDNAME, job);
if(!workCompletedList.isEmpty()) {
updateData(business, workCompletedList.get(0), jsonElement, path0, path1, path2, path3, path4, path5);
}
}
wo.setId(job);
}
......
......@@ -15,6 +15,7 @@ import com.x.base.core.project.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.service.processing.Business;
class ActionUpdateWithJobPath6 extends BaseAction {
......@@ -28,16 +29,7 @@ class ActionUpdateWithJobPath6 extends BaseAction {
() -> path4, () -> path5, () -> path6);
ActionResult<Wo> result = new ActionResult<>();
String executorSeed = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Work> works = emc.fetchEqual(Work.class, Arrays.asList(Work.job_FIELDNAME), Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
executorSeed = job;
} else {
throw new ExceptionJobNotExist(job);
}
}
String executorSeed = job;
Callable<Wo> callable = callable(job, path0, path1, path2, path3, path4, path5, path6, jsonElement);
......@@ -56,6 +48,11 @@ class ActionUpdateWithJobPath6 extends BaseAction {
List<Work> works = emc.listEqual(Work.class, Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
updateData(business, works.get(0), jsonElement, path0, path1, path2, path3, path4, path5, path6);
}else{
List<WorkCompleted> workCompletedList = emc.listEqual(WorkCompleted.class, Work.job_FIELDNAME, job);
if(!workCompletedList.isEmpty()) {
updateData(business, workCompletedList.get(0), jsonElement, path0, path1, path2, path3, path4, path5, path6);
}
}
wo.setId(job);
}
......
......@@ -15,6 +15,7 @@ import com.x.base.core.project.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.service.processing.Business;
class ActionUpdateWithJobPath7 extends BaseAction {
......@@ -30,16 +31,7 @@ class ActionUpdateWithJobPath7 extends BaseAction {
() -> path4, () -> path5, () -> path6, () -> path7);
ActionResult<Wo> result = new ActionResult<>();
String executorSeed = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Work> works = emc.fetchEqual(Work.class, Arrays.asList(Work.job_FIELDNAME), Work.job_FIELDNAME, job);
if (!works.isEmpty()) {
executorSeed = job;
} else {
throw new ExceptionJobNotExist(job);
}
}
String executorSeed = job;
Callable<Wo> callable = callable(job, path0, path1, path2, path3, path4, path5, path6, path7, jsonElement);
......@@ -59,6 +51,11 @@ class ActionUpdateWithJobPath7 extends BaseAction {
if (!works.isEmpty()) {
updateData(business, works.get(0), jsonElement, path0, path1, path2, path3, path4, path5, path6,
path7);
}else{
List<WorkCompleted> workCompletedList = emc.listEqual(WorkCompleted.class, Work.job_FIELDNAME, job);
if(!workCompletedList.isEmpty()) {
updateData(business, workCompletedList.get(0), jsonElement, path0, path1, path2, path3, path4, path5, path6, path7);
}
}
wo.setId(job);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册