From 36c95928ba95700324d12341c666b6ab3d6c051f Mon Sep 17 00:00:00 2001 From: liuhanqing Date: Mon, 16 Jun 2025 13:56:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=93=E5=BA=93=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=8C=83=E5=9B=B4=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bas/warehouse/domain/BasWarehouse.java | 8 +++- .../service/impl/BasWarehouseServiceImpl.java | 39 +++++++++++---- .../bas/warehouse/BasWarehouseMapper.xml | 16 +++++-- .../common/core/domain/entity/SysRole.java | 15 ++++++ .../framework/aspectj/DataScopeAspect.java | 3 ++ .../ruoyi/system/domain/SysRoleWarehouse.java | 48 +++++++++++++++++++ .../system/mapper/SysRoleWarehouseMapper.java | 21 ++++++++ .../service/impl/SysRoleServiceImpl.java | 42 +++++++++++++--- .../mapper/system/SysRoleWarehouseMapper.xml | 21 ++++++++ ruoyi-ui/src/lang/en.js | 13 +---- ruoyi-ui/src/lang/hu.js | 1 + ruoyi-ui/src/lang/zh.js | 2 + ruoyi-ui/src/views/bas/warehouse/index.vue | 20 ++++---- ruoyi-ui/src/views/system/role/index.vue | 23 ++++++++- 14 files changed, 230 insertions(+), 42 deletions(-) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleWarehouse.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleWarehouseMapper.java create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysRoleWarehouseMapper.xml diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/warehouse/domain/BasWarehouse.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/warehouse/domain/BasWarehouse.java index 624c477..f63985c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/warehouse/domain/BasWarehouse.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/warehouse/domain/BasWarehouse.java @@ -6,9 +6,11 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + /** * 仓库管理对象 bas_warehouse - * + * * @author lsy * @date 2025-05-20 */ @@ -55,6 +57,10 @@ public class BasWarehouse extends BaseEntity @Excel(name = "是否可用", readConverterExp = "不=允许为空") private String isCurrent; + /*仓库数据权限*/ + private List dataScope; + + // @Override // public String toString() { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/warehouse/service/impl/BasWarehouseServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/warehouse/service/impl/BasWarehouseServiceImpl.java index dac203b..df69308 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/warehouse/service/impl/BasWarehouseServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/warehouse/service/impl/BasWarehouseServiceImpl.java @@ -1,17 +1,26 @@ package com.ruoyi.bas.warehouse.service.impl; +import cn.hutool.core.collection.CollUtil; import com.ruoyi.bas.warehouse.domain.BasWarehouse; import com.ruoyi.bas.warehouse.mapper.BasWarehouseMapper; import com.ruoyi.bas.warehouse.service.IBasWarehouseService; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.system.mapper.SysUserRoleMapper; +import com.ruoyi.system.service.ISysRoleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * 仓库管理Service业务层处理 - * + * * @author lsy * @date 2025-05-20 */ @@ -20,10 +29,12 @@ public class BasWarehouseServiceImpl implements IBasWarehouseService { @Autowired private BasWarehouseMapper basWarehouseMapper; + @Autowired + private ISysRoleService sysRoleService; /** * 查询仓库管理 - * + * * @param warehouseId 仓库管理主键 * @return 仓库管理 */ @@ -35,19 +46,31 @@ public class BasWarehouseServiceImpl implements IBasWarehouseService /** * 查询仓库管理列表 - * + * * @param basWarehouse 仓库管理 * @return 仓库管理 */ @Override public List selectBasWarehouseList(BasWarehouse basWarehouse) { - return basWarehouseMapper.selectBasWarehouseList(basWarehouse); + List roles = sysRoleService.selectRolesByUserId(SecurityUtils.getUserId()); + if (roles.stream().anyMatch(SysRole::isAdmin)){ + return basWarehouseMapper.selectBasWarehouseList(basWarehouse); + }else { + List dateScope =new ArrayList<>(); + for (SysRole role : roles) { + if (CollUtil.isNotEmpty(role.getWarehouseDataScope())){ + dateScope.addAll(role.getWarehouseDataScope()); + } + } + basWarehouse.setDataScope(dateScope); + return basWarehouseMapper.selectBasWarehouseList(basWarehouse); + } } /** * 新增仓库管理 - * + * * @param basWarehouse 仓库管理 * @return 结果 */ @@ -59,7 +82,7 @@ public class BasWarehouseServiceImpl implements IBasWarehouseService /** * 修改仓库管理 - * + * * @param basWarehouse 仓库管理 * @return 结果 */ @@ -71,7 +94,7 @@ public class BasWarehouseServiceImpl implements IBasWarehouseService /** * 批量删除仓库管理 - * + * * @param warehouseIds 需要删除的仓库管理主键 * @return 结果 */ @@ -83,7 +106,7 @@ public class BasWarehouseServiceImpl implements IBasWarehouseService /** * 删除仓库管理信息 - * + * * @param warehouseId 仓库管理主键 * @return 结果 */ diff --git a/ruoyi-admin/src/main/resources/mapper/bas/warehouse/BasWarehouseMapper.xml b/ruoyi-admin/src/main/resources/mapper/bas/warehouse/BasWarehouseMapper.xml index a4daef5..423f06c 100644 --- a/ruoyi-admin/src/main/resources/mapper/bas/warehouse/BasWarehouseMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/bas/warehouse/BasWarehouseMapper.xml @@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -22,7 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + - \ No newline at end of file + diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java index 07a8476..4609cbb 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java @@ -1,5 +1,6 @@ package com.ruoyi.common.core.domain.entity; +import java.util.List; import java.util.Set; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @@ -69,6 +70,20 @@ public class SysRole extends BaseEntity /** 角色菜单权限 */ private Set permissions; + /** 仓库权限 */ + private List warehouseDataScope; + + public List getWarehouseDataScope() { + return warehouseDataScope; + } + + public void setWarehouseDataScope(List warehouseDataScope) { + this.warehouseDataScope = warehouseDataScope; + } + + public void setAdmin(boolean admin) { + this.admin = admin; + } private boolean admin; diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java index 26b9488..5f36f0e 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java @@ -2,6 +2,9 @@ package com.ruoyi.framework.aspectj; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; + +import cn.hutool.core.collection.CollUtil; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleWarehouse.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleWarehouse.java new file mode 100644 index 0000000..d6295ca --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleWarehouse.java @@ -0,0 +1,48 @@ +package com.ruoyi.system.domain; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 角色和菜单关联 sys_role_menu + * + * @author ruoyi + */ +public class SysRoleWarehouse +{ + /** 角色ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long roleId; + + /** 仓库ID */ + @JsonSerialize(using = ToStringSerializer.class) + private String warehouseId; + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public String getWarehouseId() { + return warehouseId; + } + + public void setWarehouseId(String warehouseId) { + this.warehouseId = warehouseId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("warehouseId", getWarehouseId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleWarehouseMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleWarehouseMapper.java new file mode 100644 index 0000000..0a9190a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleWarehouseMapper.java @@ -0,0 +1,21 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysRoleMenu; +import com.ruoyi.system.domain.SysRoleWarehouse; + +import java.util.List; + +public interface SysRoleWarehouseMapper { + + /** + * 批量新增角色仓库信息 + * + * @param roleWarehouseList 角色菜单列表 + * @return 结果 + */ + public int batchRoleWarehouse(List roleWarehouseList); + + List selectRoleWarehouseByRoleId(Long roleId); + + void deleteRoleWarehouseByRoleId(Long roleId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index 6abde6e..768f206 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -6,7 +6,10 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.IdUtil; +import com.ruoyi.system.domain.SysRoleWarehouse; +import com.ruoyi.system.mapper.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -21,10 +24,6 @@ import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.domain.SysRoleDept; import com.ruoyi.system.domain.SysRoleMenu; import com.ruoyi.system.domain.SysUserRole; -import com.ruoyi.system.mapper.SysRoleDeptMapper; -import com.ruoyi.system.mapper.SysRoleMapper; -import com.ruoyi.system.mapper.SysRoleMenuMapper; -import com.ruoyi.system.mapper.SysUserRoleMapper; import com.ruoyi.system.service.ISysRoleService; /** @@ -47,6 +46,9 @@ public class SysRoleServiceImpl implements ISysRoleService @Autowired private SysRoleDeptMapper roleDeptMapper; + @Autowired + private SysRoleWarehouseMapper roleWarehouseMapper; + /** * 根据条件分页查询角色数据 * @@ -70,6 +72,9 @@ public class SysRoleServiceImpl implements ISysRoleService public List selectRolesByUserId(Long userId) { List userRoles = roleMapper.selectRolePermissionByUserId(userId); + for (SysRole userRole : userRoles) { + userRole.setWarehouseDataScope(roleWarehouseMapper.selectRoleWarehouseByRoleId(userRole.getRoleId())); + } List roles = selectRoleAll(); for (SysRole role : roles) { @@ -78,6 +83,7 @@ public class SysRoleServiceImpl implements ISysRoleService if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) { role.setFlag(true); + role.setWarehouseDataScope(userRole.getWarehouseDataScope()); break; } } @@ -138,7 +144,10 @@ public class SysRoleServiceImpl implements ISysRoleService @Override public SysRole selectRoleById(Long roleId) { - return roleMapper.selectRoleById(roleId); + SysRole sysRole = roleMapper.selectRoleById(roleId); + List warehouseList = roleWarehouseMapper.selectRoleWarehouseByRoleId(roleId); + sysRole.setWarehouseDataScope(warehouseList); + return sysRole; } /** @@ -285,7 +294,28 @@ public class SysRoleServiceImpl implements ISysRoleService // 删除角色与部门关联 roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); // 新增角色和部门信息(数据权限) - return insertRoleDept(role); + int i = insertRoleDept(role); + int i1 = insertRoleWareHouse(role); + return i; + } + + private int insertRoleWareHouse(SysRole role) { + int rows = 1; + // 新增用户与角色管理 + List list = new ArrayList(); + for (String wareHouseId : role.getWarehouseDataScope()) + { + SysRoleWarehouse rw = new SysRoleWarehouse(); + rw.setRoleId(role.getRoleId()); + rw.setWarehouseId(wareHouseId); + list.add(rw); + } + if (CollUtil.isNotEmpty(list)) + { + roleWarehouseMapper.deleteRoleWarehouseByRoleId(role.getRoleId()); + rows = roleWarehouseMapper.batchRoleWarehouse(list); + } + return rows; } /** diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleWarehouseMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleWarehouseMapper.xml new file mode 100644 index 0000000..c589c6d --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleWarehouseMapper.xml @@ -0,0 +1,21 @@ + + + + + + + insert into sys_role_warehouse(role_id, warehouse_id) values + + (#{item.roleId},#{item.warehouseId}) + + + + delete from sys_role_warehouse where role_id=#{roleId} + + + + diff --git a/ruoyi-ui/src/lang/en.js b/ruoyi-ui/src/lang/en.js index b4a31a5..e0ce228 100644 --- a/ruoyi-ui/src/lang/en.js +++ b/ruoyi-ui/src/lang/en.js @@ -1422,6 +1422,7 @@ export default { placeholderEmail: 'Enter Email', placeholderPost: 'Select Post', placeholderGender: 'Select Gender', + selectWarehouse: 'Select Warehouse', //--------------交互按钮-------------- btnSearch: 'Search', @@ -3048,16 +3049,6 @@ export default { deleteSuccess: 'deleteSuccess', deleteConfirm: 'Are you sure to delete the customerNo with ID {ids}?' }, -// ***************产品基础表添加字段************** - basproduct1:{ - englishName:"englishName", - netWeightPerUnit:"netWeightPerUnit", - long:"long", - wide:"wide", - tall:"tall", - volume:"volume", - price:"price", - notes:"notes" - }, + } diff --git a/ruoyi-ui/src/lang/hu.js b/ruoyi-ui/src/lang/hu.js index 12c89f0..bd8dad1 100644 --- a/ruoyi-ui/src/lang/hu.js +++ b/ruoyi-ui/src/lang/hu.js @@ -1369,6 +1369,7 @@ export default { placeholderEmail: '请输入邮箱', placeholderPost: '请选择岗位', placeholderGender: '请选择性别', + selectWarehouse: '请选择仓库', //--------------交互按钮-------------- btnSearch: '搜索', diff --git a/ruoyi-ui/src/lang/zh.js b/ruoyi-ui/src/lang/zh.js index b892744..307aa56 100644 --- a/ruoyi-ui/src/lang/zh.js +++ b/ruoyi-ui/src/lang/zh.js @@ -1409,6 +1409,7 @@ export default { roleName: '角色名称', roleKey: '权限字符', dataScope: '权限范围', + warehouseDataScope: '仓库范围', menuAccess: '菜单权限', roleSort: '显示顺序', status: '角色状态', @@ -1431,6 +1432,7 @@ export default { placeholderEmail: '请输入邮箱', placeholderPost: '请选择岗位', placeholderGender: '请选择性别', + selectWarehouse: '请选择仓库', //--------------交互按钮-------------- btnSearch: '搜索', diff --git a/ruoyi-ui/src/views/bas/warehouse/index.vue b/ruoyi-ui/src/views/bas/warehouse/index.vue index 385dd5e..006c985 100644 --- a/ruoyi-ui/src/views/bas/warehouse/index.vue +++ b/ruoyi-ui/src/views/bas/warehouse/index.vue @@ -1,8 +1,8 @@ - + - + @@ -377,7 +377,7 @@ export default { //--------------------------------- this.isDisabledForId = true - this.reset() + this.reset() const warehouseId = row.warehouseId || this.ids getWarehouse(warehouseId).then(response => { this.form = response.data @@ -396,7 +396,7 @@ export default { this.open = false this.getList() }) - } + } if (this.title == this.$t('warehouse.addWarehouseItem')) { addWarehouse(this.form).then(response => { this.$modal.msgSuccess(this.$t('warehouse.addsuccessInfo')) @@ -434,7 +434,7 @@ export default { if (this.$i18n.locale.startsWith('en')) { if (this.title === "修改仓库管理") { return "Edit Warehouse Management Item"; - } + } if (this.title === "添加仓库管理") { return "Add Warehouse Management Item"; } @@ -448,11 +448,11 @@ export default { computed: { labelWidthForSearch() { - const lang = this.$i18n.locale; + const lang = this.$i18n.locale; return lang.startsWith('en') ? '84px' : '68px'; }, labelWidthForFunction() { - const lang = this.$i18n.locale; + const lang = this.$i18n.locale; return lang.startsWith('en') ? '150px' : '120px'; }, diff --git a/ruoyi-ui/src/views/system/role/index.vue b/ruoyi-ui/src/views/system/role/index.vue index b55e286..bde79a5 100644 --- a/ruoyi-ui/src/views/system/role/index.vue +++ b/ruoyi-ui/src/views/system/role/index.vue @@ -265,6 +265,16 @@ > + + + + + @@ -300,6 +310,7 @@