liujie
昨天 c983a0a398504697a777ffae48e59961b5ee2bd7
hugray-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -233,6 +233,34 @@
    @Transactional(rollbackFor = Exception.class)
    public int insertRole(SysRole role)
    {
        // 角色表单只收「角色名称 + 备注 + 菜单权限」,下面这几项都不由界面提供。
        // 它们在 sys_role 里都是 NOT NULL 且无默认值的列,而 insertRole 的 <if> 守卫会直接跳过空值列
        // —— 库里拿不到值就会报 1364 Field doesn't have a default value,
        // 所以「后端给默认值」不是可选项,是插入能成功的前提。
        if (StringUtils.isEmpty(role.getRoleKey()))
        {
            // 界面已不展示「权限字符」,它的唯一用途是给鉴权链路一个稳定的角色标识。
            // 用毫秒时间戳:插入时即定,不需要插入后按自增主键回填。
            role.setRoleKey("role_" + System.currentTimeMillis());
        }
        if (role.getRoleSort() == null)
        {
            // 列表是按 role_sort 排的,界面又不给排序输入框,就把新角色排到末尾
            role.setRoleSort(roleMapper.selectMaxRoleSort() + 1);
        }
        if (StringUtils.isEmpty(role.getStatus()))
        {
            role.setStatus(UserConstants.ROLE_NORMAL);
        }
        if (StringUtils.isEmpty(role.getDataScope()))
        {
            // 界面没有数据权限配置,默认「全部数据权限」,与建表默认值一致
            role.setDataScope("1");
        }
        // 这两列是 primitive boolean,MyBatis 的 <if test="... != null"> 恒真,
        // 会把 false(0) 写进去、覆盖掉建表的 DEFAULT '1';显式设回 true,与既有角色行保持一致
        role.setMenuCheckStrictly(true);
        role.setDeptCheckStrictly(true);
        // 新增角色信息
        roleMapper.insertRole(role);
        return insertRoleMenu(role);