فهرست منبع

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_scrm_java

# Conflicts:
#	fs-service-system/src/main/java/com/fs/store/mapper/FsUserCourseCountMapper.java
#	fs-service-system/src/main/java/com/fs/store/service/IFsUserCourseCountService.java
#	fs-service-system/src/main/java/com/fs/store/service/impl/FsUserCourseCountServiceImpl.java
caoliqin 1 ماه پیش
والد
کامیت
40b8000494
25فایلهای تغییر یافته به همراه364 افزوده شده و 243 حذف شده
  1. 5 5
      fs-admin/src/main/java/com/fs/user/FsUserAdminController.java
  2. 11 9
      fs-company/src/main/java/com/fs/user/FsUserAdminController.java
  3. 11 0
      fs-service-system/src/main/java/com/fs/company/cache/ICompanyTagCacheService.java
  4. 9 0
      fs-service-system/src/main/java/com/fs/company/cache/ICompanyUserCacheService.java
  5. 36 0
      fs-service-system/src/main/java/com/fs/company/cache/impl/CompanyTagCacheServiceImpl.java
  6. 32 0
      fs-service-system/src/main/java/com/fs/company/cache/impl/CompanyUserCacheServiceImpl.java
  7. 13 0
      fs-service-system/src/main/java/com/fs/company/dto/CompanyIdAndUserDTO.java
  8. 14 8
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyTagMapper.java
  9. 4 0
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserMapper.java
  10. 14 8
      fs-service-system/src/main/java/com/fs/company/service/ICompanyTagService.java
  11. 3 0
      fs-service-system/src/main/java/com/fs/company/service/ICompanyUserService.java
  12. 19 8
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyTagServiceImpl.java
  13. 10 0
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  14. 3 0
      fs-service-system/src/main/java/com/fs/store/mapper/FsUserCourseCountMapper.java
  15. 4 0
      fs-service-system/src/main/java/com/fs/store/param/h5/FsUserPageListParam.java
  16. 2 0
      fs-service-system/src/main/java/com/fs/store/service/IFsUserCourseCountService.java
  17. 1 1
      fs-service-system/src/main/java/com/fs/store/service/IFsUserService.java
  18. 8 0
      fs-service-system/src/main/java/com/fs/store/service/cache/IFsUserCourseCountCacheService.java
  19. 36 0
      fs-service-system/src/main/java/com/fs/store/service/cache/impl/FsUserCourseCountCacheServiceImpl.java
  20. 5 0
      fs-service-system/src/main/java/com/fs/store/service/impl/FsUserCourseCountServiceImpl.java
  21. 68 6
      fs-service-system/src/main/java/com/fs/store/service/impl/FsUserServiceImpl.java
  22. 12 6
      fs-service-system/src/main/resources/mapper/company/CompanyTagMapper.xml
  23. 6 0
      fs-service-system/src/main/resources/mapper/company/CompanyUserMapper.xml
  24. 3 0
      fs-service-system/src/main/resources/mapper/store/FsUserCourseCountMapper.xml
  25. 35 192
      fs-service-system/src/main/resources/mapper/store/FsUserMapper.xml

+ 5 - 5
fs-admin/src/main/java/com/fs/user/FsUserAdminController.java

@@ -37,12 +37,12 @@ public class FsUserAdminController extends BaseController {
     @PostMapping("/list")
     @ApiOperation("会员列表(与移动端使用的相同查询)")
     public R pageList(@RequestBody FsUserPageListParam param) {
-        PageHelper.startPage(param.getPageNum(), param.getPageSize());
-        List<FsUserPageListVO> list = fsUserService.selectFsUserPageList(param);
-        PageInfo<FsUserPageListVO> pageInfo = new PageInfo<>(list);
+//        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        TableDataInfo tableDataInfo = fsUserService.selectFsUserPageListNew(param);
+//        PageInfo<FsUserPageListVO> pageInfo = new PageInfo<>(list);
         Map<String, Object> result = new HashMap<>();
-        result.put("rows", pageInfo.getList());
-        result.put("total", pageInfo.getTotal());
+        result.put("rows", tableDataInfo.getRows());
+        result.put("total", tableDataInfo.getTotal());
         return R.ok(result);
     }
 

+ 11 - 9
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;
 
@@ -39,18 +43,16 @@ public class FsUserAdminController extends BaseController {
     @PostMapping("/list")
     @ApiOperation("会员列表(与移动端使用的相同查询)")
     public TableDataInfo pageList(@RequestBody FsUserPageListParam param) {
+//        startPage();
+
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         param.setCompanyId(loginUser.getCompany().getCompanyId());
-        param.setPcLoginUserId(loginUser.getUser().getUserId());
+        param.setCompanyUserId(String.valueOf(loginUser.getUser().getUserId()));
 
-        List<FsUserPageListVO> list = fsUserService.selectFsUserPageListNew(param);
-        Long total = fsUserService.selectFsUserCount(param);
-        TableDataInfo rspData = new TableDataInfo();
-        rspData.setCode(HttpStatus.SUCCESS);
-        rspData.setMsg("查询成功");
-        rspData.setRows(list);
-        rspData.setTotal(total);
-        return rspData;
+        if(param.getCompanyUserId() == null) {
+            throw new IllegalArgumentException("当前销售不存在!");
+        }
+        return fsUserService.selectFsUserPageListNew(param);
     }
 
     @PostMapping("/auditUser")

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

@@ -0,0 +1,11 @@
+package com.fs.company.cache;
+
+import com.fs.company.dto.CompanyIdAndUserDTO;
+
+import java.util.Map;
+
+public interface ICompanyTagCacheService {
+    String findUserTagByUserId(Long userId);
+
+    Map<Long, String> queryAllTagMap();
+}

+ 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);
 
 }

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

@@ -0,0 +1,36 @@
+package com.fs.company.cache.impl;
+
+import com.fs.company.cache.ICompanyTagCacheService;
+import com.fs.company.service.ICompanyTagService;
+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.Map;
+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();
+
+    private static final Cache<Long,Map<Long, String>> COMPANY_USER_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));
+    }
+
+    @Override
+    public Map<Long, String> queryAllTagMap() {
+        return COMPANY_USER_TAG_CACHE.get(0L, e-> companyTagService.queryAllTagMap());
+    }
+}

+ 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;
+}

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

@@ -4,19 +4,21 @@ 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.MapKey;
 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 +26,7 @@ public interface CompanyTagMapper
 
     /**
      * 查询company列表
-     * 
+     *
      * @param companyTag company
      * @return company集合
      */
@@ -32,7 +34,7 @@ public interface CompanyTagMapper
 
     /**
      * 新增company
-     * 
+     *
      * @param companyTag company
      * @return 结果
      */
@@ -40,7 +42,7 @@ public interface CompanyTagMapper
 
     /**
      * 修改company
-     * 
+     *
      * @param companyTag company
      * @return 结果
      */
@@ -48,7 +50,7 @@ public interface CompanyTagMapper
 
     /**
      * 删除company
-     * 
+     *
      * @param tagId companyID
      * @return 结果
      */
@@ -56,7 +58,7 @@ public interface CompanyTagMapper
 
     /**
      * 批量删除company
-     * 
+     *
      * @param tagIds 需要删除的数据ID
      * @return 结果
      */
@@ -75,4 +77,8 @@ public interface CompanyTagMapper
      * @return  list
      */
     List<CompanyTag> selectCompanyTagListByUserId(@Param("userId") Long userId);
+
+    String findUserTagByUserId(@Param("userId") Long userId);
+    @MapKey("tag_id")
+    Map<Long,String> queryAllTagMap();
 }

+ 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);
 }

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

@@ -4,18 +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.MapKey;
 
 /**
  * companyService接口
- * 
+ *
  * @author fs
  * @date 2025-04-02
  */
-public interface ICompanyTagService 
+public interface ICompanyTagService
 {
     /**
      * 查询company
-     * 
+     *
      * @param tagId companyID
      * @return company
      */
@@ -23,7 +25,7 @@ public interface ICompanyTagService
 
     /**
      * 查询company列表
-     * 
+     *
      * @param companyTag company
      * @return company集合
      */
@@ -31,7 +33,7 @@ public interface ICompanyTagService
 
     /**
      * 新增company
-     * 
+     *
      * @param companyTag company
      * @return 结果
      */
@@ -39,7 +41,7 @@ public interface ICompanyTagService
 
     /**
      * 修改company
-     * 
+     *
      * @param companyTag company
      * @return 结果
      */
@@ -47,7 +49,7 @@ public interface ICompanyTagService
 
     /**
      * 批量删除company
-     * 
+     *
      * @param tagIds 需要删除的companyID
      * @return 结果
      */
@@ -55,7 +57,7 @@ public interface ICompanyTagService
 
     /**
      * 删除company信息
-     * 
+     *
      * @param tagId companyID
      * @return 结果
      */
@@ -73,4 +75,8 @@ public interface ICompanyTagService
      * @return list
      */
     List<CompanyTag> selectCompanyTagListByMap(Map<String, Object> params);
+
+    Map<Long,String> queryAllTagMap();
+
+    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);
 
     /**
      * 查询物业公司管理员信息列表

+ 19 - 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,14 @@ public class CompanyTagServiceImpl implements ICompanyTagService
     public List<CompanyTag> selectCompanyTagListByMap(Map<String, Object> params) {
         return companyTagMapper.selectCompanyTagListByMap(params);
     }
+
+    @Override
+    public Map<Long, String> queryAllTagMap() {
+        return companyTagMapper.queryAllTagMap();
+    }
+
+    @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);
+    }
+
     /**
      * 查询物业公司管理员信息列表
      *

+ 3 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsUserCourseCountMapper.java

@@ -2,6 +2,7 @@ package com.fs.store.mapper;
 
 import java.util.List;
 import com.fs.store.domain.FsUserCourseCount;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 用户看课统计Mapper接口
@@ -59,6 +60,8 @@ public interface FsUserCourseCountMapper
      */
     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(该字段用于区分之前的登录用户)
      */

+ 2 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsUserCourseCountService.java

@@ -59,6 +59,8 @@ public interface IFsUserCourseCountService
      */
     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;
+        });
+    }
+}

+ 5 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserCourseCountServiceImpl.java

@@ -98,6 +98,11 @@ public class FsUserCourseCountServiceImpl implements IFsUserCourseCountService
         return fsUserCourseCountMapper.deleteFsUserCourseCountById(id);
     }
 
+    @Override
+    public FsUserCourseCount findByUserId(Long userId) {
+        return fsUserCourseCountMapper.findByUserId(userId);
+    }
+
     @Override
     public void insertFsUserCourseCountTask() {
         // 1、获取统计结果

+ 68 - 6
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,8 +446,62 @@ 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) {
+            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());
+                if(StringUtils.isNotEmpty(userTagByUserId)) {
+                    String[] split = userTagByUserId.split(",");
+                    Map<Long, String> tagMap = companyTagCacheService.queryAllTagMap();
+                    Set<String> tagNames = new HashSet<>();
+                    for (String tag : split) {
+                        if(tag != null) {
+                            Long tagL = Long.parseLong(tag);
+                            String tagName = tagMap.get(tagL);
+                            tagNames.add(tagName);
+                        }
+                    }
+                    item.setTagIds(userTagByUserId);
+                    item.setTag(String.join(",",tagNames));
+                }
+            }
+        }
+
+        TableDataInfo rspData = new TableDataInfo();
+        rspData.setCode(HttpStatus.SUCCESS);
+        rspData.setMsg("查询成功");
+        rspData.setRows(fsUserPageListVOS);
+
+        rspData.setTotal(this.selectFsUserCount(param));
+        return rspData;
     }
 
     @Override

+ 12 - 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,12 @@ 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>
+    <select id="queryAllTagMap" resultType="java.util.Map">
+        select tag_id,tag from company_tag
+    </select>
 
     <insert id="insertCompanyTag" parameterType="CompanyTag" useGeneratedKeys="true" keyProperty="tagId">
         insert into company_tag
@@ -80,10 +86,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

+ 35 - 192
fs-service-system/src/main/resources/mapper/store/FsUserMapper.xml

@@ -378,133 +378,39 @@
 
     <select id="selectFsUserPageListNew" resultType="FsUserPageListVO">
         SELECT
-        fs_user.*,
-        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,
-        if(fs_user.company_user_id = #{pcLoginUserId} or company_user.parent_id = #{pcLoginUserId}, 1, 0) as isCurrentCompanyUser
-        FROM
-        (SELECT
-        fu.user_id
+        fs_user.user_id,
+        fs_user.nickname,
+        fs_user.avatar,
+        fs_user.phone,
+        fs_user.status,
+        fs_user.create_time,
+        fs_user.remark,
+        fs_user.company_user_id,
+        fs_user.company_id
         FROM
-        fs_user fu
-        LEFT JOIN company_user cu ON fu.company_user_id = cu.user_id
-        LEFT JOIN fs_user_course_count fucc ON fu.user_id = fucc.user_id
-        LEFT JOIN company_tag_user ctu ON fu.user_id = ctu.user_id
+        fs_user
         <where>
-            <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
-                <foreach collection="tagIds" item="item" index="index" open="(" separator="or" close=")">
-                    ctu.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 test="nickname != null and nickname != ''">
+                AND fs_user.nickname like concat(#{nickname},'%')
             </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>
-            <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>
-            <if test="nickname !=null and nickname != ''">
-                AND fu.nickname like concat(#{nickname},'%')
-            </if>
-            <if test="phone != null and phone !=''">
-                AND fu.phone like concat(#{phone},'%')
-            </if>
-            <if test="companyId != null">
-                AND fu.company_id = ${companyId}
+            <if test="phone != null and phone != ''">
+                AND fs_user.phone = #{phone}
             </if>
         </where>
-        GROUP BY fu.user_id
-        <if test="continueMissCourseSort != null and continueMissCourseSort !='' ">
-            ORDER BY
-            <choose>
-                <when test = "continueMissCourseSort == 0">
-                    fucc.miss_course_days DESC
-                </when>
-                <when test = "continueMissCourseSort == 1">
-                    fucc.miss_course_days ASC
-                </when>
-                <when test = "continueMissCourseSort == 2">
-                    fu.create_time DESC
-                </when>
-                <when test = "continueMissCourseSort == 3">
-                    fu.nickname ASC
-                </when>
-            </choose>
-        </if>
-        LIMIT ${(pageNum-1)*pageSize},${pageSize}
-        ) temp_user_ids
-        JOIN fs_user ON temp_user_ids.user_id = fs_user.user_id
-        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
-        GROUP BY fs_user.user_id
+        limit ${(pageNum-1)*pageSize},${pageSize}
     </select>
 
     <select id="selectFsUserPageList" resultType="FsUserPageListVO">
@@ -1316,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 test="nickname != null and nickname!=''">
+                AND fs_user.nickname like concat(#{nickname},'%')
             </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>
-            <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>