提交 91c7f8c6 编写于 作者: O o2null

Merge branch 'fix/#421' into 'wrdp'

mulitThreaded=true

See merge request o2oa/o2oa!2367
......@@ -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)");
......
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<Object> execute(EffectivePerson effectivePerson, String flag, Integer page, Integer size,
JsonElement jsonElement) throws Exception {
ActionResult<Object> result = new ActionResult<>();
Statement statement = this.getStatement(flag);
if (null == statement) {
throw new ExceptionEntityNotExist(flag, Statement.class);
}
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
ActionResult<Object> 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<? extends JpaObject> 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<? extends JpaObject> 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<? extends JpaObject> 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<? extends JpaObject> 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;
}
......
......@@ -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<Object> execute(EffectivePerson effectivePerson, String flag, String mode, Integer page, Integer size,
JsonElement jsonElement) throws Exception {
Statement statement = null;
ActionResult<Object> result = new ActionResult<>();
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
ActionResult<Object> 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<? extends JpaObject> 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<? extends JpaObject> 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<? extends JpaObject> 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<? extends JpaObject> 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<String> 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<String> 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<Table> 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<Table> 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<FilterEntry> filterList = new TreeList<>();
@FieldDescribe("参数")
......
......@@ -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<String, Object>();
} else {
runtime.parameters = XGsonBuilder.instance().fromJson(jsonElement, new TypeToken<Map<String, Object>>() {
}.getType());
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
Business business = new Business(emc);
if (null == jsonElement || jsonElement.isJsonNull()) {
runtime.parameters = new HashMap<String, Object>();
} else {
runtime.parameters = XGsonBuilder.instance().fromJson(jsonElement,
new TypeToken<Map<String, Object>>() {
}.getType());
}
runtime.page = this.adjustPage(page);
runtime.size = this.adjustSize(size);
Set<String> 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<String> 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;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册