From 86db4db68e50e6c58af2017c6df4ba1af6a5b105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Fri, 13 Feb 2026 09:27:12 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E6=89=8B=E5=8A=A8=E5=88=86=E9=85=8D?= =?UTF-8?q?=E5=AD=90=E9=A1=B9=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ShiftMaterialDetailApplicationService.java | 46 +++++++++++-- .../persistence/ShiftManageImpl.java | 69 ++++++++++++++++++- 2 files changed, 108 insertions(+), 7 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/shiftMaterialDetail/ShiftMaterialDetailApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/shiftMaterialDetail/ShiftMaterialDetailApplicationService.java index 256f592ea..08f0fae37 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/shiftMaterialDetail/ShiftMaterialDetailApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/shiftMaterialDetail/ShiftMaterialDetailApplicationService.java @@ -119,7 +119,7 @@ public class ShiftMaterialDetailApplicationService { } // 性能优化:批量获取批次属性,避免N+1查询问题 - // 1. 收集所有唯一的materialBaseInfoId + // 1. 收集所有唯一的materialBaseInfoId(包括子项的,此时子项还未构建,所以直接遍历所有项) Set materialBaseInfoIdSet = list.stream() .map(ShiftMaterialDetailPO::getMaterialBaseInfoId) .filter(Objects::nonNull) @@ -146,18 +146,47 @@ public class ShiftMaterialDetailApplicationService { } } - // 3. 为每个物料明细设置更多属性(从库存表中获取值) - setMaterialMoreDetailListFromInventory(list, batchDetailMap); + // 3. 构建父子关系(类似queryListChildren的逻辑) + List parentList = list.stream() + .filter(e -> e.getLevel() != null && e.getLevel() == 1) + .collect(Collectors.toList()); - return list; + // 递归构建子项关系 + parentList.forEach(parent -> { + List children = getChildren(parent.getUniqueId(), list, 2); + parent.setChildren(children); + }); + + // 4. 为每个物料明细(包括子项)设置更多属性(从库存表中获取值) + setMaterialMoreDetailListFromInventoryRecursively(parentList, batchDetailMap); + + return parentList; } /** - * 为移位物料明细设置更多属性(从库存表中获取值) + * 递归获取子项 + */ + private List getChildren(Long parentUniqueId, List allList, Integer maxLevel) { + List childrenList = allList.stream() + .filter(materialDetailPO -> parentUniqueId != null && parentUniqueId.equals(materialDetailPO.getParentUniqueId())) + .collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(childrenList)) { + childrenList.forEach(child -> { + if (child.getLevel() != null && child.getLevel() < maxLevel) { + child.setChildren(getChildren(child.getUniqueId(), allList, maxLevel)); + } + }); + } + return childrenList; + } + + /** + * 为移位物料明细设置更多属性(从库存表中获取值),递归处理子项 * @param shiftMaterialDetailPOList 移位物料明细列表 * @param batchDetailMap 批次属性Map */ - private void setMaterialMoreDetailListFromInventory(List shiftMaterialDetailPOList, + private void setMaterialMoreDetailListFromInventoryRecursively(List shiftMaterialDetailPOList, Map> batchDetailMap) { if (CollectionUtils.isEmpty(shiftMaterialDetailPOList)) { return; @@ -235,6 +264,11 @@ public class ShiftMaterialDetailApplicationService { shiftMaterialDetailPO.getUniqueId(), shiftMaterialDetailPO.getMaterialBaseInfoId(), shiftMaterialDetailPO.getMaterialInventoryId(), materialMoreDetailList != null ? materialMoreDetailList.size() : 0); + + // 递归处理子项 + if (!CollectionUtils.isEmpty(shiftMaterialDetailPO.getChildren())) { + setMaterialMoreDetailListFromInventoryRecursively(shiftMaterialDetailPO.getChildren(), batchDetailMap); + } }); } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/shiftManage/repository/persistence/ShiftManageImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/shiftManage/repository/persistence/ShiftManageImpl.java index 1e0f11c85..69edf470c 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/shiftManage/repository/persistence/ShiftManageImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/shiftManage/repository/persistence/ShiftManageImpl.java @@ -41,6 +41,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; @@ -113,7 +114,9 @@ public class ShiftManageImpl extends ServiceImpl setWarehouseInfo(e); //设置物料信息 setMaterialDetailInfo(e); - e.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId)); + // 设置父级信息 + Long parentUniqueId = idGenerator.snowflakeId(SnowFlakeConstants.wmsId); + e.setUniqueId(parentUniqueId); e.setShiftNumber(shiftManage.getShiftNumber()); e.setOrganizationId(loginUser.getUserPo().getOrganizationId()); e.setOrganizationName(loginUser.getUserPo().getOrganizationName()); @@ -125,10 +128,74 @@ public class ShiftManageImpl extends ServiceImpl e.setUpdateBy(loginUser.getUserid()); e.setUpdateTime(new Date()); e.setSerialNumberManage(e.getSerialNumberManage()); + // 设置父级level为1 + if (e.getLevel() == null) { + e.setLevel(1); + } ShiftMaterialDetail shiftMaterialDetail = new ShiftMaterialDetail(); BeanUtils.copyProperties(e, shiftMaterialDetail); shiftMaterialDetail.setNewStorageLocationName(newStorageLocationName); shiftMaterialDetailList.add(shiftMaterialDetail); + + // 处理子项 + List shiftMaterialDetailDOChildList = e.getChildren(); + if (!CollectionUtils.isEmpty(shiftMaterialDetailDOChildList)) { + for (ShiftMaterialDetailDO shiftMaterialDetailDOChild : shiftMaterialDetailDOChildList) { + // 如果子项没有materialInventoryId,则从父级继承库存相关信息 + if (shiftMaterialDetailDOChild.getMaterialInventoryId() == null) { + // 从父级继承库存相关信息 + shiftMaterialDetailDOChild.setMaterialInventoryId(e.getMaterialInventoryId()); + shiftMaterialDetailDOChild.setMaterialBaseInfoId(e.getMaterialBaseInfoId()); + shiftMaterialDetailDOChild.setMaterialCode(e.getMaterialCode()); + shiftMaterialDetailDOChild.setMaterialName(e.getMaterialName()); + shiftMaterialDetailDOChild.setBarCode(e.getBarCode()); + shiftMaterialDetailDOChild.setInventoryQuantity(e.getInventoryQuantity()); + shiftMaterialDetailDOChild.setOldWarehouseId(e.getOldWarehouseId()); + shiftMaterialDetailDOChild.setOldWarehouseCode(e.getOldWarehouseCode()); + shiftMaterialDetailDOChild.setOldWarehouseName(e.getOldWarehouseName()); + shiftMaterialDetailDOChild.setOldStorageSectionId(e.getOldStorageSectionId()); + shiftMaterialDetailDOChild.setOldStorageCode(e.getOldStorageCode()); + shiftMaterialDetailDOChild.setOldStorageName(e.getOldStorageName()); + shiftMaterialDetailDOChild.setOldStorageLocationId(e.getOldStorageLocationId()); + shiftMaterialDetailDOChild.setOldStorageLocationCode(e.getOldStorageLocationCode()); + shiftMaterialDetailDOChild.setOldStorageLocationName(e.getOldStorageLocationName()); + shiftMaterialDetailDOChild.setBatchNumber(e.getBatchNumber()); + shiftMaterialDetailDOChild.setMaterialStatusCode(e.getMaterialStatusCode()); + shiftMaterialDetailDOChild.setMaterialStatusName(e.getMaterialStatusName()); + shiftMaterialDetailDOChild.setContainerId(e.getContainerId()); + shiftMaterialDetailDOChild.setContainerCode(e.getContainerCode()); + shiftMaterialDetailDOChild.setContainerType(e.getContainerType()); + shiftMaterialDetailDOChild.setContainerTypeName(e.getContainerTypeName()); + } else { + // 如果子项有materialInventoryId,则设置库存信息 + setMaterialInventory(shiftMaterialDetailDOChild); + } + // 设置库位信息和物料信息 + setWarehouseInfo(shiftMaterialDetailDOChild); + setMaterialDetailInfo(shiftMaterialDetailDOChild); + + // 设置子项的uniqueId和parentUniqueId + Long childUniqueId = idGenerator.snowflakeId(SnowFlakeConstants.wmsId); + shiftMaterialDetailDOChild.setUniqueId(childUniqueId); + shiftMaterialDetailDOChild.setParentUniqueId(parentUniqueId); + shiftMaterialDetailDOChild.setShiftNumber(shiftManage.getShiftNumber()); + shiftMaterialDetailDOChild.setOrganizationId(loginUser.getUserPo().getOrganizationId()); + shiftMaterialDetailDOChild.setOrganizationName(loginUser.getUserPo().getOrganizationName()); + shiftMaterialDetailDOChild.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + shiftMaterialDetailDOChild.setCreateByName(loginUser.getUsername()); + shiftMaterialDetailDOChild.setCreateBy(loginUser.getUserid()); + shiftMaterialDetailDOChild.setCreateTime(new Date()); + shiftMaterialDetailDOChild.setUpdateByName(loginUser.getUsername()); + shiftMaterialDetailDOChild.setUpdateBy(loginUser.getUserid()); + shiftMaterialDetailDOChild.setUpdateTime(new Date()); + // 设置子项level为2 + shiftMaterialDetailDOChild.setLevel(2); + + ShiftMaterialDetail shiftMaterialDetailChild = new ShiftMaterialDetail(); + BeanUtils.copyProperties(shiftMaterialDetailDOChild, shiftMaterialDetailChild); + shiftMaterialDetailList.add(shiftMaterialDetailChild); + } + } }); iShiftMaterialDetailService.saveBatch(shiftMaterialDetailList); Boolean b; From 766a401d9ad62bc4c3af43cba1aee4225763fc0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Mon, 23 Feb 2026 14:09:45 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E5=8D=95=E7=9A=84=E8=AE=A1=E5=88=92=E5=85=A5=E5=BA=93=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/persistence/InMaterialDetailImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inMaterialDetail/repository/persistence/InMaterialDetailImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inMaterialDetail/repository/persistence/InMaterialDetailImpl.java index d02e44bbc..8236b5e2a 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/inMaterialDetail/repository/persistence/InMaterialDetailImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inMaterialDetail/repository/persistence/InMaterialDetailImpl.java @@ -147,6 +147,10 @@ public class InMaterialDetailImpl extends ServiceImpl Date: Mon, 23 Feb 2026 14:18:15 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=BB=93=E5=BA=93=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9D=83=E9=99=90=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Lease/LeaseApplicationService.java | 34 ++++++------------- .../StorageLocationApplicationService.java | 16 +++++++-- ...torageLocationGroupApplicationService.java | 25 ++++++++++---- .../StorageSectionApplicationService.java | 16 ++++++--- .../WarehouseApplicationService.java | 16 ++++++--- 5 files changed, 66 insertions(+), 41 deletions(-) diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/Lease/LeaseApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/Lease/LeaseApplicationService.java index f64ace339..0f4938221 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/Lease/LeaseApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/Lease/LeaseApplicationService.java @@ -76,29 +76,17 @@ public class LeaseApplicationService { public List queryList(LeaseDO leaseDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null && loginUser.getUserPo() != null){ - Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId(); - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - - // 数据权限:根据organizationId来设置查询权限 - // organizationId等于2827时查询全部,其他仅查询各自组织的信息 - if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) { - // 南光组织(organizationId=2827):可以查询所有组织的数据 - // 如果前端传递了 organizationId,使用前端传递的值进行过滤 - // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 - if (leaseDO.getOrganizationId() == null) { - leaseDO.setOrganizationId(null); - leaseDO.setTopOrganizationId(null); - } - } else { - // 其他组织:设置organizationId,只查询当前组织的数据 - if (topOrganizationId != null && topOrganizationId != 1){ - leaseDO.setTopOrganizationId(topOrganizationId); - } - // 如果前端传递了organizationId,验证是否与当前登录用户的组织ID一致 - if (leaseDO.getOrganizationId() != null && !leaseDO.getOrganizationId().equals(loginUserOrganizationId)) { - // 前端传递了其他组织的organizationId,强制使用当前登录用户的组织ID,防止越权查询 - leaseDO.setOrganizationId(loginUserOrganizationId); + //前端传organizationId = 2827的时候查询所有组织的数据 + Long frontendOrganizationId = leaseDO.getOrganizationId(); + if (frontendOrganizationId != null && frontendOrganizationId == 2827L) { + // 前端传递2827时,查询所有组织的数据,将organizationId设置为null + leaseDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + if (userOrganizationId != null) { + leaseDO.setOrganizationId(userOrganizationId); } } } diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java index 2d69d28eb..d1b436aab 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java @@ -45,9 +45,19 @@ public class StorageLocationApplicationService { public List queryList(StorageLocationDO storageLocationDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null){ - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - storageLocationDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + //前端传organizationId = 2827的时候查询所有组织的数据 + Long frontendOrganizationId = storageLocationDO.getOrganizationId(); + if (frontendOrganizationId != null && frontendOrganizationId == 2827L) { + // 前端传递2827时,查询所有组织的数据,将organizationId设置为null + storageLocationDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + if (userOrganizationId != null) { + storageLocationDO.setOrganizationId(userOrganizationId); + } + } } // 只有当前端没有明确传仓库条件时,才使用用户关联仓库缓存进行过滤; // 避免出现“单据仓库=常温仓,但库位列表仍显示保税仓”的错配问题。 diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocationGroup/StorageLocationGroupApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocationGroup/StorageLocationGroupApplicationService.java index 68e902720..4fa0fc453 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocationGroup/StorageLocationGroupApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocationGroup/StorageLocationGroupApplicationService.java @@ -28,14 +28,25 @@ public class StorageLocationGroupApplicationService { public List queryList(StorageLocationGroupDO storageLocationGroupDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - storageLocationGroupDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + //前端传organizationId = 2827的时候查询所有组织的数据 + Long frontendOrganizationId = storageLocationGroupDO.getOrganizationId(); + if (frontendOrganizationId != null && frontendOrganizationId == 2827L) { + // 前端传递2827时,查询所有组织的数据,将organizationId设置为null + storageLocationGroupDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + if (userOrganizationId != null) { + storageLocationGroupDO.setOrganizationId(userOrganizationId); + } } - Long organizationId = loginUser.getUserPo().getOrganizationId(); - if (organizationId != null && organizationId != 1){ - storageLocationGroupDO.setOrganizationId(organizationId); + } + // 处理topOrganizationId逻辑 + if (loginUser != null && loginUser.getUserPo() != null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + storageLocationGroupDO.setTopOrganizationId(topOrganizationId); } } return storageLocationGroupDomainService.queryList(storageLocationGroupDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageSection/StorageSectionApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageSection/StorageSectionApplicationService.java index 4df1b92dc..28f4f5d49 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageSection/StorageSectionApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageSection/StorageSectionApplicationService.java @@ -43,10 +43,18 @@ public class StorageSectionApplicationService { public List queryList(StorageSectionDO storageSectionDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - storageSectionDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + //前端传organizationId = 2827的时候查询所有组织的数据 + Long frontendOrganizationId = storageSectionDO.getOrganizationId(); + if (frontendOrganizationId != null && frontendOrganizationId == 2827L) { + // 前端传递2827时,查询所有组织的数据,将organizationId设置为null + storageSectionDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + if (userOrganizationId != null) { + storageSectionDO.setOrganizationId(userOrganizationId); + } } } return storageSectionDomainService.queryList(storageSectionDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/warehouse/WarehouseApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/warehouse/WarehouseApplicationService.java index 7765d64bb..313f91bd9 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/warehouse/WarehouseApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/warehouse/WarehouseApplicationService.java @@ -42,10 +42,18 @@ public class WarehouseApplicationService { public List queryList(WarehouseDO warehouseDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ - Long organizationId = loginUser.getUserPo().getOrganizationId(); - if (organizationId != null && organizationId != 1){ - warehouseDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); + //前端传organizationId = 2827的时候查询所有组织的数据 + Long frontendOrganizationId = warehouseDO.getOrganizationId(); + if (frontendOrganizationId != null && frontendOrganizationId == 2827L) { + // 前端传递2827时,查询所有组织的数据,将organizationId设置为null + warehouseDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + if (userOrganizationId != null) { + warehouseDO.setOrganizationId(userOrganizationId); + } } } return warehouseDomainService.queryList(warehouseDO); From c110ab5dcc67005b3479cacad4f380accdeab635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Mon, 23 Feb 2026 14:23:18 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Lease/LeaseApplicationService.java | 80 +++++++++---------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/Lease/LeaseApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/Lease/LeaseApplicationService.java index 0f4938221..2f6355a0e 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/Lease/LeaseApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/Lease/LeaseApplicationService.java @@ -43,7 +43,7 @@ import java.util.stream.Collectors; /** * 租赁管理ApplicationService - * + * * @author gen * @date 2024-05-07 */ @@ -67,8 +67,9 @@ public class LeaseApplicationService { private StorageSectionApplicationService storageSectionApplicationService; @Autowired - private IShipperLeaseDetailsService shipperLeaseDetailsService; - + private IShipperLeaseDetailsService shipperLeaseDetailsService; + @Autowired + private SystemServiceFeign systemServiceFeign; /** * 分页查询租赁管理列表 @@ -77,23 +78,24 @@ public class LeaseApplicationService { public List queryList(LeaseDO leaseDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); //前端传organizationId = 2827的时候查询所有组织的数据 - Long frontendOrganizationId = leaseDO.getOrganizationId(); - if (frontendOrganizationId != null && frontendOrganizationId == 2827L) { - // 前端传递2827时,查询所有组织的数据,将organizationId设置为null - leaseDO.setOrganizationId(null); - } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (loginUser != null && loginUser.getUserPo() != null) { - Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - if (userOrganizationId != null) { - leaseDO.setOrganizationId(userOrganizationId); + if (loginUser != null) { + Long frontendOrganizationId = leaseDO.getOrganizationId(); + if (frontendOrganizationId != null && frontendOrganizationId == 2827L) { + // 前端传递2827时,查询所有组织的数据,将organizationId设置为null + leaseDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + if (userOrganizationId != null) { + leaseDO.setOrganizationId(userOrganizationId); + } } } } return leaseDomainService.queryList(leaseDO); } - /** * 新增租赁管理 */ @@ -113,12 +115,9 @@ public class LeaseApplicationService { return leaseDomainService.insert(leaseDO); } - @Autowired - private SystemServiceFeign systemServiceFeign; - private void setWarehouseInfo(LeaseDO leaseDO) { AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(leaseDO.getWarehouseId()); - if(!"200".equals(String.valueOf(ajaxResult.get("code")))){ + if (!"200".equals(String.valueOf(ajaxResult.get("code")))) { throw new ServiceException("获取仓库信息失败"); } WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class); @@ -158,19 +157,18 @@ public class LeaseApplicationService { /** * 获取租赁管理详细信息 */ - public LeasePO getInfo(Long leaseId) - { + public LeasePO getInfo(Long leaseId) { return leaseDomainService.getInfo(leaseId); } /** + * @param leaseIds + * @return Boolean * @description 批量作废租赁 * @author ZhouGY * @date 2024/5/13 9:46 - * @param leaseIds - * @return Boolean */ - public Boolean nullifyByIds(List leaseIds){ + public Boolean nullifyByIds(List leaseIds) { return leaseDomainService.nullifyByIds(leaseIds); } @@ -184,8 +182,8 @@ public class LeaseApplicationService { log.info("开始执行货主租赁明细定时任务"); // 计算前一天的日期,将时间设置为当天的0点0分0秒,只保留日期部分 final Date yesterday = DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), -1)); - - LeaseDO leaseDO = new LeaseDO(); + + LeaseDO leaseDO = new LeaseDO(); leaseDO.setTime(yesterday); //查询有效期内的租赁 List leasePOS = queryList(leaseDO); @@ -195,10 +193,10 @@ public class LeaseApplicationService { List casualRental = leasePOS.stream() .filter(lease -> lease.getLeaseType().equals("散租")) .collect(Collectors.toList()); - + List shipperLeaseDetailsList = new ArrayList<>(); //需要保存或更新的数据 List shipperLeaseDetailsToUpdate = new ArrayList<>(); //需要更新的数据 - + // 查询已存在的货主租赁明细数据(用于判断是新增还是更新) ShipperLeaseDetailsDO queryDO = new ShipperLeaseDetailsDO(); queryDO.setBusinessDate(yesterday); @@ -206,18 +204,18 @@ public class LeaseApplicationService { // 构建已存在数据的Map,key为:业务日期+货主ID+仓库ID+租赁类型 Map existingMap = existingList.stream() .collect(Collectors.toMap( - item -> buildKey(yesterday, item.getShipperId(), item.getWarehouseId(), item.getLeaseType()), - item -> item, - (existing, replacement) -> existing // 如果有重复key,保留第一个 + item -> buildKey(yesterday, item.getShipperId(), item.getWarehouseId(), item.getLeaseType()), + item -> item, + (existing, replacement) -> existing // 如果有重复key,保留第一个 )); - + // 处理整租 for (LeasePO en : entireUnit) { String key = buildKey(yesterday, en.getShipperId(), en.getWarehouseId(), en.getLeaseType()); ShipperLeaseDetails shipperLeaseDetails = new ShipperLeaseDetails(); BeanUtils.copyProperties(en, shipperLeaseDetails); shipperLeaseDetails.setBusinessDate(yesterday); - + // 如果已存在,则更新;否则新增 if (existingMap.containsKey(key)) { ShipperLeaseDetailsPO existing = existingMap.get(key); @@ -227,7 +225,7 @@ public class LeaseApplicationService { shipperLeaseDetailsList.add(shipperLeaseDetails); } } - + // 处理散租:从租赁管理页面维护的面积,效期内的散租客户面积之和 for (LeasePO ca : casualRental) { String key = buildKey(yesterday, ca.getShipperId(), ca.getWarehouseId(), ca.getLeaseType()); @@ -237,7 +235,7 @@ public class LeaseApplicationService { // 散租面积直接使用租赁管理页面维护的面积 shipperLeaseDetails.setLeaseArea(ca.getLeaseArea()); log.info("货主:{},仓库:{},散租面积:{}(来自租赁管理)", ca.getCargoOwnerName(), ca.getWarehouseName(), ca.getLeaseArea()); - + // 如果已存在,则更新;否则新增 if (existingMap.containsKey(key)) { ShipperLeaseDetailsPO existing = existingMap.get(key); @@ -247,22 +245,22 @@ public class LeaseApplicationService { shipperLeaseDetailsList.add(shipperLeaseDetails); } } - + // 批量新增货主租赁明细 if (shipperLeaseDetailsList.size() > 0) { shipperLeaseDetailsService.saveBatch(shipperLeaseDetailsList); log.info("新增货主租赁明细{}条", shipperLeaseDetailsList.size()); } - + // 批量更新货主租赁明细 if (shipperLeaseDetailsToUpdate.size() > 0) { shipperLeaseDetailsService.updateBatchById(shipperLeaseDetailsToUpdate); log.info("更新货主租赁明细{}条", shipperLeaseDetailsToUpdate.size()); } - + log.info("货主租赁明细定时任务执行完成,业务日期:{}", DateUtil.formatDate(yesterday)); } - + /** * 构建唯一key:业务日期+货主ID+仓库ID+租赁类型 */ @@ -293,7 +291,7 @@ public class LeaseApplicationService { ); //获取总面积 BigDecimal totalArea = BigDecimal.ZERO; - StorageSectionDO storageSectionDO = new StorageSectionDO(); + StorageSectionDO storageSectionDO = new StorageSectionDO(); storageSectionDO.setWarehouseId(shipperLeaseDetailsDO.getWarehouseId()); storageSectionDO.setOpeningUp(1); List storageSectionPOS = storageSectionApplicationService.queryList(storageSectionDO); @@ -311,9 +309,9 @@ public class LeaseApplicationService { BigDecimal fractionalLeaseArea = BigDecimal.ZERO; //计算整租和散租 for (ShipperLeaseDetailsPO shipperLeaseDetail : shipperLeaseDetails) { - if (shipperLeaseDetail.getLeaseType().equals("整租")){ + if (shipperLeaseDetail.getLeaseType().equals("整租")) { entireLeaseArea = entireLeaseArea.add(shipperLeaseDetail.getLeaseArea()); - }else { + } else { fractionalLeaseArea = fractionalLeaseArea.add(shipperLeaseDetail.getLeaseArea()); } warehouseOccupancyRate.setWarehouseName(shipperLeaseDetail.getWarehouseName()); From 135bd5d380616bf61335108c14c8a31ed63c748a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 24 Feb 2026 08:52:28 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E5=85=A5=E5=BA=93=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StockInOrderApplicationService.java | 16 ++++++++++++++-- .../StockReceiptOrderApplicationService.java | 16 ++++++++++++++-- .../StockShelfOrderApplicationService.java | 15 +++++++++++++-- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java index 305a161a0..6e1ad45b2 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java @@ -68,10 +68,22 @@ public class StockInOrderApplicationService { public List queryList(StockInOrderDO stockInOrderDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null){ + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + stockInOrderDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + stockInOrderDO.setOrganizationId(userOrganizationId); + } + } + // 处理topOrganizationId逻辑 Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); if (topOrganizationId != null && topOrganizationId != 1){ - stockInOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + stockInOrderDO.setTopOrganizationId(topOrganizationId); } // 前端有传warehouseId则优先使用传参;未传时才使用"用户关联仓库"作为默认值 if (stockInOrderDO.getWarehouseId() == null) { diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java index d3333ed15..3c17f2efc 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java @@ -91,10 +91,22 @@ public class StockReceiptOrderApplicationService { public List queryList(StockReceiptOrderDO stockReceiptOrderDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null){ + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + stockReceiptOrderDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + stockReceiptOrderDO.setOrganizationId(userOrganizationId); + } + } + // 处理topOrganizationId逻辑 Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); if (topOrganizationId != null && topOrganizationId != 1){ - stockReceiptOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + stockReceiptOrderDO.setTopOrganizationId(topOrganizationId); } try { AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java index 22acbc228..53a3b5443 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java @@ -97,10 +97,21 @@ public class StockShelfOrderApplicationService { public List queryList(StockShelfOrderDO stockShelfOrderDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null){ + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + stockShelfOrderDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + stockShelfOrderDO.setOrganizationId(userOrganizationId); + } + } Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); if (topOrganizationId != null && topOrganizationId != 1){ - stockShelfOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + stockShelfOrderDO.setTopOrganizationId(topOrganizationId); } try { AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); From 1fb2a21e9702deee69775e7f12ba181865492249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 24 Feb 2026 09:30:19 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E5=87=BA=E5=BA=93=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HandoverTaskOrderApplicationService.java | 17 ++++++++++++++--- .../PickingOrderApplicationService.java | 19 ++++++++++++++----- .../StockOutOrderApplicationService.java | 17 +++++++++++++++++ .../StockOutTaskOrderApplicationService.java | 17 ++++++++++++++--- 4 files changed, 59 insertions(+), 11 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/handoverTaskOrder/HandoverTaskOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/handoverTaskOrder/HandoverTaskOrderApplicationService.java index a2abba9fe..c4567e89f 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/handoverTaskOrder/HandoverTaskOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/handoverTaskOrder/HandoverTaskOrderApplicationService.java @@ -63,10 +63,21 @@ public class HandoverTaskOrderApplicationService { public List queryList(HandoverTaskOrderDO handoverTaskOrderDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + handoverTaskOrderDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + handoverTaskOrderDO.setOrganizationId(userOrganizationId); + } + } Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - handoverTaskOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (topOrganizationId != null && topOrganizationId != 1) { + handoverTaskOrderDO.setTopOrganizationId(topOrganizationId); } AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); handoverTaskOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId()); diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/pickingOrder/PickingOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/pickingOrder/PickingOrderApplicationService.java index a4237991d..61aaac165 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/pickingOrder/PickingOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/pickingOrder/PickingOrderApplicationService.java @@ -61,13 +61,22 @@ public class PickingOrderApplicationService { public List queryList(PickingOrderDO pickingOrderDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + pickingOrderDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + pickingOrderDO.setOrganizationId(userOrganizationId); + } + } Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - pickingOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (topOrganizationId != null && topOrganizationId != 1) { + pickingOrderDO.setTopOrganizationId(topOrganizationId); } - //AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); - //pickingOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId()); } List pickingOrderPOList = pickingOrderDomainService.queryList(pickingOrderDO); diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java index d24d10301..b02a7b624 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java @@ -85,6 +85,23 @@ public class StockOutOrderApplicationService { AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); stockOutOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId()); }*/ + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + stockOutOrderDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + stockOutOrderDO.setOrganizationId(userOrganizationId); + } + } + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + stockOutOrderDO.setTopOrganizationId(topOrganizationId); + } + } return stockOutOrderDomainService.queryList(stockOutOrderDO); } diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutTaskOrder/StockOutTaskOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutTaskOrder/StockOutTaskOrderApplicationService.java index 3d4a4bdfa..bb7423128 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutTaskOrder/StockOutTaskOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutTaskOrder/StockOutTaskOrderApplicationService.java @@ -46,10 +46,21 @@ public class StockOutTaskOrderApplicationService { public List queryList(StockOutTaskOrderDO stockOutTaskOrderDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + stockOutTaskOrderDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + stockOutTaskOrderDO.setOrganizationId(userOrganizationId); + } + } Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - stockOutTaskOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (topOrganizationId != null && topOrganizationId != 1) { + stockOutTaskOrderDO.setTopOrganizationId(topOrganizationId); } AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); stockOutTaskOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId()); From a3a1ec190b5a78f18bbbecf3a5e94911f3a598ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 24 Feb 2026 09:50:34 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E5=BA=93=E5=86=85=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E9=9A=94?= =?UTF-8?q?=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DifferentManageApplicationService.java | 15 +++++++++++++-- .../InvestigationManageApplicationService.java | 15 +++++++++++++-- .../ShiftManageApplicationService.java | 17 ++++++++++++++--- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/differentManage/DifferentManageApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/differentManage/DifferentManageApplicationService.java index 34cf8d9ab..3b21a29e6 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/differentManage/DifferentManageApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/differentManage/DifferentManageApplicationService.java @@ -32,10 +32,21 @@ public class DifferentManageApplicationService { public List queryList(DifferentManageDO differentManageDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null) { + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + differentManageDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + differentManageDO.setOrganizationId(userOrganizationId); + } + } Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); if (topOrganizationId != null && topOrganizationId != 1) { - differentManageDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + differentManageDO.setTopOrganizationId(topOrganizationId); } AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); differentManageDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId()); diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/investigationManage/InvestigationManageApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/investigationManage/InvestigationManageApplicationService.java index e753bf178..9108b6750 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/investigationManage/InvestigationManageApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/investigationManage/InvestigationManageApplicationService.java @@ -64,10 +64,21 @@ public class InvestigationManageApplicationService { public List queryList(InvestigationManageDO investigationManageDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null) { + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + investigationManageDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + investigationManageDO.setOrganizationId(userOrganizationId); + } + } Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); if (topOrganizationId != null && topOrganizationId != 1) { - investigationManageDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + investigationManageDO.setTopOrganizationId(topOrganizationId); } AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); investigationManageDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId()); diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/shiftManage/ShiftManageApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/shiftManage/ShiftManageApplicationService.java index 5af67514e..0c84bc688 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/shiftManage/ShiftManageApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/shiftManage/ShiftManageApplicationService.java @@ -67,10 +67,21 @@ public class ShiftManageApplicationService { public List queryList(ShiftManageDO shiftManageDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + shiftManageDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + shiftManageDO.setOrganizationId(userOrganizationId); + } + } Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - shiftManageDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (topOrganizationId != null && topOrganizationId != 1) { + shiftManageDO.setTopOrganizationId(topOrganizationId); } AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); shiftManageDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId()); From 3a577b5ed77565029a9789380fbcc984ee300590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 24 Feb 2026 13:29:51 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E4=B8=8A=E6=9E=B6=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=89=A9=E6=96=99=E6=9D=A1=E7=A0=81=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MaterialInventoryApplicationService.java | 18 +++++-- .../persistence/MaterialBarCodeImpl.java | 53 +++++++++++++++---- 2 files changed, 58 insertions(+), 13 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/materialInventory/MaterialInventoryApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/materialInventory/MaterialInventoryApplicationService.java index 80c489e30..11667a13e 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/materialInventory/MaterialInventoryApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/materialInventory/MaterialInventoryApplicationService.java @@ -51,12 +51,24 @@ public class MaterialInventoryApplicationService { public List queryList(MaterialInventoryDO materialInventoryDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null){ + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + materialInventoryDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + materialInventoryDO.setOrganizationId(userOrganizationId); + } + } + // 处理topOrganizationId逻辑 Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); if (topOrganizationId != null && topOrganizationId != 1){ - materialInventoryDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + materialInventoryDO.setTopOrganizationId(topOrganizationId); } - // 前端有传warehouseId则优先使用传参;未传时才使用“用户关联仓库”作为默认值 + // 前端有传warehouseId则优先使用传参;未传时才使用"用户关联仓库"作为默认值 if (materialInventoryDO.getWarehouseId() == null) { AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/materialBarCode/repository/persistence/MaterialBarCodeImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/materialBarCode/repository/persistence/MaterialBarCodeImpl.java index 858ffed5f..a68b651c7 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/materialBarCode/repository/persistence/MaterialBarCodeImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/materialBarCode/repository/persistence/MaterialBarCodeImpl.java @@ -75,26 +75,54 @@ public class MaterialBarCodeImpl extends ServiceImpl().lambda() - .set(MaterialBarCode::getDelFlag, 2) - .set(MaterialBarCode::getUpdateBy, loginUser.getUserid()) - .set(MaterialBarCode::getUpdateByName, loginUser.getUsername()) - .set(MaterialBarCode::getUpdateTime, new Date()) - .eq(MaterialBarCode::getMaterialBaseInfoId, materialBarCodeDOList.get(0).getMaterialBaseInfoId()) - .eq(MaterialBarCode::getDelFlag, 1)); + Long materialBaseInfoId = materialBarCodeDOList.get(0).getMaterialBaseInfoId(); + + // 先物理删除该物料的所有旧条码记录(包括已标记删除的),避免唯一性约束冲突 + // 因为唯一性约束 IDX_MATERIAL_BASE_ID_BAR_CODE 可能检查所有记录(包括 delFlag=2 的记录) + // 使用 Mapper 的 delete 方法进行物理删除,绕过逻辑删除拦截器 + materialBarCodeMapper.delete(new QueryWrapper().lambda() + .eq(MaterialBarCode::getMaterialBaseInfoId, materialBaseInfoId)); + + // 去重处理:确保没有重复的 material_base_info_id + bar_code 组合 + // 使用 LinkedHashMap 保持顺序,对所有记录进行去重 + // 对于 barCode 为 null 的记录,使用 packDetailId 来区分(因为唯一性约束可能不允许多个 null) + java.util.Map uniqueMap = new java.util.LinkedHashMap<>(); List materialBarCodeList = new ArrayList<>(); + for (MaterialBarCodeDO materialBarCodeDO : materialBarCodeDOList){ + String barCode = materialBarCodeDO.getBarCode(); + String key; + // 构建唯一性 key:material_base_info_id + bar_code + // 如果 barCode 为 null 或空,使用 packDetailId 来区分,避免多条 null 值违反唯一性约束 + if (barCode != null && !barCode.trim().isEmpty()) { + key = materialBaseInfoId + "_" + barCode.trim(); + } else { + // barCode 为 null 或空时,使用 packDetailId 来区分 + // 如果 packDetailId 也为 null,则使用固定值(只保留第一条) + Long packDetailId = materialBarCodeDO.getPackDetailId(); + key = materialBaseInfoId + "_null_" + (packDetailId != null ? packDetailId : "empty"); + } + // 如果已存在相同的组合,跳过(保留第一个),避免违反唯一性约束 + if (uniqueMap.containsKey(key)) { + continue; + } + // 创建新的条码记录 MaterialBarCode materialBarCode = new MaterialBarCode(); - BeanUtils.copyProperties(materialBarCodeDO,materialBarCode); + BeanUtils.copyProperties(materialBarCodeDO, materialBarCode); materialBarCode.setOrganizationId(userPo.getOrganizationId()); materialBarCode.setOrganizationName(userPo.getOrganizationName()); materialBarCode.setTopOrganizationId(userPo.getTopOrganizationId()); materialBarCode.setCreateBy(loginUser.getUserid()); materialBarCode.setCreateByName(loginUser.getUsername()); materialBarCode.setCreateTime(new Date()); + materialBarCode.setDelFlag(1); + // 添加到去重 Map 和列表 + uniqueMap.put(key, materialBarCode); materialBarCodeList.add(materialBarCode); } + if (CollectionUtils.isEmpty(materialBarCodeList)) { + return true; + } return this.saveBatch(materialBarCodeList); } @@ -157,7 +185,12 @@ public class MaterialBarCodeImpl extends ServiceImpl materialBarCodePOList = new ArrayList<>(); - BeanUtils.copyProperties(materialBarCodeList,materialBarCodePOList); + // 遍历列表,逐个复制每个对象的属性 + for (MaterialBarCode materialBarCode : materialBarCodeList) { + MaterialBarCodePO materialBarCodePO = new MaterialBarCodePO(); + BeanUtils.copyProperties(materialBarCode, materialBarCodePO); + materialBarCodePOList.add(materialBarCodePO); + } return materialBarCodePOList; } } From 601ae6e3cf2073a6e7ea598f84cca4979c956dc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 24 Feb 2026 16:15:13 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=89=A9=E6=96=99=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9D=83=E9=99=90=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/batch/BatchApplicationService.java | 17 ++++++++++++++--- .../service/brand/BrandApplicationService.java | 17 ++++++++++++++--- .../MaterialClassifyApplicationService.java | 17 ++++++++++++++--- .../service/pack/PackApplicationService.java | 17 ++++++++++++++--- .../MaterialBaseInfoApplicationService.java | 17 ++++++++++++++--- 5 files changed, 70 insertions(+), 15 deletions(-) diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/batch/BatchApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/batch/BatchApplicationService.java index 433041bed..76b31d1af 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/batch/BatchApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/batch/BatchApplicationService.java @@ -39,10 +39,21 @@ public class BatchApplicationService { public List queryList(BatchDO batchDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + batchDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + batchDO.setOrganizationId(userOrganizationId); + } + } Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - batchDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (topOrganizationId != null && topOrganizationId != 1) { + batchDO.setTopOrganizationId(topOrganizationId); } } List batchPOS = batchDomainService.queryList(batchDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/brand/BrandApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/brand/BrandApplicationService.java index f4652016b..ceb488e0e 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/brand/BrandApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/brand/BrandApplicationService.java @@ -37,10 +37,21 @@ public class BrandApplicationService { public List queryList(BrandDO brandDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + brandDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + brandDO.setOrganizationId(userOrganizationId); + } + } Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - brandDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (topOrganizationId != null && topOrganizationId != 1) { + brandDO.setTopOrganizationId(topOrganizationId); } } return brandDomainService.queryList(brandDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialClassify/MaterialClassifyApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialClassify/MaterialClassifyApplicationService.java index bab615ff8..f735edcfc 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialClassify/MaterialClassifyApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialClassify/MaterialClassifyApplicationService.java @@ -29,10 +29,21 @@ public class MaterialClassifyApplicationService { public List queryList(MaterialClassifyDO materialClassifyDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + materialClassifyDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + materialClassifyDO.setOrganizationId(userOrganizationId); + } + } Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - materialClassifyDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (topOrganizationId != null && topOrganizationId != 1) { + materialClassifyDO.setTopOrganizationId(topOrganizationId); } } return materialClassifyDomainService.queryList(materialClassifyDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/pack/PackApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/pack/PackApplicationService.java index 13326a0d6..99d770139 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/pack/PackApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/pack/PackApplicationService.java @@ -38,10 +38,21 @@ public class PackApplicationService { public List queryList(PackDO packDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + packDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + packDO.setOrganizationId(userOrganizationId); + } + } Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - packDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (topOrganizationId != null && topOrganizationId != 1) { + packDO.setTopOrganizationId(topOrganizationId); } } return packDomainService.queryList(packDO); diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java index 1eff5f2c4..9f50e7a6d 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java @@ -59,10 +59,21 @@ public class MaterialBaseInfoApplicationService { public List queryList(MaterialBaseInfoDO materialBaseInfoDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 当前登录用户组织ID为2827时,查询所有组织的数据 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 不设置organizationId,查询所有组织的数据 + materialBaseInfoDO.setOrganizationId(null); + } else { + // 其他情况,只查询当前登录用户所属组织的数据 + if (userOrganizationId != null) { + materialBaseInfoDO.setOrganizationId(userOrganizationId); + } + } Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - materialBaseInfoDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (topOrganizationId != null && topOrganizationId != 1) { + materialBaseInfoDO.setTopOrganizationId(topOrganizationId); } } List materialBaseInfoPOS = materialBaseInfoDomainService.queryList(materialBaseInfoDO); From b7b81d07e65c2c6e5e4d5c9cfbb64e77bed8cf75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 24 Feb 2026 17:07:08 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E9=9A=94?= =?UTF-8?q?=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Lease/LeaseApplicationService.java | 50 ++++++++++++--- .../batch/BatchApplicationService.java | 51 ++++++++++++--- .../brand/BrandApplicationService.java | 51 ++++++++++++--- .../MaterialBaseInfoApplicationService.java | 50 +++++++++++++-- .../MaterialClassifyApplicationService.java | 51 ++++++++++++--- .../service/pack/PackApplicationService.java | 51 ++++++++++++--- .../StorageLocationApplicationService.java | 53 +++++++++++++--- ...torageLocationGroupApplicationService.java | 63 +++++++++++++------ .../StorageSectionApplicationService.java | 56 +++++++++++++---- .../WarehouseApplicationService.java | 56 +++++++++++++---- .../MaterialBaseInfoApplicationService.java | 51 ++++++++++++--- 11 files changed, 470 insertions(+), 113 deletions(-) diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/Lease/LeaseApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/Lease/LeaseApplicationService.java index 2f6355a0e..d54d22857 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/Lease/LeaseApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/Lease/LeaseApplicationService.java @@ -77,20 +77,52 @@ public class LeaseApplicationService { public List queryList(LeaseDO leaseDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - //前端传organizationId = 2827的时候查询所有组织的数据 - if (loginUser != null) { - Long frontendOrganizationId = leaseDO.getOrganizationId(); - if (frontendOrganizationId != null && frontendOrganizationId == 2827L) { - // 前端传递2827时,查询所有组织的数据,将organizationId设置为null - leaseDO.setOrganizationId(null); + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + Long frontendOrganizationId = leaseDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + leaseDO.setOrganizationId(frontendOrganizationId); + leaseDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + leaseDO.setOrganizationId(null); + leaseDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (loginUser != null && loginUser.getUserPo() != null) { - Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + leaseDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID if (userOrganizationId != null) { leaseDO.setOrganizationId(userOrganizationId); } } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (leaseDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + leaseDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + leaseDO.setTopOrganizationId(null); + } } } return leaseDomainService.queryList(leaseDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/batch/BatchApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/batch/BatchApplicationService.java index 76b31d1af..c77a3a42f 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/batch/BatchApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/batch/BatchApplicationService.java @@ -41,19 +41,50 @@ public class BatchApplicationService { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null) { Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - // 当前登录用户组织ID为2827时,查询所有组织的数据 + Long frontendOrganizationId = batchDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 if (userOrganizationId != null && userOrganizationId == 2827L) { - // 不设置organizationId,查询所有组织的数据 - batchDO.setOrganizationId(null); + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + batchDO.setOrganizationId(frontendOrganizationId); + batchDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + batchDO.setOrganizationId(null); + batchDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (userOrganizationId != null) { - batchDO.setOrganizationId(userOrganizationId); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + batchDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + batchDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (batchDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + batchDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + batchDO.setTopOrganizationId(null); } - } - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1) { - batchDO.setTopOrganizationId(topOrganizationId); } } List batchPOS = batchDomainService.queryList(batchDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/brand/BrandApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/brand/BrandApplicationService.java index ceb488e0e..4a9fa1554 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/brand/BrandApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/brand/BrandApplicationService.java @@ -39,19 +39,50 @@ public class BrandApplicationService { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null) { Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - // 当前登录用户组织ID为2827时,查询所有组织的数据 + Long frontendOrganizationId = brandDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 if (userOrganizationId != null && userOrganizationId == 2827L) { - // 不设置organizationId,查询所有组织的数据 - brandDO.setOrganizationId(null); + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + brandDO.setOrganizationId(frontendOrganizationId); + brandDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + brandDO.setOrganizationId(null); + brandDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (userOrganizationId != null) { - brandDO.setOrganizationId(userOrganizationId); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + brandDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + brandDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (brandDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + brandDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + brandDO.setTopOrganizationId(null); } - } - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1) { - brandDO.setTopOrganizationId(topOrganizationId); } } return brandDomainService.queryList(brandDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java index 8a253446d..7fa3c5b55 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java @@ -43,10 +43,52 @@ public class MaterialBaseInfoApplicationService { public List queryList(MaterialBaseInfoDO materialBaseInfoDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - materialBaseInfoDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + Long frontendOrganizationId = materialBaseInfoDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + materialBaseInfoDO.setOrganizationId(frontendOrganizationId); + materialBaseInfoDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + materialBaseInfoDO.setOrganizationId(null); + materialBaseInfoDO.setTopOrganizationId(null); + } + } else { + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + materialBaseInfoDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + materialBaseInfoDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (materialBaseInfoDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + materialBaseInfoDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + materialBaseInfoDO.setTopOrganizationId(null); + } } } return materialBaseInfoDomainService.queryList(materialBaseInfoDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialClassify/MaterialClassifyApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialClassify/MaterialClassifyApplicationService.java index f735edcfc..9ce33307e 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialClassify/MaterialClassifyApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialClassify/MaterialClassifyApplicationService.java @@ -31,19 +31,50 @@ public class MaterialClassifyApplicationService { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null) { Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - // 当前登录用户组织ID为2827时,查询所有组织的数据 + Long frontendOrganizationId = materialClassifyDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 if (userOrganizationId != null && userOrganizationId == 2827L) { - // 不设置organizationId,查询所有组织的数据 - materialClassifyDO.setOrganizationId(null); + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + materialClassifyDO.setOrganizationId(frontendOrganizationId); + materialClassifyDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + materialClassifyDO.setOrganizationId(null); + materialClassifyDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (userOrganizationId != null) { - materialClassifyDO.setOrganizationId(userOrganizationId); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + materialClassifyDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + materialClassifyDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (materialClassifyDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + materialClassifyDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + materialClassifyDO.setTopOrganizationId(null); } - } - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1) { - materialClassifyDO.setTopOrganizationId(topOrganizationId); } } return materialClassifyDomainService.queryList(materialClassifyDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/pack/PackApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/pack/PackApplicationService.java index 99d770139..4cfbfbe5a 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/pack/PackApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/pack/PackApplicationService.java @@ -40,19 +40,50 @@ public class PackApplicationService { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null) { Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - // 当前登录用户组织ID为2827时,查询所有组织的数据 + Long frontendOrganizationId = packDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 if (userOrganizationId != null && userOrganizationId == 2827L) { - // 不设置organizationId,查询所有组织的数据 - packDO.setOrganizationId(null); + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + packDO.setOrganizationId(frontendOrganizationId); + packDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + packDO.setOrganizationId(null); + packDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (userOrganizationId != null) { - packDO.setOrganizationId(userOrganizationId); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + packDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + packDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (packDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + packDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + packDO.setTopOrganizationId(null); } - } - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1) { - packDO.setTopOrganizationId(topOrganizationId); } } return packDomainService.queryList(packDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java index d1b436aab..5ac9c4652 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java @@ -44,23 +44,56 @@ public class StorageLocationApplicationService { public List queryList(StorageLocationDO storageLocationDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ - //前端传organizationId = 2827的时候查询所有组织的数据 - Long frontendOrganizationId = storageLocationDO.getOrganizationId(); - if (frontendOrganizationId != null && frontendOrganizationId == 2827L) { - // 前端传递2827时,查询所有组织的数据,将organizationId设置为null - storageLocationDO.setOrganizationId(null); + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + Long frontendOrganizationId = storageLocationDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + storageLocationDO.setOrganizationId(frontendOrganizationId); + storageLocationDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + storageLocationDO.setOrganizationId(null); + storageLocationDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (loginUser != null && loginUser.getUserPo() != null) { - Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + storageLocationDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID if (userOrganizationId != null) { storageLocationDO.setOrganizationId(userOrganizationId); } } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (storageLocationDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + storageLocationDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + storageLocationDO.setTopOrganizationId(null); + } } + // 只有当前端没有明确传仓库条件时,才使用用户关联仓库缓存进行过滤; - // 避免出现“单据仓库=常温仓,但库位列表仍显示保税仓”的错配问题。 + // 避免出现"单据仓库=常温仓,但库位列表仍显示保税仓"的错配问题。 boolean hasWarehouseFilter = storageLocationDO.getWarehouseId() != null || (storageLocationDO.getWarehouseCode() != null && !storageLocationDO.getWarehouseCode().trim().isEmpty()) || (storageLocationDO.getWarehouseName() != null && !storageLocationDO.getWarehouseName().trim().isEmpty()); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocationGroup/StorageLocationGroupApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocationGroup/StorageLocationGroupApplicationService.java index 4fa0fc453..ae86e3e37 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocationGroup/StorageLocationGroupApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocationGroup/StorageLocationGroupApplicationService.java @@ -28,25 +28,52 @@ public class StorageLocationGroupApplicationService { public List queryList(StorageLocationGroupDO storageLocationGroupDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - //前端传organizationId = 2827的时候查询所有组织的数据 - Long frontendOrganizationId = storageLocationGroupDO.getOrganizationId(); - if (frontendOrganizationId != null && frontendOrganizationId == 2827L) { - // 前端传递2827时,查询所有组织的数据,将organizationId设置为null - storageLocationGroupDO.setOrganizationId(null); - } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (loginUser != null && loginUser.getUserPo() != null) { - Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - if (userOrganizationId != null) { - storageLocationGroupDO.setOrganizationId(userOrganizationId); - } - } - } - // 处理topOrganizationId逻辑 if (loginUser != null && loginUser.getUserPo() != null) { - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1) { - storageLocationGroupDO.setTopOrganizationId(topOrganizationId); + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + Long frontendOrganizationId = storageLocationGroupDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + storageLocationGroupDO.setOrganizationId(frontendOrganizationId); + storageLocationGroupDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + storageLocationGroupDO.setOrganizationId(null); + storageLocationGroupDO.setTopOrganizationId(null); + } + } else { + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + storageLocationGroupDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + storageLocationGroupDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (storageLocationGroupDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + storageLocationGroupDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + storageLocationGroupDO.setTopOrganizationId(null); + } } } return storageLocationGroupDomainService.queryList(storageLocationGroupDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageSection/StorageSectionApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageSection/StorageSectionApplicationService.java index 28f4f5d49..30b5d8d76 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageSection/StorageSectionApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageSection/StorageSectionApplicationService.java @@ -43,17 +43,51 @@ public class StorageSectionApplicationService { public List queryList(StorageSectionDO storageSectionDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - //前端传organizationId = 2827的时候查询所有组织的数据 - Long frontendOrganizationId = storageSectionDO.getOrganizationId(); - if (frontendOrganizationId != null && frontendOrganizationId == 2827L) { - // 前端传递2827时,查询所有组织的数据,将organizationId设置为null - storageSectionDO.setOrganizationId(null); - } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (loginUser != null && loginUser.getUserPo() != null) { - Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - if (userOrganizationId != null) { - storageSectionDO.setOrganizationId(userOrganizationId); + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + Long frontendOrganizationId = storageSectionDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + storageSectionDO.setOrganizationId(frontendOrganizationId); + storageSectionDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + storageSectionDO.setOrganizationId(null); + storageSectionDO.setTopOrganizationId(null); + } + } else { + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + storageSectionDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + storageSectionDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (storageSectionDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + storageSectionDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + storageSectionDO.setTopOrganizationId(null); } } } diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/warehouse/WarehouseApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/warehouse/WarehouseApplicationService.java index 313f91bd9..02634b427 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/warehouse/WarehouseApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/warehouse/WarehouseApplicationService.java @@ -42,17 +42,51 @@ public class WarehouseApplicationService { public List queryList(WarehouseDO warehouseDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - //前端传organizationId = 2827的时候查询所有组织的数据 - Long frontendOrganizationId = warehouseDO.getOrganizationId(); - if (frontendOrganizationId != null && frontendOrganizationId == 2827L) { - // 前端传递2827时,查询所有组织的数据,将organizationId设置为null - warehouseDO.setOrganizationId(null); - } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (loginUser != null && loginUser.getUserPo() != null) { - Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - if (userOrganizationId != null) { - warehouseDO.setOrganizationId(userOrganizationId); + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + Long frontendOrganizationId = warehouseDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + warehouseDO.setOrganizationId(frontendOrganizationId); + warehouseDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + warehouseDO.setOrganizationId(null); + warehouseDO.setTopOrganizationId(null); + } + } else { + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + warehouseDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + warehouseDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (warehouseDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + warehouseDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + warehouseDO.setTopOrganizationId(null); } } } diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java index 9f50e7a6d..bc2a08264 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java @@ -61,19 +61,50 @@ public class MaterialBaseInfoApplicationService { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null) { Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - // 当前登录用户组织ID为2827时,查询所有组织的数据 + Long frontendOrganizationId = materialBaseInfoDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 if (userOrganizationId != null && userOrganizationId == 2827L) { - // 不设置organizationId,查询所有组织的数据 - materialBaseInfoDO.setOrganizationId(null); + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + materialBaseInfoDO.setOrganizationId(frontendOrganizationId); + materialBaseInfoDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + materialBaseInfoDO.setOrganizationId(null); + materialBaseInfoDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (userOrganizationId != null) { - materialBaseInfoDO.setOrganizationId(userOrganizationId); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + materialBaseInfoDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + materialBaseInfoDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (materialBaseInfoDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + materialBaseInfoDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + materialBaseInfoDO.setTopOrganizationId(null); } - } - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1) { - materialBaseInfoDO.setTopOrganizationId(topOrganizationId); } } List materialBaseInfoPOS = materialBaseInfoDomainService.queryList(materialBaseInfoDO); From 27cc5986e1b7c38b18a4929ec8fa5a9d4c6ea6ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 24 Feb 2026 17:16:19 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E5=85=A5=E5=BA=93=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E9=9A=94?= =?UTF-8?q?=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StockInOrderApplicationService.java | 52 +++++++++++++++---- .../StockReceiptOrderApplicationService.java | 52 +++++++++++++++---- .../StockShelfOrderApplicationService.java | 51 ++++++++++++++---- 3 files changed, 123 insertions(+), 32 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java index 6e1ad45b2..7e823acfe 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java @@ -70,20 +70,50 @@ public class StockInOrderApplicationService { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null){ Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - // 当前登录用户组织ID为2827时,查询所有组织的数据 + Long frontendOrganizationId = stockInOrderDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 if (userOrganizationId != null && userOrganizationId == 2827L) { - // 不设置organizationId,查询所有组织的数据 - stockInOrderDO.setOrganizationId(null); + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + stockInOrderDO.setOrganizationId(frontendOrganizationId); + stockInOrderDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + stockInOrderDO.setOrganizationId(null); + stockInOrderDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (userOrganizationId != null) { - stockInOrderDO.setOrganizationId(userOrganizationId); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + stockInOrderDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + stockInOrderDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (stockInOrderDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + stockInOrderDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + stockInOrderDO.setTopOrganizationId(null); } - } - // 处理topOrganizationId逻辑 - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - stockInOrderDO.setTopOrganizationId(topOrganizationId); } // 前端有传warehouseId则优先使用传参;未传时才使用"用户关联仓库"作为默认值 if (stockInOrderDO.getWarehouseId() == null) { diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java index 3c17f2efc..f64287c34 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java @@ -93,20 +93,50 @@ public class StockReceiptOrderApplicationService { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null){ Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - // 当前登录用户组织ID为2827时,查询所有组织的数据 + Long frontendOrganizationId = stockReceiptOrderDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 if (userOrganizationId != null && userOrganizationId == 2827L) { - // 不设置organizationId,查询所有组织的数据 - stockReceiptOrderDO.setOrganizationId(null); + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + stockReceiptOrderDO.setOrganizationId(frontendOrganizationId); + stockReceiptOrderDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + stockReceiptOrderDO.setOrganizationId(null); + stockReceiptOrderDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (userOrganizationId != null) { - stockReceiptOrderDO.setOrganizationId(userOrganizationId); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + stockReceiptOrderDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + stockReceiptOrderDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (stockReceiptOrderDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + stockReceiptOrderDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + stockReceiptOrderDO.setTopOrganizationId(null); } - } - // 处理topOrganizationId逻辑 - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - stockReceiptOrderDO.setTopOrganizationId(topOrganizationId); } try { AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java index 53a3b5443..ad2ba418f 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java @@ -99,19 +99,50 @@ public class StockShelfOrderApplicationService { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null){ Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - // 当前登录用户组织ID为2827时,查询所有组织的数据 + Long frontendOrganizationId = stockShelfOrderDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 if (userOrganizationId != null && userOrganizationId == 2827L) { - // 不设置organizationId,查询所有组织的数据 - stockShelfOrderDO.setOrganizationId(null); + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + stockShelfOrderDO.setOrganizationId(frontendOrganizationId); + stockShelfOrderDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + stockShelfOrderDO.setOrganizationId(null); + stockShelfOrderDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (userOrganizationId != null) { - stockShelfOrderDO.setOrganizationId(userOrganizationId); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + stockShelfOrderDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + stockShelfOrderDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (stockShelfOrderDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + stockShelfOrderDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + stockShelfOrderDO.setTopOrganizationId(null); } - } - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - stockShelfOrderDO.setTopOrganizationId(topOrganizationId); } try { AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); From e6ab5c51df603511a5d34e2b25cb9524d6f2ca04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Wed, 25 Feb 2026 09:16:14 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E5=87=BA=E5=BA=93=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E9=9A=94?= =?UTF-8?q?=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HandoverTaskOrderApplicationService.java | 55 +++++++++++++++---- .../PickingOrderApplicationService.java | 51 +++++++++++++---- .../StockOutOrderApplicationService.java | 51 +++++++++++++---- .../StockOutTaskOrderApplicationService.java | 55 +++++++++++++++---- 4 files changed, 170 insertions(+), 42 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/handoverTaskOrder/HandoverTaskOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/handoverTaskOrder/HandoverTaskOrderApplicationService.java index c4567e89f..b8153c140 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/handoverTaskOrder/HandoverTaskOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/handoverTaskOrder/HandoverTaskOrderApplicationService.java @@ -65,22 +65,55 @@ public class HandoverTaskOrderApplicationService { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null) { Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - // 当前登录用户组织ID为2827时,查询所有组织的数据 + Long frontendOrganizationId = handoverTaskOrderDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 if (userOrganizationId != null && userOrganizationId == 2827L) { - // 不设置organizationId,查询所有组织的数据 - handoverTaskOrderDO.setOrganizationId(null); + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + handoverTaskOrderDO.setOrganizationId(frontendOrganizationId); + handoverTaskOrderDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + handoverTaskOrderDO.setOrganizationId(null); + handoverTaskOrderDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (userOrganizationId != null) { - handoverTaskOrderDO.setOrganizationId(userOrganizationId); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + handoverTaskOrderDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + handoverTaskOrderDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (handoverTaskOrderDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + handoverTaskOrderDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + handoverTaskOrderDO.setTopOrganizationId(null); } } - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1) { - handoverTaskOrderDO.setTopOrganizationId(topOrganizationId); - } AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); - handoverTaskOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId()); + if (associationWarehouseCacheDO != null) { + handoverTaskOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId()); + } } return handoverTaskOrderDomainService.queryList(handoverTaskOrderDO); } diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/pickingOrder/PickingOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/pickingOrder/PickingOrderApplicationService.java index 61aaac165..5ae3624a6 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/pickingOrder/PickingOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/pickingOrder/PickingOrderApplicationService.java @@ -63,19 +63,50 @@ public class PickingOrderApplicationService { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null) { Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - // 当前登录用户组织ID为2827时,查询所有组织的数据 + Long frontendOrganizationId = pickingOrderDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 if (userOrganizationId != null && userOrganizationId == 2827L) { - // 不设置organizationId,查询所有组织的数据 - pickingOrderDO.setOrganizationId(null); + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + pickingOrderDO.setOrganizationId(frontendOrganizationId); + pickingOrderDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + pickingOrderDO.setOrganizationId(null); + pickingOrderDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (userOrganizationId != null) { - pickingOrderDO.setOrganizationId(userOrganizationId); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + pickingOrderDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + pickingOrderDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (pickingOrderDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + pickingOrderDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + pickingOrderDO.setTopOrganizationId(null); } - } - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1) { - pickingOrderDO.setTopOrganizationId(topOrganizationId); } } List pickingOrderPOList = pickingOrderDomainService.queryList(pickingOrderDO); diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java index b02a7b624..edc0d1d51 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java @@ -87,19 +87,50 @@ public class StockOutOrderApplicationService { }*/ if (loginUser != null && loginUser.getUserPo() != null) { Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - // 当前登录用户组织ID为2827时,查询所有组织的数据 + Long frontendOrganizationId = stockOutOrderDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 if (userOrganizationId != null && userOrganizationId == 2827L) { - // 不设置organizationId,查询所有组织的数据 - stockOutOrderDO.setOrganizationId(null); + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + stockOutOrderDO.setOrganizationId(frontendOrganizationId); + stockOutOrderDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + stockOutOrderDO.setOrganizationId(null); + stockOutOrderDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (userOrganizationId != null) { - stockOutOrderDO.setOrganizationId(userOrganizationId); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + stockOutOrderDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + stockOutOrderDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (stockOutOrderDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + stockOutOrderDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + stockOutOrderDO.setTopOrganizationId(null); } - } - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1) { - stockOutOrderDO.setTopOrganizationId(topOrganizationId); } } return stockOutOrderDomainService.queryList(stockOutOrderDO); diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutTaskOrder/StockOutTaskOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutTaskOrder/StockOutTaskOrderApplicationService.java index bb7423128..89cb55390 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutTaskOrder/StockOutTaskOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutTaskOrder/StockOutTaskOrderApplicationService.java @@ -48,22 +48,55 @@ public class StockOutTaskOrderApplicationService { LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null) { Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); - // 当前登录用户组织ID为2827时,查询所有组织的数据 + Long frontendOrganizationId = stockOutTaskOrderDO.getOrganizationId(); // 前端传递的 organizationId + + // 数据权限:根据 organizationId 来设置查询权限 + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己 if (userOrganizationId != null && userOrganizationId == 2827L) { - // 不设置organizationId,查询所有组织的数据 - stockOutTaskOrderDO.setOrganizationId(null); + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + stockOutTaskOrderDO.setOrganizationId(frontendOrganizationId); + stockOutTaskOrderDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + stockOutTaskOrderDO.setOrganizationId(null); + stockOutTaskOrderDO.setTopOrganizationId(null); + } } else { - // 其他情况,只查询当前登录用户所属组织的数据 - if (userOrganizationId != null) { - stockOutTaskOrderDO.setOrganizationId(userOrganizationId); + // 其他组织:设置organizationId,只查询当前组织的数据 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + stockOutTaskOrderDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + stockOutTaskOrderDO.setOrganizationId(userOrganizationId); + } + } + // 只有当 organizationId 为 null 时,才使用 topOrganizationId 作为查询条件 + // 如果 organizationId 不为 null,则优先使用 organizationId,不使用 topOrganizationId + if (stockOutTaskOrderDO.getOrganizationId() == null) { + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1) { + stockOutTaskOrderDO.setTopOrganizationId(topOrganizationId); + } + } else { + // 如果 organizationId 不为 null,清空 topOrganizationId,确保查询使用 organizationId + stockOutTaskOrderDO.setTopOrganizationId(null); } } - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1) { - stockOutTaskOrderDO.setTopOrganizationId(topOrganizationId); - } AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid()); - stockOutTaskOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId()); + if (associationWarehouseCacheDO != null) { + stockOutTaskOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId()); + } } return stockOutTaskOrderDomainService.queryList(stockOutTaskOrderDO); }