Ver Fonte

feat: 慢sql优化

dongdong.xiang há 1 mês atrás
pai
commit
354ee6caac
24 ficheiros alterados com 340 adições e 248 exclusões
  1. 6 4
      fs-company/src/main/java/com/fs/user/FsUserAdminController.java
  2. 7 0
      fs-service-system/src/main/java/com/fs/company/cache/ICompanyTagCacheService.java
  3. 9 0
      fs-service-system/src/main/java/com/fs/company/cache/ICompanyUserCacheService.java
  4. 27 0
      fs-service-system/src/main/java/com/fs/company/cache/impl/CompanyTagCacheServiceImpl.java
  5. 32 0
      fs-service-system/src/main/java/com/fs/company/cache/impl/CompanyUserCacheServiceImpl.java
  6. 13 0
      fs-service-system/src/main/java/com/fs/company/dto/CompanyIdAndUserDTO.java
  7. 11 8
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyTagMapper.java
  8. 4 0
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserMapper.java
  9. 11 8
      fs-service-system/src/main/java/com/fs/company/service/ICompanyTagService.java
  10. 3 0
      fs-service-system/src/main/java/com/fs/company/service/ICompanyUserService.java
  11. 14 8
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyTagServiceImpl.java
  12. 10 0
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  13. 11 8
      fs-service-system/src/main/java/com/fs/store/mapper/FsUserCourseCountMapper.java
  14. 4 0
      fs-service-system/src/main/java/com/fs/store/param/h5/FsUserPageListParam.java
  15. 10 8
      fs-service-system/src/main/java/com/fs/store/service/IFsUserCourseCountService.java
  16. 1 1
      fs-service-system/src/main/java/com/fs/store/service/IFsUserService.java
  17. 8 0
      fs-service-system/src/main/java/com/fs/store/service/cache/IFsUserCourseCountCacheService.java
  18. 36 0
      fs-service-system/src/main/java/com/fs/store/service/cache/impl/FsUserCourseCountCacheServiceImpl.java
  19. 13 8
      fs-service-system/src/main/java/com/fs/store/service/impl/FsUserCourseCountServiceImpl.java
  20. 56 7
      fs-service-system/src/main/java/com/fs/store/service/impl/FsUserServiceImpl.java
  21. 9 6
      fs-service-system/src/main/resources/mapper/company/CompanyTagMapper.xml
  22. 6 0
      fs-service-system/src/main/resources/mapper/company/CompanyUserMapper.xml
  23. 3 0
      fs-service-system/src/main/resources/mapper/store/FsUserCourseCountMapper.xml
  24. 36 182
      fs-service-system/src/main/resources/mapper/store/FsUserMapper.xml

+ 6 - 4
fs-company/src/main/java/com/fs/user/FsUserAdminController.java

@@ -6,6 +6,7 @@ import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.utils.ServletUtils;
+import com.fs.company.cache.ICompanyUserCacheService;
 import com.fs.core.security.LoginUser;
 import com.fs.core.web.service.TokenService;
 import com.fs.store.param.h5.FsUserPageListParam;
@@ -32,6 +33,9 @@ public class FsUserAdminController extends BaseController {
     @Autowired
     private IFsUserService fsUserService;
 
+    @Autowired
+    private ICompanyUserCacheService companyUserCacheService;
+
     @Autowired
     private TokenService tokenService;
 
@@ -43,10 +47,8 @@ public class FsUserAdminController extends BaseController {
 
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         param.setCompanyId(loginUser.getCompany().getCompanyId());
-        param.setPcLoginUserId(loginUser.getUser().getUserId());
-
-        List<FsUserPageListVO> list = fsUserService.selectFsUserPageListNew(param);
-        return getDataTable(list);
+        param.setCompanyUserId(String.valueOf(loginUser.getUser().getUserId()));
+        return fsUserService.selectFsUserPageListNew(param);
     }
 
     @PostMapping("/auditUser")

+ 7 - 0
fs-service-system/src/main/java/com/fs/company/cache/ICompanyTagCacheService.java

@@ -0,0 +1,7 @@
+package com.fs.company.cache;
+
+import com.fs.company.dto.CompanyIdAndUserDTO;
+
+public interface ICompanyTagCacheService {
+    String findUserTagByUserId(Long userId);
+}

+ 9 - 0
fs-service-system/src/main/java/com/fs/company/cache/ICompanyUserCacheService.java

@@ -12,6 +12,7 @@ import com.fs.qw.vo.QwUserVO;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 ;
 
@@ -29,5 +30,13 @@ public interface ICompanyUserCacheService {
      * @return 物业公司管理员信息
      */
     public CompanyUser selectCompanyUserById(Long userId);
+    public String selectCompanyUserNameUserById(Long userId);
+
+    /**
+     * 查询当前用户所有的下级销售
+     * @param companyUserId
+     * @return String
+     */
+    public Set<Long> selectUserAllCompanyUserId(Long companyUserId);
 
 }

+ 27 - 0
fs-service-system/src/main/java/com/fs/company/cache/impl/CompanyTagCacheServiceImpl.java

@@ -0,0 +1,27 @@
+package com.fs.company.cache.impl;
+
+import com.fs.company.cache.ICompanyTagCacheService;
+import com.fs.company.dto.CompanyIdAndUserDTO;
+import com.fs.company.service.ICompanyTagService;
+import com.fs.company.service.ICompanyUserService;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class CompanyTagCacheServiceImpl implements ICompanyTagCacheService {
+
+    @Autowired
+    private ICompanyTagService companyTagService;
+    private static final Cache<Long,String> COMPANY_TAG_CACHE = Caffeine.newBuilder()
+            .maximumSize(1000)
+            .expireAfterWrite(5, TimeUnit.MINUTES)
+            .build();
+    @Override
+    public String findUserTagByUserId(Long key) {
+        return COMPANY_TAG_CACHE.get(key,e-> companyTagService.findUserTagByUserId(key));
+    }
+}

+ 32 - 0
fs-service-system/src/main/java/com/fs/company/cache/impl/CompanyUserCacheServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.company.cache.impl;
 
+import com.fasterxml.jackson.databind.util.ArrayIterator;
 import com.fs.company.cache.ICompanyCacheService;
 import com.fs.company.cache.ICompanyUserCacheService;
 import com.fs.company.domain.Company;
@@ -13,7 +14,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 @Service
 @Slf4j
@@ -26,8 +31,35 @@ public class CompanyUserCacheServiceImpl implements ICompanyUserCacheService {
             .maximumSize(1000)
             .expireAfterWrite(3, TimeUnit.MINUTES)
             .build();
+
+    private static final Cache<Long,Set<Long>> COMPANY_USER_CACHE = Caffeine.newBuilder()
+            .maximumSize(1000)
+            .expireAfterWrite(5, TimeUnit.MINUTES)
+            .build();
+
+    private static final Cache<Long,String> COMPANY_USER_NAME_CACHE = Caffeine.newBuilder()
+            .maximumSize(1000)
+            .expireAfterWrite(5, TimeUnit.MINUTES)
+            .build();
+
+
     @Override
     public CompanyUser selectCompanyUserById(Long userId) {
         return USER_CACHE.get(userId,e-> companyUserService.selectCompanyUserByUserId(userId));
     }
+
+    @Override
+    public String selectCompanyUserNameUserById(Long userId) {
+        return COMPANY_USER_NAME_CACHE.get(userId,e-> companyUserService.selectCompanyUserNameUserById(userId));
+    }
+
+    @Override
+    public Set<Long> selectUserAllCompanyUserId(Long companyUserId) {
+        return COMPANY_USER_CACHE.get(companyUserId,e->{
+            List<Long> longs = companyUserService.selectUserAllCompanyUserId(companyUserId);
+            Set<Long> set = new HashSet<>(longs);
+            set.add(companyUserId);
+            return set;
+        });
+    }
 }

+ 13 - 0
fs-service-system/src/main/java/com/fs/company/dto/CompanyIdAndUserDTO.java

@@ -0,0 +1,13 @@
+package com.fs.company.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+@EqualsAndHashCode
+@Data
+public class CompanyIdAndUserDTO implements Serializable {
+    private Long companyId;
+    private Long companyUserId;
+}

+ 11 - 8
fs-service-system/src/main/java/com/fs/company/mapper/CompanyTagMapper.java

@@ -4,19 +4,20 @@ import java.util.List;
 import java.util.Map;
 
 import com.fs.company.domain.CompanyTag;
+import com.fs.company.dto.CompanyIdAndUserDTO;
 import org.apache.ibatis.annotations.Param;
 
 /**
  * companyMapper接口
- * 
+ *
  * @author fs
  * @date 2025-04-02
  */
-public interface CompanyTagMapper 
+public interface CompanyTagMapper
 {
     /**
      * 查询company
-     * 
+     *
      * @param tagId companyID
      * @return company
      */
@@ -24,7 +25,7 @@ public interface CompanyTagMapper
 
     /**
      * 查询company列表
-     * 
+     *
      * @param companyTag company
      * @return company集合
      */
@@ -32,7 +33,7 @@ public interface CompanyTagMapper
 
     /**
      * 新增company
-     * 
+     *
      * @param companyTag company
      * @return 结果
      */
@@ -40,7 +41,7 @@ public interface CompanyTagMapper
 
     /**
      * 修改company
-     * 
+     *
      * @param companyTag company
      * @return 结果
      */
@@ -48,7 +49,7 @@ public interface CompanyTagMapper
 
     /**
      * 删除company
-     * 
+     *
      * @param tagId companyID
      * @return 结果
      */
@@ -56,7 +57,7 @@ public interface CompanyTagMapper
 
     /**
      * 批量删除company
-     * 
+     *
      * @param tagIds 需要删除的数据ID
      * @return 结果
      */
@@ -75,4 +76,6 @@ public interface CompanyTagMapper
      * @return  list
      */
     List<CompanyTag> selectCompanyTagListByUserId(@Param("userId") Long userId);
+
+    String findUserTagByUserId(@Param("userId") Long userId);
 }

+ 4 - 0
fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserMapper.java

@@ -287,4 +287,8 @@ public interface CompanyUserMapper
      * @return  list
      */
     List<OptionsVO> selectCompanyUserListByMap(@Param("params") Map<String, Object> params);
+
+    List<Long> selectUserAllCompanyUserId(@Param("companyUserId") Long companyUserId);
+
+    String selectCompanyUserNameUserById(@Param("userId") Long userId);
 }

+ 11 - 8
fs-service-system/src/main/java/com/fs/company/service/ICompanyTagService.java

@@ -4,18 +4,19 @@ import java.util.List;
 import java.util.Map;
 
 import com.fs.company.domain.CompanyTag;
+import com.fs.company.dto.CompanyIdAndUserDTO;
 
 /**
  * companyService接口
- * 
+ *
  * @author fs
  * @date 2025-04-02
  */
-public interface ICompanyTagService 
+public interface ICompanyTagService
 {
     /**
      * 查询company
-     * 
+     *
      * @param tagId companyID
      * @return company
      */
@@ -23,7 +24,7 @@ public interface ICompanyTagService
 
     /**
      * 查询company列表
-     * 
+     *
      * @param companyTag company
      * @return company集合
      */
@@ -31,7 +32,7 @@ public interface ICompanyTagService
 
     /**
      * 新增company
-     * 
+     *
      * @param companyTag company
      * @return 结果
      */
@@ -39,7 +40,7 @@ public interface ICompanyTagService
 
     /**
      * 修改company
-     * 
+     *
      * @param companyTag company
      * @return 结果
      */
@@ -47,7 +48,7 @@ public interface ICompanyTagService
 
     /**
      * 批量删除company
-     * 
+     *
      * @param tagIds 需要删除的companyID
      * @return 结果
      */
@@ -55,7 +56,7 @@ public interface ICompanyTagService
 
     /**
      * 删除company信息
-     * 
+     *
      * @param tagId companyID
      * @return 结果
      */
@@ -73,4 +74,6 @@ public interface ICompanyTagService
      * @return list
      */
     List<CompanyTag> selectCompanyTagListByMap(Map<String, Object> params);
+
+    String findUserTagByUserId(Long key);
 }

+ 3 - 0
fs-service-system/src/main/java/com/fs/company/service/ICompanyUserService.java

@@ -31,6 +31,9 @@ public interface ICompanyUserService {
      * @return 物业公司管理员信息
      */
     public CompanyUser selectCompanyUserById(Long userId);
+    public String selectCompanyUserNameUserById(Long userId);
+
+    public List<Long> selectUserAllCompanyUserId(Long companyUserId);
 
     /**
      * 查询物业公司管理员信息列表

+ 14 - 8
fs-service-system/src/main/java/com/fs/company/service/impl/CompanyTagServiceImpl.java

@@ -5,6 +5,7 @@ import java.util.List;
 import java.util.Map;
 
 import com.fs.common.utils.DateUtils;
+import com.fs.company.dto.CompanyIdAndUserDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.fs.company.mapper.CompanyTagMapper;
@@ -13,19 +14,19 @@ import com.fs.company.service.ICompanyTagService;
 
 /**
  * companyService业务层处理
- * 
+ *
  * @author fs
  * @date 2025-04-02
  */
 @Service
-public class CompanyTagServiceImpl implements ICompanyTagService 
+public class CompanyTagServiceImpl implements ICompanyTagService
 {
     @Autowired
     private CompanyTagMapper companyTagMapper;
 
     /**
      * 查询company
-     * 
+     *
      * @param tagId companyID
      * @return company
      */
@@ -37,7 +38,7 @@ public class CompanyTagServiceImpl implements ICompanyTagService
 
     /**
      * 查询company列表
-     * 
+     *
      * @param companyTag company
      * @return company
      */
@@ -49,7 +50,7 @@ public class CompanyTagServiceImpl implements ICompanyTagService
 
     /**
      * 新增company
-     * 
+     *
      * @param companyTag company
      * @return 结果
      */
@@ -62,7 +63,7 @@ public class CompanyTagServiceImpl implements ICompanyTagService
 
     /**
      * 修改company
-     * 
+     *
      * @param companyTag company
      * @return 结果
      */
@@ -74,7 +75,7 @@ public class CompanyTagServiceImpl implements ICompanyTagService
 
     /**
      * 批量删除company
-     * 
+     *
      * @param tagIds 需要删除的companyID
      * @return 结果
      */
@@ -86,7 +87,7 @@ public class CompanyTagServiceImpl implements ICompanyTagService
 
     /**
      * 删除company信息
-     * 
+     *
      * @param tagId companyID
      * @return 结果
      */
@@ -117,4 +118,9 @@ public class CompanyTagServiceImpl implements ICompanyTagService
     public List<CompanyTag> selectCompanyTagListByMap(Map<String, Object> params) {
         return companyTagMapper.selectCompanyTagListByMap(params);
     }
+
+    @Override
+    public String findUserTagByUserId(Long key) {
+        return companyTagMapper.findUserTagByUserId(key);
+    }
 }

+ 10 - 0
fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -74,6 +74,16 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         return companyUserMapper.selectCompanyUserById(userId);
     }
 
+    @Override
+    public String selectCompanyUserNameUserById(Long userId) {
+        return companyUserMapper.selectCompanyUserNameUserById(userId);
+    }
+
+    @Override
+    public List<Long> selectUserAllCompanyUserId(Long companyUserId) {
+        return companyUserMapper.selectUserAllCompanyUserId(companyUserId);
+    }
+
     /**
      * 查询物业公司管理员信息列表
      *

+ 11 - 8
fs-service-system/src/main/java/com/fs/store/mapper/FsUserCourseCountMapper.java

@@ -2,18 +2,19 @@ package com.fs.store.mapper;
 
 import java.util.List;
 import com.fs.store.domain.FsUserCourseCount;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 用户看课统计Mapper接口
- * 
+ *
  * @author fs
  * @date 2025-04-02
  */
-public interface FsUserCourseCountMapper 
+public interface FsUserCourseCountMapper
 {
     /**
      * 查询用户看课统计
-     * 
+     *
      * @param id 用户看课统计ID
      * @return 用户看课统计
      */
@@ -21,7 +22,7 @@ public interface FsUserCourseCountMapper
 
     /**
      * 查询用户看课统计列表
-     * 
+     *
      * @param fsUserCourseCount 用户看课统计
      * @return 用户看课统计集合
      */
@@ -29,7 +30,7 @@ public interface FsUserCourseCountMapper
 
     /**
      * 新增用户看课统计
-     * 
+     *
      * @param fsUserCourseCount 用户看课统计
      * @return 结果
      */
@@ -37,7 +38,7 @@ public interface FsUserCourseCountMapper
 
     /**
      * 修改用户看课统计
-     * 
+     *
      * @param fsUserCourseCount 用户看课统计
      * @return 结果
      */
@@ -45,7 +46,7 @@ public interface FsUserCourseCountMapper
 
     /**
      * 删除用户看课统计
-     * 
+     *
      * @param id 用户看课统计ID
      * @return 结果
      */
@@ -53,9 +54,11 @@ public interface FsUserCourseCountMapper
 
     /**
      * 批量删除用户看课统计
-     * 
+     *
      * @param ids 需要删除的数据ID
      * @return 结果
      */
     public int deleteFsUserCourseCountByIds(Long[] ids);
+
+    FsUserCourseCount findByUserId(@Param("userId") Long userId);
 }

+ 4 - 0
fs-service-system/src/main/java/com/fs/store/param/h5/FsUserPageListParam.java

@@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
+import java.util.Set;
 
 
 @Data
@@ -63,6 +65,8 @@ public class FsUserPageListParam implements Serializable {
      */
     private Long companyId;
 
+    private Set<Long> companyUserIds;
+
     /**
      * 销售端登录用户id(该字段用于区分之前的登录用户)
      */

+ 10 - 8
fs-service-system/src/main/java/com/fs/store/service/IFsUserCourseCountService.java

@@ -5,15 +5,15 @@ import com.fs.store.domain.FsUserCourseCount;
 
 /**
  * 用户看课统计Service接口
- * 
+ *
  * @author fs
  * @date 2025-04-02
  */
-public interface IFsUserCourseCountService 
+public interface IFsUserCourseCountService
 {
     /**
      * 查询用户看课统计
-     * 
+     *
      * @param id 用户看课统计ID
      * @return 用户看课统计
      */
@@ -21,7 +21,7 @@ public interface IFsUserCourseCountService
 
     /**
      * 查询用户看课统计列表
-     * 
+     *
      * @param fsUserCourseCount 用户看课统计
      * @return 用户看课统计集合
      */
@@ -29,7 +29,7 @@ public interface IFsUserCourseCountService
 
     /**
      * 新增用户看课统计
-     * 
+     *
      * @param fsUserCourseCount 用户看课统计
      * @return 结果
      */
@@ -37,7 +37,7 @@ public interface IFsUserCourseCountService
 
     /**
      * 修改用户看课统计
-     * 
+     *
      * @param fsUserCourseCount 用户看课统计
      * @return 结果
      */
@@ -45,7 +45,7 @@ public interface IFsUserCourseCountService
 
     /**
      * 批量删除用户看课统计
-     * 
+     *
      * @param ids 需要删除的用户看课统计ID
      * @return 结果
      */
@@ -53,9 +53,11 @@ public interface IFsUserCourseCountService
 
     /**
      * 删除用户看课统计信息
-     * 
+     *
      * @param id 用户看课统计ID
      * @return 结果
      */
     public int deleteFsUserCourseCountById(Long id);
+
+    FsUserCourseCount findByUserId(Long userId);
 }

+ 1 - 1
fs-service-system/src/main/java/com/fs/store/service/IFsUserService.java

@@ -138,7 +138,7 @@ public interface IFsUserService
     List<FsUser> getUserListLimit(FsUser fsUser);
 
     List<FsUserPageListVO> selectFsUserPageList(FsUserPageListParam param);
-    List<FsUserPageListVO> selectFsUserPageListNew(FsUserPageListParam param);
+    TableDataInfo selectFsUserPageListNew(FsUserPageListParam param);
     Long selectFsUserCount(FsUserPageListParam param);
 
     UserListPageVO getUserNumber(Long userId);

+ 8 - 0
fs-service-system/src/main/java/com/fs/store/service/cache/IFsUserCourseCountCacheService.java

@@ -0,0 +1,8 @@
+package com.fs.store.service.cache;
+
+import com.fs.store.domain.FsUserCourseCount;
+
+public interface IFsUserCourseCountCacheService {
+
+    public FsUserCourseCount findByUserId(Long userId);
+}

+ 36 - 0
fs-service-system/src/main/java/com/fs/store/service/cache/impl/FsUserCourseCountCacheServiceImpl.java

@@ -0,0 +1,36 @@
+package com.fs.store.service.cache.impl;
+
+import com.fs.store.domain.FsUserCourseCount;
+import com.fs.store.service.IFsUserCourseCountService;
+import com.fs.store.service.cache.IFsUserCourseCountCacheService;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.TimeUnit;
+
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class FsUserCourseCountCacheServiceImpl implements IFsUserCourseCountCacheService {
+    private static final Cache<Long, FsUserCourseCount> USER_COURSE_COUNT_CACHE = Caffeine.newBuilder()
+            .maximumSize(1000)
+            .expireAfterWrite(3, TimeUnit.MINUTES)
+            .build();
+
+
+    @Autowired
+    private IFsUserCourseCountService fsUserCourseCountService;
+
+
+    @Override
+    public FsUserCourseCount findByUserId(Long userId) {
+        return USER_COURSE_COUNT_CACHE.get(userId,e->{
+            FsUserCourseCount fsUserCourseCount = fsUserCourseCountService.findByUserId(userId);
+            return fsUserCourseCount;
+        });
+    }
+}

+ 13 - 8
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserCourseCountServiceImpl.java

@@ -10,19 +10,19 @@ import com.fs.store.service.IFsUserCourseCountService;
 
 /**
  * 用户看课统计Service业务层处理
- * 
+ *
  * @author fs
  * @date 2025-04-02
  */
 @Service
-public class FsUserCourseCountServiceImpl implements IFsUserCourseCountService 
+public class FsUserCourseCountServiceImpl implements IFsUserCourseCountService
 {
     @Autowired
     private FsUserCourseCountMapper fsUserCourseCountMapper;
 
     /**
      * 查询用户看课统计
-     * 
+     *
      * @param id 用户看课统计ID
      * @return 用户看课统计
      */
@@ -34,7 +34,7 @@ public class FsUserCourseCountServiceImpl implements IFsUserCourseCountService
 
     /**
      * 查询用户看课统计列表
-     * 
+     *
      * @param fsUserCourseCount 用户看课统计
      * @return 用户看课统计
      */
@@ -46,7 +46,7 @@ public class FsUserCourseCountServiceImpl implements IFsUserCourseCountService
 
     /**
      * 新增用户看课统计
-     * 
+     *
      * @param fsUserCourseCount 用户看课统计
      * @return 结果
      */
@@ -59,7 +59,7 @@ public class FsUserCourseCountServiceImpl implements IFsUserCourseCountService
 
     /**
      * 修改用户看课统计
-     * 
+     *
      * @param fsUserCourseCount 用户看课统计
      * @return 结果
      */
@@ -72,7 +72,7 @@ public class FsUserCourseCountServiceImpl implements IFsUserCourseCountService
 
     /**
      * 批量删除用户看课统计
-     * 
+     *
      * @param ids 需要删除的用户看课统计ID
      * @return 结果
      */
@@ -84,7 +84,7 @@ public class FsUserCourseCountServiceImpl implements IFsUserCourseCountService
 
     /**
      * 删除用户看课统计信息
-     * 
+     *
      * @param id 用户看课统计ID
      * @return 结果
      */
@@ -93,4 +93,9 @@ public class FsUserCourseCountServiceImpl implements IFsUserCourseCountService
     {
         return fsUserCourseCountMapper.deleteFsUserCourseCountById(id);
     }
+
+    @Override
+    public FsUserCourseCount findByUserId(Long userId) {
+        return fsUserCourseCountMapper.findByUserId(userId);
+    }
 }

+ 56 - 7
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserServiceImpl.java

@@ -3,14 +3,18 @@ package com.fs.store.service.impl;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fs.common.constant.HttpStatus;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.utils.DateUtils;
+import com.fs.common.utils.StringUtils;
+import com.fs.company.cache.ICompanyTagCacheService;
 import com.fs.company.cache.ICompanyUserCacheService;
 import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyTagUser;
 import com.fs.company.domain.CompanyUser;
+import com.fs.company.dto.CompanyIdAndUserDTO;
 import com.fs.company.mapper.CompanyMapper;
 import com.fs.company.mapper.CompanyTagUserMapper;
 import com.fs.company.mapper.CompanyUserMapper;
@@ -24,10 +28,7 @@ import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
 import com.fs.his.vo.OptionsVO;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
-import com.fs.store.domain.FsStoreOrder;
-import com.fs.store.domain.FsStoreOrderItem;
-import com.fs.store.domain.FsUser;
-import com.fs.store.domain.FsUserBill;
+import com.fs.store.domain.*;
 import com.fs.store.dto.FsStoreCartDTO;
 import com.fs.store.dto.FsUserTransferParamDTO;
 import com.fs.store.enums.BillDetailEnum;
@@ -40,10 +41,12 @@ import com.fs.store.param.h5.FsUserPageListParam;
 import com.fs.store.param.h5.UserStatisticsCommonParam;
 import com.fs.store.service.IFsUserBillService;
 import com.fs.store.service.IFsUserService;
+import com.fs.store.service.cache.IFsUserCourseCountCacheService;
 import com.fs.store.vo.FSUserVO;
 import com.fs.store.vo.FsCompanyUserListQueryVO;
 import com.fs.store.vo.FsUserTuiVO;
 import com.fs.store.vo.h5.*;
+import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.http.util.Asserts;
@@ -100,6 +103,11 @@ public class FsUserServiceImpl implements IFsUserService
     @Autowired
     private CompanyMapper companyMapper;
 
+    @Autowired
+    private IFsUserCourseCountCacheService fsUserCourseCountCacheService;
+
+    @Autowired
+    private ICompanyTagCacheService companyTagCacheService;
     /**
      * 查询用户
      *
@@ -438,9 +446,50 @@ public class FsUserServiceImpl implements IFsUserService
     }
 
     @Override
-    public List<FsUserPageListVO> selectFsUserPageListNew(FsUserPageListParam param) {
-        //
-        return fsUserMapper.selectFsUserPageListNew(param);
+    public TableDataInfo selectFsUserPageListNew(FsUserPageListParam param) {
+        // 找出下级销售
+        String companyUserId = param.getCompanyUserId();
+        if(companyUserId == null) {
+            throw new IllegalArgumentException("当前销售不存在!");
+        }
+        Long companyUser = Long.parseLong(companyUserId);
+        Set<Long> userIds = companyUserCacheService.selectUserAllCompanyUserId(companyUser);
+        param.setCompanyUserIds(userIds);
+
+        List<FsUserPageListVO> fsUserPageListVOS = fsUserMapper.selectFsUserPageListNew(param);
+        for (FsUserPageListVO item : fsUserPageListVOS) {
+            if(item.getCompanyUserId() != null) {
+                String companyUserName = companyUserCacheService.selectCompanyUserNameUserById(item.getCompanyUserId());
+                if(companyUserName != null) {
+                    item.setCompanyUserNickName(companyUserName);
+                }
+            }
+            if(item.getUserId() != null) {
+                FsUserCourseCount byUserId = fsUserCourseCountCacheService.findByUserId(item.getUserId());
+                if(byUserId != null) {
+                    item.setWatchCourseCount(byUserId.getWatchCourseCount());
+                    item.setMissCourseCount(byUserId.getMissCourseCount());
+                    item.setMissCourseStatus(byUserId.getMissCourseStatus());
+                    if(StringUtils.isNotEmpty(byUserId.getPartCourseCount())){
+                        item.setPartCourseCount(Long.valueOf(byUserId.getPartCourseCount()));
+                    }
+                    item.setCourseCountStatus(byUserId.getStatus());
+                    item.setStopWatchDays(byUserId.getStopWatchDays());
+                    item.setCompleteWatchDate(byUserId.getCompleteWatchDate());
+                }
+
+                String userTagByUserId = companyTagCacheService.findUserTagByUserId(item.getUserId());
+                item.setTagIds(userTagByUserId);
+            }
+        }
+
+        TableDataInfo rspData = new TableDataInfo();
+        rspData.setCode(HttpStatus.SUCCESS);
+        rspData.setMsg("查询成功");
+        rspData.setRows(fsUserPageListVOS);
+
+        rspData.setTotal(this.selectFsUserCount(param));
+        return rspData;
     }
 
     @Override

+ 9 - 6
fs-service-system/src/main/resources/mapper/company/CompanyTagMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fs.company.mapper.CompanyTagMapper">
-    
+
     <resultMap type="CompanyTag" id="CompanyTagResult">
         <result property="tagId"    column="tag_id"    />
         <result property="companyId"    column="company_id"    />
@@ -17,12 +17,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectCompanyTagList" parameterType="CompanyTag" resultMap="CompanyTagResult">
         <include refid="selectCompanyTagVo"/>
-        <where>  
+        <where>
             <if test="companyId != null "> and company_id = #{companyId}</if>
             <if test="tag != null  and tag != ''"> and tag = #{tag}</if>
         </where>
     </select>
-    
+
     <select id="selectCompanyTagById" parameterType="Long" resultMap="CompanyTagResult">
         <include refid="selectCompanyTagVo"/>
         where tag_id = #{tagId}
@@ -50,6 +50,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         inner join company_tag_user ctu on ctu.company_id = ct.company_id and find_in_set(ct.tag_id, ctu.tag_ids) > 0
         where ctu.user_id = #{userId}
     </select>
+    <select id="findUserTagByUserId" resultType="java.lang.String">
+        select tag_ids from company_tag_user where user_id = ${userId} limit 1
+    </select>
 
     <insert id="insertCompanyTag" parameterType="CompanyTag" useGeneratedKeys="true" keyProperty="tagId">
         insert into company_tag
@@ -80,10 +83,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteCompanyTagByIds" parameterType="String">
-        delete from company_tag where tag_id in 
+        delete from company_tag where tag_id in
         <foreach item="tagId" collection="array" open="(" separator="," close=")">
             #{tagId}
         </foreach>
     </delete>
-    
-</mapper>
+
+</mapper>

+ 6 - 0
fs-service-system/src/main/resources/mapper/company/CompanyUserMapper.xml

@@ -457,5 +457,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </if>
         </where>
     </select>
+    <select id="selectUserAllCompanyUserId" resultType="java.lang.Long">
+        select distinct user_id from company_user where parent_id=${companyUserId}
+    </select>
+    <select id="selectCompanyUserNameUserById" resultType="java.lang.String">
+        select concat(nick_name,'_',user_name) from company_user where user_id=${userId} limit 1
+    </select>
 
 </mapper>

+ 3 - 0
fs-service-system/src/main/resources/mapper/store/FsUserCourseCountMapper.xml

@@ -52,6 +52,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectFsUserCourseCountVo"/>
         where id = #{id}
     </select>
+    <select id="findByUserId" resultType="com.fs.store.domain.FsUserCourseCount">
+        select * from fs_user_course_count where user_id = ${userId} limit 1
+    </select>
 
     <insert id="insertFsUserCourseCount" parameterType="FsUserCourseCount">
         insert into fs_user_course_count

+ 36 - 182
fs-service-system/src/main/resources/mapper/store/FsUserMapper.xml

@@ -386,114 +386,31 @@
         fs_user.create_time,
         fs_user.remark,
         fs_user.company_user_id,
-        fs_user_course_count.id,
-        fs_user_course_count.watch_course_count,
-        fs_user_course_count.miss_course_count,
-        fs_user_course_count.miss_course_status,
-        fs_user_course_count.course_ids,
-        fs_user_course_count.part_course_count,
-        fs_user_course_count.last_watch_date,
-        fs_user_course_count.STATUS AS courseCountStatus,
-        fs_user_course_count.stop_watch_days,
-        fs_user_course_count.complete_watch_date,
-        GROUP_CONCAT(DISTINCT company_tag.tag) AS tag,
-        GROUP_CONCAT(DISTINCT company_tag.tag_id) AS tagIds,
-        company_user.nick_name as companyUserNickName
+        fs_user.company_id
         FROM
         fs_user
-        left join company_user on fs_user.company_user_id = company_user.user_id
-        LEFT JOIN fs_user_course_count ON fs_user.user_id = fs_user_course_count.user_id
-        LEFT JOIN company_tag_user ON fs_user.user_id = company_tag_user.user_id
-        LEFT JOIN company_tag ON FIND_IN_SET(company_tag.tag_id, company_tag_user.tag_ids) > 0
-        where fs_user.is_del = 0
-        <if test="userId != null and userId !='' ">
-            -- 当前销售下面的用户 或者下级销售的会员
-            and (company_user.user_id = #{userId} OR company_user.parent_id = #{userId} )
-        </if>
-        <if test="companyUserId != null and companyUserId !='' ">
-            and company_user.user_id = #{companyUserId}
-        </if>
-        <choose>
-            <when test = "isBlack">
-                AND fs_user.status = 0
-            </when>
-            <otherwise>
-                AND fs_user.status = 1
-            </otherwise>
-        </choose>
-        <if test="keyword != null and keyword !='' ">
-            AND (fs_user.nickname LIKE concat('%',#{keyword},'%')
-            or  fs_user.phone LIKE concat('%',#{keyword},'%')
-            )
-        </if>
-        <if test="registerStartTime != null and registerStartTime !='' ">
-            AND fs_user.create_time &gt;= #{registerStartTime}
-        </if>
-        <if test="registerEndTime != null and registerEndTime !='' ">
-            AND fs_user.create_time &lt;= #{registerEndTime}
-        </if>
-        <if test="tagIds != null and tagIds.length > 0">
-            AND
-            <foreach collection="tagIds" item="item" index="index" open="(" separator="or" close=")">
-                company_tag_user.tag_ids LIKE concat('%"',#{item},'"%')
-            </foreach>
-        </if>
-        <if test="tabValue != null and tabValue !='' ">
-            <choose>
-                <when test = "tabValue == 1">
-                    AND DAY(fs_user.create_time) = DAY(NOW())
-                </when>
-                <when test = "tabValue == 2">
-                    AND DAY(fs_user_course_count.complete_watch_date) = DAY(NOW())
-                </when>
-                <when test = "tabValue == 3">
-                    AND (fs_user_course_count.status = 3 or fs_user_course_count.status is null)
-                </when>
-            </choose>
-        </if>
-        <if test="watchCourseType != null and watchCourseType !='' ">
-            <choose>
-                <when test = "watchCourseType == 1">
-                    AND (fs_user_course_count.status = 3 or fs_user_course_count.status is null)
-                </when>
-                <when test = "watchCourseType == 2">
-                    AND fs_user_course_count.status = 1
-                </when>
-                <when test = "watchCourseType == 3">
-                    AND fs_user_course_count.status = 2
-                </when>
-            </choose>
-        </if>
-        <if test="missCourseStatus != null and missCourseStatus !='' ">
-            <choose>
-                <when test = "missCourseStatus == 1">
-                    AND fs_user_course_count.miss_course_status = 1
-                </when>
-                <when test = "missCourseStatus == 2">
-                    AND (fs_user_course_count.miss_course_status = 2 or fs_user_course_count.miss_course_status is null )
-                </when>
-            </choose>
-        </if>
-
-        group by fs_user.user_id
-
-        <if test="continueMissCourseSort != null and continueMissCourseSort !='' ">
-            order by
-            <choose>
-                <when test = "continueMissCourseSort == 0">
-                    fs_user_course_count.miss_course_days desc
-                </when>
-                <when test = "continueMissCourseSort == 1">
-                    fs_user_course_count.miss_course_days asc
-                </when>
-                <when test = "continueMissCourseSort == 2">
-                    fs_user.create_time desc
-                </when>
-                <when test = "continueMissCourseSort == 3">
-                    fs_user.nickname asc
-                </when>
-            </choose>
-        </if>
+        <where>
+            fs_user.is_del = 0
+            <if test="registerStartTime != null and registerStartTime !='' ">
+                AND fs_user.create_time &gt;= #{registerStartTime}
+            </if>
+            <if test="registerEndTime != null and registerEndTime !='' ">
+                AND fs_user.create_time &lt;= #{registerEndTime}
+            </if>
+            <if test="companyUserIds != null and companyUserIds.size > 0">
+                AND fs_user.company_user_id in
+                <foreach collection="companyUserIds" item="item" index="index" open="(" separator="," close=")">
+                    ${item}
+                </foreach>
+            </if>
+            <if test="nickname != null and nickname != ''">
+                AND fs_user.nickname like concat(#{nickname},'%')
+            </if>
+            <if test="phone != null and phone != ''">
+                AND fs_user.phone = #{phone}
+            </if>
+        </where>
+        limit ${(pageNum-1)*pageSize},${pageSize}
     </select>
 
     <select id="selectFsUserPageList" resultType="FsUserPageListVO">
@@ -1305,91 +1222,28 @@
 
     <select id="selectFsUserPageListCount" resultType="java.lang.Long">
         SELECT
-        COUNT(DISTINCT fu.user_id) as total_count
+        count(1)
         FROM
-        fs_user fu
-        LEFT JOIN fs_user_course_count fucc ON fu.user_id = fucc.user_id
+        fs_user
         <where>
-            <if test="companyId != null">
-                AND fu.company_id = ${companyId}
-            </if>
-            <if test="phone != null and phone !=''">
-                AND fu.phone like concat(#{phone},'%')
-            </if>
-            <if test="nickname !=null and nickname != ''">
-                AND fu.nickname like concat(#{nickname},'%')
-            </if>
-            <if test="userId != null and userId !='' ">
-                AND (cu.user_id = #{userId} OR cu.parent_id = #{userId})
-            </if>
-            <if test="companyUserId != null and companyUserId !='' ">
-                AND cu.user_id = #{companyUserId}
-            </if>
-            <choose>
-                <when test = "isBlack">
-                    AND fu.status = 0
-                </when>
-                <otherwise>
-                    AND fu.status = 1
-                </otherwise>
-            </choose>
-            <if test="keyword != null and keyword !='' ">
-                AND (fu.nickname LIKE concat(#{keyword},'%')
-                OR fu.phone LIKE concat(#{keyword},'%')
-                )
-            </if>
+            fs_user.is_del = 0
             <if test="registerStartTime != null and registerStartTime !='' ">
-                AND fu.create_time &gt;= #{registerStartTime}
+                AND fs_user.create_time &gt;= #{registerStartTime}
             </if>
             <if test="registerEndTime != null and registerEndTime !='' ">
-                AND fu.create_time &lt;= #{registerEndTime}
+                AND fs_user.create_time &lt;= #{registerEndTime}
             </if>
-            <if test="tagIds != null and tagIds.length > 0">
-                AND EXISTS (
-                SELECT 1 FROM company_tag_user ctu2
-                WHERE fu.user_id = ctu2.user_id
-                AND (
-                <foreach collection="tagIds" item="item" index="index" separator="OR">
-                    ctu2.tag_ids LIKE concat(#{item},'"%')
+            <if test="companyUserIds != null and companyUserIds.size > 0">
+                AND fs_user.company_user_id in
+                <foreach collection="companyUserIds" item="item" index="index" open="(" separator="," close=")">
+                    ${item}
                 </foreach>
-                )
-                )
-            </if>
-            <if test="tabValue != null and tabValue !='' ">
-                <choose>
-                    <when test = "tabValue == 1">
-                        AND DAY(fu.create_time) = DAY(NOW())
-                    </when>
-                    <when test = "tabValue == 2">
-                        AND DAY(fucc.complete_watch_date) = DAY(NOW())
-                    </when>
-                    <when test = "tabValue == 3">
-                        AND fucc.status = 3
-                    </when>
-                </choose>
             </if>
-            <if test="watchCourseType != null and watchCourseType !='' ">
-                <choose>
-                    <when test = "watchCourseType == 1">
-                        AND fucc.status = 3
-                    </when>
-                    <when test = "watchCourseType == 2">
-                        AND fucc.status = 1
-                    </when>
-                    <when test = "watchCourseType == 3">
-                        AND fucc.status = 2
-                    </when>
-                </choose>
+            <if test="nickname != null and nickname!=''">
+                AND fs_user.nickname like concat(#{nickname},'%')
             </if>
-            <if test="missCourseStatus != null and missCourseStatus !='' ">
-                <choose>
-                    <when test = "missCourseStatus == 1">
-                        AND fucc.miss_course_status = 1
-                    </when>
-                    <when test = "missCourseStatus == 2">
-                        AND fucc.miss_course_status = 2
-                    </when>
-                </choose>
+            <if test="phone != null and phone!=''">
+                AND fs_user.phone = #{phone}
             </if>
         </where>
     </select>