新增登录,操作日志记录
							parent
							
								
									5ec3f27b2d
								
							
						
					
					
						commit
						7421ed30ac
					
				| @ -0,0 +1,40 @@ | |||||||
|  | package com.glxp.api.admin.annotation; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import com.glxp.api.admin.constant.BusinessType; | ||||||
|  | import com.glxp.api.admin.constant.OperatorType; | ||||||
|  | 
 | ||||||
|  | import java.lang.annotation.*; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 自定义操作日志记录注解 | ||||||
|  |  */ | ||||||
|  | @Target({ElementType.PARAMETER, ElementType.METHOD}) | ||||||
|  | @Retention(RetentionPolicy.RUNTIME) | ||||||
|  | @Documented | ||||||
|  | public @interface Log { | ||||||
|  |     /** | ||||||
|  |      * 模块 | ||||||
|  |      */ | ||||||
|  |     String title() default ""; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 功能 | ||||||
|  |      */ | ||||||
|  |     BusinessType businessType() default BusinessType.OTHER; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 操作人类别 | ||||||
|  |      */ | ||||||
|  |     OperatorType operatorType() default OperatorType.MANAGE; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 是否保存请求的参数 | ||||||
|  |      */ | ||||||
|  |     boolean isSaveRequestData() default true; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 是否保存响应的参数 | ||||||
|  |      */ | ||||||
|  |     boolean isSaveResponseData() default true; | ||||||
|  | } | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | package com.glxp.api.admin.constant; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 操作状态 | ||||||
|  |  * | ||||||
|  |  * @author ruoyi | ||||||
|  |  */ | ||||||
|  | public enum BusinessStatus { | ||||||
|  |     /** | ||||||
|  |      * 成功 | ||||||
|  |      */ | ||||||
|  |     SUCCESS, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 失败 | ||||||
|  |      */ | ||||||
|  |     FAIL, | ||||||
|  | } | ||||||
| @ -0,0 +1,56 @@ | |||||||
|  | package com.glxp.api.admin.constant; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 业务操作类型 | ||||||
|  |  */ | ||||||
|  | public enum BusinessType { | ||||||
|  |     /** | ||||||
|  |      * 其它 | ||||||
|  |      */ | ||||||
|  |     OTHER, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 新增 | ||||||
|  |      */ | ||||||
|  |     INSERT, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 修改 | ||||||
|  |      */ | ||||||
|  |     UPDATE, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 删除 | ||||||
|  |      */ | ||||||
|  |     DELETE, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 授权 | ||||||
|  |      */ | ||||||
|  |     GRANT, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 导出 | ||||||
|  |      */ | ||||||
|  |     EXPORT, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 导入 | ||||||
|  |      */ | ||||||
|  |     IMPORT, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 强退 | ||||||
|  |      */ | ||||||
|  |     FORCE, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 生成代码 | ||||||
|  |      */ | ||||||
|  |     GENCODE, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 清空数据 | ||||||
|  |      */ | ||||||
|  |     CLEAN, | ||||||
|  | } | ||||||
| @ -0,0 +1,21 @@ | |||||||
|  | package com.glxp.api.admin.constant; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 操作人类别 | ||||||
|  |  */ | ||||||
|  | public enum OperatorType { | ||||||
|  |     /** | ||||||
|  |      * 其它 | ||||||
|  |      */ | ||||||
|  |     OTHER, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 后台用户 | ||||||
|  |      */ | ||||||
|  |     MANAGE, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 手机端用户 | ||||||
|  |      */ | ||||||
|  |     MOBILE | ||||||
|  | } | ||||||
| @ -0,0 +1,29 @@ | |||||||
|  | package com.glxp.api.admin.dao.monitor; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import com.glxp.api.admin.entity.monitor.SysOperLog; | ||||||
|  | import com.glxp.api.admin.req.monitor.FilterOperLogRequest; | ||||||
|  | import org.apache.ibatis.annotations.Mapper; | ||||||
|  | import org.apache.ibatis.annotations.Param; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 操作日志 数据层 | ||||||
|  |  */ | ||||||
|  | @Mapper | ||||||
|  | public interface SysOperLogMapper { | ||||||
|  | 
 | ||||||
|  |     List<SysOperLog> selectList(FilterOperLogRequest filterOperLogRequest); | ||||||
|  | 
 | ||||||
|  |     int insert(SysOperLog sysOperLog); | ||||||
|  | 
 | ||||||
|  |     int deleteBatchIds(@Param("ids") List<Long> ids); | ||||||
|  | 
 | ||||||
|  |     int delete(Long id); | ||||||
|  | 
 | ||||||
|  |     SysOperLog selectById(Long id); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     void deleteByDate(@Param("date") String date); | ||||||
|  | } | ||||||
| @ -0,0 +1,66 @@ | |||||||
|  | package com.glxp.api.admin.entity.monitor; | ||||||
|  | 
 | ||||||
|  | import lombok.Data; | ||||||
|  | 
 | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.HashMap; | ||||||
|  | import java.util.Map; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 系统访问记录表 sys_logininfor | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | @Data | ||||||
|  | public class SysLogininfor { | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * ID | ||||||
|  |      */ | ||||||
|  |     private Long infoId; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 用户账号 | ||||||
|  |      */ | ||||||
|  |     private String userName; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 登录状态 0成功 1失败 | ||||||
|  |      */ | ||||||
|  |     private String status; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 登录IP地址 | ||||||
|  |      */ | ||||||
|  |     private String ipaddr; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 登录地点 | ||||||
|  |      */ | ||||||
|  |     private String loginLocation; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 浏览器类型 | ||||||
|  |      */ | ||||||
|  |     private String browser; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 操作系统 | ||||||
|  |      */ | ||||||
|  |     private String os; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 提示消息 | ||||||
|  |      */ | ||||||
|  |     private String msg; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 访问时间 | ||||||
|  |      */ | ||||||
|  |     private Date loginTime; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 请求参数 | ||||||
|  |      */ | ||||||
|  |     private Map<String, Object> params = new HashMap<>(); | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,19 @@ | |||||||
|  | package com.glxp.api.admin.req.monitor; | ||||||
|  | 
 | ||||||
|  | import com.glxp.api.admin.req.ListPageRequest; | ||||||
|  | import lombok.Data; | ||||||
|  | 
 | ||||||
|  | @Data | ||||||
|  | public class FilterLoginLogRequest extends ListPageRequest { | ||||||
|  | 
 | ||||||
|  |     private Long infoId; | ||||||
|  | 
 | ||||||
|  |     private String userName; | ||||||
|  | 
 | ||||||
|  |     private String status; | ||||||
|  | 
 | ||||||
|  |     private String ipaddr; | ||||||
|  | 
 | ||||||
|  |     private String loginLocation; | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,32 @@ | |||||||
|  | package com.glxp.api.admin.req.monitor; | ||||||
|  | 
 | ||||||
|  | import com.glxp.api.admin.req.ListPageRequest; | ||||||
|  | import lombok.Data; | ||||||
|  | 
 | ||||||
|  | @Data | ||||||
|  | public class FilterOperLogRequest extends ListPageRequest { | ||||||
|  | 
 | ||||||
|  |     private Long operId; | ||||||
|  | 
 | ||||||
|  |     private String title; | ||||||
|  | 
 | ||||||
|  |     private Integer businessType; | ||||||
|  | 
 | ||||||
|  |     private String method; | ||||||
|  | 
 | ||||||
|  |     private String requestMethod; | ||||||
|  | 
 | ||||||
|  |     private Integer operatorType; | ||||||
|  | 
 | ||||||
|  |     private String operName; | ||||||
|  | 
 | ||||||
|  |     private String deptName; | ||||||
|  | 
 | ||||||
|  |     private String operUrl; | ||||||
|  | 
 | ||||||
|  |     private String operIp; | ||||||
|  | 
 | ||||||
|  |     private Integer status; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,35 @@ | |||||||
|  | package com.glxp.api.admin.service.monitor; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import com.glxp.api.admin.entity.monitor.SysLogininfor; | ||||||
|  | import com.glxp.api.admin.req.monitor.FilterLoginLogRequest; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 系统访问日志情况信息 服务层 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  */ | ||||||
|  | public interface ISysLogininforService { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     List<SysLogininfor> selectLogininforList(FilterLoginLogRequest logininforRequest); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 新增系统登录日志 | ||||||
|  |      * | ||||||
|  |      * @param logininfor 访问日志对象 | ||||||
|  |      */ | ||||||
|  |     void insertLogininfor(SysLogininfor logininfor); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 批量删除系统登录日志 | ||||||
|  |      * | ||||||
|  |      * @param infoIds 需要删除的登录日志ID | ||||||
|  |      * @return 结果 | ||||||
|  |      */ | ||||||
|  |     int deleteLogininforByIds(List<Long> infoIds); | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,47 @@ | |||||||
|  | package com.glxp.api.admin.service.monitor; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import com.glxp.api.admin.entity.monitor.SysOperLog; | ||||||
|  | import com.glxp.api.admin.req.monitor.FilterOperLogRequest; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 操作日志 服务层 | ||||||
|  |  */ | ||||||
|  | public interface ISysOperLogService { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 新增操作日志 | ||||||
|  |      * | ||||||
|  |      * @param operLog 操作日志对象 | ||||||
|  |      */ | ||||||
|  |     void insertOperlog(SysOperLog operLog); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 查询系统操作日志集合 | ||||||
|  |      * | ||||||
|  |      * @param operLog 操作日志对象 | ||||||
|  |      * @return 操作日志集合 | ||||||
|  |      */ | ||||||
|  |     List<SysOperLog> selectOperLogList(FilterOperLogRequest filterOperLogRequest); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 批量删除系统操作日志 | ||||||
|  |      * | ||||||
|  |      * @param operIds 需要删除的操作日志ID | ||||||
|  |      * @return 结果 | ||||||
|  |      */ | ||||||
|  |     int deleteOperLogByIds(Long[] operIds); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 查询操作日志详细 | ||||||
|  |      * | ||||||
|  |      * @param operId 操作ID | ||||||
|  |      * @return 操作日志对象 | ||||||
|  |      */ | ||||||
|  |     SysOperLog selectOperLogById(Long operId); | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,12 @@ | |||||||
|  | package com.glxp.api.admin.service.monitor; | ||||||
|  | 
 | ||||||
|  | import javax.servlet.http.HttpServletRequest; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 通用 系统访问日志 | ||||||
|  |  */ | ||||||
|  | public interface LogininforService { | ||||||
|  | 
 | ||||||
|  |     void recordLogininfor(String username, String status, String message, | ||||||
|  |                           HttpServletRequest request, Object... args); | ||||||
|  | } | ||||||
| @ -0,0 +1,13 @@ | |||||||
|  | package com.glxp.api.admin.service.monitor; | ||||||
|  | 
 | ||||||
|  | import com.glxp.api.admin.entity.monitor.OperLogDTO; | ||||||
|  | import org.springframework.scheduling.annotation.Async; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 通用 操作日志 | ||||||
|  |  */ | ||||||
|  | public interface OperLogService { | ||||||
|  | 
 | ||||||
|  |     @Async | ||||||
|  |     void recordOper(OperLogDTO operLogDTO); | ||||||
|  | } | ||||||
| @ -0,0 +1,115 @@ | |||||||
|  | package com.glxp.api.admin.service.monitor.impl; | ||||||
|  | 
 | ||||||
|  | import cn.hutool.http.useragent.UserAgent; | ||||||
|  | import cn.hutool.http.useragent.UserAgentUtil; | ||||||
|  | import com.github.pagehelper.PageHelper; | ||||||
|  | import com.glxp.api.admin.constant.Constant; | ||||||
|  | import com.glxp.api.admin.dao.monitor.SysLogininforMapper; | ||||||
|  | import com.glxp.api.admin.entity.monitor.SysLogininfor; | ||||||
|  | import com.glxp.api.admin.req.monitor.FilterLoginLogRequest; | ||||||
|  | import com.glxp.api.admin.service.monitor.ISysLogininforService; | ||||||
|  | import com.glxp.api.admin.service.monitor.LogininforService; | ||||||
|  | import com.glxp.api.admin.util.AddressUtils; | ||||||
|  | import com.glxp.api.admin.util.ServletUtils; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import lombok.extern.slf4j.Slf4j; | ||||||
|  | import org.apache.commons.lang3.StringUtils; | ||||||
|  | import org.springframework.scheduling.annotation.Async; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import org.springframework.transaction.annotation.Transactional; | ||||||
|  | 
 | ||||||
|  | import javax.servlet.http.HttpServletRequest; | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 系统访问日志情况信息 服务层处理 | ||||||
|  |  */ | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @Slf4j | ||||||
|  | @Service | ||||||
|  | @Transactional(rollbackFor = Exception.class) | ||||||
|  | public class SysLogininforServiceImpl implements ISysLogininforService, LogininforService { | ||||||
|  | 
 | ||||||
|  |     private final SysLogininforMapper baseMapper; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 记录登录信息 | ||||||
|  |      * | ||||||
|  |      * @param username 用户名 | ||||||
|  |      * @param status   状态 | ||||||
|  |      * @param message  消息 | ||||||
|  |      * @param args     列表 | ||||||
|  |      */ | ||||||
|  |     @Async | ||||||
|  |     @Override | ||||||
|  |     public void recordLogininfor(final String username, final String status, final String message, | ||||||
|  |                                  HttpServletRequest request, final Object... args) { | ||||||
|  |         final UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent")); | ||||||
|  |         final String ip = ServletUtils.getClientIP(request); | ||||||
|  | 
 | ||||||
|  |         String address = AddressUtils.getRealAddressByIP(ip); | ||||||
|  |         StringBuilder s = new StringBuilder(); | ||||||
|  |         s.append(getBlock(ip)); | ||||||
|  |         s.append(address); | ||||||
|  |         s.append(getBlock(username)); | ||||||
|  |         s.append(getBlock(status)); | ||||||
|  |         s.append(getBlock(message)); | ||||||
|  |         // 打印信息到日志
 | ||||||
|  |         log.info(s.toString(), args); | ||||||
|  |         // 获取客户端操作系统
 | ||||||
|  |         String os = userAgent.getOs().getName(); | ||||||
|  |         // 获取客户端浏览器
 | ||||||
|  |         String browser = userAgent.getBrowser().getName(); | ||||||
|  |         // 封装对象
 | ||||||
|  |         SysLogininfor logininfor = new SysLogininfor(); | ||||||
|  |         logininfor.setUserName(username); | ||||||
|  |         logininfor.setIpaddr(ip); | ||||||
|  |         logininfor.setLoginLocation(address); | ||||||
|  |         logininfor.setBrowser(browser); | ||||||
|  |         logininfor.setOs(os); | ||||||
|  |         logininfor.setMsg(message); | ||||||
|  |         // 日志状态
 | ||||||
|  |         if (StringUtils.equalsAny(status, Constant.LOGIN_SUCCESS, Constant.LOGOUT, Constant.REGISTER)) { | ||||||
|  |             logininfor.setStatus(Constant.SUCCESS); | ||||||
|  |         } else if (Constant.LOGIN_FAIL.equals(status)) { | ||||||
|  |             logininfor.setStatus(Constant.FAIL); | ||||||
|  |         } | ||||||
|  |         // 插入数据
 | ||||||
|  |         insertLogininfor(logininfor); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private String getBlock(Object msg) { | ||||||
|  |         if (msg == null) { | ||||||
|  |             msg = ""; | ||||||
|  |         } | ||||||
|  |         return "[" + msg.toString() + "]"; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public List<SysLogininfor> selectLogininforList(FilterLoginLogRequest logininfor) { | ||||||
|  |         if (logininfor.getPage() != null) { | ||||||
|  |             int offset = (logininfor.getPage() - 1) * logininfor.getLimit(); | ||||||
|  |             PageHelper.offsetPage(offset, logininfor.getLimit()); | ||||||
|  |         } | ||||||
|  |         return baseMapper.selectLogininforList(logininfor); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 新增系统登录日志 | ||||||
|  |      * | ||||||
|  |      * @param logininfor 访问日志对象 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public void insertLogininfor(SysLogininfor logininfor) { | ||||||
|  |         logininfor.setLoginTime(new Date()); | ||||||
|  |         baseMapper.insert(logininfor); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public int deleteLogininforByIds(List<Long> infoIds) { | ||||||
|  |         return baseMapper.deleteBatchIds(infoIds); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,88 @@ | |||||||
|  | package com.glxp.api.admin.service.monitor.impl; | ||||||
|  | 
 | ||||||
|  | import cn.hutool.core.bean.BeanUtil; | ||||||
|  | import com.github.pagehelper.PageHelper; | ||||||
|  | import com.glxp.api.admin.dao.monitor.SysOperLogMapper; | ||||||
|  | import com.glxp.api.admin.entity.monitor.OperLogDTO; | ||||||
|  | import com.glxp.api.admin.entity.monitor.SysOperLog; | ||||||
|  | import com.glxp.api.admin.req.monitor.FilterOperLogRequest; | ||||||
|  | import com.glxp.api.admin.service.monitor.ISysOperLogService; | ||||||
|  | import com.glxp.api.admin.service.monitor.OperLogService; | ||||||
|  | import com.glxp.api.admin.util.AddressUtils; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import org.springframework.scheduling.annotation.Async; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import org.springframework.transaction.annotation.Transactional; | ||||||
|  | 
 | ||||||
|  | import java.util.Arrays; | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 操作日志 服务层处理 | ||||||
|  |  */ | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @Service | ||||||
|  | @Transactional(rollbackFor = Exception.class) | ||||||
|  | public class SysOperLogServiceImpl implements ISysOperLogService, OperLogService { | ||||||
|  | 
 | ||||||
|  |     private final SysOperLogMapper baseMapper; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 操作日志记录 | ||||||
|  |      * | ||||||
|  |      * @param operLogDTO 操作日志信息 | ||||||
|  |      */ | ||||||
|  |     @Async | ||||||
|  |     @Override | ||||||
|  |     public void recordOper(final OperLogDTO operLogDTO) { | ||||||
|  |         SysOperLog operLog = BeanUtil.toBean(operLogDTO, SysOperLog.class); | ||||||
|  |         // 远程查询操作地点
 | ||||||
|  |         operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); | ||||||
|  |         insertOperlog(operLog); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public List<SysOperLog> selectOperLogList(FilterOperLogRequest filterOperLogRequest) { | ||||||
|  |         if (filterOperLogRequest.getPage() != null) { | ||||||
|  |             int offset = (filterOperLogRequest.getPage() - 1) * filterOperLogRequest.getLimit(); | ||||||
|  |             PageHelper.offsetPage(offset, filterOperLogRequest.getLimit()); | ||||||
|  |         } | ||||||
|  |         return baseMapper.selectList(filterOperLogRequest); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 新增操作日志 | ||||||
|  |      * | ||||||
|  |      * @param operLog 操作日志对象 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public void insertOperlog(SysOperLog operLog) { | ||||||
|  |         operLog.setOperTime(new Date()); | ||||||
|  |         baseMapper.insert(operLog); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 批量删除系统操作日志 | ||||||
|  |      * | ||||||
|  |      * @param operIds 需要删除的操作日志ID | ||||||
|  |      * @return 结果 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public int deleteOperLogByIds(Long[] operIds) { | ||||||
|  |         return baseMapper.deleteBatchIds(Arrays.asList(operIds)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 查询操作日志详细 | ||||||
|  |      * | ||||||
|  |      * @param operId 操作ID | ||||||
|  |      * @return 操作日志对象 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public SysOperLog selectOperLogById(Long operId) { | ||||||
|  |         return baseMapper.selectById(operId); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,55 @@ | |||||||
|  | package com.glxp.api.admin.util; | ||||||
|  | 
 | ||||||
|  | import cn.hutool.core.lang.Dict; | ||||||
|  | import cn.hutool.core.net.NetUtil; | ||||||
|  | import cn.hutool.http.HtmlUtil; | ||||||
|  | import cn.hutool.http.HttpUtil; | ||||||
|  | import lombok.AccessLevel; | ||||||
|  | import lombok.NoArgsConstructor; | ||||||
|  | import lombok.extern.slf4j.Slf4j; | ||||||
|  | import org.apache.commons.lang3.StringUtils; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 获取地址类 | ||||||
|  |  */ | ||||||
|  | @Slf4j | ||||||
|  | @NoArgsConstructor(access = AccessLevel.PRIVATE) | ||||||
|  | public class AddressUtils { | ||||||
|  | 
 | ||||||
|  |     // IP地址查询
 | ||||||
|  |     public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; | ||||||
|  | 
 | ||||||
|  |     // 未知地址
 | ||||||
|  |     public static final String UNKNOWN = "XX XX"; | ||||||
|  | 
 | ||||||
|  |     public static String getRealAddressByIP(String ip) { | ||||||
|  |         String address = UNKNOWN; | ||||||
|  |         if (StringUtils.isBlank(ip)) { | ||||||
|  |             return address; | ||||||
|  |         } | ||||||
|  |         // 内网不查询
 | ||||||
|  |         ip = "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : HtmlUtil.cleanHtmlTag(ip); | ||||||
|  |         if (NetUtil.isInnerIP(ip)) { | ||||||
|  |             return "内网IP"; | ||||||
|  |         } | ||||||
|  | //        if (RuoYiConfig.isAddressEnabled()) {
 | ||||||
|  | //            try {
 | ||||||
|  | //                String rspStr = HttpUtil.createGet(IP_URL)
 | ||||||
|  | //                        .body("ip=" + ip + "&json=true", Constant.GBK)
 | ||||||
|  | //                        .execute()
 | ||||||
|  | //                        .body();
 | ||||||
|  | //                if (StringUtils.isEmpty(rspStr)) {
 | ||||||
|  | //                    log.error("获取地理位置异常 {}", ip);
 | ||||||
|  | //                    return UNKNOWN;
 | ||||||
|  | //                }
 | ||||||
|  | //                Dict obj = JsonUtils.parseMap(rspStr);
 | ||||||
|  | //                String region = obj.getStr("pro");
 | ||||||
|  | //                String city = obj.getStr("city");
 | ||||||
|  | //                return String.format("%s %s", region, city);
 | ||||||
|  | //            } catch (Exception e) {
 | ||||||
|  | //                log.error("获取地理位置异常 {}", ip);
 | ||||||
|  | //            }
 | ||||||
|  | //        }
 | ||||||
|  |         return UNKNOWN; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,110 @@ | |||||||
|  | package com.glxp.api.admin.util; | ||||||
|  | 
 | ||||||
|  | import cn.hutool.core.lang.Dict; | ||||||
|  | import cn.hutool.core.util.ArrayUtil; | ||||||
|  | import cn.hutool.core.util.ObjectUtil; | ||||||
|  | import com.fasterxml.jackson.core.JsonProcessingException; | ||||||
|  | import com.fasterxml.jackson.core.type.TypeReference; | ||||||
|  | import com.fasterxml.jackson.databind.ObjectMapper; | ||||||
|  | import com.fasterxml.jackson.databind.exc.MismatchedInputException; | ||||||
|  | import lombok.AccessLevel; | ||||||
|  | import lombok.NoArgsConstructor; | ||||||
|  | import org.apache.commons.lang3.StringUtils; | ||||||
|  | 
 | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * JSON 工具类 | ||||||
|  |  */ | ||||||
|  | @NoArgsConstructor(access = AccessLevel.PRIVATE) | ||||||
|  | public class JsonUtils { | ||||||
|  | 
 | ||||||
|  |     private static final ObjectMapper OBJECT_MAPPER = SpringUtils.getBean(ObjectMapper.class); | ||||||
|  | 
 | ||||||
|  |     public static ObjectMapper getObjectMapper() { | ||||||
|  |         return OBJECT_MAPPER; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static String toJsonString(Object object) { | ||||||
|  |         if (ObjectUtil.isNull(object)) { | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |         try { | ||||||
|  |             return OBJECT_MAPPER.writeValueAsString(object); | ||||||
|  |         } catch (JsonProcessingException e) { | ||||||
|  |             throw new RuntimeException(e); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static <T> T parseObject(String text, Class<T> clazz) { | ||||||
|  |         if (StringUtils.isEmpty(text)) { | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |         try { | ||||||
|  |             return OBJECT_MAPPER.readValue(text, clazz); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             throw new RuntimeException(e); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static <T> T parseObject(byte[] bytes, Class<T> clazz) { | ||||||
|  |         if (ArrayUtil.isEmpty(bytes)) { | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |         try { | ||||||
|  |             return OBJECT_MAPPER.readValue(bytes, clazz); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             throw new RuntimeException(e); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static <T> T parseObject(String text, TypeReference<T> typeReference) { | ||||||
|  |         if (StringUtils.isBlank(text)) { | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |         try { | ||||||
|  |             return OBJECT_MAPPER.readValue(text, typeReference); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             throw new RuntimeException(e); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static Dict parseMap(String text) { | ||||||
|  |         if (StringUtils.isBlank(text)) { | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |         try { | ||||||
|  |             return OBJECT_MAPPER.readValue(text, OBJECT_MAPPER.getTypeFactory().constructType(Dict.class)); | ||||||
|  |         } catch (MismatchedInputException e) { | ||||||
|  |             // 类型不匹配说明不是json
 | ||||||
|  |             return null; | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             throw new RuntimeException(e); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static List<Dict> parseArrayMap(String text) { | ||||||
|  |         if (StringUtils.isBlank(text)) { | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |         try { | ||||||
|  |             return OBJECT_MAPPER.readValue(text, OBJECT_MAPPER.getTypeFactory().constructCollectionType(List.class, Dict.class)); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             throw new RuntimeException(e); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static <T> List<T> parseArray(String text, Class<T> clazz) { | ||||||
|  |         if (StringUtils.isEmpty(text)) { | ||||||
|  |             return new ArrayList<>(); | ||||||
|  |         } | ||||||
|  |         try { | ||||||
|  |             return OBJECT_MAPPER.readValue(text, OBJECT_MAPPER.getTypeFactory().constructCollectionType(List.class, clazz)); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             throw new RuntimeException(e); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,173 @@ | |||||||
|  | package com.glxp.api.admin.util; | ||||||
|  | 
 | ||||||
|  | import cn.hutool.core.convert.Convert; | ||||||
|  | import cn.hutool.extra.servlet.ServletUtil; | ||||||
|  | import cn.hutool.http.HttpStatus; | ||||||
|  | import com.glxp.api.admin.constant.Constant; | ||||||
|  | import lombok.AccessLevel; | ||||||
|  | import lombok.NoArgsConstructor; | ||||||
|  | import org.apache.commons.lang3.StringUtils; | ||||||
|  | import org.springframework.http.MediaType; | ||||||
|  | import org.springframework.web.context.request.RequestAttributes; | ||||||
|  | import org.springframework.web.context.request.RequestContextHolder; | ||||||
|  | import org.springframework.web.context.request.ServletRequestAttributes; | ||||||
|  | 
 | ||||||
|  | import javax.servlet.http.HttpServletRequest; | ||||||
|  | import javax.servlet.http.HttpServletResponse; | ||||||
|  | import javax.servlet.http.HttpSession; | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.io.UnsupportedEncodingException; | ||||||
|  | import java.net.URLDecoder; | ||||||
|  | import java.net.URLEncoder; | ||||||
|  | import java.nio.charset.StandardCharsets; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 客户端工具类 | ||||||
|  |  */ | ||||||
|  | @NoArgsConstructor(access = AccessLevel.PRIVATE) | ||||||
|  | public class ServletUtils extends ServletUtil { | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 获取String参数 | ||||||
|  |      */ | ||||||
|  |     public static String getParameter(String name) { | ||||||
|  |         return getRequest().getParameter(name); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 获取String参数 | ||||||
|  |      */ | ||||||
|  |     public static String getParameter(String name, String defaultValue) { | ||||||
|  |         return Convert.toStr(getRequest().getParameter(name), defaultValue); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 获取Integer参数 | ||||||
|  |      */ | ||||||
|  |     public static Integer getParameterToInt(String name) { | ||||||
|  |         return Convert.toInt(getRequest().getParameter(name)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 获取Integer参数 | ||||||
|  |      */ | ||||||
|  |     public static Integer getParameterToInt(String name, Integer defaultValue) { | ||||||
|  |         return Convert.toInt(getRequest().getParameter(name), defaultValue); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 获取Boolean参数 | ||||||
|  |      */ | ||||||
|  |     public static Boolean getParameterToBool(String name) { | ||||||
|  |         return Convert.toBool(getRequest().getParameter(name)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 获取Boolean参数 | ||||||
|  |      */ | ||||||
|  |     public static Boolean getParameterToBool(String name, Boolean defaultValue) { | ||||||
|  |         return Convert.toBool(getRequest().getParameter(name), defaultValue); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 获取request | ||||||
|  |      */ | ||||||
|  |     public static HttpServletRequest getRequest() { | ||||||
|  |         return getRequestAttributes().getRequest(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 获取response | ||||||
|  |      */ | ||||||
|  |     public static HttpServletResponse getResponse() { | ||||||
|  |         return getRequestAttributes().getResponse(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 获取session | ||||||
|  |      */ | ||||||
|  |     public static HttpSession getSession() { | ||||||
|  |         return getRequest().getSession(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static ServletRequestAttributes getRequestAttributes() { | ||||||
|  |         RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); | ||||||
|  |         return (ServletRequestAttributes) attributes; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 将字符串渲染到客户端 | ||||||
|  |      * | ||||||
|  |      * @param response 渲染对象 | ||||||
|  |      * @param string   待渲染的字符串 | ||||||
|  |      */ | ||||||
|  |     public static void renderString(HttpServletResponse response, String string) { | ||||||
|  |         try { | ||||||
|  |             response.setStatus(HttpStatus.HTTP_OK); | ||||||
|  |             response.setContentType(MediaType.APPLICATION_JSON_VALUE); | ||||||
|  |             response.setCharacterEncoding(StandardCharsets.UTF_8.toString()); | ||||||
|  |             response.getWriter().print(string); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 是否是Ajax异步请求 | ||||||
|  |      * | ||||||
|  |      * @param request | ||||||
|  |      */ | ||||||
|  |     public static boolean isAjaxRequest(HttpServletRequest request) { | ||||||
|  | 
 | ||||||
|  |         String accept = request.getHeader("accept"); | ||||||
|  |         if (accept != null && accept.contains(MediaType.APPLICATION_JSON_VALUE)) { | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         String xRequestedWith = request.getHeader("X-Requested-With"); | ||||||
|  |         if (xRequestedWith != null && xRequestedWith.contains("XMLHttpRequest")) { | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         String uri = request.getRequestURI(); | ||||||
|  |         if (StringUtils.equalsAnyIgnoreCase(uri, ".json", ".xml")) { | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         String ajax = request.getParameter("__ajax"); | ||||||
|  |         return StringUtils.equalsAnyIgnoreCase(ajax, "json", "xml"); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static String getClientIP() { | ||||||
|  |         return getClientIP(getRequest()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 内容编码 | ||||||
|  |      * | ||||||
|  |      * @param str 内容 | ||||||
|  |      * @return 编码后的内容 | ||||||
|  |      */ | ||||||
|  |     public static String urlEncode(String str) { | ||||||
|  |         try { | ||||||
|  |             return URLEncoder.encode(str, Constant.UTF8); | ||||||
|  |         } catch (UnsupportedEncodingException e) { | ||||||
|  |             return StringUtils.EMPTY; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 内容解码 | ||||||
|  |      * | ||||||
|  |      * @param str 内容 | ||||||
|  |      * @return 解码后的内容 | ||||||
|  |      */ | ||||||
|  |     public static String urlDecode(String str) { | ||||||
|  |         try { | ||||||
|  |             return URLDecoder.decode(str, Constant.UTF8); | ||||||
|  |         } catch (UnsupportedEncodingException e) { | ||||||
|  |             return StringUtils.EMPTY; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,81 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8" ?> | ||||||
|  | <!DOCTYPE mapper | ||||||
|  |         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||||||
|  |         "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||||
|  | <mapper namespace="com.glxp.api.admin.dao.monitor.SysLogininforMapper"> | ||||||
|  |     <resultMap type="com.glxp.api.admin.entity.monitor.SysLogininfor" id="SysLogininforResult"> | ||||||
|  |         <id property="infoId" column="info_id"/> | ||||||
|  |         <result property="userName" column="user_name"/> | ||||||
|  |         <result property="status" column="status"/> | ||||||
|  |         <result property="ipaddr" column="ipaddr"/> | ||||||
|  |         <result property="loginLocation" column="login_location"/> | ||||||
|  |         <result property="browser" column="browser"/> | ||||||
|  |         <result property="os" column="os"/> | ||||||
|  |         <result property="msg" column="msg"/> | ||||||
|  |         <result property="loginTime" column="login_time"/> | ||||||
|  |     </resultMap> | ||||||
|  | 
 | ||||||
|  |     <select id="selectLogininforList" parameterType="com.glxp.api.admin.req.monitor.FilterLoginLogRequest" | ||||||
|  |             resultMap="SysLogininforResult"> | ||||||
|  |         select * | ||||||
|  |         FROM monitor_login_log | ||||||
|  |         <where> | ||||||
|  |             <if test="infoId != null"> | ||||||
|  |                 and info_id = #{infoId} | ||||||
|  |             </if> | ||||||
|  |             <if test="userName != null and userName != ''"> | ||||||
|  |                 AND `user_name` like concat('%', #{userName}, '%') | ||||||
|  |             </if> | ||||||
|  |             <if test="status != null and status != ''"> | ||||||
|  |                 AND `status` = #{status} | ||||||
|  |             </if> | ||||||
|  |             <if test="ipaddr != null"> | ||||||
|  |                 AND `ipaddr` = #{ipaddr} | ||||||
|  |             </if> | ||||||
|  |             <if test="loginLocation != null"> | ||||||
|  |                 AND `login_location` = #{loginLocation} | ||||||
|  |             </if> | ||||||
|  |         </where> | ||||||
|  |         order by login_time desc | ||||||
|  |     </select> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     <select id="selectById" parameterType="java.lang.Long" | ||||||
|  |             resultMap="SysLogininforResult"> | ||||||
|  |         select * | ||||||
|  |         FROM monitor_login_log | ||||||
|  |         WHERE oper_id = #{id} | ||||||
|  |     </select> | ||||||
|  | 
 | ||||||
|  |     <insert id="insert" keyProperty="infoId" useGeneratedKeys="true" | ||||||
|  |             parameterType="com.glxp.api.admin.entity.monitor.SysLogininfor"> | ||||||
|  |         INSERT INTO monitor_login_log( `user_name`, `status`, ipaddr, `login_location`, browser, `os`, msg | ||||||
|  |                                      , login_time) | ||||||
|  |         values (#{userName}, | ||||||
|  |                 #{status}, #{ipaddr}, | ||||||
|  |                 #{loginLocation}, #{browser}, #{os}, #{msg}, #{loginTime}) | ||||||
|  |     </insert> | ||||||
|  | 
 | ||||||
|  |     <delete id="delete" parameterType="java.lang.Long"> | ||||||
|  |         delete | ||||||
|  |         from monitor_login_log | ||||||
|  |         where info_id = #{id} | ||||||
|  |     </delete> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     <delete id="deleteBatchIds" parameterType="java.util.List" | ||||||
|  |     > | ||||||
|  |         delete | ||||||
|  |         from monitor_login_log | ||||||
|  |                 where info_id in | ||||||
|  |         <foreach item="item" index="index" collection="infoIds" open="(" separator="," close=")"> | ||||||
|  |             #{item} | ||||||
|  |         </foreach> | ||||||
|  |     </delete> | ||||||
|  | 
 | ||||||
|  |     <delete id="deleteByDate"> | ||||||
|  |         delete | ||||||
|  |         from monitor_login_log | ||||||
|  |         where date_format(#{date}, '%Y-%m-%d') >= date_format(login_time, '%Y-%m-%d') | ||||||
|  |     </delete> | ||||||
|  | </mapper> | ||||||
| @ -0,0 +1,113 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8" ?> | ||||||
|  | <!DOCTYPE mapper | ||||||
|  |         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||||||
|  |         "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||||
|  | <mapper namespace="com.glxp.api.admin.dao.monitor.SysOperLogMapper"> | ||||||
|  |     <resultMap type="com.glxp.api.admin.entity.monitor.SysOperLog" id="SysOperLogResult"> | ||||||
|  |         <id property="operId" column="oper_id"/> | ||||||
|  |         <result property="title" column="title"/> | ||||||
|  |         <result property="businessType" column="business_type"/> | ||||||
|  |         <result property="method" column="method"/> | ||||||
|  |         <result property="requestMethod" column="request_method"/> | ||||||
|  |         <result property="operatorType" column="operator_type"/> | ||||||
|  |         <result property="operName" column="oper_name"/> | ||||||
|  |         <result property="deptName" column="dept_name"/> | ||||||
|  |         <result property="operUrl" column="oper_url"/> | ||||||
|  |         <result property="operIp" column="oper_ip"/> | ||||||
|  |         <result property="operLocation" column="oper_location"/> | ||||||
|  |         <result property="operParam" column="oper_param"/> | ||||||
|  |         <result property="jsonResult" column="json_result"/> | ||||||
|  |         <result property="status" column="status"/> | ||||||
|  |         <result property="errorMsg" column="error_msg"/> | ||||||
|  |         <result property="operTime" column="oper_time"/> | ||||||
|  |         <result property="operUserName" column="operUserName"/> | ||||||
|  |     </resultMap> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     <select id="selectList" parameterType="com.glxp.api.admin.req.monitor.FilterOperLogRequest" | ||||||
|  |             resultMap="SysOperLogResult"> | ||||||
|  |         select monitor_oper_log.*, auth_user.employeeName operUserName | ||||||
|  |         FROM monitor_oper_log | ||||||
|  |                      left join auth_user | ||||||
|  |                 on monitor_oper_log.oper_name = auth_user.id | ||||||
|  |         <where> | ||||||
|  |             <if test="operId != null"> | ||||||
|  |                 and oper_id = #{operId} | ||||||
|  |             </if> | ||||||
|  |             <if test="title != null and title != ''"> | ||||||
|  |                 AND `title` like concat('%', #{title}, '%') | ||||||
|  |             </if> | ||||||
|  |             <if test="businessType != null and businessType != ''"> | ||||||
|  |                 AND `business_type` = #{businessType} | ||||||
|  |             </if> | ||||||
|  |             <if test="method != null"> | ||||||
|  |                 AND `method` = #{method} | ||||||
|  |             </if> | ||||||
|  |             <if test="requestMethod != null"> | ||||||
|  |                 AND `request_method` = #{requestMethod} | ||||||
|  |             </if> | ||||||
|  | 
 | ||||||
|  |             <if test="operatorType != null"> | ||||||
|  |                 AND `operator_type` = #{operatorType} | ||||||
|  |             </if> | ||||||
|  |             <if test="operName != null"> | ||||||
|  |                 AND auth_user.employeeName like concat('%', #{operName}, '%') | ||||||
|  |             </if> | ||||||
|  |             <if test="deptName != null"> | ||||||
|  |                 AND `dept_name` = #{deptName} | ||||||
|  |             </if> | ||||||
|  |             <if test="operUrl != null"> | ||||||
|  |                 AND `oper_url` = #{operUrl} | ||||||
|  |             </if> | ||||||
|  |             <if test="operIp != null"> | ||||||
|  |                 AND `oper_ip` = #{operIp} | ||||||
|  |             </if> | ||||||
|  |             <if test="status != null"> | ||||||
|  |                 AND `status` = #{status} | ||||||
|  |             </if> | ||||||
|  |         </where> | ||||||
|  |         order by monitor_oper_log.oper_time desc | ||||||
|  |     </select> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     <select id="selectById" parameterType="java.lang.Long" | ||||||
|  |             resultMap="SysOperLogResult"> | ||||||
|  |         select * | ||||||
|  |         FROM monitor_oper_log | ||||||
|  |         WHERE oper_id = #{id} | ||||||
|  |     </select> | ||||||
|  | 
 | ||||||
|  |     <insert id="insert" keyProperty="operIp" useGeneratedKeys="true" | ||||||
|  |             parameterType="com.glxp.api.admin.entity.monitor.SysOperLog"> | ||||||
|  |         INSERT INTO monitor_oper_log(`oper_id`, `title`, business_type, `method`, `request_method`, operator_type | ||||||
|  |                 , oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, | ||||||
|  |                                      error_msg, oper_time) | ||||||
|  |         values ( #{operId}, | ||||||
|  |                  #{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName} | ||||||
|  |                , #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status} | ||||||
|  |                , #{errorMsg}, #{operTime}) | ||||||
|  |     </insert> | ||||||
|  | 
 | ||||||
|  |     <delete id="delete" parameterType="java.lang.Long"> | ||||||
|  |         delete | ||||||
|  |         from monitor_oper_log | ||||||
|  |         where oper_id = #{id} | ||||||
|  |     </delete> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     <delete id="deleteBatchIds" parameterType="java.util.List" | ||||||
|  |     > | ||||||
|  |         delete | ||||||
|  |         from monitor_oper_log | ||||||
|  |                 where oper_id in | ||||||
|  |         <foreach item="item" index="index" collection="ids" open="(" separator="," close=")"> | ||||||
|  |             #{item} | ||||||
|  |         </foreach> | ||||||
|  |     </delete> | ||||||
|  | 
 | ||||||
|  |     <delete id="deleteByDate"> | ||||||
|  |         delete | ||||||
|  |         from monitor_oper_log | ||||||
|  |         where date_format(#{date}, '%Y-%m-%d') >= date_format(oper_time, '%Y-%m-%d') | ||||||
|  |     </delete> | ||||||
|  | </mapper> | ||||||
					Loading…
					
					
				
		Reference in New Issue