Browse Source

用户管理接口 接口

chejianzheng 3 tháng trước cách đây
mục cha
commit
1757420d00
22 tập tin đã thay đổi với 657 bổ sung80 xóa
  1. 23 45
      portal-service-application/src/main/java/com/hfln/portal/application/controller/TestController.java
  2. 58 0
      portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebAdminController.java
  3. 58 0
      portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebClientController.java
  4. 2 23
      portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebUserController.java
  5. 6 2
      portal-service-common/src/main/java/com/hfln/portal/common/constant/UserConstants.java
  6. 55 0
      portal-service-common/src/main/java/com/hfln/portal/common/dto/data/user/AdminUserDto.java
  7. 11 1
      portal-service-common/src/main/java/com/hfln/portal/common/request/web/AddAccountParam.java
  8. 41 0
      portal-service-common/src/main/java/com/hfln/portal/common/request/web/AdminModParam.java
  9. 25 0
      portal-service-common/src/main/java/com/hfln/portal/common/request/web/ClientAddParam.java
  10. 19 0
      portal-service-common/src/main/java/com/hfln/portal/common/request/web/ClientQueryParam.java
  11. 25 0
      portal-service-common/src/main/java/com/hfln/portal/common/request/web/QueryManagerParam.java
  12. 0 1
      portal-service-common/src/main/java/com/hfln/portal/common/vo/BaseDto.java
  13. 41 5
      portal-service-domain/src/main/java/com/hfln/portal/domain/customer/AdminUserType.java
  14. 2 0
      portal-service-domain/src/main/java/com/hfln/portal/domain/exception/ErrorEnum.java
  15. 1 1
      portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/WebGateway.java
  16. 18 0
      portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/WebUserGateway.java
  17. 2 2
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebGatewayImpl.java
  18. 194 0
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebUserGatewayImpl.java
  19. 7 0
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/AdminUserService.java
  20. 1 0
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/TblUserRoleService.java
  21. 59 0
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/impl/AdminUserServiceImpl.java
  22. 9 0
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/impl/TblUserRoleServiceImpl.java

+ 23 - 45
portal-service-application/src/main/java/com/hfln/portal/application/controller/TestController.java

@@ -1,45 +1,23 @@
-//package com.hfln.portal.application.controller;
-//
-//
-//import cn.hfln.framework.catchlog.CatchAndLog;
-//import cn.hfln.framework.dto.ApiResult;
-//import cn.hfln.framework.mqtt.annotation.MqttSubscribe;
-//import cn.hfln.framework.mqtt.template.MqttTemplate;
-//import com.hfln.portal.infrastructure.service.UserService;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.web.bind.annotation.GetMapping;
-//import org.springframework.web.bind.annotation.RestController;
-//
-//@RestController
-//@CatchAndLog
-//@Slf4j
-//public class TestController {
-//
-//
-//    @Autowired
-//    private UserService userService;
-//
-//    @Autowired
-//    private MqttTemplate mqttPublisher;
-//
-//    @GetMapping("/demo")
-//    public ApiResult<Boolean> get() {
-////        UserInfo userInfo = new UserInfo();
-////        userInfo.setPhone("13127529598");
-////        userInfo.setPassword(PasswordUtil.encrypt("123456"));
-////        userInfo.setGender(1);
-////        userInfo.setOpenid("wasdasd2212sada");
-////        userService.save(userInfo);
-//        mqttPublisher.send("test","asdasdsada");
-////        if (-1<0){
-////            throw new BizException(ErrorEnum.ERROR_BIZ_FAIL.getErrorCode(),ErrorEnum.ERROR_BIZ_FAIL.getErrorMessage());
-////        }
-//        return ApiResult.success(userService.checkOpenId("123456"));
-//    }
-//
-//    @MqttSubscribe(topic = "test")
-//    public void test(String topic , String payload){
-//        log.info("topic :{},message:{}",topic,payload);
-//    }
-//}
+package com.hfln.portal.application.controller;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hfln.framework.dto.ApiResult;
+import com.hfln.portal.common.response.user.UserTokenInfo;
+import com.hfln.portal.domain.customer.util.CopyUtils;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/test")
+public class TestController {
+
+    @GetMapping("/getTokenInfo")
+    @Operation(summary = "获取当前token信息(后端测试自用)")
+    public ApiResult<UserTokenInfo> getTokenInfo() {
+
+        return ApiResult.success(CopyUtils.copy(StpUtil.getTokenInfo(), UserTokenInfo.class));
+    }
+}
+

+ 58 - 0
portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebAdminController.java

@@ -0,0 +1,58 @@
+
+package com.hfln.portal.application.controller.web;
+
+
+import cn.hfln.framework.catchlog.CatchAndLog;
+import cn.hfln.framework.dto.ApiResult;
+import com.hfln.portal.common.dto.data.user.AdminUserDto;
+import com.hfln.portal.common.request.web.AddAccountParam;
+import com.hfln.portal.common.request.web.AdminModParam;
+import com.hfln.portal.common.request.web.QueryManagerParam;
+import com.hfln.portal.common.vo.PageRecord;
+import com.hfln.portal.domain.gateway.WebUserGateway;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+@RestController
+@CatchAndLog
+@Tag(name = "web端后台用户管理相关")
+@Slf4j
+@RequestMapping("/web/admin")
+public class WebAdminController {
+
+    @Autowired
+    private WebUserGateway webUserGateway;
+
+    @PostMapping("/query")
+    @Operation(summary = "查询用户")
+    public ApiResult<PageRecord<AdminUserDto>> queryManager(@Valid @RequestBody QueryManagerParam param) {
+
+        return ApiResult.success(webUserGateway.queryManager(param));
+    }
+
+    @PostMapping("/add")
+    @Operation(summary = "超管添加管理员")
+    public ApiResult<Void> addManager(@Valid @RequestBody AddAccountParam param) {
+
+        webUserGateway.addAccount(param);
+        return ApiResult.success();
+    }
+
+    @PostMapping("/mod")
+    @Operation(summary = "超管修改管理员")
+    public ApiResult<Void> modManager(@Valid @RequestBody AdminModParam param) {
+
+        webUserGateway.modManager(param);
+        return ApiResult.success();
+    }
+
+
+}

+ 58 - 0
portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebClientController.java

@@ -0,0 +1,58 @@
+
+package com.hfln.portal.application.controller.web;
+
+
+import cn.hfln.framework.catchlog.CatchAndLog;
+import cn.hfln.framework.dto.ApiResult;
+import com.hfln.portal.common.dto.data.user.AdminUserDto;
+import com.hfln.portal.common.request.web.AddAccountParam;
+import com.hfln.portal.common.request.web.ClientAddParam;
+import com.hfln.portal.common.request.web.ClientQueryParam;
+import com.hfln.portal.common.vo.PageRecord;
+import com.hfln.portal.domain.gateway.WebUserGateway;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+@RestController
+@CatchAndLog
+@Tag(name = "web端客户管理相关")
+@Slf4j
+@RequestMapping("/web/client")
+public class WebClientController {
+
+    @Autowired
+    private WebUserGateway webUserGateway;
+
+    @PostMapping("/query")
+    @Operation(summary = "查询用户")
+    public ApiResult<PageRecord<AdminUserDto>> queryClient(@Valid @RequestBody ClientQueryParam param) {
+
+        return ApiResult.success(webUserGateway.queryClient(param));
+    }
+
+    @PostMapping("/add")
+    @Operation(summary = "超管添加用户管理员")
+    public ApiResult<Void> addClient(@Valid @RequestBody ClientAddParam param) {
+
+        webUserGateway.addClient(param);
+        return ApiResult.success();
+    }
+
+    @PostMapping("/mod")
+    @Operation(summary = "超管添加用户管理员")
+    public ApiResult<Void> modClient(@Valid @RequestBody AddAccountParam param) {
+
+        // todo 逻辑待定
+//        webUserGateway.modManager(param);
+        return ApiResult.success();
+    }
+
+}

+ 2 - 23
portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebUserController.java

@@ -2,15 +2,11 @@
 package com.hfln.portal.application.controller.web;
 
 
-import cn.dev33.satoken.stp.StpUtil;
 import cn.hfln.framework.catchlog.CatchAndLog;
 import cn.hfln.framework.dto.ApiResult;
-import com.hfln.portal.common.request.web.AddAccountParam;
 import com.hfln.portal.common.request.web.AdminResetParam;
 import com.hfln.portal.common.request.web.LoginParam;
 import com.hfln.portal.common.response.admin.AdminLoginRes;
-import com.hfln.portal.common.response.user.UserTokenInfo;
-import com.hfln.portal.domain.customer.util.CopyUtils;
 import com.hfln.portal.domain.gateway.WebGateway;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -22,7 +18,7 @@ import javax.validation.Valid;
 
 @RestController
 @CatchAndLog
-@Tag(name = "web端用户相关")
+@Tag(name = "web端用户登录相关")
 @Slf4j
 @RequestMapping("/web/user")
 public class WebUserController {
@@ -30,7 +26,6 @@ public class WebUserController {
     @Autowired
     private WebGateway webGateway;
 
-
     @PostMapping("/login")
     @Operation(summary = "用户账户密码登录")
     public ApiResult<AdminLoginRes> login(@Valid @RequestBody LoginParam param) {
@@ -38,13 +33,6 @@ public class WebUserController {
         return ApiResult.success(webGateway.login(param));
     }
 
-    @GetMapping("/getTokenInfo")
-    @Operation(summary = "获取当前token信息(后端测试自用)")
-    public ApiResult<UserTokenInfo> getTokenInfo() {
-
-        return ApiResult.success(CopyUtils.copy(StpUtil.getTokenInfo(), UserTokenInfo.class));
-    }
-
     @GetMapping("/logout")
     @Operation(summary = "用户退出登录")
     public ApiResult<Void> logout() {
@@ -62,19 +50,10 @@ public class WebUserController {
     }
 
     @PostMapping("/reset")
-    @Operation(summary = "超管重置密码")
+    @Operation(summary = "用户重置密码")
     public ApiResult<Void> resetPassword(@Valid @RequestBody AdminResetParam param) {
 
         webGateway.reset(param);
         return ApiResult.success();
     }
-
-    @PostMapping("/addManager")
-    @Operation(summary = "超管添加后台管理员用户")
-    public ApiResult<Void> addManager(@Valid @RequestBody AddAccountParam param) {
-
-        webGateway.addAccount(param);
-        return ApiResult.success();
-    }
-
 }

+ 6 - 2
portal-service-common/src/main/java/com/hfln/portal/common/constant/UserConstants.java

@@ -11,8 +11,12 @@ public interface UserConstants {
     String SA_USER_UNION_ID = "user_union_id";
 
     // web端用户
-    String SA_USER_USER_TYPE = "user_type";
-    String SA_USER_USER_NAME = "user_name";
+    String SA_USER_TYPE = "user_type";
+    String SA_USER_NAME = "user_name";
     String SA_USER_TENANT_ID = "user_tenant_id";
     String SA_USER_ACCOUNT = "user_account";
+
+    // 用户默认角色code
+    String ROLE_USER_MANAGER_DEFAULT = "user_manager_default";
+
 }

+ 55 - 0
portal-service-common/src/main/java/com/hfln/portal/common/dto/data/user/AdminUserDto.java

@@ -0,0 +1,55 @@
+package com.hfln.portal.common.dto.data.user;
+
+import com.hfln.portal.common.vo.BaseDto;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 管理用户信息表
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AdminUserDto extends BaseDto {
+
+    @Schema(description = "主键ID,数据库自增策略")
+    private Long userId;
+
+    @Schema(description = "租户ID")
+    private Long tenantId;
+
+    @Schema(description = "用户类型")
+    private String userType;
+
+    @Schema(description = "用户名")
+    private String userName;
+
+    @Schema(description = "账户")
+    private String account;
+
+    @Schema(description = "密码")
+    private String password;
+
+    @Schema(description = "手机号")
+    private String phone;
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 11 - 1
portal-service-common/src/main/java/com/hfln/portal/common/request/web/AddAccountParam.java

@@ -22,7 +22,17 @@ public class AddAccountParam extends BaseVO {
     @Schema(description = "电话号码")
     private String phone;
 
-    @Schema(description = "角色")
+    @Schema(description = "角色id")
     @NotNull(message = "角色不能为空")
     private Long roleId;
+
+    @Schema(description = "租户id")
+    private Long tenantId;
+
+    @Schema(description = "用户类型")
+    @NotBlank(message = "用户类型不能为空")
+    private String userType;
+
+    @Schema(description = "用户名")
+    private String userName;
 }

+ 41 - 0
portal-service-common/src/main/java/com/hfln/portal/common/request/web/AdminModParam.java

@@ -0,0 +1,41 @@
+package com.hfln.portal.common.request.web;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+
+@Data
+public class AdminModParam {
+
+    @Schema(description = "用户ID")
+    @NotNull(message = "用户ID不能为空")
+    private Long userId;
+
+    @Schema(description = "账号")
+    @NotBlank(message = "账号不能为空")
+    private String account;
+
+    @Schema(description = "密码")
+    @NotBlank(message = "密码不能为空")
+    private String password;
+
+    @Schema(description = "电话号码")
+    private String phone;
+
+    @Schema(description = "角色id")
+    @NotNull(message = "角色不能为空")
+    private Long roleId;
+
+    @Schema(description = "租户id")
+    private Long tenantId;
+
+    @Schema(description = "用户类型")
+    @NotBlank(message = "用户类型不能为空")
+    private String userType;
+
+    @Schema(description = "用户名")
+    private String userName;
+}

+ 25 - 0
portal-service-common/src/main/java/com/hfln/portal/common/request/web/ClientAddParam.java

@@ -0,0 +1,25 @@
+package com.hfln.portal.common.request.web;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+
+@Data
+public class ClientAddParam {
+
+    @Schema(description = "账号")
+    @NotBlank(message = "账号不能为空")
+    private String account;
+
+    @Schema(description = "密码")
+    @NotBlank(message = "密码不能为空")
+    private String password;
+
+    @Schema(description = "电话号码")
+    private String phone;
+
+    @Schema(description = "用户名")
+    private String userName;
+}

+ 19 - 0
portal-service-common/src/main/java/com/hfln/portal/common/request/web/ClientQueryParam.java

@@ -0,0 +1,19 @@
+package com.hfln.portal.common.request.web;
+
+import com.hfln.portal.common.vo.PageVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+
+@Data
+public class ClientQueryParam extends PageVo {
+
+    @Schema(description = "账号")
+    private String account;
+
+    @Schema(description = "电话号码")
+    private String phone;
+
+    @Schema(description = "用户名称")
+    private String userName;
+}

+ 25 - 0
portal-service-common/src/main/java/com/hfln/portal/common/request/web/QueryManagerParam.java

@@ -0,0 +1,25 @@
+package com.hfln.portal.common.request.web;
+
+import com.hfln.portal.common.vo.PageVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+
+@Data
+public class QueryManagerParam extends PageVo {
+
+    @Schema(description = "账号")
+    private String account;
+
+    @Schema(description = "电话号码")
+    private String phone;
+
+    @Schema(description = "用户名称")
+    private String userName;
+
+    @Schema(description = "用户类型")
+    private String userType;
+
+    @Schema(description = "租户ID")
+    private Long tenantId;
+}

+ 0 - 1
portal-service-common/src/main/java/com/hfln/portal/common/vo/BaseDto.java

@@ -10,7 +10,6 @@ public class BaseDto implements Serializable {
     @Schema(description = "创建人")
     private Long createId;
 
-
     @Schema(description = "修改人")
     private Long updateId;
 

+ 41 - 5
portal-service-domain/src/main/java/com/hfln/portal/domain/customer/AdminUserType.java

@@ -1,5 +1,8 @@
 package com.hfln.portal.domain.customer;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * 登录设备类型
  *
@@ -7,18 +10,20 @@ package com.hfln.portal.domain.customer;
  * @date 2018-01-08 11:09 AM
  */
 public enum AdminUserType {
-    ADMIN("admin", "超级管理员"),
-    MANAGER("manager", "后台管理员"),
-    USER_ADMIN("user_admin", "用户超级管理员"),
-    USER_MANAGER("user_manager", "用户超级管理员"),
+    ADMIN("admin", "超级管理员", 99),
+    MANAGER("manager", "后台管理员", 90),
+    USER_ADMIN("user_admin", "用户超级管理员", 60),
+    USER_MANAGER("user_manager", "用户管理员", 30),
     ;
 
     String code;
     String desc;
+    int level;
 
-    AdminUserType(String code, String desc) {
+    AdminUserType(String code, String desc, int level) {
         this.code = code;
         this.desc = desc;
+        this.level = level;
     }
 
     public String getCode() {
@@ -36,4 +41,35 @@ public enum AdminUserType {
     public void setDesc(String desc) {
         this.desc = desc;
     }
+
+    public int getLevel() {
+        return level;
+    }
+
+    public void setLevel(int level) {
+        this.level = level;
+    }
+
+    public static AdminUserType getByCode(String code) {
+        for (AdminUserType value : values()) {
+            if (value.code.equals(code)) {
+                return value;
+            }
+        }
+        return null;
+    }
+
+    // 获取用户类型集合
+    public static List<String> getUserTypes() {
+        return Arrays.asList(USER_ADMIN.getCode()
+                , USER_MANAGER.getCode()
+        );
+    }
+
+    // 获取后台管理员用户类型集合
+    public static List<String> getBgManagerTypes() {
+        return Arrays.asList(ADMIN.getCode()
+                , MANAGER.getCode()
+        );
+    }
 }

+ 2 - 0
portal-service-domain/src/main/java/com/hfln/portal/domain/exception/ErrorEnum.java

@@ -38,6 +38,8 @@ public enum ErrorEnum implements ErrorEnumInterface{
     PASSWORD_IS_REPEAT("30006", "新密码与旧密码相同"),
     USER_NAME_IS_NULL("30007", "用户名不能为空"),
     PHONE_IS_NULL("30008", "手机号不能为空"),
+    USER_INFO_ERROR("30009", "用户信息有误,请联系管理员!"),
+    CREATE_NOT_ALLOWED("30010", "当前用户无权创建!"),
 
     /**
      * 三方系统调用相关

+ 1 - 1
portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/WebGateway.java

@@ -40,7 +40,7 @@ public interface WebGateway {
      */
     void reset(AdminResetParam param);
 
-    void addAccount(AddAccountParam param);;
+    void addAccount(AddAccountParam param);
 
 
     /**

+ 18 - 0
portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/WebUserGateway.java

@@ -0,0 +1,18 @@
+package com.hfln.portal.domain.gateway;
+
+import com.hfln.portal.common.dto.data.user.AdminUserDto;
+import com.hfln.portal.common.request.web.*;
+import com.hfln.portal.common.vo.PageRecord;
+
+public interface WebUserGateway {
+
+    PageRecord<AdminUserDto> queryManager(QueryManagerParam param);
+
+    void addAccount(AddAccountParam param);
+
+    PageRecord<AdminUserDto> queryClient(ClientQueryParam param);
+
+    void addClient(ClientAddParam param);
+
+    void modManager(AdminModParam param);
+}

+ 2 - 2
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebGatewayImpl.java

@@ -198,13 +198,13 @@ public class WebGatewayImpl implements WebGateway {
         SaSession saSession = StpUtil.getSession();
         saSession.set(UserConstants.SA_USER_PHONE, adminUser.getPhone());
         saSession.set(UserConstants.SA_USER_ID, adminUser.getUserId());
-        saSession.set(UserConstants.SA_USER_USER_TYPE, adminUser.getUserType());
+        saSession.set(UserConstants.SA_USER_TYPE, adminUser.getUserType());
         saSession.set(UserConstants.SA_USER_ACCOUNT, adminUser.getAccount());
         if (adminUser.getTenantId() != null) {
             saSession.set(UserConstants.SA_USER_TENANT_ID, adminUser.getTenantId());
         }
         if (StringUtils.hasText(adminUser.getUserName())) {
-            saSession.set(UserConstants.SA_USER_USER_NAME, adminUser.getUserName());
+            saSession.set(UserConstants.SA_USER_NAME, adminUser.getUserName());
         }
 
         // 当前用户登录后,需要将当前用户的权限保存到redis,用于网关校验权限

+ 194 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebUserGatewayImpl.java

@@ -0,0 +1,194 @@
+package com.hfln.portal.infrastructure.gateway.impl;
+
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hfln.framework.extension.BizException;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hfln.portal.common.constant.UserConstants;
+import com.hfln.portal.common.dto.data.user.AdminUserDto;
+import com.hfln.portal.common.request.web.*;
+import com.hfln.portal.common.vo.PageRecord;
+import com.hfln.portal.domain.customer.AdminUserType;
+import com.hfln.portal.domain.customer.util.CopyUtils;
+import com.hfln.portal.domain.customer.util.PasswordUtil;
+import com.hfln.portal.domain.exception.ErrorEnum;
+import com.hfln.portal.domain.gateway.WebUserGateway;
+import com.hfln.portal.infrastructure.po.AdminUserInfo;
+import com.hfln.portal.infrastructure.po.TblRole;
+import com.hfln.portal.infrastructure.po.TblUserRole;
+import com.hfln.portal.infrastructure.service.AdminUserService;
+import com.hfln.portal.infrastructure.service.TblRoleService;
+import com.hfln.portal.infrastructure.service.TblUserRoleService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
+import java.util.Objects;
+
+@Service
+@Slf4j
+public class WebUserGatewayImpl implements WebUserGateway {
+
+    @Autowired
+    private AdminUserService adminUserService;
+
+    @Autowired
+    private TblUserRoleService tblUserRoleService;
+    @Autowired
+    private TblRoleService tblRoleService;
+
+    @Override
+    public PageRecord<AdminUserDto> queryManager(QueryManagerParam param) {
+
+        // 对 后台超级管理员 和用户超级管理员 进行权限控制
+        String userType = (String)StpUtil.getSession().get(UserConstants.SA_USER_TYPE);
+        log.info("当前登录用户类型:userType:{}", userType);
+        if (!AdminUserType.getBgManagerTypes().contains(userType)) {
+            throw new BizException(ErrorEnum.USER_INFO_ERROR.getErrorCode(), ErrorEnum.USER_INFO_ERROR.getErrorMessage());
+        }
+
+        // 执行分页查询
+        Page<AdminUserInfo> userInfoPage = adminUserService.queryList(param);
+        // 换为目标VO
+        List<AdminUserDto> targets = CopyUtils.copyList(userInfoPage.getRecords(), AdminUserDto.class);
+        return CopyUtils.copyPage(userInfoPage, targets);
+    }
+
+    @Override
+    @Transactional
+    public void addAccount(AddAccountParam param) {
+        // 1. 检查账号是否已存在
+        AdminUserInfo exist = adminUserService.queryByAccount(param.getAccount());
+        if (Objects.nonNull(exist)) {
+            throw new BizException(ErrorEnum.USER_ALREADY_EXISTS.getErrorCode(), ErrorEnum.USER_ALREADY_EXISTS.getErrorMessage());
+        }
+
+        // 对 后台超级管理员 和用户超级管理员 进行权限控制
+        String userType = (String)StpUtil.getSession().get(UserConstants.SA_USER_TYPE);
+        log.info("当前登录用户类型:userType:{}", userType);
+        if (!AdminUserType.getBgManagerTypes().contains(userType)) {
+            throw new BizException(ErrorEnum.USER_INFO_ERROR.getErrorCode(), ErrorEnum.USER_INFO_ERROR.getErrorMessage());
+        }
+        // 如果创建的用户类型为普通用户,则需要指定租户id
+        if (AdminUserType.getUserTypes().contains(param.getUserType()) && param.getTenantId() == null) {
+            throw new BizException(ErrorEnum.USER_INFO_ERROR.getErrorCode(), ErrorEnum.USER_INFO_ERROR.getErrorMessage());
+        }
+        check(userType, param.getUserType());
+
+        //2.保存新用户到 admin_user_info 表
+        AdminUserInfo adminUserInfo = CopyUtils.copy(param, AdminUserInfo.class);
+        adminUserInfo.setPassword(PasswordUtil.encrypt(param.getPassword()));
+        adminUserInfo.setUserType(param.getUserType());
+        adminUserService.save(adminUserInfo);
+
+        //3.保存用户角色到 tbl_user_role 表
+        TblUserRole userRole = new TblUserRole();
+        userRole.setUserId(adminUserInfo.getUserId());
+        userRole.setRoleId(param.getRoleId());
+        tblUserRoleService.save(userRole);
+    }
+
+    @Override
+    public PageRecord<AdminUserDto> queryClient(ClientQueryParam param) {
+        // 对 后台超级管理员 和用户超级管理员 进行权限控制
+        String userType = (String)StpUtil.getSession().get(UserConstants.SA_USER_TYPE);
+        Long tenantId = (Long)StpUtil.getSession().get(UserConstants.SA_USER_TENANT_ID);
+        log.info("当前登录用户类型:userType:{}, tenantId:{}", userType, tenantId);
+        if (!StringUtils.hasText(userType) || !AdminUserType.USER_ADMIN.getCode().equals(userType) || tenantId == null) {
+            throw new BizException(ErrorEnum.USER_INFO_ERROR.getErrorCode(), ErrorEnum.USER_INFO_ERROR.getErrorMessage());
+        }
+
+        // 执行分页查询
+        Page<AdminUserInfo> userInfoPage = adminUserService.queryClientList(param, tenantId);
+        // 换为目标VO
+        List<AdminUserDto> targets = CopyUtils.copyList(userInfoPage.getRecords(), AdminUserDto.class);
+        return CopyUtils.copyPage(userInfoPage, targets);
+    }
+
+    @Override
+    public void addClient(ClientAddParam param) {
+        // 1. 检查账号是否已存在
+        AdminUserInfo exist = adminUserService.queryByAccount(param.getAccount());
+        if (Objects.nonNull(exist)) {
+            throw new BizException(ErrorEnum.USER_ALREADY_EXISTS.getErrorCode(), ErrorEnum.USER_ALREADY_EXISTS.getErrorMessage());
+        }
+
+        // 对 后台超级管理员 和用户超级管理员 进行权限控制
+        String userType = (String)StpUtil.getSession().get(UserConstants.SA_USER_TYPE);
+        Long tenantId = (Long)StpUtil.getSession().get(UserConstants.SA_USER_TENANT_ID);
+        log.info("当前登录用户类型:userType:{}, tenantId:{}", userType, tenantId);
+        if (!AdminUserType.USER_ADMIN.getCode().equals(userType) || tenantId == null) {
+            throw new BizException(ErrorEnum.USER_ALREADY_EXISTS.getErrorCode(), ErrorEnum.USER_ALREADY_EXISTS.getErrorMessage());
+        }
+
+        //2.保存新用户到 admin_user_info 表
+        AdminUserInfo adminUserInfo = CopyUtils.copy(param, AdminUserInfo.class);
+        adminUserInfo.setPassword(PasswordUtil.encrypt(param.getPassword()));
+        adminUserInfo.setUserType(AdminUserType.USER_MANAGER.getCode());
+        adminUserService.save(adminUserInfo);
+
+        //3.保存用户角色到 tbl_user_role 表
+        TblRole tblRole = tblRoleService.queryByRoleCode(UserConstants.ROLE_USER_MANAGER_DEFAULT);
+        TblUserRole userRole = new TblUserRole();
+        userRole.setUserId(adminUserInfo.getUserId());
+        userRole.setRoleId(tblRole.getRoleId());
+        tblUserRoleService.save(userRole);
+    }
+
+    @Override
+    public void modManager(AdminModParam param) {
+
+        // 1. 根据用户ID查询现有用户信息
+        AdminUserInfo exist = adminUserService.getById(param.getUserId());
+        if (Objects.isNull(exist)) {
+            throw new BizException(ErrorEnum.USER_IS_NOT_EXIST.getErrorCode(), ErrorEnum.USER_IS_NOT_EXIST.getErrorMessage());
+        }
+
+        // 对 后台超级管理员 和用户超级管理员 进行权限控制
+        String userType = (String)StpUtil.getSession().get(UserConstants.SA_USER_TYPE);
+        log.info("当前登录用户类型:userType:{}", userType);
+        if (!AdminUserType.getBgManagerTypes().contains(userType)) {
+            throw new BizException(ErrorEnum.USER_INFO_ERROR.getErrorCode(), ErrorEnum.USER_INFO_ERROR.getErrorMessage());
+        }
+
+        // 如果修改的用户类型为普通用户,则需要指定租户id
+        if (AdminUserType.getUserTypes().contains(param.getUserType()) && param.getTenantId() == null) {
+            throw new BizException(ErrorEnum.USER_INFO_ERROR.getErrorCode(), ErrorEnum.USER_INFO_ERROR.getErrorMessage());
+        }
+        check(userType, param.getUserType());
+
+        //2.更新用户信息到 admin_user_info 表
+        AdminUserInfo adminUserInfo = CopyUtils.copy(param, AdminUserInfo.class);
+        // 如果密码不为空则更新密码
+        if(StringUtils.hasText(param.getPassword())) {
+            adminUserInfo.setPassword(PasswordUtil.encrypt(param.getPassword()));
+        } else {
+            adminUserInfo.setPassword(exist.getPassword());
+        }
+        adminUserInfo.setUserType(param.getUserType());
+        adminUserService.updateById(adminUserInfo);
+
+        //3.更新用户角色到 tbl_user_role 表
+        TblUserRole userRole = tblUserRoleService.getByUserId(param.getUserId());
+        if (Objects.isNull(userRole)) {
+            userRole = new TblUserRole();
+            userRole.setUserId(adminUserInfo.getUserId());
+        }
+        userRole.setRoleId(param.getRoleId());
+        tblUserRoleService.saveOrUpdate(userRole);
+    }
+
+    private void check(String userType, String createdUserType) {
+        AdminUserType currentUserTypeEnum = AdminUserType.getByCode(userType);
+        AdminUserType createdUserTypeEnum = AdminUserType.getByCode(createdUserType);
+        if (createdUserTypeEnum != null) {
+            if (currentUserTypeEnum.getLevel() < createdUserTypeEnum.getLevel()) {
+                throw new BizException(ErrorEnum.CREATE_NOT_ALLOWED.getErrorCode(), ErrorEnum.CREATE_NOT_ALLOWED.getErrorMessage());
+            }
+
+        }
+    }
+}

+ 7 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/AdminUserService.java

@@ -1,6 +1,9 @@
 package com.hfln.portal.infrastructure.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.hfln.portal.common.request.web.ClientQueryParam;
+import com.hfln.portal.common.request.web.QueryManagerParam;
 import com.hfln.portal.infrastructure.po.AdminUserInfo;
 
 public interface AdminUserService extends IService<AdminUserInfo> {
@@ -10,4 +13,8 @@ public interface AdminUserService extends IService<AdminUserInfo> {
     AdminUserInfo queryByPhone(String phone);
 
     AdminUserInfo queryByAccount(String account);
+
+    Page<AdminUserInfo> queryList(QueryManagerParam param);
+
+    Page<AdminUserInfo> queryClientList(ClientQueryParam param, Long tenantId);
 }

+ 1 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/TblUserRoleService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.hfln.portal.infrastructure.po.TblUserRole;
 
 public interface TblUserRoleService extends IService<TblUserRole> {
+    TblUserRole getByUserId(Long userId);
     // 这里可以扩展自定义方法接口
 
 }

+ 59 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/impl/AdminUserServiceImpl.java

@@ -1,7 +1,11 @@
 package com.hfln.portal.infrastructure.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.hfln.portal.common.request.web.ClientQueryParam;
+import com.hfln.portal.common.request.web.QueryManagerParam;
+import com.hfln.portal.domain.customer.AdminUserType;
 import com.hfln.portal.domain.customer.util.PasswordUtil;
 import com.hfln.portal.infrastructure.mapper.AdminUserInfoMapper;
 import com.hfln.portal.infrastructure.po.AdminUserInfo;
@@ -9,6 +13,7 @@ import com.hfln.portal.infrastructure.po.BasePO;
 import com.hfln.portal.infrastructure.service.AdminUserService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 import java.util.Objects;
 
@@ -47,4 +52,58 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserInfoMapper, Admin
         AdminUserInfo userInfo = this.baseMapper.selectOne(queryWrapper);
         return userInfo;
     }
+
+    @Override
+    public Page<AdminUserInfo> queryList(QueryManagerParam queryReq) {
+        Page<AdminUserInfo> page = new Page<>(queryReq.getPageNo(), queryReq.getPageSize());
+
+        // 2. 构建查询条件
+        LambdaQueryWrapper<AdminUserInfo> queryWrapper = new LambdaQueryWrapper<>();
+        // 对queryReq里的字段进行判空
+        if (StringUtils.hasText(queryReq.getUserName())) {
+            queryWrapper.like(AdminUserInfo::getUserName, queryReq.getUserName());
+        }
+        if (StringUtils.hasText(queryReq.getUserType())) {
+            queryWrapper.eq(AdminUserInfo::getUserType, queryReq.getUserType());
+        }
+        if (StringUtils.hasText(queryReq.getPhone())) {
+            queryWrapper.like(AdminUserInfo::getPhone, queryReq.getPhone());
+        }
+        if (StringUtils.hasText(queryReq.getAccount())) {
+            queryWrapper.like(AdminUserInfo::getAccount, queryReq.getAccount());
+        }
+        // 后台管理员
+        if (queryReq.getTenantId() != null) {
+            queryWrapper.eq(AdminUserInfo::getTenantId, queryReq.getTenantId());
+        }
+
+        // 4. 设置排序
+        queryWrapper.orderByDesc(AdminUserInfo::getCreateTime);
+        return this.baseMapper.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public Page<AdminUserInfo> queryClientList(ClientQueryParam queryReq, Long tenantId) {
+        Page<AdminUserInfo> page = new Page<>(queryReq.getPageNo(), queryReq.getPageSize());
+
+        // 2. 构建查询条件
+        LambdaQueryWrapper<AdminUserInfo> queryWrapper = new LambdaQueryWrapper<>();
+        // 对queryReq里的字段进行判空
+        if (StringUtils.hasText(queryReq.getUserName())) {
+            queryWrapper.like(AdminUserInfo::getUserName, queryReq.getUserName());
+        }
+        if (StringUtils.hasText(queryReq.getPhone())) {
+            queryWrapper.like(AdminUserInfo::getPhone, queryReq.getPhone());
+        }
+        if (StringUtils.hasText(queryReq.getAccount())) {
+            queryWrapper.like(AdminUserInfo::getAccount, queryReq.getAccount());
+        }
+
+        queryWrapper.eq(AdminUserInfo::getUserType, AdminUserType.USER_MANAGER.getCode());
+        queryWrapper.eq(AdminUserInfo::getTenantId, tenantId);
+        queryWrapper.eq(AdminUserInfo::getIsDeleted, BasePO.DeleteFlag.NOT_DELETED);
+        // 4. 设置排序
+        queryWrapper.orderByDesc(AdminUserInfo::getCreateTime);
+        return this.baseMapper.selectPage(page, queryWrapper);
+    }
 }

+ 9 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/impl/TblUserRoleServiceImpl.java

@@ -1,7 +1,9 @@
 package com.hfln.portal.infrastructure.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.hfln.portal.infrastructure.mapper.TblUserRoleMapper;
+import com.hfln.portal.infrastructure.po.BasePO;
 import com.hfln.portal.infrastructure.po.TblUserRole;
 import com.hfln.portal.infrastructure.service.TblUserRoleService;
 import lombok.extern.slf4j.Slf4j;
@@ -12,4 +14,11 @@ import org.springframework.stereotype.Service;
 @Slf4j
 public class TblUserRoleServiceImpl extends ServiceImpl<TblUserRoleMapper, TblUserRole> implements TblUserRoleService {
 
+    @Override
+    public TblUserRole getByUserId(Long userId) {
+        LambdaQueryWrapper<TblUserRole> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TblUserRole::getUserId, userId);
+        queryWrapper.eq(TblUserRole::getIsDeleted, BasePO.DeleteFlag.NOT_DELETED);
+        return this.baseMapper.selectOne(queryWrapper);
+    }
 }