Explorar el Código

用户管理(运营)操作日志,修改了角色、部门、汇报上级均记录日志到库里日志表

huangxuechao hace 4 años
padre
commit
526e7b9d5b

+ 18 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java

@@ -15,6 +15,9 @@ import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.common.module.vo.SysDepartUsersVO;
 import cn.com.ctop.common.module.vo.SysUserRoleVO;
 import cn.com.ctop.common.module.vo.SysUserVo;
+import cn.com.ctop.toutiao.modules.operation.entity.BytedanceOperationLog;
+import cn.com.ctop.toutiao.modules.operation.service.IBytedanceOperationLogService;
+import cn.com.ctop.toutiao.modules.operation.util.GetChangeDateUtil;
 import cn.hutool.core.util.RandomUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -102,10 +105,12 @@ public class SysUserController {
     private IUserCompanyService userCompanyService;
     @Autowired
     private ISysRoleService roleService;
-
     @Resource
     private UserCompanyMapper userCompanyMapper;
     @Autowired
+    IBytedanceOperationLogService bytedanceOperationLogService;
+
+    @Autowired
     private RedisUtil redisUtil;
     @Value("${jeecg.path.upload}")
     private String upLoadPath;
@@ -143,7 +148,7 @@ public class SysUserController {
      * @param user
      * @param pageNo
      * @param pageSize
-     * @param req
+     * @param
      * @return
      */
     @PermissionData(pageComponent = "system/UserList")
@@ -365,7 +370,18 @@ public class SysUserController {
             if (sysUser == null) {
                 result.error500("未找到对应实体");
             } else {
+                sysUser = sysUserService.queryPageList(sysUser).get(0);
                 SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class);
+                BytedanceOperationLog bytedanceOperationLog = new BytedanceOperationLog();
+                bytedanceOperationLog.setOldData(sysUser.toString());
+                bytedanceOperationLog.setNewData(user.toString());
+                String operationContent = user.getRealname() + ":" +GetChangeDateUtil.makeOperationContent(sysUser,user,new String[]{"leaderName", "departName","roleName"});
+                bytedanceOperationLog.setOperationContent(operationContent);
+                bytedanceOperationLog.setOperationType("用户管理-修改");
+                LoginUser createBy = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+                bytedanceOperationLog.setCreateById(createBy.getId());
+                bytedanceOperationLogService.save(bytedanceOperationLog);
+
                 user.setLeaderName(user.getLeaderName().trim());
                 user.setUpdateTime(new Date());
                 user.setLeaderName(user.getLeaderName().trim());

+ 3 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/SysUserMapper.xml

@@ -313,6 +313,9 @@ SELECT
         <if test="sex != null and sex != ''">
             AND t1.sex =#{sex}
         </if>
+        <if test="id != null and id != ''">
+            AND t1.id =#{id}
+        </if>
 
         ) t4
         GROUP BY t4.id

+ 1 - 1
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/operation/entity/BytedanceOperationLog.java

@@ -31,7 +31,7 @@ public class BytedanceOperationLog {
 	/**id*/
 	@TableId(type = IdType.UUID)
     @ApiModelProperty(value = "id")
-	private Integer id;
+	private String id;
 	/**原始数据*/
 	@Excel(name = "原始数据", width = 15)
     @ApiModelProperty(value = "原始数据")

+ 108 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/operation/util/GetChangeDateUtil.java

@@ -0,0 +1,108 @@
+package cn.com.ctop.toutiao.modules.operation.util;
+
+import cn.com.ctop.common.module.entity.SysUser;
+import cn.com.ctop.toutiao.modules.operation.entity.BytedanceOperationLog;
+import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
+
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+import java.security.Timestamp;
+import java.util.*;
+
+public class GetChangeDateUtil {
+    /**
+     *
+     * <p>Title: compareFields</p>
+     * <p>Description: </p>  比较两个实体属性值
+     * @param obj1
+     * @param obj2
+     * @param ignoreArr 忽略的字段
+     * @return
+     */
+    public static Map<String, List<Object>> compareFields(Object obj1, Object obj2, String[] ignoreArr) {
+        try{
+            Map<String, List<Object>> map = new HashMap<String, List<Object>>();
+            List<String> ignoreList = null;
+            if(ignoreArr != null && ignoreArr.length > 0){
+                // array转化为list
+                ignoreList = Arrays.asList(ignoreArr);
+            }
+            if (obj1.getClass() == obj2.getClass()) {// 只有两个对象都是同一类型的才有可比性
+                Class clazz = obj1.getClass();
+                // 获取object的属性描述
+                PropertyDescriptor[] pds = Introspector.getBeanInfo(clazz,
+                        Object.class).getPropertyDescriptors();
+                for (PropertyDescriptor pd : pds) {// 这里就是所有的属性了
+                    String name = pd.getName();// 属性名
+                    if(ignoreList == null || !ignoreList.contains(name)){// 如果当前属性选择忽略比较,跳到下一次循环
+                        continue;
+                    }
+                    Method readMethod = pd.getReadMethod();// get方法
+                    // 在obj1上调用get方法等同于获得obj1的属性值
+                    Object o1 = readMethod.invoke(obj1);
+                    // 在obj2上调用get方法等同于获得obj2的属性值
+                    Object o2 = readMethod.invoke(obj2);
+                    if(o1 == null && o2 == null){                               //o1 旧     o2新    如果两个都是空就跳过
+                        continue;
+                    }else if(o1 == null && o2 != null){                         //如果O1旧的没有     O2新的有
+                        List<Object> list = new ArrayList<Object>();
+                        list.add("旧(null)");
+                        list.add("新"+"("+String.valueOf(o2)+")");
+                        map.put(name, list);
+                        continue;
+                    }
+                    if (!o1.equals(o2)) {// 比较这两个值是否相等,不等就可以放入map了                             //如果旧的和新的不相等
+                        List<Object> list = new ArrayList<Object>();
+
+                        if(o2==null) {
+                            list.add("旧"+"("+String.valueOf(o1)+")");
+                            list.add("新()");
+                        }else {
+                            list.add("旧"+"("+String.valueOf(o1)+")");
+                            list.add("新"+"("+String.valueOf(o2)+")");
+                        }
+                        map.put(name, list);
+                    }
+                }
+            }
+            return map;
+        }catch(Exception e){
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public static String makeOperationContent(Object obj1, Object obj2, String[] ignoreArr){
+
+
+        Map<String, List<Object>> bject = GetChangeDateUtil.compareFields(obj1,obj2,ignoreArr);
+        Set<String> names = bject.keySet();
+        StringBuilder sb = new StringBuilder();
+        for (String name: names
+        ) {
+            sb.append(name + "由【"+bject.get(name).get(0) +"】改为了【"+ bject.get(name).get(1)+"】");
+            sb.append(",");
+//            System.out.println(name + "由【"+bject.get(name).get(0) +"】改为了【"+ bject.get(name).get(1)+"】");
+        }
+        return sb.substring(0,sb.length() - 1 >= 0 ? sb.length() - 1 : 0);
+    }
+
+    public static void main(String[] args) {
+
+        SysUser user1 = new SysUser();
+        user1.setRealname("张三");
+//        user1.setLeaderName("领导1号");
+//        user1.setDepartName("研发部门");
+//        user1.setRoleName("用户");
+        SysUser user2 = new SysUser();
+        user2.setRealname("张三");
+//        user2.setLeaderName("领导2号");
+//        user2.setDepartName("组织架构部门");
+//        user2.setRoleName("管理员");
+        String s = makeOperationContent(user1, user2, new String[]{"leaderName", "departName","roleName"});
+
+        System.out.println(s);
+
+    }
+}