package com.panzhihua.sangeshenbian.aspectj; import com.alibaba.fastjson.JSONObject; import com.panzhihua.common.controller.BaseController; import com.panzhihua.common.model.vos.sangeshenbian.SystemUserVo; import com.panzhihua.common.utlis.StringUtils; import com.panzhihua.sangeshenbian.annotation.SysLog; import com.panzhihua.sangeshenbian.model.entity.*; import com.panzhihua.sangeshenbian.service.ISystemLogService; import com.panzhihua.sangeshenbian.warpper.AddSystemRole; import com.panzhihua.sangeshenbian.warpper.EditSystemRole; import com.panzhihua.sangeshenbian.warpper.PartyMemberDTO; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.lang.reflect.Method; /** * 切面处理类,操作日志异常日志记录处理 * * @author wu * @date 2019/03/21 */ @Slf4j @Aspect @Component public class OperLogAspect extends BaseController { @Autowired private ISystemLogService systemLogService; /** * 设置操作日志切入点 记录操作日志 在注解的位置切入代码 */ @Pointcut("@annotation(com.panzhihua.sangeshenbian.annotation.SysLog)") public void operLogPoinCut() {} /** * 正常返回通知,拦截用户操作日志,连接点正常执行完成后执行, 如果连接点抛出异常,则不会执行 * * @param joinPoint * 切入点 * @param keys * 返回结果 */ @AfterReturning(value = "operLogPoinCut()", returning = "keys") public void saveOperLog(JoinPoint joinPoint, Object keys) { log.info("进入切面"); // 从切面织入点处通过反射机制获取织入点处的方法 MethodSignature signature = (MethodSignature)joinPoint.getSignature(); // 获取切入点所在的方法 Method method = signature.getMethod(); Object[] args = joinPoint.getArgs(); try { // 获取操作 SysLog opLog = method.getAnnotation(SysLog.class); SystemLog sysLog = new SystemLog(); JSONObject jsonResult = JSONObject.parseObject(JSONObject.toJSONString(keys)); switch (opLog.operId()){ // 登录 case 1:// 将返回结果转为JSON对象 // 提取data字段中的TokenVo信息 JSONObject data = jsonResult.getJSONObject("data"); Long userId = data.getLong("userId"); String name = data.getString("name");// 直接获取userId sysLog.setOperatorId(Long.valueOf(userId)); sysLog.setTargetName(name); break; // 职位 case 2: if(opLog.operatorCategory().contains("删除")){ String postName = jsonResult.get("data").toString(); sysLog.setTargetName(postName); }else { for (Object arg : args) { if (arg instanceof SystemPost) { SystemPost systemPost = (SystemPost) arg; sysLog.setTargetName(systemPost.getName()); } } } break; // 角色 case 3: if(opLog.operatorCategory().contains("删除")){ String postName = jsonResult.get("data").toString(); sysLog.setTargetName(postName); }else { for (Object arg : args) { if (arg instanceof AddSystemRole) { AddSystemRole systemRole = (AddSystemRole) arg; sysLog.setTargetName(systemRole.getName()); } if (arg instanceof EditSystemRole) { EditSystemRole systemRole = (EditSystemRole) arg; sysLog.setTargetName(systemRole.getName()); } } } break; // 账号 case 4: if(opLog.operatorCategory().contains("删除")){ String postName = jsonResult.get("data").toString(); sysLog.setTargetName(postName); }else { for (Object arg : args) { if (arg instanceof SystemUser) { SystemUser systemUser = (SystemUser) arg; sysLog.setTargetName(systemUser.getName()); } } } break; // 工单 case 5: for (Object arg : args) { if (arg instanceof WorkOrderItemConfig) { WorkOrderItemConfig workOrderItemConfig = (WorkOrderItemConfig) arg; // 拿到返回原来的数据 JSONObject configData = jsonResult.getJSONObject("data"); String targetName=""; // 判断是否修改了诉求处理时间 if(workOrderItemConfig.getDemandProcessingTime()!=configData.getInteger("demandProcessingTime")){ targetName += "修改诉求处理时间、"; } // 判断是否修改了市级账号诉求处理时间 if(workOrderItemConfig.getCityHandlingTime()!=configData.getInteger("cityHandlingTime") || workOrderItemConfig.getDistrictHandlingTime()!=configData.getInteger("districtHandlingTime") || workOrderItemConfig.getStreetHandlingTime()!=configData.getInteger("streetHandlingTime") || workOrderItemConfig.getCommunityHandlingTime()!=configData.getInteger("communityHandlingTime") || workOrderItemConfig.getPartyMemberHandlingTime()!=configData.getInteger("partyMemberHandlingTime")){ targetName += "修改处理超时时间、"; } if(workOrderItemConfig.getCityDeadlineReminder()!=configData.getInteger("cityDeadlineReminder") || workOrderItemConfig.getDistrictDeadlineReminder()!=configData.getInteger("districtDeadlineReminder") || workOrderItemConfig.getStreetDeadlineReminder()!=configData.getInteger("streetDeadlineReminder") || workOrderItemConfig.getCommunityDeadlineReminder()!=configData.getInteger("communityDeadlineReminder") ){ targetName += "修改临期提醒时间、"; } if(StringUtils.isNotEmpty(targetName)){ targetName= targetName.substring(0,targetName.length()-1); sysLog.setTargetName(targetName); } } } break; // 问题 case 6: if(opLog.operatorCategory().contains("删除")){ String postName = jsonResult.get("data").toString(); sysLog.setTargetName(postName); }else { for (Object arg : args) { if (arg instanceof ProblemType) { ProblemType problemType = (ProblemType) arg; sysLog.setTargetName(problemType.getName()); } } } // banner case 7: if(opLog.operatorCategory().contains("删除")){ String postName = jsonResult.get("data").toString(); sysLog.setTargetName(postName); }else { for (Object arg : args) { if (arg instanceof Banner) { Banner banner = (Banner) arg; sysLog.setTargetName(banner.getName()); } } } break; // 党员 case 8: if(opLog.operatorCategory().contains("删除")){ String postName = jsonResult.get("data").toString(); sysLog.setOperatorCategory("删除党员"); sysLog.setTargetName(postName); }else { for (Object arg : args) { if (arg instanceof PartyMemberDTO) { PartyMemberDTO memberDTO = (PartyMemberDTO) arg; sysLog.setTargetName(memberDTO.getName()); if(opLog.operatorCategory().contains("添加")){ if(memberDTO.getId()==null){ sysLog.setOperatorCategory("添加党员"); }else { sysLog.setOperatorCategory("编辑党员"); } } }else if(opLog.operatorCategory().contains("冻结")){ JSONObject freezeData = jsonResult.getJSONObject("data"); sysLog.setTargetName(freezeData.getString("name")); if(freezeData.getInteger("freezeStatus")==1){ sysLog.setOperatorCategory("冻结党员"); }else { sysLog.setOperatorCategory("解冻党员"); } }else { sysLog.setOperatorCategory(opLog.operatorCategory()); } } } break; // 党员审核 case 9: JSONObject auditData = jsonResult.getJSONObject("data"); sysLog.setTargetName(auditData.getString("name")); if(auditData.getInteger("auditStatus")==1){ sysLog.setOperatorCategory("党员审核通过"); }else { sysLog.setOperatorCategory("党员审核拒绝"); } break; // 导出 case 10: if(opLog.operatorCategory().equals("单导出")){ String type = args[1].toString(); if("1".equals(type)){ sysLog.setOperatorCategory("导出社区问题单 "); } if("2".equals(type)){ sysLog.setOperatorCategory("导出问题处理单"); } if("3".equals(type)){ sysLog.setOperatorCategory("导出协调通知单"); } String postName = jsonResult.get("data").toString(); sysLog.setTargetName(postName); } break; default: break; } if(opLog.operId()!=1){ SystemUserVo systemUserVo = this.getLoginUserInfoSanGeShenBian(); sysLog.setOperatorId(Long.valueOf(systemUserVo.getId())); } if(opLog.operId()<8){ sysLog.setOperatorCategory(opLog.operatorCategory()); } sysLog.setIp(this.getRequest().getRemoteAddr()); sysLog.setOperatorInto(opLog.operatorCategory()); if(opLog.operId()!=5 || sysLog.getTargetName()!=null){ systemLogService.save(sysLog); } } catch (Exception e) { e.printStackTrace(); } } }