liyong
9 天以前 b9e71660ca35e947ccac8079d3033b88ece5190e
fix(approve): 修复审批流程中空节点ID列表导致的异常

- 在ApproveProcessServiceImpl中添加对空节点ID列表的检查
- 为SysUserMapper中的selectRegistrantIds方法添加@Param注解
- 优化SysUserMapper.xml中SQL查询条件的空值判断逻辑
- 改进userIds参数为空时的SQL查询安全性
已修改3个文件
29 ■■■■ 文件已修改
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/system/SysUserMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -72,6 +72,7 @@
        List<Long> nodeIds = list.stream()
                .map(ApproveProcessConfigNodeVo::getApproverId)
                .collect(Collectors.toList());
        if (nodeIds.isEmpty()) throw new RuntimeException("添加审批节点和人员");
        List<SysUser> sysUsers = sysUserMapper.selectUserByIds(nodeIds);
        if (CollectionUtils.isEmpty(sysUsers)) throw new RuntimeException("审核用户不存在");
        if (sysDept == null) throw new RuntimeException("部门不存在");
src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
@@ -1,15 +1,11 @@
package com.ruoyi.project.system.mapper;
import java.util.ArrayList;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.collaborativeApproval.pojo.MeetingMinutes;
import com.ruoyi.project.system.domain.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.project.system.domain.SysUser;
import org.springframework.beans.PropertyValues;
import java.util.List;
/**
 * 用户表 数据层
@@ -149,7 +145,7 @@
     */
    public SysUser checkEmailUnique(String email);
    List<SysUser> selectRegistrantIds(List<Long> registrantIds);
    List<SysUser> selectRegistrantIds(@Param("registrantIds") List<Long> registrantIds);
    List<SysUser> selectUsersByIds(@Param("userIds") List<Long> userIds);
src/main/resources/mapper/system/SysUserMapper.xml
@@ -161,21 +161,25 @@
    </select>
    <select id="selectUserByIds" resultType="com.ruoyi.project.system.domain.SysUser">
        <include refid="selectUserVo"/>
        where u.user_id in <foreach collection="userIds" item="item" open="(" separator="," close=")">
             #{item}
        </foreach>
        and u.del_flag = '0'
        <where>
            u.del_flag = '0'
            <if test="userIds != null and userIds.size() > 0">
            and    u.user_id in <foreach collection="userIds" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
            </if>
        </where>
    </select>
    <select id="selectRegistrantIds" resultType="com.ruoyi.project.system.domain.SysUser">
        SELECT user_id, nick_name FROM sys_user
        <where>
            <if test="list != null and list.size() > 0">
            <if test="registrantIds != null and registrantIds.size() > 0">
                user_id IN
                <foreach item="id" collection="list" open="(" separator="," close=")">
                <foreach item="id" collection="registrantIds" open="(" separator="," close=")">
                    #{id}
                </foreach>
            </if>
            <if test="list == null or list.size() == 0">
            <if test="registrantIds == null or registrantIds.size() == 0">
                1=0  <!-- 空列表时返回空结果 -->
            </if>
        </where>