Browse Source

getAll接口完善、层级角色绑定逻辑、dashboard登录菜单id返回处理

zhc
review512jwy@163.com 2 weeks ago
parent
commit
dc59aab352
  1. 2
      data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/BasicBuildingMapperExt.java
  2. 2
      data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/BasicFloorMapperExt.java
  3. 2
      data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/BasicSpaceMapperExt.java
  4. 6
      data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/BasicUserMapperExt.java
  5. 2
      data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/LevelMapperExt.java
  6. 8
      data-center-business-dao/src/main/resources/mappers/ex/BasicBuildingMapperExt.xml
  7. 7
      data-center-business-dao/src/main/resources/mappers/ex/BasicFloorMapperExt.xml
  8. 12
      data-center-business-dao/src/main/resources/mappers/ex/BasicSpaceMapperExt.xml
  9. 36
      data-center-business-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml
  10. 107
      data-center-business-dao/src/main/resources/mappers/ex/LevelMapperExt.xml
  11. 51
      data-center-business-dao/src/main/resources/mappers/ex/LevelRoleMapperExt.xml
  12. 2
      data-center-business-model/src/main/java/com/techsor/datacenter/business/dto/levelrole/BindUserParam.java
  13. 3
      data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/levelrole/UserBoundRolePageDTO.java
  14. 31
      data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/role/DashboardTreeMenusDTO.java
  15. 11
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/async/AsyncExcelProcessingService.java
  16. 33
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/common/CommonOpt.java
  17. 99
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/AccountServiceImpl.java
  18. 7
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/BuildingServiceImpl.java
  19. 7
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/FloorServiceImpl.java
  20. 33
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/LevelRoleServiceImpl.java
  21. 6
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/SpaceServiceImpl.java

2
data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/BasicBuildingMapperExt.java

@ -19,5 +19,5 @@ public interface BasicBuildingMapperExt extends BasicBuildingMapper{
List<BuildingPageVO> getAll(String companyId);
List<BuildingPageVO> getAllInList(List<Long> companyIdList);
List<BuildingPageVO> getAllInList(Map<String, Object> paramMap);
}

2
data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/BasicFloorMapperExt.java

@ -21,7 +21,7 @@ public interface BasicFloorMapperExt extends BasicFloorMapper{
List<FloorPageVO> getListPage(FloorSearchParams pageSearchParam);
List<FloorPageVO> getAll(String companyId);
List<FloorPageVO> getAll(Map<String, Object> paramMap);
String getUdfBuildingIdByFloorId(Long floorId);

2
data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/BasicSpaceMapperExt.java

@ -23,7 +23,7 @@ public interface BasicSpaceMapperExt extends BasicSpaceMapper{
List<SpacePageVO> getListPage4Import(SpaceSearchParams spaceSearchParam);
List<SpacePageVO> getAll(String companyId);
List<SpacePageVO> getAll(Map<String, Object> paramMap);
List<SpacePageVO> getSpaceId(Map<String, Object> paramMap);

6
data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/BasicUserMapperExt.java

@ -1,9 +1,11 @@
package com.techsor.datacenter.business.dao.ex;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import com.techsor.datacenter.business.model.BasicUser;
import com.techsor.datacenter.business.vo.role.DashboardTreeMenusDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -25,4 +27,8 @@ public interface BasicUserMapperExt extends BasicUserMapper{
BasicUser selectByUserId(Long userId);
void modifyPassword(BasicUser updateUser);
List<DashboardTreeMenusDTO> selectDashboardMenusByUserId(Long userId);
List<DashboardTreeMenusDTO> selectAllDashboardMenu(Map<String, Object> allMenusParamMap);
}

2
data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/LevelMapperExt.java

@ -32,4 +32,6 @@ public interface LevelMapperExt {
void deleteLevelRelationByIdList(@Param("param") LevelRelationEntity param, @Param("idList") List<Long> idList);
List<LevelPageDTO> getListPage(PageLevelSearchParam pageSearchParam);
List<Long> getBoundBuilding(Long userId);
}

8
data-center-business-dao/src/main/resources/mappers/ex/BasicBuildingMapperExt.xml

@ -104,11 +104,11 @@
INNER JOIN data_center_aeon_admin.basic_company bcomp ON bcomp.id = bbuilding.company_id
WHERE
bbuilding.flag != 1
<if test="bindBuildingIdList != null">
AND bbuilding.building_id IN <foreach collection="bindBuildingIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
</if>
<if test="companyIdList != null and companyIdList.size() > 0">
AND bbuilding.building_id IN
<foreach collection="companyIdList" item="companyId" open="(" separator="," close=")">
#{companyId}
</foreach>
AND bbuilding.company_id IN <foreach collection="companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
</if>
AND bcomp.flag != 1
</select>

7
data-center-business-dao/src/main/resources/mappers/ex/BasicFloorMapperExt.xml

@ -95,8 +95,11 @@
INNER JOIN basic_building bbuilding ON bbuilding.building_id = bfloor.building_id
WHERE
bfloor.flag != 1 AND bcomp.flag != 1 AND bbuilding.flag != 1
<if test="companyId != null">
AND bfloor.company_id = #{companyId}
<if test="bindBuildingIdList != null">
AND bbuilding.building_id IN <foreach collection="bindBuildingIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
</if>
<if test="companyIdList != null and companyIdList.size() > 0">
AND bfloor.company_id IN <foreach collection="companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
</if>
</select>

12
data-center-business-dao/src/main/resources/mappers/ex/BasicSpaceMapperExt.xml

@ -167,12 +167,16 @@
basic_space bspace
INNER JOIN data_center_aeon_admin.basic_company bcomp ON bcomp.id = bspace.company_id
INNER JOIN basic_floor bfloor ON bfloor.floor_id = bspace.floor_id
INNER JOIN basic_building bbuilding ON bbuilding.building_id = bfloor.building_id
LEFT JOIN basic_tenant btenant ON btenant.tenant_id = bspace.tenant_id
WHERE
bspace.flag != 1 AND bcomp.flag != 1 AND bfloor.flag != 1 AND (btenant.flag IS NULL OR btenant.flag != 1)
<if test="companyId != null">
AND bspace.company_id = #{companyId}
</if>
bspace.flag != 1 AND bcomp.flag != 1 AND bfloor.flag != 1 AND bbuilding.flag != 1 AND (btenant.flag IS NULL OR btenant.flag != 1)
<if test="bindBuildingIdList != null">
AND bbuilding.building_id IN <foreach collection="bindBuildingIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
</if>
<if test="companyIdList != null and companyIdList.size() > 0">
AND bspace.company_id IN <foreach collection="companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
</if>
</select>

36
data-center-business-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml

@ -45,9 +45,6 @@
INNER JOIN data_center_aeon_admin.basic_menu bmenu ON bmenu.id = brmr.menu_id
WHERE
brole.flag != 1 AND bmenu.flag != 1 AND brur.user_id = #{userId}
<if test="targetPlatform == 2">
AND bmenu.used_by_dashboard = 1
</if>
</otherwise>
</choose>
@ -118,4 +115,37 @@
where id = #{id}
</update>
<select id="selectDashboardMenusByUserId" resultType="com.techsor.datacenter.business.vo.role.DashboardTreeMenusDTO">
SELECT
bmenu.id AS menuId,
bmenu.parent_menu_id AS parentMenuId,
bmenu.menu_name AS title,
bmenu.dashboard_lowest_node AS dashboardLowestNode,
brmr.permission_type AS permissionType
FROM
data_center_aeon_admin.basic_role_user_relation brur
INNER JOIN data_center_aeon_admin.basic_role_menu_relation_dashboard brmr ON brur.role_id = brmr.role_id
INNER JOIN data_center_aeon_admin.basic_menu bmenu ON bmenu.id = brmr.menu_id
WHERE
brur.user_id = #{userId}
AND bmenu.flag = 0
AND bmenu.used_by_dashboard = 1
AND bmenu.dashboard_lowest_node = 1
</select>
<select id="selectAllDashboardMenu" resultType="com.techsor.datacenter.business.vo.role.DashboardTreeMenusDTO">
SELECT
bmenu.`id` AS `menuId`,
bmenu.parent_menu_id AS parentMenuId,
bmenu.menu_name AS title,
bmenu.dashboard_lowest_node AS dashboardLowestNode
FROM
data_center_aeon_admin.basic_menu bmenu
<if test="superRole != null and superRole == 0">
inner join data_center_aeon_admin.basic_role_menu_relation_dashboard brmrd on bmenu.id = brmrd.menu_id and brmrd.role_id = #{roleId}
</if>
WHERE
bmenu.flag = 0 AND bmenu.used_by_dashboard = 1
</select>
</mapper>

107
data-center-business-dao/src/main/resources/mappers/ex/LevelMapperExt.xml

@ -180,4 +180,111 @@
order BY base.`id` desc
</select>
<select id="getBoundBuilding" resultType="java.lang.Long">
SELECT DISTINCT building_id
FROM (
-- BUILDING
SELECT b.building_id
FROM dashboard_level_role_user ru
JOIN dashboard_level_role_object ro
ON ru.level_role_id = ro.level_role_id
JOIN basic_building b
ON ro.ref_id = b.building_id
WHERE ru.user_id = #{userId}
AND ro.ref_type = 'BUILDING'
AND b.flag = 0
UNION ALL
-- SITE → BUILDING
SELECT b.building_id
FROM dashboard_level_role_user ru
JOIN dashboard_level_role_object ro
ON ru.level_role_id = ro.level_role_id
JOIN dashboard_level_site s
ON ro.ref_id = s.id AND s.flag = 0
JOIN dashboard_level_relation_site_building rsb
ON s.id = rsb.site_id
JOIN basic_building b
ON rsb.building_id = b.building_id AND b.flag = 0
WHERE ru.user_id = #{userId}
AND ro.ref_type = 'SITE'
UNION ALL
-- AREA → SITE → BUILDING
SELECT b.building_id
FROM dashboard_level_role_user ru
JOIN dashboard_level_role_object ro
ON ru.level_role_id = ro.level_role_id
JOIN dashboard_level_area a
ON ro.ref_id = a.id AND a.flag = 0
JOIN dashboard_level_relation_area_site ras
ON a.id = ras.area_id
JOIN dashboard_level_site s
ON ras.site_id = s.id AND s.flag = 0
JOIN dashboard_level_relation_site_building rsb
ON s.id = rsb.site_id
JOIN basic_building b
ON rsb.building_id = b.building_id AND b.flag = 0
WHERE ru.user_id = #{userId}
AND ro.ref_type = 'AREA'
UNION ALL
-- STORE → AREA → SITE → BUILDING
SELECT b.building_id
FROM dashboard_level_role_user ru
JOIN dashboard_level_role_object ro
ON ru.level_role_id = ro.level_role_id
JOIN dashboard_level_store st
ON ro.ref_id = st.id AND st.flag = 0
JOIN dashboard_level_relation_store_area rsa
ON st.id = rsa.store_id
JOIN dashboard_level_area a
ON rsa.area_id = a.id AND a.flag = 0
JOIN dashboard_level_relation_area_site ras
ON a.id = ras.area_id
JOIN dashboard_level_site s
ON ras.site_id = s.id AND s.flag = 0
JOIN dashboard_level_relation_site_building rsb
ON s.id = rsb.site_id
JOIN basic_building b
ON rsb.building_id = b.building_id AND b.flag = 0
WHERE ru.user_id = #{userId}
AND ro.ref_type = 'STORE'
UNION ALL
-- BRANCH → STORE → AREA → SITE → BUILDING
SELECT b.building_id
FROM dashboard_level_role_user ru
JOIN dashboard_level_role_object ro
ON ru.level_role_id = ro.level_role_id
JOIN dashboard_level_branch br
ON ro.ref_id = br.id AND br.flag = 0
JOIN dashboard_level_relation_branch_store rbs
ON br.id = rbs.branch_id
JOIN dashboard_level_store st
ON rbs.store_id = st.id AND st.flag = 0
JOIN dashboard_level_relation_store_area rsa
ON st.id = rsa.store_id
JOIN dashboard_level_area a
ON rsa.area_id = a.id AND a.flag = 0
JOIN dashboard_level_relation_area_site ras
ON a.id = ras.area_id
JOIN dashboard_level_site s
ON ras.site_id = s.id AND s.flag = 0
JOIN dashboard_level_relation_site_building rsb
ON s.id = rsb.site_id
JOIN basic_building b
ON rsb.building_id = b.building_id AND b.flag = 0
WHERE ru.user_id = #{userId}
AND ro.ref_type = 'BRANCH'
) t;
</select>
</mapper>

51
data-center-business-dao/src/main/resources/mappers/ex/LevelRoleMapperExt.xml

@ -102,23 +102,54 @@
SELECT o.ref_type AS type,
o.ref_id AS id
FROM dashboard_level_role_user u
JOIN dashboard_level_role_object o
ON u.level_role_id = o.level_role_id
INNER JOIN dashboard_level_role_object o
ON u.level_role_id = o.level_role_id
LEFT JOIN dashboard_level_branch b
ON o.ref_type = 'BRANCH' AND o.ref_id = b.id
LEFT JOIN dashboard_level_store s
ON o.ref_type = 'STORE' AND o.ref_id = s.id
LEFT JOIN dashboard_level_area a
ON o.ref_type = 'AREA' AND o.ref_id = a.id
LEFT JOIN dashboard_level_site si
ON o.ref_type = 'SITE' AND o.ref_id = si.id
LEFT JOIN basic_building bu
ON o.ref_type = 'BUILDING' AND o.ref_id = bu.building_id
WHERE u.user_id = #{userId}
<if test="refType != null">
AND u.ref_type = #{refType}
</if>
AND CASE o.ref_type
WHEN 'BRANCH' THEN IFNULL(b.flag, 1)
WHEN 'STORE' THEN IFNULL(s.flag, 1)
WHEN 'AREA' THEN IFNULL(a.flag, 1)
WHEN 'SITE' THEN IFNULL(si.flag, 1)
WHEN 'BUILDING' THEN IFNULL(bu.flag, 1)
END = 0
</select>
<select id="getBoundLevelByRole" resultType="java.lang.String">
SELECT
CONCAT(dlro.ref_type, '-', dlro.ref_id) AS id
FROM
dashboard_level_role_object dlro
INNER JOIN dashboard_level_role dlr ON dlr.id = dlro.level_role_id
WHERE
dlr.flag != 1 AND dlr.id = #{roleId}
FROM dashboard_level_role_object dlro
INNER JOIN dashboard_level_role dlr
ON dlr.id = dlro.level_role_id
LEFT JOIN dashboard_level_branch b
ON dlro.ref_type = 'BRANCH' AND dlro.ref_id = b.id
LEFT JOIN dashboard_level_store s
ON dlro.ref_type = 'STORE' AND dlro.ref_id = s.id
LEFT JOIN dashboard_level_area a
ON dlro.ref_type = 'AREA' AND dlro.ref_id = a.id
LEFT JOIN dashboard_level_site si
ON dlro.ref_type = 'SITE' AND dlro.ref_id = si.id
LEFT JOIN basic_building bu
ON dlro.ref_type = 'BUILDING' AND dlro.ref_id = bu.building_id
WHERE dlr.flag != 1
AND dlr.id = #{roleId}
AND CASE dlro.ref_type
WHEN 'BRANCH' THEN IFNULL(b.flag, 1)
WHEN 'STORE' THEN IFNULL(s.flag, 1)
WHEN 'AREA' THEN IFNULL(a.flag, 1)
WHEN 'SITE' THEN IFNULL(si.flag, 1)
WHEN 'BUILDING' THEN IFNULL(bu.flag, 1)
END = 0
</select>
<select id="getAlreadyBoundUserPage" resultType="com.techsor.datacenter.business.vo.levelrole.UserBoundRolePageDTO">

2
data-center-business-model/src/main/java/com/techsor/datacenter/business/dto/levelrole/BindUserParam.java

@ -16,6 +16,4 @@ public class BindUserParam {
@Schema(description = "层级角色ID",example = "[]", required = true)
private List<Long> levelRoleId;
@Schema(description = "关联类型,0-普通用户(只是查询),1-管理员(可以给别的角色设置)",example = "0", required = true)
private Integer refType;
}

3
data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/levelrole/UserBoundRolePageDTO.java

@ -13,9 +13,6 @@ public class UserBoundRolePageDTO extends LevelRolePageDTO{
@Schema(description = "绑定关系id",example = "3", required = true)
private Long relationId;
@Schema(description = "关联类型,0-普通用户,1-管理员",example = "0", required = true)
private Integer refType;
@Schema(description = "用户id",example = "2", required = true)
private Long userId;

31
data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/role/DashboardTreeMenusDTO.java

@ -0,0 +1,31 @@
package com.techsor.datacenter.business.vo.role;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* @author Mr.Jiang
* @time 2022年7月29日 下午4:37:50
*/
@Data
public class DashboardTreeMenusDTO {
@Schema(description = "节点ID",example = "11", required = true)
private String menuId;
@Schema(description = "父节点ID",example = "2", hidden = true)
private String parentMenuId;
@Schema(description = "节点名称",example = "添加", required = true)
private String title;
@Schema(description = "子节点",example = "[]", required = false)
private List<DashboardTreeMenusDTO> children;
private Integer permissionType; // 0-拒绝 1-只读 2-全部 null=半选
private Integer dashboardLowestNode; // 0-否 1-是
}

11
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/async/AsyncExcelProcessingService.java

@ -6,6 +6,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
import com.techsor.datacenter.business.common.config.DataSourceInterceptor;
import com.techsor.datacenter.business.util.CommonUtil;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
@ -52,13 +53,17 @@ public class AsyncExcelProcessingService {
private BasicMonitoringAssetMapperExt basicMonitoringAssetMapperExt;
@Autowired
private WebSocketServer webSocketServer;
@Autowired
private DataSourceInterceptor dataSourceInterceptor;
@Async
public void processSpaceSheet(String wsClientId, Sheet sheet, Map<Integer, SpacePageVO> spaceInfo, Path baseDir,
Map<String, Integer> columnIndices, long currentUnix, Integer languageType, Long companyId) {
long topCompanyId = dataSourceInterceptor.getTopCompanyId(companyId+"");
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX + companyId);
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX + topCompanyId);
try {
int totalRows = sheet.getLastRowNum();
int processedRecords = 0;
@ -212,8 +217,10 @@ public class AsyncExcelProcessingService {
@Async
public void processAssetSheet(String wsClientId, Sheet sheet, Map<Integer, MonitoringAssetPageVO> spaceInfo,
Path baseDir, Map<String, Integer> columnIndices, long currentUnix, Integer languageType, Long companyId) {
long topCompanyId = dataSourceInterceptor.getTopCompanyId(companyId+"");
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX + companyId);
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX + topCompanyId);
try {
int totalRows = sheet.getLastRowNum();

33
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/common/CommonOpt.java

@ -13,11 +13,9 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.techsor.datacenter.business.vo.building.BindedBuildingVO;
import com.techsor.datacenter.business.dao.ex.*;
import com.techsor.datacenter.business.vo.company.ApikeyInfo2;
import jakarta.annotation.PostConstruct;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
@ -51,10 +49,6 @@ import com.amazonaws.services.s3.model.CopyObjectResult;
import com.amazonaws.services.s3.model.DeleteObjectRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectResult;
import com.techsor.datacenter.business.dao.ex.BasicCompanyMapperExt;
import com.techsor.datacenter.business.dao.ex.BasicUserMapperExt;
import com.techsor.datacenter.business.dao.ex.S3FileMappingMapperExt;
import com.techsor.datacenter.business.dao.ex.UserBuildingRelationMapperExt;
import com.techsor.datacenter.business.dto.common.api.ResponseTargetThreshold;
import com.techsor.datacenter.business.entity.common.S3FileInfoEntity;
import com.techsor.datacenter.business.model.BasicCompany;
@ -95,6 +89,10 @@ public class CommonOpt {
private UserBuildingRelationMapperExt userBuildingRelationMapperExt;
@Autowired
private S3FileMappingMapperExt s3FileMappingMapperExt;
@Autowired
private LevelRoleMapperExt levelRoleMapperExt;
@Autowired
private LevelMapperExt levelMapperExt;
@ -399,16 +397,29 @@ public class CommonOpt {
logger.info("delete file from s3 successfully: {}", s3Path);
}
// public List<Long> getBindBuildingIdList(Long userId) {
// Integer buildingManager = basicUserMapperExt.checkBuildingManager(userId);
// if (buildingManager > 0) {
// return null;//null表示不限制, sql里面判定bindedBuildingList=null的话,就不限制楼宇
// } else {
// List<BindedBuildingVO> bindedBuildingList = userBuildingRelationMapperExt.getBindedBuilding(userId);
// if (CollectionUtils.isEmpty(bindedBuildingList)) {
// return Collections.singletonList(-1L);//-1的话,表示没有绑定
// } else {
// return bindedBuildingList.stream().map(BindedBuildingVO::getBuildingId).collect(Collectors.toList());
// }
// }
// }
public List<Long> getBindBuildingIdList(Long userId) {
Integer buildingManager = basicUserMapperExt.checkBuildingManager(userId);
if (buildingManager > 0) {
Integer levelManager = levelRoleMapperExt.checkLevelManager(userId);
if (levelManager > 0) {
return null;//null表示不限制, sql里面判定bindedBuildingList=null的话,就不限制楼宇
} else {
List<BindedBuildingVO> bindedBuildingList = userBuildingRelationMapperExt.getBindedBuilding(userId);
List<Long> bindedBuildingList = levelMapperExt.getBoundBuilding(userId);
if (CollectionUtils.isEmpty(bindedBuildingList)) {
return Collections.singletonList(-1L);//-1的话,表示没有绑定
} else {
return bindedBuildingList.stream().map(BindedBuildingVO::getBuildingId).collect(Collectors.toList());
return bindedBuildingList;
}
}
}

99
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/AccountServiceImpl.java

@ -1,9 +1,10 @@
package com.techsor.datacenter.business.service.impl;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import com.techsor.datacenter.business.vo.role.DashboardTreeMenusDTO;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@ -183,11 +184,16 @@ public class AccountServiceImpl implements AccountService {
cacheUserData.setMfaSwitch(userInfoVO.getMfaSwitch());
cacheUserData.setMfaBind(userInfoVO.getMfaBind());
cacheUserData.setEmail(userInfoVO.getEmail());
Map<String, Object> menuMap = new HashMap<>();
menuMap.put("userId", userInfoVO.getId());
menuMap.put("superRole", userInfoVO.getSuperRole());
menuMap.put("targetPlatform", targetPlatform);//区分dashboard等菜单
cacheUserData.setMenuIds(basicUserMapperExt.getMenuIdsByUserId(menuMap));
if (null != targetPlatform && 2 == targetPlatform) {
cacheUserData.setMenuIds(getDashboardMenuIdsForUser(userInfoVO.getId(), userInfoVO.getSuperRole()));
} else {
Map<String, Object> menuMap = new HashMap<>();
menuMap.put("userId", userInfoVO.getId());
menuMap.put("superRole", userInfoVO.getSuperRole());
cacheUserData.setMenuIds(basicUserMapperExt.getMenuIdsByUserId(menuMap));
}
response.setHeader("AccessToken", accessToken);
@ -222,6 +228,85 @@ public class AccountServiceImpl implements AccountService {
}
}
public String getDashboardMenuIdsForUser(Long userId, Integer superRole) {
List<DashboardTreeMenusDTO> allMenus =
basicUserMapperExt.selectAllDashboardMenu(Collections.emptyMap());
// 超级管理员:直接返回全部菜单
if (superRole == 1) {
return allMenus.stream()
.map(DashboardTreeMenusDTO::getMenuId)
.collect(Collectors.joining(","));
}
// ================= 普通用户 =================
// 查询用户叶子权限(dashboard_lowest_node=1)
List<DashboardTreeMenusDTO> userMenus =
basicUserMapperExt.selectDashboardMenusByUserId(userId);
if (userMenus == null || userMenus.isEmpty()) {
return "";
}
Map<String, DashboardTreeMenusDTO> allMenuMap = allMenus.stream()
.collect(Collectors.toMap(DashboardTreeMenusDTO::getMenuId, m -> m));
// 🔥 提前构建 parent -> children 映射(性能优化)
Map<String, List<DashboardTreeMenusDTO>> childrenMap = new HashMap<>();
for (DashboardTreeMenusDTO menu : allMenus) {
childrenMap
.computeIfAbsent(menu.getParentMenuId(), k -> new ArrayList<>())
.add(menu);
}
Set<String> resultIds = new HashSet<>();
// 核心逻辑
for (DashboardTreeMenusDTO menu : userMenus) {
String menuId = menu.getMenuId();
Integer permissionType = menu.getPermissionType();
resultIds.add(menuId);
// ===== 向上找父节点 =====
if (permissionType != null && permissionType != 0) {
String parentId = menu.getParentMenuId();
while (parentId != null && !"-1".equals(parentId)) {
if (!resultIds.add(parentId)) {
break; // 已存在直接结束(防止死循环)
}
DashboardTreeMenusDTO parent = allMenuMap.get(parentId);
if (parent == null) break;
parentId = parent.getParentMenuId();
}
}
// ===== permission=2 向下找所有子节点 =====
if (permissionType != null && permissionType == 2) {
addAllChildren(menuId, childrenMap, resultIds);
}
}
return String.join(",", resultIds);
}
private void addAllChildren(String menuId,
Map<String, List<DashboardTreeMenusDTO>> childrenMap,
Set<String> resultIds) {
List<DashboardTreeMenusDTO> children = childrenMap.get(menuId);
if (children == null) return;
for (DashboardTreeMenusDTO child : children) {
if (resultIds.add(child.getMenuId())) {
addAllChildren(child.getMenuId(), childrenMap, resultIds);
}
}
}
private void handleLock(UserInfoVO userInfoVO, Integer languageType) {
String lockKey = String.format(Constants.LOGIN_LOCK, userInfoVO.getId());

7
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/BuildingServiceImpl.java

@ -925,8 +925,11 @@ public class BuildingServiceImpl implements BuildingService {
public List<BuildingPageVO> getAll(Long companyId,
Long userId, Integer languageType, Integer uTCOffset) {
List<Long> bindingCompanyIdList = commonOpt.getBindBuildingIdList(userId);
List<BuildingPageVO> resultList = basicBuildingMapperExt.getAllInList(bindingCompanyIdList);
List<Long> bindingIdList = commonOpt.getBindBuildingIdList(userId);
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("bindBuildingIdList", bindingIdList);
paramMap.put("companyIdList", Arrays.asList(companyId));
List<BuildingPageVO> resultList = basicBuildingMapperExt.getAllInList(paramMap);
return resultList;
}

7
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/FloorServiceImpl.java

@ -432,7 +432,11 @@ public class FloorServiceImpl implements FloorService {
@Override
public List<FloorPageVO> getAll(Long companyId,
Long userId, Integer languageType, Integer uTCOffset) {
List<FloorPageVO> resultList = basicFloorMapperExt.getAll(companyId.toString());
List<Long> bindingIdList = commonOpt.getBindBuildingIdList(userId);
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("bindBuildingIdList", bindingIdList);
paramMap.put("companyIdList", Arrays.asList(companyId));
List<FloorPageVO> resultList = basicFloorMapperExt.getAll(paramMap);
return resultList;
}
@ -739,6 +743,7 @@ public class FloorServiceImpl implements FloorService {
floorInfo.getCompanyName(),
floorInfo.getUdfBuildingId(),
floorInfo.getFloorName(),
floorInfo.getUdfFloorId()
};
csvContentList.add(csvRow);
}

33
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/LevelRoleServiceImpl.java

@ -245,7 +245,6 @@ public class LevelRoleServiceImpl implements LevelRoleService {
DashboardLevelRoleUser dashboardLevelRoleUser = new DashboardLevelRoleUser();
dashboardLevelRoleUser.setUserId(bindUserParam.getUserId());
dashboardLevelRoleUser.setLevelRoleId(levelRoleId);
dashboardLevelRoleUser.setRefType(bindUserParam.getRefType());
dashboardLevelRoleUser.setCreatedAt(currentUnix);
dashboardLevelRoleUser.setCreatedBy(userId);
levelRoleUserMapperExt.insertSelective(dashboardLevelRoleUser);
@ -266,9 +265,6 @@ public class LevelRoleServiceImpl implements LevelRoleService {
if (CollectionUtils.isEmpty(bindUserParam.getLevelRoleId())) {
return new SimpleDataResponse(ResponseCode.MSG_ERROR, "levelRoleId required");
}
if (null == bindUserParam.getRefType()) {
return new SimpleDataResponse(ResponseCode.MSG_ERROR, "refType required");
}
return SimpleDataResponse.success();
}
@ -352,7 +348,6 @@ public class LevelRoleServiceImpl implements LevelRoleService {
} else {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("userId", userId);
paramMap.put("refType", 1);
userRefs = levelRoleMapperExt.selectUserRefs(paramMap);
// 名称填充
fillNames(userRefs, branches, stores, areas, sites, buildings);
@ -414,15 +409,27 @@ public class LevelRoleServiceImpl implements LevelRoleService {
Map<Long, String> siteName = toNameMap(sites);
Map<Long, String> buildingName = toNameMap(buildings);
for (RefKey r : userRefs) {
switch (r.getType()) {
case "BRANCH" -> r.setName(branchName.get(r.getId()));
case "STORE" -> r.setName(storeName.get(r.getId()));
case "AREA" -> r.setName(areaName.get(r.getId()));
case "SITE" -> r.setName(siteName.get(r.getId()));
case "BUILDING" -> r.setName(buildingName.get(r.getId()));
userRefs.removeIf(r -> {
String name = switch (r.getType()) {
case "BRANCH" -> branchName.get(r.getId());
case "STORE" -> storeName.get(r.getId());
case "AREA" -> areaName.get(r.getId());
case "SITE" -> siteName.get(r.getId());
case "BUILDING" -> buildingName.get(r.getId());
default -> null;
};
// 兜底处理
// branchName、storeName、areaName、siteName、buildingName里面不存在的,说明flag=1或者不存在了,userRefs里面需要删除掉
if (name == null) {
return true;
}
}
// 存在的就赋值
r.setName(name);
return false;
});
}
private Map<Long, List<RefKey>> groupByParent(List<RefKey> items) {

6
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/SpaceServiceImpl.java

@ -604,7 +604,11 @@ public class SpaceServiceImpl implements SpaceService {
public List<SpacePageVO> getAll(Long companyId,
Long userId, Integer languageType, Integer uTCOffset) {
List<SpacePageVO> resultList = basicSpaceMapperExt.getAll(companyId.toString());
List<Long> bindingIdList = commonOpt.getBindBuildingIdList(userId);
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("bindBuildingIdList", bindingIdList);
paramMap.put("companyIdList", Arrays.asList(companyId));
List<SpacePageVO> resultList = basicSpaceMapperExt.getAll(paramMap);
return resultList;
}

Loading…
Cancel
Save