diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/PersistenceXmlHelper.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/PersistenceXmlHelper.java index 529a861acc8b5b40c420eee19dbefa0449f153c5..df1cbbb9cda038a8d83b087a181faec90ecfc161 100644 --- a/o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/PersistenceXmlHelper.java +++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/PersistenceXmlHelper.java @@ -282,8 +282,8 @@ public class PersistenceXmlHelper { properties.put("openjpa.QueryCompilationCache", "false"); properties.put("openjpa.LockManager", "none"); properties.put("openjpa.jdbc.ResultSetType", "scroll-insensitive"); - //使用false,使用ture支持多线程访问,但是是通过lock同步执行的. - properties.put("openjpa.Multithreaded", "false"); + // 使用ture支持多线程访问,但是是通过lock同步执行的. + properties.put("openjpa.Multithreaded", "true"); /* 如果启用本地初始化会导致classLoad的问题 */ properties.put("openjpa.DynamicEnhancementAgent", "false"); properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=false)"); diff --git a/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecute.java b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecute.java index eb651abe145fd0b54127d9003cd583ff072e5062..29a2a5d390e47d9ee27df6c88ad59b1b868bca60 100644 --- a/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecute.java +++ b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecute.java @@ -1,6 +1,6 @@ package com.x.query.assemble.surface.jaxrs.statement; -import java.util.Objects; +import java.util.Optional; import javax.persistence.EntityManager; import javax.persistence.Parameter; @@ -10,14 +10,16 @@ import javax.script.CompiledScript; import javax.script.ScriptContext; import javax.script.SimpleScriptContext; -import com.x.base.core.entity.dynamic.DynamicBaseEntity; 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.entity.JpaObject; +import com.x.base.core.entity.dynamic.DynamicBaseEntity; import com.x.base.core.entity.dynamic.DynamicEntity; +import com.x.base.core.project.cache.Cache.CacheKey; +import com.x.base.core.project.cache.CacheManager; import com.x.base.core.project.exception.ExceptionAccessDenied; import com.x.base.core.project.exception.ExceptionEntityNotExist; import com.x.base.core.project.http.ActionResult; @@ -31,54 +33,50 @@ import com.x.query.assemble.surface.ThisApplication; import com.x.query.core.entity.schema.Statement; import com.x.query.core.entity.schema.Table; import com.x.query.core.express.statement.Runtime; -import com.x.base.core.project.cache.Cache.CacheKey; -import com.x.base.core.project.cache.CacheManager; -import java.util.Optional; class ActionExecute extends BaseAction { ActionResult execute(EffectivePerson effectivePerson, String flag, Integer page, Integer size, JsonElement jsonElement) throws Exception { + ActionResult result = new ActionResult<>(); + Statement statement = this.getStatement(flag); + if (null == statement) { + throw new ExceptionEntityNotExist(flag, Statement.class); + } + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { - ActionResult result = new ActionResult<>(); Business business = new Business(emc); - Statement statement = this.getStatement(business, flag); - if (null == statement) { - throw new ExceptionEntityNotExist(flag, Statement.class); - } - if (!business.executable(effectivePerson, statement)) { throw new ExceptionAccessDenied(effectivePerson, statement); } + } - Runtime runtime = this.runtime(effectivePerson, jsonElement, business, page, size); + Runtime runtime = this.runtime(effectivePerson, jsonElement, page, size); - Object data = null; + Object data = null; - switch (Objects.toString(statement.getFormat(), "")) { - case Statement.FORMAT_SCRIPT: - data = this.script(effectivePerson, business, statement, runtime); - break; - default: - data = this.jpql(effectivePerson, business, statement, runtime); - break; - } - result.setData(data); - return result; + if (StringUtils.equals(statement.getFormat(), Statement.FORMAT_SCRIPT)) { + data = this.script(effectivePerson, statement, runtime); + } else { + data = this.jpql(effectivePerson, statement, runtime); } + result.setData(data); + return result; } - private Statement getStatement(Business business, String flag) throws Exception { + private Statement getStatement(String flag) throws Exception { Statement statement = null; CacheKey cacheKey = new CacheKey(this.getClass(), flag); Optional optional = CacheManager.get(cache, cacheKey); if (optional.isPresent()) { statement = (Statement) optional.get(); } else { - statement = business.entityManagerContainer().flag(flag, Statement.class); - if (null != statement) { - CacheManager.put(cache, cacheKey, statement); + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + statement = emc.flag(flag, Statement.class); + if (null != statement) { + CacheManager.put(cache, cacheKey, statement); + } } } return statement; @@ -86,8 +84,7 @@ class ActionExecute extends BaseAction { private CompiledScript getCompiledScriptOfScriptText(Statement statement) throws Exception { CompiledScript compiledScript = null; - CacheKey cacheKey = new CacheKey(this.getClass(), statement.getId(), - Statement.scriptText_FIELDNAME); + CacheKey cacheKey = new CacheKey(this.getClass(), statement.getId(), Statement.scriptText_FIELDNAME); Optional optional = CacheManager.get(cache, cacheKey); if (optional.isPresent()) { compiledScript = (CompiledScript) optional.get(); @@ -98,69 +95,70 @@ class ActionExecute extends BaseAction { return compiledScript; } - private Object script(EffectivePerson effectivePerson, Business business, Statement statement, Runtime runtime) - throws Exception { + private Object script(EffectivePerson effectivePerson, Statement statement, Runtime runtime) throws Exception { Object data = null; - - ScriptContext scriptContext = this.scriptContext(effectivePerson, business, runtime); - - ScriptFactory.initialServiceScriptText().eval(scriptContext); - - CompiledScript compiledScript = this.getCompiledScriptOfScriptText(statement); - Object o = compiledScript.eval(scriptContext); - String text = ScriptFactory.asString(o); - Class cls = this.clazz(business, statement); - EntityManager em; - if(StringUtils.equalsIgnoreCase(statement.getEntityCategory(), Statement.ENTITYCATEGORY_DYNAMIC) - && StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)){ - em = business.entityManagerContainer().get(DynamicBaseEntity.class); - }else{ - em = business.entityManagerContainer().get(cls); - } - Query query = em.createQuery(text); - for (Parameter p : query.getParameters()) { - if (runtime.hasParameter(p.getName())) { - query.setParameter(p.getName(), runtime.getParameter(p.getName())); + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + Business business = new Business(emc); + ScriptContext scriptContext = this.scriptContext(effectivePerson, business, runtime); + ScriptFactory.initialServiceScriptText().eval(scriptContext); + CompiledScript compiledScript = this.getCompiledScriptOfScriptText(statement); + Object o = compiledScript.eval(scriptContext); + String text = ScriptFactory.asString(o); + Class cls = this.clazz(business, statement); + EntityManager em; + if (StringUtils.equalsIgnoreCase(statement.getEntityCategory(), Statement.ENTITYCATEGORY_DYNAMIC) + && StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) { + em = business.entityManagerContainer().get(DynamicBaseEntity.class); + } else { + em = business.entityManagerContainer().get(cls); + } + Query query = em.createQuery(text); + for (Parameter p : query.getParameters()) { + if (runtime.hasParameter(p.getName())) { + query.setParameter(p.getName(), runtime.getParameter(p.getName())); + } + } + if (StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) { + query.setFirstResult((runtime.page - 1) * runtime.size); + query.setMaxResults(runtime.size); + data = query.getResultList(); + } else { + business.entityManagerContainer().beginTransaction(cls); + data = query.executeUpdate(); + business.entityManagerContainer().commit(); } - } - if (StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) { - query.setFirstResult((runtime.page - 1) * runtime.size); - query.setMaxResults(runtime.size); - data = query.getResultList(); - } else { - business.entityManagerContainer().beginTransaction(cls); - data = query.executeUpdate(); - business.entityManagerContainer().commit(); } return data; } - private Object jpql(EffectivePerson effectivePerson, Business business, Statement statement, Runtime runtime) - throws Exception { + private Object jpql(EffectivePerson effectivePerson, Statement statement, Runtime runtime) throws Exception { Object data = null; - Class cls = this.clazz(business, statement); - EntityManager em; - if(StringUtils.equalsIgnoreCase(statement.getEntityCategory(), Statement.ENTITYCATEGORY_DYNAMIC) - && StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)){ - em = business.entityManagerContainer().get(DynamicBaseEntity.class); - }else{ - em = business.entityManagerContainer().get(cls); - } + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + Business business = new Business(emc); + Class cls = this.clazz(business, statement); + EntityManager em; + if (StringUtils.equalsIgnoreCase(statement.getEntityCategory(), Statement.ENTITYCATEGORY_DYNAMIC) + && StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) { + em = business.entityManagerContainer().get(DynamicBaseEntity.class); + } else { + em = business.entityManagerContainer().get(cls); + } - Query query = em.createQuery(statement.getData()); - for (Parameter p : query.getParameters()) { - if (runtime.hasParameter(p.getName())) { - query.setParameter(p.getName(), runtime.getParameter(p.getName())); + Query query = em.createQuery(statement.getData()); + for (Parameter p : query.getParameters()) { + if (runtime.hasParameter(p.getName())) { + query.setParameter(p.getName(), runtime.getParameter(p.getName())); + } + } + if (StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) { + query.setFirstResult((runtime.page - 1) * runtime.size); + query.setMaxResults(runtime.size); + data = query.getResultList(); + } else { + business.entityManagerContainer().beginTransaction(cls); + data = query.executeUpdate(); + business.entityManagerContainer().commit(); } - } - if (StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) { - query.setFirstResult((runtime.page - 1) * runtime.size); - query.setMaxResults(runtime.size); - data = query.getResultList(); - } else { - business.entityManagerContainer().beginTransaction(cls); - data = query.executeUpdate(); - business.entityManagerContainer().commit(); } return data; } diff --git a/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecuteV2.java b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecuteV2.java index e1996d3e660c5d0168424bd066a5df62487323d4..ab09c970720f967fc13e26c1684311d675bcb0df 100644 --- a/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecuteV2.java +++ b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecuteV2.java @@ -43,161 +43,166 @@ import java.util.regex.Pattern; class ActionExecuteV2 extends BaseAction { private static Logger logger = LoggerFactory.getLogger(ActionExecuteV2.class); - private final static String[] keys = {"group by","GROUP BY","order by","ORDER BY","limit","LIMIT"}; + private final static String[] keys = { "group by", "GROUP BY", "order by", "ORDER BY", "limit", "LIMIT" }; private final static String JOIN_KEY = " JOIN "; private final static String JOIN_ON_KEY = " ON "; ActionResult execute(EffectivePerson effectivePerson, String flag, String mode, Integer page, Integer size, JsonElement jsonElement) throws Exception { - + Statement statement = null; + ActionResult result = new ActionResult<>(); try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { - ActionResult result = new ActionResult<>(); Business business = new Business(emc); - Statement statement = emc.flag(flag, Statement.class); + statement = emc.flag(flag, Statement.class); if (null == statement) { throw new ExceptionEntityNotExist(flag, Statement.class); } if (!business.executable(effectivePerson, statement)) { throw new ExceptionAccessDenied(effectivePerson, statement); } - Wi wi = this.convertToWrapIn(jsonElement, Wi.class); - Runtime runtime = this.runtime(effectivePerson, wi.getParameter(), business, page, size); + } + Wi wi = this.convertToWrapIn(jsonElement, Wi.class); + Runtime runtime = this.runtime(effectivePerson, wi.getParameter(), page, size); - Object data = null; - Object count = null; - switch (mode){ - case Statement.MODE_DATA: - switch (Objects.toString(statement.getFormat(), "")) { - case Statement.FORMAT_SCRIPT: - data = this.script(effectivePerson, business, statement, runtime, mode, wi); - break; - default: - data = this.jpql(effectivePerson, business, statement, runtime, mode, wi); - break; - } - result.setData(data); - break; - case Statement.MODE_COUNT: - switch (Objects.toString(statement.getFormat(), "")) { - case Statement.FORMAT_SCRIPT: - count = this.script(effectivePerson, business, statement, runtime, mode, wi); - break; - default: - count = this.jpql(effectivePerson, business, statement, runtime, mode, wi); - break; - } - result.setData(count); - result.setCount((Long)count); - break; - default: - switch (Objects.toString(statement.getFormat(), "")) { - case Statement.FORMAT_SCRIPT: - data = this.script(effectivePerson, business, statement, runtime, Statement.MODE_DATA, wi); - count = this.script(effectivePerson, business, statement, runtime, Statement.MODE_COUNT, wi); - break; - default: - data = this.jpql(effectivePerson, business, statement, runtime, Statement.MODE_DATA, wi); - count = this.jpql(effectivePerson, business, statement, runtime, Statement.MODE_COUNT, wi); - break; - } - result.setData(data); - result.setCount((Long)count); + Object data = null; + Object count = null; + switch (mode) { + case Statement.MODE_DATA: + switch (Objects.toString(statement.getFormat(), "")) { + case Statement.FORMAT_SCRIPT: + data = this.script(effectivePerson, statement, runtime, mode, wi); + break; + default: + data = this.jpql(effectivePerson, statement, runtime, mode, wi); + break; + } + result.setData(data); + break; + case Statement.MODE_COUNT: + switch (Objects.toString(statement.getFormat(), "")) { + case Statement.FORMAT_SCRIPT: + count = this.script(effectivePerson, statement, runtime, mode, wi); + break; + default: + count = this.jpql(effectivePerson, statement, runtime, mode, wi); + break; } - return result; + result.setData(count); + result.setCount((Long) count); + break; + default: + switch (Objects.toString(statement.getFormat(), "")) { + case Statement.FORMAT_SCRIPT: + data = this.script(effectivePerson, statement, runtime, Statement.MODE_DATA, wi); + count = this.script(effectivePerson, statement, runtime, Statement.MODE_COUNT, wi); + break; + default: + data = this.jpql(effectivePerson, statement, runtime, Statement.MODE_DATA, wi); + count = this.jpql(effectivePerson, statement, runtime, Statement.MODE_COUNT, wi); + break; + } + result.setData(data); + result.setCount((Long) count); } + return result; } - private Object script(EffectivePerson effectivePerson, Business business, Statement statement, Runtime runtime, String mode, Wi wi) + private Object script(EffectivePerson effectivePerson, Statement statement, Runtime runtime, String mode, Wi wi) throws Exception { Object data = null; - ScriptContext scriptContext = this.scriptContext(effectivePerson, business, runtime); - ScriptFactory.initialServiceScriptText().eval(scriptContext); - String scriptText = statement.getScriptText(); - if(Statement.MODE_COUNT.equals(mode)) { - scriptText = statement.getCountScriptText(); - } - Object o = ScriptFactory.scriptEngine.eval(ScriptFactory.functionalization(scriptText), - scriptContext); - String jpql = ScriptFactory.asString(o); - Class cls = this.clazz(business, statement); - EntityManager em; - if(StringUtils.equalsIgnoreCase(statement.getEntityCategory(), Statement.ENTITYCATEGORY_DYNAMIC) - && StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)){ - em = business.entityManagerContainer().get(DynamicBaseEntity.class); - }else{ - em = business.entityManagerContainer().get(cls); - } - jpql = joinSql(jpql, wi, business); - logger.info("执行的sql:{}",jpql); - Query query; - String upJpql = jpql.toUpperCase(); - if(upJpql.indexOf(JOIN_KEY) > -1 && upJpql.indexOf(JOIN_ON_KEY) > -1){ - query = em.createNativeQuery(jpql); - }else{ - query = em.createQuery(jpql); - } - for (Parameter p : query.getParameters()) { - if (runtime.hasParameter(p.getName())) { - query.setParameter(p.getName(), runtime.getParameter(p.getName())); + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + Business business = new Business(emc); + ScriptContext scriptContext = this.scriptContext(effectivePerson, business, runtime); + ScriptFactory.initialServiceScriptText().eval(scriptContext); + String scriptText = statement.getScriptText(); + if (Statement.MODE_COUNT.equals(mode)) { + scriptText = statement.getCountScriptText(); } - } - if (StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) { - if(Statement.MODE_COUNT.equals(mode)) { - data = query.getSingleResult(); - }else{ - query.setFirstResult((runtime.page - 1) * runtime.size); - query.setMaxResults(runtime.size); - data = query.getResultList(); + Object o = ScriptFactory.scriptEngine.eval(ScriptFactory.functionalization(scriptText), scriptContext); + String jpql = ScriptFactory.asString(o); + Class cls = this.clazz(business, statement); + EntityManager em; + if (StringUtils.equalsIgnoreCase(statement.getEntityCategory(), Statement.ENTITYCATEGORY_DYNAMIC) + && StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) { + em = business.entityManagerContainer().get(DynamicBaseEntity.class); + } else { + em = business.entityManagerContainer().get(cls); + } + jpql = joinSql(jpql, wi, business); + logger.info("执行的sql:{}", jpql); + Query query; + String upJpql = jpql.toUpperCase(); + if (upJpql.indexOf(JOIN_KEY) > -1 && upJpql.indexOf(JOIN_ON_KEY) > -1) { + query = em.createNativeQuery(jpql); + } else { + query = em.createQuery(jpql); + } + for (Parameter p : query.getParameters()) { + if (runtime.hasParameter(p.getName())) { + query.setParameter(p.getName(), runtime.getParameter(p.getName())); + } + } + if (StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) { + if (Statement.MODE_COUNT.equals(mode)) { + data = query.getSingleResult(); + } else { + query.setFirstResult((runtime.page - 1) * runtime.size); + query.setMaxResults(runtime.size); + data = query.getResultList(); + } + } else { + business.entityManagerContainer().beginTransaction(cls); + data = query.executeUpdate(); + business.entityManagerContainer().commit(); } - } else { - business.entityManagerContainer().beginTransaction(cls); - data = query.executeUpdate(); - business.entityManagerContainer().commit(); } return data; } - private Object jpql(EffectivePerson effectivePerson, Business business, Statement statement, Runtime runtime, String mode, Wi wi) + private Object jpql(EffectivePerson effectivePerson, Statement statement, Runtime runtime, String mode, Wi wi) throws Exception { Object data = null; - Class cls = this.clazz(business, statement); - EntityManager em; - if(StringUtils.equalsIgnoreCase(statement.getEntityCategory(), Statement.ENTITYCATEGORY_DYNAMIC) - && StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)){ - em = business.entityManagerContainer().get(DynamicBaseEntity.class); - }else{ - em = business.entityManagerContainer().get(cls); - } - String jpql = statement.getData(); - if(Statement.MODE_COUNT.equals(mode)) { - jpql = statement.getCountData(); - } - jpql = joinSql(jpql, wi, business); - logger.info("执行的sql:{}",jpql); - Query query; - String upJpql = jpql.toUpperCase(); - if(upJpql.indexOf(JOIN_KEY) > -1 && upJpql.indexOf(JOIN_ON_KEY) > -1){ - query = em.createNativeQuery(jpql); - }else{ - query = em.createQuery(jpql); - } - for (Parameter p : query.getParameters()) { - if (runtime.hasParameter(p.getName())) { - query.setParameter(p.getName(), runtime.getParameter(p.getName())); + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + Business business = new Business(emc); + Class cls = this.clazz(business, statement); + EntityManager em; + if (StringUtils.equalsIgnoreCase(statement.getEntityCategory(), Statement.ENTITYCATEGORY_DYNAMIC) + && StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) { + em = business.entityManagerContainer().get(DynamicBaseEntity.class); + } else { + em = business.entityManagerContainer().get(cls); } - } - if (StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) { - if(Statement.MODE_COUNT.equals(mode)) { - data = query.getSingleResult(); - }else{ - query.setFirstResult((runtime.page - 1) * runtime.size); - query.setMaxResults(runtime.size); - data = query.getResultList(); + String jpql = statement.getData(); + if (Statement.MODE_COUNT.equals(mode)) { + jpql = statement.getCountData(); + } + jpql = joinSql(jpql, wi, business); + logger.info("执行的sql:{}", jpql); + Query query; + String upJpql = jpql.toUpperCase(); + if (upJpql.indexOf(JOIN_KEY) > -1 && upJpql.indexOf(JOIN_ON_KEY) > -1) { + query = em.createNativeQuery(jpql); + } else { + query = em.createQuery(jpql); + } + for (Parameter p : query.getParameters()) { + if (runtime.hasParameter(p.getName())) { + query.setParameter(p.getName(), runtime.getParameter(p.getName())); + } + } + if (StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) { + if (Statement.MODE_COUNT.equals(mode)) { + data = query.getSingleResult(); + } else { + query.setFirstResult((runtime.page - 1) * runtime.size); + query.setMaxResults(runtime.size); + data = query.getResultList(); + } + } else { + business.entityManagerContainer().beginTransaction(cls); + data = Integer.valueOf(query.executeUpdate()); + business.entityManagerContainer().commit(); } - } else { - business.entityManagerContainer().beginTransaction(cls); - data = Integer.valueOf(query.executeUpdate()); - business.entityManagerContainer().commit(); } return data; } @@ -234,8 +239,8 @@ class ActionExecuteV2 extends BaseAction { return scriptContext; } - private String joinSql(String sql, Wi wi, Business business) throws Exception{ - if(wi.getFilterList()!=null && !wi.getFilterList().isEmpty()) { + private String joinSql(String sql, Wi wi, Business business) throws Exception { + if (wi.getFilterList() != null && !wi.getFilterList().isEmpty()) { List list = new ArrayList<>(); String whereSql = sql.replaceAll("\\s{1,}", " "); String rightSql = ""; @@ -251,7 +256,7 @@ class ActionExecuteV2 extends BaseAction { hasWhere = true; } String matchKey = ""; - for(String key : keys){ + for (String key : keys) { if (whereSql.indexOf(key) > -1) { matchKey = key; rightSql = StringUtils.substringAfter(whereSql, key); @@ -260,50 +265,52 @@ class ActionExecuteV2 extends BaseAction { } } List filterList = new ArrayList<>(); - for (FilterEntry filterEntry : wi.getFilterList()){ - if(StringUtils.isNotBlank(filterEntry.path) && StringUtils.isNotBlank(filterEntry.value)){ + for (FilterEntry filterEntry : wi.getFilterList()) { + if (StringUtils.isNotBlank(filterEntry.path) && StringUtils.isNotBlank(filterEntry.value)) { StringBuilder sb = new StringBuilder(); sb.append(filterEntry.path); sb.append(" "); sb.append(Comparison.getMatchCom(filterEntry.comparison)); sb.append(" "); - sb.append(":"+filterEntry.value); + sb.append(":" + filterEntry.value); filterList.add(sb.toString()); } } - if(hasWhere){ + if (hasWhere) { list.add(leftSql); list.add("WHERE"); - }else{ + } else { list.add(whereSql); - if(!filterList.isEmpty()){ + if (!filterList.isEmpty()) { list.add("WHERE"); } } - if(!filterList.isEmpty()){ + if (!filterList.isEmpty()) { list.add("("); list.add(StringUtils.join(filterList, " AND ")); list.add(")"); } - if(hasWhere){ + if (hasWhere) { list.add("AND"); list.add("("); list.add(whereSql); list.add(")"); } - if(StringUtils.isNotBlank(matchKey)){ + if (StringUtils.isNotBlank(matchKey)) { list.add(matchKey); list.add(rightSql); } sql = StringUtils.join(list, " "); } String upSql = sql.toUpperCase(); - if(upSql.indexOf(JOIN_KEY) > -1 && upSql.indexOf(JOIN_ON_KEY) > -1){ + if (upSql.indexOf(JOIN_KEY) > -1 && upSql.indexOf(JOIN_ON_KEY) > -1) { sql = sql.replaceAll("\\.", ".x"); sql = sql.replaceAll("\\.x\\*", ".*"); - List tables = business.entityManagerContainer().fetchEqual(Table.class, ListTools.toList(Table.name_FIELDNAME), Table.status_FIELDNAME, Table.STATUS_build); - for (Table table : tables){ - sql = sql.replaceAll(" "+table.getName()+" ", " "+DynamicEntity.TABLE_PREFIX + table.getName().toUpperCase()+" "); + List
tables = business.entityManagerContainer().fetchEqual(Table.class, + ListTools.toList(Table.name_FIELDNAME), Table.status_FIELDNAME, Table.STATUS_build); + for (Table table : tables) { + sql = sql.replaceAll(" " + table.getName() + " ", + " " + DynamicEntity.TABLE_PREFIX + table.getName().toUpperCase() + " "); } } return sql; @@ -325,10 +332,8 @@ class ActionExecuteV2 extends BaseAction { public static class Wi extends GsonPropertyObject { @FieldDescribe("过滤") - @FieldTypeDescribe(fieldType="class",fieldTypeName = "com.x.query.core.express.plan.FilterEntry", - fieldValue="{\"logic\": \"and\", \"path\": \"o.name\", \"comparison\": \"equals\", \"value\": \"name\", \"formatType\": \"textValue\"}", - fieldSample="{\"logic\":\"逻辑运算:and\",\"path\":\"data数据的路径:o.title\",\"comparison\":\"比较运算符:equals|notEquals|like|notLike|greaterThan|greaterThanOrEqualTo|lessThan|lessThanOrEqualTo\"," + - "\"value\":\"7月\",\"formatType\":\"textValue|numberValue|dateTimeValue|booleanValue\"}") + @FieldTypeDescribe(fieldType = "class", fieldTypeName = "com.x.query.core.express.plan.FilterEntry", fieldValue = "{\"logic\": \"and\", \"path\": \"o.name\", \"comparison\": \"equals\", \"value\": \"name\", \"formatType\": \"textValue\"}", fieldSample = "{\"logic\":\"逻辑运算:and\",\"path\":\"data数据的路径:o.title\",\"comparison\":\"比较运算符:equals|notEquals|like|notLike|greaterThan|greaterThanOrEqualTo|lessThan|lessThanOrEqualTo\"," + + "\"value\":\"7月\",\"formatType\":\"textValue|numberValue|dateTimeValue|booleanValue\"}") private List filterList = new TreeList<>(); @FieldDescribe("参数") diff --git a/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/BaseAction.java b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/BaseAction.java index 13a5c9a0973f49237cef6d9cce02290a26bc298b..39f4de34decda38f959d767ace9da13dbe25ee52 100644 --- a/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/BaseAction.java +++ b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/BaseAction.java @@ -12,48 +12,53 @@ import com.x.base.core.project.jaxrs.StandardJaxrsAction; import com.x.query.assemble.surface.Business; import com.x.query.core.entity.schema.Statement; import com.x.query.core.express.statement.Runtime; +import com.x.base.core.container.EntityManagerContainer; +import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.project.cache.Cache.CacheCategory; abstract class BaseAction extends StandardJaxrsAction { protected CacheCategory cache = new CacheCategory(Statement.class); - protected Runtime runtime(EffectivePerson effectivePerson, JsonElement jsonElement, Business business, Integer page, - Integer size) throws Exception { + protected Runtime runtime(EffectivePerson effectivePerson, JsonElement jsonElement, Integer page, Integer size) + throws Exception { Runtime runtime = new Runtime(); - if (null == jsonElement || jsonElement.isJsonNull()) { - runtime.parameters = new HashMap(); - } else { - runtime.parameters = XGsonBuilder.instance().fromJson(jsonElement, new TypeToken>() { - }.getType()); + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + Business business = new Business(emc); + if (null == jsonElement || jsonElement.isJsonNull()) { + runtime.parameters = new HashMap(); + } else { + runtime.parameters = XGsonBuilder.instance().fromJson(jsonElement, + new TypeToken>() { + }.getType()); + } + runtime.page = this.adjustPage(page); + runtime.size = this.adjustSize(size); + Set keys = runtime.parameters.keySet(); + if (keys.contains(Runtime.PARAMETER_PERSON)) { + runtime.parameters.put(Runtime.PARAMETER_PERSON, effectivePerson.getDistinguishedName()); + } + if (keys.contains(Runtime.PARAMETER_IDENTITYLIST)) { + runtime.parameters.put(Runtime.PARAMETER_IDENTITYLIST, + business.organization().identity().listWithPerson(effectivePerson)); + } + if (keys.contains(Runtime.PARAMETER_UNITLIST)) { + runtime.parameters.put(Runtime.PARAMETER_UNITLIST, + business.organization().unit().listWithPerson(effectivePerson)); + } + if (keys.contains(Runtime.PARAMETER_UNITALLLIST)) { + runtime.parameters.put(Runtime.PARAMETER_UNITALLLIST, + business.organization().unit().listWithPersonSupNested(effectivePerson)); + } + if (keys.contains(Runtime.PARAMETER_GROUPLIST)) { + runtime.parameters.put(Runtime.PARAMETER_GROUPLIST, + business.organization().group().listWithPerson(effectivePerson)); + } + if (keys.contains(Runtime.PARAMETER_ROLELIST)) { + runtime.parameters.put(Runtime.PARAMETER_ROLELIST, + business.organization().role().listWithPerson(effectivePerson)); + } } - runtime.page = this.adjustPage(page); - runtime.size = this.adjustSize(size); - Set keys = runtime.parameters.keySet(); - if (keys.contains(Runtime.PARAMETER_PERSON)) { - runtime.parameters.put(Runtime.PARAMETER_PERSON, effectivePerson.getDistinguishedName()); - } - if (keys.contains(Runtime.PARAMETER_IDENTITYLIST)) { - runtime.parameters.put(Runtime.PARAMETER_IDENTITYLIST, - business.organization().identity().listWithPerson(effectivePerson)); - } - if (keys.contains(Runtime.PARAMETER_UNITLIST)) { - runtime.parameters.put(Runtime.PARAMETER_UNITLIST, - business.organization().unit().listWithPerson(effectivePerson)); - } - if (keys.contains(Runtime.PARAMETER_UNITALLLIST)) { - runtime.parameters.put(Runtime.PARAMETER_UNITALLLIST, - business.organization().unit().listWithPersonSupNested(effectivePerson)); - } - if (keys.contains(Runtime.PARAMETER_GROUPLIST)) { - runtime.parameters.put(Runtime.PARAMETER_GROUPLIST, - business.organization().group().listWithPerson(effectivePerson)); - } - if (keys.contains(Runtime.PARAMETER_ROLELIST)) { - runtime.parameters.put(Runtime.PARAMETER_ROLELIST, - business.organization().role().listWithPerson(effectivePerson)); - } - return runtime; } }