From e279700113e56f571d3641a2550ce832deffe68a Mon Sep 17 00:00:00 2001 From: thinkgem Date: Thu, 4 Jul 2024 16:45:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=99=84=E5=B1=9E=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E5=88=87=E6=8D=A2=E6=8E=A5=E5=8F=A3=EF=BC=8C=E6=96=B9?= =?UTF-8?q?=E4=BE=BF=E8=8E=B7=E5=8F=96=E5=BD=93=E5=89=8D=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E9=83=A8=E9=97=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeesite/modules/sys/entity/Employee.java | 4 +- .../jeesite/modules/sys/utils/EmpUtils.java | 119 ++++++++++++++++++ .../sys/web/user/EmpUserController.java | 39 ++++++ 3 files changed, 160 insertions(+), 2 deletions(-) diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/entity/Employee.java b/modules/core/src/main/java/com/jeesite/modules/sys/entity/Employee.java index 60691efc..592950e7 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/entity/Employee.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/entity/Employee.java @@ -55,8 +55,8 @@ public class Employee extends DataEntity { private String empNo; // 员工工号 private String empName; // 员工姓名 private String empNameEn; // 员工英文名 - private Office office; // 机构编码 - private Company company; // 公司编码 + private Office office; // 机构对象 + private Company company; // 公司对象 private String postCode; // 根据职位查询 diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/utils/EmpUtils.java b/modules/core/src/main/java/com/jeesite/modules/sys/utils/EmpUtils.java index 3b6d64fd..9a2108e0 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/utils/EmpUtils.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/utils/EmpUtils.java @@ -6,13 +6,18 @@ package com.jeesite.modules.sys.utils; import com.jeesite.common.collect.ListUtils; import com.jeesite.common.collect.SetUtils; +import com.jeesite.common.lang.ObjectUtils; import com.jeesite.common.lang.StringUtils; import com.jeesite.common.utils.SpringUtils; +import com.jeesite.common.web.http.ServletUtils; import com.jeesite.modules.sys.entity.*; import com.jeesite.modules.sys.service.CompanyService; import com.jeesite.modules.sys.service.EmployeeService; import com.jeesite.modules.sys.service.OfficeService; +import org.apache.shiro.session.Session; +import org.springframework.core.NamedThreadLocal; +import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Set; @@ -27,6 +32,10 @@ public class EmpUtils { public static final String CACHE_OFFICE_ALL_LIST = "officeAllList"; public static final String CACHE_COMPANY_ALL_LIST = "companyAllList"; public static final String CACHE_COMPANY_OFFICE_LIST = "employeeOfficeList"; + + // 当前线程部门,没有session环境下使用,优先级低于session + private static final ThreadLocal currentOfficeCode = new NamedThreadLocal<>("CurrentOfficeCode"); + private static final ThreadLocal currentOfficeName = new NamedThreadLocal<>("CurrentOfficeName"); /** * 静态内部类,延迟加载,懒汉式,线程安全的单例模式 @@ -326,4 +335,114 @@ public class EmpUtils { CorpUtils.removeCache(key); } } + + /** + * 获取当前登录用户的部门代码 + * @return + */ + public static String getCurrentOfficeCode() { + String officeCode = StringUtils.EMPTY; + HttpServletRequest request = ServletUtils.getRequest(); + if (request != null){ + officeCode = (String)request.getAttribute("officeCode__"); + } + if (StringUtils.isBlank(officeCode)){ + Session session = UserUtils.getSubject().getSession(false); + if (session != null){ + officeCode = ObjectUtils.toString(session.getAttribute("officeCode")); + }else{ + officeCode = currentOfficeCode.get(); + } + } + if (StringUtils.isBlank(officeCode)){ + officeCode = getOffice().getOfficeCode(); + } + if (request != null){ + request.setAttribute("officeCode__", officeCode); + } + return ObjectUtils.toStringIgnoreNull(officeCode); + } + + /** + * 获取当前登录用户的部门名称 + * @return + */ + public static String getCurrentOfficeName() { + String officeName = StringUtils.EMPTY; + HttpServletRequest request = ServletUtils.getRequest(); + if (request != null){ + officeName = (String)request.getAttribute("officeName__"); + } + if (StringUtils.isBlank(officeName)){ + Session session = UserUtils.getSubject().getSession(false); + if (session != null){ + officeName = ObjectUtils.toString(session.getAttribute("officeName")); + }else{ + officeName = currentOfficeName.get(); + } + } + if (StringUtils.isBlank(officeName)){ + officeName = getOffice().getOfficeName(); + } + if (request != null){ + request.setAttribute("officeName__", officeName); + } + return ObjectUtils.toStringIgnoreNull(officeName); + } + + /** + * 设置当前线程部门,没有session环境下使用,优先级低于session + * @author ThinkGem + */ + public static void setCurrentOffice(String officeCode, String officeName) { + Session session = UserUtils.getSubject().getSession(false); + setCurrentOffice(session, officeCode, officeName); + } + + /** + * 设置当前线程部门,没有session环境下使用,优先级低于session + * @author ThinkGem + */ + public static void setCurrentOffice(Session session, String officeCode, String officeName) { + if (session != null){ + session.setAttribute("officeCode", officeCode); + session.setAttribute("officeName", officeName); + }else{ + currentOfficeCode.set(officeCode); + currentOfficeName.set(officeName); + } + HttpServletRequest request = ServletUtils.getRequest(); + if (request != null){ + request.setAttribute("officeCode__", officeCode); + request.setAttribute("officeName__", officeName); + } + } + + /** + * 移除当前线程部门,没有session环境下使用,优先级低于session + * @author ThinkGem + */ + public static void removeCurrentOffice() { + Session session = UserUtils.getSubject().getSession(false); + removeCurrentOffice(session); + } + + /** + * 移除当前线程部门,没有session环境下使用,优先级低于session + * @author ThinkGem + */ + public static void removeCurrentOffice(Session session) { + if (session != null){ + session.removeAttribute("officeCode"); + session.removeAttribute("officeName"); + }else { + currentOfficeCode.remove(); + currentOfficeName.remove(); + } + HttpServletRequest request = ServletUtils.getRequest(); + if (request != null){ + request.removeAttribute("officeCode__"); + request.removeAttribute("officeName__"); + } + } } diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/web/user/EmpUserController.java b/modules/core/src/main/java/com/jeesite/modules/sys/web/user/EmpUserController.java index a5ef3a83..951365e4 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/web/user/EmpUserController.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/web/user/EmpUserController.java @@ -40,6 +40,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 员工用户Controller @@ -444,5 +445,43 @@ public class EmpUserController extends BaseController { model.addAttribute("empUser", empUser); return "modules/sys/user/empUserSelect"; } + + /** + * 获取当前用户附属部门 + * @return + */ + @RequiresPermissions("user") + @RequestMapping(value = "officeListData") + @ResponseBody + public List officeListData () { + Employee employee = EmpUtils.getEmployee(); + return employeeService.findEmployeeOfficeList(employee); + } + + + /** + * 切换当前用户到附属部门 + * @param officeCode + * @return + */ + @RequiresPermissions("user") + @RequestMapping(value = "switchOffice/{officeCode}") + @ResponseBody + public String switchOffice(@PathVariable String officeCode) { + if (StringUtils.equals(officeCode, "default")) { + Office office = EmpUtils.getOffice(); + EmpUtils.setCurrentOffice(office.getOfficeCode(), office.getOfficeName()); + return renderResult(Global.TRUE, text("部门切换成功!")); + } + List employeeOfficeList = EmpUtils.getEmployeeOfficeList().stream() + .filter(e -> StringUtils.equals(e.getOfficeCode(), officeCode)).collect(Collectors.toList()); + if (!employeeOfficeList.isEmpty()) { + EmployeeOffice office = employeeOfficeList.get(0); + EmpUtils.setCurrentOffice(office.getOfficeCode(), office.getOfficeName()); + return renderResult(Global.TRUE, text("部门切换成功!")); + } else { + return renderResult(Global.FALSE, text("部门切换失败,所切换部门不是您的附属部门!")); + } + } }