diff --git a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/StatementJaxrsFilter.java b/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/StatementJaxrsFilter.java index b69aaa4f347b2ae061c4f4188938f0d155316b67..27d6c90aaef8515061c2fe26e990c511244b7f70 100644 --- a/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/StatementJaxrsFilter.java +++ b/o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/StatementJaxrsFilter.java @@ -2,9 +2,9 @@ package com.x.query.assemble.designer.jaxrs; import javax.servlet.annotation.WebFilter; -import com.x.base.core.project.jaxrs.AnonymousCipherManagerUserJaxrsFilter; +import com.x.base.core.project.jaxrs.CipherManagerUserJaxrsFilter; @WebFilter(urlPatterns = "/jaxrs/statement/*", asyncSupported = true) -public class StatementJaxrsFilter extends AnonymousCipherManagerUserJaxrsFilter { +public class StatementJaxrsFilter extends CipherManagerUserJaxrsFilter { } diff --git a/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/Business.java b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/Business.java index a38a20d803ac5b2d2ba81d8cdd57ecba29d2dff7..c57212d51e376b53a9c96929e72a88948a40e507 100644 --- a/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/Business.java +++ b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/Business.java @@ -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 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 units = this.organization().unit() + .listWithPerson(effectivePerson.getDistinguishedName()); + if (ListTools.containsAny(units, o.getExecuteUnitList())) { + result = true; + } + } } } } 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 fe358e096e0e83d411883c1b55cdc8ec906674a5..eb651abe145fd0b54127d9003cd583ff072e5062 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 @@ -110,7 +110,13 @@ class ActionExecute extends BaseAction { Object o = compiledScript.eval(scriptContext); String text = ScriptFactory.asString(o); Class 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())) { 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 new file mode 100644 index 0000000000000000000000000000000000000000..5a32aba32d14d3347c54df495855c318110b88db --- /dev/null +++ b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecuteV2.java @@ -0,0 +1,223 @@ +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 execute(EffectivePerson effectivePerson, String flag, String mode, Integer page, Integer size, + JsonElement jsonElement) throws Exception { + + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + ActionResult 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 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 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 clazz(Business business, Statement statement) throws Exception { + Class cls = null; + if (StringUtils.equals(Statement.ENTITYCATEGORY_OFFICIAL, statement.getEntityCategory()) + || StringUtils.equals(Statement.ENTITYCATEGORY_CUSTOM, statement.getEntityCategory())) { + cls = (Class) 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) 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 diff --git a/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionGet.java b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionGet.java new file mode 100644 index 0000000000000000000000000000000000000000..6ae1364c022f3c1b2b7db025292399aeb2b0a374 --- /dev/null +++ b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionGet.java @@ -0,0 +1,48 @@ +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 execute(EffectivePerson effectivePerson, String flag) throws Exception { + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + ActionResult 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 copier = WrapCopierFactory.wo(Statement.class, Wo.class, null, + JpaObject.FieldsInvisible); + } +} diff --git a/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionListWithQuery.java b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionListWithQuery.java new file mode 100644 index 0000000000000000000000000000000000000000..d3996fa4901c6b2ae8c77e8962490cecc334e8b4 --- /dev/null +++ b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionListWithQuery.java @@ -0,0 +1,60 @@ +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> execute(EffectivePerson effectivePerson, String queryFlag, Boolean justSelect, Boolean hasView) throws Exception { + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + ActionResult> 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 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 copier = WrapCopierFactory.wo(Statement.class, Wo.class, + JpaObject.singularAttributeField(Statement.class, true, true), JpaObject.FieldsInvisible); + } +} diff --git a/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/StatementAction.java b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/StatementAction.java index c4069c24f0b73cb529b6da6d29c0a7aa0b7e6603..8229d8e33f9a1a3aeb22f98b88d7a5dbc064eeaf 100644 --- a/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/StatementAction.java +++ b/o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/StatementAction.java @@ -1,11 +1,7 @@ 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> 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 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 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 diff --git a/o2server/x_query_core_entity/src/main/java/com/x/query/core/entity/schema/Statement.java b/o2server/x_query_core_entity/src/main/java/com/x/query/core/entity/schema/Statement.java index 31ac667e9f5a7bef74a532e76da5c22db3b14329..0a5d1ae545f7ff646b826b2a75f7647ab226ea7e 100644 --- a/o2server/x_query_core_entity/src/main/java/com/x/query/core/entity/schema/Statement.java +++ b/o2server/x_query_core_entity/src/main/java/com/x/query/core/entity/schema/Statement.java @@ -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