diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/projectManage/ProjectManageApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/projectManage/ProjectManageApplicationService.java index c288c262c..d79236142 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/projectManage/ProjectManageApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/projectManage/ProjectManageApplicationService.java @@ -37,10 +37,47 @@ public class ProjectManageApplicationService { */ public List queryList(ProjectManageDO projectManageDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - projectManageDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (loginUser != null && loginUser.getUserPo() != null) { + Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId(); + Long loginUserTopOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + Long frontendOrganizationId = projectManageDO.getOrganizationId(); + + // 根据当前登录用户的所属组织ID进行数据权限控制: + // 当组织ID为 2827(南光)时,可查询全部组织数据;其他组织只能查询本组织数据 + if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) { + // 南光组织(organizationId=2827):可以查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + projectManageDO.setOrganizationId(frontendOrganizationId); + projectManageDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + projectManageDO.setOrganizationId(null); + projectManageDO.setTopOrganizationId(null); + } + } else { + // 其他组织:只能查询本组织数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(loginUserOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + projectManageDO.setOrganizationId(loginUserOrganizationId); + } else { + // 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + projectManageDO.setOrganizationId(frontendOrganizationId); + } + if (loginUserTopOrganizationId != null) { + projectManageDO.setTopOrganizationId(loginUserTopOrganizationId); + } + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (loginUserOrganizationId != null) { + projectManageDO.setOrganizationId(loginUserOrganizationId); + } + if (loginUserTopOrganizationId != null) { + projectManageDO.setTopOrganizationId(loginUserTopOrganizationId); + } + } } } return projectManageDomainService.queryList(projectManageDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/projectManage/ProjectManageAssembler.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/projectManage/ProjectManageAssembler.java index 4fa98a66c..8d77c28e0 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/projectManage/ProjectManageAssembler.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/projectManage/ProjectManageAssembler.java @@ -6,6 +6,7 @@ import com.mhd.basic.interfaces.dto.projectManage.ProjectManageDTO; import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException; import com.mhd.common.core.exception.digitalLogisticsException.UserError; import com.mhd.common.core.utils.bean.BeanUtils; +import com.mhd.common.core.utils.StringUtils; import com.mhd.common.core.utils.IgnoreNullUtil; import com.mhd.common.security.utils.SecurityUtils; import com.mhd.system.api.model.LoginUser; @@ -28,24 +29,47 @@ public class ProjectManageAssembler { public ProjectManageDO toDO(ProjectManageDTO projectManageDTO) { ProjectManageDO projectManageDO = new ProjectManageDO(); // 拷贝 - BeanUtils.copyProperties(projectManageDTO, projectManageDO, IgnoreNullUtil.getNullPropertyNames(projectManageDTO)); + if (projectManageDTO != null) { + BeanUtils.copyProperties(projectManageDTO, projectManageDO, IgnoreNullUtil.getNullPropertyNames(projectManageDTO)); + } LoginUser loginUser = SecurityUtils.getLoginUser(); if (ObjectUtil.isNull(loginUser)) { throw new DigitalLogisticsException(UserError.TIMEOUT); } - String userName = loginUser.getUsername(); + // 优先使用用户姓名,其次真实姓名,最后账号,保持与其他模块一致 + String userName = null; + if (loginUser.getUserPo() != null && StringUtils.isNotEmpty(loginUser.getUserPo().getUserName())) { + userName = loginUser.getUserPo().getUserName(); + } else if (StringUtils.isNotEmpty(loginUser.getRealname())) { + userName = loginUser.getRealname(); + } else { + userName = loginUser.getUsername(); + } // 获取登录人id Long userId = loginUser.getUserid(); - if(projectManageDTO.getProjectManageId() != null){ + + if (projectManageDTO != null && projectManageDTO.getProjectManageId() != null) { + // 编辑操作:只设置更新相关字段 if(userId != null){ projectManageDO.setUpdateBy(userId); }else { projectManageDO.setUpdateBy(new Long("0")); } - projectManageDO.setUpdateByName(userName); + // 只有在 DO 中没有传递 updateByName 时才设置(避免覆盖前端传递的值) + if (StringUtils.isEmpty(projectManageDO.getUpdateByName())) { + projectManageDO.setUpdateByName(userName); + } projectManageDO.setUpdateTime(new Date()); - }else { + } else if (projectManageDTO != null && projectManageDTO.getProjectManageId() == null) { + // projectManageId == null,可能是查询操作或新增操作 + // 如果前端传递了 createByName 或 updateByName,说明是查询条件,不应该设置(已经在 BeanUtils.copyProperties 中拷贝了) + boolean hasQueryCondition = + (StringUtils.isNotEmpty(projectManageDTO.getCreateByName())) + || (StringUtils.isNotEmpty(projectManageDTO.getUpdateByName())); + + if (!hasQueryCondition) { + // 没有查询条件,可能是新增操作,设置默认值 if(userId != null){ projectManageDO.setCreateBy(userId); projectManageDO.setUpdateBy(userId); @@ -58,6 +82,8 @@ public class ProjectManageAssembler { projectManageDO.setCreateTime(new Date()); projectManageDO.setUpdateTime(new Date()); projectManageDO.setDelFlag(1); + } + // 如果有查询条件(createByName 或 updateByName),说明是查询操作,不应该强制覆盖这些字段 } return projectManageDO; } diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ProjectManageMapper.xml b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ProjectManageMapper.xml index eaf7899cc..db6c1c47b 100644 --- a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ProjectManageMapper.xml +++ b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ProjectManageMapper.xml @@ -60,7 +60,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND date_format(end_date,'%Y-%m-%d') #{projectManageDO.projectEndTimeEnd} - + + + + + and organization_id = #{projectManageDO.organizationId} + + + and top_organization_id = #{projectManageDO.topOrganizationId}