浏览代码

system logs

MaxKey 3 年之前
父节点
当前提交
3a65a66620
共有 26 个文件被更改,包括 519 次插入125 次删除
  1. 15 7
      maxkey-core/src/main/java/org/maxkey/constants/ConstsEntryType.java
  2. 34 13
      maxkey-core/src/main/java/org/maxkey/constants/ConstsOperateAction.java
  3. 4 10
      maxkey-core/src/main/java/org/maxkey/constants/ConstsOperateResult.java
  4. 20 18
      maxkey-core/src/main/java/org/maxkey/entity/HistorySystemLogs.java
  5. 191 1
      maxkey-persistence/src/main/java/org/maxkey/persistence/service/HistorySystemLogsService.java
  6. 6 2
      maxkey-persistence/src/main/java/org/maxkey/persistence/service/UserInfoService.java
  7. 3 3
      maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/HistorySystemLogsMapper.xml
  8. 23 52
      maxkey-web-frontend/maxkey-web-mgt-app/src/app/routes/audit/audit-system-logs/audit-system-logs.component.html
  9. 1 1
      maxkey-web-frontend/maxkey-web-mgt-app/src/assets/i18n/en-US.json
  10. 1 1
      maxkey-web-frontend/maxkey-web-mgt-app/src/assets/i18n/zh-CN.json
  11. 13 0
      maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/ChangePasswodController.java
  12. 2 2
      maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/SafeController.java
  13. 4 0
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupMemberController.java
  14. 4 0
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupPrivilegesController.java
  15. 25 0
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupsController.java
  16. 4 0
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/LoginSessionController.java
  17. 4 0
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/apps/contorller/BaseAppContorller.java
  18. 5 5
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/LocalizationController.java
  19. 31 0
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/AccountsController.java
  20. 25 0
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/OrganizationsController.java
  21. 9 9
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/UserAdjointController.java
  22. 37 1
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/UserInfoController.java
  23. 25 0
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/ResourcesController.java
  24. 4 0
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RoleMemberController.java
  25. 4 0
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RolePrivilegesController.java
  26. 25 0
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RolesController.java

+ 15 - 7
maxkey-core/src/main/java/org/maxkey/constants/ConstsEntryType.java

@@ -1,5 +1,5 @@
 /*
- * Copyright [2020] [MaxKey of copyright http://www.maxkey.top]
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,16 +19,24 @@ package org.maxkey.constants;
 
 public class ConstsEntryType {
 
-    public static int USERINFO_TYPE 	= 1;
+    public static String USERINFO 			= "user";
     
-    public static int ORGANIZATION_TYPE = 2;
+    public static String ORGANIZATION 		= "organization";
     
-    public static int GROUP_TYPE 		= 3;
+    public static String APPLICATION	 	= "application";
     
-    public static int PASSWORD_TYPE 	= 4;
+    public static String GROUP	 			= "group";
+    
+    public static String ACCOUNT 			= "account";
+    
+    public static String ROLE 				= "role";
+    
+    public static String PASSWORD 			= "password";
+    
+    public static String RESOURCE 			= "resource";
+    
+    public static String PERMISSION 		= "permission";
     
-    public static int RESOURCES_TYPE 	= 5;
     
-    public static int PERMISSIONS_TYPE 	= 6;
 
 }

+ 34 - 13
maxkey-core/src/main/java/org/maxkey/constants/ConstsOperateAction.java

@@ -17,20 +17,41 @@
 
 package org.maxkey.constants;
 
-public final class ConstsOperateAction {
-
-    public static final int CREATE_ACTION 			= 1;
-
-    public static final int DELETE_ACTION 			= 2;
-
-    public static final int UPDATE_ACTION 			= 3;
+import java.util.concurrent.ConcurrentHashMap;
 
-    public static final int CHANGE_PASSWORD_ACTION 	= 4;
-
-    public static final int ADD_MEMBER_ACTION 		= 5;
-
-    public static final int DELETE_MEMBER_ACTION 	= 6;
+public final class ConstsOperateAction {
 
-    public static final int VIEW_ACTION 			= 7;
+    public static final String CREATE 			= "create";
+
+    public static final String DELETE 			= "delete";
+
+    public static final String UPDATE 			= "update";
+
+    public static final String CHANGE_PASSWORD 	= "change_password";
+
+    public static final String ADD_MEMBER 		= "add_member";
+
+    public static final String DELETE_MEMBER 	= "delete_member";
+    
+    public static final String ENABLE 			= "enable";
+    
+    public static final String DISABLE 			= "disable";
+    
+    public static final String LOCK 			= "lock";
+    
+    public static final String UNLOCK 			= "unlock";
+
+    public static final String VIEW 			= "view";
+    
+    public static ConcurrentHashMap<Integer,String> statusActon ;
+    
+    static {
+    	statusActon= new ConcurrentHashMap<Integer,String>();
+    	statusActon.put(ConstsStatus.ACTIVE, ENABLE);
+    	statusActon.put(ConstsStatus.DISABLED, DISABLE);
+    	statusActon.put(ConstsStatus.LOCK, LOCK);
+    	statusActon.put(ConstsStatus.UNLOCK, UNLOCK);
+    	statusActon.put(ConstsStatus.DELETE, DELETE);
+    }
 
 }

+ 4 - 10
maxkey-core/src/main/java/org/maxkey/constants/ConstsOperateMessage.java → maxkey-core/src/main/java/org/maxkey/constants/ConstsOperateResult.java

@@ -17,15 +17,9 @@
 
 package org.maxkey.constants;
 
-public final class ConstsOperateMessage {
-
-    public static final String INSERT_SUCCESS 	= "message.action.insert.success";
-    public static final String INSERT_ERROR 	= "message.action.insert.error";
-
-    public static final String UPDATE_SUCCESS 	= "message.action.update.success";
-    public static final String UPDATE_ERROR 	= "message.action.update.error";
-
-    public static final String DELETE_SUCCESS 	= "message.action.delete.success";
-    public static final String DELETE_ERROR 	= "message.action.delete.error";
+public final class ConstsOperateResult {
+    public static final String SUCCESS 	= "success";
+    public static final String ERROR 	= "error";
+    public static final String FAIL 	= "fail";
 
 }

+ 20 - 18
maxkey-core/src/main/java/org/maxkey/entity/HistorySystemLogs.java

@@ -44,7 +44,7 @@ public class HistorySystemLogs extends JpaBaseEntity implements Serializable {
     @Column
     String message;
     @Column
-    String messageType;
+    String messageAction;
     @Column
     String messageResult;
     @Column
@@ -58,6 +58,8 @@ public class HistorySystemLogs extends JpaBaseEntity implements Serializable {
 	@Column
 	private String instId;
 
+	String jsonCotent;
+	
 	private String instName;
     String startDate;
     String endDate;
@@ -90,14 +92,12 @@ public class HistorySystemLogs extends JpaBaseEntity implements Serializable {
 		this.message = message;
 	}
 
-
-
-	public String getMessageType() {
-		return messageType;
+	public String getMessageAction() {
+		return messageAction;
 	}
 
-	public void setMessageType(String messageType) {
-		this.messageType = messageType;
+	public void setMessageAction(String messageAction) {
+		this.messageAction = messageAction;
 	}
 
 	public String getMessageResult() {
@@ -172,17 +172,25 @@ public class HistorySystemLogs extends JpaBaseEntity implements Serializable {
 		this.endDate = endDate;
 	}
 
+	public String getJsonCotent() {
+		return jsonCotent;
+	}
+
+	public void setJsonCotent(String jsonCotent) {
+		this.jsonCotent = jsonCotent;
+	}
+
 	@Override
 	public String toString() {
 		StringBuilder builder = new StringBuilder();
-		builder.append("HistoryLogs [id=");
+		builder.append("HistorySystemLogs [id=");
 		builder.append(id);
 		builder.append(", topic=");
 		builder.append(topic);
 		builder.append(", message=");
 		builder.append(message);
-		builder.append(", messageType=");
-		builder.append(messageType);
+		builder.append(", messageAction=");
+		builder.append(messageAction);
 		builder.append(", messageResult=");
 		builder.append(messageResult);
 		builder.append(", userId=");
@@ -193,14 +201,8 @@ public class HistorySystemLogs extends JpaBaseEntity implements Serializable {
 		builder.append(displayName);
 		builder.append(", executeTime=");
 		builder.append(executeTime);
-		builder.append(", instId=");
-		builder.append(instId);
-		builder.append(", instName=");
-		builder.append(instName);
-		builder.append(", startDate=");
-		builder.append(startDate);
-		builder.append(", endDate=");
-		builder.append(endDate);
+		builder.append(", jsonCotent=");
+		builder.append(jsonCotent);
 		builder.append("]");
 		return builder.toString();
 	}

+ 191 - 1
maxkey-persistence/src/main/java/org/maxkey/persistence/service/HistorySystemLogsService.java

@@ -18,13 +18,30 @@
 package org.maxkey.persistence.service;
 
 import org.apache.mybatis.jpa.persistence.JpaBaseService;
+import org.maxkey.entity.Accounts;
+import org.maxkey.entity.ChangePassword;
+import org.maxkey.entity.GroupMember;
+import org.maxkey.entity.GroupPrivileges;
+import org.maxkey.entity.Groups;
 import org.maxkey.entity.HistorySystemLogs;
+import org.maxkey.entity.Organizations;
+import org.maxkey.entity.Resources;
+import org.maxkey.entity.RoleMember;
+import org.maxkey.entity.RolePrivileges;
+import org.maxkey.entity.Roles;
+import org.maxkey.entity.SocialsProvider;
+import org.maxkey.entity.Synchronizers;
+import org.maxkey.entity.UserInfo;
 import org.maxkey.persistence.mapper.HistorySystemLogsMapper;
+import org.maxkey.util.JsonUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Repository;
 
 @Repository
 public class HistorySystemLogsService  extends JpaBaseService<HistorySystemLogs>{
-
+	final static Logger _logger = LoggerFactory.getLogger(HistorySystemLogsService.class);
+	
 	public HistorySystemLogsService() {
 		super(HistorySystemLogsMapper.class);
 		
@@ -37,4 +54,177 @@ public class HistorySystemLogsService  extends JpaBaseService<HistorySystemLogs>
 	public HistorySystemLogsMapper getMapper() {
 		return (HistorySystemLogsMapper)super.getMapper();
 	}
+	
+	public void insert(String topic,Object entity,String action,String result,UserInfo operator) {
+		String message = "";
+		if(entity != null) {
+			if(entity instanceof UserInfo) {
+				message = buildMsg((UserInfo)entity);
+			}else if(entity instanceof Organizations) {
+				message = buildMsg((Organizations)entity);
+			}else if(entity instanceof ChangePassword) {
+				message = buildMsg((ChangePassword)entity);
+			}else if(entity instanceof Accounts) {
+				message = buildMsg((Accounts)entity);
+			}else if(entity instanceof Groups) {
+				message = buildMsg((Groups)entity);
+			}else if(entity instanceof Roles) {
+				message = buildMsg((Roles)entity);
+			}else if(entity instanceof GroupMember) {
+				message = buildMsg((GroupMember)entity);
+			}else if(entity instanceof RoleMember) {
+				message = buildMsg((RoleMember)entity);
+			}else if(entity instanceof GroupPrivileges) {
+				message = buildMsg((GroupPrivileges)entity);
+			}else if(entity instanceof Resources) {
+				message = buildMsg((Resources)entity);
+			}else if(entity instanceof Synchronizers) {
+				message = buildMsg((Synchronizers)entity);
+			}else if(entity instanceof SocialsProvider) {
+				message = buildMsg((SocialsProvider)entity);
+			}else if(entity instanceof RolePrivileges) {
+				message = buildMsg((RolePrivileges)entity);
+			}else if(entity instanceof String) {
+				message = entity.toString();
+			}
+			
+		}
+		
+		insert(topic,message,action,result,operator, entity);
+	}
+	
+	public void insert(String topic,String message,String action,String result,UserInfo operator,Object entity) {
+		HistorySystemLogs systemLog = new HistorySystemLogs();
+		systemLog.setId(systemLog.generateId());
+		systemLog.setTopic(topic);
+		systemLog.setMessage(message);
+		systemLog.setMessageAction(action);
+		systemLog.setMessageResult(result);
+		systemLog.setUserId(operator.getId());
+		systemLog.setUsername(operator.getUsername());
+		systemLog.setDisplayName(operator.getDisplayName());
+		systemLog.setInstId(operator.getInstId());
+		systemLog.setJsonCotent(JsonUtils.gson2Json(entity));
+		_logger.trace("System Log {}" ,systemLog);
+		getMapper().insert(systemLog);
+	}
+	
+	public String buildMsg(UserInfo userInfo) {
+		return new StringBuilder()
+				.append(userInfo.getDisplayName())
+				.append("[")
+				.append(userInfo.getUsername())
+				.append("]")
+				.toString();
+	}
+	
+	public String buildMsg(Organizations org) {
+		return new StringBuilder()
+				.append(org.getName())
+				.append("[")
+				.append(org.getCode())
+				.append("]")
+				.toString();
+	}
+	
+	public String buildMsg(Accounts account) {
+		return new StringBuilder()
+				.append(account.getRelatedUsername())
+				.append("[")
+				.append(account.getDisplayName()).append(",")
+				.append(account.getUsername()).append(",")
+				.append(account.getAppName())
+				.append("]")
+				.toString();
+	}
+	
+	public String buildMsg(ChangePassword changePassword) {
+		return new StringBuilder()
+				.append(changePassword.getDisplayName())
+				.append("[")
+				.append(changePassword.getUsername())
+				.append("]")
+				.toString();
+	}
+	
+	public String buildMsg(Groups g) {
+		return new StringBuilder()
+				.append(g.getName())
+				.toString();
+	}
+	
+	public String buildMsg(Roles r) {
+		return new StringBuilder()
+				.append(r.getName())
+				.toString();
+	}
+	
+	public String buildMsg(RoleMember rm) {
+		return new StringBuilder()
+				.append(rm.getRoleName())
+				.append("[")
+				.append(rm.getUsername()).append(",")
+				.append(rm.getDisplayName())
+				.append("]")
+				.toString();
+	}
+	
+	public String buildMsg(GroupMember gm) {
+		return new StringBuilder()
+				.append(gm.getGroupName())
+				.append("[")
+				.append(gm.getUsername()).append(",")
+				.append(gm.getDisplayName())
+				.append("]")
+				.toString();
+	}
+	
+	public String buildMsg(GroupPrivileges privilege) {
+		return new StringBuilder()
+				.append(privilege.getGroupName())
+				.append("[")
+				.append(privilege.getAppName())
+				.append("]")
+				.toString();
+	}
+	
+	public String buildMsg(RolePrivileges privilege) {
+		return new StringBuilder()
+				.append(privilege.getRoleId())
+				.append("[")
+				.append(privilege.getResourceId())
+				.append("]")
+				.toString();
+	}
+	
+	
+	public String buildMsg(Resources r) {
+		return new StringBuilder()
+				.append(r.getName())
+				.append("[")
+				.append(r.getResourceType())
+				.append("]")
+				.toString();
+	}
+	
+	
+	public String buildMsg(Synchronizers s) {
+		return new StringBuilder()
+				.append(s.getName())
+				.append("[")
+				.append(s.getSourceType()).append(",")
+				.append(s.getScheduler()).append(",")
+				.append("]")
+				.toString();
+	}
+	
+	public String buildMsg(SocialsProvider s) {
+		return new StringBuilder()
+				.append(s.getProviderName())
+				.append("[")
+				.append(s.getProvider())
+				.append("]")
+				.toString();
+	}
+	
 }

+ 6 - 2
maxkey-persistence/src/main/java/org/maxkey/persistence/service/UserInfoService.java

@@ -100,8 +100,9 @@ public class UserInfoService extends JpaBaseService<UserInfo> {
                         loadUserInfo,
                         MqProvisionAction.UPDATE_ACTION);
             }
-            
-            changePasswordProvisioning(changePassword);
+            if(userInfo.getPassword() != null) {
+            	changePasswordProvisioning(changePassword);
+            }
             return true;
         }
         return false;
@@ -211,6 +212,9 @@ public class UserInfoService extends JpaBaseService<UserInfo> {
     		userInfo.setPassword(changePassword.getPassword());
     		userInfo.setDecipherable(changePassword.getDecipherable());
     		userInfo.setPasswordLastSetTime(changePassword.getPasswordLastSetTime());
+    	}else {
+    		userInfo.setPassword(null);
+    		userInfo.setDecipherable(null);
     	}
 		return changePassword;
 	}

+ 3 - 3
maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/HistorySystemLogsMapper.xml

@@ -21,11 +21,11 @@
 		<if test="displayName != null and displayName != ''">
             and  lower(displayName) like lower(concat('%',#{displayName},'%'))
         </if>
-		<if test="messageType != null and messageType != ''">
-			and	messageType	=	#{messageType}
+		<if test="messageAction != null and messageAction != ''">
+			and	messageaction	=	#{messageAction}
 		</if>
 		<if test="messageResult != null and messageResult != ''">
-			and	messageResult	=	#{messageResult}
+			and	messageresult	=	#{messageResult}
 		</if>
     </sql>
 	

+ 23 - 52
maxkey-web-frontend/maxkey-web-mgt-app/src/app/routes/audit/audit-system-logs/audit-system-logs.component.html

@@ -7,7 +7,8 @@
         <nz-form-item>
           <nz-form-label nzFor="username">{{ 'mxk.users.username' | i18n }}</nz-form-label>
           <nz-form-control>
-            <input nz-input [(ngModel)]="query.params.username" [ngModelOptions]="{ standalone: true }" name="username" id="username" />
+            <input nz-input [(ngModel)]="query.params.username" [ngModelOptions]="{ standalone: true }" name="username"
+              id="username" />
           </nz-form-control>
         </nz-form-item>
       </div>
@@ -15,13 +16,8 @@
         <nz-form-item>
           <nz-form-label nzFor="displayName">{{ 'mxk.users.displayName' | i18n }}</nz-form-label>
           <nz-form-control>
-            <input
-              nz-input
-              [(ngModel)]="query.params.displayName"
-              [ngModelOptions]="{ standalone: true }"
-              id="displayName"
-              name="displayName"
-            />
+            <input nz-input [(ngModel)]="query.params.displayName" [ngModelOptions]="{ standalone: true }"
+              id="displayName" name="displayName" />
           </nz-form-control>
         </nz-form-item>
       </div>
@@ -29,13 +25,8 @@
         <nz-form-item>
           <nz-form-label nzFor="employeeNumber">{{ 'mxk.users.employeeNumber' | i18n }}</nz-form-label>
           <nz-form-control>
-            <input
-              nz-input
-              [(ngModel)]="query.params.employeeNumber"
-              [ngModelOptions]="{ standalone: true }"
-              id="employeeNumber"
-              name="employeeNumber"
-            />
+            <input nz-input [(ngModel)]="query.params.employeeNumber" [ngModelOptions]="{ standalone: true }"
+              id="employeeNumber" name="employeeNumber" />
           </nz-form-control>
         </nz-form-item>
       </div>
@@ -43,14 +34,9 @@
         <nz-form-item>
           <nz-form-label nzFor="startDatePicker">{{ 'mxk.text.startDate' | i18n }}</nz-form-label>
           <nz-form-control>
-            <nz-date-picker
-              nzShowTime
-              nzFormat="yyyy-MM-dd HH:mm:ss"
-              [(ngModel)]="query.params.startDatePicker"
-              [ngModelOptions]="{ standalone: true }"
-              name="startDatePicker"
-              nzPlaceHolder="startDatePicker"
-            ></nz-date-picker>
+            <nz-date-picker nzShowTime nzFormat="yyyy-MM-dd HH:mm:ss" [(ngModel)]="query.params.startDatePicker"
+              [ngModelOptions]="{ standalone: true }" name="startDatePicker" nzPlaceHolder="startDatePicker">
+            </nz-date-picker>
           </nz-form-control>
         </nz-form-item>
       </div>
@@ -58,50 +44,35 @@
         <nz-form-item>
           <nz-form-label nzFor="endDatePicker">{{ 'mxk.text.endDate' | i18n }}</nz-form-label>
           <nz-form-control>
-            <nz-date-picker
-              nzShowTime
-              nzFormat="yyyy-MM-dd HH:mm:ss"
-              [(ngModel)]="query.params.endDatePicker"
-              [ngModelOptions]="{ standalone: true }"
-              name="endDatePicker"
-              nzPlaceHolder="endDatePicker"
-            ></nz-date-picker>
+            <nz-date-picker nzShowTime nzFormat="yyyy-MM-dd HH:mm:ss" [(ngModel)]="query.params.endDatePicker"
+              [ngModelOptions]="{ standalone: true }" name="endDatePicker" nzPlaceHolder="endDatePicker">
+            </nz-date-picker>
           </nz-form-control>
         </nz-form-item>
       </div>
 
       <div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm">
-        <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button>
+        <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
+          i18n }}</button>
         <button nz-button type="reset" (click)="onReset()" class="mx-sm">{{ 'mxk.text.reset' | i18n }}</button>
         <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm">
-          {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button
-        >
+          {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
       </div>
     </div>
   </form>
 </nz-card>
 <nz-card>
-  <nz-table
-    #dynamicTable
-    nzTableLayout="auto"
-    nzSize="small"
-    nzShowSizeChanger
-    [nzBordered]="true"
-    [nzData]="query.results.rows"
-    [nzFrontPagination]="false"
-    [nzTotal]="query.results.records"
-    [nzPageSizeOptions]="query.params.pageSizeOptions"
-    [nzPageSize]="query.params.pageSize"
-    [nzPageIndex]="query.params.pageNumber"
-    [nzLoading]="this.query.tableLoading"
-    (nzQueryParams)="onQueryParamsChange($event)"
-  >
+  <nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzShowSizeChanger [nzBordered]="true"
+    [nzData]="query.results.rows" [nzFrontPagination]="false" [nzTotal]="query.results.records"
+    [nzPageSizeOptions]="query.params.pageSizeOptions" [nzPageSize]="query.params.pageSize"
+    [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
+    (nzQueryParams)="onQueryParamsChange($event)">
     <thead>
       <tr>
         <th nzAlign="center" style="display: none">{{ 'mxk.history.systemlogs.id' | i18n }}</th>
         <th nzAlign="center">{{ 'mxk.history.systemlogs.topic' | i18n }}</th>
         <th nzAlign="center">{{ 'mxk.history.systemlogs.message' | i18n }}</th>
-        <th nzAlign="center">{{ 'mxk.history.systemlogs.messageType' | i18n }}</th>
+        <th nzAlign="center">{{ 'mxk.history.systemlogs.messageAction' | i18n }}</th>
         <th nzAlign="center">{{ 'mxk.history.systemlogs.messageResult' | i18n }}</th>
         <th nzAlign="center">{{ 'mxk.history.systemlogs.displayName' | i18n }}</th>
         <th nzAlign="center">{{ 'mxk.history.systemlogs.executeTime' | i18n }}</th>
@@ -114,11 +85,11 @@
         </td>
         <td nzAlign="left">{{ data.topic }}</td>
         <td nzAlign="left">{{ data.message }}</td>
-        <td nzAlign="left">{{ data.messageType }}</td>
+        <td nzAlign="left">{{ data.messageAction }}</td>
         <td nzAlign="left">{{ data.messageResult }}</td>
         <td nzAlign="left">{{ data.displayName }}</td>
         <td nzAlign="left">{{ data.executeTime }}</td>
       </tr>
     </tbody>
   </nz-table>
-</nz-card>
+</nz-card>

+ 1 - 1
maxkey-web-frontend/maxkey-web-mgt-app/src/assets/i18n/en-US.json

@@ -604,7 +604,7 @@
       "systemlogs.id":"Id",
       "systemlogs.topic":"Topic",
       "systemlogs.message":"Message",
-      "systemlogs.messageType":"Type",
+      "systemlogs.messageAction":"Action",
       "systemlogs.messageResult":"Result",
       "systemlogs.userId":"userId",
       "systemlogs.username":"username",

+ 1 - 1
maxkey-web-frontend/maxkey-web-mgt-app/src/assets/i18n/zh-CN.json

@@ -603,7 +603,7 @@
       "systemlogs.id":"编号",
       "systemlogs.topic":"主题",
       "systemlogs.message":"内容",
-      "systemlogs.messageType":"类型",
+      "systemlogs.messageAction":"操作",
       "systemlogs.messageResult":"结果",
       "systemlogs.userId":"操作人编号",
       "systemlogs.username":"操作人登录名",

+ 13 - 0
maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/ChangePasswodController.java

@@ -18,10 +18,14 @@
 package org.maxkey.web.contorller;
 
 import org.maxkey.authn.annotation.CurrentUser;
+import org.maxkey.constants.ConstsEntryType;
+import org.maxkey.constants.ConstsOperateAction;
+import org.maxkey.constants.ConstsOperateResult;
 import org.maxkey.constants.ConstsPasswordSetType;
 import org.maxkey.entity.ChangePassword;
 import org.maxkey.entity.Message;
 import org.maxkey.entity.UserInfo;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.persistence.service.UserInfoService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -41,6 +45,9 @@ public class ChangePasswodController {
 	@Autowired
 	private UserInfoService userInfoService;
 	
+	@Autowired
+	HistorySystemLogsService systemLog;
+	
 	@ResponseBody
 	@RequestMapping(value = { "/changePassword" }, produces = {MediaType.APPLICATION_JSON_VALUE})
 	public ResponseEntity<?> changePasswod(
@@ -52,6 +59,12 @@ public class ChangePasswodController {
 			changePassword.setInstId(currentUser.getInstId());
 			changePassword.setPasswordSetType(ConstsPasswordSetType.PASSWORD_NORMAL);
 			if(userInfoService.changePassword(changePassword)) {
+				systemLog.insert(
+						ConstsEntryType.USERINFO, 
+						changePassword, 
+						ConstsOperateAction.CHANGE_PASSWORD, 
+						ConstsOperateResult.SUCCESS, 
+						currentUser);
 				return new Message<ChangePassword>().buildResponse();
 			}else {
 				return new Message<ChangePassword>(Message.ERROR).buildResponse();

+ 2 - 2
maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/SafeController.java

@@ -21,7 +21,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.maxkey.authn.annotation.CurrentUser;
-import org.maxkey.constants.ConstsOperateMessage;
+import org.maxkey.constants.ConstsOperateResult;
 import org.maxkey.constants.ConstsTimeInterval;
 import org.maxkey.entity.UserInfo;
 import org.maxkey.persistence.service.UserInfoService;
@@ -79,7 +79,7 @@ public class SafeController {
 		userInfoService.updateEmail(currentUser);
 		
 		
-		return  new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success);
+		return  new Message(WebContext.getI18nValue(ConstsOperateResult.SUCCESS),MessageType.success);
 		
 	}
 	

+ 4 - 0
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupMemberController.java

@@ -25,6 +25,7 @@ import org.maxkey.entity.Message;
 import org.maxkey.entity.UserInfo;
 import org.maxkey.persistence.service.GroupMemberService;
 import org.maxkey.persistence.service.GroupsService;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.persistence.service.UserInfoService;
 import org.maxkey.util.StringUtils;
 import org.maxkey.web.WebContext;
@@ -55,6 +56,9 @@ public class GroupMemberController {
 	@Autowired
 	UserInfoService userInfoService;
 	
+	@Autowired
+	HistorySystemLogsService systemLog;
+	
 	@RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE})
 	@ResponseBody
 	public ResponseEntity<?> fetch(

+ 4 - 0
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupPrivilegesController.java

@@ -23,6 +23,7 @@ import org.maxkey.entity.Message;
 import org.maxkey.entity.UserInfo;
 import org.maxkey.entity.apps.Apps;
 import org.maxkey.persistence.service.GroupPrivilegesService;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.web.WebContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -44,6 +45,9 @@ public class GroupPrivilegesController {
 	@Autowired
 	GroupPrivilegesService groupPrivilegesService;
 
+	@Autowired
+	HistorySystemLogsService systemLog;
+	
 	@RequestMapping(value = { "/appsInGroup" })
 	@ResponseBody
 	public ResponseEntity<?> appsInGroup(

+ 25 - 0
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupsController.java

@@ -19,10 +19,14 @@ package org.maxkey.web.access.contorller;
 
 import org.apache.mybatis.jpa.persistence.JpaPageResults;
 import org.maxkey.authn.annotation.CurrentUser;
+import org.maxkey.constants.ConstsEntryType;
+import org.maxkey.constants.ConstsOperateAction;
+import org.maxkey.constants.ConstsOperateResult;
 import org.maxkey.entity.Groups;
 import org.maxkey.entity.Message;
 import org.maxkey.entity.UserInfo;
 import org.maxkey.persistence.service.GroupsService;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,6 +49,9 @@ public class GroupsController {
 	@Autowired
 	GroupsService groupsService;
 	
+	@Autowired
+	HistorySystemLogsService systemLog;
+	
 	@RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE})
 	@ResponseBody
 	public ResponseEntity<?> fetch(
@@ -82,6 +89,12 @@ public class GroupsController {
 		group.setInstId(currentUser.getInstId());
 		if (groupsService.insert(group)) {
 		    groupsService.refreshDynamicGroups(group);
+		    systemLog.insert(
+					ConstsEntryType.GROUP, 
+					group, 
+					ConstsOperateAction.CREATE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 		    return new Message<Groups>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Groups>(Message.FAIL).buildResponse();
@@ -98,6 +111,12 @@ public class GroupsController {
 		group.setInstId(currentUser.getInstId());
 		if (groupsService.update(group)) {
 		    groupsService.refreshDynamicGroups(group);
+		    systemLog.insert(
+					ConstsEntryType.GROUP, 
+					group, 
+					ConstsOperateAction.UPDATE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 		    return new Message<Groups>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Groups>(Message.FAIL).buildResponse();
@@ -110,6 +129,12 @@ public class GroupsController {
 		_logger.debug("-delete ids : {}" , ids);
 		ids = ids.replaceAll("ROLE_ALL_USER", "-1").replaceAll("ROLE_ADMINISTRATORS", "-1");
 		if (groupsService.deleteBatch(ids)) {
+			systemLog.insert(
+					ConstsEntryType.GROUP, 
+					ids, 
+					ConstsOperateAction.DELETE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 			 return new Message<Groups>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Groups>(Message.FAIL).buildResponse();

+ 4 - 0
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/LoginSessionController.java

@@ -26,6 +26,7 @@ import org.maxkey.entity.HistoryLogin;
 import org.maxkey.entity.Message;
 import org.maxkey.entity.UserInfo;
 import org.maxkey.persistence.service.HistoryLoginService;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.util.DateUtils;
 import org.maxkey.util.StringUtils;
 import org.slf4j.Logger;
@@ -59,6 +60,9 @@ public class LoginSessionController {
     @Autowired
     SessionManager sessionManager;
 
+    @Autowired
+	HistorySystemLogsService systemLog;
+    
     /**
      * 查询登录日志.
      * 

+ 4 - 0
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/apps/contorller/BaseAppContorller.java

@@ -25,6 +25,7 @@ import org.maxkey.crypto.password.PasswordReciprocal;
 import org.maxkey.entity.apps.Apps;
 import org.maxkey.persistence.service.AppsService;
 import org.maxkey.persistence.service.FileUploadService;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -46,6 +47,9 @@ public class BaseAppContorller {
 	@Autowired
 	protected FileUploadService fileUploadService;
 	
+	@Autowired
+	HistorySystemLogsService systemLog;
+	
 	public void setAppsService(AppsService appsService) {
 		this.appsService = appsService;
 	}

+ 5 - 5
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/LocalizationController.java

@@ -19,7 +19,7 @@ package org.maxkey.web.config.contorller;
 
 import org.apache.commons.lang3.StringUtils;
 import org.maxkey.authn.annotation.CurrentUser;
-import org.maxkey.constants.ConstsOperateMessage;
+import org.maxkey.constants.ConstsOperateResult;
 import org.maxkey.entity.Localization;
 import org.maxkey.entity.UserInfo;
 import org.maxkey.persistence.repository.LocalizationRepository;
@@ -73,15 +73,15 @@ public class LocalizationController {
 			if(StringUtils.isBlank(localization.getId())){
 				localization.setId(localization.generateId());
 				if(localizationRepository.insert(localization)) {
-					return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success);
+					return new Message(WebContext.getI18nValue(ConstsOperateResult.SUCCESS),MessageType.success);
 				} else {
-					return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error);
+					return new Message(WebContext.getI18nValue(ConstsOperateResult.ERROR),MessageType.error);
 				}
 			}else {
 				if(localizationRepository.update(localization)) {
-					return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success);
+					return new Message(WebContext.getI18nValue(ConstsOperateResult.SUCCESS),MessageType.success);
 				} else {
-					return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error);
+					return new Message(WebContext.getI18nValue(ConstsOperateResult.ERROR),MessageType.error);
 				}
 			}
 		}

+ 31 - 0
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/AccountsController.java

@@ -19,6 +19,9 @@ package org.maxkey.web.contorller;
 
 import org.apache.mybatis.jpa.persistence.JpaPageResults;
 import org.maxkey.authn.annotation.CurrentUser;
+import org.maxkey.constants.ConstsEntryType;
+import org.maxkey.constants.ConstsOperateAction;
+import org.maxkey.constants.ConstsOperateResult;
 import org.maxkey.crypto.password.PasswordReciprocal;
 import org.maxkey.entity.Accounts;
 import org.maxkey.entity.AccountsStrategy;
@@ -27,6 +30,7 @@ import org.maxkey.entity.UserInfo;
 import org.maxkey.persistence.service.AccountsService;
 import org.maxkey.persistence.service.AccountsStrategyService;
 import org.maxkey.persistence.service.AppsService;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.persistence.service.UserInfoService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -59,6 +63,9 @@ public class AccountsController {
 	@Autowired
 	UserInfoService userInfoService;
 	
+	@Autowired
+	HistorySystemLogsService systemLog;
+	
 	@RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE})
 	@ResponseBody
 	public ResponseEntity<?> fetch(@ModelAttribute Accounts accounts,@CurrentUser UserInfo currentUser) {
@@ -94,6 +101,12 @@ public class AccountsController {
 		account.setInstId(currentUser.getInstId());
 		account.setRelatedPassword(PasswordReciprocal.getInstance().encode(account.getRelatedPassword()));
 		if (accountsService.insert(account)) {
+			systemLog.insert(
+					ConstsEntryType.ACCOUNT, 
+					account, 
+					ConstsOperateAction.CREATE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 		    return new Message<Accounts>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Accounts>(Message.FAIL).buildResponse();
@@ -107,6 +120,12 @@ public class AccountsController {
 		account.setInstId(currentUser.getInstId());
 		account.setRelatedPassword(PasswordReciprocal.getInstance().encode(account.getRelatedPassword()));
 		if (accountsService.update(account)) {
+			systemLog.insert(
+					ConstsEntryType.ACCOUNT, 
+					account, 
+					ConstsOperateAction.UPDATE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 		    return new Message<Accounts>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Accounts>(Message.FAIL).buildResponse();
@@ -120,6 +139,12 @@ public class AccountsController {
 		_logger.debug(""+accounts);
 		accounts.setInstId(currentUser.getInstId());
 		if (accountsService.updateStatus(accounts)) {
+			systemLog.insert(
+					ConstsEntryType.ACCOUNT, 
+					accounts, 
+					ConstsOperateAction.statusActon.get(accounts.getStatus()), 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 		    return new Message<Accounts>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Accounts>(Message.FAIL).buildResponse();
@@ -132,6 +157,12 @@ public class AccountsController {
 		_logger.debug("-delete ids : {} " , ids);
 		
 		if (accountsService.deleteBatch(ids)) {
+			systemLog.insert(
+					ConstsEntryType.ACCOUNT, 
+					ids, 
+					ConstsOperateAction.DELETE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 			 return new Message<Accounts>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Accounts>(Message.FAIL).buildResponse();

+ 25 - 0
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/OrganizationsController.java

@@ -29,10 +29,14 @@ import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.maxkey.authn.annotation.CurrentUser;
+import org.maxkey.constants.ConstsEntryType;
+import org.maxkey.constants.ConstsOperateAction;
+import org.maxkey.constants.ConstsOperateResult;
 import org.maxkey.entity.ExcelImport;
 import org.maxkey.entity.Message;
 import org.maxkey.entity.Organizations;
 import org.maxkey.entity.UserInfo;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.persistence.service.OrganizationsService;
 import org.maxkey.util.ExcelUtils;
 import org.maxkey.web.component.TreeAttributes;
@@ -60,6 +64,9 @@ public class OrganizationsController {
 
 	@Autowired
 	OrganizationsService organizationsService;
+	
+	@Autowired
+	HistorySystemLogsService systemLog;
 
 	@RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE})
 	@ResponseBody
@@ -95,6 +102,12 @@ public class OrganizationsController {
 		_logger.debug("-Add  :" + org);
 		org.setInstId(currentUser.getInstId());
 		if (organizationsService.insert(org)) {
+			systemLog.insert(
+					ConstsEntryType.ORGANIZATION, 
+					org, 
+					ConstsOperateAction.CREATE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 			return new Message<Organizations>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Organizations>(Message.FAIL).buildResponse();
@@ -107,6 +120,12 @@ public class OrganizationsController {
 		_logger.debug("-update  :" + org);
 		org.setInstId(currentUser.getInstId());
 		if (organizationsService.update(org)) {
+			systemLog.insert(
+					ConstsEntryType.ORGANIZATION, 
+					org, 
+					ConstsOperateAction.UPDATE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 		    return new Message<Organizations>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Organizations>(Message.FAIL).buildResponse();
@@ -118,6 +137,12 @@ public class OrganizationsController {
 	public ResponseEntity<?> delete(@RequestParam("ids") String ids,@CurrentUser UserInfo currentUser) {
 		_logger.debug("-delete  ids : {} " , ids);
 		if (organizationsService.deleteBatch(ids)) {
+			systemLog.insert(
+					ConstsEntryType.ORGANIZATION, 
+					ids, 
+					ConstsOperateAction.DELETE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 			 return new Message<Organizations>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Organizations>(Message.FAIL).buildResponse();

+ 9 - 9
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/UserAdjointController.java

@@ -19,7 +19,7 @@ package org.maxkey.web.contorller;
 
 import org.apache.mybatis.jpa.persistence.JpaPageResults;
 import org.maxkey.authn.annotation.CurrentUser;
-import org.maxkey.constants.ConstsOperateMessage;
+import org.maxkey.constants.ConstsOperateResult;
 import org.maxkey.entity.UserInfo;
 import org.maxkey.entity.UserInfoAdjoint;
 import org.maxkey.persistence.service.UserInfoAdjointService;
@@ -88,10 +88,10 @@ public class UserAdjointController {
 		_logger.debug("-Add  :" + userInfoAdjoint);
 		userInfoAdjoint.setInstId(currentUser.getInstId());
 		if (userInfoAdjointService.insert(userInfoAdjoint)) {
-			return  new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.success);
+			return  new Message(WebContext.getI18nValue(ConstsOperateResult.SUCCESS),MessageType.success);
 			
 		} else {
-			return  new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.error);
+			return  new Message(WebContext.getI18nValue(ConstsOperateResult.SUCCESS),MessageType.error);
 		}
 		
 	}
@@ -109,10 +109,10 @@ public class UserAdjointController {
 		_logger.debug("-query  :" + userInfoAdjoint);
 		userInfoAdjoint.setInstId(currentUser.getInstId());
 		if (userInfoAdjointService.load(userInfoAdjoint)!=null) {
-			return  new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.success);
+			return  new Message(WebContext.getI18nValue(ConstsOperateResult.SUCCESS),MessageType.success);
 			
 		} else {
-			return  new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_ERROR),MessageType.error);
+			return  new Message(WebContext.getI18nValue(ConstsOperateResult.SUCCESS),MessageType.error);
 		}
 		
 	}
@@ -130,10 +130,10 @@ public class UserAdjointController {
 		_logger.debug("-update  userInfoAdjoint :" + userInfoAdjoint);
 		userInfoAdjoint.setInstId(currentUser.getInstId());
 		if (userInfoAdjointService.update(userInfoAdjoint)) {
-			return  new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success);
+			return  new Message(WebContext.getI18nValue(ConstsOperateResult.SUCCESS),MessageType.success);
 			
 		} else {
-			return  new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error);
+			return  new Message(WebContext.getI18nValue(ConstsOperateResult.ERROR),MessageType.error);
 		}
 		
 	}
@@ -145,9 +145,9 @@ public class UserAdjointController {
 		_logger.debug("-delete  group :" + userInfoAdjoint);
 		
 		if (userInfoAdjointService.deleteBatch(userInfoAdjoint.getId())) {
-			return  new Message(WebContext.getI18nValue(ConstsOperateMessage.DELETE_SUCCESS),MessageType.success);
+			return  new Message(WebContext.getI18nValue(ConstsOperateResult.SUCCESS),MessageType.success);
 		} else {
-			return  new Message(WebContext.getI18nValue(ConstsOperateMessage.DELETE_SUCCESS),MessageType.error);
+			return  new Message(WebContext.getI18nValue(ConstsOperateResult.ERROR),MessageType.error);
 		}
 		
 	}

+ 37 - 1
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/UserInfoController.java

@@ -34,12 +34,16 @@ import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.maxkey.authn.annotation.CurrentUser;
+import org.maxkey.constants.ConstsEntryType;
+import org.maxkey.constants.ConstsOperateAction;
+import org.maxkey.constants.ConstsOperateResult;
 import org.maxkey.constants.ConstsPasswordSetType;
 import org.maxkey.entity.ChangePassword;
 import org.maxkey.entity.ExcelImport;
 import org.maxkey.entity.Message;
 import org.maxkey.entity.UserInfo;
 import org.maxkey.persistence.service.FileUploadService;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.persistence.service.UserInfoService;
 import org.maxkey.util.DateUtils;
 import org.maxkey.util.ExcelUtils;
@@ -79,6 +83,8 @@ public class UserInfoController {
 	@Autowired
 	FileUploadService fileUploadService;
 
+	@Autowired
+	HistorySystemLogsService systemLog;
 	
 	@RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE})
 	@ResponseBody
@@ -125,6 +131,12 @@ public class UserInfoController {
 			fileUploadService.remove(userInfo.getPictureId());
 		}
 		if (userInfoService.insert(userInfo)) {
+			systemLog.insert(
+					ConstsEntryType.USERINFO, 
+					userInfo, 
+					ConstsOperateAction.CREATE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 			return new Message<UserInfo>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<UserInfo>(Message.FAIL).buildResponse();
@@ -147,6 +159,12 @@ public class UserInfoController {
 			fileUploadService.remove(userInfo.getPictureId());
 		}
 		if (userInfoService.update(userInfo)) {
+			systemLog.insert(
+					ConstsEntryType.USERINFO, 
+					userInfo, 
+					ConstsOperateAction.UPDATE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 		    return new Message<UserInfo>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<UserInfo>(Message.FAIL).buildResponse();
@@ -157,7 +175,14 @@ public class UserInfoController {
 	@RequestMapping(value={"/delete"}, produces = {MediaType.APPLICATION_JSON_VALUE})
 	public ResponseEntity<?> delete(@RequestParam("ids") String ids,@CurrentUser UserInfo currentUser) {
 		_logger.debug("-delete  ids : {} " , ids);
+		
 		if (userInfoService.deleteBatch(ids)) {
+			systemLog.insert(
+					ConstsEntryType.USERINFO, 
+					ids, 
+					ConstsOperateAction.DELETE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 			 return new Message<UserInfo>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<UserInfo>(Message.FAIL).buildResponse();
@@ -197,8 +222,13 @@ public class UserInfoController {
 		_logger.debug("UserId {}",changePassword.getUserId());
 		changePassword.setPasswordSetType(ConstsPasswordSetType.PASSWORD_NORMAL);
 		if(userInfoService.changePassword(changePassword,true)) {
+			systemLog.insert(
+					ConstsEntryType.USERINFO, 
+					changePassword, 
+					ConstsOperateAction.CHANGE_PASSWORD, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 			return new Message<UserInfo>(Message.SUCCESS).buildResponse();
-			
 		} else {
 			return new Message<UserInfo>(Message.FAIL).buildResponse();
 		}
@@ -210,6 +240,12 @@ public class UserInfoController {
 		_logger.debug(""+userInfo);
 		userInfo.setInstId(currentUser.getInstId());
 		if(userInfoService.updateStatus(userInfo)) {
+			systemLog.insert(
+					ConstsEntryType.USERINFO, 
+					userInfo, 
+					ConstsOperateAction.statusActon.get(userInfo.getStatus()), 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 			return new Message<UserInfo>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<UserInfo>(Message.FAIL).buildResponse();

+ 25 - 0
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/ResourcesController.java

@@ -21,9 +21,13 @@ import java.util.List;
 
 import org.apache.mybatis.jpa.persistence.JpaPageResults;
 import org.maxkey.authn.annotation.CurrentUser;
+import org.maxkey.constants.ConstsEntryType;
+import org.maxkey.constants.ConstsOperateAction;
+import org.maxkey.constants.ConstsOperateResult;
 import org.maxkey.entity.Message;
 import org.maxkey.entity.Resources;
 import org.maxkey.entity.UserInfo;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.persistence.service.ResourcesService;
 import org.maxkey.web.component.TreeAttributes;
 import org.maxkey.web.component.TreeNode;
@@ -48,6 +52,9 @@ public class ResourcesController {
 	
 	@Autowired
 	ResourcesService resourcesService;
+	
+	@Autowired
+	HistorySystemLogsService systemLog;
 
 	@RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE})
 	@ResponseBody
@@ -83,6 +90,12 @@ public class ResourcesController {
 		_logger.debug("-Add  :" + resource);
 		resource.setInstId(currentUser.getInstId());
 		if (resourcesService.insert(resource)) {
+			systemLog.insert(
+					ConstsEntryType.RESOURCE, 
+					resource, 
+					ConstsOperateAction.CREATE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 			return new Message<Resources>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Resources>(Message.FAIL).buildResponse();
@@ -95,6 +108,12 @@ public class ResourcesController {
 		_logger.debug("-update  :" + resource);
 		resource.setInstId(currentUser.getInstId());
 		if (resourcesService.update(resource)) {
+			systemLog.insert(
+					ConstsEntryType.RESOURCE, 
+					resource, 
+					ConstsOperateAction.UPDATE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 		    return new Message<Resources>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Resources>(Message.FAIL).buildResponse();
@@ -106,6 +125,12 @@ public class ResourcesController {
 	public ResponseEntity<?> delete(@RequestParam("ids") String ids,@CurrentUser UserInfo currentUser) {
 		_logger.debug("-delete  ids : {} " , ids);
 		if (resourcesService.deleteBatch(ids)) {
+			systemLog.insert(
+					ConstsEntryType.RESOURCE, 
+					ids, 
+					ConstsOperateAction.DELETE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 			 return new Message<Resources>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Resources>(Message.FAIL).buildResponse();

+ 4 - 0
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RoleMemberController.java

@@ -23,6 +23,7 @@ import org.maxkey.entity.Message;
 import org.maxkey.entity.RoleMember;
 import org.maxkey.entity.Roles;
 import org.maxkey.entity.UserInfo;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.persistence.service.RoleMemberService;
 import org.maxkey.persistence.service.RolesService;
 import org.maxkey.persistence.service.UserInfoService;
@@ -55,6 +56,9 @@ public class RoleMemberController {
 	@Autowired
 	UserInfoService userInfoService;
 	
+	@Autowired
+	HistorySystemLogsService systemLog;
+	
 	@RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE})
 	@ResponseBody
 	public ResponseEntity<?> fetch(

+ 4 - 0
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RolePrivilegesController.java

@@ -25,6 +25,7 @@ import org.maxkey.authn.annotation.CurrentUser;
 import org.maxkey.entity.Message;
 import org.maxkey.entity.RolePrivileges;
 import org.maxkey.entity.UserInfo;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.persistence.service.RolesService;
 import org.maxkey.util.StringUtils;
 import org.slf4j.Logger;
@@ -47,6 +48,9 @@ public class RolePrivilegesController {
 	@Autowired
     RolesService rolesService;
 	
+	@Autowired
+	HistorySystemLogsService systemLog;
+	
 	@ResponseBody
 	@RequestMapping(value={"/update"}, produces = {MediaType.APPLICATION_JSON_VALUE})
 	public  ResponseEntity<?> update(

+ 25 - 0
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RolesController.java

@@ -19,9 +19,13 @@ package org.maxkey.web.permissions.contorller;
 
 import org.apache.mybatis.jpa.persistence.JpaPageResults;
 import org.maxkey.authn.annotation.CurrentUser;
+import org.maxkey.constants.ConstsEntryType;
+import org.maxkey.constants.ConstsOperateAction;
+import org.maxkey.constants.ConstsOperateResult;
 import org.maxkey.entity.Message;
 import org.maxkey.entity.Roles;
 import org.maxkey.entity.UserInfo;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.persistence.service.RolesService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -45,6 +49,9 @@ public class RolesController {
 	@Autowired
 	RolesService rolesService;
 
+	@Autowired
+	HistorySystemLogsService systemLog;
+	
 	@RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE})
 	@ResponseBody
 	public ResponseEntity<?> fetch(@ModelAttribute Roles roles,@CurrentUser UserInfo currentUser) {
@@ -80,6 +87,12 @@ public class RolesController {
 		role.setInstId(currentUser.getInstId());
 		if (rolesService.insert(role)) {
 		    rolesService.refreshDynamicRoles(role);
+		    systemLog.insert(
+					ConstsEntryType.ROLE, 
+					role, 
+					ConstsOperateAction.CREATE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 		    return new Message<Roles>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Roles>(Message.FAIL).buildResponse();
@@ -93,6 +106,12 @@ public class RolesController {
 		role.setInstId(currentUser.getInstId());
 		if (rolesService.update(role)) {
 		    rolesService.refreshDynamicRoles(role);
+		    systemLog.insert(
+					ConstsEntryType.ROLE, 
+					role, 
+					ConstsOperateAction.UPDATE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 		    return new Message<Roles>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Roles>(Message.FAIL).buildResponse();
@@ -105,6 +124,12 @@ public class RolesController {
 		_logger.debug("-delete ids : {} " , ids);
 		
 		if (rolesService.deleteBatch(ids)) {
+			systemLog.insert(
+					ConstsEntryType.ROLE, 
+					ids, 
+					ConstsOperateAction.DELETE, 
+					ConstsOperateResult.SUCCESS, 
+					currentUser);
 			 return new Message<Roles>(Message.SUCCESS).buildResponse();
 		} else {
 			return new Message<Roles>(Message.FAIL).buildResponse();