diff --git a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/ActionCover.java b/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/ActionCover.java index b495ba5855eae6d8d1a2005a4a343539416d9de4..7cec6cdbefe536dd6d9ea7c426e0010edb0bec5b 100644 --- a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/ActionCover.java +++ b/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 String idleNameWithQuery(Business business, String queryId, String name, Class cls, - String excludeId) throws Exception { - if (StringUtils.isEmpty(name)) { - return ""; - } - List 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 cq = cb.createQuery(String.class); - Root 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 os = em.createQuery(cq).getResultList(); - list = ListUtils.subtract(list, os); - return list.get(0); - } - - private String idleAliasWithQuery(Business business, String queryId, String alias, - Class cls, String excludeId) throws Exception { - if (StringUtils.isEmpty(alias)) { - return ""; - } - List 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 cq = cb.createQuery(String.class); - Root 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 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; diff --git a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/ActionCreate.java b/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/ActionCreate.java index b715db16b030ff6d2640a1c4a78536ce0db3219f..3040bf26310fd6d88680024c613ea7dd98debc69 100644 --- a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/ActionCreate.java +++ b/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); } diff --git a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/BaseAction.java b/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/BaseAction.java index 63912b319ac59ce8a056b6a1259470c93de3929f..d8c4fb444e1f3e4b00ef20a5cc34fd6f0f91062b 100644 --- a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/input/BaseAction.java +++ b/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 String idleNameWithQuery(Business business, String queryId, String name, Class cls, + String excludeId) throws Exception { + if (StringUtils.isEmpty(name)) { + return ""; + } + List 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 cq = cb.createQuery(String.class); + Root 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 os = em.createQuery(cq).getResultList(); + list = ListUtils.subtract(list, os); + return list.get(0); + } + + protected String idleAliasWithQuery(Business business, String queryId, String alias, + Class cls, String excludeId) throws Exception { + if (StringUtils.isEmpty(alias)) { + return ""; + } + List 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 cq = cb.createQuery(String.class); + Root 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 os = em.createQuery(cq).getResultList(); + list = ListUtils.subtract(list, os); + return list.get(0); + } + } \ No newline at end of file diff --git a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/query/ActionDelete.java b/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/query/ActionDelete.java index 1b5eac61386b36ecd9168e42b3cd244b417cfc58..c0f50913c33e02e933d99e80fd3dfa9a8373bdc7 100644 --- a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/query/ActionDelete.java +++ b/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 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 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 listTable(Business business, Query query) throws Exception { + EntityManager em = business.entityManagerContainer().get(Table.class); + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery
cq = cb.createQuery(Table.class); + Root
root = cq.from(Table.class); + Predicate p = cb.equal(root.get(Table_.query), query.getId()); + List
os = em.createQuery(cq.select(root).where(p)).getResultList(); + return os; + } + + private List listStatement(Business business, Query query) throws Exception { + EntityManager em = business.entityManagerContainer().get(Statement.class); + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(Statement.class); + Root root = cq.from(Statement.class); + Predicate p = cb.equal(root.get(Statement_.query), query.getId()); + List os = em.createQuery(cq.select(root).where(p)).getResultList(); + return os; + } + public static class Wo extends WoId { } } diff --git a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/ActionBuild.java b/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/ActionBuild.java new file mode 100644 index 0000000000000000000000000000000000000000..8d7d5e278c58079770cd1703ecb1845e87c24541 --- /dev/null +++ b/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 execute(EffectivePerson effectivePerson) throws Exception { + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + ActionResult 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 { + + } + +} \ No newline at end of file diff --git a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/ActionBuildAll.java b/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/ActionBuildAll.java index 8bb600fd8baa441e6496ea980c1afbbbcc398ed3..69d33c4e4674135e8f02417af970a392c9735fff 100644 --- a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/ActionBuildAll.java +++ b/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 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); diff --git a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/TableAction.java b/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/TableAction.java index 91f9fc54c6950b6bd7d918fe7a866b5f738e163f..4051aab9255daa0a233032096706e745fb36753d 100644 --- a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/table/TableAction.java +++ b/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 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 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}")