diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java
index aa4378ca..de077e9a 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java
@@ -20,11 +20,6 @@ public class AdminCacheConst extends CacheKeyConst {
*/
public static final String DEPARTMENT_LIST_CACHE = "department_list_cache";
- /**
- * 部门map
- */
- public static final String DEPARTMENT_MAP_CACHE = "department_map_cache";
-
/**
* 部门树
*/
@@ -54,4 +49,20 @@ public class AdminCacheConst extends CacheKeyConst {
public static final String CATEGORY_TREE = "category_tree_cache";
}
+ /**
+ * 登录相关
+ */
+ public static class Login {
+
+ /**
+ * 请求用户信息
+ */
+ public static final String REQUEST_EMPLOYEE = "login_request_employee";
+
+ /**
+ * 请求用户信息权限
+ */
+ public static final String USER_PERMISSION = "login_user_permission";
+ }
+
}
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java
index d726a9a5..7f9cc0e9 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java
@@ -17,7 +17,7 @@ import org.hibernate.validator.constraints.Length;
* @Date 2021-10-25 20:26:54
* @Wechat zhuoda1024
* @Email lab1024@163.com
- * @Copyright 1024创新实验室
+ * @Copyright 1024创新实验室
*/
@Data
public class GoodsQueryForm extends PageParam {
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/vo/GoodsVO.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/vo/GoodsVO.java
index 24f07738..191965f9 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/vo/GoodsVO.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/vo/GoodsVO.java
@@ -1,6 +1,5 @@
package net.lab1024.sa.admin.module.business.goods.domain.vo;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import net.lab1024.sa.admin.module.business.goods.constant.GoodsStatusEnum;
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/controller/EnterpriseController.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java
similarity index 97%
rename from smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/controller/EnterpriseController.java
rename to smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java
index ab06bd02..d919537b 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/controller/EnterpriseController.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java
@@ -1,4 +1,4 @@
-package net.lab1024.sa.admin.module.business.oa.enterprise.controller;
+package net.lab1024.sa.admin.module.business.oa.enterprise;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
@@ -8,7 +8,6 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.sa.admin.constant.AdminSwaggerTagConst;
-import net.lab1024.sa.admin.module.business.oa.enterprise.service.EnterpriseService;
import net.lab1024.sa.admin.module.business.oa.enterprise.domain.form.*;
import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseEmployeeVO;
import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseExcelVO;
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/manager/EnterpriseEmployeeManager.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseEmployeeManager.java
similarity index 90%
rename from smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/manager/EnterpriseEmployeeManager.java
rename to smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseEmployeeManager.java
index a3c21d84..f90b21ac 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/manager/EnterpriseEmployeeManager.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseEmployeeManager.java
@@ -1,4 +1,4 @@
-package net.lab1024.sa.admin.module.business.oa.enterprise.manager;
+package net.lab1024.sa.admin.module.business.oa.enterprise;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.lab1024.sa.admin.module.business.oa.enterprise.dao.EnterpriseEmployeeDao;
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/service/EnterpriseService.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseService.java
similarity index 98%
rename from smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/service/EnterpriseService.java
rename to smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseService.java
index 37848774..5ea17e6c 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/service/EnterpriseService.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseService.java
@@ -1,4 +1,4 @@
-package net.lab1024.sa.admin.module.business.oa.enterprise.service;
+package net.lab1024.sa.admin.module.business.oa.enterprise;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
@@ -13,7 +13,6 @@ import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseEm
import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseExcelVO;
import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseListVO;
import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseVO;
-import net.lab1024.sa.admin.module.business.oa.enterprise.manager.EnterpriseEmployeeManager;
import net.lab1024.sa.admin.module.system.department.service.DepartmentService;
import net.lab1024.sa.base.common.code.UserErrorCode;
import net.lab1024.sa.base.common.domain.PageResult;
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/service/InvoiceService.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/service/InvoiceService.java
index dc7eb521..bfa87e09 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/service/InvoiceService.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/service/InvoiceService.java
@@ -3,7 +3,7 @@ package net.lab1024.sa.admin.module.business.oa.invoice.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
-import net.lab1024.sa.admin.module.business.oa.enterprise.service.EnterpriseService;
+import net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService;
import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseVO;
import net.lab1024.sa.admin.module.business.oa.invoice.dao.InvoiceDao;
import net.lab1024.sa.admin.module.business.oa.invoice.domain.*;
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/controller/DataScopeController.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScopeController.java
similarity index 94%
rename from smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/controller/DataScopeController.java
rename to smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScopeController.java
index 32bdf8b6..8f2fec8e 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/controller/DataScopeController.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScopeController.java
@@ -1,4 +1,4 @@
-package net.lab1024.sa.admin.module.system.datascope.controller;
+package net.lab1024.sa.admin.module.system.datascope;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java
index 4924d5a5..011f0168 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java
@@ -5,7 +5,6 @@ import net.lab1024.sa.admin.module.system.department.domain.entity.DepartmentEnt
import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
-import org.springframework.stereotype.Component;
import java.util.List;
@@ -32,4 +31,5 @@ public interface DepartmentDao extends BaseMapper {
*/
List listAll();
+ DepartmentVO selectDepartmentVO(@Param("departmentId")Long departmentId);
}
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentCacheManager.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentCacheManager.java
index a53a74e3..d829d355 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentCacheManager.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentCacheManager.java
@@ -29,7 +29,7 @@ import java.util.stream.Collectors;
* @Date 2022-01-12 20:37:48
* @Wechat zhuoda1024
* @Email lab1024@163.com
- * @Copyright 1024创新实验室
+ * @Copyright 1024创新实验室
*/
@Slf4j
@Service
@@ -42,7 +42,7 @@ public class DepartmentCacheManager {
log.info("clear " + cache);
}
- @CacheEvict(value = {AdminCacheConst.Department.DEPARTMENT_LIST_CACHE, AdminCacheConst.Department.DEPARTMENT_MAP_CACHE, AdminCacheConst.Department.DEPARTMENT_SELF_CHILDREN_CACHE, AdminCacheConst.Department.DEPARTMENT_TREE_CACHE, AdminCacheConst.Department.DEPARTMENT_PATH_CACHE,}, allEntries = true)
+ @CacheEvict(value = {AdminCacheConst.Department.DEPARTMENT_LIST_CACHE, AdminCacheConst.Department.DEPARTMENT_SELF_CHILDREN_CACHE, AdminCacheConst.Department.DEPARTMENT_TREE_CACHE, AdminCacheConst.Department.DEPARTMENT_PATH_CACHE,}, allEntries = true)
public void clearCache() {
logClearInfo(AdminCacheConst.Department.DEPARTMENT_LIST_CACHE);
}
@@ -56,19 +56,8 @@ public class DepartmentCacheManager {
return departmentDao.listAll();
}
- /**
- * 部门map
- *
- */
- @Cacheable(AdminCacheConst.Department.DEPARTMENT_MAP_CACHE)
- public Map getDepartmentMap() {
- return departmentDao.listAll().stream().collect(Collectors.toMap(DepartmentVO::getDepartmentId, Function.identity()));
- }
-
-
/**
* 缓存部门树结构
- *
*/
@Cacheable(AdminCacheConst.Department.DEPARTMENT_TREE_CACHE)
public List getDepartmentTree() {
@@ -78,7 +67,6 @@ public class DepartmentCacheManager {
/**
* 缓存某个部门的下级id列表
- *
*/
@Cacheable(AdminCacheConst.Department.DEPARTMENT_SELF_CHILDREN_CACHE)
public List getDepartmentSelfAndChildren(Long departmentId) {
@@ -89,7 +77,6 @@ public class DepartmentCacheManager {
/**
* 部门的路径名称
- *
*/
@Cacheable(AdminCacheConst.Department.DEPARTMENT_PATH_CACHE)
public Map getDepartmentPathMap() {
@@ -125,7 +112,6 @@ public class DepartmentCacheManager {
/**
* 构建部门树结构
- *
*/
public List buildTree(List voList) {
if (CollectionUtils.isEmpty(voList)) {
@@ -140,7 +126,7 @@ public class DepartmentCacheManager {
return treeVOList;
}
- /**
+ /**
* 构建所有根节点的下级树形结构
* 返回值为层序遍历结果
* [由于departmentDao中listAll给出数据根据Sort降序 所以同一层中Sort值较大的优先遍历]
@@ -148,7 +134,7 @@ public class DepartmentCacheManager {
private List recursiveBuildTree(List nodeList, List allDepartmentList) {
int nodeSize = nodeList.size();
List childIdList = new ArrayList<>();
- for(int i = 0; i < nodeSize; i++) {
+ for (int i = 0; i < nodeSize; i++) {
int preIndex = i - 1;
int nextIndex = i + 1;
DepartmentTreeVO node = nodeList.get(i);
@@ -167,14 +153,14 @@ public class DepartmentCacheManager {
tempChildIdList = this.recursiveBuildTree(children, allDepartmentList);
}
- if(CollectionUtils.isEmpty(node.getSelfAndAllChildrenIdList())) {
+ if (CollectionUtils.isEmpty(node.getSelfAndAllChildrenIdList())) {
node.setSelfAndAllChildrenIdList(
new ArrayList<>()
);
}
node.getSelfAndAllChildrenIdList().add(node.getDepartmentId());
- if(CollectionUtils.isNotEmpty(tempChildIdList)) {
+ if (CollectionUtils.isNotEmpty(tempChildIdList)) {
node.getSelfAndAllChildrenIdList().addAll(tempChildIdList);
childIdList.addAll(tempChildIdList);
}
@@ -182,7 +168,7 @@ public class DepartmentCacheManager {
}
// 保证本层遍历顺序
- for(int i = nodeSize - 1; i >= 0; i--) {
+ for (int i = nodeSize - 1; i >= 0; i--) {
childIdList.add(0, nodeList.get(i).getDepartmentId());
}
@@ -192,7 +178,6 @@ public class DepartmentCacheManager {
/**
* 获取子元素
- *
*/
private List getChildren(Long departmentId, List voList) {
List childrenEntityList = voList.stream().filter(e -> departmentId.equals(e.getParentId())).collect(Collectors.toList());
@@ -205,7 +190,6 @@ public class DepartmentCacheManager {
/**
* 通过部门id,获取当前以及下属部门
- *
*/
public List selfAndChildrenIdList(Long departmentId, List voList) {
List selfAndChildrenIdList = Lists.newArrayList();
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java
index 5f7d1520..3c38e705 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java
@@ -26,7 +26,7 @@ import java.util.Map;
* @Date 2022-01-12 20:37:48
* @Wechat zhuoda1024
* @Email lab1024@163.com
- * @Copyright 1024创新实验室
+ * @Copyright 1024创新实验室
*/
@Service
public class DepartmentService {
@@ -44,7 +44,6 @@ public class DepartmentService {
/**
* 新增添加部门
- *
*/
public ResponseDTO addDepartment(DepartmentAddForm departmentAddForm) {
@@ -57,7 +56,6 @@ public class DepartmentService {
/**
* 更新部门信息
- *
*/
public ResponseDTO updateDepartment(DepartmentUpdateForm updateDTO) {
if (updateDTO.getParentId() == null) {
@@ -78,7 +76,6 @@ public class DepartmentService {
* 根据id删除部门
* 1、需要判断当前部门是否有子部门,有子部门则不允许删除
* 2、需要判断当前部门是否有员工,有员工则不能删除
- *
*/
public ResponseDTO deleteDepartment(Long departmentId) {
DepartmentEntity departmentEntity = departmentDao.selectById(departmentId);
@@ -122,7 +119,6 @@ public class DepartmentService {
/**
* 自身以及所有下级的部门id列表
- *
*/
public List selfAndChildrenIdList(Long departmentId) {
return departmentCacheManager.getDepartmentSelfAndChildren(departmentId);
@@ -131,7 +127,6 @@ public class DepartmentService {
/**
* 获取所有部门
- *
*/
public List listAll() {
return departmentCacheManager.getDepartmentList();
@@ -140,10 +135,9 @@ public class DepartmentService {
/**
* 获取部门
- *
*/
public DepartmentVO getDepartmentById(Long departmentId) {
- return departmentCacheManager.getDepartmentMap().get(departmentId);
+ return departmentDao.selectDepartmentVO(departmentId);
}
/**
@@ -153,38 +147,4 @@ public class DepartmentService {
return departmentCacheManager.getDepartmentPathMap().get(departmentId);
}
- /**
- * 查询全部父级部门(不包含自己)
- *
- */
- public List queryAllParentDepartment(Long departmentId) {
- List list = new ArrayList<>();
-
- Map departmentMap = departmentCacheManager.getDepartmentMap();
- DepartmentVO departmentVO = departmentMap.get(departmentId);
- while (departmentVO != null) {
- list.add(departmentVO);
- departmentVO = departmentMap.get(departmentVO.getParentId());
- }
- Collections.reverse(list);
- return list;
- }
-
- /**
- * 查询全部父级部门(不包含自己)
- *
- */
- public List queryAllParentDepartmentIdList(Long departmentId) {
- List list = new ArrayList<>();
-
- Map departmentMap = departmentCacheManager.getDepartmentMap();
- DepartmentVO departmentVO = departmentMap.get(departmentId);
- while (departmentVO != null) {
- list.add(departmentVO.getDepartmentId());
- departmentVO = departmentMap.get(departmentVO.getParentId());
- }
- Collections.reverse(list);
- return list;
- }
-
}
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdatePasswordForm.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdatePasswordForm.java
index f3d96baf..07202e26 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdatePasswordForm.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdatePasswordForm.java
@@ -2,9 +2,7 @@ package net.lab1024.sa.admin.module.system.employee.domain.form;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Pattern;
import lombok.Data;
-import net.lab1024.sa.base.common.util.SmartVerificationUtil;
/**
* 修改密码所需参数
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/manager/LoginManager.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/manager/LoginManager.java
new file mode 100644
index 00000000..8fdc9a1d
--- /dev/null
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/manager/LoginManager.java
@@ -0,0 +1,162 @@
+package net.lab1024.sa.admin.module.system.login.manager;
+
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import net.lab1024.sa.admin.constant.AdminCacheConst;
+import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO;
+import net.lab1024.sa.admin.module.system.department.service.DepartmentService;
+import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity;
+import net.lab1024.sa.admin.module.system.employee.service.EmployeeService;
+import net.lab1024.sa.admin.module.system.login.domain.RequestEmployee;
+import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuVO;
+import net.lab1024.sa.admin.module.system.role.domain.vo.RoleVO;
+import net.lab1024.sa.admin.module.system.role.service.RoleEmployeeService;
+import net.lab1024.sa.admin.module.system.role.service.RoleMenuService;
+import net.lab1024.sa.base.common.constant.StringConst;
+import net.lab1024.sa.base.common.domain.ResponseDTO;
+import net.lab1024.sa.base.common.domain.UserPermission;
+import net.lab1024.sa.base.common.enumeration.UserTypeEnum;
+import net.lab1024.sa.base.common.util.SmartBeanUtil;
+import net.lab1024.sa.base.module.support.file.service.IFileStorageService;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.CachePut;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 登录Manager
+ *
+ * @Author 1024创新实验室: 卓大
+ * @Date 2025-05-03 22:56:34
+ * @Wechat zhuoda1024
+ * @Email lab1024@163.com
+ * @Copyright 1024创新实验室
+ */
+@Slf4j
+@Service
+public class LoginManager {
+
+ @Resource
+ private DepartmentService departmentService;
+
+ @Resource
+ private IFileStorageService fileStorageService;
+
+ @Resource
+ private EmployeeService employeeService;
+
+ @Resource
+ private RoleEmployeeService roleEmployeeService;
+
+ @Resource
+ private RoleMenuService roleMenuService;
+
+
+ /**
+ * 获取请求用户信息
+ */
+ @Cacheable(AdminCacheConst.Login.REQUEST_EMPLOYEE)
+ public RequestEmployee getRequestEmployee(Long requestEmployeeId ) {
+ if (requestEmployeeId == null) {
+ return null;
+ }
+ // 员工基本信息
+ EmployeeEntity employeeEntity = employeeService.getById(requestEmployeeId);
+ if (employeeEntity == null) {
+ return null;
+ }
+
+ return this.loadLoginInfo(employeeEntity);
+ }
+
+ /**
+ * 获取登录的用户信息
+ */
+ @CachePut(value = AdminCacheConst.Login.REQUEST_EMPLOYEE, key = "#employeeEntity.employeeId")
+ public RequestEmployee loadLoginInfo(EmployeeEntity employeeEntity) {
+ // 基础信息
+ RequestEmployee requestEmployee = SmartBeanUtil.copy(employeeEntity, RequestEmployee.class);
+ requestEmployee.setUserType(UserTypeEnum.ADMIN_EMPLOYEE);
+
+ // 部门信息
+ DepartmentVO department = departmentService.getDepartmentById(employeeEntity.getDepartmentId());
+ requestEmployee.setDepartmentName(null == department ? StringConst.EMPTY : department.getName());
+
+ // 头像信息
+ String avatar = employeeEntity.getAvatar();
+ if (StringUtils.isNotBlank(avatar)) {
+ ResponseDTO getFileUrl = fileStorageService.getFileUrl(avatar);
+ if (BooleanUtils.isTrue(getFileUrl.getOk())) {
+ requestEmployee.setAvatar(getFileUrl.getData());
+ }
+ }
+ return requestEmployee;
+ }
+
+
+ /**
+ * 获取用户的权限(包含 角色列表、权限列表)
+ */
+ @Cacheable(AdminCacheConst.Login.USER_PERMISSION)
+ public UserPermission getUserPermission(Long employeeId) {
+ if(null == employeeId){
+ return null;
+ }
+
+ return this.loadUserPermission(employeeId);
+ }
+
+ /**
+ * 获取用户的权限(包含 角色列表、权限列表)
+ */
+ @CachePut(AdminCacheConst.Login.USER_PERMISSION)
+ public UserPermission loadUserPermission(Long employeeId) {
+ UserPermission userPermission = new UserPermission();
+ userPermission.setPermissionList(new ArrayList<>());
+ userPermission.setRoleList(new ArrayList<>());
+
+ // 角色列表
+ List roleList = roleEmployeeService.getRoleIdList(employeeId);
+ userPermission.getRoleList().addAll(roleList.stream().map(RoleVO::getRoleCode).collect(Collectors.toSet()));
+
+ // 前端菜单和功能点清单
+ EmployeeEntity employeeEntity = employeeService.getById(employeeId);
+
+ List menuAndPointsList = roleMenuService.getMenuList(roleList.stream().map(RoleVO::getRoleId).collect(Collectors.toList()), employeeEntity.getAdministratorFlag());
+
+ // 权限列表
+ HashSet permissionSet = new HashSet<>();
+ for (MenuVO menu : menuAndPointsList) {
+ if (menu.getPermsType() == null) {
+ continue;
+ }
+
+ String perms = menu.getApiPerms();
+ if (StringUtils.isEmpty(perms)) {
+ continue;
+ }
+ //接口权限
+ String[] split = perms.split(",");
+ permissionSet.addAll(Arrays.asList(split));
+ }
+ userPermission.getPermissionList().addAll(permissionSet);
+
+ return userPermission;
+ }
+
+
+ @CacheEvict(value = {AdminCacheConst.Login.USER_PERMISSION, AdminCacheConst.Login.REQUEST_EMPLOYEE}, allEntries = true)
+ public void clear(){
+
+ }
+
+
+}
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java
index 27bbc71b..c5fa8c7d 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java
@@ -6,17 +6,16 @@ import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.extra.servlet.JakartaServletUtil;
-import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
-import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO;
import net.lab1024.sa.admin.module.system.department.service.DepartmentService;
import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity;
import net.lab1024.sa.admin.module.system.employee.service.EmployeeService;
import net.lab1024.sa.admin.module.system.login.domain.LoginForm;
import net.lab1024.sa.admin.module.system.login.domain.LoginResultVO;
import net.lab1024.sa.admin.module.system.login.domain.RequestEmployee;
+import net.lab1024.sa.admin.module.system.login.manager.LoginManager;
import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuVO;
import net.lab1024.sa.admin.module.system.role.domain.vo.RoleVO;
import net.lab1024.sa.admin.module.system.role.service.RoleEmployeeService;
@@ -48,21 +47,22 @@ import net.lab1024.sa.base.module.support.mail.MailService;
import net.lab1024.sa.base.module.support.mail.constant.MailTemplateCodeEnum;
import net.lab1024.sa.base.module.support.redis.RedisService;
import net.lab1024.sa.base.module.support.securityprotect.domain.LoginFailEntity;
-import net.lab1024.sa.base.module.support.securityprotect.service.*;
-import org.apache.commons.lang3.BooleanUtils;
-import org.apache.commons.lang3.StringUtils;
+import net.lab1024.sa.base.module.support.securityprotect.service.Level3ProtectConfigService;
+import net.lab1024.sa.base.module.support.securityprotect.service.SecurityLoginService;
+import net.lab1024.sa.base.module.support.securityprotect.service.SecurityPasswordService;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
-import java.util.*;
-import java.util.concurrent.ConcurrentMap;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
import java.util.stream.Collectors;
/**
* 登录
*
- * @Author 1024创新实验室: 开云
- * @Date 2021-12-01 22:56:34
+ * @Author 1024创新实验室: 卓大
+ * @Date 2025-05-03 22:56:34
* @Wechat zhuoda1024
* @Email lab1024@163.com
* @Copyright 1024创新实验室
@@ -76,22 +76,6 @@ public class LoginService implements StpInterface {
*/
private static final String SUPER_PASSWORD_LOGIN_ID_PREFIX = "S";
- /**
- * 最大在线缓存人数
- */
- private static final long CACHE_MAX_ONLINE_PERSON_COUNT = 1000L;
-
- /**
- * 登录信息二级缓存
- */
- private final ConcurrentMap loginEmployeeCache = new ConcurrentLinkedHashMap.Builder().maximumWeightedCapacity(CACHE_MAX_ONLINE_PERSON_COUNT).build();
-
-
- /**
- * 权限 缓存
- */
- private final ConcurrentMap permissionCache = new ConcurrentLinkedHashMap.Builder().maximumWeightedCapacity(CACHE_MAX_ONLINE_PERSON_COUNT).build();
-
@Resource
private EmployeeService employeeService;
@@ -134,6 +118,9 @@ public class LoginService implements StpInterface {
@Resource
private RedisService redisService;
+ @Resource
+ private LoginManager loginManager;
+
/**
* 获取验证码
*/
@@ -224,10 +211,7 @@ public class LoginService implements StpInterface {
}
// 获取员工信息
- RequestEmployee requestEmployee = loadLoginInfo(employeeEntity);
-
- // 放入缓存
- loginEmployeeCache.put(employeeEntity.getEmployeeId(), requestEmployee);
+ RequestEmployee requestEmployee = loginManager.loadLoginInfo(employeeEntity);
// 移除登录失败
securityLoginService.removeLoginFail(employeeEntity.getEmployeeId(), UserTypeEnum.ADMIN_EMPLOYEE);
@@ -242,8 +226,8 @@ public class LoginService implements StpInterface {
// 设置 token
loginResultVO.setToken(token);
- // 清除权限缓存
- permissionCache.remove(employeeEntity.getEmployeeId());
+ // 更新用户权限
+ loginManager.loadUserPermission(employeeEntity.getEmployeeId());
return ResponseDTO.ok(loginResultVO);
}
@@ -262,10 +246,6 @@ public class LoginService implements StpInterface {
List menuAndPointsList = roleMenuService.getMenuList(roleList.stream().map(RoleVO::getRoleId).collect(Collectors.toList()), requestEmployee.getAdministratorFlag());
loginResultVO.setMenuList(menuAndPointsList);
- // 更新下后端权限缓存
- UserPermission userPermission = getUserPermission(requestEmployee.getUserId());
- permissionCache.put(requestEmployee.getUserId(), userPermission);
-
// 上次登录信息
LoginLogVO loginLogVO = loginLogService.queryLastByUserId(requestEmployee.getEmployeeId(), UserTypeEnum.ADMIN_EMPLOYEE, LoginLogResultEnum.LOGIN_SUCCESS);
if (loginLogVO != null) {
@@ -289,32 +269,6 @@ public class LoginService implements StpInterface {
}
- /**
- * 获取登录的用户信息
- */
- private RequestEmployee loadLoginInfo(EmployeeEntity employeeEntity) {
-
- // 基础信息
- RequestEmployee requestEmployee = SmartBeanUtil.copy(employeeEntity, RequestEmployee.class);
- requestEmployee.setUserType(UserTypeEnum.ADMIN_EMPLOYEE);
-
- // 部门信息
- DepartmentVO department = departmentService.getDepartmentById(employeeEntity.getDepartmentId());
- requestEmployee.setDepartmentName(null == department ? StringConst.EMPTY : department.getName());
-
- // 头像信息
- String avatar = employeeEntity.getAvatar();
- if (StringUtils.isNotBlank(avatar)) {
- ResponseDTO getFileUrl = fileStorageService.getFileUrl(avatar);
- if (BooleanUtils.isTrue(getFileUrl.getOk())) {
- requestEmployee.setAvatar(getFileUrl.getData());
- }
- }
-
- return requestEmployee;
- }
-
-
/**
* 根据登陆token 获取员请求工信息
*/
@@ -328,17 +282,7 @@ public class LoginService implements StpInterface {
return null;
}
- RequestEmployee requestEmployee = loginEmployeeCache.get(requestEmployeeId);
- if (requestEmployee == null) {
- // 员工基本信息
- EmployeeEntity employeeEntity = employeeService.getById(requestEmployeeId);
- if (employeeEntity == null) {
- return null;
- }
-
- requestEmployee = this.loadLoginInfo(employeeEntity);
- loginEmployeeCache.put(requestEmployeeId, requestEmployee);
- }
+ RequestEmployee requestEmployee = loginManager.getRequestEmployee(requestEmployeeId);
// 更新请求ip和user agent
requestEmployee.setUserAgent(JakartaServletUtil.getHeaderIgnoreCase(request, RequestHeaderConst.USER_AGENT));
@@ -382,7 +326,7 @@ public class LoginService implements StpInterface {
StpUtil.logout();
// 清空登录信息缓存
- loginEmployeeCache.remove(requestUser.getUserId());
+ loginManager.clear();
//保存登出日志
LoginLogEntity loginEntity = LoginLogEntity.builder()
@@ -400,14 +344,6 @@ public class LoginService implements StpInterface {
return ResponseDTO.ok();
}
- /**
- * 清除员工登录缓存
- */
- public void clearLoginEmployeeCache(Long employeeId) {
- // 清空登录信息缓存
- loginEmployeeCache.remove(employeeId);
- }
-
/**
* 保存登录日志
*/
@@ -435,12 +371,7 @@ public class LoginService implements StpInterface {
return Collections.emptyList();
}
- UserPermission userPermission = permissionCache.get(employeeId);
- if (userPermission == null) {
- userPermission = getUserPermission(employeeId);
- permissionCache.put(employeeId, userPermission);
- }
-
+ UserPermission userPermission = loginManager.getUserPermission(employeeId);
return userPermission.getPermissionList();
}
@@ -451,51 +382,10 @@ public class LoginService implements StpInterface {
return Collections.emptyList();
}
- UserPermission userPermission = permissionCache.get(employeeId);
- if (userPermission == null) {
- userPermission = getUserPermission(employeeId);
- permissionCache.put(employeeId, userPermission);
- }
+ UserPermission userPermission = loginManager.getUserPermission(employeeId);
return userPermission.getRoleList();
}
- /**
- * 获取用户的权限(包含 角色列表、权限列表)
- */
- private UserPermission getUserPermission(Long employeeId) {
-
- UserPermission userPermission = new UserPermission();
- userPermission.setPermissionList(new ArrayList<>());
- userPermission.setRoleList(new ArrayList<>());
-
- // 角色列表
- List roleList = roleEmployeeService.getRoleIdList(employeeId);
- userPermission.getRoleList().addAll(roleList.stream().map(RoleVO::getRoleCode).collect(Collectors.toSet()));
-
- // 前端菜单和功能点清单
- EmployeeEntity employeeEntity = employeeService.getById(employeeId);
-
- List menuAndPointsList = roleMenuService.getMenuList(roleList.stream().map(RoleVO::getRoleId).collect(Collectors.toList()), employeeEntity.getAdministratorFlag());
-
- // 权限列表
- HashSet permissionSet = new HashSet<>();
- for (MenuVO menu : menuAndPointsList) {
- if (menu.getPermsType() == null) {
- continue;
- }
-
- String perms = menu.getApiPerms();
- if (StringUtils.isEmpty(perms)) {
- continue;
- }
- //接口权限
- String[] split = perms.split(",");
- permissionSet.addAll(Arrays.asList(split));
- }
- userPermission.getPermissionList().addAll(permissionSet);
-
- return userPermission;
- }
/**
* 发送 邮箱 验证码
@@ -590,4 +480,8 @@ public class LoginService implements StpInterface {
String redisVerificationCodeKey = redisService.generateRedisKey(RedisKeyConst.Support.LOGIN_VERIFICATION_CODE, UserTypeEnum.ADMIN_EMPLOYEE.getValue() + RedisKeyConst.SEPARATOR + employeeId);
redisService.delete(redisVerificationCodeKey);
}
+
+ public void clearLoginEmployeeCache(Long employeeId) {
+ loginManager.clear();
+ }
}
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java
index 6e2d9751..ba33dfd2 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java
@@ -3,11 +3,7 @@ package net.lab1024.sa.admin.module.system.role.manager;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.lab1024.sa.admin.module.system.role.dao.RoleEmployeeDao;
import net.lab1024.sa.admin.module.system.role.domain.entity.RoleEmployeeEntity;
-import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
/**
* 角色员工 manager
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml b/smart-admin-api-java17-springboot3/sa-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml
index 326d94f5..8ee2974d 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml
@@ -19,5 +19,16 @@
WHERE parent_id = #{departmentId}
+
+
\ No newline at end of file
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/common/annoation/DataSource.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/common/annoation/DataSource.java
deleted file mode 100644
index 140aa7c6..00000000
--- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/common/annoation/DataSource.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package net.lab1024.sa.base.common.annoation;
-
-import net.lab1024.sa.base.constant.DataSourceTypeEnum;
-
-import java.lang.annotation.*;
-
-/**
- * 切换数据源名称
- *
- * @Author 钟家兴
- * @Date 2025-05-01 14:49
- * @Wechat JavaerEngineer
- * @Email lab1024@163.com
- * @Copyright 1024创新实验室
- */
-@Target({ElementType.METHOD, ElementType.TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Inherited
-public @interface DataSource {
-
- /**
- * 切换数据源名称
- */
- public DataSourceTypeEnum value() default DataSourceTypeEnum.SLAVE;
-}
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/common/aspect/DataSourceAspect.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/common/aspect/DataSourceAspect.java
deleted file mode 100644
index 1e31e254..00000000
--- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/common/aspect/DataSourceAspect.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package net.lab1024.sa.base.common.aspect;
-
-import net.lab1024.sa.base.common.annoation.DataSource;
-import net.lab1024.sa.base.handler.DynamicDataSourceContextHandler;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.springframework.core.annotation.AnnotationUtils;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import java.util.Objects;
-
-/**
- * 多数据源处理
- *
- * @Author 钟家兴
- * @Date 2025-05-01 14:49
- * @Wechat JavaerEngineer
- * @Email lab1024@163.com
- * @Copyright 1024创新实验室
- */
-@Aspect
-@Order(1)
-@Component
-public class DataSourceAspect {
-
- /**
- * aop切点,有相关注解的方法才做增强处理
- */
- @Pointcut("@annotation(net.lab1024.sa.base.common.annoation.DataSource) || @within(net.lab1024.sa.base.common.annoation.DataSource)")
- public void dsPointCut() {
- }
-
- /**
- * 环绕通知
- */
- @Around("dsPointCut()")
- public Object around(ProceedingJoinPoint point) throws Throwable {
- DataSource dataSource = getDataSource(point);
-
- if (dataSource != null) {
- DynamicDataSourceContextHandler.setDataSourceType(dataSource.value().name());
- }
-
- try {
- return point.proceed();
- } finally {
- DynamicDataSourceContextHandler.clearDataSourceType();
- }
- }
-
- /**
- * 获取需要切换的数据源
- */
- public DataSource getDataSource(ProceedingJoinPoint point) {
- MethodSignature signature = (MethodSignature) point.getSignature();
- DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class);
-
- // 方法注解为空,则取类注解
- if (Objects.nonNull(dataSource)) {
- return dataSource;
- }
-
- return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class);
- }
-}
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/common/domain/UserPermission.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/common/domain/UserPermission.java
index c10897d0..355b9482 100644
--- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/common/domain/UserPermission.java
+++ b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/common/domain/UserPermission.java
@@ -2,6 +2,7 @@ package net.lab1024.sa.base.common.domain;
import lombok.Data;
+import java.io.Serializable;
import java.util.List;
/**
@@ -15,7 +16,7 @@ import java.util.List;
*/
@Data
-public class UserPermission {
+public class UserPermission implements Serializable {
/**
* 权限列表
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/CacheConfig.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/CacheConfig.java
index bf6de16a..356b082c 100644
--- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/CacheConfig.java
+++ b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/CacheConfig.java
@@ -1,11 +1,14 @@
package net.lab1024.sa.base.config;
+import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer;
import net.lab1024.sa.base.module.support.cache.CacheService;
import net.lab1024.sa.base.module.support.cache.CaffeineCacheServiceImpl;
import net.lab1024.sa.base.module.support.cache.RedisCacheServiceImpl;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+import org.springframework.data.redis.serializer.RedisSerializationContext;
/**
* 缓存配置
@@ -19,6 +22,14 @@ public class CacheConfig {
private static final String REDIS_CACHE = "redis";
private static final String CAFFEINE_CACHE = "caffeine";
+ @Bean
+ @ConditionalOnProperty(prefix = "spring.cache", name = {"type"}, havingValue = REDIS_CACHE)
+ public RedisCacheConfiguration redisCacheConfiguration() {
+ return RedisCacheConfiguration.defaultCacheConfig()
+ .disableCachingNullValues()
+ .computePrefixWith(name -> "cache:" + name + ":")
+ .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericFastJsonRedisSerializer()));
+ }
@Bean
@ConditionalOnProperty(prefix = "spring.cache", name = {"type"}, havingValue = REDIS_CACHE)
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/DataSourceConfig.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/DataSourceConfig.java
new file mode 100644
index 00000000..24fdc89d
--- /dev/null
+++ b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/DataSourceConfig.java
@@ -0,0 +1,201 @@
+package net.lab1024.sa.base.config;
+
+import com.alibaba.druid.filter.Filter;
+import com.alibaba.druid.filter.stat.StatFilter;
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.support.jakarta.StatViewServlet;
+import com.alibaba.druid.support.jakarta.WebStatFilter;
+import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
+import lombok.extern.slf4j.Slf4j;
+import net.lab1024.sa.base.common.domain.DataScopePlugin;
+import net.lab1024.sa.base.handler.MybatisPlusFillHandler;
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.springframework.aop.support.DefaultPointcutAdvisor;
+import org.springframework.aop.support.JdkRegexpMethodPointcut;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 数据源配置
+ *
+ * @Author 1024创新实验室-主任: 卓大
+ * @Date 2017-11-28 15:21:10
+ * @Wechat zhuoda1024
+ * @Email lab1024@163.com
+ * @Copyright 1024创新实验室
+ */
+@Slf4j
+@Configuration
+public class DataSourceConfig {
+
+ @Value("${spring.datasource.driver-class-name}")
+ String driver;
+
+ @Value("${spring.datasource.url}")
+ String url;
+
+ @Value("${spring.datasource.username}")
+ String username;
+
+ @Value("${spring.datasource.password}")
+ String password;
+
+ @Value("${spring.datasource.initial-size}")
+ int initialSize;
+
+ @Value("${spring.datasource.min-idle}")
+ int minIdle;
+
+ @Value("${spring.datasource.max-active}")
+ int maxActive;
+
+ @Value("${spring.datasource.max-wait}")
+ long maxWait;
+
+ @Value("${spring.datasource.time-between-eviction-runs-millis}")
+ long timeBetweenEvictionRunsMillis;
+
+ @Value("${spring.datasource.min-evictable-idle-time-millis}")
+ long minEvictableIdleTimeMillis;
+
+ @Value("${spring.datasource.filters}")
+ String filters;
+
+ @Value("${spring.datasource.druid.username}")
+ String druidUserName;
+
+ @Value("${spring.datasource.druid.password}")
+ String druidPassword;
+
+ @Value("${spring.datasource.druid.login.enabled}")
+ boolean druidLoginEnable;
+
+ @Value("${spring.datasource.druid.method.pointcut}")
+ String methodPointcut;
+
+ @jakarta.annotation.Resource
+ private MybatisPlusInterceptor paginationInterceptor;
+
+ @jakarta.annotation.Resource
+ private DataScopePlugin dataScopePlugin;
+
+ @Bean
+ @Primary
+ public DataSource druidDataSource() {
+ DruidDataSource druidDataSource = new DruidDataSource();
+ druidDataSource.setDbType(DbType.MYSQL.getDb());
+ druidDataSource.setDriverClassName(driver);
+ druidDataSource.setUrl(url);
+ druidDataSource.setUsername(username);
+ druidDataSource.setPassword(password);
+ druidDataSource.setInitialSize(initialSize);
+ druidDataSource.setMinIdle(minIdle);
+ druidDataSource.setMaxActive(maxActive);
+ druidDataSource.setMaxWait(maxWait);
+ druidDataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+ druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+ druidDataSource.setValidationQuery("SELECT 1");
+ try {
+ druidDataSource.setFilters(filters);
+ ArrayList arrayList = new ArrayList<>();
+ StatFilter statFilter = new StatFilter();
+ statFilter.setMergeSql(true);
+ statFilter.setSlowSqlMillis(1000);
+ statFilter.setLogSlowSql(true);
+ arrayList.add(statFilter);
+ druidDataSource.setProxyFilters(arrayList);
+ druidDataSource.init();
+ } catch (SQLException e) {
+ log.error("初始化数据源出错", e);
+ }
+
+ return druidDataSource;
+ }
+
+ @Bean
+ public SqlSessionFactory sqlSessionFactory() throws Exception {
+ MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
+ factoryBean.setDataSource(druidDataSource());
+ PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+ Resource[] resources = resolver.getResources("classpath*:/mapper/**/*.xml");
+ factoryBean.setMapperLocations(resources);
+
+ // 设置 MyBatis-Plus 分页插件 注意此处myBatisPlugin一定要放在后面
+ List pluginsList = new ArrayList<>();
+ pluginsList.add(paginationInterceptor);
+ if (dataScopePlugin != null) {
+ pluginsList.add(dataScopePlugin);
+ }
+ factoryBean.setPlugins(pluginsList.toArray(new Interceptor[0]));
+ // 添加字段自动填充处理
+ factoryBean.setGlobalConfig(new GlobalConfig().setBanner(false).setMetaObjectHandler(new MybatisPlusFillHandler()));
+
+ return factoryBean.getObject();
+ }
+
+ /**
+ * 非正式环境 才加载
+ *
+ * @return
+ */
+ @Conditional(SystemEnvironmentConfig.class)
+ @Bean
+ public ServletRegistrationBean druidServlet() {
+ ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean<>();
+ servletRegistrationBean.setServlet(new StatViewServlet());
+ servletRegistrationBean.addUrlMappings("/druid/*");
+ Map initParameters = new HashMap();
+ //不设置用户名密码可以直接通过druid/index.html访问
+ if (druidLoginEnable) {
+ initParameters.put("loginUsername", druidUserName);
+ initParameters.put("loginPassword", druidPassword);
+ }
+ initParameters.put("resetEnable", "false");
+ servletRegistrationBean.setInitParameters(initParameters);
+ return servletRegistrationBean;
+ }
+
+ @Bean
+ public FilterRegistrationBean filterRegistrationBean() {
+ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
+ filterRegistrationBean.setFilter(new WebStatFilter());
+ filterRegistrationBean.addUrlPatterns("/*");
+ filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/*");
+ return filterRegistrationBean;
+ }
+
+ @Bean
+ public JdkRegexpMethodPointcut jdkRegexpMethodPointcut() {
+ JdkRegexpMethodPointcut jdkRegexpMethodPointcut = new JdkRegexpMethodPointcut();
+ jdkRegexpMethodPointcut.setPatterns(methodPointcut);
+ return jdkRegexpMethodPointcut;
+ }
+
+ @Bean
+ public DefaultPointcutAdvisor defaultPointcutAdvisor() {
+ DefaultPointcutAdvisor pointcutAdvisor = new DefaultPointcutAdvisor();
+ pointcutAdvisor.setPointcut(jdkRegexpMethodPointcut());
+ pointcutAdvisor.setAdvice(new DruidStatInterceptor());
+ return pointcutAdvisor;
+ }
+
+}
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/DruidConfig.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/DruidConfig.java
deleted file mode 100644
index bae70ba3..00000000
--- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/DruidConfig.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package net.lab1024.sa.base.config;
-
-import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceBuilder;
-import lombok.extern.slf4j.Slf4j;
-import net.lab1024.sa.base.constant.DataSourceTypeEnum;
-import net.lab1024.sa.base.handler.DynamicDataSourceHandler;
-import net.lab1024.sa.base.properties.DruidProperties;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-
-import javax.sql.DataSource;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Druid 配置多数据源
- *
- * @Author 钟家兴
- * @Date 2025-05-01 14:49
- * @Wechat JavaerEngineer
- * @Email lab1024@163.com
- * @Copyright 1024创新实验室
- */
-@Slf4j
-@Configuration
-public class DruidConfig {
-
- /**
- * 这里以map的方式存储所有的自定义的数据源,其中key是枚举类的字符串值,value是创建好且赋值好的数据源对象
- */
- private static Map