Ver Fonte

fix: 更新风控警告服务实现

yangjingjing há 1 dia atrás
pai
commit
ab4b5bb40c

+ 29 - 3
ruoyi-modules/ruoyi-risk/src/main/java/org/dromara/risk/service/impl/RiskWarningServiceImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.risk.service.impl;
 
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -17,13 +18,13 @@ import org.dromara.risk.mapper.RiskWarningMapper;
 import org.dromara.risk.service.IRiskWarningService;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
 /**
  * 风险警示 业务层实现
- *
- * @author ruoyi
  */
 @Slf4j
 @RequiredArgsConstructor
@@ -89,9 +90,13 @@ public class RiskWarningServiceImpl implements IRiskWarningService {
      */
     @Override
     public int insertByBo(RiskWarningBo bo) {
+        // 警示编号:前端未传时系统自动生成,确保 UNIQUE KEY uk_warning_code 不冲突
+        if (StringUtils.isBlank(bo.getWarningCode())) {
+            bo.setWarningCode(generateWarningCode());
+        }
         // 发布时间前端不传时取当前时间
         if (bo.getReleaseTime() == null) {
-            bo.setReleaseTime(new java.util.Date());
+            bo.setReleaseTime(new Date());
         }
         RiskWarning add = MapstructUtils.convert(bo, RiskWarning.class);
         int row = baseMapper.insert(add);
@@ -99,6 +104,27 @@ public class RiskWarningServiceImpl implements IRiskWarningService {
         return row;
     }
 
+    /**
+     * 生成警示编号:W + yyyyMMddHHmmss + 3位随机数
+     * 冲突自动重试 5 次,极端情况 UUID 兜底,保证 UNIQUE KEY uk_warning_code 不冲突
+     */
+    private String generateWarningCode() {
+        String prefix = "W";
+        String ts = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
+        java.util.concurrent.ThreadLocalRandom random = java.util.concurrent.ThreadLocalRandom.current();
+        for (int i = 0; i < 5; i++) {
+            String suffix = StringUtils.leftPad(
+                Integer.toString(random.nextInt(1000)), 3, '0');
+            String code = prefix + ts + suffix;
+            Long exists = baseMapper.selectCount(Wrappers.<RiskWarning>lambdaQuery()
+                .eq(RiskWarning::getWarningCode, code));
+            if (exists == null || exists == 0) {
+                return code;
+            }
+        }
+        return prefix + ts + IdUtil.fastSimpleUUID().substring(0, 4).toUpperCase();
+    }
+
     /**
      * 修改风险警示
      */