diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/system/controller/SysDictDataController.java b/mhd-modules/mhd-system/src/main/java/com/mhd/system/controller/SysDictDataController.java index 2b8753cfa..607baefc0 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/system/controller/SysDictDataController.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/system/controller/SysDictDataController.java @@ -21,6 +21,8 @@ import com.mhd.common.log.annotation.Log; import com.mhd.common.log.enums.BusinessType; import com.mhd.common.security.utils.SecurityUtils; import com.mhd.system.api.domain.SysDictData; +import com.mhd.system.api.domain.SysDictType; +import com.mhd.system.api.model.LoginUser; /** * 数据字典信息 @@ -41,10 +43,87 @@ public class SysDictDataController extends BaseController @GetMapping("/list") public TableDataInfo list(SysDictData dictData) { + if (!applyDictDataOrganizationFilterByDictType(dictData)) + { + return getDataTable(new ArrayList<>()); + } startPage(); List list = dictDataService.selectDictList(dictData); return getDataTable(list); } + /** + * 列表组织过滤:按字典类型(sys_dict_type)上的组织维度过滤字典数据。 + * 前端可传 organizationId(通常来自所选字典类型行);南光组织(2827)可选组织或查全部,其他组织仅本组织。 + * + * @return false 表示当前组织下无匹配字典类型,应返回空列表 + */ + private boolean applyDictDataOrganizationFilterByDictType(SysDictData dictData) + { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser == null || loginUser.getUserPo() == null) + { + return true; + } + Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId(); + Long loginUserTopOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + Long frontendOrganizationId = dictData.getOrganizationId(); + + Long queryOrganizationId = null; + Long queryTopOrganizationId = null; + + if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) + { + if (frontendOrganizationId != null) + { + queryOrganizationId = frontendOrganizationId; + } + } + else + { + if (frontendOrganizationId != null && !frontendOrganizationId.equals(loginUserOrganizationId)) + { + queryOrganizationId = loginUserOrganizationId; + } + else if (frontendOrganizationId != null) + { + queryOrganizationId = frontendOrganizationId; + } + else + { + queryOrganizationId = loginUserOrganizationId; + } + queryTopOrganizationId = loginUserTopOrganizationId; + } + + if (StringUtils.isEmpty(dictData.getDictType())) + { + dictData.setOrganizationId(queryOrganizationId); + dictData.setTopOrganizationId(queryTopOrganizationId); + return true; + } + + if (queryOrganizationId == null) + { + dictData.setOrganizationId(null); + dictData.setTopOrganizationId(null); + return true; + } + + SysDictType typeQuery = new SysDictType(); + typeQuery.setDictType(dictData.getDictType()); + typeQuery.setOrganizationId(queryOrganizationId); + List dictTypes = dictTypeService.selectDictTypeList(typeQuery); + if (dictTypes.isEmpty()) + { + return false; + } + + SysDictType dictTypeRow = dictTypes.get(0); + dictData.setOrganizationId(dictTypeRow.getOrganizationId()); + dictData.setTopOrganizationId(dictTypeRow.getTopOrganizationId()); + return true; + } + @PostMapping("/getDictDataList") public R> getDictDataList(@RequestBody SysDictData sysDictData) { diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/system/controller/SysDictTypeController.java b/mhd-modules/mhd-system/src/main/java/com/mhd/system/controller/SysDictTypeController.java index 6cf686ee9..2b65236a9 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/system/controller/SysDictTypeController.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/system/controller/SysDictTypeController.java @@ -43,6 +43,7 @@ public class SysDictTypeController extends BaseController @GetMapping("/list") public TableDataInfo list(SysDictType dictType) { + applyDictTypeOrganizationFilter(dictType); startPage(); List list = dictTypeService.selectDictTypeList(dictType); return getDataTable(list); @@ -53,6 +54,7 @@ public class SysDictTypeController extends BaseController @PostMapping("/export") public void export(HttpServletResponse response, SysDictType dictType) { + applyDictTypeOrganizationFilter(dictType); List list = dictTypeService.selectDictTypeList(dictType); ExcelUtil util = new ExcelUtil(SysDictType.class); util.exportExcel(response, list, "字典类型"); @@ -85,6 +87,61 @@ public class SysDictTypeController extends BaseController return toAjax(dictTypeService.insertDictType(dict)); } + /** + * 列表/导出组织过滤:优先使用前端传递的 organizationId; + * 南光组织(2827)可按组织筛选或查全部,其他组织只能查本组织数据。 + */ + private void applyDictTypeOrganizationFilter(SysDictType dictType) + { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser == null || loginUser.getUserPo() == null) + { + return; + } + Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId(); + Long loginUserTopOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + Long frontendOrganizationId = dictType.getOrganizationId(); + + if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) + { + if (frontendOrganizationId != null) + { + dictType.setOrganizationId(frontendOrganizationId); + dictType.setTopOrganizationId(null); + } + else + { + dictType.setOrganizationId(null); + dictType.setTopOrganizationId(null); + } + } + else + { + if (frontendOrganizationId != null) + { + if (!frontendOrganizationId.equals(loginUserOrganizationId)) + { + dictType.setOrganizationId(loginUserOrganizationId); + } + if (loginUserTopOrganizationId != null) + { + dictType.setTopOrganizationId(loginUserTopOrganizationId); + } + } + else + { + if (loginUserOrganizationId != null) + { + dictType.setOrganizationId(loginUserOrganizationId); + } + if (loginUserTopOrganizationId != null) + { + dictType.setTopOrganizationId(loginUserTopOrganizationId); + } + } + } + } + /** * 写入组织维度:优先使用请求体中选择的组织;未传时使用当前登录用户所属组织;无登录上下文时按平台(0)处理。 */ diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/system/mapper/SysDictTypeMapper.java b/mhd-modules/mhd-system/src/main/java/com/mhd/system/mapper/SysDictTypeMapper.java index bd6d92ead..08696d980 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/system/mapper/SysDictTypeMapper.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/system/mapper/SysDictTypeMapper.java @@ -34,12 +34,12 @@ public interface SysDictTypeMapper public SysDictType selectDictTypeById(Long dictId); /** - * 根据字典类型查询信息 + * 根据字典类型及组织查询信息(同一 dict_type 在不同组织下可重复) * - * @param dictType 字典类型 + * @param dictType 字典类型(含 dictType、organizationId) * @return 字典类型 */ - public SysDictType selectDictTypeByType(String dictType); + public SysDictType selectDictTypeByType(SysDictType dictType); /** * 通过字典ID删除字典信息 diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictDataServiceImpl.java b/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictDataServiceImpl.java index e2ec28888..2415a8a1a 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictDataServiceImpl.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictDataServiceImpl.java @@ -441,7 +441,19 @@ public class SysDictDataServiceImpl extends ServiceImpl - where dict_type = #{dictType} + and IFNULL(organization_id, 0) = IFNULL(#{organizationId}, 0) + limit 1