fix: 优化项目运行代码

This commit is contained in:
liheng 2026-03-26 17:27:18 +08:00
parent 5a776da408
commit 617d2832ce
13 changed files with 193 additions and 21 deletions

View File

@ -173,6 +173,14 @@
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<!-- Oracle 国际化支持包(解决 ZHS16GBK 等字符集问题) -->
<dependency>
<groupId>com.oracle.database.nls</groupId>
<artifactId>orai18n</artifactId>
<version>21.9.0.0</version>
<scope>runtime</scope>
</dependency>
<!-- sqlite-jdbc数据库 --> <!-- sqlite-jdbc数据库 -->
<dependency> <dependency>
<groupId>org.xerial</groupId> <groupId>org.xerial</groupId>

View File

@ -18,6 +18,7 @@ public class GlobalExceptionHandler {
@ExceptionHandler(value = Throwable.class) @ExceptionHandler(value = Throwable.class)
public ResponseResult handleException(Throwable e) { public ResponseResult handleException(Throwable e) {
log.error("message:{}", e.getMessage()); log.error("message:{}", e.getMessage());
e.printStackTrace();
return ResponseResult.error(e.getMessage()); return ResponseResult.error(e.getMessage());
} }

View File

@ -31,8 +31,8 @@ public class SysLog implements Serializable {
/** /**
* ID * ID
*/ */
@TableId(value = "ID", type = IdType.AUTO) @TableId(value = "ID", type = IdType.ASSIGN_UUID)
private Long id; private String id;
/** /**
* 用户账号 * 用户账号

View File

@ -41,7 +41,7 @@ public interface SysMenuMapper extends BaseMapper<SysMenu> {
List<String> selectPermsByUserId(String userId); List<String> selectPermsByUserId(String userId);
//List<SysMenu> selectMenuByUserId(String userId); //List<SysMenu> selectMenuByUserId(String userId);
List<Map<String,Object>> selectMenuByUserId(String userId); List<SysMenu> selectMenuByUserId(String userId);
/*********************************** /***********************************
* 用途说明根据权限id查找系统类型 * 用途说明根据权限id查找系统类型

View File

@ -86,4 +86,19 @@ public interface SysRoleMapper extends BaseMapper<SysRole> {
void addRoleMenu(@Param("id") String id, @Param("roleid") String roleid, void addRoleMenu(@Param("id") String id, @Param("roleid") String roleid,
@Param("menuid") String menuid); @Param("menuid") String menuid);
/**********************************
* 用途说明根据用户 id 获取角色信息
* 参数说明 id 用户 id
* 返回值说明角色列表
***********************************/
List<SysRole> getRoleListByUserId(String id);
/**********************************
* 用途说明根据用户 id 获取角色 ID 列表
* 参数说明 id 用户 id
* 返回值说明角色 ID 列表
***********************************/
List<String> getRoleIdsByUserId(String id);
} }

View File

@ -409,14 +409,31 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
public List<Map<String, Object>> getMenuTree(String id) { public List<Map<String, Object>> getMenuTree(String id) {
// 根据id获取菜单 // 根据id获取菜单
//List<SysMenu> sysMenus = sysMenuMapper.selectMenuByUserId(id); //List<SysMenu> sysMenus = sysMenuMapper.selectMenuByUserId(id);
List<Map<String, Object>> list; List<SysMenu> sysMenuList;
if (StrUtil.isBlank(id)) { if (StrUtil.isBlank(id)) {
LambdaQueryWrapper<SysMenu> queryWrapper = LambdaQueryWrapper<SysMenu> queryWrapper =
new LambdaQueryWrapper<>(); 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 { } else {
list = sysMenuMapper.selectMenuByUserId(id); sysMenuList = sysMenuMapper.selectMenuByUserId(id);
} }
// SysMenu 转换为 Map 并构建树
List<Map<String, Object>> list = sysMenuList.stream()
.map(menu -> {
Map<String, Object> 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<Map<String, Object>> sysMenus = buildTreeLeft(list); List<Map<String, Object>> sysMenus = buildTreeLeft(list);
return sysMenus; return sysMenus;

View File

@ -55,7 +55,7 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
@Override @Override
public List<Map<String, Object>> getOrgTree(String parentid, public List<Map<String, Object>> getOrgTree(String parentid,
String params) { String params) {
List<Map<String, Object>> listMap = new ArrayList<>(); List<SysOrganization> orgList = new ArrayList<>();
QueryWrapper<SysOrganization> queryWrapper = new QueryWrapper<>(); QueryWrapper<SysOrganization> queryWrapper = new QueryWrapper<>();
//根据父级id查询 //根据父级id查询
queryWrapper.eq("parentid", parentid); queryWrapper.eq("parentid", parentid);
@ -88,11 +88,30 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
} }
queryWrapper.in("id", ids); queryWrapper.in("id", ids);
} }
listMap = this.listMaps(queryWrapper.orderByAsc("orgcode")); orgList = this.list(queryWrapper.orderByAsc("orgcode"));
for (int i = 0; i < listMap.size(); i++) { // 将实体对象转换为 Map确保字段名与实体类一致
List<Map<String, Object>> childList = child(listMap.get(i).get( // 将实体对象转换为 Map确保字段名与实体类一致
List<Map<String,Object>> listMap = orgList.stream().map(org -> {
Map<String, Object> 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<String, Object> map : listMap) {
List<Map<String, Object>> childList = child(map.get(
"id").toString());//查询下一子集 "id").toString());//查询下一子集
listMap.get(i).put("childList", childList); //添加新列 子集 map.put("childList", childList); //添加新列 子集
} }
return listMap; return listMap;
} }

View File

@ -108,10 +108,9 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
//根据用户ID获取组织 //根据用户ID获取组织
Map<String, String> userInfo = Map<String, String> userInfo =
sysUserMapper.getOrganizationByid(user.getId()); sysUserMapper.getOrganizationByid(user.getId());
List<SysRole> roles =
sysRoleMapper.selectList(new QueryWrapper<SysRole>().inSql( // 使用 MyBatis 方式查询用户角色Oracle 兼容
"id ", "SELECT roleid FROM sys_role_users ru WHERE ru" + List<SysRole> roles = sysRoleMapper.getRoleByUserId(user.getId());
".userid = '" + user.getId() + "'"));
List<String> collect = List<String> collect =
roles.stream().map(SysRole::getRolename).collect(Collectors.toList()); roles.stream().map(SysRole::getRolename).collect(Collectors.toList());
ResponseResult responseResult = new ResponseResult(); ResponseResult responseResult = new ResponseResult();

View File

@ -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<Map> 中的大写字段名转换为与实体类一致的小写格式
* 适用于 Oracle 数据库查询结果转换
*
* @param entityClass 实体类 Class 对象
* @param sourceList 源数据列表字段名为大写
* @return 转换后的列表字段名与实体类一致
*/
public static <T> List<Map<String, Object>> convertMapFieldsToEntityFormat(
Class<T> entityClass,
List<Map<String, Object>> sourceList) {
if (sourceList == null || sourceList.isEmpty()) {
return sourceList;
}
// 获取实体类的所有字段名小写驼峰命名
Set<String> entityFieldNames = Arrays.stream(entityClass.getDeclaredFields())
.map(field -> field.getName())
.collect(Collectors.toSet());
// 转换每个 Map
return sourceList.stream().map(sourceMap -> {
Map<String, Object> targetMap = new HashMap<>();
for (Map.Entry<String, Object> 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 <T> Map<String, Object> convertSingleMapFieldsToEntityFormat(
Class<T> entityClass,
Map<String, Object> sourceMap) {
if (sourceMap == null) {
return sourceMap;
}
// 获取实体类的所有字段名
Set<String> entityFieldNames = Arrays.stream(entityClass.getDeclaredFields())
.map(Field::getName)
.collect(Collectors.toSet());
Map<String, Object> targetMap = new HashMap<>();
for (Map.Entry<String, Object> 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;
}
}

View File

@ -20,13 +20,22 @@ public class RsaUtils {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
System.out.println("\n"); System.out.println("\n");
RsaKeyPair keyPair = generateKeyPair(); // RsaKeyPair keyPair = generateKeyPair();
System.out.println("公钥:" + keyPair.getPublicKey()); 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("私钥:" + keyPair.getPrivateKey());
System.out.println("\n"); System.out.println("\n");
test1(keyPair); test1(keyPair);
System.out.println("\n"); System.out.println("\n");
test2(keyPair); // test2(keyPair);
System.out.println("\n"); System.out.println("\n");
} }

View File

@ -8,7 +8,7 @@ jasypt:
#密码加密传输,前端公钥加密,后端私钥解密 #密码加密传输,前端公钥加密,后端私钥解密
rsa: 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 默认配置 # Actuator & Micrometer 默认配置
management: management:

View File

@ -28,7 +28,7 @@
</select> </select>
<select id="selectMenuByUserId" <select id="selectMenuByUserId"
resultType="Map"> resultType="com.yfd.platform.system.domain.SysMenu">
SELECT SELECT
DISTINCT DISTINCT
m.id, m.id,

View File

@ -98,7 +98,19 @@
<select id="getUserIdById" resultType="java.lang.String"> <select id="getUserIdById" resultType="java.lang.String">
select userid from sys_role_users where roleid=#{roleid} select userid from sys_role_users where roleid=#{roleid}
</select> </select>
<select id="getRoleListByUserId" resultType="com.yfd.platform.system.domain.SysRole">
SELECT r.id, r.rolename, r.orgscope
FROM sys_role r
INNER JOIN sys_role_users ru ON r.id = ru.roleid
WHERE ru.userid = #{id}
</select>
<!--根据用户 id 获取角色 ID 列表-->
<select id="getRoleIdsByUserId" resultType="java.lang.String">
SELECT roleid
FROM sys_role_users
WHERE userid = #{id}
</select>
<!--根据 角色id和用户id 删除系统角色用户对照 admin除外--> <!--根据 角色id和用户id 删除系统角色用户对照 admin除外-->
<delete id="deleteRoleUsers"> <delete id="deleteRoleUsers">
delete from sys_role_users where userid !=(select u.id from sys_user u where u.account="admin") and roleid=#{roleid} and userid=#{urserid} delete from sys_role_users where userid !=(select u.id from sys_user u where u.account="admin") and roleid=#{roleid} and userid=#{urserid}