From 3c047a59decf5f65a73ff97d99c109ff54416701 Mon Sep 17 00:00:00 2001 From: lbw Date: Thu, 6 Apr 2023 14:46:24 +0800 Subject: [PATCH] =?UTF-8?q?:recycle:=20Refactoring=20code.=20pigx-app-serv?= =?UTF-8?q?er=20=E9=80=82=E9=85=8D=E6=9C=80=E6=96=B0V5=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pigx/app/api/entity/AppSocialDetails.java | 2 +- .../pigx/app/api/vo/AppRoleExcelVO.java | 61 +++++++++ .../pig4cloud/pigx/app/api/vo/AppUserVo.java | 2 +- .../app/controller/AppMenuController.java | 35 ++++- .../app/controller/AppRoleController.java | 58 +++++++-- .../AppSocialDetailsController.java | 29 +++-- .../app/controller/AppUserController.java | 43 +++++-- .../pigx/app/mapper/AppUserMapper.java | 6 +- .../pigx/app/service/AppRoleService.java | 11 ++ .../pigx/app/service/AppUserService.java | 10 +- .../app/service/impl/AppMenuServiceImpl.java | 7 +- .../app/service/impl/AppRoleServiceImpl.java | 76 +++++++++++ .../app/service/impl/AppUserServiceImpl.java | 120 ++++++++++++++++-- .../main/resources/mapper/AppUserMapper.xml | 39 +++++- 14 files changed, 443 insertions(+), 56 deletions(-) create mode 100644 pigx-app-server/pigx-app-server-api/src/main/java/com/pig4cloud/pigx/app/api/vo/AppRoleExcelVO.java diff --git a/pigx-app-server/pigx-app-server-api/src/main/java/com/pig4cloud/pigx/app/api/entity/AppSocialDetails.java b/pigx-app-server/pigx-app-server-api/src/main/java/com/pig4cloud/pigx/app/api/entity/AppSocialDetails.java index f61781e9d..59f417bda 100644 --- a/pigx-app-server/pigx-app-server-api/src/main/java/com/pig4cloud/pigx/app/api/entity/AppSocialDetails.java +++ b/pigx-app-server/pigx-app-server-api/src/main/java/com/pig4cloud/pigx/app/api/entity/AppSocialDetails.java @@ -69,7 +69,7 @@ public class AppSocialDetails extends Model { /** * app_secret */ - @Sensitive(prefixNoMaskLen = 9, suffixNoMaskLen = 9) + @Sensitive(prefixNoMaskLen = 4, suffixNoMaskLen = 4) @NotBlank(message = "密钥不能为空", groups = { ValidGroup.Insert.class }) @Schema(description = "app secret") private String appSecret; diff --git a/pigx-app-server/pigx-app-server-api/src/main/java/com/pig4cloud/pigx/app/api/vo/AppRoleExcelVO.java b/pigx-app-server/pigx-app-server-api/src/main/java/com/pig4cloud/pigx/app/api/vo/AppRoleExcelVO.java new file mode 100644 index 000000000..1a3827bc3 --- /dev/null +++ b/pigx-app-server/pigx-app-server-api/src/main/java/com/pig4cloud/pigx/app/api/vo/AppRoleExcelVO.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.pigx.app.api.vo; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.pig4cloud.pigx.common.excel.annotation.ExcelLine; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author lengleng + * @date 2020/2/10 + */ +@Data +@Schema(description = "前端角色展示对象") +@ColumnWidth(30) +public class AppRoleExcelVO { + + /** + * 导入时候回显行号 + */ + @ExcelLine + @ExcelIgnore + private Long lineNum; + + /** + * roleName + */ + @ExcelProperty("角色名称") + private String roleName; + + /** + * roleCode + */ + @ExcelProperty("角色标识") + private String roleCode; + + /** + * roleDesc + */ + @ExcelProperty("角色描述") + private String roleDesc; + +} diff --git a/pigx-app-server/pigx-app-server-api/src/main/java/com/pig4cloud/pigx/app/api/vo/AppUserVo.java b/pigx-app-server/pigx-app-server-api/src/main/java/com/pig4cloud/pigx/app/api/vo/AppUserVo.java index 8371b326a..544228732 100644 --- a/pigx-app-server/pigx-app-server-api/src/main/java/com/pig4cloud/pigx/app/api/vo/AppUserVo.java +++ b/pigx-app-server/pigx-app-server-api/src/main/java/com/pig4cloud/pigx/app/api/vo/AppUserVo.java @@ -11,7 +11,7 @@ import java.time.LocalDateTime; import java.util.List; @Data -public class AppUserVo implements Serializable { +public class AppUserVO implements Serializable { /** * 主键 diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppMenuController.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppMenuController.java index b1acfc3f7..7e791c5e7 100644 --- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppMenuController.java +++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppMenuController.java @@ -17,11 +17,15 @@ package com.pig4cloud.pigx.app.controller; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.pig4cloud.pigx.app.api.entity.AppMenu; +import com.pig4cloud.pigx.app.api.entity.AppRole; import com.pig4cloud.pigx.app.service.AppMenuService; import com.pig4cloud.pigx.common.core.util.R; import com.pig4cloud.pigx.common.log.annotation.SysLog; import com.pig4cloud.pigx.common.security.util.SecurityUtils; +import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -96,6 +100,28 @@ public class AppMenuController { return R.ok(appMenuService.getById(id)); } + /** + * 通过permission查询app菜单表 + * @param permission permission + * @return R + */ + @Operation(summary = "通过permission查询", description = "通过permission查询") + @GetMapping("/details/{permission}") + public R getByMenuName(@PathVariable("permission") String permission) { + return R.ok(appMenuService.getOne(Wrappers.lambdaQuery().eq(AppMenu::getPermission, permission))); + } + + /** + * 通过name查询app菜单表 + * @param name name + * @return R + */ + @Operation(summary = "通过name查询", description = "通过name查询") + @GetMapping("/detailsByName/{name}") + public R getByMenuByName(@PathVariable("name") String name) { + return R.ok(appMenuService.getOne(Wrappers.lambdaQuery().eq(AppMenu::getName, name))); + } + /** * 新增菜单 * @param appMenu 菜单信息 @@ -111,14 +137,15 @@ public class AppMenuController { /** * 删除菜单 - * @param id 菜单ID + * @param ids 菜单ID * @return success/false */ @SysLog("删除菜单") - @DeleteMapping("/{id}") + @DeleteMapping @PreAuthorize("@pms.hasPermission('app_appmenu_del')") - public R removeById(@PathVariable Long id) { - return appMenuService.removeMenuById(id); + public R removeById(@RequestBody Long[] ids) { + appMenuService.removeBatchByIds(CollUtil.toList(ids)); + return R.ok(); } /** diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppRoleController.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppRoleController.java index 0aa3dd3a0..3ffa0748c 100644 --- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppRoleController.java +++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppRoleController.java @@ -17,12 +17,17 @@ package com.pig4cloud.pigx.app.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.pig4cloud.pigx.admin.api.vo.RoleExcelVO; import com.pig4cloud.pigx.app.api.entity.AppRole; +import com.pig4cloud.pigx.app.api.entity.AppUser; +import com.pig4cloud.pigx.app.api.vo.AppRoleExcelVO; import com.pig4cloud.pigx.app.api.vo.AppRoleVO; import com.pig4cloud.pigx.app.service.AppRoleService; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.excel.annotation.RequestExcel; import com.pig4cloud.pigx.common.excel.annotation.ResponseExcel; import com.pig4cloud.pigx.common.log.annotation.SysLog; import io.swagger.v3.oas.annotations.Operation; @@ -31,6 +36,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpHeaders; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -59,7 +65,8 @@ public class AppRoleController { @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/page") public R getAppRolePage(Page page, AppRole appRole) { - return R.ok(appRoleService.page(page, Wrappers.query(appRole))); + return R.ok(appRoleService.page(page, Wrappers.lambdaQuery() + .like(StrUtil.isNotBlank(appRole.getRoleName()), AppRole::getRoleName, appRole.getRoleName()))); } /** @@ -79,11 +86,32 @@ public class AppRoleController { */ @Operation(summary = "通过id查询", description = "通过id查询") @GetMapping("/{roleId}") - @PreAuthorize("@pms.hasPermission('app_approle_view')") public R getById(@PathVariable("roleId") Long roleId) { return R.ok(appRoleService.getById(roleId)); } + /** + * 通过roleName查询app角色表 + * @param roleName roleName + * @return R + */ + @Operation(summary = "通过id查询", description = "通过id查询") + @GetMapping("/details/{roleName}") + public R getByUserName(@PathVariable("roleName") String roleName) { + return R.ok(appRoleService.getOne(Wrappers.lambdaQuery().eq(AppRole::getRoleName, roleName))); + } + + /** + * 通过roleCode查询app角色表 + * @param roleCode roleCode + * @return R + */ + @Operation(summary = "通过roleCode查询", description = "通过roleCode查询") + @GetMapping("/detailsByCode/{roleCode}") + public R getByPhone(@PathVariable("roleCode") String roleCode) { + return R.ok(appRoleService.getOne(Wrappers.lambdaQuery().eq(AppRole::getRoleCode, roleCode))); + } + /** * 新增app角色表 * @param appRole app角色表 @@ -111,16 +139,16 @@ public class AppRoleController { } /** - * 通过id删除app角色表 - * @param roleId id + * 通过ids批量删除app角色表 + * @param ids roleIds * @return R */ - @Operation(summary = "通过id删除app角色表", description = "通过id删除app角色表") - @SysLog("通过id删除app角色表") - @DeleteMapping("/{roleId}") + @Operation(summary = "通过ids批量删除app角色表", description = "通过ids批量删除app角色表") + @SysLog("通过ids批量删除app角色表") + @DeleteMapping @PreAuthorize("@pms.hasPermission('app_approle_del')") - public R removeById(@PathVariable Long roleId) { - return R.ok(appRoleService.removeById(roleId)); + public R removeById(@RequestBody Long[] ids) { + return R.ok(appRoleService.deleteRoleByIds(ids)); } /** @@ -147,4 +175,16 @@ public class AppRoleController { return appRoleService.list(Wrappers.query(appRole)); } + /** + * 导入角色 + * @param excelVOList 角色列表 + * @param bindingResult 错误信息列表 + * @return ok fail + */ + @PostMapping("/import") + @PreAuthorize("@pms.hasPermission('app_approle_export')") + public R importRole(@RequestExcel List excelVOList, BindingResult bindingResult) { + return appRoleService.importRole(excelVOList, bindingResult); + } + } diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppSocialDetailsController.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppSocialDetailsController.java index 6b91429d8..2f778766f 100644 --- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppSocialDetailsController.java +++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppSocialDetailsController.java @@ -17,12 +17,14 @@ package com.pig4cloud.pigx.app.controller; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pig4cloud.pigx.app.api.entity.AppSocialDetails; import com.pig4cloud.pigx.app.service.AppSocialDetailsService; import com.pig4cloud.pigx.common.core.util.R; import com.pig4cloud.pigx.common.core.util.ValidGroup; +import com.pig4cloud.pigx.common.excel.annotation.ResponseExcel; import com.pig4cloud.pigx.common.log.annotation.SysLog; import com.pig4cloud.pigx.common.security.annotation.Inner; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -34,6 +36,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.util.List; @RestController @RequestMapping("/appsocial") @@ -57,13 +60,12 @@ public class AppSocialDetailsController { /** * 信息 - * @param type 类型 + * @param id id * @return R */ - @GetMapping("/{type}") - public R getByType(@PathVariable("type") String type) { - return R.ok(appSocialDetailsService - .list(Wrappers.lambdaQuery().eq(AppSocialDetails::getType, type))); + @GetMapping("/{id}") + public R getinfo(@PathVariable("id") Long id) { + return R.ok(appSocialDetailsService.getById(id)); } /** @@ -93,14 +95,14 @@ public class AppSocialDetailsController { /** * 删除 - * @param id + * @param ids * @return R */ @SysLog("删除三方信息") - @DeleteMapping("/{id}") + @DeleteMapping @PreAuthorize("@pms.hasPermission('app_social_details_del')") - public R removeById(@PathVariable Long id) { - return R.ok(appSocialDetailsService.removeById(id)); + public R removeById(@RequestBody Long[] ids) { + return R.ok(appSocialDetailsService.removeBatchByIds(CollUtil.toList(ids))); } /** @@ -125,4 +127,13 @@ public class AppSocialDetailsController { return R.ok(appSocialDetailsService.bindSocial(state, code)); } + /** + * 导出 + */ + @GetMapping("/export") + @ResponseExcel + public List export(AppSocialDetails appSocialDetails) { + return appSocialDetailsService.list(Wrappers.query(appSocialDetails)); + } + } diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppUserController.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppUserController.java index 60e4fe61f..eb8b177ee 100644 --- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppUserController.java +++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/controller/AppUserController.java @@ -19,13 +19,16 @@ package com.pig4cloud.pigx.app.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.pig4cloud.pigx.admin.api.vo.UserExcelVO; import com.pig4cloud.pigx.app.api.dto.AppUserDTO; import com.pig4cloud.pigx.app.api.entity.AppUser; import com.pig4cloud.pigx.app.api.vo.AppUserExcelVO; import com.pig4cloud.pigx.app.service.AppUserService; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.exception.ErrorCodes; import com.pig4cloud.pigx.common.core.util.MsgUtils; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.excel.annotation.RequestExcel; import com.pig4cloud.pigx.common.excel.annotation.ResponseExcel; import com.pig4cloud.pigx.common.log.annotation.SysLog; import com.pig4cloud.pigx.common.security.annotation.Inner; @@ -36,6 +39,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpHeaders; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @@ -98,9 +102,19 @@ public class AppUserController { * @return R */ @Operation(summary = "通过id查询", description = "通过id查询") - @GetMapping("/{userId}") + @GetMapping("/details/{userId}") public R getById(@PathVariable("userId") Long userId) { - return R.ok(appUserService.getById(userId)); + return R.ok(appUserService.selectUserVoById(userId)); + } + + /** + * @return R + */ + @Operation(summary = "通过userName查询", description = "通过userName查询") + @GetMapping("/details") + public R getByUserName(AppUser user) { + AppUser one = appUserService.getOne(Wrappers.query(user), false); + return R.ok(one == null ? null : CommonConstants.SUCCESS); } /** @@ -113,7 +127,8 @@ public class AppUserController { @PostMapping @PreAuthorize("@pms.hasPermission('app_appuser_add')") public R save(@RequestBody AppUserDTO appUser) { - return R.ok(appUserService.saveUser(appUser)); + appUserService.saveUser(appUser); + return R.ok(); } /** @@ -131,15 +146,15 @@ public class AppUserController { /** * 通过id删除app用户表 - * @param userId id + * @param ids userIds * @return R */ - @Operation(summary = "通过id删除app用户表", description = "通过id删除app用户表") + @Operation(summary = "通过ids删除app用户表", description = "通过ids删除app用户表") @SysLog("通过id删除app用户表") - @DeleteMapping("/{userId}") + @DeleteMapping @PreAuthorize("@pms.hasPermission('app_appuser_del')") - public R removeById(@PathVariable Long userId) { - return R.ok(appUserService.deleteUserById(userId)); + public R removeById(@RequestBody Long[] ids) { + return R.ok(appUserService.deleteAppUserByIds(ids)); } /** @@ -160,4 +175,16 @@ public class AppUserController { return appUserService.updateUserInfo(userDto); } + /** + * 导入用户 + * @param excelVOList 用户列表 + * @param bindingResult 错误信息列表 + * @return R + */ + @PostMapping("/import") + @PreAuthorize("@pms.hasPermission('app_appuser_export')") + public R importUser(@RequestExcel List excelVOList, BindingResult bindingResult) { + return appUserService.importUser(excelVOList, bindingResult); + } + } diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/mapper/AppUserMapper.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/mapper/AppUserMapper.java index 7561ea571..37a878e82 100644 --- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/mapper/AppUserMapper.java +++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/mapper/AppUserMapper.java @@ -21,7 +21,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pig4cloud.pigx.app.api.dto.AppUserDTO; import com.pig4cloud.pigx.app.api.entity.AppUser; -import com.pig4cloud.pigx.app.api.vo.AppUserVo; +import com.pig4cloud.pigx.app.api.vo.AppUserVO; import com.pig4cloud.pigx.common.data.datascope.PigxBaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -35,6 +35,8 @@ import org.apache.ibatis.annotations.Param; @Mapper public interface AppUserMapper extends PigxBaseMapper { - IPage getUserVosPage(Page page, @Param("query") AppUserDTO appUserDTO); + IPage getUserVosPage(Page page, @Param("query") AppUserDTO appUserDTO); + + AppUserVO getUserVoById(Long userId); } diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/AppRoleService.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/AppRoleService.java index 65bad5e30..823737536 100644 --- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/AppRoleService.java +++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/AppRoleService.java @@ -19,7 +19,10 @@ package com.pig4cloud.pigx.app.service; import com.baomidou.mybatisplus.extension.service.IService; import com.pig4cloud.pigx.app.api.entity.AppRole; +import com.pig4cloud.pigx.app.api.vo.AppRoleExcelVO; import com.pig4cloud.pigx.app.api.vo.AppRoleVO; +import com.pig4cloud.pigx.common.core.util.R; +import org.springframework.validation.BindingResult; import java.util.List; @@ -35,4 +38,12 @@ public interface AppRoleService extends IService { List findRolesByUserId(Long userId); + /** + * 删除用户的同时,把role_menu关系删除 + * @param ids RoleIds + */ + Boolean deleteRoleByIds(Long[] ids); + + R importRole(List excelVOList, BindingResult bindingResult); + } diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/AppUserService.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/AppUserService.java index 920753185..f8353c27c 100644 --- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/AppUserService.java +++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/AppUserService.java @@ -24,7 +24,9 @@ import com.pig4cloud.pigx.app.api.dto.AppUserDTO; import com.pig4cloud.pigx.app.api.dto.AppUserInfo; import com.pig4cloud.pigx.app.api.entity.AppUser; import com.pig4cloud.pigx.app.api.vo.AppUserExcelVO; +import com.pig4cloud.pigx.app.api.vo.AppUserVO; import com.pig4cloud.pigx.common.core.util.R; +import org.springframework.validation.BindingResult; import java.util.List; @@ -44,10 +46,14 @@ public interface AppUserService extends IService { IPage getUsersWithRolePage(Page page, AppUserDTO appUserDTO); - Boolean deleteUserById(Long userId); - AppUserInfo findUserInfo(AppUser user); R updateUserInfo(AppUserDTO userDto); + AppUserVO selectUserVoById(Long userId); + + Boolean deleteAppUserByIds(Long[] ids); + + R importUser(List excelVOList, BindingResult bindingResult); + } diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppMenuServiceImpl.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppMenuServiceImpl.java index 45f909ca2..e97e4ba84 100644 --- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppMenuServiceImpl.java +++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppMenuServiceImpl.java @@ -25,9 +25,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.pig4cloud.pigx.app.api.entity.AppMenu; import com.pig4cloud.pigx.app.api.entity.AppRoleMenu; +import com.pig4cloud.pigx.app.api.entity.AppUserRole; import com.pig4cloud.pigx.app.mapper.AppMenuMapper; import com.pig4cloud.pigx.app.mapper.AppRoleMenuMapper; import com.pig4cloud.pigx.app.service.AppMenuService; +import com.pig4cloud.pigx.app.service.AppRoleMenuService; import com.pig4cloud.pigx.common.core.constant.CacheConstants; import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.constant.enums.MenuTypeEnum; @@ -41,10 +43,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.validation.constraints.NotNull; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppRoleServiceImpl.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppRoleServiceImpl.java index bbce90410..35f9932bd 100644 --- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppRoleServiceImpl.java +++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppRoleServiceImpl.java @@ -16,16 +16,30 @@ */ package com.pig4cloud.pigx.app.service.impl; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.pig4cloud.pigx.admin.api.entity.SysRole; +import com.pig4cloud.pigx.admin.api.vo.RoleExcelVO; import com.pig4cloud.pigx.app.api.entity.AppRole; +import com.pig4cloud.pigx.app.api.entity.AppRoleMenu; +import com.pig4cloud.pigx.app.api.vo.AppRoleExcelVO; import com.pig4cloud.pigx.app.api.vo.AppRoleVO; import com.pig4cloud.pigx.app.mapper.AppRoleMapper; import com.pig4cloud.pigx.app.service.AppRoleMenuService; import com.pig4cloud.pigx.app.service.AppRoleService; +import com.pig4cloud.pigx.common.core.exception.ErrorCodes; +import com.pig4cloud.pigx.common.core.util.MsgUtils; +import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.excel.vo.ErrorMessage; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.validation.BindingResult; +import java.util.HashSet; +import java.util.LinkedList; import java.util.List; +import java.util.Set; /** * app角色表 @@ -49,4 +63,66 @@ public class AppRoleServiceImpl extends ServiceImpl impl return baseMapper.listRolesByUserId(userId); } + /** + * 删除用户的同时,把role_menu关系删除 + * @param ids roleIds + */ + @Override + public Boolean deleteRoleByIds(Long[] ids) { + this.removeBatchByIds(CollUtil.toList(ids)); + appRoleMenuService.remove(Wrappers.lambdaQuery().in(AppRoleMenu::getRoleId, CollUtil.toList(ids))); + return Boolean.TRUE; + } + + /** + * 导入角色 + * @param excelVOList + * @param bindingResult + * @return + */ + @Override + public R importRole(List excelVOList, BindingResult bindingResult) { + // + // 通用校验获取失败的数据 + List errorMessageList = (List) bindingResult.getTarget(); + + // 个性化校验逻辑 + List roleList = this.list(); + + // 执行数据插入操作 组装 RoleDto + for (AppRoleExcelVO excel : excelVOList) { + Set errorMsg = new HashSet<>(); + // 检验角色名称或者角色编码是否存在 + boolean existRole = roleList.stream().anyMatch(appRole -> excel.getRoleName().equals(appRole.getRoleName()) + || excel.getRoleCode().equals(appRole.getRoleCode())); + + if (existRole) { + errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_NAMEORCODE_EXISTING, excel.getRoleName(), + excel.getRoleCode())); + } + + // 数据合法情况 + if (CollUtil.isEmpty(errorMsg)) { + insertExcelRole(excel); + } + else { + // 数据不合法情况 + errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg)); + } + } + if (CollUtil.isNotEmpty(errorMessageList)) { + return R.failed(errorMessageList); + } + return R.ok(); + + } + + private void insertExcelRole(AppRoleExcelVO excel) { + AppRole appRole = new AppRole(); + appRole.setRoleName(excel.getRoleName()); + appRole.setRoleDesc(excel.getRoleDesc()); + appRole.setRoleCode(excel.getRoleCode()); + this.save(appRole); + } + } diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppUserServiceImpl.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppUserServiceImpl.java index 57764cb08..a595d9687 100644 --- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppUserServiceImpl.java +++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppUserServiceImpl.java @@ -23,6 +23,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.pig4cloud.pigx.admin.api.dto.UserDTO; +import com.pig4cloud.pigx.admin.api.entity.SysDept; +import com.pig4cloud.pigx.admin.api.entity.SysPost; +import com.pig4cloud.pigx.admin.api.entity.SysRole; +import com.pig4cloud.pigx.admin.api.entity.SysUser; +import com.pig4cloud.pigx.admin.api.vo.UserExcelVO; import com.pig4cloud.pigx.app.api.dto.AppUserDTO; import com.pig4cloud.pigx.app.api.dto.AppUserInfo; import com.pig4cloud.pigx.app.api.entity.AppMenu; @@ -30,6 +36,7 @@ import com.pig4cloud.pigx.app.api.entity.AppRole; import com.pig4cloud.pigx.app.api.entity.AppUser; import com.pig4cloud.pigx.app.api.entity.AppUserRole; import com.pig4cloud.pigx.app.api.vo.AppUserExcelVO; +import com.pig4cloud.pigx.app.api.vo.AppUserVO; import com.pig4cloud.pigx.app.mapper.AppUserMapper; import com.pig4cloud.pigx.app.service.AppMenuService; import com.pig4cloud.pigx.app.service.AppRoleService; @@ -40,17 +47,19 @@ import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.exception.ErrorCodes; import com.pig4cloud.pigx.common.core.util.MsgUtils; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.excel.vo.ErrorMessage; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CacheEvict; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.validation.BindingResult; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -72,6 +81,8 @@ public class AppUserServiceImpl extends ServiceImpl impl private final AppMenuService appMenuService; + private final CacheManager cacheManager; + /** * 更新用户 * @param userDTO @@ -114,7 +125,7 @@ public class AppUserServiceImpl extends ServiceImpl impl if (CollUtil.isNotEmpty(userDTO.getRole())) { List userRoleList = userDTO.getRole().stream().map(roleId -> { AppUserRole userRole = new AppUserRole(); - userRole.setUserId(userDTO.getUserId()); + userRole.setUserId(appUser.getUserId()); userRole.setRoleId(roleId); return userRole; }).collect(Collectors.toList()); @@ -144,14 +155,6 @@ public class AppUserServiceImpl extends ServiceImpl impl return baseMapper.getUserVosPage(page, appUserDTO); } - @Override - public Boolean deleteUserById(Long userId) { - baseMapper.deleteById(userId); - appUserRoleService.removeById(Wrappers.lambdaQuery().eq(AppUserRole::getUserId, userId)); - - return Boolean.TRUE; - } - @Override public AppUserInfo findUserInfo(AppUser user) { AppUserInfo info = new AppUserInfo(); @@ -191,4 +194,97 @@ public class AppUserServiceImpl extends ServiceImpl impl return R.ok(this.updateById(appUser)); } + @Override + public AppUserVO selectUserVoById(Long userId) { + return baseMapper.getUserVoById(userId); + } + + /** + * 删除user用户同时删除user-role关系表 + * @param ids userIds + */ + @Override + public Boolean deleteAppUserByIds(Long[] ids) { + Cache cache = cacheManager.getCache(CacheConstants.USER_DETAILS_MINI); + for (AppUser appUser : baseMapper.selectBatchIds(CollUtil.toList(ids))) { + cache.evict(appUser.getUsername()); + } + // 删除用户关联表 + this.appUserRoleService + .remove(Wrappers.lambdaQuery().in(AppUserRole::getUserId, CollUtil.toList(ids))); + + this.removeBatchByIds(CollUtil.toList(ids)); + + return Boolean.TRUE; + + } + + /** + * @param excelVOList + * @param bindingResult + * @return + */ + @Override + public R importUser(List excelVOList, BindingResult bindingResult) { + // 通用校验获取失败的数据 + List errorMessageList = (List) bindingResult.getTarget(); + + // 执行数据插入操作 组装 UserDto + for (AppUserExcelVO excel : excelVOList) { + // 个性化校验逻辑 + List userList = this.list(); + List roleList = appRoleService.list(); + + Set errorMsg = new HashSet<>(); + // 校验用户名是否存在 + boolean exsitUserName = userList.stream() + .anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername())); + + if (exsitUserName) { + errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, excel.getUsername())); + } + + // 判断输入的角色名称列表是否合法 + List roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA); + List roleCollList = roleList.stream() + .filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name))) + .collect(Collectors.toList()); + + if (roleCollList.size() != roleNameList.size()) { + errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_ROLENAME_INEXISTENCE, excel.getRoleNameList())); + } + // 数据合法情况 + if (CollUtil.isEmpty(errorMsg)) { + insertExcelUser(excel, roleCollList); + } + else { + // 数据不合法情况 + errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg)); + } + + } + + if (CollUtil.isNotEmpty(errorMessageList)) { + return R.failed(errorMessageList); + } + return R.ok(null, MsgUtils.getMessage(ErrorCodes.SYS_USER_IMPORT_SUCCEED)); + + } + + private void insertExcelUser(AppUserExcelVO excel, List roleCollList) { + AppUserDTO userDTO = new AppUserDTO(); + userDTO.setUsername(excel.getUsername()); + userDTO.setPhone(excel.getPhone()); + userDTO.setNickname(excel.getNickname()); + userDTO.setName(excel.getName()); + userDTO.setEmail(excel.getEmail()); + // 批量导入初始密码为手机号 + userDTO.setPassword(userDTO.getPhone()); + // 根据角色名称查询角色ID + List roleIdList = roleCollList.stream().map(AppRole::getRoleId).collect(Collectors.toList()); + userDTO.setRole(roleIdList); + // 插入用户 + this.saveUser(userDTO); + } + } diff --git a/pigx-app-server/pigx-app-server-biz/src/main/resources/mapper/AppUserMapper.xml b/pigx-app-server/pigx-app-server-biz/src/main/resources/mapper/AppUserMapper.xml index c2d0f5d2a..7a786257d 100644 --- a/pigx-app-server/pigx-app-server-biz/src/main/resources/mapper/AppUserMapper.xml +++ b/pigx-app-server/pigx-app-server-biz/src/main/resources/mapper/AppUserMapper.xml @@ -23,7 +23,7 @@ - + @@ -36,9 +36,9 @@ - - + + + + + u.user_id, + u.username, + u.password, + u.salt, + u.phone, + u.avatar, + u.wx_openid, + u.del_flag, + u.lock_flag, + u.tenant_id, + u.nickname, + u.name, + u.email, + u.create_by, + u.create_time ucreate_time, + u.update_time uupdate_time, + r.role_id + + +