fix: 优化oraclesql不适用问题

This commit is contained in:
tangwei 2026-03-27 16:33:28 +08:00
parent 30c469d7aa
commit 0cef3936e2
15 changed files with 126 additions and 67 deletions

View File

@ -90,9 +90,11 @@ public class SysMenuController {
@PostMapping("/permissionAssignment") @PostMapping("/permissionAssignment")
@Operation(summary = "获取分配权限(不含按钮)") @Operation(summary = "获取分配权限(不含按钮)")
@ResponseBody @ResponseBody
public List<Map<String, Object>> permissionAssignment(String roleId) { public List<Map<String, Object>> permissionAssignment(String code, String roleId) {
if (StrUtil.isBlank(code)) {
return sysMenuService.permissionAssignment(roleId); code = "1";
}
return sysMenuService.permissionAssignment(code,roleId);
} }
/********************************** /**********************************

View File

@ -115,6 +115,9 @@ public class SysOrganizationController {
if (StrUtil.isEmpty(sysOrganization.getIsvaild())) { if (StrUtil.isEmpty(sysOrganization.getIsvaild())) {
sysOrganization.setIsvaild("1"); sysOrganization.setIsvaild("1");
} }
if("".equals(sysOrganization.getId())){
sysOrganization.setId(null);
}
//填写 当前用户名称 //填写 当前用户名称
sysOrganization.setLastmodifier(userService.getUsername()); sysOrganization.setLastmodifier(userService.getUsername());
//填写 当前日期 //填写 当前日期

View File

@ -64,7 +64,7 @@ public class UserController {
public ResponseResult queryUsers(String orgid, public ResponseResult queryUsers(String orgid,
String username, Page<SysUser> page) { String username, Page<SysUser> page) {
Page<Map<String, Object>> mapPage = userService.queryUsers(orgid, Page<SysUser> mapPage = userService.queryUsers(orgid,
username, page); username, page);
return ResponseResult.successData(mapPage); return ResponseResult.successData(mapPage);
} }

View File

@ -41,6 +41,7 @@ public class SysRole implements Serializable {
/** /**
* 1-超级管理员 2-单位管理员 3-普通用户 * 1-超级管理员 2-单位管理员 3-普通用户
*/ */
@TableField("\"LEVEL\"")
private String level; private String level;
/** /**

View File

@ -6,6 +6,7 @@ import lombok.EqualsAndHashCode;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.List;
/** /**
* <p> * <p>
@ -113,4 +114,7 @@ public class SysUser implements Serializable {
* 备用3 * 备用3
*/ */
private String custom3; private String custom3;
@TableField(exist = false)
List<SysRole> roles;
} }

View File

@ -81,7 +81,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
************************************/ ************************************/
boolean delInRoleUsersByUserid(@Param("userid") String userid,@Param("roleids")String[] roleids); boolean delInRoleUsersByUserid(@Param("userid") String userid,@Param("roleids")String[] roleids);
Page<Map<String, Object>> queryUsers(String orgid, Page<SysUser> queryUsers(String orgid,
String username, String username,
Page<SysUser> page); Page<SysUser> page);

View File

@ -95,7 +95,7 @@ public interface ISysMenuService extends IService<SysMenu> {
* isdisplay 是否显示 * isdisplay 是否显示
* 返回值说明: 菜单结构树集合 * 返回值说明: 菜单结构树集合
***********************************/ ***********************************/
List<Map<String, Object>> permissionAssignment(String roleId); List<Map<String, Object>> permissionAssignment(String code,String roleId);
String uploadIcon(MultipartFile icon) throws FileNotFoundException; String uploadIcon(MultipartFile icon) throws FileNotFoundException;
} }

View File

@ -128,7 +128,7 @@ public interface IUserService extends IService<SysUser> {
boolean addUserRoles(String roleid, String userid); boolean addUserRoles(String roleid, String userid);
//Page<SysUser> queryUsers(String orgid, String username, Page<SysUser> page); //Page<SysUser> queryUsers(String orgid, String username, Page<SysUser> page);
Page<Map<String,Object>> queryUsers(String orgid, String username, Page<SysUser> page); Page<SysUser> queryUsers(String orgid, String username, Page<SysUser> page);
/*********************************** /***********************************
* 用途说明根据ID批量删除用户 * 用途说明根据ID批量删除用户

View File

@ -451,18 +451,19 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* 返回值说明: 菜单结构树集合 * 返回值说明: 菜单结构树集合
***********************************/ ***********************************/
@Override @Override
public List<Map<String, Object>> permissionAssignment(String roleId) { public List<Map<String, Object>> permissionAssignment(String code,String roleId) {
String code = sysMenuMapper.getSystemCodeById(roleId); // String code = sysMenuMapper.getSystemCodeById(roleId);
if (code == null) { // if (code == null) {
code = "1"; // code = "1";
} // }
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysMenu::getSystemcode, code).select(SysMenu::getId, queryWrapper.eq(SysMenu::getSystemcode, code).select(SysMenu::getId,
SysMenu::getParentid, SysMenu::getName).orderByAsc SysMenu::getParentid, SysMenu::getName).orderByAsc
(SysMenu::getOrderno); (SysMenu::getOrderno);
List<Map<String, Object>> listAll = List<Map<String, Object>> mapList =
sysMenuMapper.selectMaps(queryWrapper); sysMenuMapper.selectMaps(queryWrapper);
List<Map<String, Object>> listAll = ObjectConverterUtil.convertMapFieldsToEntityFormat(SysMenu.class, mapList);
List<String> listRole = List<String> listRole =
sysMenuMapper.selectMenuByRoleId(roleId); sysMenuMapper.selectMenuByRoleId(roleId);
for (Map<String, Object> map : listAll) { for (Map<String, Object> map : listAll) {

View File

@ -165,10 +165,12 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
queryWrapper.eq("parentid", "0"); queryWrapper.eq("parentid", "0");
} }
List<Object> max = this.listObjs(queryWrapper); List<Object> max = this.listObjs(queryWrapper);
//判断查询是否存在 存在转换成int类型并给codeMax替换值 //判断查询是否存在 存在转换成 int 类型并给 codeMax 替换值
if (max.size() > 0) { if (!max.isEmpty() && max.getFirst() != null) {
codeMax = String maxValue = max.getFirst().toString();
Integer.parseInt(max.get(0).toString().substring(max.get(0).toString().length() - 2)); if (maxValue.length() >= 2) {
codeMax = Integer.parseInt(maxValue.substring(maxValue.length() - 2));
}
} }
//2位数字编号 //2位数字编号
DecimalFormat df = new DecimalFormat("00"); DecimalFormat df = new DecimalFormat("00");

View File

@ -49,8 +49,14 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
QueryWrapper<SysRole> queryWrapper = new QueryWrapper<>(); QueryWrapper<SysRole> queryWrapper = new QueryWrapper<>();
List<Object> max = this.listObjs(queryWrapper.select("MAX(rolecode) " + List<Object> max = this.listObjs(queryWrapper.select("MAX(rolecode) " +
"rolecode"));// 查询最大的编号 "rolecode"));// 查询最大的编号
if (max.size() > 0) { // 存在转换成 int 类型并给 codeMax 替换值
codeMax = Integer.parseInt(max.get(0).toString());//判断查询是否存在 if (!max.isEmpty() && max.getFirst() != null) {
try {
codeMax = Integer.parseInt(max.getFirst().toString());
} catch (NumberFormatException e) {
// 如果转换失败保持默认值 0
e.printStackTrace();
}
} }
// 存在转换成int类型并给codeMax替换值 // 存在转换成int类型并给codeMax替换值
String code = df.format(codeMax + 1); // 最大编号累加 String code = df.format(codeMax + 1); // 最大编号累加

View File

@ -27,6 +27,7 @@ import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -224,46 +225,79 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
*roleids 角色id *roleids 角色id
* 返回值说明: 是否更新成功 * 返回值说明: 是否更新成功
************************************/ ************************************/
@Override // ... existing code ...
public Map updateById(SysUser sysUser, String roleids) {
//返回信息
Map<String, String> result = new HashMap<>();
//获取当前用户 最近修改者替换
sysUser.setLastmodifier(getUsername());
//获取当前时间 最近修改日期替换
sysUser.setLastmodifydate(new Timestamp(System.currentTimeMillis()));
//根据修改
boolean ok = this.updateById(sysUser);
if (ok) {
if (StrUtil.isNotEmpty(roleids)) {
String[] roles = roleids.split(",");
List<String> list = sysUserMapper.getRoleid(sysUser.getId());
for (String role : roles) {
if (!list.contains(role)) {
//系统生成id
String id = IdUtil.fastSimpleUUID();
//新增sys_role_users表数据
ok = ok && sysUserMapper.addUserRoles(id, role,
sysUser.getId());
}
}
//删除不包含的角色
sysUserMapper.delInRoleUsersByUserid(sysUser.getId(), roles);
} else { @Override
//根据用户id 删除该用户角色关联 @Transactional(rollbackFor = Exception.class)
ok = ok && sysUserMapper.delRoleUsersByUserid(sysUser.getId()); public Map updateById(SysUser sysUser, String roleids) {
} Map<String, String> result = new HashMap<>();
result.put("status", "sucess");
result.put("msg", "用户信息修改成功!"); try {
} else { // 设置修改信息
String currentUsername = getUsername();
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
sysUser.setLastmodifier(currentUsername);
sysUser.setLastmodifydate(currentTime);
// 更新用户信息
boolean ok = this.updateById(sysUser);
if (!ok) {
result.put("status", "error"); result.put("status", "error");
result.put("msg", "用户信息修改失败!"); result.put("msg", "用户信息修改失败!");
return result;
}
// 处理角色分配
String userId = sysUser.getId();
if (StrUtil.isNotEmpty(roleids)) {
handleUserRoles(userId, roleids);
} else {
// 清空所有角色
sysUserMapper.delRoleUsersByUserid(userId);
}
result.put("status", "sucess");
result.put("msg", "用户信息修改成功!");
} catch (Exception e) {
log.error("更新用户信息失败", e);
result.put("status", "error");
result.put("msg", "操作失败:" + e.getMessage());
throw e; // 抛出异常触发事务回滚
} }
return result; return result;
} }
/**
* 处理用户角色分配增量更新
* @param userId 用户 ID
* @param roleIds 角色 ID 字符串逗号分隔
*/
private void handleUserRoles(String userId, String roleIds) {
// 获取用户当前角色
List<String> currentRoles = sysUserMapper.getRoleid(userId);
Set<String> currentRoleSet = new HashSet<>(currentRoles != null ? currentRoles : Collections.emptyList());
// 解析新角色列表
String[] newRoles = roleIds.split(",");
Set<String> newRoleSet = new HashSet<>(Arrays.asList(newRoles));
// 需要新增的角色新角色 - 当前角色
for (String roleId : newRoles) {
if (!currentRoleSet.contains(roleId)) {
String id = IdUtil.fastSimpleUUID();
sysUserMapper.addUserRoles(id, roleId, userId);
}
}
// 需要删除的角色当前角色 - 新角色
sysUserMapper.delInRoleUsersByUserid(userId, newRoles);
}
// ... existing code ...
@Override @Override
public Map getOneById(String id) { public Map getOneById(String id) {
QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>(); QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
@ -476,20 +510,16 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
}*/ }*/
@Override @Override
public Page<Map<String, Object>> queryUsers(String orgid, public Page<SysUser> queryUsers(String orgid,
String username, String username,
Page<SysUser> page) { Page<SysUser> page) {
Page<Map<String, Object>> mapPage = sysUserMapper.queryUsers(orgid, Page<SysUser> mapPage = sysUserMapper.queryUsers(orgid,
username, page); username, page);
List<Map<String, Object>> list = new ArrayList<>(); ;mapPage.getRecords().forEach(record -> {
List<Map<String, Object>> records = mapPage.getRecords(); String id = record.getId();
for (Map<String, Object> record : records) {
String id = (String) record.get("id");
List<SysRole> sysRoles = sysRoleMapper.getRoleByUserId(id); List<SysRole> sysRoles = sysRoleMapper.getRoleByUserId(id);
record.put("roles", sysRoles); record.setRoles(sysRoles);
list.add(record); });
}
mapPage.setRecords(list);
return mapPage; return mapPage;
} }

View File

@ -33,7 +33,7 @@
DISTINCT DISTINCT
m.id, m.id,
m.parentid, m.parentid,
m.`name`, m.name,
m.opturl, m.opturl,
m.icon, m.icon,
m.orderno, m.orderno,

View File

@ -91,7 +91,15 @@
<!--根据用户id获取角色信息--> <!--根据用户id获取角色信息-->
<select id="getRoleByUserId" <select id="getRoleByUserId"
resultType="com.yfd.platform.system.domain.SysRole"> resultType="com.yfd.platform.system.domain.SysRole">
SELECT r.id,r.rolename,r.orgscope FROM sys_role_users ru INNER JOIN sys_role r ON ru.roleid =r.id WHERE ru.userid =#{id} SELECT
r.id,
r.rolename,
r.orgscope
FROM
sys_role_users ru
INNER JOIN sys_role r ON ru.roleid = r.id
WHERE
ru.userid =#{id}
</select> </select>
<!--根据角色id获取用户id--> <!--根据角色id获取用户id-->

View File

@ -29,7 +29,7 @@
<!--用户分配角色 系统角色用户对照新增数据--> <!--用户分配角色 系统角色用户对照新增数据-->
<insert id="addUserRoles"> <insert id="addUserRoles">
insert into sys_role_users value (#{id},#{roleid},#{userid}) insert into sys_role_users values (#{id},#{roleid},#{userid})
</insert> </insert>
<!--根据用户id 和角色id 查询 系统角色用户对照表--> <!--根据用户id 和角色id 查询 系统角色用户对照表-->
@ -47,11 +47,13 @@
select roleid from sys_role_users where userid=#{userid} select roleid from sys_role_users where userid=#{userid}
</select> </select>
<!--根据用户表id查询角色表最大级别--> <!--根据用户表 id 查询角色表最大级别-->
<select id="getMaxLevel" resultType="String"> <select id="getMaxLevel" resultType="String">
select min(level) from sys_role where id in (select roleid from sys_role_users where userid=#{userid}) SELECT MIN(r."LEVEL")
FROM sys_role r
WHERE r.id IN ( SELECT roleid FROM sys_role_users WHERE userid = #{userId} )
</select> </select>
<select id="queryUsers" resultType="java.util.Map"> <select id="queryUsers" resultType="com.yfd.platform.system.domain.SysUser">
SELECT DISTINCT SELECT DISTINCT
u.id, u.id,
u.usertype, u.usertype,
@ -62,7 +64,7 @@
u.phone, u.phone,
u.avatar, u.avatar,
u.orgid, u.orgid,
u.`status`, u.status,
u.lastmodifier, u.lastmodifier,
u.lastmodifydate u.lastmodifydate
FROM FROM
@ -73,7 +75,7 @@
and u.orgid = #{orgid} and u.orgid = #{orgid}
</if> </if>
<if test="username != null"> <if test="username != null">
and u.username like concat('%', #{username},'%') and u.username LIKE '%' || #{username} || '%'
</if> </if>
ORDER BY u.lastmodifydate DESC ORDER BY u.lastmodifydate DESC
</select> </select>