ソースを参照

fix(risk-personnelChange): 修复新增人员变动提交报'未知异常'

根因:
- DB 表 risk_personnel_change 缺少 leave_date 列,但 Do 实体有 leaveDate 字段
  且无 @TableField 注解,MyBatis Plus 按驼峰映射导致 INSERT 报 Unknown column

修复:
- Do.leaveDate 加 @TableField('leave_date') 显式映射
- Service.insertByBo 加 changeCode 自动生成(PC+ts+3位随机),保证 uk_change_code 不冲突
- Service.insertByBo 加 changeDate 前端未传时取当前日期默认值
- Controller.add 移除强制 setAuditStatus(null),让前端/DB DEFAULT 自然生效
yangjingjing 3 日 前
コミット
77b990d0c3

+ 1 - 4
ruoyi-modules/ruoyi-risk/src/main/java/org/dromara/risk/controller/RiskPersonnelChangeController.java

@@ -1,7 +1,6 @@
 package org.dromara.risk.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.hutool.core.util.ObjectUtil;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.NotEmpty;
 import jakarta.validation.constraints.NotNull;
@@ -66,9 +65,7 @@ public class RiskPersonnelChangeController extends BaseController {
     @RepeatSubmit()
     @PostMapping
     public R<Void> add(@Validated(AddGroup.class) @RequestBody RiskPersonnelChangeBo bo) {
-        if (ObjectUtil.isNull(bo.getId())) {
-            bo.setAuditStatus(null);
-        }
+        // 编号由 Service 自动生成,审核状态由前端表单传入(默认'待审核')
         return toAjax(personnelChangeService.insertByBo(bo));
     }
 

+ 1 - 0
ruoyi-modules/ruoyi-risk/src/main/java/org/dromara/risk/domain/RiskPersonnelChange.java

@@ -63,6 +63,7 @@ public class RiskPersonnelChange extends TenantEntity {
     /**
      * 离职日期
      */
+    @TableField(value = "leave_date")
     private Date leaveDate;
 
     /**

+ 32 - 0
ruoyi-modules/ruoyi-risk/src/main/java/org/dromara/risk/service/impl/RiskPersonnelChangeServiceImpl.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,6 +18,8 @@ import org.dromara.risk.mapper.RiskPersonnelChangeMapper;
 import org.dromara.risk.service.IRiskPersonnelChangeService;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -88,12 +91,41 @@ public class RiskPersonnelChangeServiceImpl implements IRiskPersonnelChangeServi
      */
     @Override
     public int insertByBo(RiskPersonnelChangeBo bo) {
+        // 变动编号:前端未传时系统自动生成,确保 UNIQUE KEY uk_change_code 不冲突
+        if (StringUtils.isBlank(bo.getChangeCode())) {
+            bo.setChangeCode(generateChangeCode());
+        }
+        // 变动日期前端不传时取当前日期
+        if (bo.getChangeDate() == null) {
+            bo.setChangeDate(new Date());
+        }
         RiskPersonnelChange add = MapstructUtils.convert(bo, RiskPersonnelChange.class);
         int row = baseMapper.insert(add);
         bo.setId(add.getId());
         return row;
     }
 
+    /**
+     * 生成人员变动编号:PC + yyyyMMddHHmmss + 3位随机数
+     * 冲突自动重试 5 次,极端情况 UUID 兜底
+     */
+    private String generateChangeCode() {
+        String prefix = "PC";
+        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.<RiskPersonnelChange>lambdaQuery()
+                .eq(RiskPersonnelChange::getChangeCode, code));
+            if (exists == null || exists == 0) {
+                return code;
+            }
+        }
+        return prefix + ts + IdUtil.fastSimpleUUID().substring(0, 4).toUpperCase();
+    }
+
     /**
      * 修改人员变动
      */