diff --git a/backend/pom.xml b/backend/pom.xml index 7523853..daccb25 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -173,6 +173,14 @@ runtime + + + com.oracle.database.nls + orai18n + 21.9.0.0 + runtime + + org.xerial diff --git a/backend/src/main/java/com/yfd/platform/config/GlobalExceptionHandler.java b/backend/src/main/java/com/yfd/platform/config/GlobalExceptionHandler.java index d9c7d7a..d241883 100644 --- a/backend/src/main/java/com/yfd/platform/config/GlobalExceptionHandler.java +++ b/backend/src/main/java/com/yfd/platform/config/GlobalExceptionHandler.java @@ -18,6 +18,7 @@ public class GlobalExceptionHandler { @ExceptionHandler(value = Throwable.class) public ResponseResult handleException(Throwable e) { log.error("message:{}", e.getMessage()); + e.printStackTrace(); return ResponseResult.error(e.getMessage()); } diff --git a/backend/src/main/java/com/yfd/platform/system/domain/SysLog.java b/backend/src/main/java/com/yfd/platform/system/domain/SysLog.java index 1818365..a359769 100644 --- a/backend/src/main/java/com/yfd/platform/system/domain/SysLog.java +++ b/backend/src/main/java/com/yfd/platform/system/domain/SysLog.java @@ -31,8 +31,8 @@ public class SysLog implements Serializable { /** * ID */ - @TableId(value = "ID", type = IdType.AUTO) - private Long id; + @TableId(value = "ID", type = IdType.ASSIGN_UUID) + private String id; /** * 用户账号 diff --git a/backend/src/main/java/com/yfd/platform/system/mapper/SysMenuMapper.java b/backend/src/main/java/com/yfd/platform/system/mapper/SysMenuMapper.java index f57b35e..061feeb 100644 --- a/backend/src/main/java/com/yfd/platform/system/mapper/SysMenuMapper.java +++ b/backend/src/main/java/com/yfd/platform/system/mapper/SysMenuMapper.java @@ -41,7 +41,7 @@ public interface SysMenuMapper extends BaseMapper { List selectPermsByUserId(String userId); //List selectMenuByUserId(String userId); - List> selectMenuByUserId(String userId); + List selectMenuByUserId(String userId); /*********************************** * 用途说明:根据权限id查找系统类型 diff --git a/backend/src/main/java/com/yfd/platform/system/mapper/SysRoleMapper.java b/backend/src/main/java/com/yfd/platform/system/mapper/SysRoleMapper.java index acb7a81..654d347 100644 --- a/backend/src/main/java/com/yfd/platform/system/mapper/SysRoleMapper.java +++ b/backend/src/main/java/com/yfd/platform/system/mapper/SysRoleMapper.java @@ -86,4 +86,19 @@ public interface SysRoleMapper extends BaseMapper { void addRoleMenu(@Param("id") String id, @Param("roleid") String roleid, @Param("menuid") String menuid); + + + /********************************** + * 用途说明:根据用户 id 获取角色信息 + * 参数说明 id 用户 id + * 返回值说明:角色列表 + ***********************************/ + List getRoleListByUserId(String id); + + /********************************** + * 用途说明:根据用户 id 获取角色 ID 列表 + * 参数说明 id 用户 id + * 返回值说明:角色 ID 列表 + ***********************************/ + List getRoleIdsByUserId(String id); } diff --git a/backend/src/main/java/com/yfd/platform/system/service/impl/SysMenuServiceImpl.java b/backend/src/main/java/com/yfd/platform/system/service/impl/SysMenuServiceImpl.java index b53b789..f497044 100644 --- a/backend/src/main/java/com/yfd/platform/system/service/impl/SysMenuServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/system/service/impl/SysMenuServiceImpl.java @@ -409,14 +409,31 @@ public class SysMenuServiceImpl extends ServiceImpl impl public List> getMenuTree(String id) { // 根据id获取菜单 //List sysMenus = sysMenuMapper.selectMenuByUserId(id); - List> list; + List sysMenuList; if (StrUtil.isBlank(id)) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - list = this.listMaps(queryWrapper.eq(SysMenu::getIsdisplay, "1").ne(SysMenu::getType, "2").eq(SysMenu::getSystemcode, "1").orderByAsc(SysMenu::getOrderno)); + sysMenuList = this.list(queryWrapper.eq(SysMenu::getIsdisplay, "1").ne(SysMenu::getType, "2").eq(SysMenu::getSystemcode, "1").orderByAsc(SysMenu::getOrderno)); } else { - list = sysMenuMapper.selectMenuByUserId(id); + sysMenuList = sysMenuMapper.selectMenuByUserId(id); } + // 将 SysMenu 转换为 Map 并构建树 + List> list = sysMenuList.stream() + .map(menu -> { + Map map = new HashMap<>(); + map.put("id", menu.getId()); + map.put("parentid", menu.getParentid()); + map.put("name", menu.getName()); + map.put("opturl", menu.getOpturl()); + map.put("icon", menu.getIcon()); + map.put("type", menu.getType()); + map.put("systemcode", menu.getSystemcode()); + map.put("isdisplay", menu.getIsdisplay()); + map.put("orderno", menu.getOrderno()); + return map; + }) + .collect(Collectors.toList()); + // 将菜单转换成树 List> sysMenus = buildTreeLeft(list); return sysMenus; diff --git a/backend/src/main/java/com/yfd/platform/system/service/impl/SysOrganizationServiceImpl.java b/backend/src/main/java/com/yfd/platform/system/service/impl/SysOrganizationServiceImpl.java index 01ea014..66f88eb 100644 --- a/backend/src/main/java/com/yfd/platform/system/service/impl/SysOrganizationServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/system/service/impl/SysOrganizationServiceImpl.java @@ -55,7 +55,7 @@ public class SysOrganizationServiceImpl extends ServiceImpl> getOrgTree(String parentid, String params) { - List> listMap = new ArrayList<>(); + List orgList = new ArrayList<>(); QueryWrapper queryWrapper = new QueryWrapper<>(); //根据父级id查询 queryWrapper.eq("parentid", parentid); @@ -88,11 +88,30 @@ public class SysOrganizationServiceImpl extends ServiceImpl> childList = child(listMap.get(i).get( + orgList = this.list(queryWrapper.orderByAsc("orgcode")); + // 将实体对象转换为 Map,确保字段名与实体类一致 + // 将实体对象转换为 Map,确保字段名与实体类一致 + List> listMap = orgList.stream().map(org -> { + Map map = new HashMap<>(); + map.put("id", org.getId()); + map.put("orgtype", org.getOrgtype()); + map.put("orgcode", org.getOrgcode()); + map.put("orgname", org.getOrgname()); + map.put("parentid", org.getParentid()); + map.put("manager", org.getManager()); + map.put("isvaild", org.getIsvaild()); + map.put("description", org.getDescription()); + map.put("lastmodifier", org.getLastmodifier()); + map.put("lastmodifydate", org.getLastmodifydate()); + map.put("custom1", org.getCustom1()); + map.put("custom2", org.getCustom2()); + map.put("custom3", org.getCustom3()); + return map; + }).collect(Collectors.toList()); + for (Map map : listMap) { + List> childList = child(map.get( "id").toString());//查询下一子集 - listMap.get(i).put("childList", childList); //添加新列 子集 + map.put("childList", childList); //添加新列 子集 } return listMap; } diff --git a/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java b/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java index 566d608..73b1bf0 100644 --- a/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java @@ -108,10 +108,9 @@ public class UserServiceImpl extends ServiceImpl impleme //根据用户ID获取组织 Map userInfo = sysUserMapper.getOrganizationByid(user.getId()); - List roles = - sysRoleMapper.selectList(new QueryWrapper().inSql( - "id ", "SELECT roleid FROM sys_role_users ru WHERE ru" + - ".userid = '" + user.getId() + "'")); + + // 使用 MyBatis 方式查询用户角色(Oracle 兼容) + List roles = sysRoleMapper.getRoleByUserId(user.getId()); List collect = roles.stream().map(SysRole::getRolename).collect(Collectors.toList()); ResponseResult responseResult = new ResponseResult(); diff --git a/backend/src/main/java/com/yfd/platform/utils/ObjectConverterUtil.java b/backend/src/main/java/com/yfd/platform/utils/ObjectConverterUtil.java new file mode 100644 index 0000000..dc4d600 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/utils/ObjectConverterUtil.java @@ -0,0 +1,92 @@ +package com.yfd.platform.utils; + +import java.lang.reflect.Field; +import java.util.*; +import java.util.stream.Collectors; + +public class ObjectConverterUtil { + + /** + * 将 List 中的大写字段名转换为与实体类一致的小写格式 + * 适用于 Oracle 数据库查询结果转换 + * + * @param entityClass 实体类 Class 对象 + * @param sourceList 源数据列表(字段名为大写) + * @return 转换后的列表(字段名与实体类一致) + */ + public static List> convertMapFieldsToEntityFormat( + Class entityClass, + List> sourceList) { + + if (sourceList == null || sourceList.isEmpty()) { + return sourceList; + } + + // 获取实体类的所有字段名(小写驼峰命名) + Set entityFieldNames = Arrays.stream(entityClass.getDeclaredFields()) + .map(field -> field.getName()) + .collect(Collectors.toSet()); + + // 转换每个 Map + return sourceList.stream().map(sourceMap -> { + Map targetMap = new HashMap<>(); + + for (Map.Entry entry : sourceMap.entrySet()) { + String dbColumnName = entry.getKey(); // 数据库列名(大写) + Object value = entry.getValue(); + + // 将大写列名转为小写 + String lowerCaseName = dbColumnName.toLowerCase(); + + // 如果实体类中有对应的字段,使用实体类的字段名 + if (entityFieldNames.contains(lowerCaseName)) { + targetMap.put(lowerCaseName, value); + } else { + // 如果实体类中没有对应字段,保留原列名(转小写) + targetMap.put(lowerCaseName, value); + } + } + + return targetMap; + }).collect(Collectors.toList()); + } + + /** + * 通用方法:将单个 Map 的大写字段转换为实体类格式 + * + * @param entityClass 实体类 Class 对象 + * @param sourceMap 源 Map(字段名为大写) + * @return 转换后的 Map(字段名与实体类一致) + */ + public static Map convertSingleMapFieldsToEntityFormat( + Class entityClass, + Map sourceMap) { + + if (sourceMap == null) { + return sourceMap; + } + + // 获取实体类的所有字段名 + Set entityFieldNames = Arrays.stream(entityClass.getDeclaredFields()) + .map(Field::getName) + .collect(Collectors.toSet()); + + Map targetMap = new HashMap<>(); + + for (Map.Entry entry : sourceMap.entrySet()) { + String dbColumnName = entry.getKey(); + Object value = entry.getValue(); + + // 将大写列名转为小写 + String lowerCaseName = dbColumnName.toLowerCase(); + + // 验证字段是否存在于实体类中 + if (entityFieldNames.contains(lowerCaseName)) { + targetMap.put(lowerCaseName, value); + } + } + + return targetMap; + } + +} diff --git a/backend/src/main/java/com/yfd/platform/utils/RsaUtils.java b/backend/src/main/java/com/yfd/platform/utils/RsaUtils.java index 6638ac7..5c3e6c7 100644 --- a/backend/src/main/java/com/yfd/platform/utils/RsaUtils.java +++ b/backend/src/main/java/com/yfd/platform/utils/RsaUtils.java @@ -20,13 +20,22 @@ public class RsaUtils { public static void main(String[] args) throws Exception { System.out.println("\n"); - RsaKeyPair keyPair = generateKeyPair(); - System.out.println("公钥:" + keyPair.getPublicKey()); - System.out.println("私钥:" + keyPair.getPrivateKey()); +// RsaKeyPair keyPair = generateKeyPair(); + String publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANL378k3RiZHWx5AfJqdH9xRNBmD9wGD2iRe41HdTNF8RUhNnHit5NpMNtGL0NPTSSpPjjI1kJfVorRvaQerUgkCAwEAAQ=="; + String privateKey = "MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8\n" + + "mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9p\n" + + "B6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue\n" + + "/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZ\n" + + "UBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6\n" + + "vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha\n" + + "4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3\n" + + "tTbklZkD2A=="; + RsaKeyPair keyPair =new RsaKeyPair(publicKey, privateKey); + System.out.println("私钥:" + keyPair.getPrivateKey()); System.out.println("\n"); test1(keyPair); System.out.println("\n"); - test2(keyPair); +// test2(keyPair); System.out.println("\n"); } diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index 2c7a148..8f42778 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -8,7 +8,7 @@ jasypt: #密码加密传输,前端公钥加密,后端私钥解密 rsa: - private_key: ${RSA_PRIVATE_KEY:} + private_key: ${RSA_PRIVATE_KEY:MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==} # Actuator & Micrometer 默认配置 management: diff --git a/backend/src/main/resources/mapper/system/SysMenuMapper.xml b/backend/src/main/resources/mapper/system/SysMenuMapper.xml index febfab3..3eacc8e 100644 --- a/backend/src/main/resources/mapper/system/SysMenuMapper.xml +++ b/backend/src/main/resources/mapper/system/SysMenuMapper.xml @@ -28,7 +28,7 @@ select userid from sys_role_users where roleid=#{roleid} + + + delete from sys_role_users where userid !=(select u.id from sys_user u where u.account="admin") and roleid=#{roleid} and userid=#{urserid}