Просмотр исходного кода

optimizer: 租户被禁用,租户退出以后重新登录显示禁用,但是下面的业务员依然可以登录APP进行操作,

lipf 5 месяцев назад
Родитель
Сommit
c87831e327

+ 3 - 1
authentication/src/main/java/com/jzg/client/OrganizationClient.java

@@ -4,6 +4,7 @@ import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.user.vo.SysTennatVo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
@@ -13,10 +14,11 @@ public interface OrganizationClient {
     /**
      * 获取用户的租户列表(状态为启用的租户)
      *
+     * @param username 登录用户名
      * @author lipf
      * @date 2026/4/24 18:05
      */
     @PostMapping(value = "/userInfo/getTenantList")
-    HttpResult<List<SysTennatVo>> getTenantList();
+    HttpResult<List<SysTennatVo>> getTenantList(@RequestParam(required = false)String username);
 
 }

+ 40 - 0
authentication/src/main/java/com/jzg/config/FeignAuthInterceptor.java

@@ -0,0 +1,40 @@
+package com.jzg.config;
+
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+
+/**
+ * 服务之间通过Feign进行服务间的调用,将请求头中的认证信息传递给下一个微服务
+ *     todo 目前,请求头中Authentication 中没有值
+ * @author lipf
+ * @date 2026/4/29 14:33
+ */
+@Configuration
+@Component
+public class FeignAuthInterceptor implements RequestInterceptor {
+
+
+    @Override
+    public void apply(RequestTemplate template) {
+        // 1. 获取当前请求的上下文属性
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+
+        if (attributes != null) {
+            HttpServletRequest request = attributes.getRequest();
+            // 2. 提取原始请求头中的 Authentication 信息
+            String authentication = request.getHeader("Authentication");
+
+            // 3. 如果 Authentication 不为空,则将其添加到 Feign 的请求头中
+            if (StringUtils.hasText(authentication)) {
+                template.header("Authentication", authentication);
+            }
+        }
+    }
+}

+ 5 - 4
authentication/src/main/java/com/jzg/config/JzgAuthenticationProvider.java

@@ -1,5 +1,6 @@
 package com.jzg.config;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.json.JSONUtil;
 import com.alipay.api.AlipayApiException;
@@ -143,13 +144,14 @@ public class JzgAuthenticationProvider implements AuthenticationProvider {
             }
             SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfos.get(0);
             if (!sysUserJzgInfo.canLogin()) {
-                log.info("用户被禁用,不能登录。sysUserJzgInfo=[{}]", JSONUtil.toJsonStr(sysUserJzgInfo));
-                throw new SystemException("用户已被禁用,无法登录");
+                log.info("用户被禁用/离职,不能登录。sysUserJzgInfo=[{}]", JSONUtil.toJsonStr(sysUserJzgInfo));
+                throw new SystemException("用户已被禁用/离职,无法登录");
             }
             salt = weblogUser.getSalt();
         }
         // modify by lipf, 用户所属租户如果被禁用,不能登录
-        HttpResult<List<SysTennatVo>> tenants = organizationClient.getTenantList();
+        HttpResult<List<SysTennatVo>> tenants = organizationClient.getTenantList(username);
+        log.info("用户[{}]有[{}]个租户,分别是tenants=[{}]",username, CollUtil.size(tenants.getData()), JSONUtil.toJsonStr(tenants));
         if(CollectionUtil.isEmpty(tenants.getData())){
             log.info("用户[{}]所属的租户已经被禁用,无法登录",username);
             throw new SystemException("用户所属的租户已经被禁用,无法登录");
@@ -161,7 +163,6 @@ public class JzgAuthenticationProvider implements AuthenticationProvider {
                 throw new SystemException("短信验证码错误,请重新输入");
             }
         }else{
-
             // 加密密码和盐值
             String encryptedPassword = PasswordUtils.encode(rawPassword,salt);
 

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/orders/vo/OrderListVo.java

@@ -85,6 +85,9 @@ public class OrderListVo {
     @ExcelProperty("报价时间")
     private LocalDateTime createTime;
 
+    @ExcelProperty("录单人")
+    private String createBy;
+
     //总保费
     @ExcelProperty("总保费")
     private String sumPremium;

+ 2 - 1
commons/src/main/java/com/jzg/commons/entity/po/SysUserJzgInfo.java

@@ -344,11 +344,12 @@ public class SysUserJzgInfo extends BaseModel implements Serializable {
     /**
      * 判断用户是否能登录
      *      启用状态才能登录
+     *      离职 status = 8 也不能登录
      * @author lipf
      * @date 2026/4/22 11:16
      */
     public boolean canLogin(){
-        return this.isEnable != null && this.isEnable == 0;
+        return (this.isEnable != null && this.isEnable == 0) &&  ( this.status != 0 && this.status != 8);
     }
 
     public SysUserJzgInfo(String userName, SysUser user, String systemCode, String deptId){

+ 13 - 3
tenant/organization/src/main/java/com/jzg/organization/controller/UserController.java

@@ -1,5 +1,6 @@
 package com.jzg.organization.controller;
 
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.annotation.IgnoreTenant;
 import com.jzg.commons.aop.OperatorTrajectory;
@@ -20,6 +21,8 @@ import com.jzg.organization.service.SysUserJzgInfoSalesmanService;
 import com.jzg.organization.service.SysUserService;
 import io.swagger.v3.oas.annotations.Operation;
 import jakarta.annotation.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -34,6 +37,9 @@ import java.util.Map;
 @RestController
 @RequestMapping("/userInfo")
 public class UserController extends BaseController {
+
+    private static final Logger log = LoggerFactory.getLogger(UserController.class);
+
     @Resource
     private SysUserService sysUserService;
     @Autowired
@@ -86,7 +92,7 @@ public class UserController extends BaseController {
     @OperatorTrajectory(moduleName = "业务管理/业务员管理/删除成员",type = "D",OperationDict = OperationTypeEnum.DELETE,mapperClass = SysUserJzgInfoMapper.class,entityClass = SysUserVo.class,primary = "ids")
     @Operation(summary = "删除业务员接口", description = "删除业务员接口")
     @PostMapping(value = "/delete")
-    public HttpResult deleteUser(@RequestBody IsDeleteVo isDeleteVo) {
+    public HttpResult<Boolean> deleteUser(@RequestBody IsDeleteVo isDeleteVo) {
         return sysUserService.deleteUserInfo(isDeleteVo);
     }
 
@@ -214,8 +220,12 @@ public class UserController extends BaseController {
     @IgnoreTenant
     @Operation(summary = "获取用户的租户列表",description = "获取用户的租户列表")
     @PostMapping(value = "/getTenantList")
-    public HttpResult<List<SysTennatVo>> getTenantList(){
-        return HttpResult.ok(sysUserService.getTenantList(getUserName()));
+    public HttpResult<List<SysTennatVo>> getTenantList(@RequestParam(required = false)String username){
+        log.info("获取用户的租户列表: username=[{}]",username);
+        if(StrUtil.isBlank(username)){
+            username = getUserName();
+        }
+        return HttpResult.ok(sysUserService.getTenantList(username));
     }
 
     @GetMapping("/setTenantList/{systemCode}")

+ 7 - 1
tenant/organization/src/main/java/com/jzg/organization/service/SysUserService.java

@@ -48,7 +48,13 @@ public interface SysUserService extends IService<SysUser> {
      */
     HttpResult<String> addUserInfo(SysUserVo sysUserVo);
 
-    HttpResult deleteUserInfo(IsDeleteVo isDeleteVo);
+    /**
+     * 删除业务员
+     *
+     * @author lipf
+     * @date 2026/4/29 15:19
+     */
+    HttpResult<Boolean> deleteUserInfo(IsDeleteVo isDeleteVo);
 
     /**
      * 用户的启用/禁用/删除操作

+ 2 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java

@@ -214,6 +214,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             );
         }else if("1".equals(sysUserInfoListVo.getIsMember())){
             // 查询成员
+            log.info("查询成员信息:sysUserInfoListVo=[{}]",JSONUtil.toJsonStr(sysUserInfoListVo)  );
             userInfoList = sysUserJzgInfoMapper.queryMember(page, sysUserInfoListVo);
         }else{
             // 其他场景先使用原来的逻辑
@@ -385,6 +386,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 item.setDefaultValue(true);
             }
         });
+        log.info("获取用户的租户列表: userName=[{}],tenantList=[{}]", userName,JSONUtil.toJsonStr(tenantList));
         return tenantList;
     }