diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/DataScopeContext.java b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/DataScopeContext.java index c53fe9e..2728bab 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/DataScopeContext.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/DataScopeContext.java @@ -35,4 +35,11 @@ public class DataScopeContext implements Serializable { return dataScopeProvider.findDataFieldProperty(); } + public static Optional getDataScopeHasUserId(String roleCode,Long userId) { + DataScopeProvider dataScopeProvider = DSP_MAP.get(roleCode); + if (dataScopeProvider == null) { + throw new IllegalArgumentException(String.format(WARN_MSG, roleCode)); + } + return dataScopeProvider.findDataFieldProperty(userId); + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/DataScopeProvider.java b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/DataScopeProvider.java index def8e0e..24b76bc 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/DataScopeProvider.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/DataScopeProvider.java @@ -22,4 +22,5 @@ public interface DataScopeProvider { **/ Optional findDataFieldProperty(); + Optional findDataFieldProperty(Long userId); } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/DashboardUserDataScopeProviderImpl.java b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/DashboardUserDataScopeProviderImpl.java index cae0e2a..11364be 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/DashboardUserDataScopeProviderImpl.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/DashboardUserDataScopeProviderImpl.java @@ -39,4 +39,14 @@ public class DashboardUserDataScopeProviderImpl implements DataScopeProvider { return Optional.ofNullable(ds); } + @Override + public Optional findDataFieldProperty(Long userId) { + UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId); + DataScopeDTO ds = new DataScopeDTO(); + ds.setEmployeeCode(userFullInfo.getEmployeeCode()); + ds.setRegionCodes(Lists.newArrayList(userFullInfo.getRegionCode())); + ds.setUserId(userFullInfo.getUserId()); + ds.setRole(RoleEnum.DASHBOARD); + return Optional.ofNullable(ds); + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/ExpertDataScopeProviderImpl.java b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/ExpertDataScopeProviderImpl.java index 5689d2e..01ca934 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/ExpertDataScopeProviderImpl.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/ExpertDataScopeProviderImpl.java @@ -48,4 +48,18 @@ public class ExpertDataScopeProviderImpl implements DataScopeProvider { return Optional.ofNullable(ds); } + @Override + public Optional findDataFieldProperty(Long userId) { + UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId); + //所有 丽水市的code + Collection regionCodes = regionCacheHelper.listChildRegionCodeList(RegionConst.RC_LS, + RegionConst.RL_CITY); + + DataScopeDTO ds = new DataScopeDTO(); + ds.setRegionCodes(regionCodes.stream().collect(Collectors.toList())); + ds.setUserId(userFullInfo.getUserId()); + ds.setEmployeeCode(userFullInfo.getEmployeeCode()); + ds.setRole(RoleEnum.EXPERT); + return Optional.ofNullable(ds); + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/OrdinaryUserDataScopeProviderImpl.java b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/OrdinaryUserDataScopeProviderImpl.java index e8c8b11..2df78ce 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/OrdinaryUserDataScopeProviderImpl.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/OrdinaryUserDataScopeProviderImpl.java @@ -38,4 +38,14 @@ public class OrdinaryUserDataScopeProviderImpl implements DataScopeProvider { return Optional.ofNullable(ds); } + @Override + public Optional findDataFieldProperty(Long userId) { + UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId); + DataScopeDTO ds = new DataScopeDTO(); + ds.setEmployeeCode(userFullInfo.getEmployeeCode()); + ds.setRegionCodes(Lists.newArrayList(userFullInfo.getRegionCode())); + ds.setUserId(userFullInfo.getUserId()); + ds.setRole(RoleEnum.NORMAL_MEMBER); + return Optional.ofNullable(ds); + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/OrgAdminDataScopeProviderImpl.java b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/OrgAdminDataScopeProviderImpl.java index 387af6b..d4eeb4e 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/OrgAdminDataScopeProviderImpl.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/OrgAdminDataScopeProviderImpl.java @@ -37,4 +37,14 @@ public class OrgAdminDataScopeProviderImpl implements DataScopeProvider { return Optional.of(ds); } + @Override + public Optional findDataFieldProperty(Long userId) { + UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId); + DataScopeDTO ds = new DataScopeDTO(); + ds.setOrgCode(userFullInfo.getEmpPosUnitCode()); + ds.setUserId(userFullInfo.getUserId()); + ds.setEmployeeCode(userFullInfo.getEmployeeCode()); + ds.setRole(RoleEnum.COMPANY_MANAGER); + return Optional.of(ds); + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/RegionAdminDataScopeProviderImpl.java b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/RegionAdminDataScopeProviderImpl.java index c79bbce..81820b0 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/RegionAdminDataScopeProviderImpl.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/RegionAdminDataScopeProviderImpl.java @@ -54,4 +54,23 @@ public class RegionAdminDataScopeProviderImpl implements DataScopeProvider { return Optional.of(ds); } + @Override + public Optional findDataFieldProperty(Long userId) { + UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId); + //借由 丽水市的code 来映射市本级的regionCode + Collection regionCodes = regionCacheHelper.listChildRegionCodeList(userFullInfo.getRegionCode(), + RegionConst.RL_CITY); + //如果不是市本级的话 就直接放入本区域的县就好了 + if(CollUtil.isEmpty(regionCodes)){ + regionCodes = Lists.newArrayList(); + regionCodes.add(userFullInfo.getRegionCode()); + } + + DataScopeDTO ds = new DataScopeDTO(); + ds.setRegionCodes(new ArrayList<>(regionCodes)); + ds.setUserId(userFullInfo.getUserId()); + ds.setEmployeeCode(userFullInfo.getEmployeeCode()); + ds.setRole(RoleEnum.REGION_MANAGER); + return Optional.of(ds); + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/SuperAdminDataScopeProviderImpl.java b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/SuperAdminDataScopeProviderImpl.java index 73168dc..4b21bf6 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/SuperAdminDataScopeProviderImpl.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/SuperAdminDataScopeProviderImpl.java @@ -48,4 +48,18 @@ public class SuperAdminDataScopeProviderImpl implements DataScopeProvider { return Optional.of(ds); } + @Override + public Optional findDataFieldProperty(Long userId) { + UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId); + //所有 丽水市的code + Collection regionCodes = regionCacheHelper.listChildRegionCodeList(RegionConst.RC_LS, + RegionConst.RL_CITY); + + DataScopeDTO ds = new DataScopeDTO(); + ds.setRegionCodes(new ArrayList<>(regionCodes)); + ds.setUserId(userFullInfo.getUserId()); + ds.setEmployeeCode(userFullInfo.getEmployeeCode()); + ds.setRole(RoleEnum.SUPER_ADMIN); + return Optional.of(ds); + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/VisitoyDataScopeProviderImpl.java b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/VisitoyDataScopeProviderImpl.java index 04202b2..79e280c 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/VisitoyDataScopeProviderImpl.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/provider/impl/VisitoyDataScopeProviderImpl.java @@ -34,4 +34,12 @@ public class VisitoyDataScopeProviderImpl implements DataScopeProvider { return Optional.ofNullable(ds); } + @Override + public Optional findDataFieldProperty(Long userId) { + UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId); + DataScopeDTO ds = new DataScopeDTO(); + ds.setEmployeeCode(userFullInfo.getEmployeeCode()); + ds.setRole(RoleEnum.SUPER_ADMIN); + return Optional.ofNullable(ds); + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/utils/DataScopeUtil.java b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/utils/DataScopeUtil.java index a0bb6e8..7beb4ea 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/datascope/utils/DataScopeUtil.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/datascope/utils/DataScopeUtil.java @@ -24,6 +24,13 @@ public class DataScopeUtil { return DataScopeContext.getDataScope(user.getRoleCode().name()); } + public static Optional getCurrentUserDataScopeHasUserId(UserFullInfoDTO user) { + if (Objects.isNull(user) || Objects.isNull(user.getRoleCode())) { + return Optional.empty(); + } + return DataScopeContext.getDataScopeHasUserId(user.getRoleCode().name(),user.getUserId()); + } + public static Optional getCurrentUserDataScope() { UserInfoDetails loginUser = LoginUserUtil.loginUserDetail(); if (Objects.isNull(loginUser) || Objects.isNull(loginUser.getRoleCode())) { diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectLibManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectLibManage.java index 34f3854..67c6e55 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectLibManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectLibManage.java @@ -1322,7 +1322,7 @@ public class ProjectLibManage { * @param query */ public UserFullInfoDTO buildProjectLibPermission(LambdaQueryWrapper query, UserFullInfoDTO user) { - Optional currentUserDataScope = DataScopeUtil.getCurrentUserDataScope(user); + Optional currentUserDataScope = DataScopeUtil.getCurrentUserDataScopeHasUserId(user); if (!currentUserDataScope.isPresent()) { log.warn("没有取到权限信息 当前查询 没有权限条件"); return user; @@ -1367,7 +1367,7 @@ public class ProjectLibManage { } public ProjectListReq buildProjectLibPermission(ProjectListReq req,UserFullInfoDTO user) { - Optional currentUserDataScope = DataScopeUtil.getCurrentUserDataScope(user); + Optional currentUserDataScope = DataScopeUtil.getCurrentUserDataScopeHasUserId(user); if (!currentUserDataScope.isPresent()) { log.warn("没有取到权限信息 当前查询 没有权限条件"); return req; diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/workbench/manage/WorkbenchManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/workbench/manage/WorkbenchManage.java index 45984c3..7271b52 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/workbench/manage/WorkbenchManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/workbench/manage/WorkbenchManage.java @@ -2,6 +2,7 @@ package com.ningdatech.pmapi.workbench.manage; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.StopWatch; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -34,6 +35,7 @@ import com.ningdatech.pmapi.workbench.model.vo.WorkbenchVO; import com.wflow.enums.WarningNoticeTypeEnum; import com.wflow.enums.WarningRuleTypeEnum; import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; @@ -52,6 +54,7 @@ import java.util.stream.Collectors; */ @Component @AllArgsConstructor +@Slf4j public class WorkbenchManage { private final TodoCenterManage todoCenterManage; @@ -79,6 +82,8 @@ public class WorkbenchManage { CompletableFuture.allOf( CompletableFuture.runAsync(() -> { + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); //1.待办中心数据 TodoCenterStatisticsVO statisticsVO = todoCenterManage.todoCenterStatistics(user.getEmployeeCode()); ToBeProcessedReq toBeProcessedReq = new ToBeProcessedReq(); @@ -89,8 +94,13 @@ public class WorkbenchManage { statisticsVO.setTodoList(todoCenterManage.todoProjectList(toBeProcessedReq).getRecords() .stream().map(WorkbenchConverter::convert).collect(Collectors.toList())); res.setTodoCerter(statisticsVO); + stopWatch.stop(); + log.info("待办中心数据 耗时,{} s",stopWatch.getTotalTimeSeconds()); }, ForkJoinPool.commonPool()), CompletableFuture.runAsync(() -> { + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + //2.项目统计数据 res.setOrgDeclared(WorkbenchConverter.convert(defaultDeclaredProjectManage .declaredProjectOrgStatistics(year, user),defaultDeclaredProjectManage.declaredProjectOrgStatistics(year - 1, user))); @@ -98,26 +108,43 @@ public class WorkbenchManage { res.setRegionDeclared(WorkbenchConverter.convert(defaultDeclaredProjectManage .declaredProjectRegionStatistics(year, user),defaultDeclaredProjectManage.declaredProjectRegionStatistics(year - 1, user))); } + stopWatch.stop(); + log.info("项目统计数据 耗时,{} s",stopWatch.getTotalTimeSeconds()); }, ForkJoinPool.commonPool()), CompletableFuture.runAsync(() -> { + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + //3.所有公告按类型分 NoticeListReq noticeListReq = new NoticeListReq(); noticeListReq.setPageNumber(1); noticeListReq.setPageSize(1000); res.setNoticeList(noticeManage.listToMapByManager(noticeListReq,user)); + stopWatch.stop(); + log.info("公告 耗时,{} s",stopWatch.getTotalTimeSeconds()); }, ForkJoinPool.commonPool()), CompletableFuture.runAsync(() -> { + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + //4.项目预警记录 res.setProjectEarlyWarning(getProjectEarlyWarning(user)); + log.info("项目预警记录 耗时,{} s",stopWatch.getTotalTimeSeconds()); + }, ForkJoinPool.commonPool()), + CompletableFuture.runAsync(() -> { + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + + // 项目列表 + ProjectListReq projectListReq = new ProjectListReq(); + projectListReq.setPageNumber(1); + projectListReq.setPageSize(2000); + projectListReq.setProjectYear(year); + res.setProjects(new ArrayList<>(projectLibManage.listWithPermissionWorkbentch(projectListReq,user).getRecords())); + log.info("工作台 项目列表 耗时,{} s",stopWatch.getTotalTimeSeconds()); }, ForkJoinPool.commonPool()) ).join(); - //这个不能放入子线程 - ProjectListReq projectListReq = new ProjectListReq(); - projectListReq.setPageNumber(1); - projectListReq.setPageSize(2000); - projectListReq.setProjectYear(year); - res.setProjects(new ArrayList<>(projectLibManage.listWithPermissionWorkbentch(projectListReq,user).getRecords())); return res; }