Browse Source

加入数据权限

wucl 2 years ago
parent
commit
fe7720bd65
37 changed files with 343 additions and 42 deletions
  1. 2 0
      biz-base/src/main/java/com/dayou/controller/BusinessOpportunityController.java
  2. 8 3
      biz-base/src/main/java/com/dayou/controller/CustomerController.java
  3. 14 2
      biz-base/src/main/java/com/dayou/controller/ItemController.java
  4. 3 1
      biz-base/src/main/java/com/dayou/controller/PaymentCollectionController.java
  5. 10 0
      biz-base/src/main/java/com/dayou/controller/PostController.java
  6. 4 0
      biz-base/src/main/java/com/dayou/controller/VisitController.java
  7. 4 0
      dao/src/main/java/com/dayou/mapper/CustomerMapper.java
  8. 1 1
      dao/src/main/java/com/dayou/mapper/ItemMapper.java
  9. 8 2
      dao/src/main/resources/mapper/BusinessOpportunityMapper.xml
  10. 21 1
      dao/src/main/resources/mapper/CustomerMapper.xml
  11. 5 2
      dao/src/main/resources/mapper/ItemMapper.xml
  12. 7 0
      dao/src/main/resources/mapper/PaymentCollectionMapper.xml
  13. 17 10
      dao/src/main/resources/mapper/PostMapper.xml
  14. 8 2
      dao/src/main/resources/mapper/VisitMapper.xml
  15. 22 0
      domain/src/main/java/com/dayou/annotation/DataPermission.java
  16. 11 0
      domain/src/main/java/com/dayou/dto/CustomerDTO.java
  17. 2 1
      domain/src/main/java/com/dayou/dto/ItemDTO.java
  18. 5 0
      domain/src/main/java/com/dayou/entity/BusinessOpportunity.java
  19. 6 0
      domain/src/main/java/com/dayou/entity/Customer.java
  20. 5 0
      domain/src/main/java/com/dayou/entity/Item.java
  21. 6 0
      domain/src/main/java/com/dayou/entity/Post.java
  22. 5 0
      domain/src/main/java/com/dayou/entity/Visit.java
  23. 10 0
      domain/src/main/java/com/dayou/vo/BusinessOpportunityVO.java
  24. 5 0
      domain/src/main/java/com/dayou/vo/PaymentCollectionVO.java
  25. 3 0
      domain/src/main/java/com/dayou/vo/PostVO.java
  26. 10 0
      domain/src/main/java/com/dayou/vo/VisitVO.java
  27. 60 0
      service/src/main/java/com/dayou/aspect/DataPermissionAop.java
  28. 1 1
      service/src/main/java/com/dayou/service/ICustomerService.java
  29. 1 1
      service/src/main/java/com/dayou/service/IItemService.java
  30. 2 0
      service/src/main/java/com/dayou/service/IPostService.java
  31. 3 0
      service/src/main/java/com/dayou/service/IUserService.java
  32. 2 0
      service/src/main/java/com/dayou/service/impl/BusinessOpportunityServiceImpl.java
  33. 9 3
      service/src/main/java/com/dayou/service/impl/CustomerServiceImpl.java
  34. 5 8
      service/src/main/java/com/dayou/service/impl/ItemServiceImpl.java
  35. 9 0
      service/src/main/java/com/dayou/service/impl/PostServiceImpl.java
  36. 44 4
      service/src/main/java/com/dayou/service/impl/UserServiceImpl.java
  37. 5 0
      sql/20230213.sql

+ 2 - 0
biz-base/src/main/java/com/dayou/controller/BusinessOpportunityController.java

@@ -1,5 +1,6 @@
 package com.dayou.controller;
 
+import com.dayou.annotation.DataPermission;
 import com.dayou.annotation.OperLog;
 import com.dayou.vo.BusinessOpportunityVO;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@@ -38,6 +39,7 @@ public class BusinessOpportunityController extends BaseController {
     /**
     * 商机列表
     */
+    @DataPermission
     @GetMapping("")
     public RestResponse<Page<BusinessOpportunityVO>> page(BusinessOpportunityVO businessOpportunity, Page page){
         Page<BusinessOpportunityVO> pages=businessOpportunityService.selectPage(page,businessOpportunity);

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

@@ -1,5 +1,7 @@
 package com.dayou.controller;
 
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.dayou.annotation.DataPermission;
 import com.dayou.annotation.OperLog;
 import com.dayou.dto.CustomerDTO;
 import com.dayou.enums.OperationTypeEnum;
@@ -40,8 +42,9 @@ public class CustomerController extends BaseController {
     /**
     * 客户表列表
     */
+    @DataPermission
     @GetMapping("")
-    public RestResponse<Page<CustomerDTO>> page(Customer customer, Page page){
+    public RestResponse<Page<CustomerDTO>> page(CustomerDTO customer, Page page){
         Page<CustomerDTO> pages=customerService.selectPage(page,customer);
         return RestResponse.data(pages);
     }
@@ -89,11 +92,13 @@ public class CustomerController extends BaseController {
     /**
      * 客户表下拉列表
      */
+    @DataPermission(isJunior = false)
     @GetMapping("/simpleAll")
-    public RestResponse<List<PullDownModel>> simpleAll(){
+    public RestResponse<List<PullDownModel>> simpleAll(CustomerDTO customerDTO){
         LambdaQueryWrapper<Customer> lambdaQueryWrapper = new LambdaQueryWrapper<Customer>()
         .select(Customer::getId,Customer::getName)
-        .eq(Customer::getDeleted,false);
+        .eq(Customer::getDeleted,false)
+        .in(CollectionUtils.isNotEmpty(customerDTO.getUserIds()),Customer::getUserId,customerDTO.getUserIds());
         List<Customer> list= customerService.list(lambdaQueryWrapper);
         List<PullDownModel> ret=ConvertUtil.copyList(list, PullDownModel.class);
         return RestResponse.data(ret);

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

@@ -1,5 +1,6 @@
 package com.dayou.controller;
 
+import com.dayou.annotation.DataPermission;
 import com.dayou.annotation.OperLog;
 import com.dayou.dto.ItemDTO;
 import com.dayou.vo.DepartmentStatVO;
@@ -42,9 +43,20 @@ public class ItemController extends BaseController {
     /**
     * 项目信息表列表
     */
+    @DataPermission
     @GetMapping("")
-    public RestResponse<Page<ItemVO>> page(Item item, Page page, Boolean me){
-        Page<ItemVO> pages=itemService.selectPage(page,item,me);
+    public RestResponse<Page<ItemVO>> page(ItemDTO item, Page page){
+        Page<ItemVO> pages=itemService.selectPage(page,item);
+        return RestResponse.data(pages);
+    }
+
+    /**
+     * 项目信息表列表
+     */
+    @DataPermission(isJunior = false)
+    @GetMapping("/mine")
+    public RestResponse<Page<ItemVO>> xPage(ItemDTO item, Page page){
+        Page<ItemVO> pages=itemService.selectPage(page,item);
         return RestResponse.data(pages);
     }
 

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

@@ -1,5 +1,6 @@
 package com.dayou.controller;
 
+import com.dayou.annotation.DataPermission;
 import com.dayou.annotation.OperLog;
 import com.dayou.vo.ItemPaymentVO;
 import com.dayou.vo.PaymentCollectionVO;
@@ -106,8 +107,9 @@ public class PaymentCollectionController extends BaseController {
      * 项目回款列表
      * @return
      */
+    @DataPermission
     @GetMapping("/item")
-    public RestResponse<IPage<ItemPaymentVO>> getItemPayment(Page page,PaymentCollectionVO paymentCollectionVO){
+    public RestResponse<IPage<ItemPaymentVO>> getItemPayment(PaymentCollectionVO paymentCollectionVO,Page page){
         IPage<ItemPaymentVO> result = paymentCollectionService.getItemPayment(page,paymentCollectionVO);
         return RestResponse.data(result);
     }

+ 10 - 0
biz-base/src/main/java/com/dayou/controller/PostController.java

@@ -147,6 +147,16 @@ public class PostController extends BaseController {
 
     }
 
+    /**
+     * 岗位列表不分页
+     * @param postVO
+     * @return
+     */
+    @GetMapping("/list")
+    public RestResponse<List<Post>> getPostList(PostVO postVO){
+        List<Post> posts = postService.getPostList(postVO);
+        return RestResponse.data(posts);
+    }
 
 
 }

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

@@ -1,6 +1,8 @@
 package com.dayou.controller;
 
+import com.dayou.annotation.DataPermission;
 import com.dayou.annotation.OperLog;
+import com.dayou.utils.LoginContext;
 import com.dayou.vo.VisitVO;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import lombok.extern.slf4j.Slf4j;
@@ -38,6 +40,7 @@ public class VisitController extends BaseController {
     /**
     * 拜访记录表列表
     */
+    @DataPermission
     @GetMapping("")
     public RestResponse<Page<VisitVO>> page(VisitVO visit, Page page){
         Page<VisitVO> pages=visitService.selectPage(page,visit);
@@ -59,6 +62,7 @@ public class VisitController extends BaseController {
     @OperLog(title = "新增拜访记录")
     @PostMapping("")
     public RestResponse<Boolean> save(@RequestBody Visit visit) {
+        visit.setUserId(LoginContext.getUserId());
         Boolean ret = visitService.add(visit);
         return RestResponse.data(ret);
     }

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

@@ -1,7 +1,10 @@
 package com.dayou.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dayou.dto.CustomerDTO;
 import com.dayou.entity.Customer;
 import com.dayou.dao.CustomBaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +16,5 @@ import com.dayou.dao.CustomBaseMapper;
  */
 public interface CustomerMapper extends CustomBaseMapper<Customer> {
 
+    Page<CustomerDTO> getPage(Page page, @Param("customer") CustomerDTO customer);
 }

+ 1 - 1
dao/src/main/java/com/dayou/mapper/ItemMapper.java

@@ -22,5 +22,5 @@ public interface ItemMapper extends CustomBaseMapper<Item> {
 
     ItemVO xDetail(@Param("id") Long id);
 
-    Page<ItemVO> getPage(Page page, @Param("item") Item item, @Param("userId") Long userId);
+    Page<ItemVO> getPage(Page page, @Param("item") ItemDTO item);
 }

+ 8 - 2
dao/src/main/resources/mapper/BusinessOpportunityMapper.xml

@@ -33,8 +33,8 @@
     </sql>
 
     <select id="getPage" parameterType="com.dayou.vo.BusinessOpportunityVO" resultType="com.dayou.vo.BusinessOpportunityVO">
-        select <include refid="Base_Column_List"/> ,c.name as customerName
-        from business_opportunity left join customer c on business_opportunity.customer_id = c.id
+        select <include refid="Base_Column_List"/> ,c.name as customerName,u.name as userName
+        from business_opportunity left join customer c on business_opportunity.customer_id = c.id left join user u on u.id = business_opportunity.user_id
         where c.deleted =0 and business_opportunity.deleted = 0
         <if test="dto!=null and dto.customerName!=null and dto.customerName!=''">
             and c.name like concat('%',#{dto.customerName},'%')
@@ -45,6 +45,12 @@
         <if test="dto!=null and dto.state!=null and dto.state!=''">
             and business_opportunity.state = #{dto.state}
         </if>
+        <if test="dto!=null and dto.userIds!=null and dto.userIds.size!=0">
+            and business_opportunity.user_id in
+            <foreach collection="dto.userIds" open="(" close=")" separator="," item="userId">
+                #{userId}
+            </foreach>
+        </if>
         order by business_opportunity.id DESC
     </select>
 </mapper>

+ 21 - 1
dao/src/main/resources/mapper/CustomerMapper.xml

@@ -19,6 +19,7 @@
         <result column="QQ" property="qq" />
         <result column="level" property="level" />
         <result column="address" property="address" />
+        <result column="user_id" property="userId" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
@@ -27,7 +28,26 @@
         deleted,
         created,
         modified,
-        name, city, county, department, position, section, mobile, wechat_no, QQ, level, address
+        name, city, county, department, position, section, mobile, wechat_no, QQ, level, address,user_id
     </sql>
 
+    <select id="getPage" parameterType="com.dayou.dto.CustomerDTO" resultType="com.dayou.dto.CustomerDTO">
+        select c.*,u.name as userName
+            from customer c left join user u on c.user_id = u.id
+        <where>
+            and c.deleted = 0 and u.deleted = 0
+            <if test="customer!=null and customer.name!=null and customer.name!='' ">
+                and c.name like concat ('%',#{customer.name},'%')
+            </if>
+            <if test="customer!=null and customer.level!=null and customer.level!='' ">
+                and c.level = #{customer.level}
+            </if>
+            <if test="customer!=null and customer.userIds!=null and customer.userIds.size!=0">
+               and  c.user_id in
+                <foreach collection="customer.userIds" open="(" close=")" separator="," item="userId">
+                    #{userId}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>

+ 5 - 2
dao/src/main/resources/mapper/ItemMapper.xml

@@ -69,8 +69,11 @@
         <if test="item!=null and item.name!=null and item.name!='' ">
             and i.name like concat ('%',#{item.name},'%')
         </if>
-        <if test="userId!=null">
-            AND EXISTS ( SELECT item_id FROM item_user iu WHERE iu.item_id = i.id AND iu.user_id = #{userId} )
+        <if test="item!=null and item.userIds!=null and item.userIds.size!=0">
+            and i.user_id in
+            <foreach collection="item.userIds" open="(" close=")" separator="," item="userId">
+                #{userId}
+            </foreach>
         </if>
 
     </select>

+ 7 - 0
dao/src/main/resources/mapper/PaymentCollectionMapper.xml

@@ -36,6 +36,7 @@
         <if test="dto!=null and dto.name!=null and dto.name!=''">
             and pc.name like concat ('%',#{dto.name},'%')
         </if>
+
         order by pc.payment_date DESC
     </select>
     <select id="getItemPayment" parameterType="com.dayou.vo.PaymentCollectionVO" resultType="com.dayou.vo.ItemPaymentVO">
@@ -59,6 +60,12 @@
         <if test="dto!=null and dto.itemName!=null and dto.itemName!=''">
             and i.name like concat ('%',#{dto.itemName},'%')
         </if>
+        <if test="dto!=null and dto.userIds!=null and dto.userIds.size!=0">
+            and i.user_id in
+            <foreach collection="dto.userIds" open="(" close=")" separator="," item="userId">
+                #{userId}
+            </foreach>
+        </if>
 order by i.id DESC
     </select>
 </mapper>

+ 17 - 10
dao/src/main/resources/mapper/PostMapper.xml

@@ -28,17 +28,24 @@
 
     <select id="getPage" parameterType="com.dayou.vo.PostVO" resultType="com.dayou.vo.PostVO">
         SELECT
-            p.id,
-            p.NAME,
-            p.duty,
-            p.deleted,
-            p.modified,
-            d.NAME AS departmentName,
-            d.id as departmentId,
-            p.created
+        p.id,
+        p.NAME,
+        p.duty,
+        p.deleted,
+        p.modified,
+        d.NAME AS departmentName,
+        d.id as departmentId,
+        p.created,
+        p.parent_id,
+        p1.name as leaderPost,
+        d1.name as leaderDepartmentName,
+        d1.id as leaderDepartmentId,
+        p1.id as leaderPostId
         FROM
-            post p
-                LEFT JOIN department d ON p.department_id = d.id
+        post p
+        LEFT JOIN department d ON p.department_id = d.id
+        left join post p1 on p.parent_id = p1.id
+        left join department d1 on p1.department_id = d1.id
 
             <where>
                 p.deleted =0 and d.deleted = 0

+ 8 - 2
dao/src/main/resources/mapper/VisitMapper.xml

@@ -26,8 +26,8 @@
 
     <select id="page" parameterType="com.dayou.vo.VisitVO" resultType="com.dayou.vo.VisitVO">
         select
-            <include refid="Base_Column_List"/>,c.name as customerName
-        from visit v left join customer c on v.customer_id = c.id
+            <include refid="Base_Column_List"/>,c.name as customerName,u.name as userName
+        from visit v left join customer c on v.customer_id = c.id left join user u on u.id = v.user_id
         where v.deleted = 0 and c.deleted = 0
         <if test="visit!=null and visit.customerName!=null and visit.customerName!='' ">
             and c.name like concat ('%',#{visit.customerName},'%')
@@ -35,6 +35,12 @@
         <if test="visit!=null and visit.visitType!=null and visit.visitType!='' ">
             and v.visit_type = #{visit.visitType}
         </if>
+        <if test="visit!=null and visit.userIds!=null and visit.userIds.size!=0">
+            and v.user_id in
+            <foreach collection="visit.userIds" open="(" close=")" separator="," item="userId">
+                #{userId}
+            </foreach>
+        </if>
         order by v.id DESC
     </select>
 

+ 22 - 0
domain/src/main/java/com/dayou/annotation/DataPermission.java

@@ -0,0 +1,22 @@
+package com.dayou.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2023/2/13
+ * created with IntelliJ IDEA.
+ */
+@Target({ElementType.PARAMETER, ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DataPermission {
+
+    /**
+     * 是否包含下级岗位
+     * @return
+     */
+    public boolean isJunior() default true;
+}

+ 11 - 0
domain/src/main/java/com/dayou/dto/CustomerDTO.java

@@ -4,6 +4,7 @@ import com.dayou.entity.Customer;
 import lombok.Data;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * 类说明:
@@ -26,4 +27,14 @@ public class CustomerDTO extends Customer {
      * 区县
      */
     private String secCity;
+
+    /**
+     * 所属员工查询条件
+     */
+    private Set<Long> userIds;
+
+    /**
+     * 业务员
+     */
+    private String userName;
 }

+ 2 - 1
domain/src/main/java/com/dayou/dto/ItemDTO.java

@@ -4,6 +4,7 @@ import com.dayou.entity.Item;
 import lombok.Data;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * 类说明:
@@ -18,6 +19,6 @@ public class ItemDTO extends Item {
     /**
      * 项目配置人员id列表
      */
-    private List<Long> userIds;
+    private Set<Long> userIds;
 
 }

+ 5 - 0
domain/src/main/java/com/dayou/entity/BusinessOpportunity.java

@@ -68,5 +68,10 @@ public class BusinessOpportunity extends BaseEntity {
     @ExportCell(columnName = "终止原因")
     private String offReason;
 
+    /**
+     * 所属员工id
+     */
+    private Long userId;
+
 
 }

+ 6 - 0
domain/src/main/java/com/dayou/entity/Customer.java

@@ -102,5 +102,11 @@ public class Customer extends BaseEntity {
     @ExportCell(columnName = "客户地址")
     private String address;
 
+    /**
+     * 所属员工id
+     */
+    @ImportCell
+    @ExportCell(columnName = "所属员工id")
+    private Long userId;
 
 }

+ 5 - 0
domain/src/main/java/com/dayou/entity/Item.java

@@ -135,5 +135,10 @@ public class Item extends BaseEntity {
      */
     private String contractUrl;
 
+    /**
+     * 所属员工id(客户经理)
+     */
+    private Long userId;
+
 
 }

+ 6 - 0
domain/src/main/java/com/dayou/entity/Post.java

@@ -41,4 +41,10 @@ public class Post extends BaseEntity {
     private String duty;
 
 
+    /**
+     * 父级岗位id
+     */
+    @ImportCell
+    @ExportCell(columnName = "父级岗位id")
+    private Long parentId;
 }

+ 5 - 0
domain/src/main/java/com/dayou/entity/Visit.java

@@ -55,5 +55,10 @@ public class Visit extends BaseEntity {
     @ExportCell(columnName = "沟通内容")
     private String content;
 
+    /**
+     * 所属员工id
+     */
+    private Long userId;
+
 
 }

+ 10 - 0
domain/src/main/java/com/dayou/vo/BusinessOpportunityVO.java

@@ -3,6 +3,9 @@ package com.dayou.vo;
 import com.dayou.entity.BusinessOpportunity;
 import lombok.Data;
 
+import java.util.List;
+import java.util.Set;
+
 /**
  * 类说明:
  *
@@ -15,4 +18,11 @@ public class BusinessOpportunityVO extends BusinessOpportunity {
 
     private String customerName;
 
+    private Set<Long> userIds;
+
+    /**
+     * 业务员
+     */
+    private String userName;
+
 }

+ 5 - 0
domain/src/main/java/com/dayou/vo/PaymentCollectionVO.java

@@ -3,6 +3,8 @@ package com.dayou.vo;
 import com.dayou.entity.PaymentCollection;
 import lombok.Data;
 
+import java.util.Set;
+
 /**
  * 类说明:
  *
@@ -14,4 +16,7 @@ import lombok.Data;
 public class PaymentCollectionVO extends PaymentCollection {
 
     private String itemName;
+
+    private Set<Long> userIds;
+
 }

+ 3 - 0
domain/src/main/java/com/dayou/vo/PostVO.java

@@ -13,4 +13,7 @@ import lombok.Data;
 @Data
 public class PostVO extends Post {
     private String departmentName;
+    private String leaderDepartmentName;
+    private String leaderPost;
+    private Long leaderDepartmentId;
 }

+ 10 - 0
domain/src/main/java/com/dayou/vo/VisitVO.java

@@ -3,6 +3,9 @@ package com.dayou.vo;
 import com.dayou.entity.Visit;
 import lombok.Data;
 
+import java.util.List;
+import java.util.Set;
+
 /**
  * 类说明:
  *
@@ -17,4 +20,11 @@ public class VisitVO extends Visit {
      * 客户名称
      */
     private String customerName;
+
+    private Set<Long> userIds;
+
+    /**
+     * 业务员
+     */
+    private String userName;
 }

+ 60 - 0
service/src/main/java/com/dayou/aspect/DataPermissionAop.java

@@ -0,0 +1,60 @@
+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;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2023/2/13
+ * created with IntelliJ IDEA.
+ */
+
+@Slf4j
+@Component
+@Aspect
+public class DataPermissionAop {
+
+    @Autowired
+    private IUserService userService;
+
+    @Pointcut("@annotation(com.dayou.annotation.DataPermission)")
+    public void dataPermissionPointcut(){
+
+    }
+
+    @Around("dataPermissionPointcut() && @annotation(dataPermission)")
+    public Object  beforeHandle(ProceedingJoinPoint joinPoint, DataPermission dataPermission) throws Throwable {
+        Set<Long> users = new HashSet<>();
+        Long userId = LoginContext.getUserId();
+        if (dataPermission.isJunior()){
+            //根据当前登录人获取下属员工id
+            users = userService.getJuniorUserId(userId);
+        }
+        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();
+
+    }
+}

+ 1 - 1
service/src/main/java/com/dayou/service/ICustomerService.java

@@ -16,7 +16,7 @@ import org.springframework.web.multipart.MultipartFile;
  */
 public interface ICustomerService extends IService<Customer> {
 
-        Page<CustomerDTO> selectPage(Page page,Customer customer);
+        Page<CustomerDTO> selectPage(Page page,CustomerDTO customer);
 
         CustomerDTO detail(Long id);
 

+ 1 - 1
service/src/main/java/com/dayou/service/IItemService.java

@@ -18,7 +18,7 @@ import org.springframework.web.multipart.MultipartFile;
  */
 public interface IItemService extends IService<Item> {
 
-        Page<ItemVO> selectPage(Page page, Item item, Boolean me);
+        Page<ItemVO> selectPage(Page page, ItemDTO item);
 
         ItemVO detail(Long id);
 

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

@@ -39,4 +39,6 @@ public interface IPostService extends IService<Post> {
         void upsert(Post superAdminPost);
 
     List<PullDownModel > xSimpleAll();
+
+    List<Post> getPostList(PostVO postVO);
 }

+ 3 - 0
service/src/main/java/com/dayou/service/IUserService.java

@@ -12,6 +12,7 @@ import com.dayou.vo.UserVO;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -59,4 +60,6 @@ public interface IUserService extends IService<User> {
     Boolean restPassword(Long id);
 
     Boolean updatePassword(UpdatePasswordDTO passwordDTO);
+
+    Set<Long> getJuniorUserId(Long userId);
 }

+ 2 - 0
service/src/main/java/com/dayou/service/impl/BusinessOpportunityServiceImpl.java

@@ -4,6 +4,7 @@ import com.dayou.entity.BusinessOpportunity;
 import com.dayou.mapper.BusinessOpportunityMapper;
 import com.dayou.service.IBusinessOpportunityService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayou.utils.LoginContext;
 import com.dayou.vo.BusinessOpportunityVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -55,6 +56,7 @@ public class BusinessOpportunityServiceImpl extends ServiceImpl<BusinessOpportun
 
     @Override
     public Boolean add(BusinessOpportunity businessOpportunity){
+        businessOpportunity.setUserId(LoginContext.getUserId());
         return  this.save(businessOpportunity);
     }
 

+ 9 - 3
service/src/main/java/com/dayou/service/impl/CustomerServiceImpl.java

@@ -10,6 +10,7 @@ import com.dayou.mapper.CustomerMapper;
 import com.dayou.service.ICustomerService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.service.IDistrictsService;
+import com.dayou.utils.LoginContext;
 import com.fasterxml.jackson.databind.util.BeanUtil;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.BeanUtils;
@@ -51,6 +52,9 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
 
     @Autowired
     private IDistrictsService districtsService;
+
+    @Autowired
+    private CustomerMapper customerMapper;
     private static final List<String> customerExcelTitles = new ArrayList();
 
     static {
@@ -69,10 +73,11 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
 
     @Override
     @SuppressWarnings("unchecked")
-    public Page<CustomerDTO> selectPage(Page page,Customer customer){
-        Page result = this.page(page, new QueryWrapper<Customer>(customer));
+    public Page<CustomerDTO> selectPage(Page page,CustomerDTO customer){
+        Page<CustomerDTO> result = customerMapper.getPage(page,customer);
+        //Page result = this.page(page, new QueryWrapper<Customer>(customer).in(CollectionUtils.isNotEmpty(customer.getUserIds()),Customer::getUserId,customer.getUserIds()));
         List<CustomerDTO> xRecords = new ArrayList<>();
-        List<Customer> records = result.getRecords();
+        List<CustomerDTO> records = result.getRecords();
         records.stream().forEach(x->{
             CustomerDTO dto = new CustomerDTO();
             BeanUtils.copyProperties(x,dto);
@@ -100,6 +105,7 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
 
     @Override
     public Boolean add(CustomerDTO customer){
+        customer.setUserId(LoginContext.getUserId());
         customer.setCity(JSON.toJSONString(customer.getCitys()));
         return  this.save(customer);
     }

+ 5 - 8
service/src/main/java/com/dayou/service/impl/ItemServiceImpl.java

@@ -65,13 +65,9 @@ public class ItemServiceImpl extends ServiceImpl<ItemMapper, Item> implements II
 
     @Override
     @SuppressWarnings("unchecked")
-    public Page<ItemVO> selectPage(Page page, Item item, Boolean me){
+    public Page<ItemVO> selectPage(Page page, ItemDTO item){
         String state = item.getState();
-        Long userId = null;
-        if (me){
-            userId = LoginContext.getUserId();
-        }
-        Page<ItemVO> result = itemMapper.getPage(page, item, userId);
+        Page<ItemVO> result = itemMapper.getPage(page, item);
         List<ItemVO> records = result.getRecords();
         records.stream().forEach(x->{
             String itemState = getItemState(x.getId());
@@ -95,8 +91,9 @@ public class ItemServiceImpl extends ServiceImpl<ItemMapper, Item> implements II
     @Override
     public Boolean add(ItemDTO itemDTO){
         itemDTO.setBusinessNo(DateUtils.dateTimeNow());
+        itemDTO.setUserId(LoginContext.getUserId());
         this.save(itemDTO);
-        List<Long> userIds = itemDTO.getUserIds();
+        Set<Long> userIds = itemDTO.getUserIds();
         Set<ItemUser> itemUsers = userIds.stream().map(x -> {
             ItemUser itemUser = new ItemUser();
             itemUser.setItemId(itemDTO.getId());
@@ -110,7 +107,7 @@ public class ItemServiceImpl extends ServiceImpl<ItemMapper, Item> implements II
     @Override
     public Boolean update(ItemDTO itemDTO){
         this.updateById(itemDTO);
-        List<Long> userIds = itemDTO.getUserIds();
+        Set<Long> userIds = itemDTO.getUserIds();
         iItemUserService.remove(new LambdaQueryWrapper<ItemUser>().eq(ItemUser::getItemId,itemDTO.getId()));
         Set<ItemUser> itemUsers = userIds.stream().map(x -> {
             ItemUser itemUser = new ItemUser();

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

@@ -1,6 +1,7 @@
 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.entity.Post;
 import com.dayou.mapper.PostMapper;
@@ -132,4 +133,12 @@ public class PostServiceImpl extends ServiceImpl<PostMapper, Post> implements IP
         return list;
     }
 
+    @Override
+    public List<Post> getPostList(PostVO postVO) {
+        List<Post> list = this.list(new LambdaQueryWrapper<Post>()
+                .eq(postVO.getLeaderDepartmentId() != null, Post::getDepartmentId, postVO.getLeaderDepartmentId())
+                .eq(BaseEntity::getDeleted, Boolean.FALSE));
+        return list;
+    }
+
 }

+ 44 - 4
service/src/main/java/com/dayou/service/impl/UserServiceImpl.java

@@ -16,15 +16,13 @@ import com.dayou.constants.JwtConstants;
 import com.dayou.dto.LoginDTO;
 import com.dayou.dto.UpdatePasswordDTO;
 import com.dayou.dto.UserBaseDetailDTO;
+import com.dayou.entity.Post;
 import com.dayou.entity.PostPrivilege;
 import com.dayou.entity.User;
 import com.dayou.entity.UserPost;
 import com.dayou.exception.ErrorCode;
 import com.dayou.mapper.UserMapper;
-import com.dayou.service.IMenuService;
-import com.dayou.service.IPostPrivilegeService;
-import com.dayou.service.IUserPostService;
-import com.dayou.service.IUserService;
+import com.dayou.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.utils.*;
 import com.dayou.vo.IdNameVO;
@@ -49,6 +47,7 @@ import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.text.BreakIterator;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -103,6 +102,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     @Autowired
     private IMenuService menuService;
 
+    @Autowired
+    private IPostService postService;
+
 
     @Override
     @SuppressWarnings("unchecked")
@@ -389,4 +391,42 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
                 .eq(BaseEntity::getId, user.getId()));
         return update;
     }
+
+    @Override
+    public Set<Long> getJuniorUserId(Long userId) {
+        Set<Long> juniorUser = new HashSet<>();
+        Set<Long> juniorPost = new HashSet<>();
+                //当前登录人拥有的岗位集合
+        Set<Long> postIds = userPostService.getPostList(userId).stream().map(SimpleListModel::getId).collect(Collectors.toSet());
+        if (CollectionUtils.isNotEmpty(postIds)){
+            //获取登录人岗位的下属岗位
+            juniorPost = findJuniorPost(postIds,juniorPost);
+
+            if (CollectionUtils.isNotEmpty(juniorPost)){
+                //获取下属岗位的员工
+                juniorUser = userPostService.list(new LambdaQueryWrapper<UserPost>().select(UserPost::getUserId).in(UserPost::getPostId, juniorPost)
+                                .eq(BaseEntity::getDeleted,Boolean.FALSE))
+                        .stream().map(UserPost::getUserId).collect(Collectors.toSet());
+            }
+        }
+        return juniorUser;
+    }
+
+    /**
+     * 递归查询下级岗位
+     * @param postIds
+     * @param juniorPost
+     * @return
+     */
+    private Set<Long> findJuniorPost(Set<Long> postIds,Set<Long> juniorPost){
+        Set<Long> collect = postService.list(new LambdaQueryWrapper<Post>().select(BaseEntity::getId)
+                .in(Post::getParentId, postIds).eq(BaseEntity::getDeleted, Boolean.FALSE)).stream().map(BaseEntity::getId).collect(Collectors.toSet());
+        if (CollectionUtils.isEmpty(collect)){
+            return juniorPost;
+        }else {
+            juniorPost.addAll(collect);
+            findJuniorPost(collect,juniorPost);
+        }
+        return juniorPost;
+    }
 }

+ 5 - 0
sql/20230213.sql

@@ -0,0 +1,5 @@
+alter table post add COLUMN parent_id bigint(20) DEFAULT NULL comment '父级岗位id';
+alter table customer add COLUMN user_id bigint(20) DEFAULT NULL comment '所属员工id';
+alter table visit add COLUMN user_id bigint(20) DEFAULT NULL comment '所属员工id';
+alter table business_opportunity add COLUMN user_id bigint(20) DEFAULT NULL comment '所属员工id';
+alter table item add COLUMN user_id bigint(20) DEFAULT NULL comment '所属员工id(客户经理)';