Selaa lähdekoodia

用户管理接口 接口

chejianzheng 3 kuukautta sitten
vanhempi
commit
e14cbabe8c
15 muutettua tiedostoa jossa 228 lisäystä ja 347 poistoa
  1. 8 5
      portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebAdminController.java
  2. 12 9
      portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebClientController.java
  3. 31 0
      portal-service-common/src/main/java/com/hfln/portal/common/request/web/ClientModParam.java
  4. 9 1
      portal-service-domain/src/main/java/com/hfln/portal/domain/customer/OprLogType.java
  5. 1 1
      portal-service-domain/src/main/java/com/hfln/portal/domain/exception/ErrorEnum.java
  6. 12 2
      portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/WebUserGateway.java
  7. 0 15
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/config/SaTokenConfigProperties.java
  8. 0 173
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/config/SaTokenConfigure.java
  9. 0 108
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/config/StpInterfaceImpl.java
  10. 1 1
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebTenantGatewayImpl.java
  11. 111 32
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebUserGatewayImpl.java
  12. 4 0
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/mapper/AdminUserInfoMapper.java
  13. 4 0
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/AdminUserService.java
  14. 23 0
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/impl/AdminUserServiceImpl.java
  15. 12 0
      portal-service-server/src/test/java/com/hfln/portal/test/service/TblDicItemServiceTest.java

+ 8 - 5
portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebAdminController.java

@@ -14,10 +14,7 @@ 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 org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 
@@ -42,7 +39,7 @@ public class WebAdminController {
     @Operation(summary = "超管添加管理员")
     public ApiResult<Void> addManager(@Valid @RequestBody AddAccountParam param) {
 
-        webUserGateway.addAccount(param);
+        webUserGateway.addManager(param);
         return ApiResult.success();
     }
 
@@ -54,5 +51,11 @@ public class WebAdminController {
         return ApiResult.success();
     }
 
+    @GetMapping("/del")
+    @Operation(summary = "超管修改管理员")
+    public ApiResult<Void> delMananger(@RequestParam Long userId) {
 
+        webUserGateway.delMananger(userId);
+        return ApiResult.success();
+    }
 }

+ 12 - 9
portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebClientController.java

@@ -5,8 +5,8 @@ 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.ClientModParam;
 import com.hfln.portal.common.request.web.ClientQueryParam;
 import com.hfln.portal.common.vo.PageRecord;
 import com.hfln.portal.domain.gateway.WebUserGateway;
@@ -14,10 +14,7 @@ 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 org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 
@@ -47,12 +44,18 @@ public class WebClientController {
     }
 
     @PostMapping("/mod")
-    @Operation(summary = "超管添加用户管理员")
-    public ApiResult<Void> modClient(@Valid @RequestBody AddAccountParam param) {
+    @Operation(summary = "超管修改用户管理员信息")
+    public ApiResult<Void> modClient(@Valid @RequestBody ClientModParam param) {
 
-        // todo 逻辑待定
-//        webUserGateway.modManager(param);
+        webUserGateway.modClient(param);
         return ApiResult.success();
     }
 
+    @GetMapping("/del")
+    @Operation(summary = "超管修改用户管理员")
+    public ApiResult<Void> delClient(@RequestParam Long userId) {
+
+        webUserGateway.delClient(userId);
+        return ApiResult.success();
+    }
 }

+ 31 - 0
portal-service-common/src/main/java/com/hfln/portal/common/request/web/ClientModParam.java

@@ -0,0 +1,31 @@
+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 ClientModParam {
+
+    @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 = "电话号码")
+    @NotBlank(message = "电话号码不能为空")
+    private String phone;
+
+    @Schema(description = "用户名")
+    private String userName;
+}

+ 9 - 1
portal-service-domain/src/main/java/com/hfln/portal/domain/customer/OprLogType.java

@@ -7,13 +7,21 @@ package com.hfln.portal.domain.customer;
  * @date 2018-01-08 11:09 AM
  */
 public enum OprLogType {
-    DEL_TENANT_INFO("del_tenant_info", "删除租户楼栋,楼层信息"),
+//    DEL_TENANT_INFO("del_tenant_info", "删除租户楼栋,楼层信息"),
 
 
 
     ADD_TENANT("add_tenant", "添加租户"),
     MOD_TENANT("mod_tenant", "更新租户"),
 
+
+    DEL_MANAGER("del_manager", "删除管理员"),
+    MOD_MANAGER("mod_manager", "修改管理员"),
+    ADD_MANAGER("add_manager", "添加管理员"),
+
+    DEL_CLIENT("del_client", "删除客户"),
+    MOD_CLIENT("mod_client", "修改客户"),
+    ADD_CLIENT("add_client", "添加客户"),
     ;
 
     String code;

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

@@ -39,7 +39,7 @@ public enum ErrorEnum implements ErrorEnumInterface{
     USER_NAME_IS_NULL("30007", "用户名不能为空"),
     PHONE_IS_NULL("30008", "手机号不能为空"),
     USER_INFO_ERROR("30009", "用户信息有误,请联系管理员!"),
-    CREATE_NOT_ALLOWED("30010", "当前用户无权创建!"),
+    OPR_NOT_ALLOWED("30010", "用户禁止当前操作!"),
 
     /**
      * 三方系统调用相关

+ 12 - 2
portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/WebUserGateway.java

@@ -6,13 +6,23 @@ import com.hfln.portal.common.vo.PageRecord;
 
 public interface WebUserGateway {
 
+
+    // 后台管理员 管理用户
     PageRecord<AdminUserDto> queryManager(QueryManagerParam param);
 
-    void addAccount(AddAccountParam param);
+    void addManager(AddAccountParam param);
+
+    void modManager(AdminModParam param);
+
+    void delMananger(Long userId);
 
+
+    // 用户超管 管理用户
     PageRecord<AdminUserDto> queryClient(ClientQueryParam param);
 
     void addClient(ClientAddParam param);
 
-    void modManager(AdminModParam param);
+    void modClient(ClientModParam param);
+
+    void delClient(Long userId);
 }

+ 0 - 15
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/config/SaTokenConfigProperties.java

@@ -1,15 +0,0 @@
-//package com.hfln.portal.infrastructure.config;
-//
-//import lombok.Data;
-//import org.springframework.boot.context.properties.ConfigurationProperties;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.List;
-//
-//@Data
-//@Component
-//@ConfigurationProperties(prefix = "sa-token.config")
-//public class SaTokenConfigProperties {
-//
-//    private List<String> ignoreUrls;
-//}

+ 0 - 173
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/config/SaTokenConfigure.java

@@ -1,173 +0,0 @@
-//package com.hfln.portal.infrastructure.config;
-//
-//import cn.dev33.satoken.filter.SaServletFilter;
-//import cn.dev33.satoken.interceptor.SaInterceptor;
-//import cn.dev33.satoken.router.SaRouter;
-//import cn.dev33.satoken.stp.StpUtil;
-//import cn.dev33.satoken.util.SaResult;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.context.annotation.Bean;
-//import org.springframework.context.annotation.Configuration;
-//import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-//
-//
-///**
-// * [Sa-Token 权限认证] 配置类
-// * @author click33
-// *
-// */
-//@Slf4j
-//@Configuration
-//public class SaTokenConfigure implements WebMvcConfigurer {
-//
-//	@Autowired
-//	private SaTokenConfigProperties saTokenConfigProperties;
-//
-//	/**
-//	 * 注册 Sa-Token 拦截器打开注解鉴权功能
-//	 */
-//	@Override
-//	public void addInterceptors(InterceptorRegistry registry) {
-//		// 注册 Sa-Token 拦截器打开注解鉴权功能
-//		registry.addInterceptor(new SaInterceptor(handle -> {
-//			// SaManager.getLog().debug("----- 请求path={}  提交token={}", SaHolder.getRequest().getRequestPath(), StpUtil.getTokenValue());
-//
-//			// 指定一条 match 规则
-////            SaRouter
-////                .match("/user/**")    // 拦截的 path 列表,可以写多个
-////                .notMatch("/user/doLogin", "/user/doLogin2")     // 排除掉的 path 列表,可以写多个
-////                .check(r -> StpUtil.checkLogin());        // 要执行的校验动作,可以写完整的 lambda 表达式
-////
-////            // 权限校验 -- 不同模块认证不同权限
-////            SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
-////            SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
-////            SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
-////            SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
-////            SaRouter.match("/comment/**", r -> StpUtil.checkPermission("comment"));
-////
-////			// 甚至你可以随意的写一个打印语句
-////			SaRouter.match("/router/print", r -> System.out.println("----啦啦啦----"));
-////
-////			// 写一个完整的 lambda
-////			SaRouter.match("/router/print2", r -> {
-////				System.out.println("----啦啦啦2----");
-////				// ... 其它代码
-////			});
-//
-//			SaRouter
-//					.match("/**")
-//					.notMatch(saTokenConfigProperties.getIgnoreUrls())
-//					.check(r -> StpUtil.checkLogin());
-//
-//			SaRouter.match("/admin/**", r -> StpUtil.checkRole("admin"));
-//
-//
-//			/*
-//			 * 相关路由都定义在 com.pj.cases.use.RouterCheckController 中
-//			 */
-//
-//		}))
-//		.addPathPatterns("/**")
-//		.excludePathPatterns("/error");
-//
-//
-//	}
-//
-//	/**
-//     * 注册 [Sa-Token 全局过滤器]
-//     */
-//    @Bean
-//    public SaServletFilter getSaServletFilter() {
-//        return new SaServletFilter()
-//
-//        		// 指定 [拦截路由] 与 [放行路由]
-//        		.addInclude("/**")//
-//				.setExcludeList(saTokenConfigProperties.getIgnoreUrls())
-////				.addExclude("/favicon.ico")
-//
-//
-//        		// 认证函数: 每次请求执行
-////        		.setAuth(obj -> {
-////        			// System.out.println("---------- sa全局认证 " + SaHolder.getRequest().getRequestPath());
-////        			// SaManager.getLog().debug("----- 请求path={}  提交token={}", SaHolder.getRequest().getRequestPath(), StpUtil.getTokenValue());
-////
-////                    // 权限校验 -- 不同模块认证不同权限
-////        			//		这里你可以写和拦截器鉴权同样的代码,不同点在于:
-////        			// 		校验失败后不会进入全局异常组件,而是进入下面的 .setError 函数
-////                    SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
-////                    SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
-////                    SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
-////                    SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
-////                    SaRouter.match("/comment/**", r -> StpUtil.checkPermission("comment"));
-////        		})
-//
-//        		// 异常处理函数:每次认证函数发生异常时执行此函数
-//        		.setError(e -> {
-////        			System.out.println("---------- sa全局异常 ");
-//					log.error("saServletFilter认证异常:", e);
-//        			return SaResult.error(e.getMessage());
-//        		})
-//
-//        		// 前置函数:在每次认证函数之前执行(BeforeAuth 不受 includeList 与 excludeList 的限制,所有请求都会进入)
-////        		.setBeforeAuth(r -> {
-////        			// ---------- 设置一些安全响应头 ----------
-////        			SaHolder.getResponse()
-////        			// 服务器名称
-////        			.setServer("sa-server")
-////        			// 是否可以在iframe显示视图: DENY=不可以 | SAMEORIGIN=同域下可以 | ALLOW-FROM uri=指定域名下可以
-////        			.setHeader("X-Frame-Options", "SAMEORIGIN")
-////        			// 是否启用浏览器默认XSS防护: 0=禁用 | 1=启用 | 1; mode=block 启用, 并在检查到XSS攻击时,停止渲染页面
-////        			.setHeader("X-XSS-Protection", "1; mode=block")
-////        			// 禁用浏览器内容嗅探
-////        			.setHeader("X-Content-Type-Options", "nosniff")
-////        			;
-////        		})
-//        		;
-//    }
-//
-////	/**
-////	 * CORS 跨域处理
-////	 */
-////	@Bean
-////	public SaCorsHandleFunction corsHandle() {
-////		return (req, res, sto) -> {
-////			res.
-////					// 允许指定域访问跨域资源
-////							setHeader("Access-Control-Allow-Origin", "*")
-////					// 允许所有请求方式
-////					.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE")
-////					// 有效时间
-////					.setHeader("Access-Control-Max-Age", "3600")
-////					// 允许的header参数
-////					.setHeader("Access-Control-Allow-Headers", "*");
-////
-////			// 如果是预检请求,则立即返回到前端
-////			SaRouter.match(SaHttpMethod.OPTIONS)
-////					.free(r -> System.out.println("--------OPTIONS预检请求,不做处理"))
-////					.back();
-////		};
-////	}
-//
-////	/**
-////     * 重写 Sa-Token 框架内部算法策略
-////     */
-////    @PostConstruct
-////    public void rewriteSaStrategy() {
-////    	// 重写Sa-Token的注解处理器,增加注解合并功能
-////    	SaAnnotationStrategy.instance.getAnnotation = (element, annotationClass) -> {
-////    		return AnnotatedElementUtils.getMergedAnnotation(element, annotationClass);
-////    	};
-////
-////		// 重写 SaCheckELRootMap 扩展函数,增加注解鉴权 EL 表达式可使用的根对象
-////		SaAnnotationStrategy.instance.checkELRootMapExtendFunction = rootMap -> {
-////			System.out.println("--------- 执行 SaCheckELRootMap 增强,目前已包含的的跟对象包括:" + rootMap.keySet());
-////			// 新增 stpUser 根对象,使之可以在表达式中通过 stpUser.checkLogin() 方式进行多账号体系鉴权
-////			rootMap.put("stpUser", StpUserUtil.getStpLogic());
-////		};
-////    }
-//
-//
-//
-//}

+ 0 - 108
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/config/StpInterfaceImpl.java

@@ -1,108 +0,0 @@
-//package com.hfln.portal.infrastructure.config;
-//
-//import cn.dev33.satoken.stp.StpInterface;
-//import com.hfln.portal.infrastructure.po.TblPermission;
-//import com.hfln.portal.infrastructure.po.TblRole;
-//import com.hfln.portal.infrastructure.po.TblRolePermission;
-//import com.hfln.portal.infrastructure.po.TblUserRole;
-//import com.hfln.portal.infrastructure.service.PermissionService;
-//import com.hfln.portal.infrastructure.service.RolePermissionService;
-//import com.hfln.portal.infrastructure.service.RoleService;
-//import com.hfln.portal.infrastructure.service.UserRoleService;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.stereotype.Component;
-//import org.springframework.util.CollectionUtils;
-//
-//import java.util.ArrayList;
-//import java.util.List;
-//import java.util.stream.Collectors;
-//
-///**
-// * 自定义权限认证接口扩展,Sa-Token 将从此实现类获取每个账号拥有的权限码
-// *
-// * @author click33
-// * @since 2022-10-13
-// */
-//@Slf4j
-//@Component    // 打开此注解,保证此类被springboot扫描,即可完成sa-token的自定义权限验证扩展
-//public class StpInterfaceImpl implements StpInterface {
-//
-//
-//	@Autowired
-//	private RoleService roleService;
-//
-//	@Autowired
-//	private RolePermissionService rolePermissionService;
-//
-//	@Autowired
-//	private PermissionService permissionService;
-//
-//	@Autowired
-//	private UserRoleService userRoleService;
-//
-//	/**
-//	 * 返回一个账号所拥有的权限码集合
-//	 */
-//	@Override
-//	public List<String> getPermissionList(Object loginIdObj, String loginType) {
-//
-//		List<String> list = new ArrayList<String>();
-//		// todo 后期接口调用次数大的话,可以放redis ,再加更新操作
-//		long loginId = Long.parseLong(String.valueOf(loginIdObj));
-//
-//		List<TblUserRole> userRoles = userRoleService.findByUserId((long)loginId);
-//		if (CollectionUtils.isEmpty(userRoles)) {
-//			log.info("当前用户没有配置角色,userId:{}", loginId);
-//			return list;
-//		}
-//
-//		List<Long> userIds = userRoles.stream().map(TblUserRole::getRoleId).collect(Collectors.toList());
-//		List<TblRole> roles = roleService.findAvailableByIds(userIds);
-//		if (CollectionUtils.isEmpty(roles)) {
-//			log.info("角色配置异常, userIds :{}", roles);
-//			return list;
-//		}
-//
-//		List<Long> roleIds = roles.stream().map(TblRole::getRoleId).collect(Collectors.toList());
-//		List<TblRolePermission> rolePermissions = rolePermissionService.findByRoleIds(roleIds);
-//		if (CollectionUtils.isEmpty(rolePermissions)) {
-//			log.info("当前角色没有配置权限,roleIds:{}", roleIds);
-//			return list;
-//		}
-//
-//		List<Long> permIds = rolePermissions.stream().map(TblRolePermission::getPermId).collect(Collectors.toList());
-//		List<TblPermission> permissionList = permissionService.findAvailableByIds(permIds);
-//		if (CollectionUtils.isEmpty(permissionList)) {
-//			log.info("权限配置异常, permIds :{}", permIds);
-//			return list;
-//		}
-//
-//		list.addAll(permissionList.stream().map(TblPermission::getPermCode).collect(Collectors.toList()));
-//		return list;
-//	}
-//
-//	/**
-//	 * 返回一个账号所拥有的角色标识集合
-//	 */
-//	@Override
-//	public List<String> getRoleList(Object loginIdObj, String loginType) {
-//
-//		List<String> list = new ArrayList<String>();
-//		long loginId = Long.parseLong(String.valueOf(loginIdObj));
-//		List<TblUserRole> userRoles = userRoleService.findByUserId(loginId);
-//		if (CollectionUtils.isEmpty(userRoles)) {
-//			log.info("当前用户没有配置角色,userId:{}", loginId);
-//			return list;
-//		}
-//
-//		List<Long> userIds = userRoles.stream().map(TblUserRole::getRoleId).collect(Collectors.toList());
-//		List<TblRole> roles = roleService.findAvailableByIds(userIds);
-//		if (CollectionUtils.isEmpty(roles)) {
-//			log.info("角色配置异常, userIds :{}", roles);
-//			return list;
-//		}
-//		list.addAll(roles.stream().map(TblRole::getRoleCode).collect(Collectors.toList()));
-//		return list;
-//	}
-//}

+ 1 - 1
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebTenantGatewayImpl.java

@@ -132,7 +132,7 @@ public class WebTenantGatewayImpl implements WebTenantGateway {
         if (byId == null) {
             throw new BizException(ErrorEnum.DATA_NOT_EXISTS.getErrorCode(), ErrorEnum.DATA_NOT_EXISTS.getErrorMessage());
         }
-        tblOprLogService.saveLog(OprLogType.DEL_TENANT_INFO.getCode(), byId);
+//        tblOprLogService.saveLog(OprLogType.DEL_TENANT_INFO.getCode(), byId);
 
         tblTenantInfoService.delById(tinfoId);
     }

+ 111 - 32
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebUserGatewayImpl.java

@@ -9,6 +9,7 @@ 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.OprLogType;
 import com.hfln.portal.domain.customer.util.CopyUtils;
 import com.hfln.portal.domain.customer.util.PasswordUtil;
 import com.hfln.portal.domain.exception.ErrorEnum;
@@ -17,9 +18,11 @@ 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.TblOprLogService;
 import com.hfln.portal.infrastructure.service.TblRoleService;
 import com.hfln.portal.infrastructure.service.TblUserRoleService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -39,6 +42,8 @@ public class WebUserGatewayImpl implements WebUserGateway {
     private TblUserRoleService tblUserRoleService;
     @Autowired
     private TblRoleService tblRoleService;
+    @Autowired
+    private TblOprLogService logService;
 
     @Override
     public PageRecord<AdminUserDto> queryManager(QueryManagerParam param) {
@@ -59,7 +64,7 @@ public class WebUserGatewayImpl implements WebUserGateway {
 
     @Override
     @Transactional
-    public void addAccount(AddAccountParam param) {
+    public void addManager(AddAccountParam param) {
         // 1. 检查账号是否已存在
         AdminUserInfo exist = adminUserService.queryByAccount(param.getAccount());
         if (Objects.nonNull(exist)) {
@@ -89,6 +94,69 @@ public class WebUserGatewayImpl implements WebUserGateway {
         userRole.setUserId(adminUserInfo.getUserId());
         userRole.setRoleId(param.getRoleId());
         tblUserRoleService.save(userRole);
+
+        logService.saveLog(OprLogType.ADD_MANAGER.getCode(), adminUserInfo);
+    }
+
+    @Override
+    @Transactional
+    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());
+
+        logService.saveLog(OprLogType.MOD_MANAGER.getCode(), exist);
+        //2.更新用户信息到 admin_user_info 表
+        //更新密码
+        BeanUtils.copyProperties(param, exist, "userId");
+        exist.setPassword(PasswordUtil.encrypt(param.getPassword()));
+//        adminUserService.updateById(exist);
+        adminUserService.updateAllById(exist);
+
+        //3.更新用户角色到 tbl_user_role 表
+        TblUserRole userRole = tblUserRoleService.getByUserId(exist.getUserId());
+        if (Objects.isNull(userRole)) {
+            userRole = new TblUserRole();
+            userRole.setUserId(exist.getUserId());
+        }
+        userRole.setRoleId(param.getRoleId());
+        tblUserRoleService.saveOrUpdate(userRole);
+    }
+
+    @Override
+    @Transactional
+    public void delMananger(Long userId) {
+        // 1. 根据用户ID查询现有用户信息
+        AdminUserInfo exist = adminUserService.getById(userId);
+        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());
+        }
+        check(userType, exist.getUserType());
+
+        logService.saveLog(OprLogType.DEL_MANAGER.getCode(), exist);
+        adminUserService.deleteById(exist.getUserId());
     }
 
     @Override
@@ -136,57 +204,68 @@ public class WebUserGatewayImpl implements WebUserGateway {
         userRole.setUserId(adminUserInfo.getUserId());
         userRole.setRoleId(tblRole.getRoleId());
         tblUserRoleService.save(userRole);
+
+        logService.saveLog(OprLogType.ADD_CLIENT.getCode(), adminUserInfo);
     }
 
     @Override
-    public void modManager(AdminModParam param) {
+    public void modClient(ClientModParam 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());
+        }
+
+        logService.saveLog(OprLogType.MOD_CLIENT.getCode(), exist);
+        //2.保存新用户到 admin_user_info 表
+        BeanUtils.copyProperties(param, exist, "userId");
+        exist.setPassword(PasswordUtil.encrypt(param.getPassword()));
+        exist.setUserType(AdminUserType.USER_MANAGER.getCode());
+        adminUserService.save(exist);
+
+        //3.保存用户角色到 tbl_user_role 表
+        TblRole tblRole = tblRoleService.queryByRoleCode(UserConstants.ROLE_USER_MANAGER_DEFAULT);
+        TblUserRole userRole = new TblUserRole();
+        userRole.setUserId(exist.getUserId());
+        userRole.setRoleId(tblRole.getRoleId());
+        tblUserRoleService.save(userRole);
+    }
+
+    @Override
+    public void delClient(Long userId) {
 
         // 1. 根据用户ID查询现有用户信息
-        AdminUserInfo exist = adminUserService.getById(param.getUserId());
+        AdminUserInfo exist = adminUserService.getById(userId);
         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());
+        if (AdminUserType.USER_ADMIN.getCode().equals(userType)) {
+            throw new BizException(ErrorEnum.OPR_NOT_ALLOWED.getErrorCode(), ErrorEnum.OPR_NOT_ALLOWED.getErrorMessage());
         }
-        adminUserInfo.setUserType(param.getUserType());
-        adminUserService.updateById(adminUserInfo);
+        check(userType, exist.getUserType());
 
-        //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);
+        logService.saveLog(OprLogType.DEL_MANAGER.getCode(), exist);
+        adminUserService.deleteById(exist.getUserId());
     }
 
+
     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());
+                throw new BizException(ErrorEnum.OPR_NOT_ALLOWED.getErrorCode(), ErrorEnum.OPR_NOT_ALLOWED.getErrorMessage());
             }
 
         }

+ 4 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/mapper/AdminUserInfoMapper.java

@@ -2,6 +2,7 @@ package com.hfln.portal.infrastructure.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.hfln.portal.infrastructure.po.AdminUserInfo;
+import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Mapper;
 
 
@@ -10,4 +11,7 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface AdminUserInfoMapper extends BaseMapper<AdminUserInfo> {
+
+    @Delete("DELETE FROM admin_user_info WHERE userId = #{userId}")
+    int delById(Long userId);
 }

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

@@ -17,4 +17,8 @@ public interface AdminUserService extends IService<AdminUserInfo> {
     Page<AdminUserInfo> queryList(QueryManagerParam param);
 
     Page<AdminUserInfo> queryClientList(ClientQueryParam param, Long tenantId);
+
+    int deleteById(Long userId);
+
+    void updateAllById(AdminUserInfo adminUserInfo);
 }

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

@@ -1,6 +1,7 @@
 package com.hfln.portal.infrastructure.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.hfln.portal.common.request.web.ClientQueryParam;
@@ -106,4 +107,26 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserInfoMapper, Admin
         queryWrapper.orderByDesc(AdminUserInfo::getCreateTime);
         return this.baseMapper.selectPage(page, queryWrapper);
     }
+
+    @Override
+    public int deleteById(Long userId) {
+        return this.baseMapper.delById(userId);
+    }
+
+    @Override
+    public void updateAllById(AdminUserInfo adminUserInfo) {
+
+        // 生成一个用 updatewrapper 全量更新 的代码
+        UpdateWrapper<AdminUserInfo> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda()
+                .eq(AdminUserInfo::getIsDeleted, BasePO.DeleteFlag.NOT_DELETED)
+                .eq(AdminUserInfo::getUserId, adminUserInfo.getUserId())
+                .set(AdminUserInfo::getTenantId, adminUserInfo.getTenantId())
+                .set(AdminUserInfo::getUserType, adminUserInfo.getUserType())
+                .set(AdminUserInfo::getUserName, adminUserInfo.getUserName())
+                .set(AdminUserInfo::getAccount, adminUserInfo.getAccount())
+                .set(AdminUserInfo::getPassword, adminUserInfo.getPassword())
+                .set(AdminUserInfo::getPhone, adminUserInfo.getPhone());
+        this.baseMapper.update(null, updateWrapper);
+    }
 }

+ 12 - 0
portal-service-server/src/test/java/com/hfln/portal/test/service/TblDicItemServiceTest.java

@@ -58,6 +58,18 @@ public class TblDicItemServiceTest {
     }
 
     @Test
+    public void update() {
+
+        TblDicItem tblDicItem = new TblDicItem();
+        tblDicItem.setItemId(1946019819595919361L);
+        tblDicItem.setDicType("test");
+        tblDicItem.setItemCode("w");
+        tblDicItem.setItemName(null);
+        int i = tblDicItemMapper.updateById(tblDicItem);
+        System.out.println(JSON.toJSONString(i, JSONWriter.Feature.PrettyFormat));
+    }
+
+    @Test
     public void del() {
 
         int i = tblDicItemMapper.deleteById(1946019819595919361L);