diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionPersistPublishContent.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionPersistPublishContent.java index 2ab222e166b33502b95c8ac8093fc78e69442119..70ecd415f6a46c88345d1dbcc550ef12ee8fc67c 100644 --- a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionPersistPublishContent.java +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionPersistPublishContent.java @@ -176,6 +176,15 @@ public class ActionPersistPublishContent extends BaseAction { if (check) { try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + + if ( StringUtils.isEmpty( wi.getIdentity())) { + wi.setCreatorIdentity( wi.getIdentity() ); + } + + if ( StringUtils.isEmpty( wi.getCreatorPerson())) { + wi.setCreatorPerson( effectivePerson.getDistinguishedName() ); + } + if (StringUtils.isEmpty( wi.getCreatorIdentity() )) { if( "cipher".equalsIgnoreCase( effectivePerson.getDistinguishedName() )) { wi.setCreatorIdentity("cipher"); @@ -188,13 +197,13 @@ public class ActionPersistPublishContent extends BaseAction { wi.setCreatorUnitName("xadmin"); wi.setCreatorTopUnitName("xadmin"); }else { - //尝试一下根据当前用户获取用户的第一个身份 - wi.setCreatorIdentity(userManagerService.getMajorIdentityWithPerson( effectivePerson.getDistinguishedName()) ); + //尝试一下根据传入的用户或者当前用户获取用户的第一个身份 + wi.setCreatorIdentity(userManagerService.getMajorIdentityWithPerson( wi.getCreatorPerson() ) ); } } if ( !StringUtils.equals( "cipher", wi.getCreatorIdentity() ) && !StringUtils.equals( "xadmin", wi.getCreatorIdentity() )) { - //说明是指定的发布者,并不使用cipher和xadmin代替 + //说明是实际的用户,并不使用cipher和xadmin代替 if (StringUtils.isNotEmpty( wi.getCreatorIdentity() )) { wi.setCreatorPerson( userManagerService.getPersonNameWithIdentity( wi.getCreatorIdentity() ) ); wi.setCreatorUnitName( userManagerService.getUnitNameByIdentity( wi.getCreatorIdentity() ) ); @@ -450,7 +459,7 @@ public class ActionPersistPublishContent extends BaseAction { private String id = null; - @FieldDescribe( "文档操作者身份." ) + @FieldDescribe( "文档操作者身份" ) private String identity = null; @FieldDescribe( "数据的路径列表." ) @@ -488,15 +497,18 @@ public class ActionPersistPublishContent extends BaseAction { @FieldDescribe("文档类型,跟随分类类型,信息(默认) | 数据") private String documentType = "信息"; + @FieldDescribe("文档状态: published | draft | checking | error") + private String docStatus = "draft"; + + @FieldDescribe("分类ID") + private String categoryId; + private String appId; private String appName; private String appAlias; - @FieldDescribe("分类ID") - private String categoryId; - private String categoryName; private String categoryAlias; @@ -519,9 +531,6 @@ public class ActionPersistPublishContent extends BaseAction { private String creatorTopUnitName; - @FieldDescribe("文档状态: published | draft | checking | error") - private String docStatus = "draft"; - private String description = null; private Long viewCount = 0L; diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionQueryListWithFilterPagingAdmin.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionQueryListWithFilterPagingAdmin.java new file mode 100644 index 0000000000000000000000000000000000000000..468642535cda140ece394018f58be57d61e6f564 --- /dev/null +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionQueryListWithFilterPagingAdmin.java @@ -0,0 +1,218 @@ +package com.x.cms.assemble.control.jaxrs.document; + +import com.google.gson.JsonElement; +import com.x.base.core.entity.JpaObject; +import com.x.base.core.project.annotation.FieldDescribe; +import com.x.base.core.project.bean.WrapCopier; +import com.x.base.core.project.bean.WrapCopierFactory; +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.tools.ListTools; +import com.x.cms.core.entity.Document; +import com.x.cms.core.express.tools.filter.QueryFilter; +import org.apache.commons.lang3.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +/** + * 管理员用 + */ +public class ActionQueryListWithFilterPagingAdmin extends BaseAction { + + private static Logger logger = LoggerFactory.getLogger(ActionQueryListWithFilterPagingAdmin.class); + + protected ActionResult> execute( HttpServletRequest request, Integer page, Integer size, JsonElement jsonElement, EffectivePerson effectivePerson ) { + ActionResult> result = new ActionResult<>(); + Long total = 0L; + Wi wi = null; + List wos = new ArrayList<>(); + List searchResultList = new ArrayList<>(); + Boolean check = true; + Boolean isManager = false; + String personName = effectivePerson.getDistinguishedName(); + QueryFilter queryFilter = null; + + try { + wi = this.convertToWrapIn( jsonElement, Wi.class ); + } catch (Exception e ) { + check = false; + Exception exception = new ExceptionDocumentInfoProcess( e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString() ); + result.error( exception ); + logger.error( e, effectivePerson, request, null); + } + if ( wi == null ) { wi = new Wi(); } + + if( StringUtils.isNotEmpty( wi.getPerson() )){ + personName = wi.getPerson(); + } + + if( StringUtils.isEmpty( wi.getDocumentType() )) { + wi.setDocumentType( "信息" ); + } + + if( StringUtils.isNotEmpty( wi.getOrderField() )) { + wi.setOrderField( "createTime" ); + } + + if( StringUtils.isNotEmpty( wi.getOrderType() )) { + wi.setOrderField( "DESC" ); + } + + if( ListTools.isNotEmpty( wi.getStatusList() )) { + List status = new ArrayList<>(); + status.add( "published" ); + wi.setStatusList( status ); + } + + if (check) { + try { + queryFilter = wi.getQueryFilter(); + } catch (Exception e) { + check = false; + Exception exception = new ExceptionDocumentInfoProcess(e, "系统在获取查询条件信息时发生异常。"); + result.error(exception); + logger.error(e, effectivePerson, request, null); + } + } + + if( check ) { + if( StringUtils.equals( effectivePerson.getDistinguishedName(), personName )){ + //管理员身份,查全部的 + try { + if( effectivePerson.isManager() || userManagerService.isHasPlatformRole( personName, "CMSManager" )) { + isManager = true; + } + } catch (Exception e) { + check = false; + Exception exception = new ExceptionDocumentInfoProcess(e, "系统在判断用户是否是管理时发生异常。"); + result.error(exception); + logger.error(e, effectivePerson, request, null); + } + }else{ + //管理员查其他人的,以指定人员的权限为准 + logger.info( "管理员正在尝试查询人员[ {} ]可见的文档信息列表......", personName ); + try { + if( StringUtils.equals( "xadmin", personName ) + || userManagerService.isHasPlatformRole( personName, "CMSManager" ) + || userManagerService.isHasPlatformRole( personName, "Manager" )) { + isManager = true; + } + } catch (Exception e) { + check = false; + Exception exception = new ExceptionDocumentInfoProcess(e, "系统在判断用户是否是管理时发生异常。"); + result.error(exception); + logger.error(e, effectivePerson, request, null); + } + } + } + + if (check) { + // 从Review表中查询符合条件的对象总数 + try { + if( isManager ) { + personName = null; + } + total = documentQueryService.countWithCondition( personName, queryFilter ); + } catch (Exception e) { + check = false; + Exception exception = new ExceptionDocumentInfoProcess(e, "系统在获取用户可查询到的文档数据条目数量时发生异常。"); + result.error(exception); + logger.error(e, effectivePerson, request, null); + } + } + + if (check) { + //document和Review除了sequence还有5个排序列支持title, appAlias, categoryAlias, categoryName, creatorUnitName的分页查询 + //除了sequence和title, appAlias, categoryAlias, categoryName, creatorUnitName之外,其他的列排序全部在内存进行分页 + try { + searchResultList = documentQueryService.listPagingWithCondition( personName, wi.getOrderField(), wi.getOrderType(), queryFilter, page, size ); + } catch (Exception e) { + check = false; + Exception exception = new ExceptionDocumentInfoProcess(e, "系统在根据用户可访问的文档ID列表对文档进行分页查询时发生异常。"); + result.error(exception); + logger.error(e, effectivePerson, request, null); + } + } + + if (check) { + if ( searchResultList != null ) { + Wo wo = null; + for( Document document : searchResultList ) { + try { + wo = Wo.copier.copy( document ); + if( wo.getCreatorPerson() != null && !wo.getCreatorPerson().isEmpty() ) { + wo.setCreatorPersonShort( wo.getCreatorPerson().split( "@" )[0]); + } + if( wo.getCreatorUnitName() != null && !wo.getCreatorUnitName().isEmpty() ) { + wo.setCreatorUnitNameShort( wo.getCreatorUnitName().split( "@" )[0]); + } + if( wo.getCreatorTopUnitName() != null && !wo.getCreatorTopUnitName().isEmpty() ) { + wo.setCreatorTopUnitNameShort( wo.getCreatorTopUnitName().split( "@" )[0]); + } + if( wi.getNeedData() ) { + //需要组装数据 + wo.setData( documentQueryService.getDocumentData( document ) ); + } + } catch (Exception e) { + check = false; + Exception exception = new ExceptionDocumentInfoProcess(e, "系统获取文档数据内容信息时发生异常。Id:" + document.getCategoryId()); + result.error(exception); + logger.error(e, effectivePerson, request, null); + } + wos.add( wo ); + } + } + } + result.setCount(total); + result.setData(wos); + return result; + } + + public class DocumentCacheForFilter { + + private Long total = 0L; + private List documentList = null; + + public Long getTotal() { + return total; + } + + public void setTotal(Long total) { + this.total = total; + } + + public List getDocumentList() { + return documentList; + } + + public void setDocumentList(List documentList) { + this.documentList = documentList; + } + } + + public static class Wi extends WrapInDocumentFilter{ + + @FieldDescribe( "可以查询的人员:DistinguishedName" ) + private String person = ""; + + public String getPerson() { + return person; + } + + public void setPerson(String person) { + this.person = person; + } + } + + public static class Wo extends WrapOutDocumentList { + + public static List Excludes = new ArrayList(); + + public static WrapCopier copier = WrapCopierFactory.wo( Document.class, Wo.class, null,JpaObject.FieldsInvisible); + + } +} \ No newline at end of file diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/DocumentCipherAction.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/DocumentCipherAction.java index d29b81dd0913e80c68c6dec4ed2960632c8535fa..271a2e003b352052f8469b5b75fac19903716530 100644 --- a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/DocumentCipherAction.java +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/DocumentCipherAction.java @@ -1,10 +1,7 @@ package com.x.cms.assemble.control.jaxrs.document; import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.Consumes; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -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; @@ -13,6 +10,7 @@ import javax.ws.rs.core.MediaType; import com.google.gson.JsonElement; import com.x.base.core.project.annotation.JaxrsDescribe; import com.x.base.core.project.annotation.JaxrsMethodDescribe; +import com.x.base.core.project.annotation.JaxrsParameterDescribe; import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.HttpMediaType; @@ -21,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("document/cipher") @JaxrsDescribe("信息发布信息文档管理(Cipher)") public class DocumentCipherAction extends StandardJaxrsAction{ @@ -48,4 +48,28 @@ public class DocumentCipherAction extends StandardJaxrsAction{ } asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); } + + @JaxrsMethodDescribe(value = "分页查询符合过滤条件的已发布的信息内容(管理员和Ciper使用).", action = ActionQueryListWithFilterPagingAdmin.class) + @PUT + @Path("filter/list/{page}/size/{size}") + @Produces(HttpMediaType.APPLICATION_JSON_UTF_8) + @Consumes(MediaType.APPLICATION_JSON) + public void query_listWithFilterPaging( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, + @JaxrsParameterDescribe("分页") @PathParam("page") Integer page, + @JaxrsParameterDescribe("数量") @PathParam("size") Integer size, JsonElement jsonElement) { + EffectivePerson effectivePerson = this.effectivePerson( request ); + ActionResult> result = new ActionResult<>(); + Boolean check = true; + + if( check ){ + try { + result = new ActionQueryListWithFilterPagingAdmin().execute( request, page, size, jsonElement, effectivePerson ); + } catch (Exception e) { + result = new ActionResult<>(); + result.error( e ); + logger.error( e, effectivePerson, request, null); + } + } + asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); + } } \ No newline at end of file