Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
fuyue82
o2oa
提交
c513c7ec
o2oa
项目概览
fuyue82
/
o2oa
与 Fork 源项目一致
Fork自
浙江兰德纵横网络技术股份有限公司 / o2oa
通知
1
Star
0
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,发现更多精彩内容 >>
提交
c513c7ec
编写于
10月 20, 2020
作者:
O
o2sword
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
数据中心查询优化2
上级
7b0802e3
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
481 addition
and
19 deletion
+481
-19
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/StatementJaxrsFilter.java
...x/query/assemble/designer/jaxrs/StatementJaxrsFilter.java
+2
-2
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/Business.java
.../src/main/java/com/x/query/assemble/surface/Business.java
+49
-11
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecute.java
...query/assemble/surface/jaxrs/statement/ActionExecute.java
+7
-1
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecuteV2.java
...ery/assemble/surface/jaxrs/statement/ActionExecuteV2.java
+223
-0
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionGet.java
...m/x/query/assemble/surface/jaxrs/statement/ActionGet.java
+48
-0
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionListWithQuery.java
...assemble/surface/jaxrs/statement/ActionListWithQuery.java
+60
-0
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/StatementAction.java
...ery/assemble/surface/jaxrs/statement/StatementAction.java
+62
-5
o2server/x_query_core_entity/src/main/java/com/x/query/core/entity/schema/Statement.java
...c/main/java/com/x/query/core/entity/schema/Statement.java
+30
-0
未找到文件。
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/StatementJaxrsFilter.java
浏览文件 @
c513c7ec
...
...
@@ -2,9 +2,9 @@ package com.x.query.assemble.designer.jaxrs;
import
javax.servlet.annotation.WebFilter
;
import
com.x.base.core.project.jaxrs.
Anonymous
CipherManagerUserJaxrsFilter
;
import
com.x.base.core.project.jaxrs.CipherManagerUserJaxrsFilter
;
@WebFilter
(
urlPatterns
=
"/jaxrs/statement/*"
,
asyncSupported
=
true
)
public
class
StatementJaxrsFilter
extends
Anonymous
CipherManagerUserJaxrsFilter
{
public
class
StatementJaxrsFilter
extends
CipherManagerUserJaxrsFilter
{
}
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/Business.java
浏览文件 @
c513c7ec
...
...
@@ -4,6 +4,7 @@ import java.util.List;
import
com.x.query.assemble.surface.factory.*
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.BooleanUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
com.x.base.core.container.EntityManagerContainer
;
...
...
@@ -203,6 +204,39 @@ public class Business {
return
false
;
}
public
boolean
readable
(
EffectivePerson
effectivePerson
,
Statement
statement
)
throws
Exception
{
if
(
null
==
statement
)
{
return
false
;
}
if
(
BooleanUtils
.
isTrue
(
statement
.
getAnonymousAccessible
())){
return
true
;
}
if
(
effectivePerson
.
isManager
())
{
return
true
;
}
if
(
statement
.
getExecutePersonList
().
isEmpty
()
&&
statement
.
getExecuteUnitList
().
isEmpty
())
{
return
true
;
}
if
(
CollectionUtils
.
containsAny
(
statement
.
getExecutePersonList
(),
organization
().
identity
().
listWithPerson
(
effectivePerson
)))
{
return
true
;
}
if
(
CollectionUtils
.
containsAny
(
statement
.
getExecuteUnitList
(),
organization
().
unit
().
listWithPersonSupNested
(
effectivePerson
)))
{
return
true
;
}
Query
query
=
this
.
entityManagerContainer
().
find
(
statement
.
getQuery
(),
Query
.
class
);
/** 在所属query的管理人员中 */
if
(
null
!=
query
&&
ListTools
.
contains
(
query
.
getControllerList
(),
effectivePerson
.
getDistinguishedName
()))
{
return
true
;
}
if
(
organization
().
person
().
hasRole
(
effectivePerson
,
OrganizationDefinition
.
Manager
,
OrganizationDefinition
.
QueryManager
))
{
return
true
;
}
return
false
;
}
public
boolean
readable
(
EffectivePerson
effectivePerson
,
Reveal
reveal
)
throws
Exception
{
if
(
null
==
reveal
)
{
return
false
;
...
...
@@ -293,22 +327,26 @@ public class Business {
public
boolean
executable
(
EffectivePerson
effectivePerson
,
Statement
o
)
throws
Exception
{
boolean
result
=
false
;
if
(
null
!=
o
)
{
if
(
ListTools
.
isEmpty
(
o
.
getExecutePersonList
())
&&
ListTools
.
isEmpty
(
o
.
getExecuteUnitList
()))
{
if
(
BooleanUtils
.
isTrue
(
o
.
getAnonymousAccessible
()))
{
result
=
true
;
}
if
(!
result
)
{
if
(
effectivePerson
.
isManager
()
||
(
this
.
organization
().
person
().
hasRole
(
effectivePerson
,
OrganizationDefinition
.
Manager
,
OrganizationDefinition
.
QueryManager
))
||
effectivePerson
.
isPerson
(
o
.
getExecutePersonList
()))
{
}
else
{
if
(
ListTools
.
isEmpty
(
o
.
getExecutePersonList
())
&&
ListTools
.
isEmpty
(
o
.
getExecuteUnitList
()))
{
result
=
true
;
}
if
((!
result
)
&&
ListTools
.
isNotEmpty
(
o
.
getExecuteUnitList
()))
{
List
<
String
>
units
=
this
.
organization
().
unit
()
.
listWithPerson
(
effectivePerson
.
getDistinguishedName
());
if
(
ListTools
.
containsAny
(
units
,
o
.
getExecuteUnitList
()))
{
if
(!
result
)
{
if
(
effectivePerson
.
isManager
()
||
(
this
.
organization
().
person
().
hasRole
(
effectivePerson
,
OrganizationDefinition
.
Manager
,
OrganizationDefinition
.
QueryManager
))
||
effectivePerson
.
isPerson
(
o
.
getExecutePersonList
()))
{
result
=
true
;
}
if
((!
result
)
&&
ListTools
.
isNotEmpty
(
o
.
getExecuteUnitList
()))
{
List
<
String
>
units
=
this
.
organization
().
unit
()
.
listWithPerson
(
effectivePerson
.
getDistinguishedName
());
if
(
ListTools
.
containsAny
(
units
,
o
.
getExecuteUnitList
()))
{
result
=
true
;
}
}
}
}
}
...
...
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecute.java
浏览文件 @
c513c7ec
...
...
@@ -110,7 +110,13 @@ class ActionExecute extends BaseAction {
Object
o
=
compiledScript
.
eval
(
scriptContext
);
String
text
=
ScriptFactory
.
asString
(
o
);
Class
<?
extends
JpaObject
>
cls
=
this
.
clazz
(
business
,
statement
);
EntityManager
em
=
business
.
entityManagerContainer
().
get
(
cls
);
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
()))
{
...
...
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecuteV2.java
0 → 100644
浏览文件 @
c513c7ec
package
com.x.query.assemble.surface.jaxrs.statement
;
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.exception.ExceptionAccessDenied
;
import
com.x.base.core.project.exception.ExceptionEntityNotExist
;
import
com.x.base.core.project.http.ActionResult
;
import
com.x.base.core.project.http.EffectivePerson
;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
com.x.base.core.project.script.AbstractResources
;
import
com.x.base.core.project.script.ScriptFactory
;
import
com.x.base.core.project.webservices.WebservicesClient
;
import
com.x.organization.core.express.Organization
;
import
com.x.query.assemble.surface.Business
;
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
org.apache.commons.lang3.StringUtils
;
import
javax.persistence.EntityManager
;
import
javax.persistence.Parameter
;
import
javax.persistence.Query
;
import
javax.script.Bindings
;
import
javax.script.ScriptContext
;
import
javax.script.SimpleScriptContext
;
import
java.util.Objects
;
class
ActionExecuteV2
extends
BaseAction
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
ActionExecuteV2
.
class
);
ActionResult
<
Object
>
execute
(
EffectivePerson
effectivePerson
,
String
flag
,
String
mode
,
Integer
page
,
Integer
size
,
JsonElement
jsonElement
)
throws
Exception
{
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
ActionResult
<
Object
>
result
=
new
ActionResult
<>();
Business
business
=
new
Business
(
emc
);
Statement
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
);
}
Runtime
runtime
=
this
.
runtime
(
effectivePerson
,
jsonElement
,
business
,
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
);
break
;
default
:
data
=
this
.
jpql
(
effectivePerson
,
business
,
statement
,
runtime
,
mode
);
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
);
break
;
default
:
count
=
this
.
jpql
(
effectivePerson
,
business
,
statement
,
runtime
,
mode
);
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
);
count
=
this
.
script
(
effectivePerson
,
business
,
statement
,
runtime
,
Statement
.
MODE_COUNT
);
break
;
default
:
data
=
this
.
jpql
(
effectivePerson
,
business
,
statement
,
runtime
,
Statement
.
MODE_DATA
);
count
=
this
.
jpql
(
effectivePerson
,
business
,
statement
,
runtime
,
Statement
.
MODE_COUNT
);
break
;
}
result
.
setData
(
data
);
result
.
setCount
((
Long
)
count
);
}
return
result
;
}
}
private
Object
script
(
EffectivePerson
effectivePerson
,
Business
business
,
Statement
statement
,
Runtime
runtime
,
String
mode
)
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
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
))
{
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
();
}
return
data
;
}
private
Object
jpql
(
EffectivePerson
effectivePerson
,
Business
business
,
Statement
statement
,
Runtime
runtime
,
String
mode
)
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
jpqlData
=
statement
.
getData
();
if
(
Statement
.
MODE_COUNT
.
equals
(
mode
))
{
jpqlData
=
statement
.
getCountData
();
}
Query
query
=
em
.
createQuery
(
jpqlData
);
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
();
}
return
data
;
}
private
Class
<?
extends
JpaObject
>
clazz
(
Business
business
,
Statement
statement
)
throws
Exception
{
Class
<?
extends
JpaObject
>
cls
=
null
;
if
(
StringUtils
.
equals
(
Statement
.
ENTITYCATEGORY_OFFICIAL
,
statement
.
getEntityCategory
())
||
StringUtils
.
equals
(
Statement
.
ENTITYCATEGORY_CUSTOM
,
statement
.
getEntityCategory
()))
{
cls
=
(
Class
<?
extends
JpaObject
>)
Class
.
forName
(
statement
.
getEntityClassName
());
}
else
{
Table
table
=
business
.
entityManagerContainer
().
flag
(
statement
.
getTable
(),
Table
.
class
);
if
(
null
==
table
)
{
throw
new
ExceptionEntityNotExist
(
statement
.
getTable
(),
Table
.
class
);
}
DynamicEntity
dynamicEntity
=
new
DynamicEntity
(
table
.
getName
());
cls
=
(
Class
<?
extends
JpaObject
>)
Class
.
forName
(
dynamicEntity
.
className
());
}
return
cls
;
}
private
ScriptContext
scriptContext
(
EffectivePerson
effectivePerson
,
Business
business
,
Runtime
runtime
)
throws
Exception
{
ScriptContext
scriptContext
=
new
SimpleScriptContext
();
ActionExecute
.
Resources
resources
=
new
ActionExecute
.
Resources
();
resources
.
setEntityManagerContainer
(
business
.
entityManagerContainer
());
resources
.
setContext
(
ThisApplication
.
context
());
resources
.
setApplications
(
ThisApplication
.
context
().
applications
());
resources
.
setWebservicesClient
(
new
WebservicesClient
());
resources
.
setOrganization
(
new
Organization
(
ThisApplication
.
context
()));
Bindings
bindings
=
scriptContext
.
getBindings
(
ScriptContext
.
ENGINE_SCOPE
);
bindings
.
put
(
ScriptFactory
.
BINDING_NAME_RESOURCES
,
resources
);
bindings
.
put
(
ScriptFactory
.
BINDING_NAME_EFFECTIVEPERSON
,
effectivePerson
);
bindings
.
put
(
ScriptFactory
.
BINDING_NAME_PARAMETERS
,
gson
.
toJson
(
runtime
.
getParameters
()));
return
scriptContext
;
}
public
static
class
Resources
extends
AbstractResources
{
private
Organization
organization
;
public
Organization
getOrganization
()
{
return
organization
;
}
public
void
setOrganization
(
Organization
organization
)
{
this
.
organization
=
organization
;
}
}
}
\ No newline at end of file
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionGet.java
0 → 100644
浏览文件 @
c513c7ec
package
com.x.query.assemble.surface.jaxrs.statement
;
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.project.bean.WrapCopier
;
import
com.x.base.core.project.bean.WrapCopierFactory
;
import
com.x.base.core.project.exception.ExceptionAccessDenied
;
import
com.x.base.core.project.exception.ExceptionEntityNotExist
;
import
com.x.base.core.project.http.ActionResult
;
import
com.x.base.core.project.http.EffectivePerson
;
import
com.x.query.assemble.surface.Business
;
import
com.x.query.core.entity.Query
;
import
com.x.query.core.entity.schema.Statement
;
class
ActionGet
extends
BaseAction
{
ActionResult
<
Wo
>
execute
(
EffectivePerson
effectivePerson
,
String
flag
)
throws
Exception
{
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
ActionResult
<
Wo
>
result
=
new
ActionResult
<>();
Business
business
=
new
Business
(
emc
);
Statement
statement
=
emc
.
flag
(
flag
,
Statement
.
class
);
if
(
null
==
statement
)
{
throw
new
ExceptionEntityNotExist
(
flag
,
Statement
.
class
);
}
Query
query
=
emc
.
flag
(
statement
.
getQuery
(),
Query
.
class
);
if
(
null
==
query
)
{
throw
new
ExceptionEntityNotExist
(
flag
,
Query
.
class
);
}
if
(!
business
.
readable
(
effectivePerson
,
query
))
{
throw
new
ExceptionAccessDenied
(
effectivePerson
,
query
);
}
if
(!
business
.
readable
(
effectivePerson
,
statement
))
{
throw
new
ExceptionAccessDenied
(
effectivePerson
,
statement
);
}
Wo
wo
=
Wo
.
copier
.
copy
(
statement
);
result
.
setData
(
wo
);
return
result
;
}
}
public
static
class
Wo
extends
Statement
{
private
static
final
long
serialVersionUID
=
-
5755898083219447939L
;
static
WrapCopier
<
Statement
,
Wo
>
copier
=
WrapCopierFactory
.
wo
(
Statement
.
class
,
Wo
.
class
,
null
,
JpaObject
.
FieldsInvisible
);
}
}
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionListWithQuery.java
0 → 100644
浏览文件 @
c513c7ec
package
com.x.query.assemble.surface.jaxrs.statement
;
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.project.bean.WrapCopier
;
import
com.x.base.core.project.bean.WrapCopierFactory
;
import
com.x.base.core.project.exception.ExceptionAccessDenied
;
import
com.x.base.core.project.exception.ExceptionEntityNotExist
;
import
com.x.base.core.project.http.ActionResult
;
import
com.x.base.core.project.http.EffectivePerson
;
import
com.x.query.assemble.surface.Business
;
import
com.x.query.core.entity.Query
;
import
com.x.query.core.entity.schema.Statement
;
import
org.apache.commons.lang3.BooleanUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
class
ActionListWithQuery
extends
BaseAction
{
ActionResult
<
List
<
Wo
>>
execute
(
EffectivePerson
effectivePerson
,
String
queryFlag
,
Boolean
justSelect
,
Boolean
hasView
)
throws
Exception
{
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
ActionResult
<
List
<
Wo
>>
result
=
new
ActionResult
<>();
Business
business
=
new
Business
(
emc
);
Query
query
=
emc
.
flag
(
queryFlag
,
Query
.
class
);
if
(
null
==
query
)
{
throw
new
ExceptionEntityNotExist
(
queryFlag
);
}
if
(!
business
.
readable
(
effectivePerson
,
query
))
{
throw
new
ExceptionAccessDenied
(
effectivePerson
.
getDistinguishedName
());
}
List
<
Wo
>
wos
=
new
ArrayList
<>();
for
(
String
id
:
emc
.
idsEqual
(
Statement
.
class
,
Statement
.
query_FIELDNAME
,
query
.
getId
()))
{
Statement
o
=
business
.
pick
(
id
,
Statement
.
class
);
if
(
null
!=
o
)
{
if
(
BooleanUtils
.
isTrue
(
hasView
)
&&
StringUtils
.
isBlank
(
o
.
getView
())){
continue
;
}
if
(
BooleanUtils
.
isTrue
(
justSelect
)
&&
!
Statement
.
TYPE_SELECT
.
equals
(
o
.
getType
())){
continue
;
}
if
(
business
.
readable
(
effectivePerson
,
o
))
{
wos
.
add
(
Wo
.
copier
.
copy
(
o
));
}
}
}
result
.
setData
(
wos
);
return
result
;
}
}
public
static
class
Wo
extends
Statement
{
private
static
final
long
serialVersionUID
=
-
5755898083219447939L
;
static
WrapCopier
<
Statement
,
Wo
>
copier
=
WrapCopierFactory
.
wo
(
Statement
.
class
,
Wo
.
class
,
JpaObject
.
singularAttributeField
(
Statement
.
class
,
true
,
true
),
JpaObject
.
FieldsInvisible
);
}
}
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/StatementAction.java
浏览文件 @
c513c7ec
package
com.x.query.assemble.surface.jaxrs.statement
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.ws.rs.Consumes
;
import
javax.ws.rs.POST
;
import
javax.ws.rs.Path
;
import
javax.ws.rs.PathParam
;
import
javax.ws.rs.Produces
;
import
javax.ws.rs.*
;
import
javax.ws.rs.container.AsyncResponse
;
import
javax.ws.rs.container.Suspended
;
import
javax.ws.rs.core.Context
;
...
...
@@ -23,6 +19,8 @@ import com.x.base.core.project.jaxrs.StandardJaxrsAction;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
java.util.List
;
@Path
(
"statement"
)
@JaxrsDescribe
(
"语句"
)
public
class
StatementAction
extends
StandardJaxrsAction
{
...
...
@@ -49,4 +47,63 @@ public class StatementAction extends StandardJaxrsAction {
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
@JaxrsMethodDescribe
(
value
=
"根据查询列示语句对象."
,
action
=
ActionListWithQuery
.
class
)
@GET
@Path
(
"list/query/{queryFlag}"
)
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
listWithQuery
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
@JaxrsParameterDescribe
(
"查询标识"
)
@PathParam
(
"queryFlag"
)
String
queryFlag
,
@JaxrsParameterDescribe
(
"是否只查询select语句"
)
@QueryParam
(
"justSelect"
)
Boolean
justSelect
,
@JaxrsParameterDescribe
(
"是否只查询含有视图的语句"
)
@QueryParam
(
"hasView"
)
Boolean
hasView
)
{
ActionResult
<
List
<
ActionListWithQuery
.
Wo
>>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
try
{
result
=
new
ActionListWithQuery
().
execute
(
effectivePerson
,
queryFlag
,
justSelect
,
hasView
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
result
.
error
(
e
);
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
@JaxrsMethodDescribe
(
value
=
"获取语句内容."
,
action
=
ActionGet
.
class
)
@GET
@Path
(
"{id}"
)
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
get
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
@JaxrsParameterDescribe
(
"标识"
)
@PathParam
(
"id"
)
String
id
)
{
ActionResult
<
ActionGet
.
Wo
>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
try
{
result
=
new
ActionGet
().
execute
(
effectivePerson
,
id
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
result
.
error
(
e
);
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
@JaxrsMethodDescribe
(
value
=
"执行语句V2,可以同时执行查询结果及查询总数."
,
action
=
ActionExecuteV2
.
class
)
@POST
@Path
(
"{flag}/execute/mode/{mode}page/{page}/size/{size}"
)
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
executeV2
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
@JaxrsParameterDescribe
(
"标识"
)
@PathParam
(
"flag"
)
String
flag
,
@JaxrsParameterDescribe
(
"执行模式:data|count|all"
)
@PathParam
(
"mode"
)
String
mode
,
@JaxrsParameterDescribe
(
"页码"
)
@PathParam
(
"page"
)
Integer
page
,
@JaxrsParameterDescribe
(
"每页数量"
)
@PathParam
(
"size"
)
Integer
size
,
JsonElement
jsonElement
)
{
ActionResult
<
Object
>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
try
{
result
=
new
ActionExecuteV2
().
execute
(
effectivePerson
,
flag
,
mode
,
page
,
size
,
jsonElement
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
,
effectivePerson
,
request
,
jsonElement
);
result
.
error
(
e
);
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
}
\ No newline at end of file
o2server/x_query_core_entity/src/main/java/com/x/query/core/entity/schema/Statement.java
浏览文件 @
c513c7ec
...
...
@@ -229,6 +229,20 @@ public class Statement extends SliceJpaObject {
@CheckPersist
(
allowEmpty
=
true
)
private
String
entityCategory
;
public
static
final
String
testParameters_FIELDNAME
=
"testParameters"
;
@FieldDescribe
(
"测试参数(json格式文本)."
)
@Lob
@Basic
(
fetch
=
FetchType
.
EAGER
)
@Column
(
length
=
JpaObject
.
length_4K
,
name
=
ColumnNamePrefix
+
testParameters_FIELDNAME
)
@CheckPersist
(
allowEmpty
=
true
)
private
String
testParameters
;
public
static
final
String
anonymousAccessible_FIELDNAME
=
"anonymousAccessible"
;
@FieldDescribe
(
"是否允许匿名访问(boolean类型)"
)
@CheckPersist
(
allowEmpty
=
true
)
@Column
(
name
=
ColumnNamePrefix
+
anonymousAccessible_FIELDNAME
)
private
Boolean
anonymousAccessible
;
public
void
setEntityCategory
(
String
entityCategory
)
{
this
.
entityCategory
=
entityCategory
;
}
...
...
@@ -372,4 +386,20 @@ public class Statement extends SliceJpaObject {
public
void
setView
(
String
view
)
{
this
.
view
=
view
;
}
public
String
getTestParameters
()
{
return
testParameters
;
}
public
void
setTestParameters
(
String
testParameters
)
{
this
.
testParameters
=
testParameters
;
}
public
Boolean
getAnonymousAccessible
()
{
return
anonymousAccessible
;
}
public
void
setAnonymousAccessible
(
Boolean
anonymousAccessible
)
{
this
.
anonymousAccessible
=
anonymousAccessible
;
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录