From b2295bdd4c137c44350bf1b15eb2968410153662 Mon Sep 17 00:00:00 2001 From: xiwa Date: Tue, 13 Jun 2023 08:28:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E7=94=A8=E6=88=B7=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E7=BC=96=E8=BE=91=E9=97=AE=E9=A2=98=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/config/id/SnowflakeIdGenerator.java | 9 ++-- .../iotkit/data/service/SysDeptDataImpl.java | 20 ++++---- .../iotkit/data/service/SysUserDataImpl.java | 9 +++- .../data/service/SysUserRoleDataImpl.java | 4 -- .../system/controller/SysDeptController.java | 11 ++-- .../system/controller/SysPostController.java | 5 -- .../system/controller/SysUserController.java | 12 ++--- .../cc/iotkit/system/dto/bo/SysDeptBo.java | 2 +- .../cc/iotkit/system/dto/bo/SysPostBo.java | 2 +- .../iotkit/system/dto/bo/SysUserRolesBo.java | 35 +++++++++++++ .../service/impl/SysDeptServiceImpl.java | 51 ++++++++++--------- 11 files changed, 92 insertions(+), 68 deletions(-) create mode 100644 iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysUserRolesBo.java diff --git a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/config/id/SnowflakeIdGenerator.java b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/config/id/SnowflakeIdGenerator.java index 5d47fbde..3395bd33 100644 --- a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/config/id/SnowflakeIdGenerator.java +++ b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/config/id/SnowflakeIdGenerator.java @@ -1,19 +1,16 @@ package cc.iotkit.data.config.id; -import cc.iotkit.common.utils.SnowflakeIdGeneratorUtil; -import java.io.Serializable; -import java.lang.reflect.Field; -import java.util.Objects; - import com.github.yitter.contract.IdGeneratorOptions; import com.github.yitter.idgen.YitIdHelper; import org.hibernate.HibernateException; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.id.IdentifierGenerator; -import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; +import java.io.Serializable; +import java.lang.reflect.Field; +import java.util.Objects; /** * @author: Longjun.Tu diff --git a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysDeptDataImpl.java b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysDeptDataImpl.java index 2c6d26f9..e1d06b37 100644 --- a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysDeptDataImpl.java +++ b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysDeptDataImpl.java @@ -62,14 +62,14 @@ public class SysDeptDataImpl implements ISysDeptData, IJPACommData tbSysDept.parentId.eq(dept.getParentId())) .and(StringUtils.isNotEmpty(dept.getDeptName()), () -> tbSysDept.deptName.like(dept.getDeptName())) .and(StringUtils.isNotEmpty(dept.getStatus()), () -> tbSysDept.status.eq(dept.getStatus())); - return MapstructUtils.convert(StreamSupport.stream(deptRepository.findAll(predicateBuilder.build()).spliterator(),false).collect(Collectors.toList()),SysDept.class); + return MapstructUtils.convert(StreamSupport.stream(deptRepository.findAll(predicateBuilder.build()).spliterator(), false).collect(Collectors.toList()), SysDept.class); } @Override public List findByRoleId(Long roleId) { List list = jpaQueryFactory.select(tbSysDept).from(tbSysDept).leftJoin(tbSysRoleDept).on(tbSysDept.id.eq(tbSysRoleDept.deptId)) .where(tbSysRoleDept.roleId.eq(roleId)).orderBy(tbSysDept.parentId.desc(), tbSysDept.orderNum.desc()).fetch(); - return MapstructUtils.convert(list,SysDept.class); + return MapstructUtils.convert(list, SysDept.class); } @@ -80,8 +80,8 @@ public class SysDeptDataImpl implements ISysDeptData, IJPACommData findByDeptId(Long deptId) { - return MapstructUtils.convert(deptRepository.findAll().stream().filter(o->o.getAncestors().indexOf(deptId.toString())!=-1) - .collect(Collectors.toList()),SysDept.class); + return MapstructUtils.convert(deptRepository.findAll().stream().filter(o -> o.getAncestors().indexOf(deptId.toString()) != -1) + .collect(Collectors.toList()), SysDept.class); } @Override @@ -91,18 +91,18 @@ public class SysDeptDataImpl implements ISysDeptData, IJPACommData 0) { - return true; - } - return false; + Long count = jpaQueryFactory.select(tbSysDept.id.count()) + .from(tbSysDept) + .where(predicateBuilder.build()) + .fetchOne(); + return count==0; } @Override public long selectNormalChildrenDeptById(Long deptId) { PredicateBuilder predicateBuilder = PredicateBuilder.instance().and(tbSysDept.status.eq(UserConstants.DEPT_NORMAL)); - return jpaQueryFactory.select(tbSysDept.ancestors).where(predicateBuilder.build()).fetch().stream().filter(o->o.indexOf(deptId.toString())!=-1).count(); + return jpaQueryFactory.select(tbSysDept.ancestors).where(predicateBuilder.build()).fetch().stream().filter(o -> o.indexOf(deptId.toString()) != -1).count(); } diff --git a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysUserDataImpl.java b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysUserDataImpl.java index 6499baa4..10adc2b2 100644 --- a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysUserDataImpl.java +++ b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysUserDataImpl.java @@ -106,12 +106,17 @@ public class SysUserDataImpl implements ISysUserData, IJPACommData sysRoles = sysRoleData.findByUserId(id); convert.setRoles(sysRoles); - SysDept dept = sysDeptData.findById(convert.getDeptId()); + + Long deptId = convert.getDeptId(); + if(deptId==null){ + return convert; + } + + SysDept dept = sysDeptData.findById(deptId); if (ObjectUtil.isNotNull(dept)) { convert.setDept(dept); } return convert; - } @Override diff --git a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysUserRoleDataImpl.java b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysUserRoleDataImpl.java index 48704f58..9e368cde 100644 --- a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysUserRoleDataImpl.java +++ b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysUserRoleDataImpl.java @@ -9,16 +9,12 @@ import cc.iotkit.data.util.PredicateBuilder; import cc.iotkit.model.system.SysUserRole; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Primary; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; import java.util.List; -import java.util.Objects; -import static cc.iotkit.data.model.QTbSysRole.tbSysRole; -import static cc.iotkit.data.model.QTbSysRoleMenu.tbSysRoleMenu; import static cc.iotkit.data.model.QTbSysUserRole.tbSysUserRole; /** diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysDeptController.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysDeptController.java index 8ca65649..cb908d48 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysDeptController.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysDeptController.java @@ -44,7 +44,6 @@ public class SysDeptController extends BaseController { /** * 查询部门列表(排除节点) - * */ @ApiOperation("查询部门列表(排除节点)") @SaCheckPermission("system:dept:list") @@ -59,12 +58,11 @@ public class SysDeptController extends BaseController { /** * 根据部门编号获取详细信息 - * */ @SaCheckPermission("system:dept:query") @ApiOperation("根据部门编号获取详细信息") @PostMapping(value = "/getInfo") - public SysDeptVo getInfo(@Validated @RequestBody Request bo) { + public SysDeptVo getInfo(@Validated @RequestBody Request bo) { Long deptId = bo.getData(); deptService.checkDeptDataScope(deptId); return deptService.selectDeptById(deptId); @@ -94,11 +92,9 @@ public class SysDeptController extends BaseController { @PostMapping("/edit") public void edit(@Validated @RequestBody Request bo) { SysDeptBo dept = bo.getData(); - Long deptId = dept.getDeptId(); + Long deptId = dept.getId(); deptService.checkDeptDataScope(deptId); - if (!deptService.checkDeptNameUnique(dept)) { - fail("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); - } else if (dept.getParentId().equals(deptId)) { + if (dept.getParentId().equals(deptId)) { fail("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己"); } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0) { @@ -109,7 +105,6 @@ public class SysDeptController extends BaseController { /** * 删除部门 - * */ @SaCheckPermission("system:dept:remove") @ApiOperation("删除部门") diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysPostController.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysPostController.java index 95b92537..7f0bb0e7 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysPostController.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysPostController.java @@ -95,11 +95,6 @@ public class SysPostController extends BaseController { @Log(title = "岗位管理", businessType = BusinessType.UPDATE) @PostMapping("/edit") public void edit(@RequestBody @Validated(EditGroup.class) Request post) { - if (!postService.checkPostNameUnique(post.getData())) { - fail("修改岗位'" + post.getData().getPostName() + "'失败,岗位名称已存在"); - } else if (!postService.checkPostCodeUnique(post.getData())) { - fail("修改岗位'" + post.getData().getPostName() + "'失败,岗位编码已存在"); - } postService.updatePost(post.getData()); } diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysUserController.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysUserController.java index 69a93689..ddc25e89 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysUserController.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysUserController.java @@ -18,6 +18,7 @@ import cc.iotkit.common.validate.QueryGroup; import cc.iotkit.common.web.core.BaseController; import cc.iotkit.system.dto.bo.SysDeptBo; import cc.iotkit.system.dto.bo.SysUserBo; +import cc.iotkit.system.dto.bo.SysUserRolesBo; import cc.iotkit.system.dto.vo.*; import cc.iotkit.system.listener.SysUserImportListener; import cc.iotkit.system.service.*; @@ -236,7 +237,6 @@ public class SysUserController extends BaseController { /** * 根据用户编号获取授权角色 - * */ @ApiOperation("根据用户编号获取授权角色") @SaCheckPermission("system:user:query") @@ -254,17 +254,17 @@ public class SysUserController extends BaseController { /** * 用户授权角色 * - * @param reqUserId 用户Id - * @param roleIds 角色ID串 + * @param userRole 用户角色 */ @ApiOperation("用户授权角色") @SaCheckPermission("system:user:edit") @Log(title = "用户管理", businessType = BusinessType.GRANT) @PostMapping("/authRole") - public void insertAuthRole(Request reqUserId, List roleIds) { - Long userId = reqUserId.getData(); + public void insertAuthRole(@RequestBody @Validated Request userRole) { + SysUserRolesBo data = userRole.getData(); + Long userId = data.getUserId(); userService.checkUserDataScope(userId); - userService.insertUserAuth(userId, roleIds); + userService.insertUserAuth(userId, data.getRoleIds()); } /** diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysDeptBo.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysDeptBo.java index 210d8e27..c772fe19 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysDeptBo.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysDeptBo.java @@ -27,7 +27,7 @@ public class SysDeptBo extends BaseDto { * 部门id */ @NotNull(message = "部门id不能为空", groups = { EditGroup.class }) - private Long deptId; + private Long id; /** * 父部门ID diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysPostBo.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysPostBo.java index dc343145..1630d931 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysPostBo.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysPostBo.java @@ -26,7 +26,7 @@ public class SysPostBo extends BaseDto { * 岗位ID */ @NotNull(message = "岗位ID不能为空", groups = { EditGroup.class }) - private Long postId; + private Long id; /** * 岗位编码 diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysUserRolesBo.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysUserRolesBo.java new file mode 100644 index 00000000..ed1414c5 --- /dev/null +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysUserRolesBo.java @@ -0,0 +1,35 @@ +package cc.iotkit.system.dto.bo; + +import cc.iotkit.common.api.BaseDto; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 用户权限设置 + * + * @author sjg + */ + +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysUserRolesBo extends BaseDto { + + /** + * 用户ID + */ + @NotNull(message = "用户ID不能为空") + private Long userId; + + /** + * 角色组 + */ + @Size(min = 1, message = "用户角色不能为空") + private List roleIds; + +} diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysDeptServiceImpl.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysDeptServiceImpl.java index 38efb368..48c97d69 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysDeptServiceImpl.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysDeptServiceImpl.java @@ -1,6 +1,7 @@ package cc.iotkit.system.service.impl; import cc.iotkit.common.constant.UserConstants; +import cc.iotkit.common.enums.ErrCode; import cc.iotkit.common.exception.BizException; import cc.iotkit.common.satoken.utils.LoginHelper; import cc.iotkit.common.service.DeptService; @@ -11,9 +12,7 @@ import cc.iotkit.common.utils.TreeBuildUtils; import cc.iotkit.data.system.ISysDeptData; import cc.iotkit.data.system.ISysRoleData; import cc.iotkit.data.system.ISysUserData; -import cc.iotkit.data.util.PredicateBuilder; import cc.iotkit.model.system.SysDept; -import cc.iotkit.model.system.SysRole; import cc.iotkit.system.dto.bo.SysDeptBo; import cc.iotkit.system.dto.vo.SysDeptVo; import cc.iotkit.system.service.ISysDeptService; @@ -28,8 +27,6 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; -import static cc.iotkit.data.model.QTbSysDept.tbSysDept; - /** * 部门管理 服务实现 * @@ -178,7 +175,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { */ @Override public boolean checkDeptNameUnique(SysDeptBo dept) { - return sysDeptData.checkDeptNameUnique( dept.getDeptName(), dept.getParentId(), dept.getDeptId()); + return sysDeptData.checkDeptNameUnique( dept.getDeptName(), dept.getParentId(), dept.getId()); } /** @@ -226,26 +223,30 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { // @CacheEvict(cacheNames = CacheNames.SYS_DEPT, key = "#bo.deptId") @Override public void updateDept(SysDeptBo bo) { -// SysDept dept = MapstructUtils.convert(bo, SysDept.class); -// SysDept oldDept = baseMapper.selectById(dept.getDeptId()); -// if (!oldDept.getParentId().equals(dept.getParentId())) { -// // 如果是新父部门 则校验是否具有新父部门权限 避免越权 -// this.checkDeptDataScope(dept.getParentId()); -// SysDept newParentDept = baseMapper.selectById(dept.getParentId()); -// if (ObjectUtil.isNotNull(newParentDept) && ObjectUtil.isNotNull(oldDept)) { -// String newAncestors = newParentDept.getAncestors() + StringUtils.SEPARATOR + newParentDept.getDeptId(); -// String oldAncestors = oldDept.getAncestors(); -// dept.setAncestors(newAncestors); -// updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); -// } -// } -// int result = baseMapper.updateById(dept); -// if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors()) -// && !StringUtils.equals(UserConstants.DEPT_NORMAL, dept.getAncestors())) { -// // 如果该部门是启用状态,则启用该部门的所有上级部门 -// updateParentDeptStatusNormal(dept); -// } -// return result; + SysDept dept = MapstructUtils.convert(bo, SysDept.class); + SysDept oldDept = sysDeptData.findById(bo.getId()); + if(oldDept==null){ + throw new BizException(ErrCode.DATA_NOT_EXIST); + } + + if (!oldDept.getParentId().equals(dept.getParentId())) { + // 如果是新父部门 则校验是否具有新父部门权限 避免越权 + this.checkDeptDataScope(dept.getParentId()); + SysDept newParentDept = sysDeptData.findById(dept.getParentId()); + if (ObjectUtil.isNotNull(newParentDept) && ObjectUtil.isNotNull(oldDept)) { + String newAncestors = newParentDept.getAncestors() + StringUtils.SEPARATOR + newParentDept.getId(); + String oldAncestors = oldDept.getAncestors(); + dept.setAncestors(newAncestors); + updateDeptChildren(dept.getId(), newAncestors, oldAncestors); + } + } + + sysDeptData.save(dept); + if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors()) + && !StringUtils.equals(UserConstants.DEPT_NORMAL, dept.getAncestors())) { + // 如果该部门是启用状态,则启用该部门的所有上级部门 + updateParentDeptStatusNormal(dept); + } } /**