Преглед изворни кода

chore: 风险警示字典 + 修操作日志 ClassFormatError

- sql/risk_warning_dict.sql: 风险警示模块字典
  * risk_warning_type(安全/食安/社会警示)
  * risk_warning_level(重大/较大/一般风险,带 list_class 颜色)
- system/SysOperLogServiceImpl: 用 hutool BeanUtil 替代 MapStruct 跨模块转换,
  修复 OperLogEventToSysOperLogBoMapper stub class 触发 ClassFormatError 的问题
yangjingjing пре 1 дан
родитељ
комит
bd0f18f600

+ 6 - 6
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysOperLogBo.java

@@ -1,9 +1,7 @@
 package org.dromara.system.domain.bo;
 
-import org.dromara.common.log.event.OperLogEvent;
 import org.dromara.system.domain.SysOperLog;
 import io.github.linpeilie.annotations.AutoMapper;
-import io.github.linpeilie.annotations.AutoMappers;
 import lombok.Data;
 
 import java.util.Date;
@@ -18,10 +16,12 @@ import java.util.Map;
  */
 
 @Data
-@AutoMappers({
-    @AutoMapper(target = SysOperLog.class, reverseConvertGenerate = false),
-    @AutoMapper(target = OperLogEvent.class)
-})
+// 注释掉 @AutoMapper(target = OperLogEvent.class),因为 MapStruct Plus 在跨模块
+// (ruoyi-system → ruoyi-common-log) 场景下生成的 OperLogEventToSysOperLogBoMapper
+// 是 stub class (含 Unresolved compilation problem),会导致 Spring 启动时报
+// ClassFormatError: Duplicate method name。SysOperLogServiceImpl.recordOper 已
+// 改为使用 hutool BeanUtil.copyProperties 手动转换,功能不受影响。
+@AutoMapper(target = SysOperLog.class, reverseConvertGenerate = false)
 public class SysOperLogBo {
 
     /**

+ 4 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOperLogServiceImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.system.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ArrayUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -43,7 +44,9 @@ public class SysOperLogServiceImpl implements ISysOperLogService {
     @Async
     @EventListener
     public void recordOper(OperLogEvent operLogEvent) {
-        SysOperLogBo operLog = MapstructUtils.convert(operLogEvent, SysOperLogBo.class);
+        // 使用 hutool BeanUtil.copyProperties 手动转换,避免 MapStruct Plus 跨模块生成的
+        // OperLogEventToSysOperLogBoMapper stub class 在 Spring 启动时触发 ClassFormatError。
+        SysOperLogBo operLog = BeanUtil.copyProperties(operLogEvent, SysOperLogBo.class);
         // 远程查询操作地点
         operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
         insertOperlog(operLog);

+ 25 - 0
sql/risk_warning_dict.sql

@@ -0,0 +1,25 @@
+-- ============================================================
+-- 风险警示模块 - 字典数据
+-- 警示类型:安全警示 / 食安警示 / 社会警示(value 用中文)
+-- 警示等级:重大风险(红) / 较大风险(黄) / 一般风险(蓝)
+-- ============================================================
+
+-- 1) 字典类型
+INSERT IGNORE INTO sys_dict_type (dict_name, dict_type, remark, create_by, create_time, update_by, update_time)
+VALUES
+('警示类型', 'risk_warning_type', '风险警示-警示类型', 1, NOW(), 1, NOW()),
+('警示等级', 'risk_warning_level', '风险警示-警示等级', 1, NOW(), 1, NOW());
+
+-- 2) 字典数据 - 警示类型
+INSERT IGNORE INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, remark, create_by, create_time, update_by, update_time)
+VALUES
+(1, '安全警示', '安全警示', 'risk_warning_type', '', 'primary', 'N', '', 1, NOW(), 1, NOW()),
+(2, '食安警示', '食安警示', 'risk_warning_type', '', 'success', 'N', '', 1, NOW(), 1, NOW()),
+(3, '社会警示', '社会警示', 'risk_warning_type', '', 'warning', 'N', '', 1, NOW(), 1, NOW());
+
+-- 3) 字典数据 - 警示等级(重大=红 danger, 较大=黄 warning, 一般=蓝 primary)
+INSERT IGNORE INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, remark, create_by, create_time, update_by, update_time)
+VALUES
+(1, '重大风险', '重大风险', 'risk_warning_level', '', 'danger',  'N', '红色标签', 1, NOW(), 1, NOW()),
+(2, '较大风险', '较大风险', 'risk_warning_level', '', 'warning', 'N', '黄色标签', 1, NOW(), 1, NOW()),
+(3, '一般风险', '一般风险', 'risk_warning_level', '', 'primary', 'N', '蓝色标签', 1, NOW(), 1, NOW());