Browse Source

数据权限调整

wucl 2 years ago
parent
commit
91fbe8bcb1

+ 1 - 1
biz-base/src/main/java/com/dayou/controller/CustomerController.java

@@ -92,7 +92,7 @@ public class CustomerController extends BaseController {
     /**
      * 客户表下拉列表
      */
-    @DataPermission(child = false)
+    @DataPermission
     @GetMapping("/simpleAll")
     public RestResponse<List<PullDownModel>> simpleAll(CustomerDTO customerDTO){
         LambdaQueryWrapper<Customer> lambdaQueryWrapper = new LambdaQueryWrapper<Customer>()

+ 4 - 4
biz-base/src/main/java/com/dayou/controller/ItemController.java

@@ -41,9 +41,9 @@ public class ItemController extends BaseController {
     private IItemService itemService;
 
     /**
-    * 项目信息表列表
+    * 项目信息表列表(项目所属部门是自己的部门的项目)
     */
-    @DataPermission
+    @DataPermission(department = true,postChild = false)
     @GetMapping("")
     public RestResponse<Page<ItemVO>> page(ItemDTO item, Page page){
         Page<ItemVO> pages=itemService.selectPage(page,item);
@@ -51,9 +51,9 @@ public class ItemController extends BaseController {
     }
 
     /**
-     * 我的项目列表
+     * 我的项目列表 (包含客户经理是自己或客户经理是自己下属的项目)
      */
-    @DataPermission(child = false)
+    @DataPermission
     @GetMapping("/mine")
     public RestResponse<Page<ItemVO>> xPage(ItemDTO item, Page page){
         Page<ItemVO> pages=itemService.selectPage(page,item);

+ 4 - 0
dao/src/main/java/com/dayou/mapper/PostMapper.java

@@ -2,12 +2,14 @@ package com.dayou.mapper;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dayou.common.PullDownModel;
+import com.dayou.common.SimpleListModel;
 import com.dayou.entity.Post;
 import com.dayou.dao.CustomBaseMapper;
 import com.dayou.vo.PostVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -24,4 +26,6 @@ public interface PostMapper extends CustomBaseMapper<Post> {
     Page<PostVO> getPage(Page page, @Param("postVO") PostVO postVO);
 
     List<PullDownModel> xSimpleAll();
+
+    List<SimpleListModel> getDepartmentList(@Param("postIds") Set<Long> postIds);
 }

+ 6 - 0
dao/src/main/resources/mapper/ItemMapper.xml

@@ -83,6 +83,12 @@
                 #{userId}
             </foreach>
         </if>
+        <if test="item!=null and item.departmentIds!=null and item.departmentIds.size!=0">
+            and i.department_id in
+            <foreach collection="item.departmentIds" open="(" close=")" separator="," item="departmentId">
+                #{departmentId}
+            </foreach>
+        </if>
 
     </select>
 </mapper>

+ 11 - 0
dao/src/main/resources/mapper/PostMapper.xml

@@ -63,4 +63,15 @@
     <select id="xSimpleAll" resultType="com.dayou.common.PullDownModel">
         select p.id ,CONCAT(p.name,'-',d.name) as name from post p left join department d on p.department_id = d.id where p.deleted =0 and d.deleted=0
     </select>
+
+    <select id="getDepartmentList" parameterType="java.util.Set" resultType="com.dayou.common.SimpleListModel">
+        select distinct d.name ,d.id from post p left join department d on d.id = p.department_id
+        where d.deleted = 0 and p.deleted = 0
+        <if test="postIds!=null and postIds.size!=0">
+            and p.id in
+            <foreach collection="postIds" item="pId" open="(" close=")" separator=",">
+                #{pId}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 8 - 2
domain/src/main/java/com/dayou/annotation/DataPermission.java

@@ -15,8 +15,14 @@ import java.lang.annotation.*;
 public @interface DataPermission {
 
     /**
-     * 是否包含下级岗位
+     * 岗位数据权限 是否包含下级岗位
      * @return
      */
-    public boolean child() default true;
+    public boolean postChild() default true;
+
+    /**
+     * 部门数据权限
+     * @return
+     */
+    public boolean department() default false;
 }

+ 2 - 0
domain/src/main/java/com/dayou/bo/LoginCacheUserBO.java

@@ -21,5 +21,7 @@ public class LoginCacheUserBO {
 
     private Set<PrivilegeTreeBO> privilegeList;
 
+    private List<SimpleListModel> departmentList;
+
 
 }

+ 5 - 0
domain/src/main/java/com/dayou/dto/ItemDTO.java

@@ -21,4 +21,9 @@ public class ItemDTO extends Item {
      */
     private Set<Long> userIds;
 
+    /**
+     * 部门id
+     */
+    private List<Long> departmentIds;
+
 }

+ 5 - 0
domain/src/main/java/com/dayou/dto/UserBaseDetailDTO.java

@@ -66,6 +66,11 @@ public class UserBaseDetailDTO {
      */
     private List<SimpleListModel> postList;
 
+    /**
+     * 部门列表
+     */
+    private List<SimpleListModel> departmentList;
+
 
     /**
      * 用户缓存信息

+ 22 - 8
service/src/main/java/com/dayou/aspect/DataPermissionAop.java

@@ -1,6 +1,7 @@
 package com.dayou.aspect;
 
 import com.dayou.annotation.DataPermission;
+import com.dayou.common.SimpleListModel;
 import com.dayou.service.IUserService;
 import com.dayou.utils.LoginContext;
 import lombok.extern.slf4j.Slf4j;
@@ -14,7 +15,9 @@ import org.springframework.stereotype.Component;
 import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 类说明:
@@ -39,17 +42,28 @@ public class DataPermissionAop {
 
     @Around("dataPermissionPointcut() && @annotation(dataPermission)")
     public Object  beforeHandle(ProceedingJoinPoint joinPoint, DataPermission dataPermission) throws Throwable {
-        Set<Long> users = new HashSet<>();
-        Long userId = LoginContext.getUserId();
-        if (dataPermission.child()){
+
+        Object arg = joinPoint.getArgs()[0];
+
+        if (dataPermission.department()){
+            List<Long> departmentIds = LoginContext.getLoginCacheUserBO().getDepartmentList().stream()
+                    .map(SimpleListModel::getId).collect(Collectors.toList());
+            Field departments = arg.getClass().getDeclaredField("departmentIds");
+            departments.setAccessible(Boolean.TRUE);
+            departments.set(arg,departmentIds);
+        }
+
+        if (dataPermission.postChild()){
+            Set<Long> users = new HashSet<>();
+            Long userId = LoginContext.getUserId();
             //根据当前登录人获取下属员工id
             users = userService.getJuniorUserId(userId);
+            users.add(userId);
+            Field userIds = arg.getClass().getDeclaredField("userIds");
+            userIds.setAccessible(Boolean.TRUE);
+            userIds.set(arg,users);
         }
-        users.add(userId);
-        Object arg = joinPoint.getArgs()[0];
-        Field userIds = arg.getClass().getDeclaredField("userIds");
-        userIds.setAccessible(Boolean.TRUE);
-        userIds.set(arg,users);
+
         return joinPoint.proceed();
 
     }

+ 4 - 0
service/src/main/java/com/dayou/service/IPostService.java

@@ -1,5 +1,6 @@
 package com.dayou.service;
 import com.dayou.common.PullDownModel;
+import com.dayou.common.SimpleListModel;
 import com.dayou.entity.Post;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,6 +10,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -41,4 +43,6 @@ public interface IPostService extends IService<Post> {
     List<PullDownModel > xSimpleAll();
 
     List<Post> getPostList(PostVO postVO);
+
+    List<SimpleListModel> getDepartmentList(Set<Long> postIds);
 }

+ 41 - 31
service/src/main/java/com/dayou/service/impl/ItemStageServiceImpl.java

@@ -158,37 +158,47 @@ public class ItemStageServiceImpl extends ServiceImpl<ItemStageMapper, ItemStage
     @Override
     public List<List<ItemStageVO>> stageList(String state) {
         List<List<ItemStageVO>> list = new ArrayList<>();
-        List<Long> itemIds = itemMapper.selectList(new LambdaQueryWrapper<Item>()
-                        .eq(BaseEntity::getDeleted, false))
-                .stream().map(BaseEntity::getId)
-                .collect(Collectors.toList());
-        itemIds.stream().forEach(x->{
-            List<ItemStageVO> itemStageVOS = listByItemId(x);
-            if (CollectionUtils.isNotEmpty(itemStageVOS)){
-                LocalDate startDate = itemStageVOS.get(0).getStartDate();
-                LocalDate endDate = itemStageVOS.get(itemStageVOS.size() - 1).getEndDate();
-                LocalDate now = LocalDate.now();
-                ItemStateEnum stateEnum = ItemStateEnum.getName(state);
-                switch (stateEnum){
-                    case PENDING:
-                        if ((now.isAfter(startDate) || now.isEqual(startDate))
-                                &&
-                                (now.isBefore(endDate) || now.isEqual(endDate))){
-                            list.add(itemStageVOS);
-                        }
-                        break;
-                    case COMPLETED:
-                        if (now.isAfter(endDate)){
-                            list.add(itemStageVOS);
-                        }
-                        break;
-                    case UNPLAYED:
-                        if (now.isBefore(startDate)){
-                            list.add(itemStageVOS);
-                        }
-                        break;
-                    default:
-
+        List<Item> items = itemMapper.selectList(new LambdaQueryWrapper<Item>()
+                .eq(BaseEntity::getDeleted, false));
+
+
+        items.stream().forEach(x->{
+            List<ItemStageVO> itemStageVOS = listByItemId(x.getId());
+            if (StrUtil.equals(ItemStateEnum.UNPLAYED.getName(),state)){
+                List<ItemStageVO> itemList= new ArrayList<>();
+                ItemStageVO itemStageVO = new ItemStageVO();
+                itemStageVO.setItemName(x.getName());
+                itemStageVO.setState(ItemStateEnum.UNPLAYED.getName());
+                itemStageVO.setName(ItemStateEnum.UNPLAYED.getName());
+                itemList.add(itemStageVO);
+                list.add(itemList);
+            }else {
+                if (CollectionUtils.isNotEmpty(itemStageVOS)){
+                    LocalDate startDate = itemStageVOS.get(0).getStartDate();
+                    LocalDate endDate = itemStageVOS.get(itemStageVOS.size() - 1).getEndDate();
+                    LocalDate now = LocalDate.now();
+                    ItemStateEnum stateEnum = ItemStateEnum.getName(state);
+                    switch (stateEnum){
+                        case PENDING:
+                            if ((now.isAfter(startDate) || now.isEqual(startDate))
+                                    &&
+                                    (now.isBefore(endDate) || now.isEqual(endDate))){
+                                list.add(itemStageVOS);
+                            }
+                            break;
+                        case COMPLETED:
+                            if (now.isAfter(endDate)){
+                                list.add(itemStageVOS);
+                            }
+                            break;
+                        case UNPLAYED:
+                            if (now.isBefore(startDate)){
+                                list.add(itemStageVOS);
+                            }
+                            break;
+                        default:
+
+                    }
                 }
             }
         });

+ 13 - 0
service/src/main/java/com/dayou/service/impl/PostServiceImpl.java

@@ -3,11 +3,13 @@ package com.dayou.service.impl;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dayou.common.BaseEntity;
 import com.dayou.common.PullDownModel;
+import com.dayou.common.SimpleListModel;
 import com.dayou.entity.Post;
 import com.dayou.mapper.PostMapper;
 import com.dayou.service.IPostService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.vo.PostVO;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -26,6 +28,8 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
 import java.util.List;
 import java.util.ArrayList;
+import java.util.Set;
+
 import org.springframework.transaction.annotation.Transactional;
 import com.dayou.enums.BatchTaskTypeEnum;
 
@@ -141,4 +145,13 @@ public class PostServiceImpl extends ServiceImpl<PostMapper, Post> implements IP
         return list;
     }
 
+    @Override
+    public List<SimpleListModel> getDepartmentList(Set<Long> postIds) {
+        if (CollectionUtils.isNotEmpty(postIds)){
+            List<SimpleListModel> list = postMapper.getDepartmentList(postIds);
+            return list;
+        }
+        return null;
+    }
+
 }

+ 8 - 3
service/src/main/java/com/dayou/service/impl/UserServiceImpl.java

@@ -217,8 +217,13 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             BeanUtils.copyProperties(user,userBaseDetailDTO);
         }
 
-        List<SimpleListModel> teacherPostList = userPostService.getPostList(userId);
-        userBaseDetailDTO.setPostList(teacherPostList);
+        List<SimpleListModel> postList = userPostService.getPostList(userId);
+        userBaseDetailDTO.setPostList(postList);
+
+        Set<Long> postIds = postList.stream().map(SimpleListModel::getId).collect(Collectors.toSet());
+
+        List<SimpleListModel> departmentList = postService.getDepartmentList(postIds);
+        userBaseDetailDTO.setDepartmentList(departmentList);
 
         LoginCacheUserBO loginCacheUserBO = cache.getIfPresent(userId);
         userBaseDetailDTO.setLoginCacheUserBO(loginCacheUserBO);
@@ -254,7 +259,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         loginCacheUserBO.setName(userBaseDetailDTO.getName());
         loginCacheUserBO.setPostList(userBaseDetailDTO.getPostList());
         loginCacheUserBO.setPrivilegeList(privilegeList);
-
+        loginCacheUserBO.setDepartmentList(userBaseDetailDTO.getDepartmentList());
 
         loginCacheUserBO.setAccount(StringUtils.isNotBlank(user.getStaffNo()) ? user.getStaffNo() : user.getMobile());
         cache.put(user.getId(), loginCacheUserBO);