瀏覽代碼

会员关联项目

Long 3 周之前
父節點
當前提交
c5b42ec08c
共有 22 個文件被更改,包括 303 次插入256 次删除
  1. 6 27
      fs-company-app/src/main/java/com/fs/app/controller/AppBaseController.java
  2. 1 1
      fs-company-app/src/main/java/com/fs/app/controller/CompanyUserController.java
  3. 6 9
      fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java
  4. 5 0
      fs-company-app/src/main/java/com/fs/app/param/CompanyUserChangeApplyParam.java
  5. 4 0
      fs-service-system/src/main/java/com/fs/company/domain/CompanyUserChangeApply.java
  6. 8 7
      fs-service-system/src/main/java/com/fs/company/service/ICompanyTagUserService.java
  7. 2 1
      fs-service-system/src/main/java/com/fs/company/service/ICompanyUserChangeApplyService.java
  8. 16 14
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyTagUserServiceImpl.java
  9. 8 6
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserChangeApplyServiceImpl.java
  10. 4 0
      fs-service-system/src/main/java/com/fs/company/vo/CompanyUserChangeApplyVO.java
  11. 4 1
      fs-service-system/src/main/java/com/fs/course/param/newfs/FsUserCourseAddCompanyUserParam.java
  12. 27 23
      fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  13. 21 6
      fs-service-system/src/main/java/com/fs/store/mapper/FsUserMapper.java
  14. 9 0
      fs-service-system/src/main/java/com/fs/store/service/IFsUserCompanyUserService.java
  15. 19 0
      fs-service-system/src/main/java/com/fs/store/service/impl/FsUserCompanyUserServiceImpl.java
  16. 5 23
      fs-service-system/src/main/java/com/fs/store/service/impl/FsUserServiceImpl.java
  17. 3 0
      fs-service-system/src/main/java/com/fs/store/vo/h5/FsUserPageListVO.java
  18. 2 2
      fs-service-system/src/main/resources/mapper/company/CompanyUserChangeApplyUserMapper.xml
  19. 138 106
      fs-service-system/src/main/resources/mapper/store/FsUserMapper.xml
  20. 3 21
      fs-user-app/src/main/java/com/fs/app/controller/WxCompanyUserController.java
  21. 9 9
      fs-user-app/src/main/java/com/fs/app/controller/WxH5MpController.java
  22. 3 0
      fs-user-app/src/main/java/com/fs/app/param/FsUserLoginByMpParam.java

+ 6 - 27
fs-company-app/src/main/java/com/fs/app/controller/AppBaseController.java

@@ -1,43 +1,16 @@
 package com.fs.app.controller;
 
 
-import com.fs.app.annotation.Login;
 import com.fs.app.exception.FSException;
 import com.fs.app.utils.JwtUtils;
-import com.fs.common.config.FSConfig;
-import com.fs.common.core.domain.AjaxResult;
-import com.fs.common.core.domain.R;
-import com.fs.common.core.domain.entity.SysUser;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.ServletUtils;
-import com.fs.common.utils.file.FileUploadUtils;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.service.ICompanyUserService;
-import com.fs.core.config.ServerConfig;
-import com.fs.crm.domain.CrmEvent;
-import com.fs.crm.service.ICrmCustomerService;
-import com.fs.crm.service.ICrmCustomerUserService;
-import com.fs.crm.service.ICrmEventService;
-import com.fs.crm.service.ICrmMsgService;
 import com.fs.store.domain.FsUser;
 import com.fs.store.service.IFsUserService;
-import com.fs.system.service.ISysConfigService;
-import com.fs.system.service.ISysDictDataService;
-import com.fs.system.service.ISysUserService;
-import com.fs.system.vo.DictVO;
-import com.fs.voice.service.IVoiceService;
-import com.github.xiaoymin.swaggerbootstrapui.util.CommonUtils;
 import io.jsonwebtoken.Claims;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
 
 
 public class AppBaseController {
@@ -64,6 +37,12 @@ public class AppBaseController {
 		String userId = claims.getSubject().toString();
 		return userId;
 	}
+	public Long getCompanyUserId() {
+		String headValue =  ServletUtils.getRequest().getHeader("APPToken");
+		Claims claims=jwtUtils.getClaimByToken(headValue);
+		String userId = claims.getSubject();
+		return Long.parseLong(userId);
+	}
 	//获取商城手机号
 	public Long getUserId(Long companyUserId)
 	{

+ 1 - 1
fs-company-app/src/main/java/com/fs/app/controller/CompanyUserController.java

@@ -252,7 +252,7 @@ public class CompanyUserController extends AppBaseController {
         CompanyUser companyUser = companyUserService.selectCompanyUserById(Long.parseLong(getUserId()));
 
         // 添加申请
-        companyUserChangeApplyService.apply(param.getFrom(), param.getTo(), param.getType(), param.getIds(), companyUser.getCompanyId(), companyUser.getUserName());
+        companyUserChangeApplyService.apply(param.getFrom(), param.getTo(), param.getType(), param.getIds(), companyUser.getCompanyId(), companyUser.getUserName(), param.getProjectId());
         return R.ok();
     }
 

+ 6 - 9
fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java

@@ -18,8 +18,8 @@ import com.fs.course.param.newfs.FsUserCourseBeMemberImageParam;
 import com.fs.course.param.newfs.FsUserCourseBeMemberParam;
 import com.fs.course.service.IFsUserCourseService;
 import com.fs.course.vo.newfs.FsCourseAnalysisVO;
-import com.fs.store.param.h5.CourseAnalysisParam;
 import com.fs.store.domain.FsUser;
+import com.fs.store.param.h5.CourseAnalysisParam;
 import com.fs.store.param.h5.FsUserPageListParam;
 import com.fs.store.param.h5.TagListParam;
 import com.fs.store.param.h5.UserStatisticsCommonParam;
@@ -29,11 +29,6 @@ import com.fs.store.vo.h5.*;
 import com.fs.system.service.ISysConfigService;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.WriterException;
-import com.google.zxing.client.j2se.MatrixToImageWriter;
-import com.google.zxing.common.BitMatrix;
-import com.google.zxing.qrcode.QRCodeWriter;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -43,11 +38,13 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.io.InputStream;
-import java.text.ParseException;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.*;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 @Slf4j
 @Api(tags = "用户会员相关接口")
@@ -267,7 +264,7 @@ public class FsUserController extends AppBaseController {
     @ApiOperation("修改用户标签")
     @PostMapping("/changeUserTags")
     public ResponseResult<Object> changeUserTags(@Valid @RequestBody FsUserTagUpdateParam param) {
-        companyTagUserService.changeUserTags(param.getFsUserIds(), param.getTagIds());
+        companyTagUserService.changeUserTags(param.getFsUserIds(), param.getTagIds(), getCompanyId(), getCompanyUserId());
         return ResponseResult.ok();
     }
 

+ 5 - 0
fs-company-app/src/main/java/com/fs/app/param/CompanyUserChangeApplyParam.java

@@ -26,4 +26,9 @@ public class CompanyUserChangeApplyParam {
      * 需更换归属会员id集合
      */
     private List<Long> ids;
+    /**
+     * 项目ID
+     */
+    @NotNull(message = "项目ID不能为空")
+    private Long projectId;
 }

+ 4 - 0
fs-service-system/src/main/java/com/fs/company/domain/CompanyUserChangeApply.java

@@ -54,4 +54,8 @@ public class CompanyUserChangeApply {
      * 被拒原因
      */
     private String reason;
+    /**
+     * 项目ID
+     */
+    private Long projectId;
 }

+ 8 - 7
fs-service-system/src/main/java/com/fs/company/service/ICompanyTagUserService.java

@@ -1,14 +1,12 @@
 package com.fs.company.service;
 
-import java.util.List;
-import java.util.Map;
-
 import com.fs.company.domain.CompanyTagUser;
 import com.fs.company.vo.CompanyTagUserVO;
 import com.fs.store.param.h5.TagListParam;
 import com.fs.store.vo.h5.CompanyUserTagListVO;
 
-import javax.validation.constraints.NotNull;
+import java.util.List;
+import java.util.Map;
 
 /**
  * companyService接口
@@ -82,8 +80,11 @@ public interface ICompanyTagUserService
 
     /**
      * 修改用户标签
-     * @param fsUserIds 用户ID集合
-     * @param tagIds   标签ID集合
+     *
+     * @param fsUserIds     用户ID集合
+     * @param tagIds        标签ID集合
+     * @param companyId     公司ID
+     * @param companyUserId 销售ID
      */
-    void changeUserTags(List<Long> fsUserIds, List<Long> tagIds);
+    void changeUserTags(List<Long> fsUserIds, List<Long> tagIds, Long companyId, Long companyUserId);
 }

+ 2 - 1
fs-service-system/src/main/java/com/fs/company/service/ICompanyUserChangeApplyService.java

@@ -18,8 +18,9 @@ public interface ICompanyUserChangeApplyService extends IService<CompanyUserChan
      * @param ids       会员
      * @param companyId 公司ID
      * @param userName  操作用户
+     * @param projectId 项目ID
      */
-    void apply(Long from, Long to, Integer type, List<Long> ids, Long companyId, String userName);
+    void apply(Long from, Long to, Integer type, List<Long> ids, Long companyId, String userName, Long projectId);
 
     /**
      * 查询申请列表

+ 16 - 14
fs-service-system/src/main/java/com/fs/company/service/impl/CompanyTagUserServiceImpl.java

@@ -1,13 +1,12 @@
 package com.fs.company.service.impl;
 
-import java.util.*;
-import java.util.stream.Collectors;
-
-import com.fs.common.exception.ServiceException;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanyTagUser;
 import com.fs.company.domain.CompanyUser;
+import com.fs.company.mapper.CompanyTagUserMapper;
 import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.company.service.ICompanyTagUserService;
 import com.fs.company.vo.CompanyTagUserVO;
 import com.fs.store.domain.FsUser;
 import com.fs.store.mapper.FsUserMapper;
@@ -15,11 +14,11 @@ import com.fs.store.param.h5.TagListParam;
 import com.fs.store.vo.h5.CompanyUserTagListVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.fs.company.mapper.CompanyTagUserMapper;
-import com.fs.company.domain.CompanyTagUser;
-import com.fs.company.service.ICompanyTagUserService;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.*;
+import java.util.stream.Collectors;
+
 /**
  * companyService业务层处理
  *
@@ -146,12 +145,15 @@ public class CompanyTagUserServiceImpl implements ICompanyTagUserService
 
     /**
      * 修改用户标签
-     * @param fsUserIds 用户ID
-     * @param tagIds   标签ID集合
+     *
+     * @param fsUserIds     用户ID
+     * @param tagIds        标签ID集合
+     * @param companyId     公司ID
+     * @param companyUserId 销售ID
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void changeUserTags(List<Long> fsUserIds, List<Long> tagIds) {
+    public void changeUserTags(List<Long> fsUserIds, List<Long> tagIds, Long companyId, Long companyUserId) {
         fsUserIds.forEach(fsUserId -> {
             FsUser fsUser = fsUserMapper.selectFsUserById(fsUserId);
             if (Objects.isNull(fsUser)) {
@@ -161,16 +163,16 @@ public class CompanyTagUserServiceImpl implements ICompanyTagUserService
             // 删除原标签
             Map<String, Object> params = new HashMap<>();
             params.put("userId", fsUserId);
-            params.put("companyId", fsUser.getCompanyId());
-            params.put("companyUserId", fsUser.getCompanyUserId());
+            params.put("companyId", companyId);
+            params.put("companyUserId", companyUserId);
             companyTagUserMapper.deleteCompanyTagUserByMap(params);
 
             // 不为空则添加新标签
             if (Objects.nonNull(tagIds) && !tagIds.isEmpty()) {
                 CompanyTagUser companyTagUser = new CompanyTagUser();
                 companyTagUser.setUserId(fsUserId);
-                companyTagUser.setCompanyId(fsUser.getCompanyId());
-                companyTagUser.setCompanyUserId(fsUser.getCompanyUserId());
+                companyTagUser.setCompanyId(companyId);
+                companyTagUser.setCompanyUserId(companyUserId);
                 companyTagUser.setTagIds(tagIds.stream().map(String::valueOf).collect(Collectors.joining(",")));
                 companyTagUser.setCreateTime(new Date());
                 companyTagUserMapper.insertCompanyTagUser(companyTagUser);

+ 8 - 6
fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserChangeApplyServiceImpl.java

@@ -15,7 +15,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 @Service
 @AllArgsConstructor
@@ -33,17 +36,16 @@ public class CompanyUserChangeApplyServiceImpl extends ServiceImpl<CompanyUserCh
      * @param ids       会员
      * @param companyId 公司ID
      * @param userName  操作用户
+     * @param projectId 项目ID
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void apply(Long from, Long to, Integer type, List<Long> ids, Long companyId, String userName) {
+    public void apply(Long from, Long to, Integer type, List<Long> ids, Long companyId, String userName, Long projectId) {
         List<CompanyUserChangeApplyUser> users = new ArrayList<>();
 
         // 全部
         if (type == 0) {
-            FsUser param = new FsUser();
-            param.setCompanyUserId(from);
-            List<FsUser> userList = userMapper.selectFsUserList(param);
+            List<FsUser> userList = userMapper.selectByCompanyUserAndProjectId(from, projectId);
             for (FsUser user : userList) {
                 CompanyUserChangeApplyUser uu = new CompanyUserChangeApplyUser();
                 uu.setUserId(user.getUserId());
@@ -53,7 +55,7 @@ public class CompanyUserChangeApplyServiceImpl extends ServiceImpl<CompanyUserCh
         // 部分
         else {
             for (Long id : ids) {
-                FsUser user = userMapper.selectFsUserById(id);
+                FsUser user = userMapper.selectByUserIdAndProjectId(id, projectId);
                 if (Objects.isNull(user)) {
                     throw new ServiceException("会员不存在");
                 }

+ 4 - 0
fs-service-system/src/main/java/com/fs/company/vo/CompanyUserChangeApplyVO.java

@@ -66,4 +66,8 @@ public class CompanyUserChangeApplyVO {
      * 需更换用户
      */
     private List<CompanyUserChangeApplyUserVO> users;
+    /**
+     * 项目ID
+     */
+    private Long projectId;
 }

+ 4 - 1
fs-service-system/src/main/java/com/fs/course/param/newfs/FsUserCourseAddCompanyUserParam.java

@@ -3,7 +3,6 @@ package com.fs.course.param.newfs;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 
@@ -34,4 +33,8 @@ public class FsUserCourseAddCompanyUserParam implements Serializable {
     @ApiModelProperty(value = "营期id")
     private Long periodId;
 
+    @NotNull(message = "项目id不能为空")
+    @ApiModelProperty(value = "项目ID")
+    private Long projectId;
+
 }

+ 27 - 23
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -3,7 +3,6 @@ package com.fs.course.service.impl;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fs.common.BeanCopyUtils;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
@@ -48,6 +47,7 @@ import com.fs.store.mapper.FsUserCompanyUserMapper;
 import com.fs.store.mapper.FsUserIntegralLogsMapper;
 import com.fs.store.mapper.FsUserMapper;
 import com.fs.store.service.IFsStorePaymentService;
+import com.fs.store.service.IFsUserCompanyUserService;
 import com.fs.store.service.IFsUserService;
 import com.fs.store.service.cache.IFsUserCourseCacheService;
 import com.fs.system.service.ISysConfigService;
@@ -175,6 +175,9 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
 
     @Autowired
     private FsUserCourseCompanyUserTimeMapper companyUserTimeMapper;
+    @Autowired
+    private IFsUserCompanyUserService userCompanyUserService;
+
     /**
      * 查询课堂视频
      *
@@ -984,12 +987,13 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         //判断:1、如果没有绑定销售,就返回给客服的微信图片;
         //2、如果只绑定了当前销售,需要添加看课记录(正常流程);
         //3、以上都不是,则标识重粉,需要加入关系表,并打上重粉标签
-        if(fsUser.getCompanyUserId() == null) {
+        FsUserCompanyUser userCompanyUser = userCompanyUserService.selectByUserIdAndProjectId(companyUser.getUserId(), param.getProjectId());
+        if(Objects.isNull(userCompanyUser)) {
             return ResponseResult.fail(BizResponseEnum.DATA_NOT_EXIST, getCompanyUserQRCode(companyUser));
         }
 
         // 逻辑调整:如果会员已经绑定了销售,直接提示,不添加重粉数据了-2025年6月16日14点53分
-        if (fsUser.getCompanyUserId() != null && !param.getCompanyUserId().equals(fsUser.getCompanyUserId())){
+        if (!param.getCompanyUserId().equals(userCompanyUser.getCompanyUserId())){
             return ResponseResult.fail(406,"该用户已成为其他销售会员");
         }
 
@@ -1039,12 +1043,12 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
 
         // 添加会员销售关系表数据
         // 逻辑调整:如果会员已经绑定了销售,直接提示,不添加重粉数据了-2025年6月16日14点58分
-        FsUserCompanyUser fsUserCompanyUser = getFsUserCompanyUser(param, fsUser);
-        QueryWrapper<FsUserCompanyUser> queryWrapper = new QueryWrapper<FsUserCompanyUser>().eq("user_id", param.getUserId()).eq("company_user_id", param.getCompanyUserId());
-        Integer i = fsUserCompanyUserMapper.selectCount(queryWrapper);
-        if(i == 0) {
-            fsUserCompanyUserMapper.insertFsUserCompanyUser(fsUserCompanyUser);
-        }
+//        FsUserCompanyUser fsUserCompanyUser = getFsUserCompanyUser(param, fsUser);
+//        QueryWrapper<FsUserCompanyUser> queryWrapper = new QueryWrapper<FsUserCompanyUser>().eq("user_id", param.getUserId()).eq("company_user_id", param.getCompanyUserId());
+//        Integer i = fsUserCompanyUserMapper.selectCount(queryWrapper);
+//        if(i == 0) {
+//            fsUserCompanyUserMapper.insertFsUserCompanyUser(fsUserCompanyUser);
+//        }
 
 //        // 如果重粉需要打上重粉标签
 //        if(1 == fsUserCompanyUser.getIsRepeatFans()){
@@ -1057,20 +1061,20 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         return ResponseResult.ok(Boolean.TRUE);
     }
 
-    // 添加关系表数据
-    public static FsUserCompanyUser getFsUserCompanyUser(FsUserCourseAddCompanyUserParam param, FsUser fsUser) {
-        FsUserCompanyUser fsUserCompanyUser = new FsUserCompanyUser();
-        // 判断是否绑定了销售,如果已绑定,则需要标识为重粉,且放黑名单
-        if (fsUser.getCompanyUserId() != null && !fsUser.getCompanyUserId().equals(param.getCompanyUserId())) {
-            fsUserCompanyUser.setIsRepeatFans(1);
-        } else {
-            fsUserCompanyUser.setIsRepeatFans(0);
-        }
-        fsUserCompanyUser.setUserId(param.getUserId());
-        fsUserCompanyUser.setCompanyId(param.getCompanyId());
-        fsUserCompanyUser.setCompanyUserId(param.getCompanyUserId());
-        return fsUserCompanyUser;
-    }
+//    // 添加关系表数据
+//    public static FsUserCompanyUser getFsUserCompanyUser(FsUserCourseAddCompanyUserParam param, FsUser fsUser) {
+//        FsUserCompanyUser fsUserCompanyUser = new FsUserCompanyUser();
+//        // 判断是否绑定了销售,如果已绑定,则需要标识为重粉,且放黑名单
+//        if (fsUser.getCompanyUserId() != null && !fsUser.getCompanyUserId().equals(param.getCompanyUserId())) {
+//            fsUserCompanyUser.setIsRepeatFans(1);
+//        } else {
+//            fsUserCompanyUser.setIsRepeatFans(0);
+//        }
+//        fsUserCompanyUser.setUserId(param.getUserId());
+//        fsUserCompanyUser.setCompanyId(param.getCompanyId());
+//        fsUserCompanyUser.setCompanyUserId(param.getCompanyUserId());
+//        return fsUserCompanyUser;
+//    }
 
     private String getCompanyUserQRCode(CompanyUser companyUser) {
         String companyUserQRCode;

+ 21 - 6
fs-service-system/src/main/java/com/fs/store/mapper/FsUserMapper.java

@@ -136,7 +136,7 @@ public interface FsUserMapper
 
 
     @Select({"<script> " +
-            "select u.*,cu.nick_name as company_user_nick_name  from fs_user u left join company_user cu on u.company_user_id=cu.user_id " +
+            "select distinct u.*,cu.nick_name as company_user_nick_name  from fs_user u left join fs_user_company_user ucu on ucu.user_id = u.user_id left join company_user cu on ucu.company_user_id=cu.user_id " +
             "where u.is_del=0 " +
             "<if test = 'maps.nickname != null and  maps.nickname !=\"\"    '> " +
             "and u.nickname like CONCAT('%',#{maps.nickname},'%') " +
@@ -145,13 +145,13 @@ public interface FsUserMapper
             "and u.phone=#{maps.phone} " +
             "</if>" +
             "<if test = 'maps.companyId != null    '> " +
-            "and u.company_id=#{maps.companyId} " +
+            "and cu.company_id=#{maps.companyId} " +
             "</if>" +
             "<if test = 'maps.status != null   and  maps.status !=\"\"   '> " +
             "and u.status=#{maps.status} " +
             "</if>" +
             "<if test = 'maps.companyUserId != null    '> " +
-            "and u.company_user_id=#{maps.companyUserId} " +
+            "and cu.company_user_id=#{maps.companyUserId} " +
             "</if>" +
             " order by u.create_time desc "+
             "</script>"})
@@ -163,13 +163,13 @@ public interface FsUserMapper
             "</script>"})
     List<FsUserTuiVO> selectFsUserTuiList(String userId);
     @Select({"<script> " +
-            "select count(1) from fs_user  " +
+            "select count(distinct u.user_id) from fs_user u left join fs_user_company_user ucu on ucu.user_id = u.user_id left join company_user cu on cu.user_id = ucu.company_user_id  " +
             "where 1=1 " +
             "<if test = 'type != null and  type ==1  '> " +
-            "and  DATE_FORMAT(create_time, '%Y-%m-%d')  = DATE_FORMAT(NOW(), '%Y-%m-%d') " +
+            "and  DATE_FORMAT(u.create_time, '%Y-%m-%d')  = DATE_FORMAT(NOW(), '%Y-%m-%d') " +
             "</if>" +
             "<if test = 'companyId != null  '> " +
-            "and  company_id=#{companyId} " +
+            "and  cu.company_id=#{companyId} " +
             "</if>" +
             "</script>"})
     Long selectFsUserCount(@Param("type") int type,@Param("companyId") Long companyId);
@@ -318,4 +318,19 @@ public interface FsUserMapper
     List<FsUserWatchCourseStatistics> selectFsUserDetail();
 
     List<FsUser> selectFsUserListByJointUserNameKey(String userNameKey);
+    /**
+     * 根据销售ID和项目ID查询会员列表
+     * @param companyUserId 销售ID
+     * @param projectId     项目ID
+     * @return  list
+     */
+    List<FsUser> selectByCompanyUserAndProjectId(@Param("companyUserId") Long companyUserId, @Param("projectId") Long projectId);
+
+    /**
+     * 根据会员ID和项目ID查询会员
+     * @param userId        会员ID
+     * @param projectId     项目ID
+     * @return  FsUser
+     */
+    FsUser selectByUserIdAndProjectId(@Param("userId") Long userId, @Param("projectId") Long projectId);
 }

+ 9 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsUserCompanyUserService.java

@@ -89,4 +89,13 @@ public interface IFsUserCompanyUserService extends IService<FsUserCompanyUser>{
      * @return  list
      */
     List<FsUserCompanyUser> selectRepeatCompanyUserName(List<Long> userIds);
+
+    /**
+     * 绑定会员-项目-销售关系
+     * @param userId        会员ID
+     * @param projectId     项目ID
+     * @param companyId     公司ID
+     * @param companyUserId 销售ID
+     */
+    void bindRelationship(Long userId, Long projectId, Long companyId, Long companyUserId);
 }

+ 19 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserCompanyUserServiceImpl.java

@@ -138,4 +138,23 @@ public class FsUserCompanyUserServiceImpl extends ServiceImpl<FsUserCompanyUserM
     public List<FsUserCompanyUser> selectRepeatCompanyUserName(List<Long> userIds) {
         return baseMapper.selectRepeatCompanyUserName(userIds);
     }
+
+    /**
+     * 绑定会员-项目-销售关系
+     * @param userId        会员ID
+     * @param projectId     项目ID
+     * @param companyId     公司ID
+     * @param companyUserId 销售ID
+     */
+    @Override
+    public void bindRelationship(Long userId, Long projectId, Long companyId, Long companyUserId) {
+        FsUserCompanyUser userCompanyUser = new FsUserCompanyUser();
+        userCompanyUser.setUserId(userId);
+        userCompanyUser.setProjectId(projectId);
+        userCompanyUser.setCompanyId(companyId);
+        userCompanyUser.setCompanyUserId(companyUserId);
+        boolean hasBind = hasBind(userId, companyUserId);
+        userCompanyUser.setIsRepeatFans(hasBind ? 1 : 0);
+        insertFsUserCompanyUser(userCompanyUser);
+    }
 }

+ 5 - 23
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserServiceImpl.java

@@ -249,12 +249,6 @@ public class FsUserServiceImpl implements IFsUserService
                     fsUser.setStatusText("正常");
                 }
             }
-            if(ObjectUtils.isNotNull(fsUser.getCompanyUserId())){
-                CompanyUser companyUser = companyUserCacheService.selectCompanyUserById(fsUser.getCompanyUserId());
-                if(ObjectUtils.isNotNull(companyUser)){
-                    fsUser.setCompanyUserName(String.format("%s_%d",companyUser.getUserName(),companyUser.getUserId()));
-                }
-            }
         }
         TableDataInfo tableDataInfo = new TableDataInfo();
         tableDataInfo.setRows(fsUsers);
@@ -922,7 +916,7 @@ public class FsUserServiceImpl implements IFsUserService
 
         // 添加关系表数据
         if (Objects.isNull(userCompanyUser)){
-            userCompanyUserService.save(getFsUserCompanyUser(param));
+            userCompanyUserService.bindRelationship(param.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId());
         }
 
         // 特殊(需求设计:需要根据公司是否开启黑名单来设置会员初始化的状态)
@@ -940,14 +934,14 @@ public class FsUserServiceImpl implements IFsUserService
             //关联会员标签,先删除再新增
             Map<String, Object> map = new HashMap<>();
             map.put("userId", param.getUserId());
-            map.put("companyId", fsUser.getCompanyId());
-            map.put("companyUserId", fsUser.getCompanyUserId());
+            map.put("companyId", companyUser.getCompanyId());
+            map.put("companyUserId", companyUser.getUserId());
             companyTagUserMapper.deleteCompanyTagUserByMap(map);
 
             CompanyTagUser companyTagUser = new CompanyTagUser();
             companyTagUser.setUserId(param.getUserId());
-            companyTagUser.setCompanyId(fsUser.getCompanyId());
-            companyTagUser.setCompanyUserId(fsUser.getCompanyUserId());
+            companyTagUser.setCompanyId(companyUser.getCompanyId());
+            companyTagUser.setCompanyUserId(companyUser.getUserId());
             companyTagUser.setTagIds(String.join(",", param.getTagIds()));
             companyTagUser.setCreateTime(new Date());
             companyTagUserMapper.insertCompanyTagUser(companyTagUser);
@@ -1003,18 +997,6 @@ public class FsUserServiceImpl implements IFsUserService
         return fsUserMapper.selectFsUserListByJointUserNameKey(userNameKey);
     }
 
-    // 添加关系表数据
-    private FsUserCompanyUser getFsUserCompanyUser(FsUserCourseBeMemberParam param) {
-        FsUserCompanyUser fsUserCompanyUser = new FsUserCompanyUser();
-        // 判断是否绑定了销售,如果已绑定,则需要标识为重粉,且放黑名单
-        boolean hasBind = userCompanyUserService.hasBind(param.getUserId(), param.getCompanyUserId());
-        fsUserCompanyUser.setIsRepeatFans(hasBind ? 1 : 0);
-        fsUserCompanyUser.setUserId(param.getUserId());
-        fsUserCompanyUser.setCompanyId(param.getCompanyId());
-        fsUserCompanyUser.setCompanyUserId(param.getCompanyUserId());
-        return fsUserCompanyUser;
-    }
-
     /**
      * 查询会员选项列表
      * @param params    参数

+ 3 - 0
fs-service-system/src/main/java/com/fs/store/vo/h5/FsUserPageListVO.java

@@ -93,4 +93,7 @@ public class FsUserPageListVO {
     @ApiModelProperty(value = "重粉所属销售,多个用逗号隔开")
     private String repeatCompanyUserName;
 
+    @ApiModelProperty(value = "项目ID")
+    private Long projectId;
+
 }

+ 2 - 2
fs-service-system/src/main/resources/mapper/company/CompanyUserChangeApplyUserMapper.xml

@@ -17,10 +17,10 @@
 
     <!-- 修改申请记录关联用户销售 -->
     <update id="changeUser">
-        update fs_user fu
+        update fs_user_company_user fu
         inner join company_user_change_apply_user cucau on cucau.user_id = fu.user_id
         left join company_user_change_apply cuca on cuca.id = cucau.apply_id
         set fu.company_user_id = cuca.`to`
-        where cuca.id = #{applyId}
+        where cuca.id = #{applyId} and fu.project_id = cuca.project_id
     </update>
 </mapper>

+ 138 - 106
fs-service-system/src/main/resources/mapper/store/FsUserMapper.xml

@@ -189,7 +189,7 @@
         limit 10
     </select>
     <select id="selectCusListPage" resultType="com.fs.store.domain.FsUser">
-        select user.user_id,
+        select distinct user.user_id,
         user.username,
         user.real_name,
         user.id_card,
@@ -199,43 +199,48 @@
         user.status,
         user.company_id,
         user.company_user_id,
-        user.create_time
+        user.create_time,
+        t.companyUserId,
+        concat(cu.user_name, '_', cu.user_id) companyUserName
         from
         fs_user `user` join (
-        select user_id from fs_user
+        select u.user_id, ucu.user_id as companyUserId from fs_user u
+        left join fs_user_company_user ucu on cu.user_id = u.user_id
         <where>
             <if test="companyId != null and companyId != ''">
-                AND company_id = #{companyId}
+                AND ucu.company_id = #{companyId}
             </if>
             <if test="companyUserId != null and companyUserId != ''">
-                AND company_user_id = #{companyUserId}
+                AND ucu.company_user_id = #{companyUserId}
             </if>
             <if test="phone != null and phone != ''">
-                AND phone = #{phone}
+                AND u.phone = #{phone}
             </if>
         </where>
-        order by user_id desc
+        order by u.user_id desc
         limit ${(pageNum-1)*pageSize},${pageSize}
         ) t on t.user_id = `user`.user_id
+        left join company_user cu on cu.user_id = t.companyUserId
     </select>
     <select id="selectCusListPageCount" resultType="java.lang.Long">
-        SELECT COUNT(user_id)
-        FROM fs_user
+        SELECT COUNT(u.user_id)
+        FROM fs_user u
+        left join fs_user_company_user cu on cu.user_id = u.user_id
         <where>
             <if test="companyId != null and companyId != ''">
-                AND company_id = #{companyId}
+                AND cu.company_id = #{companyId}
             </if>
             <if test="companyUserId != null and companyUserId != ''">
-                AND company_user_id = #{companyUserId}
+                AND cu.company_user_id = #{companyUserId}
             </if>
             <if test="phone != null and phone != ''">
-                AND phone = #{phone}
+                AND u.phone = #{phone}
             </if>
         </where>
     </select>
 
     <select id="selectFsUserVOList" resultType="com.fs.store.vo.FSUserVO">
-        SELECT
+        SELECT distinct
         b.total_amount,b.last_buy_time,p.pay_money as number,p.payment_id,p.pay_time,
         u.*,
         fcc.watch_course_count, fcc.part_course_count, company_user.nick_name AS companyUserNickName, fcc.last_watch_date
@@ -264,7 +269,8 @@
         fs_user_course_count
         GROUP BY fs_user_course_count.user_id
         ) fcc ON fcc.user_id = u.user_id
-        LEFT JOIN company_user ON company_user.user_id = u.company_user_id
+        left join fs_user_company_user ucu on ucu.user_id = u.user_id
+        LEFT JOIN company_user ON company_user.user_id = ucu.company_user_id
         LEFT JOIN company on company.company_id = company_user.company_id
         <where>
         1 = 1
@@ -474,17 +480,18 @@
         fs_user.status,
         fs_user.create_time,
         fs_user.remark,
-        fs_user.company_user_id,
-        fs_user.company_id
+        ucu.company_user_id,
+        ucu.company_id
         FROM
         fs_user
+        left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
         <where>
             fs_user.is_del = 0
             <if test="companyId != null">
-                AND fs_user.company_id = #{companyId}
+                AND ucu.company_id = #{companyId}
             </if>
             <if test="companyUserId != null and companyUserId != '' ">
-                AND fs_user.company_user_id = #{companyUserId}
+                AND ucu.company_user_id = #{companyUserId}
             </if>
             <if test="registerStartTime != null and registerStartTime !='' ">
                 AND fs_user.create_time &gt;= #{registerStartTime}
@@ -493,7 +500,7 @@
                 AND fs_user.create_time &lt;= #{registerEndTime}
             </if>
             <if test="companyUserIds != null and companyUserIds.size > 0">
-                AND fs_user.company_user_id in
+                AND ucu.company_user_id in
                 <foreach collection="companyUserIds" item="item" index="index" open="(" separator="," close=")">
                     ${item}
                 </foreach>
@@ -534,10 +541,10 @@
         LEFT JOIN company_user ON company_user.user_id = fs_user_company_user.company_user_id
         where fs_user.is_del = 0
         <if test="userId != null and userId!= 0 ">
-            and fs_user.company_user_id = #{userId}
+            and fs_user_company_user.company_user_id = #{userId}
         </if>
         <if test="companyId != null ">
-            and fs_user.company_id = #{companyId}
+            and fs_user_company_user.company_id = #{companyId}
         </if>
         <choose>
             <when test = "isBlack">
@@ -626,10 +633,10 @@
                 LEFT JOIN company_user ON company_user.user_id = fs_user_company_user.company_user_id
         WHERE fs_user.is_del = 0
         <if test="userId != null and userId != 0 ">
-            and (fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+            and (fs_user_company_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
         </if>
         <if test="companyId != null ">
-            and fs_user.company_id = #{companyId}
+            and fs_user_company_user.company_id = #{companyId}
         </if>
         GROUP BY
             fs_user.`status`
@@ -662,7 +669,6 @@
         FROM
         fs_user_course_count
         LEFT JOIN fs_user ON fs_user.user_id = fs_user_course_count.user_id
-        LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
         <where>
         <if test="dateTag != null and dateTag !='' ">
             <choose>
@@ -694,7 +700,6 @@
                 FROM
                     fs_course_answer_logs
                         LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
-                        LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
                 <where>
 
                     <if test="dateTag != null and dateTag !='' ">
@@ -724,7 +729,6 @@
                 FROM
                     fs_course_answer_logs
                         LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
-                        LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
             <where>
                 fs_course_answer_logs.is_right = 1
                 <if test="dateTag != null and dateTag !='' ">
@@ -758,7 +762,6 @@
         FROM
             fs_course_red_packet_log
                 LEFT JOIN fs_user ON fs_user.user_id = fs_course_red_packet_log.user_id
-                LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
         <where>
         fs_course_red_packet_log.status = 1
         <if test="dateTag != null and dateTag !='' ">
@@ -788,7 +791,9 @@
             count(if(date(u.create_time) = curdate(),u.user_id, null)) newVipCount,
             count(u.user_id) vipCount
         from fs_user u
-        where u.company_user_id = #{companyUserId}
+        left join fs_user_company_user ucu on ucu.user_id = u.user_id
+        left join company_user cu on cu.user_id = ucu.company_user_id
+        where cu.user_id = #{companyUserId}
     </select>
 
     <update id="batchUpdateFsUserByIds" parameterType="Long">
@@ -802,24 +807,26 @@
     <select id="countUserSummary" resultType="FsUserSummaryCountVO">
         SELECT (SELECT count(fs_user.user_id)
                 FROM fs_user
-                         LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
+                         LEFT JOIN company_user ON ucu.company_user_id = company_user.user_id
                 WHERE fs_user.is_del = 0
                 <if test="userId != null and userId != 0 ">
-                    and (fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+                    and (ucu.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
                 </if>
                 <if test="companyId != null ">
-                    and fs_user.company_id = #{companyId}
+                    and ucu.company_id = #{companyId}
                 </if>
                   ) as userTotal,
                (SELECT count(fs_user.user_id)
                 FROM fs_user
-                         LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                    left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
+                         LEFT JOIN company_user ON ucu.company_user_id = company_user.user_id
                 WHERE fs_user.is_del = 0
                 <if test="userId != null and userId != 0 ">
-                    and (fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+                    and (ucu.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
                 </if>
                 <if test="companyId != null ">
-                    and fs_user.company_id = #{companyId}
+                    and ucu.company_id = #{companyId}
                 </if>
                   AND to_days(fs_user.create_time) = to_days(now())) as todayNewUser
     </select>
@@ -832,13 +839,14 @@
             company_tag_user
                 LEFT JOIN fs_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
-                LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
+                LEFT JOIN company_user ON ucu.company_user_id = company_user.user_id
         <where>
         <if test="userId != null and userId != 0 ">
-            and (fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+            and (ucu.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
         </if>
         <if test="companyId != null ">
-            and fs_user.company_id = #{companyId}
+            and ucu.company_id = #{companyId}
         </if>
            and company_tag.tag_id is not null
         </where>
@@ -854,14 +862,15 @@
                 FROM
                     fs_user_course_count fcc
                         LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
-                        LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                        left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
+                        LEFT JOIN company_user ON ucu.company_user_id = company_user.user_id
                         LEFT JOIN fs_user_course_period_days fcpd ON FIND_IN_SET(fcpd.period_id, fcc.course_ids) > 0
                 <where>
                     <if test="userId != null and userId != 0 ">
-                        and (fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+                        and (ucu.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
                     </if>
                     <if test="userId != null and userId == 0 ">
-                        and fs_user.company_id = #{companyId}
+                        and ucu.company_id = #{companyId}
                     </if>
                     <if test="startTime != null and startTime !='' ">
                             and fcc.create_time &gt;= #{startTime}
@@ -887,14 +896,15 @@
                 FROM
                     fs_user_course_count fcc
                         LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
-                        LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                        left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
+                        LEFT JOIN company_user ON ucu.company_user_id = company_user.user_id
                         LEFT JOIN fs_user_course_period_days fcpd ON FIND_IN_SET(fcpd.period_id, fcc.course_ids) > 0
                 <where>
                     <if test="userId != null and userId != 0 ">
-                        and (fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+                        and (ucu.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
                     </if>
                     <if test="userId != null and userId == 0 ">
-                        and fs_user.company_id = #{companyId}
+                        and ucu.company_id = #{companyId}
                     </if>
                   AND fcc.complete_watch_count > 0
                     <if test="startTime != null and startTime !='' ">
@@ -925,13 +935,13 @@
         FROM
         fs_course_answer_logs
         LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
-        LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
+        LEFT JOIN company_user ON company_user.user_id = fs_course_answer_logs.company_user_id
         <where>
         <if test="userId != null and userId != 0 ">
-            and (fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+            and (fs_course_answer_logs.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
         </if>
         <if test="userId != null and userId == 0 ">
-            and fs_user.company_id = #{companyId}
+            and fs_course_answer_logs.company_id = #{companyId}
         </if>
         <if test="startTime != null and startTime !='' ">
             AND fs_course_answer_logs.create_time &gt;= #{startTime}
@@ -957,13 +967,13 @@
         FROM
         fs_course_answer_logs
         LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
-        LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
+        LEFT JOIN company_user ON company_user.user_id = fs_course_answer_logs.company_user_id
         <where>
         <if test="userId != null and userId != 0 ">
-            and (fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+            and (fs_course_answer_logs.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
         </if>
         <if test="userId != null and userId == 0 ">
-            and fs_user.company_id = #{companyId}
+            and fs_course_answer_logs.company_id = #{companyId}
         </if>
         AND fs_course_answer_logs.is_right = 1
         <if test="startTime != null and startTime !='' ">
@@ -994,13 +1004,13 @@
             FROM
                 fs_course_red_packet_log flog
                     LEFT JOIN fs_user ON fs_user.user_id = flog.user_id
-                    LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
+                    LEFT JOIN company_user ON company_user.user_id = flog.company_user_id
                 <where>
                 <if test="userId != null and userId != 0 ">
-                    and (fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+                    and (flog.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
                 </if>
                 <if test="userId != null and userId == 0 ">
-                    and fs_user.company_id = #{companyId}
+                    and flog.company_id = #{companyId}
                 </if>
                 <if test="startTime != null and startTime !='' ">
                     AND flog.create_time &gt;= #{startTime}
@@ -1026,13 +1036,13 @@
             FROM
                 fs_course_red_packet_log flog
                     LEFT JOIN fs_user ON fs_user.user_id = flog.user_id
-                    LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
+                    LEFT JOIN company_user ON company_user.user_id = flog.company_user_id
                 <where>
                 <if test="userId != null and userId != 0 ">
-                    and (fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+                    and (flog.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
                 </if>
                 <if test="userId != null and userId == 0 ">
-                    and fs_user.company_id = #{companyId}
+                    and flog.company_id = #{companyId}
                 </if>
                 <if test="startTime != null and startTime !='' ">
                     AND flog.create_time &gt;= #{startTime}
@@ -1062,20 +1072,21 @@
             LEFT JOIN fs_user_course_period fpd on fpd.period_id = fcpd.period_id
             LEFT JOIN fs_user_course_count fcc ON FIND_IN_SET( fcpd.period_id, fcc.course_ids ) > 0
             LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
+            left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
             WHERE 1=1
             AND FIND_IN_SET(#{companyId}, fpd.company_id)
             <if test="userId != null and userId != 0 ">
-                AND fs_user.company_user_id = #{userId}
+                AND ucu.company_user_id = #{userId}
             </if>
             <if test="userId != null and userId == 0 ">
-                and fs_user.company_id = #{companyId}
+                and ucu.company_id = #{companyId}
             </if>
             <if test="periodId != null and periodId != ''">
                 AND fcpd.period_id =  #{periodId}
             </if>
             -- 单独通过销售id查询
             <if test="companyUserId != null and companyUserId != ''">
-                AND fs_user.company_user_id = #{companyUserId}
+                AND ucu.company_user_id = #{companyUserId}
             </if>
             ) as courseNum,
 
@@ -1084,13 +1095,14 @@
             LEFT JOIN fs_user_course_period fpd on fpd.period_id = fcpd.period_id
             LEFT JOIN fs_user_course_count fcc ON FIND_IN_SET( fcpd.period_id, fcc.course_ids ) > 0
             LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
+            left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
             WHERE 1=1
             AND FIND_IN_SET(#{companyId}, fpd.company_id)
             <if test="userId != null and userId != 0 ">
-                AND fs_user.company_user_id = #{userId}
+                AND ucu.company_user_id = #{userId}
             </if>
             <if test="userId != null and userId == 0 ">
-                and fs_user.company_id = #{companyId}
+                and ucu.company_id = #{companyId}
             </if>
             <if test="periodId != null and periodId != ''">
                 AND fcpd.period_id =  #{periodId}
@@ -1100,13 +1112,14 @@
             </if>
             -- 单独通过销售id查询
             <if test="companyUserId != null and companyUserId != ''">
-                AND fs_user.company_user_id = #{companyUserId}
+                AND ucu.company_user_id = #{companyUserId}
             </if>
             ) as videoNum,
 
         ( SELECT count(DISTINCT fs_user.user_id ) FROM fs_user_course_count fcc
             LEFT JOIN fs_user_course_period_days fcpd ON FIND_IN_SET( fcpd.period_id, fcc.course_ids ) > 0
             LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
+            left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
         <if test="periodId != null and periodId != ''">
             AND fcpd.period_id =  #{periodId}
         </if>
@@ -1115,14 +1128,14 @@
         </if>
         -- 单独通过销售id查询
         <if test="companyUserId != null and companyUserId != ''">
-            AND fs_user.company_user_id = #{companyUserId}
+            AND ucu.company_user_id = #{companyUserId}
         </if>
         <where>
             <if test="userId != null and userId != 0 ">
-                AND fs_user.company_user_id = #{userId}
+                AND ucu.company_user_id = #{userId}
             </if>
             <if test="userId != null and userId == 0 ">
-                and fs_user.company_id = #{companyId}
+                and ucu.company_id = #{companyId}
             </if>
         </where>
          ) as courseUserNum
@@ -1137,14 +1150,15 @@
         FROM
         fs_user_course_count fcc
         LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
-        LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+        left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
+        LEFT JOIN company_user ON ucu.company_user_id = company_user.user_id
         LEFT JOIN fs_user_course_period_days fcpd ON FIND_IN_SET( fcpd.period_id, fcc.course_ids ) > 0
         <where>
         <if test="userId != null and userId != 0 ">
-            AND  ( fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+            AND  ( ucu.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
         </if>
         <if test="userId != null and userId == 0 ">
-            and fs_user.company_id = #{companyId}
+            and ucu.company_id = #{companyId}
         </if>
         <if test="startTime != null and startTime !='' ">
             AND fcc.create_time &gt;= #{startTime}
@@ -1184,13 +1198,13 @@
         FROM
             fs_course_answer_logs
                 LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
-                LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
+                LEFT JOIN company_user ON company_user.user_id = fs_course_answer_logs.company_user_id
             <where>
             <if test="userId != null and userId != 0 ">
-                AND  ( fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+                AND  ( fs_course_answer_logs.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
             </if>
             <if test="userId != null and userId == 0 ">
-                and fs_user.company_id = #{companyId}
+                and fs_course_answer_logs.company_id = #{companyId}
             </if>
             <if test="startTime != null and startTime !='' ">
                 AND fs_course_answer_logs.create_time &gt;= #{startTime}
@@ -1233,15 +1247,16 @@
         FROM
         fs_user_course_count fcc
         LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
-        LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+        left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
+        LEFT JOIN company_user ON ucu.company_user_id = company_user.user_id
         LEFT JOIN fs_user_course_period_days fcpd ON FIND_IN_SET( fcpd.period_id, fcc.course_ids ) > 0
         LEFT JOIN fs_user_course_video fcv ON fcv.video_id = fcpd.video_id
         <where>
         <if test="userId != null and userId != 0 ">
-            AND ( fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+            AND ( ucu.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
         </if>
         <if test="userId != null and userId == 0 ">
-            and fs_user.company_id = #{companyId}
+            and ucu.company_id = #{companyId}
         </if>
         <if test="startTime != null and startTime !='' ">
             AND fcc.create_time &gt;= #{startTime}
@@ -1286,14 +1301,14 @@
         FROM
         fs_course_answer_logs
         LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
-        LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
+        LEFT JOIN company_user ON company_user.user_id = fs_course_answer_logs.company_user_id
         LEFT JOIN fs_user_course_video fcv ON fcv.video_id = fs_course_answer_logs.video_id
         <where>
         <if test="userId != null and userId != 0 ">
-            AND ( fs_user.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
+            AND ( fs_course_answer_logs.company_user_id = #{userId} OR company_user.parent_id = #{userId} )
         </if>
         <if test="userId != null and userId == 0 ">
-            and fs_user.company_id = #{companyId}
+            and fs_course_answer_logs.company_id = #{companyId}
         </if>
         <if test="startTime != null and startTime !='' ">
             AND fs_course_answer_logs.create_time &gt;= #{startTime}
@@ -1341,14 +1356,15 @@
         FROM
         fs_user_course_count fcc
         LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
-        LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+        left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
+        LEFT JOIN company_user ON ucu.company_user_id = company_user.user_id
         LEFT JOIN fs_user_course_period_days fcpd ON FIND_IN_SET( fcpd.period_id, fcc.course_ids ) > 0
         <where>
         <if test="companyUserId != null and companyUserId != 0 ">
-            AND fs_user.company_user_id = #{companyUserId}
+            AND ucu.company_user_id = #{companyUserId}
         </if>
         <if test="companyUserId != null and companyUserId == 0 ">
-            and fs_user.company_id = #{companyId}
+            and ucu.company_id = #{companyId}
         </if>
         <if test="periodId != null and periodId != ''">
             AND fcpd.period_id =  #{periodId}
@@ -1369,14 +1385,12 @@
         flog.video_id
         FROM
         fs_course_red_packet_log flog
-        LEFT JOIN fs_user ON fs_user.user_id = flog.user_id
-        LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
         <where>
             <if test="companyUserId != null and companyUserId != 0 ">
-                AND fs_user.company_user_id = #{companyUserId}
+                AND flog.company_user_id = #{companyUserId}
             </if>
             <if test="companyUserId != null and companyUserId == 0 ">
-                and fs_user.company_id = #{companyId}
+                and flog.company_id = #{companyId}
             </if>
             <if test="periodId != null and periodId != ''">
                 AND flog.period_id =  #{periodId}
@@ -1414,13 +1428,12 @@
         FROM
         fs_course_answer_logs
         LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
-        LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
         <where>
             <if test="companyUserId != null and companyUserId != 0 ">
-                AND fs_user.company_user_id = #{companyUserId}
+                AND fs_course_answer_logs.company_user_id = #{companyUserId}
             </if>
             <if test="companyUserId != null and companyUserId == 0 ">
-                and fs_user.company_id = #{companyId}
+                and fs_course_answer_logs.company_id = #{companyId}
             </if>
             <if test="periodId != null and periodId != ''">
                 AND fs_course_answer_logs.period_id =  #{periodId}
@@ -1443,13 +1456,13 @@
     <select id="companyUserCount" resultType="CompanyUserSummaryCountVO">
         SELECT
             (
-                SELECT count( fs_user.user_id ) FROM fs_user LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                SELECT count( fs_user.user_id ) FROM fs_user left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id LEFT JOIN company_user ON ucu.company_user_id = company_user.user_id
             <where>
                 <if test="companyUserId != null and companyUserId != '' and companyUserId != '0' ">
-                    AND fs_user.company_user_id = #{companyUserId}
+                    AND ucu.company_user_id = #{companyUserId}
                 </if>
                 <if test="companyUserId != null and companyUserId != '' and companyUserId == '0' ">
-                    and fs_user.company_id = #{companyId}
+                    and ucu.company_id = #{companyId}
                 </if>
             </where>
             ) AS userTotal,
@@ -1458,13 +1471,14 @@
                     count( fs_user.user_id )
                 FROM
                     fs_user
-                        LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                        left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
+                        LEFT JOIN company_user ON ucu.company_user_id = company_user.user_id
                 <where>
                     <if test="companyUserId != null and companyUserId != '' and companyUserId != '0' ">
-                        AND fs_user.company_user_id = #{companyUserId}
+                        AND ucu.company_user_id = #{companyUserId}
                     </if>
                     <if test="companyUserId != null and companyUserId != '' and companyUserId == '0' ">
-                        and fs_user.company_id = #{companyId}
+                        and ucu.company_id = #{companyId}
                     </if>
                   and fs_user.is_del = 0
                   AND to_days( fs_user.create_time ) = to_days(
@@ -1482,10 +1496,10 @@
                 LEFT JOIN fs_user ON fs_user.user_id = flog.user_id
         <where>
         <if test="companyUserId != null and companyUserId != '' and companyUserId != '0' ">
-            AND fs_user.company_user_id = #{companyUserId}
+            AND flog.company_user_id = #{companyUserId}
         </if>
         <if test="companyUserId != null and companyUserId != '' and companyUserId == '0' ">
-            and fs_user.company_id = #{companyId}
+            and flog.company_id = #{companyId}
         </if>
         </where>
     </select>
@@ -1495,13 +1509,14 @@
         count(1)
         FROM
         fs_user
+        left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
         <where>
             fs_user.is_del = 0
             <if test="companyId != null">
-                AND fs_user.company_id = #{companyId}
+                AND ucu.company_id = #{companyId}
             </if>
             <if test="companyUserId != null and companyUserId != '' ">
-                AND fs_user.company_user_id = #{companyUserId}
+                AND ucu.company_user_id = #{companyUserId}
             </if>
             <if test="registerStartTime != null and registerStartTime !='' ">
                 AND fs_user.create_time &gt;= #{registerStartTime}
@@ -1510,7 +1525,7 @@
                 AND fs_user.create_time &lt;= #{registerEndTime}
             </if>
             <if test="companyUserIds != null and companyUserIds.size > 0">
-                AND fs_user.company_user_id in
+                AND ucu.company_user_id in
                 <foreach collection="companyUserIds" item="item" index="index" open="(" separator="," close=")">
                     ${item}
                 </foreach>
@@ -1609,16 +1624,17 @@
         SELECT
             count( fs_user.user_id ) as userNum,
             count( DISTINCT CASE WHEN to_days( fs_user.create_time ) = to_days( now()) THEN fs_user.user_id END ) as newUserNum,
-            fs_user.company_id
+            ucu.company_id
         FROM
             fs_user
-            LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
+            left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
+            LEFT JOIN company_user ON company_user.user_id = ucu.company_user_id
         WHERE
             fs_user.is_del = 0
           AND fs_user.`status` = 1
           AND company_user.user_id is not null
         GROUP BY
-            fs_user.company_id
+            ucu.company_id
     </select>
 
 
@@ -1655,8 +1671,6 @@
             flog.company_id
         FROM
             fs_course_red_packet_log flog
-                LEFT JOIN fs_user ON fs_user.user_id = flog.user_id
-                LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
         GROUP BY
             flog.period_id,
             flog.video_id,
@@ -1682,7 +1696,6 @@
         FROM
             fs_course_answer_logs
                 LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
-                LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
         GROUP BY
             fs_course_answer_logs.period_id,
             fs_course_answer_logs.video_id,
@@ -1701,14 +1714,33 @@
 
         FROM
         fs_user
-        LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
-        LEFT JOIN company ON company.company_id = fs_user.company_id
+        left join fs_user_company_user ucu on ucu.user_id = fs_user.user_id
+        LEFT JOIN company_user ON company_user.user_id = ucu.company_user_id
+        LEFT JOIN company ON company.company_id = ucu.company_id
         WHERE
         fs_user.is_del = 0
         AND fs_user.`status` = 1
         AND company_user.user_id is not null
         GROUP BY
-        fs_user.company_user_id, date(fs_user.create_time)
+            ucu.company_user_id, date(fs_user.create_time)
+    </select>
+
+    <select id="selectByCompanyUserAndProjectId" resultType="com.fs.store.domain.FsUser">
+        select
+            u.*
+        from fs_user u
+        inner join fs_user_company_user ucu on ucu.user_id = u.user_id
+        inner join company_user cu on cu.user_id = ucu.company_user_id
+        where cu.user_id = #{companyUserId} and ucu.project_id = #{projectId}
+    </select>
+
+    <select id="selectByUserIdAndProjectId" resultType="com.fs.store.domain.FsUser">
+        select
+            u.*
+        from fs_user u
+        inner join fs_user_company_user ucu on ucu.user_id = u.user_id
+        inner join company_user cu on cu.user_id = ucu.company_user_id
+        where u.user_id = #{userId} and ucu.project_id = #{projectId}
     </select>
 
 

+ 3 - 21
fs-user-app/src/main/java/com/fs/app/controller/WxCompanyUserController.java

@@ -180,7 +180,7 @@ public class WxCompanyUserController extends AppBaseController {
                             (companyUser.getIsAllowedAllRegister() == null || companyUser.getIsAllowedAllRegister() == 1)
                             && companyUser.getIsNeedRegisterMember() != null && companyUser.getIsNeedRegisterMember() != 1){
                         if (Objects.isNull(userCompanyUser)) {
-                            bindRelationship(user.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId());
+                            userCompanyUserService.bindRelationship(user.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId());
                         }
                     }
                     userService.updateFsUser(userMap);
@@ -194,12 +194,12 @@ public class WxCompanyUserController extends AppBaseController {
                     user.setUnionId(session.getUnionid());
                     user.setCreateTime(new Date());
                     user.setPhone(phoneNoInfo.getPhoneNumber());
+                    userService.insertFsUser(user);
                     if(companyUser != null &&
                             (companyUser.getIsAllowedAllRegister() == null || companyUser.getIsAllowedAllRegister() == 1)
                             && companyUser.getIsNeedRegisterMember() != null && companyUser.getIsNeedRegisterMember() != 1){
-                        bindRelationship(user.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId());
+                        userCompanyUserService.bindRelationship(user.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId());
                     }
-                    userService.insertFsUser(user);
                 }
             } else {
                 FsUser userMap = new FsUser();
@@ -222,24 +222,6 @@ public class WxCompanyUserController extends AppBaseController {
         }
     }
 
-    /**
-     * 绑定用户、项目、销售关系
-     * @param userId            用户ID
-     * @param projectId         项目ID
-     * @param companyId         公司ID
-     * @param companyUserId     销售ID
-     */
-    private void bindRelationship(Long userId, Long projectId, Long companyId, Long companyUserId) {
-        FsUserCompanyUser userCompanyUser = new FsUserCompanyUser();
-        userCompanyUser.setUserId(userId);
-        userCompanyUser.setProjectId(projectId);
-        userCompanyUser.setCompanyId(companyId);
-        userCompanyUser.setCompanyUserId(companyUserId);
-        boolean hasBind = userCompanyUserService.hasBind(userId, companyUserId);
-        userCompanyUser.setIsRepeatFans(hasBind ? 1 : 0);
-        userCompanyUserService.insertFsUserCompanyUser(userCompanyUser);
-    }
-
 //    @Login(isMiniLogin = true)
 //    @ApiOperation("获取销售通过小程序登录后的用户信息")
 //    @GetMapping("/getMaUser")

+ 9 - 9
fs-user-app/src/main/java/com/fs/app/controller/WxH5MpController.java

@@ -9,26 +9,26 @@ import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
-import com.fs.course.mapper.FsCourseSopLogsMapper;
 import com.fs.course.mapper.FsCourseWatchLogMapper;
 import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.store.domain.FsUser;
+import com.fs.store.service.IFsUserCompanyUserService;
 import com.fs.store.service.IFsUserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import lombok.Synchronized;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
-import me.chanjar.weixin.common.bean.menu.WxMenu;
 import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
 import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.mp.api.WxMpMenuService;
 import me.chanjar.weixin.mp.api.WxMpService;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 import java.util.Date;
@@ -61,6 +61,8 @@ public class WxH5MpController {
     ICompanyService companyService;
     @Autowired
     ICompanyUserService companyUserService;
+    @Autowired
+    private IFsUserCompanyUserService userCompanyUserService;
 
 
     @ApiOperation("课程分享链接公众号登录")
@@ -103,11 +105,10 @@ public class WxH5MpController {
                 user.setMpOpenId(wxMpUser.getOpenid());
                 user.setUnionId(wxMpUser.getUnionId());
                 user.setCreateTime(new Date());
+                userService.insertFsUser(user);
                 if((companyUser.getIsAllowedAllRegister() == null || companyUser.getIsAllowedAllRegister() != 0) && companyUser.getIsNeedRegisterMember() != 1){
-                    user.setCompanyId(param.getCompanyId());
-                    user.setCompanyUserId(param.getCompanyUserId());
+                    userCompanyUserService.bindRelationship(user.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId());
                 }
-                userService.insertFsUser(user);
             }
             log.error("用户信息user: {}, 用户id: {}", user, user.getUserId());
             String token = jwtUtils.generateToken(user.getUserId());
@@ -126,5 +127,4 @@ public class WxH5MpController {
 
     }
 
-
 }

+ 3 - 0
fs-user-app/src/main/java/com/fs/app/param/FsUserLoginByMpParam.java

@@ -20,4 +20,7 @@ public class FsUserLoginByMpParam implements Serializable {
     @NotNull(message = "销售id不能为空")
     @ApiModelProperty(value = "销售id")
     private Long companyUserId;
+    @NotNull(message = "项目ID不能为空")
+    @ApiModelProperty(value = "项目ID")
+    private Long projectId;
 }