gaoluyang
2 天以前 feedd62ec46b9faada80505387526acf914cf4c5
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/operatelog/core/service/LogRecordServiceImpl.java
@@ -60,11 +60,30 @@
    public static void fillModuleFields(OperateLogCreateReqDTO reqDTO, LogRecord logRecord) {
        reqDTO.setType(logRecord.getType()); // 大模块类型,例如:CRM 客户
        reqDTO.setSubType(logRecord.getSubType());// 操作名称,例如:转移客户
        reqDTO.setBizId(Long.parseLong(logRecord.getBizNo())); // 业务编号,例如:客户编号
        reqDTO.setBizId(parseBizId(logRecord.getBizNo())); // 业务编号,例如:客户编号
        reqDTO.setAction(logRecord.getAction());// 操作内容,例如:修改编号为 1 的用户信息,将性别从男改成女,将姓名从超级管理员改成源码。
        reqDTO.setExtra(logRecord.getExtra()); // 拓展字段,有些复杂的业务,需要记录一些字段 ( JSON 格式 ),例如说,记录订单编号,{ orderId: "1"}
    }
    /**
     * 解析业务编号。批量导入等场景没有单一业务编号(注解的 bizNo 没填或填了非数字),
     * 这里用 0 兜底——不能让 parseLong 抛异常,否则 {@link #record} 的 catch 会把整条日志静默吞掉
     *
     * @param bizNo 业务编号字符串
     * @return 业务编号,解析失败时为 0
     */
    private static long parseBizId(String bizNo) {
        if (bizNo == null || bizNo.isBlank()) {
            return 0L;
        }
        try {
            return Long.parseLong(bizNo.trim());
        } catch (NumberFormatException ex) {
            log.warn("[parseBizId][业务编号({}) 不是数字,用 0 兜底]", bizNo);
            return 0L;
        }
    }
    private static void fillRequestFields(OperateLogCreateReqDTO reqDTO) {
        // 获得 Request 对象
        HttpServletRequest request = ServletUtils.getRequest();