Преглед изворни кода

Merge branch 'wrdp' into 'develop'

Wrdp

See merge request o2oa/o2oa!1892
o2null пре 5 година
родитељ
комит
e680a87e77

+ 3 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/script/ScriptFactory.java

@@ -264,8 +264,10 @@ public class ScriptFactory {
 						}
 					}
 				} else {
-					list.add(PropertyTools.getOrElse(som, JpaObject.DISTINGUISHEDNAME, String.class, ""));
+					list.add(PropertyTools.getOrElse(o, JpaObject.DISTINGUISHEDNAME, String.class, ""));
 				}
+			} else {
+				list.add(Objects.toString(o, ""));
 			}
 		}
 		return list;

+ 15 - 9
o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/PropertyTools.java

@@ -9,21 +9,27 @@ public class PropertyTools {
 	@SuppressWarnings("unchecked")
 	public static <T> T getOrElse(Object bean, String name, Class<T> cls, T defaultObject) throws Exception {
 		if (null != bean) {
-			if (PropertyUtils.isReadable(bean, name)) {
+			try {
+				// 如果使用PropertyUtils.isReadable那么Nested就会失效,无法获取map类型中的值.
+				// Object o = PropertyUtils.getNestedProperty(bean, name);
 				Object o = PropertyUtils.getProperty(bean, name);
 				if (null != o) {
 					return (T) o;
 				}
-			} else {
-				Field field = FieldUtils.getField(bean.getClass(), name, true);
-				if (null != field) {
-					Object o = FieldUtils.readField(field, bean, true);
-					if (null != o) {
-						return (T) o;
-					}
+			} catch (NoSuchMethodException e) {
+				// java.lang.NoSuchMethodException: Unknown property 'abc' on class 'class
+				// java.lang.Object'
+				// nothing pass
+			}
+			Field field = FieldUtils.getField(bean.getClass(), name, true);
+			if (null != field) {
+				Object o = FieldUtils.readField(field, bean, true);
+				if (null != o) {
+					return (T) o;
 				}
 			}
 		}
 		return defaultObject;
 	}
-}
+
+}

+ 4 - 58
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/ActionCover.java

@@ -128,10 +128,10 @@ class ActionCover extends BaseAction {
 			}
 			if (StringUtils.isNotEmpty(obj.getAlias())) {
 				obj.setAlias(
-						this.idleAliasWithQuery(business, query.getId(), obj.getAlias(), Table.class, obj.getId()));
+						this.idleAliasWithQuery(business, null, obj.getAlias(), Table.class, obj.getId()));
 			}
 			if (StringUtils.isNotEmpty(obj.getName())) {
-				obj.setName(this.idleNameWithQuery(business, query.getId(), obj.getName(), Table.class, obj.getId()));
+				obj.setName(this.idleNameWithQuery(business, null, obj.getName(), Table.class, obj.getId()));
 			}
 			obj.setQuery(query.getId());
 		}
@@ -145,10 +145,10 @@ class ActionCover extends BaseAction {
 			}
 			if (StringUtils.isNotEmpty(obj.getAlias())) {
 				obj.setAlias(
-						this.idleAliasWithQuery(business, query.getId(), obj.getAlias(), Statement.class, obj.getId()));
+						this.idleAliasWithQuery(business, null, obj.getAlias(), Statement.class, obj.getId()));
 			}
 			if (StringUtils.isNotEmpty(obj.getName())) {
-				obj.setName(this.idleNameWithQuery(business, query.getId(), obj.getName(), Statement.class, obj.getId()));
+				obj.setName(this.idleNameWithQuery(business, null, obj.getName(), Statement.class, obj.getId()));
 			}
 			obj.setQuery(query.getId());
 		}
@@ -165,8 +165,6 @@ class ActionCover extends BaseAction {
 		if(!wi.getTableList().isEmpty()){
 			CacheManager.notify(Table.class);
 			CacheManager.notify(Statement.class);
-
-			business.buildAllTable();
 		}else if(!wi.getStatementList().isEmpty()){
 			CacheManager.notify(Statement.class);
 		}
@@ -183,58 +181,6 @@ class ActionCover extends BaseAction {
 		return query;
 	}
 
-	private <T extends JpaObject> String idleNameWithQuery(Business business, String queryId, String name, Class<T> cls,
-			String excludeId) throws Exception {
-		if (StringUtils.isEmpty(name)) {
-			return "";
-		}
-		List<String> list = new ArrayList<>();
-		list.add(name);
-		for (int i = 1; i < 99; i++) {
-			list.add(name + String.format("%02d", i));
-		}
-		list.add(StringTools.uniqueToken());
-		EntityManager em = business.entityManagerContainer().get(cls);
-		CriteriaBuilder cb = em.getCriteriaBuilder();
-		CriteriaQuery<String> cq = cb.createQuery(String.class);
-		Root<T> root = cq.from(cls);
-		Predicate p = root.get("name").in(list);
-		p = cb.and(p, cb.equal(root.get("query"), queryId));
-		if (StringUtils.isNotEmpty(excludeId)) {
-			p = cb.and(p, cb.notEqual(root.get(JpaObject.id_FIELDNAME), excludeId));
-		}
-		cq.select(root.get("name")).where(p);
-		List<String> os = em.createQuery(cq).getResultList();
-		list = ListUtils.subtract(list, os);
-		return list.get(0);
-	}
-
-	private <T extends JpaObject> String idleAliasWithQuery(Business business, String queryId, String alias,
-			Class<T> cls, String excludeId) throws Exception {
-		if (StringUtils.isEmpty(alias)) {
-			return "";
-		}
-		List<String> list = new ArrayList<>();
-		list.add(alias);
-		for (int i = 1; i < 99; i++) {
-			list.add(alias + String.format("%02d", i));
-		}
-		list.add(StringTools.uniqueToken());
-		EntityManager em = business.entityManagerContainer().get(cls);
-		CriteriaBuilder cb = em.getCriteriaBuilder();
-		CriteriaQuery<String> cq = cb.createQuery(String.class);
-		Root<T> root = cq.from(cls);
-		Predicate p = root.get("alias").in(list);
-		p = cb.and(p, cb.equal(root.get("query"), queryId));
-		if (StringUtils.isNotEmpty(excludeId)) {
-			p = cb.and(p, cb.notEqual(root.get(JpaObject.id_FIELDNAME), excludeId));
-		}
-		cq.select(root.get("alias")).where(p);
-		List<String> os = em.createQuery(cq).getResultList();
-		list = ListUtils.subtract(list, os);
-		return list.get(0);
-	}
-
 	public static class Wi extends WrapQuery {
 
 		private static final long serialVersionUID = -4612391443319365035L;

+ 15 - 2
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/ActionCreate.java

@@ -22,6 +22,7 @@ import com.x.query.core.entity.View;
 import com.x.query.core.entity.schema.Statement;
 import com.x.query.core.entity.schema.Table;
 import com.x.query.core.entity.wrap.*;
+import org.apache.commons.lang3.StringUtils;
 
 class ActionCreate extends BaseAction {
 
@@ -79,6 +80,13 @@ class ActionCreate extends BaseAction {
 			}
 			obj = WrapTable.inCopier.copy(_o);
 			obj.setQuery(query.getId());
+			if (StringUtils.isNotEmpty(obj.getAlias())) {
+				obj.setAlias(
+						this.idleAliasWithQuery(business, null, obj.getAlias(), Table.class, obj.getId()));
+			}
+			if (StringUtils.isNotEmpty(obj.getName())) {
+				obj.setName(this.idleNameWithQuery(business, null, obj.getName(), Table.class, obj.getId()));
+			}
 			persistObjects.add(obj);
 		}
 		for (WrapStatement _o : wi.getStatementList()) {
@@ -88,6 +96,13 @@ class ActionCreate extends BaseAction {
 			}
 			obj = WrapStatement.inCopier.copy(_o);
 			obj.setQuery(query.getId());
+			if (StringUtils.isNotEmpty(obj.getAlias())) {
+				obj.setAlias(
+						this.idleAliasWithQuery(business, null, obj.getAlias(), Statement.class, obj.getId()));
+			}
+			if (StringUtils.isNotEmpty(obj.getName())) {
+				obj.setName(this.idleNameWithQuery(business, null, obj.getName(), Statement.class, obj.getId()));
+			}
 			persistObjects.add(obj);
 		}
 		for (WrapReveal _o : wi.getRevealList()) {
@@ -112,8 +127,6 @@ class ActionCreate extends BaseAction {
 		if(!wi.getTableList().isEmpty()){
 			CacheManager.notify(Table.class);
 			CacheManager.notify(Statement.class);
-
-			business.buildAllTable();
 		}else if(!wi.getStatementList().isEmpty()){
 			CacheManager.notify(Statement.class);
 		}

+ 56 - 0
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/BaseAction.java

@@ -95,4 +95,60 @@ abstract class BaseAction extends StandardJaxrsAction {
 		return list.get(0);
 	}
 
+	protected <T extends JpaObject> String idleNameWithQuery(Business business, String queryId, String name, Class<T> cls,
+														   String excludeId) throws Exception {
+		if (StringUtils.isEmpty(name)) {
+			return "";
+		}
+		List<String> list = new ArrayList<>();
+		list.add(name);
+		for (int i = 1; i < 99; i++) {
+			list.add(name + String.format("%02d", i));
+		}
+		list.add(StringTools.uniqueToken());
+		EntityManager em = business.entityManagerContainer().get(cls);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<T> root = cq.from(cls);
+		Predicate p = root.get("name").in(list);
+		if (StringUtils.isNotEmpty(queryId)) {
+			p = cb.and(p, cb.equal(root.get("query"), queryId));
+		}
+		if (StringUtils.isNotEmpty(excludeId)) {
+			p = cb.and(p, cb.notEqual(root.get(JpaObject.id_FIELDNAME), excludeId));
+		}
+		cq.select(root.get("name")).where(p);
+		List<String> os = em.createQuery(cq).getResultList();
+		list = ListUtils.subtract(list, os);
+		return list.get(0);
+	}
+
+	protected <T extends JpaObject> String idleAliasWithQuery(Business business, String queryId, String alias,
+															Class<T> cls, String excludeId) throws Exception {
+		if (StringUtils.isEmpty(alias)) {
+			return "";
+		}
+		List<String> list = new ArrayList<>();
+		list.add(alias);
+		for (int i = 1; i < 99; i++) {
+			list.add(alias + String.format("%02d", i));
+		}
+		list.add(StringTools.uniqueToken());
+		EntityManager em = business.entityManagerContainer().get(cls);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<T> root = cq.from(cls);
+		Predicate p = root.get("alias").in(list);
+		if (StringUtils.isNotEmpty(queryId)) {
+			p = cb.and(p, cb.equal(root.get("query"), queryId));
+		}
+		if (StringUtils.isNotEmpty(excludeId)) {
+			p = cb.and(p, cb.notEqual(root.get(JpaObject.id_FIELDNAME), excludeId));
+		}
+		cq.select(root.get("alias")).where(p);
+		List<String> os = em.createQuery(cq).getResultList();
+		list = ListUtils.subtract(list, os);
+		return list.get(0);
+	}
+
 }

+ 37 - 1
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/query/ActionDelete.java

@@ -25,13 +25,17 @@ import com.x.query.core.entity.Stat;
 import com.x.query.core.entity.Stat_;
 import com.x.query.core.entity.View;
 import com.x.query.core.entity.View_;
+import com.x.query.core.entity.schema.Statement;
+import com.x.query.core.entity.schema.Statement_;
+import com.x.query.core.entity.schema.Table;
+import com.x.query.core.entity.schema.Table_;
 
 class ActionDelete extends BaseAction {
 
 	private static Logger logger = LoggerFactory.getLogger(ActionDelete.class);
 
 	ActionResult<Wo> execute(EffectivePerson effectivePerson, String flag) throws Exception {
-		logger.debug(effectivePerson, "flag:{}.", flag);
+		logger.print( "{} delete query flag:{}.",effectivePerson.getDistinguishedName(), flag);
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
 			ActionResult<Wo> result = new ActionResult<>();
 			Business business = new Business(emc);
@@ -58,6 +62,16 @@ class ActionDelete extends BaseAction {
 				emc.remove(_o, CheckRemoveType.all);
 			}
 			emc.commit();
+			emc.beginTransaction(Statement.class);
+			for (Statement _o : this.listStatement(business, query)) {
+				emc.remove(_o, CheckRemoveType.all);
+			}
+			emc.commit();
+			emc.beginTransaction(Table.class);
+			for (Table _o : this.listTable(business, query)) {
+				emc.remove(_o, CheckRemoveType.all);
+			}
+			emc.commit();
 			emc.beginTransaction(Query.class);
 			emc.remove(query, CheckRemoveType.all);
 			emc.commit();
@@ -65,6 +79,8 @@ class ActionDelete extends BaseAction {
 			CacheManager.notify(Stat.class);
 			CacheManager.notify(Reveal.class);
 			CacheManager.notify(Query.class);
+			CacheManager.notify(Table.class);
+			CacheManager.notify(Statement.class);
 			Wo wo = new Wo();
 			wo.setId(query.getId());
 			result.setData(wo);
@@ -102,6 +118,26 @@ class ActionDelete extends BaseAction {
 		return os;
 	}
 
+	private List<Table> listTable(Business business, Query query) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Table.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Table> cq = cb.createQuery(Table.class);
+		Root<Table> root = cq.from(Table.class);
+		Predicate p = cb.equal(root.get(Table_.query), query.getId());
+		List<Table> os = em.createQuery(cq.select(root).where(p)).getResultList();
+		return os;
+	}
+
+	private List<Statement> listStatement(Business business, Query query) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Statement.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Statement> cq = cb.createQuery(Statement.class);
+		Root<Statement> root = cq.from(Statement.class);
+		Predicate p = cb.equal(root.get(Statement_.query), query.getId());
+		List<Statement> os = em.createQuery(cq.select(root).where(p)).getResultList();
+		return os;
+	}
+
 	public static class Wo extends WoId {
 	}
 }

+ 38 - 0
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/ActionBuild.java

@@ -0,0 +1,38 @@
+package com.x.query.assemble.designer.jaxrs.table;
+
+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.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WrapBoolean;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.query.assemble.designer.Business;
+
+class ActionBuild extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionBuild.class);
+
+	ActionResult<Wo> execute(EffectivePerson effectivePerson) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ActionResult<Wo> result = new ActionResult<>();
+			Wo wo = new Wo();
+			Business business = new Business(emc);
+			if (!business.controllable(effectivePerson)) {
+				throw new ExceptionAccessDenied(effectivePerson);
+			}
+
+			wo.setValue(business.buildAllTable());
+			logger.print("build table complete!");
+			result.setData(wo);
+
+			return result;
+		}
+	}
+
+	public static class Wo extends WrapBoolean {
+
+	}
+
+}

+ 21 - 2
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/ActionBuildAll.java

@@ -2,13 +2,21 @@ package com.x.query.assemble.designer.jaxrs.table;
 
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.Application;
+import com.x.base.core.project.connection.CipherConnectionAction;
 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.base.core.project.jaxrs.WrapBoolean;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.base.core.project.x_query_assemble_designer;
 import com.x.query.assemble.designer.Business;
+import com.x.query.assemble.designer.ThisApplication;
+
+import java.util.Date;
+import java.util.List;
 
 class ActionBuildAll extends BaseAction {
 
@@ -22,8 +30,19 @@ class ActionBuildAll extends BaseAction {
 			if (!business.controllable(effectivePerson)) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
-
-			wo.setValue(business.buildAllTable());
+			List<Application> apps = ThisApplication.context().applications().get(x_query_assemble_designer.class);
+			if (ListTools.isNotEmpty(apps)) {
+				apps.stream().forEach(o -> {
+					String url = o.getUrlJaxrsRoot() + "table/build?tt="+new Date().getTime();
+					logger.print("{} do dispatch build table request to : {}", effectivePerson.getDistinguishedName(), url);
+					try {
+						CipherConnectionAction.get(effectivePerson.getDebugger(), url);
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				});
+			}
+			wo.setValue(true);
 
 			result.setData(wo);
 

+ 19 - 2
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/TableAction.java

@@ -53,12 +53,12 @@ public class TableAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe(value = "编译表对象生成实体类进行数据库建表,执行后需要重新启动.", action = ActionBuildAll.class)
+	@JaxrsMethodDescribe(value = "编译表对象生成实体类进行数据库建表,执行后需要重新启动,支持集群环境.", action = ActionBuildAll.class)
 	@GET
 	@Path("build/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public void buildAll(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
+	public synchronized void buildAll(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<ActionBuildAll.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
@@ -70,6 +70,23 @@ public class TableAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
+	@JaxrsMethodDescribe(value = "编译表对象生成实体类进行数据库建表,执行后需要重新启动,仅对当前服务器.", action = ActionBuild.class)
+	@GET
+	@Path("build")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void build(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
+		ActionResult<ActionBuild.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionBuild().execute(effectivePerson);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
 	@JaxrsMethodDescribe(value = "根据标识获取表.", action = ActionGet.class)
 	@GET
 	@Path("{flag}")

+ 2 - 0
o2web/source/o2_core/o2/xAction/services/x_processplatform_assemble_surface.json

@@ -245,6 +245,8 @@
   "resetWork": {"uri": "/jaxrs/task/{id}/reset", "method": "PUT"},
 
   "deleteWork": {"uri": "/jaxrs/work/{id}", "method": "DELETE"},
+  "abandoned": {"uri": "/jaxrs/snap/work/{workId}/type/abandoned"},
+
 
   "getJobByWorkAssignForm": {"uri": "/jaxrs/work/{id}/complex/appoint/form/{formTag}"},
   "getJobByWorkAssignFormMobile": {"uri": "/jaxrs/work/{id}/complex/appoint/form/{formTag}/mobile"},

+ 4 - 2
o2web/source/x_component_process_Xform/Form.js

@@ -3814,12 +3814,14 @@ MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class({
             this.doDeleteDraftWork(success, failure);
         } else {
             if (this.businessData.control["allowDelete"]) {
-                this.workAction.deleteWork(function (json) {
+                //this.workAction.deleteWork(function (json) {
+                this.workAction.abandoned(function (json) {
                     if (success) success(json);
                 }.bind(this), function (xhr, text, error) {
                     if (failure) failure(xhr, text, error);
                 }, this.businessData.work.id);
-            } else {
+            //}
+            }else {
                 if (failure) failure(null, "Permission Denied", "");
             }
         }