From 7693557bf0101f8f83914f392270208dc3276176 Mon Sep 17 00:00:00 2001 From: o2null Date: Wed, 9 Dec 2020 20:06:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9B=B4=E6=96=B0=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E6=97=A0=E6=B3=95=E5=8F=8A=E6=97=B6=E6=9B=B4=E6=96=B0?= =?UTF-8?q?etag=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../surface/jaxrs/form/BaseAction.java | 5 --- .../form/V2LookupWorkOrWorkCompleted.java | 38 +++++++++++-------- .../V2LookupWorkOrWorkCompletedMobile.java | 36 ++++++++++-------- 3 files changed, 43 insertions(+), 36 deletions(-) diff --git a/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/BaseAction.java b/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/BaseAction.java index cece7c6362..ece009708e 100644 --- a/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/BaseAction.java +++ b/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/BaseAction.java @@ -5,11 +5,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.TreeMap; -import java.util.concurrent.CompletableFuture; -import com.x.base.core.container.EntityManagerContainer; -import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.project.cache.Cache.CacheCategory; import com.x.base.core.project.jaxrs.StandardJaxrsAction; import com.x.base.core.project.jaxrs.WoMaxAgeFastETag; @@ -20,7 +16,6 @@ import com.x.processplatform.core.entity.content.WorkCompletedProperties; import com.x.processplatform.core.entity.content.WorkCompletedProperties.RelatedForm; import com.x.processplatform.core.entity.content.WorkCompletedProperties.RelatedScript; import com.x.processplatform.core.entity.element.Form; -import com.x.processplatform.core.entity.element.FormProperties; import com.x.processplatform.core.entity.element.Script; abstract class BaseAction extends StandardJaxrsAction { diff --git a/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2LookupWorkOrWorkCompleted.java b/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2LookupWorkOrWorkCompleted.java index 88915f3ca6..165254a006 100644 --- a/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2LookupWorkOrWorkCompleted.java +++ b/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2LookupWorkOrWorkCompleted.java @@ -48,19 +48,26 @@ class V2LookupWorkOrWorkCompleted extends BaseAction { if (optional.isPresent()) { this.wo = (Wo) optional.get(); } else { - List list = new ArrayList<>(); - CompletableFuture> relatedFormFuture = this.relatedFormFuture(this.form.getProperties()); - CompletableFuture> relatedScriptFuture = this - .relatedScriptFuture(this.form.getProperties()); - list.add(this.form.getId() + this.form.getUpdateTime().getTime()); - list.addAll(relatedFormFuture.get(10, TimeUnit.SECONDS)); - list.addAll(relatedScriptFuture.get(10, TimeUnit.SECONDS)); - list = list.stream().sorted().collect(Collectors.toList()); - this.wo.setId(this.form.getId()); - CRC32 crc = new CRC32(); - crc.update(StringUtils.join(list, "#").getBytes()); - this.wo.setCacheTag(crc.getValue() + ""); - CacheManager.put(cacheCategory, cacheKey, wo); + // 必须重新取出,因为getWorkWorkCompletedForm的form是从缓存中取出,关联值是老的,要重新计算etag需要重新获取更新后的值. + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + this.form = emc.find(form.getId(), Form.class); + } + if (null != this.form) { + List list = new ArrayList<>(); + CompletableFuture> relatedFormFuture = this + .relatedFormFuture(this.form.getProperties()); + CompletableFuture> relatedScriptFuture = this + .relatedScriptFuture(this.form.getProperties()); + list.add(this.form.getId() + this.form.getUpdateTime().getTime()); + list.addAll(relatedFormFuture.get(10, TimeUnit.SECONDS)); + list.addAll(relatedScriptFuture.get(10, TimeUnit.SECONDS)); + list = list.stream().sorted().collect(Collectors.toList()); + this.wo.setId(this.form.getId()); + CRC32 crc = new CRC32(); + crc.update(StringUtils.join(list, "#").getBytes()); + this.wo.setCacheTag(crc.getValue() + ""); + CacheManager.put(cacheCategory, cacheKey, wo); + } } } result.setData(wo); @@ -99,10 +106,9 @@ class V2LookupWorkOrWorkCompleted extends BaseAction { List list = new ArrayList<>(); if (ListTools.isNotEmpty(properties.getRelatedFormList())) { try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { - Business business = new Business(emc); Form f; for (String id : properties.getRelatedFormList()) { - f = business.form().pick(id); + f = emc.find(id, Form.class); if (null != f) { list.add(f.getId() + f.getUpdateTime().getTime()); } @@ -121,7 +127,7 @@ class V2LookupWorkOrWorkCompleted extends BaseAction { if ((null != properties.getRelatedScriptMap()) && (properties.getRelatedScriptMap().size() > 0)) { try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { Business business = new Business(emc); - list = convertScriptToCacheTag(business, properties.getMobileRelatedScriptMap()); + list = convertScriptToCacheTag(business, properties.getRelatedScriptMap()); } catch (Exception e) { logger.error(e); } diff --git a/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2LookupWorkOrWorkCompletedMobile.java b/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2LookupWorkOrWorkCompletedMobile.java index cc680a9ad8..c4a784f3be 100644 --- a/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2LookupWorkOrWorkCompletedMobile.java +++ b/o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2LookupWorkOrWorkCompletedMobile.java @@ -48,19 +48,26 @@ class V2LookupWorkOrWorkCompletedMobile extends BaseAction { if (optional.isPresent()) { this.wo = (Wo) optional.get(); } else { - List list = new ArrayList<>(); - CompletableFuture> relatedFormFuture = this.relatedFormFuture(this.form.getProperties()); - CompletableFuture> relatedScriptFuture = this - .relatedScriptFuture(this.form.getProperties()); - list.add(this.form.getId() + this.form.getUpdateTime().getTime()); - list.addAll(relatedFormFuture.get(10, TimeUnit.SECONDS)); - list.addAll(relatedScriptFuture.get(10, TimeUnit.SECONDS)); - list = list.stream().sorted().collect(Collectors.toList()); - this.wo.setId(this.form.getId()); - CRC32 crc = new CRC32(); - crc.update(StringUtils.join(list, "#").getBytes()); - this.wo.setCacheTag(crc.getValue() + ""); - CacheManager.put(cacheCategory, cacheKey, wo); + // 必须重新取出,因为getWorkWorkCompletedForm的form是从缓存中取出,关联值是老的,要重新计算etag需要重新获取更新后的值. + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + this.form = emc.find(form.getId(), Form.class); + } + if (null != this.form) { + List list = new ArrayList<>(); + CompletableFuture> relatedFormFuture = this + .relatedFormFuture(this.form.getProperties()); + CompletableFuture> relatedScriptFuture = this + .relatedScriptFuture(this.form.getProperties()); + list.add(this.form.getId() + this.form.getUpdateTime().getTime()); + list.addAll(relatedFormFuture.get(10, TimeUnit.SECONDS)); + list.addAll(relatedScriptFuture.get(10, TimeUnit.SECONDS)); + list = list.stream().sorted().collect(Collectors.toList()); + this.wo.setId(this.form.getId()); + CRC32 crc = new CRC32(); + crc.update(StringUtils.join(list, "#").getBytes()); + this.wo.setCacheTag(crc.getValue() + ""); + CacheManager.put(cacheCategory, cacheKey, wo); + } } } result.setData(wo); @@ -99,10 +106,9 @@ class V2LookupWorkOrWorkCompletedMobile extends BaseAction { List list = new ArrayList<>(); if (ListTools.isNotEmpty(properties.getMobileRelatedFormList())) { try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { - Business business = new Business(emc); Form f; for (String id : properties.getMobileRelatedFormList()) { - f = business.form().pick(id); + f = emc.find(id, Form.class); if (null != f) { list.add(f.getId() + f.getUpdateTime().getTime()); } -- GitLab