diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/ThisApplication.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/ThisApplication.java index 21c16b3e352322cbea8caeea2d493ad838f8865a..87b5f4a3aecedb7c9d543df1979eb11374befcf3 100644 --- a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/ThisApplication.java +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/ThisApplication.java @@ -3,10 +3,7 @@ package com.x.cms.assemble.control; import com.x.base.core.project.Context; import com.x.base.core.project.message.MessageConnector; import com.x.cms.assemble.control.queue.*; -import com.x.cms.assemble.control.timertask.Timertask_BatchOperationTask; -import com.x.cms.assemble.control.timertask.Timertask_CheckDocumentReviewStatus; -import com.x.cms.assemble.control.timertask.Timertask_InitOperationRunning; -import com.x.cms.assemble.control.timertask.Timertask_LogRecordCheckTask; +import com.x.cms.assemble.control.timertask.*; import java.util.concurrent.ConcurrentHashMap; @@ -53,6 +50,10 @@ public class ThisApplication { // 每天凌晨2点执行一次 context.schedule( Timertask_LogRecordCheckTask.class, "0 0 2 * * ?" ); context.schedule( Timertask_BatchOperationTask.class, "0 */5 * * * ?" ); + + //每天凌晨2点,计算所有的文档的权限信息 + context.schedule( Timertask_RefreshAllDocumentReviews.class, "0 0 2 * * ?" ); + context.scheduleLocal( Timertask_CheckDocumentReviewStatus.class, 1200 ); context.scheduleLocal( Timertask_InitOperationRunning.class, 150 ); } diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/ActionApplication.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/ActionApplication.java index 1219e551c34aa04989fbb3b8e8fc1e8c6256bc1d..02be52f0a8226cb20bcd2eaa603d6797f0729124 100644 --- a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/ActionApplication.java +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/ActionApplication.java @@ -26,6 +26,7 @@ import com.x.cms.assemble.control.jaxrs.log.LogAction; import com.x.cms.assemble.control.jaxrs.output.OutputAction; import com.x.cms.assemble.control.jaxrs.permission.PermissionAction; import com.x.cms.assemble.control.jaxrs.permission.PermissionForDocumentAction; +import com.x.cms.assemble.control.jaxrs.permission.PermissionManagerAction; import com.x.cms.assemble.control.jaxrs.queryview.QueryViewAction; import com.x.cms.assemble.control.jaxrs.queryviewdesign.QueryViewDesignAction; import com.x.cms.assemble.control.jaxrs.script.ScriptAction; @@ -53,6 +54,7 @@ public class ActionApplication extends AbstractActionApplication { this.classes.add(DocumentAction.class); this.classes.add(DocumentCipherAction.class); this.classes.add(PermissionForDocumentAction.class); + this.classes.add(PermissionManagerAction.class); this.classes.add(DocumentViewRecordAction.class); this.classes.add(FileInfoAction.class); this.classes.add(FileAction.class); diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/CmsJaxrsCipherFilter.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/CmsJaxrsCipherFilter.java index 28e7561a8c00a363d29ee2c612959aaa5c940667..91ce44c940d5d4da17d000873edb13dd51ff4ac5 100644 --- a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/CmsJaxrsCipherFilter.java +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/CmsJaxrsCipherFilter.java @@ -1,6 +1,6 @@ package com.x.cms.assemble.control.jaxrs; -import com.x.base.core.project.jaxrs.CipherJaxrsFilter; +import com.x.base.core.project.jaxrs.CipherManagerJaxrsFilter; import javax.servlet.annotation.WebFilter; @@ -11,8 +11,9 @@ import javax.servlet.annotation.WebFilter; * @author O2LEE * */ @WebFilter(urlPatterns = { - "/jaxrs/document/cipher/*" + "/jaxrs/document/cipher/*", + "/jaxrs/permission/manager*" }, asyncSupported = true ) -public class CmsJaxrsCipherFilter extends CipherJaxrsFilter { +public class CmsJaxrsCipherFilter extends CipherManagerJaxrsFilter { } \ No newline at end of file diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/permission/ActionRefreshAllDocumentPermission.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/permission/ActionRefreshAllDocumentPermission.java new file mode 100644 index 0000000000000000000000000000000000000000..e0b86425cab44e1fc09fd909f41a8f1bac340082 --- /dev/null +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/permission/ActionRefreshAllDocumentPermission.java @@ -0,0 +1,43 @@ +package com.x.cms.assemble.control.jaxrs.permission; + +import com.x.base.core.project.annotation.FieldDescribe; +import com.x.base.core.project.cache.ApplicationCache; +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.cms.assemble.control.service.DocumentPersistService; +import com.x.base.core.project.jaxrs.WrapString; +import com.x.cms.core.entity.Document; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +public class ActionRefreshAllDocumentPermission extends BaseAction { + + private static Logger logger = LoggerFactory.getLogger(ActionRefreshAllDocumentPermission.class); + + protected ActionResult execute(HttpServletRequest request, EffectivePerson effectivePerson) throws Exception { + ActionResult result = new ActionResult<>(); + Boolean check = true; + Wo wo = new Wo(); + DocumentPersistService documentPersistService = new DocumentPersistService(); + + if (check) { + try { + documentPersistService.refreshAllDocumentPermission(); + wo.setValue("权限处理完成!"); + result.setData(wo); + } catch (Exception e) { + Exception exception = new ExceptionDocumentPermissionProcess(e, "文档权限管理时出现异常。"); + result.error(exception); + logger.error(e, effectivePerson, request, null); + } + } + ApplicationCache.notify(Document.class); + return result; + } + + public static class Wo extends WrapString { + } +} \ No newline at end of file diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/permission/ExceptionDocumentPermissionProcess.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/permission/ExceptionDocumentPermissionProcess.java new file mode 100644 index 0000000000000000000000000000000000000000..b1840df67c30eeb3b6b2714839850cb4e4ff3ab7 --- /dev/null +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/permission/ExceptionDocumentPermissionProcess.java @@ -0,0 +1,12 @@ +package com.x.cms.assemble.control.jaxrs.permission; + +import com.x.base.core.project.exception.PromptException; + +class ExceptionDocumentPermissionProcess extends PromptException { + + private static final long serialVersionUID = 1859164370743532895L; + + ExceptionDocumentPermissionProcess(Throwable e, String message ) { + super( message, e ); + } +} diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/permission/PermissionManagerAction.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/permission/PermissionManagerAction.java new file mode 100644 index 0000000000000000000000000000000000000000..36f513a505fde8522aa06cd25cf6333c7991cabf --- /dev/null +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/permission/PermissionManagerAction.java @@ -0,0 +1,51 @@ +package com.x.cms.assemble.control.jaxrs.permission; + +import com.x.base.core.project.annotation.JaxrsDescribe; +import com.x.base.core.project.annotation.JaxrsMethodDescribe; +import com.x.base.core.project.http.ActionResult; +import com.x.base.core.project.http.EffectivePerson; +import com.x.base.core.project.http.HttpMediaType; +import com.x.base.core.project.jaxrs.ResponseFactory; +import com.x.base.core.project.jaxrs.StandardJaxrsAction; +import com.x.base.core.project.jaxrs.proxy.StandardJaxrsActionProxy; +import com.x.base.core.project.logger.Logger; +import com.x.base.core.project.logger.LoggerFactory; +import com.x.cms.assemble.control.ThisApplication; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.container.AsyncResponse; +import javax.ws.rs.container.Suspended; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + +@Path("permission/manager") +@JaxrsDescribe("文档权限操作服务(管理员)") +public class PermissionManagerAction extends StandardJaxrsAction { + + private StandardJaxrsActionProxy proxy = new StandardJaxrsActionProxy(ThisApplication.context()); + private static Logger logger = LoggerFactory.getLogger( PermissionManagerAction.class ); + + @JaxrsMethodDescribe(value = "重新计算所有文档的权限信息.", action = ActionRefreshAllDocumentPermission.class) + @GET + @Path("refresh/all") + @Produces(HttpMediaType.APPLICATION_JSON_UTF_8) + @Consumes(MediaType.APPLICATION_JSON) + public void refreshAllDocument( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request ) { + EffectivePerson effectivePerson = this.effectivePerson( request ); + ActionResult result = new ActionResult<>(); + Boolean check = true; + if( check ){ + try { + result = new ActionRefreshAllDocumentPermission().execute( request, effectivePerson ); + } catch (Exception e) { + result = new ActionResult<>(); + Exception exception = new ExceptionAppCategoryAdminProcess( e, "查询登录用户是否指定栏目的管理员时发生异常。" ); + result.error( exception ); + logger.error( e, effectivePerson, request, null); + } + } + asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); + } + +} \ No newline at end of file diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/DocumentPersistService.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/DocumentPersistService.java index a7dd0b0bc13374a9c63726c0749d09d478f1dcd8..b2dd375f50f9e3d4966d024332658e3e73bcf981 100644 --- a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/DocumentPersistService.java +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/DocumentPersistService.java @@ -5,6 +5,7 @@ import com.x.base.core.container.EntityManagerContainer; import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.entity.annotation.CheckPersistType; import com.x.base.core.entity.dataitem.ItemCategory; +import com.x.base.core.project.cache.ApplicationCache; import com.x.base.core.project.tools.ListTools; import com.x.cms.assemble.control.DocumentDataHelper; import com.x.cms.assemble.control.jaxrs.document.ActionPersistBatchModifyData.WiDataChange; @@ -320,4 +321,33 @@ public class DocumentPersistService { } permissionService.refreshDocumentPermission(docId, permissionList); } + + /** + * 重新计算所有的文档的权限和review信息 + */ + public void refreshAllDocumentPermission() throws Exception { + //根据栏目一个一个来查询 + AppInfoServiceAdv appInfoService = new AppInfoServiceAdv(); + DocumentQueryService documentQueryService = new DocumentQueryService(); + DocumentPersistService documentPersistService = new DocumentPersistService(); + List appIds = appInfoService.listAllIds("信息"); + List documentIds = null; + ReviewService reviewService = new ReviewService(); + if( ListTools.isNotEmpty( appIds )){ + for( String appId : appIds ){ + //查询指定App中所有的文档Id + documentIds = documentQueryService.listIdsByAppId( appId, "信息", 20000 ); + if( ListTools.isNotEmpty( documentIds )){ + for( String documentId : documentIds ){ + try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create() ) { + reviewService.refreshDocumentReview(emc, documentId); + } catch ( Exception e ) { + throw e; + } + } + } + } + ApplicationCache.notify(Document.class); + } + } } diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/PermissionOperateService.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/PermissionOperateService.java index 961a6ef7053b9ac4719f812ac115da8c97c21e95..4ed0dbe72c44350d6842a50f490bc6eecc86cb8f 100644 --- a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/PermissionOperateService.java +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/PermissionOperateService.java @@ -3,6 +3,12 @@ package com.x.cms.assemble.control.service; import java.util.ArrayList; import java.util.List; +import com.google.gson.JsonElement; +import com.x.base.core.entity.dataitem.DataItemConverter; +import com.x.base.core.project.gson.XGsonBuilder; +import com.x.cms.assemble.control.DocumentDataHelper; +import com.x.cms.core.entity.content.Data; +import com.x.query.core.entity.Item; import org.apache.commons.lang3.StringUtils; import org.apache.openjpa.lib.util.StringUtil; @@ -22,7 +28,7 @@ public class PermissionOperateService { private static Logger logger = LoggerFactory.getLogger(PermissionOperateService.class); /** * 根据文档ID,为文档设置用户访问和管理权限 - * @param document + * @param docId * @param readerList * @param authorList * @throws Exception @@ -131,7 +137,7 @@ public class PermissionOperateService { /** * 根据文档ID,为文档设置用户访问和管理权限 - * @param docmentId + * @param docId * @param permissionList * @throws Exception */ @@ -206,4 +212,112 @@ public class PermissionOperateService { throw e; } } + +// /** +// * 根据文档的权限信息组织所有的权限对象列表 +// * @param document +// * @throws Exception +// */ +// public List composeDocmentAllPermissions( Document document ) throws Exception { +// +// List permissionList = new ArrayList<>(); +// //处理创建者 +// permissionList.add( new PermissionInfo( PermissionName.READER, "人员", document.getCreatorIdentity(), document.getCreatorIdentity() ) ); +// permissionList.add( new PermissionInfo( PermissionName.AUTHOR, "人员", document.getCreatorIdentity(), document.getCreatorIdentity() ) ); +// permissionList.add( new PermissionInfo( PermissionName.MANAGER, "人员", document.getCreatorIdentity(), document.getCreatorIdentity() ) ); +// +// if ( ListTools.isEmpty( document.getAuthorPersonList() ) ) { +// for( String permissionCode : document.getAuthorPersonList() ){ +// if( !existsPermission(permissionList, PermissionName.AUTHOR, "permissionCode") ){ +// if( StringUtils.equalsIgnoreCase("所有人", permissionCode )){ +// permissionList.add( new PermissionInfo( PermissionName.AUTHOR, "所有人", "所有人", "所有人" ) ); +// }else{ +// permissionList.add( new PermissionInfo( PermissionName.AUTHOR, "人员", permissionCode, permissionCode ) ); +// } +// } +// } +// } +// +// if ( ListTools.isEmpty( document.getAuthorUnitList() ) ) { +// for( String permissionCode : document.getAuthorUnitList() ){ +// if( !existsPermission(permissionList, PermissionName.AUTHOR, "permissionCode") ){ +// if( StringUtils.equalsIgnoreCase("所有人", permissionCode )){ +// permissionList.add( new PermissionInfo( PermissionName.AUTHOR, "所有人", "所有人", "所有人" ) ); +// }else{ +// permissionList.add( new PermissionInfo( PermissionName.AUTHOR, "组织", permissionCode, permissionCode ) ); +// } +// } +// } +// } +// +// if ( ListTools.isEmpty( document.getAuthorGroupList() ) ) { +// for( String permissionCode : document.getAuthorUnitList() ){ +// if( !existsPermission(permissionList, PermissionName.AUTHOR, "permissionCode") ){ +// if( StringUtils.equalsIgnoreCase("所有人", permissionCode )){ +// permissionList.add( new PermissionInfo( PermissionName.AUTHOR, "所有人", "所有人", "所有人" ) ); +// }else{ +// permissionList.add( new PermissionInfo( PermissionName.AUTHOR, "群组", permissionCode, permissionCode ) ); +// } +// } +// } +// } +// +// if ( ListTools.isEmpty( document.getReadPersonList() ) ) { +// for( String permissionCode : document.getReadPersonList() ){ +// if( !existsPermission(permissionList, PermissionName.READER, "permissionCode") ){ +// if( StringUtils.equalsIgnoreCase("所有人", permissionCode )){ +// permissionList.add( new PermissionInfo( PermissionName.READER, "所有人", "所有人", "所有人" ) ); +// }else{ +// permissionList.add( new PermissionInfo( PermissionName.READER, "人员", permissionCode, permissionCode ) ); +// } +// } +// } +// } +// +// if ( ListTools.isEmpty( document.getReadUnitList() ) ) { +// for( String permissionCode : document.getReadUnitList() ){ +// if( !existsPermission(permissionList, PermissionName.READER, "permissionCode") ) { +// if( StringUtils.equalsIgnoreCase("所有人", permissionCode )){ +// permissionList.add( new PermissionInfo( PermissionName.READER, "所有人", "所有人", "所有人" ) ); +// }else{ +// permissionList.add( new PermissionInfo( PermissionName.READER, "组织", permissionCode, permissionCode ) ); +// } +// } +// +// } +// } +// +// if ( ListTools.isEmpty( document.getReadGroupList() ) ) { +// for( String permissionCode : document.getReadGroupList() ){ +// if( !existsPermission(permissionList, PermissionName.READER, "permissionCode") ){ +// if( StringUtils.equalsIgnoreCase("所有人", permissionCode )){ +// permissionList.add( new PermissionInfo( PermissionName.READER, "所有人", "所有人", "所有人" ) ); +// }else{ +// permissionList.add( new PermissionInfo( PermissionName.READER, "群组", permissionCode, permissionCode ) ); +// } +// } +// } +// } +// +// if ( ListTools.isEmpty( document.getManagerList() ) ) { +// for( String permissionCode : document.getManagerList() ){ +// if( !existsPermission(permissionList, PermissionName.MANAGER, "permissionCode") ){ +// permissionList.add( new PermissionInfo( PermissionName.MANAGER, "人员", permissionCode, permissionCode ) ); +// } +// } +// } +// return permissionList; +// } + + private boolean existsPermission(List permissionList, String objectType, String permissionCode) { + if( ListTools.isNotEmpty( permissionList )){ + for ( PermissionInfo permission : permissionList ){ + if( StringUtils.equalsIgnoreCase( permission.getPermissionObjectCode(), permissionCode ) && + StringUtils.equalsIgnoreCase( permission.getPermissionObjectType(), objectType )){ + return true; + } + } + } + return false; + } } diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/ReviewService.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/ReviewService.java index 7b28fc689265bf2eb5552781648d54e9e1b03f01..f11fdd00d28dea0333df318966f4d1572859ddd2 100644 --- a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/ReviewService.java +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/ReviewService.java @@ -108,6 +108,7 @@ public class ReviewService { Document document = emc.find( docId, Document.class ); if( document != null ) { + AppInfo appInfo = emc.find( document.getAppId(), AppInfo.class ); CategoryInfo categoryInfo = emc.find( document.getCategoryId(), CategoryInfo.class ); diff --git a/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/timertask/Timertask_RefreshAllDocumentReviews.java b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/timertask/Timertask_RefreshAllDocumentReviews.java new file mode 100644 index 0000000000000000000000000000000000000000..7dddcb250100e1a1792aa2935a9d73f72008fc60 --- /dev/null +++ b/o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/timertask/Timertask_RefreshAllDocumentReviews.java @@ -0,0 +1,23 @@ +package com.x.cms.assemble.control.timertask; + +import com.x.base.core.project.schedule.AbstractJob; +import com.x.cms.assemble.control.service.CmsBatchOperationPersistService; +import com.x.cms.assemble.control.service.DocumentPersistService; +import com.x.cms.assemble.control.service.ReviewService; +import org.quartz.JobExecutionContext; + +/** + * 重新计算所有文档的权限信息 + * + */ +public class Timertask_RefreshAllDocumentReviews extends AbstractJob { + + private CmsBatchOperationPersistService cmsBatchOperationPersistService; + + @Override + public void schedule(JobExecutionContext jobExecutionContext) throws Exception { + DocumentPersistService documentPersistService = new DocumentPersistService(); + documentPersistService.refreshAllDocumentPermission(); + } + +} \ No newline at end of file