提交 156e88a4 编写于 作者: liyi_hz2008's avatar liyi_hz2008 提交者: liyi_hz2008

CMS增加定时重新计算和维护Review权限信息的功能(临时解决方案)

上级 5210bf89
......@@ -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 );
}
......
......@@ -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);
......
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
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<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson) throws Exception {
ActionResult<Wo> 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
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 );
}
}
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<ActionRefreshAllDocumentPermission.Wo> 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
......@@ -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<String> appIds = appInfoService.listAllIds("信息");
List<String> 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);
}
}
}
......@@ -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<PermissionInfo> composeDocmentAllPermissions( Document document ) throws Exception {
//
// List<PermissionInfo> 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<PermissionInfo> 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;
}
}
......@@ -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 );
......
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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册