mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 20:28:44 +08:00 
			
		
		
		
	系统操作日志:使用自定义 starter 的方式重新集成 mzt-biz-log
This commit is contained in:
		@@ -1,18 +1,22 @@
 | 
			
		||||
package cn.iocoder.yudao.module.system.api.logger;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.collection.CollUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2RespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.service.logger.OperateLogService;
 | 
			
		||||
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import org.springframework.scheduling.annotation.Async;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
@@ -39,21 +43,31 @@ public class OperateLogApiImpl implements OperateLogApi {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<OperateLogV2RespDTO> getOperateLogByModuleAndBizId(String module, Long bizId) {
 | 
			
		||||
        List<OperateLogV2DO> logList = operateLogService.getOperateLogByModuleAndBizId(module, bizId);
 | 
			
		||||
        if (CollUtil.isEmpty(logList)) {
 | 
			
		||||
            return Collections.emptyList();
 | 
			
		||||
    @Async
 | 
			
		||||
    public void createOperateLogV2(OperateLogV2CreateReqDTO createReqDTO) {
 | 
			
		||||
        operateLogService.createOperateLogV2(createReqDTO);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public PageResult<OperateLogV2RespDTO> getOperateLogPage(OperateLogV2PageReqDTO pageReqVO) {
 | 
			
		||||
        PageResult<OperateLogV2DO> operateLogPage = operateLogService.getOperateLogPage(pageReqVO);
 | 
			
		||||
        if (CollUtil.isEmpty(operateLogPage.getList())) {
 | 
			
		||||
            return PageResult.empty();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 获取用户
 | 
			
		||||
        List<AdminUserDO> userList = adminUserService.getUserList(convertSet(logList, item -> Long.parseLong(item.getCreator())));
 | 
			
		||||
        List<AdminUserDO> userList = adminUserService.getUserList(convertSet(operateLogPage.getList(), OperateLogV2DO::getUserId));
 | 
			
		||||
        return BeanUtils.toBean(operateLogPage, OperateLogV2RespDTO.class).setList(setUserInfo(operateLogPage.getList(), userList));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static List<OperateLogV2RespDTO> setUserInfo(List<OperateLogV2DO> logList, List<AdminUserDO> userList) {
 | 
			
		||||
        Map<Long, AdminUserDO> userMap = convertMap(userList, AdminUserDO::getId);
 | 
			
		||||
        return convertList(logList, item -> {
 | 
			
		||||
            OperateLogV2RespDTO bean = BeanUtils.toBean(item, OperateLogV2RespDTO.class);
 | 
			
		||||
            findAndThen(userMap, Long.parseLong(item.getCreator()), user -> {
 | 
			
		||||
                bean.setCreatorName(user.getNickname());
 | 
			
		||||
            OperateLogV2RespDTO respDTO = OperateLogConvert.INSTANCE.convert(item);
 | 
			
		||||
            findAndThen(userMap, item.getUserId(), user -> {
 | 
			
		||||
                respDTO.setUserName(user.getNickname());
 | 
			
		||||
            });
 | 
			
		||||
            return bean;
 | 
			
		||||
            return respDTO;
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,15 +3,20 @@ package cn.iocoder.yudao.module.system.convert.logger;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2RespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 | 
			
		||||
import org.mapstruct.Mapper;
 | 
			
		||||
import org.mapstruct.Mapping;
 | 
			
		||||
import org.mapstruct.factory.Mappers;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
public interface OperateLogConvert {
 | 
			
		||||
 | 
			
		||||
@@ -25,4 +30,7 @@ public interface OperateLogConvert {
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Mapping(target = "createTime", source = "logV2DO.createTime", dateFormat = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
    OperateLogV2RespDTO convert(OperateLogV2DO logV2DO);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -42,15 +42,14 @@ public class OperateLogV2DO extends BaseDO {
 | 
			
		||||
     * 关联 {@link  UserTypeEnum}
 | 
			
		||||
     */
 | 
			
		||||
    private Integer userType;
 | 
			
		||||
    // TODO @puhui999:module 改成 type,name 改成 subType;
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作模块
 | 
			
		||||
     * 操作模块类型
 | 
			
		||||
     */
 | 
			
		||||
    private String module;
 | 
			
		||||
    private String type;
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作名
 | 
			
		||||
     */
 | 
			
		||||
    private String name;
 | 
			
		||||
    private String subType;
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作模块业务编号
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -3,28 +3,29 @@ package cn.iocoder.yudao.module.system.dal.mysql.logger;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 | 
			
		||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
public interface OperateLogV2Mapper extends BaseMapperX<OperateLogV2DO> {
 | 
			
		||||
 | 
			
		||||
    default PageResult<OperateLogV2DO> selectPage(OperateLogPageReqVO reqVO, Collection<Long> userIds) {
 | 
			
		||||
        LambdaQueryWrapperX<OperateLogV2DO> query = new LambdaQueryWrapperX<OperateLogV2DO>()
 | 
			
		||||
                .likeIfPresent(OperateLogV2DO::getModule, reqVO.getModule())
 | 
			
		||||
                .likeIfPresent(OperateLogV2DO::getType, reqVO.getModule())
 | 
			
		||||
                .inIfPresent(OperateLogV2DO::getUserId, userIds);
 | 
			
		||||
        query.orderByDesc(OperateLogV2DO::getId); // 降序
 | 
			
		||||
        return selectPage(reqVO, query);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    default List<OperateLogV2DO> selectListByModuleAndBizId(String module, Long bizId) {
 | 
			
		||||
        return selectList(new LambdaQueryWrapperX<OperateLogV2DO>()
 | 
			
		||||
                .eq(OperateLogV2DO::getModule, module)
 | 
			
		||||
                .eq(OperateLogV2DO::getBizId, bizId)
 | 
			
		||||
    default PageResult<OperateLogV2DO> selectPage(OperateLogV2PageReqDTO pageReqVO) {
 | 
			
		||||
        return selectPage(pageReqVO, new LambdaQueryWrapperX<OperateLogV2DO>()
 | 
			
		||||
                .eqIfPresent(OperateLogV2DO::getType, pageReqVO.getBizType())
 | 
			
		||||
                .eqIfPresent(OperateLogV2DO::getBizId, pageReqVO.getBizId())
 | 
			
		||||
                .eqIfPresent(OperateLogV2DO::getUserId, pageReqVO.getUserId())
 | 
			
		||||
                .orderByDesc(OperateLogV2DO::getCreateTime));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +0,0 @@
 | 
			
		||||
package cn.iocoder.yudao.module.system.framework.bizlog.config;
 | 
			
		||||
 | 
			
		||||
import com.mzt.logapi.starter.annotation.EnableLogRecord;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
 | 
			
		||||
// TODO @puhui999:挪到 yudao-spring-boot-starter-biz-operatelog 下,搞个 cn.iocoder.yudao.framework.operatelogv2;跑通后,我们直接就删除老的实现了;
 | 
			
		||||
/**
 | 
			
		||||
 * mzt-biz-log 配置类
 | 
			
		||||
 *
 | 
			
		||||
 * @author HUIHUI
 | 
			
		||||
 */
 | 
			
		||||
@Configuration(proxyBeanMethods = false)
 | 
			
		||||
@EnableLogRecord(tenant = "") // 貌似用不上 tenant 这玩意给个空好啦
 | 
			
		||||
public class YudaoOperateLogV2Configuration {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,85 +0,0 @@
 | 
			
		||||
package cn.iocoder.yudao.module.system.framework.bizlog.service;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
 | 
			
		||||
import cn.iocoder.yudao.module.system.service.logger.OperateLogService;
 | 
			
		||||
import cn.iocoder.yudao.module.system.service.logger.bo.OperateLogV2CreateReqBO;
 | 
			
		||||
import com.mzt.logapi.beans.LogRecord;
 | 
			
		||||
import com.mzt.logapi.service.ILogRecordService;
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import jakarta.servlet.http.HttpServletRequest;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
// TODO @puhui999:这个应该搞到 operatelog 组件里哈;
 | 
			
		||||
/**
 | 
			
		||||
 * 操作日志 ILogRecordService 实现类
 | 
			
		||||
 *
 | 
			
		||||
 * 基于 {@link OperateLogService} 实现,记录操作日志
 | 
			
		||||
 *
 | 
			
		||||
 * @author HUIHUI
 | 
			
		||||
 */
 | 
			
		||||
@Slf4j
 | 
			
		||||
@Service
 | 
			
		||||
public class ILogRecordServiceImpl implements ILogRecordService {
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private OperateLogService operateLogService;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void record(LogRecord logRecord) {
 | 
			
		||||
        OperateLogV2CreateReqBO reqBO = new OperateLogV2CreateReqBO();
 | 
			
		||||
        // 补全通用字段
 | 
			
		||||
        reqBO.setTraceId(TracerUtils.getTraceId());
 | 
			
		||||
        // 补充用户信息
 | 
			
		||||
        fillUserFields(reqBO);
 | 
			
		||||
        // 补全模块信息
 | 
			
		||||
        fillModuleFields(reqBO, logRecord);
 | 
			
		||||
        // 补全请求信息
 | 
			
		||||
        fillRequestFields(reqBO);
 | 
			
		||||
        // 异步记录日志
 | 
			
		||||
        operateLogService.createOperateLogV2(reqBO);
 | 
			
		||||
        log.info("操作日志 ===> {}", reqBO);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void fillUserFields(OperateLogV2CreateReqBO reqBO) {
 | 
			
		||||
        reqBO.setUserId(WebFrameworkUtils.getLoginUserId());
 | 
			
		||||
        reqBO.setUserType(WebFrameworkUtils.getLoginUserType());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void fillModuleFields(OperateLogV2CreateReqBO reqBO, LogRecord logRecord) {
 | 
			
		||||
        reqBO.setModule(logRecord.getType()); // 大模块类型如 crm-客户
 | 
			
		||||
        reqBO.setName(logRecord.getSubType());// 操作名称如 转移客户
 | 
			
		||||
        reqBO.setBizId(Long.parseLong(logRecord.getBizNo())); // 操作模块业务编号
 | 
			
		||||
        reqBO.setContent(logRecord.getAction());// 例如说,修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。
 | 
			
		||||
        reqBO.setExtra(logRecord.getExtra()); // 拓展字段,有些复杂的业务,需要记录一些字段 ( JSON 格式 ),例如说,记录订单编号,{ orderId: "1"}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void fillRequestFields(OperateLogV2CreateReqBO reqBO) {
 | 
			
		||||
        // 获得 Request 对象
 | 
			
		||||
        HttpServletRequest request = ServletUtils.getRequest();
 | 
			
		||||
        if (request == null) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        // 补全请求信息
 | 
			
		||||
        reqBO.setRequestMethod(request.getMethod());
 | 
			
		||||
        reqBO.setRequestUrl(request.getRequestURI());
 | 
			
		||||
        reqBO.setUserIp(ServletUtils.getClientIP(request));
 | 
			
		||||
        reqBO.setUserAgent(ServletUtils.getUserAgent(request));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<LogRecord> queryLog(String bizNo, String type) {
 | 
			
		||||
        return Collections.emptyList();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<LogRecord> queryLogByBizNo(String bizNo, String type, String subType) {
 | 
			
		||||
        return Collections.emptyList();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -2,12 +2,11 @@ package cn.iocoder.yudao.module.system.service.logger;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.service.logger.bo.OperateLogV2CreateReqBO;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 操作日志 Service 接口
 | 
			
		||||
@@ -38,16 +37,14 @@ public interface OperateLogService {
 | 
			
		||||
     *
 | 
			
		||||
     * @param createReqBO 创建请求
 | 
			
		||||
     */
 | 
			
		||||
    void createOperateLogV2(OperateLogV2CreateReqBO createReqBO);
 | 
			
		||||
    void createOperateLogV2(OperateLogV2CreateReqDTO createReqBO);
 | 
			
		||||
 | 
			
		||||
    // TODO @puhui999:module 改成 type
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取指定模块的指定数据的操作日志
 | 
			
		||||
     * 获得操作日志分页列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param module 操作模块
 | 
			
		||||
     * @param bizId  操作模块编号
 | 
			
		||||
     * @return 操作日志
 | 
			
		||||
     * @param pageReqVO 分页条件
 | 
			
		||||
     * @return 操作日志分页列表
 | 
			
		||||
     */
 | 
			
		||||
    List<OperateLogV2DO> getOperateLogByModuleAndBizId(String module, Long bizId);
 | 
			
		||||
    PageResult<OperateLogV2DO> getOperateLogPage(OperateLogV2PageReqDTO pageReqVO);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,13 +6,14 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.string.StrUtils;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2CreateReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogV2PageReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogV2DO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogV2Mapper;
 | 
			
		||||
import cn.iocoder.yudao.module.system.service.logger.bo.OperateLogV2CreateReqBO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
@@ -20,7 +21,6 @@ import org.springframework.stereotype.Service;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 | 
			
		||||
import static cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO.JAVA_METHOD_ARGS_MAX_LENGTH;
 | 
			
		||||
@@ -69,14 +69,15 @@ public class OperateLogServiceImpl implements OperateLogService {
 | 
			
		||||
    // ======================= LOG V2 =======================
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void createOperateLogV2(OperateLogV2CreateReqBO createReqBO) {
 | 
			
		||||
    public void createOperateLogV2(OperateLogV2CreateReqDTO createReqBO) {
 | 
			
		||||
        OperateLogV2DO log = BeanUtils.toBean(createReqBO, OperateLogV2DO.class);
 | 
			
		||||
        operateLogV2Mapper.insert(log);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<OperateLogV2DO> getOperateLogByModuleAndBizId(String module, Long bizId) {
 | 
			
		||||
        return operateLogV2Mapper.selectListByModuleAndBizId(module, bizId);
 | 
			
		||||
    public PageResult<OperateLogV2DO> getOperateLogPage(OperateLogV2PageReqDTO pageReqVO) {
 | 
			
		||||
        return operateLogV2Mapper.selectPage(pageReqVO);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,83 +0,0 @@
 | 
			
		||||
package cn.iocoder.yudao.module.system.service.logger.bo;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
 | 
			
		||||
import jakarta.validation.constraints.NotEmpty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 系统操作日志 Create Req BO
 | 
			
		||||
 *
 | 
			
		||||
 * @author HUIHUI
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class OperateLogV2CreateReqBO {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 链路追踪编号
 | 
			
		||||
     *
 | 
			
		||||
     * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。
 | 
			
		||||
     */
 | 
			
		||||
    private String traceId;
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户编号
 | 
			
		||||
     *
 | 
			
		||||
     * 关联 MemberUserDO 的 id 属性,或者 AdminUserDO 的 id 属性
 | 
			
		||||
     */
 | 
			
		||||
    @NotEmpty(message = "用户编号不能为空")
 | 
			
		||||
    private Long userId;
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户类型
 | 
			
		||||
     *
 | 
			
		||||
     * 关联 {@link  UserTypeEnum}
 | 
			
		||||
     */
 | 
			
		||||
    @NotEmpty(message = "用户类型不能为空")
 | 
			
		||||
    private Integer userType;
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作模块
 | 
			
		||||
     */
 | 
			
		||||
    @NotEmpty(message = "操作模块不能为空")
 | 
			
		||||
    private String module;
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作名
 | 
			
		||||
     */
 | 
			
		||||
    @NotEmpty(message = "操作名不能为空")
 | 
			
		||||
    private String name;
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作模块业务编号
 | 
			
		||||
     */
 | 
			
		||||
    @NotEmpty(message = "操作模块业务编号不能为空")
 | 
			
		||||
    private Long bizId;
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作内容,记录整个操作的明细
 | 
			
		||||
     * 例如说,修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。
 | 
			
		||||
     */
 | 
			
		||||
    @NotEmpty(message = "操作内容不能为空")
 | 
			
		||||
    private String content;
 | 
			
		||||
    /**
 | 
			
		||||
     * 拓展字段,有些复杂的业务,需要记录一些字段 ( JSON 格式 )
 | 
			
		||||
     * 例如说,记录订单编号,{ orderId: "1"}
 | 
			
		||||
     */
 | 
			
		||||
    private String extra;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 请求方法名
 | 
			
		||||
     */
 | 
			
		||||
    @NotEmpty(message = "请求方法名不能为空")
 | 
			
		||||
    private String requestMethod;
 | 
			
		||||
    /**
 | 
			
		||||
     * 请求地址
 | 
			
		||||
     */
 | 
			
		||||
    @NotEmpty(message = "请求地址不能为空")
 | 
			
		||||
    private String requestUrl;
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户 IP
 | 
			
		||||
     */
 | 
			
		||||
    @NotEmpty(message = "用户 IP 不能为空")
 | 
			
		||||
    private String userIp;
 | 
			
		||||
    /**
 | 
			
		||||
     * 浏览器 UA
 | 
			
		||||
     */
 | 
			
		||||
    @NotEmpty(message = "浏览器 UA 不能为空")
 | 
			
		||||
    private String userAgent;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user