fix:存放位置数据权限调整

This commit is contained in:
shusir
2026-03-26 15:01:57 +08:00
parent ce4bc07778
commit 35d06637e9
5 changed files with 41 additions and 15 deletions

View File

@@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import com.zt.plat.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -64,6 +65,9 @@ public class ConfigWarehouseLocationPageReqVO extends PageParam {
@Schema(description = "是否为管理员-可查看全部数据")
private Boolean adminFlag;
@Schema(description = "有权限的仓库")
private List<Long> authorizedWarehouseIds;
@Schema(description = "查询用-权限角色")
private Set<Long> roleIds;

View File

@@ -29,6 +29,7 @@ public interface ConfigWarehouseLocationMapper extends BaseMapperX<ConfigWarehou
default PageResult<ConfigWarehouseLocationRespVO> selectPage(ConfigWarehouseLocationPageReqVO reqVO) {
MPJLambdaWrapperX<ConfigWarehouseLocationDO> wrapper = new MPJLambdaWrapperX<>();
Boolean adminFlag = reqVO.getAdminFlag();
//仓库
wrapper.leftJoin(ConfigWarehouseLocationParDO.class, ConfigWarehouseLocationParDO::getId, ConfigWarehouseLocationDO::getParentId);
wrapper.selectAll(ConfigWarehouseLocationDO.class)
@@ -47,19 +48,12 @@ public interface ConfigWarehouseLocationMapper extends BaseMapperX<ConfigWarehou
.eqIfPresent(ConfigWarehouseLocationDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
.betweenIfPresent(ConfigWarehouseLocationDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(ConfigWarehouseLocationDO::getRemark, reqVO.getRemark())
;
Boolean adminFlag = reqVO.getAdminFlag();
// 角色权限 - 使用 exists 子查询
if (adminFlag == null || !adminFlag && CollUtil.isNotEmpty(reqVO.getRoleIds())) {
String roleIdsStr = reqVO.getRoleIds().stream()
.map(String::valueOf)
.collect(Collectors.joining(","));
wrapper.and(wrapper1 ->
wrapper1.exists("SELECT 1 FROM t_cfg_perm WHERE t_cfg_perm.SRC_ID = t.ID AND t_cfg_perm.deleted = 0 AND t_cfg_perm.TGT_ID IN (" + roleIdsStr + ")")
);
}
wrapper.orderByDesc(ConfigWarehouseLocationDO::getSortNo);
.and(adminFlag == null || !adminFlag && CollUtil.isNotEmpty(reqVO.getAuthorizedWarehouseIds()),
wrapper1 ->
wrapper1.in(ConfigWarehouseLocationDO::getId, reqVO.getAuthorizedWarehouseIds())
.or()
.in(ConfigWarehouseLocationParDO::getId, reqVO.getAuthorizedWarehouseIds()))
.orderByDesc(ConfigWarehouseLocationDO::getSortNo);
return selectJoinPage(reqVO, ConfigWarehouseLocationRespVO.class, wrapper);
}

View File

@@ -74,4 +74,11 @@ public interface ConfigPermissionService {
*/
PageResult<ConfigPermissionDO> getConfigPermissionPage(ConfigPermissionPageReqVO pageReqVO);
/**
* 根据目标id获取权限列表
*
* @param targetIds 目标id
* @return 权限列表
*/
List<ConfigPermissionDO> getPermissionListByTargetIds(List<Long> targetIds);
}

View File

@@ -2,6 +2,7 @@ package com.zt.plat.module.qms.business.config.service;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigPermissionPageReqVO;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigPermissionRespVO;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigPermissionSaveReqVO;
@@ -210,4 +211,11 @@ public class ConfigPermissionServiceImpl implements ConfigPermissionService {
return configPermissionMapper.selectPage(pageReqVO);
}
@Override
public List<ConfigPermissionDO> getPermissionListByTargetIds(List<Long> targetIds) {
return configPermissionMapper.selectList(Wrappers.lambdaQuery(ConfigPermissionDO.class)
.in(ConfigPermissionDO::getTargetId, targetIds));
}
}

View File

@@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zt.plat.framework.common.biz.system.permission.PermissionCommonApi;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigPermissionSaveReqVO;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigWarehouseLocationPageReqVO;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigWarehouseLocationRespVO;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigWarehouseLocationSaveReqVO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigPermissionDO;
import com.zt.plat.module.qms.enums.QmsPermissionConstant;
import com.zt.plat.module.qms.enums.QmsWarehouseLocationConstant;
import com.zt.plat.module.system.api.permission.PermissionApi;
@@ -184,10 +186,21 @@ public class ConfigWarehouseLocationServiceImpl implements ConfigWarehouseLocati
@Override
public PageResult<ConfigWarehouseLocationRespVO> getConfigWarehouseLocationPage(ConfigWarehouseLocationPageReqVO pageReqVO) {
// 获取当前用户角色
CommonResult<Set<Long>> userRoleIds = permissionApi.getUserRoleIdListByUserId(SecurityFrameworkUtils.getLoginUserId());
pageReqVO.setRoleIds(userRoleIds.getData());
CommonResult<Set<Long>> userRoleIdsRes = permissionApi.getUserRoleIdListByUserId(SecurityFrameworkUtils.getLoginUserId());
Set<Long> userRoleIds = userRoleIdsRes.getData();
pageReqVO.setRoleIds(userRoleIds);
CommonResult<Boolean> hasAnyRoles = permissionCommonApi.hasAnyRoles(SecurityFrameworkUtils.getLoginUserId(), QmsPermissionConstant.ADMIN_ROLE);
pageReqVO.setAdminFlag(hasAnyRoles.getData());
if (CollUtil.isNotEmpty(userRoleIds)) {
// 先查询有权限的仓库 ID 列表
List<ConfigPermissionDO> permissionList = configPermissionService.getPermissionListByTargetIds(new ArrayList<>(userRoleIds));
if (CollUtil.isNotEmpty(permissionList)) {
// 使用 IN 条件查询库位(库位的 parentId 在有权限的仓库 ID 中)
List<Long> authorizedWarehouseIds = permissionList.stream().map(ConfigPermissionDO::getSourceId).distinct().toList();
pageReqVO.setAuthorizedWarehouseIds(authorizedWarehouseIds);
}
}
return configWarehouseLocationMapper.selectPage(pageReqVO);
}