From 31559ec8696d1c17168c486c76bfb1b3a206eb0b Mon Sep 17 00:00:00 2001 From: haown <454902499@qq.com> Date: Tue, 26 Nov 2024 15:59:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=BA=E6=9E=84=E6=A0=91=E5=BD=A2=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E4=BF=AE=E6=94=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/aspectj/DataScopeAspect.java | 9 ++++- .../controller/agency/AgencyController.java | 20 +++++++---- .../manage/dto/agency/AgencyTreeDto.java | 18 ++++++++++ .../manage/mapper/agency/AgencyMapper.java | 3 +- .../agency/impl/AgencyServiceImpl.java | 16 ++++++++- .../mapper/manage/agency/AgencyMapper.xml | 36 ++++++++++++++++++- 6 files changed, 91 insertions(+), 11 deletions(-) create mode 100644 postdischarge-manage/src/main/java/com/xinelu/manage/dto/agency/AgencyTreeDto.java diff --git a/postdischarge-framework/src/main/java/com/xinelu/framework/aspectj/DataScopeAspect.java b/postdischarge-framework/src/main/java/com/xinelu/framework/aspectj/DataScopeAspect.java index 42622925..2eeb0c70 100644 --- a/postdischarge-framework/src/main/java/com/xinelu/framework/aspectj/DataScopeAspect.java +++ b/postdischarge-framework/src/main/java/com/xinelu/framework/aspectj/DataScopeAspect.java @@ -50,6 +50,11 @@ public class DataScopeAspect { */ public static final String DATA_SCOPE_AGENCY = "6"; + /** + * 机构及下属机构数据权限 + */ + public static final String DATA_SCOPE_AGENCY_AND_CHILD = "7"; + /** * 数据权限过滤关键字 */ @@ -95,7 +100,9 @@ public class DataScopeAspect { role.getRoleId())); } else if(DATA_SCOPE_AGENCY.equals(dataScope)){ // 机构数据权限 sqlString.append(StringUtils.format(" OR {}.hospital_agency_id = {} ", agencyAlias, user.getHospitalAgencyId())); - } else if (DATA_SCOPE_DEPT.equals(dataScope)) { // 部门数据权限 + } else if(DATA_SCOPE_AGENCY_AND_CHILD.equals(dataScope)){ // 本机构及下属机构数据权限 + sqlString.append(StringUtils.format(" OR {}.hospital_agency_id = {} OR {}.hospital_agency_id IN (SELECT id FROM AGENCY WHERE parent_id = {})", agencyAlias, user.getHospitalAgencyId(), agencyAlias, user.getHospitalAgencyId())); + }else if (DATA_SCOPE_DEPT.equals(dataScope)) { // 部门数据权限 sqlString.append(StringUtils.format(" OR {}.department_id = {} ", deptAlias, user.getDepartmentId())); } else if (StringUtils.equals(dataScope, DATA_SCOPE_SELF) && StringUtils.isNotBlank(userAlias)) { // 本人数据权限 sqlString.append(StringUtils.format(" OR {} = {} ", userAlias, user.getUserId())); diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/agency/AgencyController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/agency/AgencyController.java index f5ea9908..7e8b9535 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/agency/AgencyController.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/agency/AgencyController.java @@ -11,15 +11,21 @@ import com.xinelu.manage.domain.agency.Agency; import com.xinelu.manage.dto.agency.AgencyDTO; import com.xinelu.manage.dto.agency.HospitalDTO; import com.xinelu.manage.service.agency.IAgencyService; -import org.apache.commons.lang3.StringUtils; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Objects; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; /** * 机构信息Controller diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/dto/agency/AgencyTreeDto.java b/postdischarge-manage/src/main/java/com/xinelu/manage/dto/agency/AgencyTreeDto.java new file mode 100644 index 00000000..7aaf2377 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/dto/agency/AgencyTreeDto.java @@ -0,0 +1,18 @@ +package com.xinelu.manage.dto.agency; + +import com.xinelu.manage.domain.agency.Agency; +import lombok.Data; + +/** + * @description: 机构树形列表查询传输对象 + * @author: haown + * @create: 2024-11-26 14:40 + **/ +@Data +public class AgencyTreeDto extends Agency { + + /** + * 是否本机构及下属机构,0:否,1:是 + */ + private String agencyAndChild; +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/agency/AgencyMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/agency/AgencyMapper.java index 69ba6535..6cff3c3d 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/agency/AgencyMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/agency/AgencyMapper.java @@ -3,6 +3,7 @@ package com.xinelu.manage.mapper.agency; import com.xinelu.manage.domain.agency.Agency; import com.xinelu.manage.domain.agencycategory.AgencyCategory; import com.xinelu.manage.dto.agency.AgencyDTO; +import com.xinelu.manage.dto.agency.AgencyTreeDto; import com.xinelu.manage.vo.agency.AgencyVO; import org.apache.ibatis.annotations.Param; @@ -54,7 +55,7 @@ public interface AgencyMapper { * @param agency 机构信息 * @return 机构信息集合 */ - List selectAgencyVOList(Agency agency); + List selectAgencyVOList(AgencyTreeDto agency); /** * 新增机构信息 diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/agency/impl/AgencyServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/agency/impl/AgencyServiceImpl.java index 3fde3ed1..fe956054 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/agency/impl/AgencyServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/agency/impl/AgencyServiceImpl.java @@ -13,6 +13,7 @@ import com.xinelu.manage.domain.agency.Agency; import com.xinelu.manage.domain.agencycategory.AgencyCategory; import com.xinelu.manage.domain.department.Department; import com.xinelu.manage.dto.agency.AgencyDTO; +import com.xinelu.manage.dto.agency.AgencyTreeDto; import com.xinelu.manage.dto.agency.HospitalDTO; import com.xinelu.manage.mapper.agency.AgencyMapper; import com.xinelu.manage.mapper.department.DepartmentMapper; @@ -188,7 +189,20 @@ public class AgencyServiceImpl implements IAgencyService { */ @Override public List agencyList() { - List agencies = agencyMapper.selectAgencyVOList(null); + // 根据角色判断取数据 + AgencyTreeDto query = new AgencyTreeDto(); + List roleList = SecurityUtils.getLoginUser().getUser().getRoles(); + if (CollectionUtils.isNotEmpty(roleList)) { + List dataScopeList = roleList.stream().map(SysRole::getDataScope).collect(Collectors.toList()); + if (!dataScopeList.contains("1")) {// 全部数据权限 + } else if (dataScopeList.contains("7")) { // 本机构及下属机构 + query.setAgencyAndChild("1"); + query.setId(SecurityUtils.getLoginUser().getUser().getHospitalAgencyId()); + } else if (dataScopeList.contains("6")) { // 本机构 + query.setId(SecurityUtils.getLoginUser().getUser().getHospitalAgencyId()); + } + } + List agencies = agencyMapper.selectAgencyVOList(query); for (AgencyVO agency : agencies) { agency.setValue(agency.getId().toString()); } diff --git a/postdischarge-manage/src/main/resources/mapper/manage/agency/AgencyMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/agency/AgencyMapper.xml index 09690e04..4174d79d 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/agency/AgencyMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/agency/AgencyMapper.xml @@ -116,7 +116,41 @@