提交 | 用户 | 时间
|
e7c126
|
1 |
package com.iailab.framework.operatelog.core.service; |
H |
2 |
|
|
3 |
import com.iailab.framework.common.util.monitor.TracerUtils; |
|
4 |
import com.iailab.framework.common.util.servlet.ServletUtils; |
|
5 |
import com.iailab.framework.security.core.LoginUser; |
|
6 |
import com.iailab.framework.security.core.util.SecurityFrameworkUtils; |
|
7 |
import com.iailab.module.system.api.logger.OperateLogApi; |
|
8 |
import com.iailab.module.system.api.logger.dto.OperateLogCreateReqDTO; |
|
9 |
import com.mzt.logapi.beans.LogRecord; |
|
10 |
import com.mzt.logapi.service.ILogRecordService; |
|
11 |
import lombok.extern.slf4j.Slf4j; |
|
12 |
|
|
13 |
import javax.annotation.Resource; |
|
14 |
import javax.servlet.http.HttpServletRequest; |
|
15 |
import java.util.List; |
|
16 |
|
|
17 |
/** |
|
18 |
* 操作日志 ILogRecordService 实现类 |
|
19 |
* |
|
20 |
* 基于 {@link OperateLogApi} 实现,记录操作日志 |
|
21 |
* |
|
22 |
* @author HUIHUI |
|
23 |
*/ |
|
24 |
@Slf4j |
|
25 |
public class LogRecordServiceImpl implements ILogRecordService { |
|
26 |
|
|
27 |
@Resource |
|
28 |
private OperateLogApi operateLogApi; |
|
29 |
|
|
30 |
@Override |
|
31 |
public void record(LogRecord logRecord) { |
|
32 |
// 1. 补全通用字段 |
|
33 |
OperateLogCreateReqDTO reqDTO = new OperateLogCreateReqDTO(); |
|
34 |
reqDTO.setTraceId(TracerUtils.getTraceId()); |
|
35 |
// 补充用户信息 |
|
36 |
fillUserFields(reqDTO); |
|
37 |
// 补全模块信息 |
|
38 |
fillModuleFields(reqDTO, logRecord); |
|
39 |
// 补全请求信息 |
|
40 |
fillRequestFields(reqDTO); |
|
41 |
|
|
42 |
// 2. 异步记录日志 |
|
43 |
operateLogApi.createOperateLog(reqDTO); |
|
44 |
} |
|
45 |
|
|
46 |
private static void fillUserFields(OperateLogCreateReqDTO reqDTO) { |
|
47 |
// 使用 SecurityFrameworkUtils。因为要考虑,rpc、mq、job,它其实不是 web; |
|
48 |
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); |
|
49 |
if (loginUser == null) { |
|
50 |
return; |
|
51 |
} |
|
52 |
reqDTO.setUserId(loginUser.getId()); |
|
53 |
reqDTO.setUserType(loginUser.getUserType()); |
|
54 |
} |
|
55 |
|
|
56 |
public static void fillModuleFields(OperateLogCreateReqDTO reqDTO, LogRecord logRecord) { |
|
57 |
reqDTO.setType(logRecord.getType()); // 大模块类型,例如:CRM 客户 |
|
58 |
reqDTO.setSubType(logRecord.getSubType());// 操作名称,例如:转移客户 |
|
59 |
reqDTO.setBizId(Long.parseLong(logRecord.getBizNo())); // 业务编号,例如:客户编号 |
|
60 |
reqDTO.setAction(logRecord.getAction());// 操作内容,例如:修改编号为 1 的用户信息,将性别从男改成女,将姓名从平台改成源码。 |
|
61 |
reqDTO.setExtra(logRecord.getExtra()); // 拓展字段,有些复杂的业务,需要记录一些字段 ( JSON 格式 ),例如说,记录订单编号,{ orderId: "1"} |
|
62 |
} |
|
63 |
|
|
64 |
private static void fillRequestFields(OperateLogCreateReqDTO reqDTO) { |
|
65 |
// 获得 Request 对象 |
|
66 |
HttpServletRequest request = ServletUtils.getRequest(); |
|
67 |
if (request == null) { |
|
68 |
return; |
|
69 |
} |
|
70 |
// 补全请求信息 |
|
71 |
reqDTO.setRequestMethod(request.getMethod()); |
|
72 |
reqDTO.setRequestUrl(request.getRequestURI()); |
|
73 |
reqDTO.setUserIp(ServletUtils.getClientIP(request)); |
|
74 |
reqDTO.setUserAgent(ServletUtils.getUserAgent(request)); |
|
75 |
} |
|
76 |
|
|
77 |
@Override |
|
78 |
public List<LogRecord> queryLog(String bizNo, String type) { |
|
79 |
throw new UnsupportedOperationException("使用 OperateLogApi 进行操作日志的查询"); |
|
80 |
} |
|
81 |
|
|
82 |
@Override |
|
83 |
public List<LogRecord> queryLogByBizNo(String bizNo, String type, String subType) { |
|
84 |
throw new UnsupportedOperationException("使用 OperateLogApi 进行操作日志的查询"); |
|
85 |
} |
|
86 |
|
|
87 |
} |