♻️ Refactoring code. pigx-app-server 适配最新V5 UI

This commit is contained in:
lbw committed 2023-04-06 14:46:24 +08:00
1 parent be7654d6ca
commit 3c047a59de
14 files changed
+443 -56

No files matched your search

@@ -69,7 +69,7 @@ public class AppSocialDetails extends Model<AppSocialDetails> {
/**
* 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;
@@ -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;
}
@@ -11,7 +11,7 @@ import java.time.LocalDateTime;
import java.util.List;
@Data
public class AppUserVo implements Serializable {
public class AppUserVO implements Serializable {
/**
* 主键
@@ -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.<AppMenu>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.<AppMenu>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();
}
/**
@@ -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.<AppRole>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.<AppRole>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.<AppRole>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<AppRoleExcelVO> excelVOList, BindingResult bindingResult) {
return appRoleService.importRole(excelVOList, bindingResult);
}
}
@@ -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.<AppSocialDetails>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<AppSocialDetails> export(AppSocialDetails appSocialDetails) {
return appSocialDetailsService.list(Wrappers.query(appSocialDetails));
}
}
@@ -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<AppUserExcelVO> excelVOList, BindingResult bindingResult) {
return appUserService.importUser(excelVOList, bindingResult);
}
}
@@ -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<AppUser> {
IPage<AppUserVo> getUserVosPage(Page page, @Param("query") AppUserDTO appUserDTO);
IPage<AppUserVO> getUserVosPage(Page page, @Param("query") AppUserDTO appUserDTO);
AppUserVO getUserVoById(Long userId);
}
@@ -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<AppRole> {
List<AppRole> findRolesByUserId(Long userId);
/**
* 删除用户的同时,把role_menu关系删除
* @param ids RoleIds
*/
Boolean deleteRoleByIds(Long[] ids);
R importRole(List<AppRoleExcelVO> excelVOList, BindingResult bindingResult);
}
@@ -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<AppUser> {
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<AppUserExcelVO> excelVOList, BindingResult bindingResult);
}
@@ -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;
@@ -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<AppRoleMapper, AppRole> impl
return baseMapper.listRolesByUserId(userId);
}
/**
* 删除用户的同时,把role_menu关系删除
* @param ids roleIds
*/
@Override
public Boolean deleteRoleByIds(Long[] ids) {
this.removeBatchByIds(CollUtil.toList(ids));
appRoleMenuService.remove(Wrappers.<AppRoleMenu>lambdaQuery().in(AppRoleMenu::getRoleId, CollUtil.toList(ids)));
return Boolean.TRUE;
}
/**
* 导入角色
* @param excelVOList
* @param bindingResult
* @return
*/
@Override
public R importRole(List<AppRoleExcelVO> excelVOList, BindingResult bindingResult) {
//
// 通用校验获取失败的数据
List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget();
// 个性化校验逻辑
List<AppRole> roleList = this.list();
// 执行数据插入操作 组装 RoleDto
for (AppRoleExcelVO excel : excelVOList) {
Set<String> 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);
}
}
@@ -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<AppUserMapper, AppUser> impl
private final AppMenuService appMenuService;
private final CacheManager cacheManager;
/**
* 更新用户
* @param userDTO
@@ -114,7 +125,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
if (CollUtil.isNotEmpty(userDTO.getRole())) {
List<AppUserRole> 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<AppUserMapper, AppUser> impl
return baseMapper.getUserVosPage(page, appUserDTO);
}
@Override
public Boolean deleteUserById(Long userId) {
baseMapper.deleteById(userId);
appUserRoleService.removeById(Wrappers.<AppUserRole>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<AppUserMapper, AppUser> 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.<AppUserRole>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<AppUserExcelVO> excelVOList, BindingResult bindingResult) {
// 通用校验获取失败的数据
List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget();
// 执行数据插入操作 组装 UserDto
for (AppUserExcelVO excel : excelVOList) {
// 个性化校验逻辑
List<AppUser> userList = this.list();
List<AppRole> roleList = appRoleService.list();
Set<String> 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<String> roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA);
List<AppRole> 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<AppRole> 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<Long> roleIdList = roleCollList.stream().map(AppRole::getRoleId).collect(Collectors.toList());
userDTO.setRole(roleIdList);
// 插入用户
this.saveUser(userDTO);
}
}
@@ -23,7 +23,7 @@
<mapper namespace="com.pig4cloud.pigx.app.mapper.AppUserMapper">
<resultMap id="appUserMap" type="com.pig4cloud.pigx.app.api.vo.AppUserVo">
<resultMap id="appUserMap" type="com.pig4cloud.pigx.app.api.vo.AppUserVO">
<id property="userId" column="user_id"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
@@ -36,9 +36,9 @@
<result property="delFlag" column="del_flag"/>
<result property="tenantId" column="tenant_id"/>
<result property="lastModifiedTime" column="last_modified_time"/>
<collection property="roleList" ofType="com.pig4cloud.pigx.app.api.entity.AppRole"
select="com.pig4cloud.pigx.app.mapper.AppRoleMapper.listRolesByUserId" column="user_id">
</collection>
<collection property="roleList" ofType="com.pig4cloud.pigx.app.api.entity.AppRole"
select="com.pig4cloud.pigx.app.mapper.AppRoleMapper.listRolesByUserId" column="user_id">
</collection>
</resultMap>
<select id="getUserVosPage" resultMap="appUserMap">
select
@@ -63,4 +63,35 @@
</if>
</where>
</select>
<sql id="userRoleDeptSql">
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
</sql>
<select id="getUserVoById" resultMap="appUserMap">
SELECT
<include refid="userRoleDeptSql"/>
FROM
app_user u
LEFT JOIN app_user_role urole ON urole.user_id = u.user_id
LEFT JOIN app_role r ON r.role_id = urole.role_id
WHERE
u.user_id = #{id}
</select>
</mapper>