Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ghsby
o2oa
提交
7a3fd5f7
o2oa
项目概览
ghsby
/
o2oa
落后 Fork 源项目 2880 个版本
Fork自
浙江兰德纵横网络技术股份有限公司 / o2oa
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
o2oa
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7a3fd5f7
编写于
12月 01, 2020
作者:
O
o2null
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
mulitThreaded=true
上级
ebe6dee4
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
272 addition
and
264 deletion
+272
-264
o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/PersistenceXmlHelper.java
...m/x/base/core/container/factory/PersistenceXmlHelper.java
+2
-2
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecute.java
...query/assemble/surface/jaxrs/statement/ActionExecute.java
+81
-83
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecuteV2.java
...ery/assemble/surface/jaxrs/statement/ActionExecuteV2.java
+150
-145
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/BaseAction.java
.../x/query/assemble/surface/jaxrs/statement/BaseAction.java
+39
-34
未找到文件。
o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/PersistenceXmlHelper.java
浏览文件 @
7a3fd5f7
...
...
@@ -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"
,
"
fals
e"
);
//
使用ture支持多线程访问,但是是通过lock同步执行的.
properties
.
put
(
"openjpa.Multithreaded"
,
"
tru
e"
);
/* 如果启用本地初始化会导致classLoad的问题 */
properties
.
put
(
"openjpa.DynamicEnhancementAgent"
,
"false"
);
properties
.
put
(
"openjpa.jdbc.SynchronizeMappings"
,
"buildSchema(ForeignKeys=false)"
);
...
...
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecute.java
浏览文件 @
7a3fd5f7
package
com.x.query.assemble.surface.jaxrs.statement
;
import
java.util.O
bjects
;
import
java.util.O
ptional
;
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
;
}
...
...
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecuteV2.java
浏览文件 @
7a3fd5f7
...
...
@@ -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
(
"参数"
)
...
...
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/BaseAction.java
浏览文件 @
7a3fd5f7
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录