对比新文件 |
| | |
| | | package com.iailab.framework.operatelog.core.service; |
| | | |
| | | import com.iailab.framework.common.util.monitor.TracerUtils; |
| | | import com.iailab.framework.common.util.servlet.ServletUtils; |
| | | import com.iailab.framework.security.core.LoginUser; |
| | | import com.iailab.framework.security.core.util.SecurityFrameworkUtils; |
| | | import com.iailab.module.system.api.logger.OperateLogApi; |
| | | import com.iailab.module.system.api.logger.dto.OperateLogCreateReqDTO; |
| | | import com.mzt.logapi.beans.LogRecord; |
| | | import com.mzt.logapi.service.ILogRecordService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 操作日志 ILogRecordService 实现类 |
| | | * |
| | | * 基于 {@link OperateLogApi} 实现,记录操作日志 |
| | | * |
| | | * @author HUIHUI |
| | | */ |
| | | @Slf4j |
| | | public class LogRecordServiceImpl implements ILogRecordService { |
| | | |
| | | @Resource |
| | | private OperateLogApi operateLogApi; |
| | | |
| | | @Override |
| | | public void record(LogRecord logRecord) { |
| | | // 1. 补全通用字段 |
| | | OperateLogCreateReqDTO reqDTO = new OperateLogCreateReqDTO(); |
| | | reqDTO.setTraceId(TracerUtils.getTraceId()); |
| | | // 补充用户信息 |
| | | fillUserFields(reqDTO); |
| | | // 补全模块信息 |
| | | fillModuleFields(reqDTO, logRecord); |
| | | // 补全请求信息 |
| | | fillRequestFields(reqDTO); |
| | | |
| | | // 2. 异步记录日志 |
| | | operateLogApi.createOperateLog(reqDTO); |
| | | } |
| | | |
| | | private static void fillUserFields(OperateLogCreateReqDTO reqDTO) { |
| | | // 使用 SecurityFrameworkUtils。因为要考虑,rpc、mq、job,它其实不是 web; |
| | | LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); |
| | | if (loginUser == null) { |
| | | return; |
| | | } |
| | | reqDTO.setUserId(loginUser.getId()); |
| | | reqDTO.setUserType(loginUser.getUserType()); |
| | | } |
| | | |
| | | public static void fillModuleFields(OperateLogCreateReqDTO reqDTO, LogRecord logRecord) { |
| | | reqDTO.setType(logRecord.getType()); // 大模块类型,例如:CRM 客户 |
| | | reqDTO.setSubType(logRecord.getSubType());// 操作名称,例如:转移客户 |
| | | reqDTO.setBizId(Long.parseLong(logRecord.getBizNo())); // 业务编号,例如:客户编号 |
| | | reqDTO.setAction(logRecord.getAction());// 操作内容,例如:修改编号为 1 的用户信息,将性别从男改成女,将姓名从平台改成源码。 |
| | | reqDTO.setExtra(logRecord.getExtra()); // 拓展字段,有些复杂的业务,需要记录一些字段 ( JSON 格式 ),例如说,记录订单编号,{ orderId: "1"} |
| | | } |
| | | |
| | | private static void fillRequestFields(OperateLogCreateReqDTO reqDTO) { |
| | | // 获得 Request 对象 |
| | | HttpServletRequest request = ServletUtils.getRequest(); |
| | | if (request == null) { |
| | | return; |
| | | } |
| | | // 补全请求信息 |
| | | reqDTO.setRequestMethod(request.getMethod()); |
| | | reqDTO.setRequestUrl(request.getRequestURI()); |
| | | reqDTO.setUserIp(ServletUtils.getClientIP(request)); |
| | | reqDTO.setUserAgent(ServletUtils.getUserAgent(request)); |
| | | } |
| | | |
| | | @Override |
| | | public List<LogRecord> queryLog(String bizNo, String type) { |
| | | throw new UnsupportedOperationException("使用 OperateLogApi 进行操作日志的查询"); |
| | | } |
| | | |
| | | @Override |
| | | public List<LogRecord> queryLogByBizNo(String bizNo, String type, String subType) { |
| | | throw new UnsupportedOperationException("使用 OperateLogApi 进行操作日志的查询"); |
| | | } |
| | | |
| | | } |