소스 검색

会员关联项目

备注、小黑屋、标签
Long 2 주 전
부모
커밋
65e627f819
26개의 변경된 파일448개의 추가작업 그리고 114개의 파일을 삭제
  1. 10 3
      fs-admin/src/main/java/com/fs/store/controller/FsUserController.java
  2. 8 3
      fs-company-app/src/main/java/com/fs/app/controller/CompanyUserController.java
  3. 39 19
      fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java
  4. 5 4
      fs-company-app/src/main/java/com/fs/app/param/CompanyUserParam.java
  5. 17 0
      fs-company-app/src/main/java/com/fs/app/param/FsUserProjectUpdateParam.java
  6. 3 3
      fs-company-app/src/main/java/com/fs/app/param/FsUserTagUpdateParam.java
  7. 0 5
      fs-company-app/src/main/java/com/fs/app/param/FsUserUpdateParam.java
  8. 11 9
      fs-company/src/main/java/com/fs/users/controller/FsUserController.java
  9. 5 1
      fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  10. 8 0
      fs-service-system/src/main/java/com/fs/store/domain/FsUserCompanyUser.java
  11. 30 0
      fs-service-system/src/main/java/com/fs/store/domain/FsUserProjectTag.java
  12. 11 2
      fs-service-system/src/main/java/com/fs/store/mapper/FsUserCompanyUserMapper.java
  13. 19 0
      fs-service-system/src/main/java/com/fs/store/mapper/FsUserProjectTagMapper.java
  14. 4 4
      fs-service-system/src/main/java/com/fs/store/param/h5/FsUserPageListParam.java
  15. 12 1
      fs-service-system/src/main/java/com/fs/store/service/IFsUserCompanyUserService.java
  16. 33 0
      fs-service-system/src/main/java/com/fs/store/service/IFsUserProjectTagService.java
  17. 21 1
      fs-service-system/src/main/java/com/fs/store/service/impl/FsUserCompanyUserServiceImpl.java
  18. 105 0
      fs-service-system/src/main/java/com/fs/store/service/impl/FsUserProjectTagServiceImpl.java
  19. 14 36
      fs-service-system/src/main/java/com/fs/store/service/impl/FsUserServiceImpl.java
  20. 2 0
      fs-service-system/src/main/java/com/fs/store/vo/h5/FsUserPageListVO.java
  21. 18 1
      fs-service-system/src/main/resources/db/upgrade/20250625会员关联项目.sql
  22. 20 1
      fs-service-system/src/main/resources/mapper/store/FsUserCompanyUserMapper.xml
  23. 18 16
      fs-service-system/src/main/resources/mapper/store/FsUserMapper.xml
  24. 29 0
      fs-service-system/src/main/resources/mapper/store/FsUserProjectTagMapper.xml
  25. 4 3
      fs-user-app/src/main/java/com/fs/app/controller/WxCompanyUserController.java
  26. 2 2
      fs-user-app/src/main/java/com/fs/app/controller/WxH5MpController.java

+ 10 - 3
fs-admin/src/main/java/com/fs/store/controller/FsUserController.java

@@ -1,5 +1,6 @@
 package com.fs.store.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
@@ -9,14 +10,16 @@ import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.ParseUtils;
 import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.company.dto.UserProjectDTO;
 import com.fs.store.domain.FsUser;
 import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.store.service.IFsUserCompanyUserService;
 import com.fs.store.service.IFsUserService;
 import com.fs.store.vo.FSUserVO;
 import com.fs.store.vo.h5.FsUserPageListVO;
-import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -31,12 +34,15 @@ import java.util.Map;
  * @author fs
  * @date 2022-03-15
  */
+@Slf4j
 @RestController
 @RequestMapping("/store/user")
 public class FsUserController extends BaseController
 {
     @Autowired
     private IFsUserService fsUserService;
+    @Autowired
+    private IFsUserCompanyUserService userCompanyUserService;
 
     /**
      * 查询用户列表
@@ -174,8 +180,9 @@ public class FsUserController extends BaseController
     @PreAuthorize("@ss.hasPermi('store:user:enabledUsers')")
     @PostMapping("/enabledUsers")
     @ApiOperation("批量启用会员")
-    public ResponseResult<Boolean> enabledUsers(@RequestBody String[] ids) {
-        Boolean r = fsUserService.disabledUser(ids, true);
+    public ResponseResult<Boolean> enabledUsers(@RequestBody List<UserProjectDTO> ids) {
+        log.debug("批量启用会员 ids: {}", JSON.toJSONString(ids));
+        Boolean r = userCompanyUserService.batchUpdateUserProjectStatus(ids, 1);
         return ResponseResult.ok(r);
     }
 }

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

@@ -165,13 +165,18 @@ public class CompanyUserController extends AppBaseController {
     @ApiOperation("注册")
     @PostMapping("/resisterCompanyUser")
     public R resisterCompanyUser(@Valid @RequestBody CompanyUserParam param) {
-        Company company = companyService.selectCompanyById(param.getCompanyId());
+        CompanyUser upCompanyUser = companyUserService.selectCompanyUserById(param.getCompanyUserId());
+        if (Objects.isNull(upCompanyUser)) {
+            return R.error("邀请销售不存在");
+        }
+
+        Company company = companyService.selectCompanyById(upCompanyUser.getCompanyId());
         if (Objects.isNull(company)) {
             return R.error("公司不存在");
         }
 
         // 判断用户数量是否已达到上线
-        Integer count = companyUserService.selectCompanyUserCountByCompanyId(param.getCompanyId());
+        Integer count = companyUserService.selectCompanyUserCountByCompanyId(upCompanyUser.getCompanyId());
         if(count > company.getLimitUserCount()) {
             return R.error("用户数量已达到上限");
         }
@@ -197,7 +202,7 @@ public class CompanyUserController extends AppBaseController {
         companyUser.setIsAudit(0);
 
         // 部门
-        CompanyDept dept = companyDeptService.getDefaultCompanyDeptByCompanyId(param.getCompanyId());
+        CompanyDept dept = companyDeptService.getDefaultCompanyDeptByCompanyId(upCompanyUser.getCompanyId());
         if (Objects.nonNull(dept)) {
             companyUser.setDeptId(dept.getDeptId());
         }

+ 39 - 19
fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.app.annotation.Login;
 import com.fs.app.config.ImageStorageConfig;
+import com.fs.app.param.FsUserProjectUpdateParam;
 import com.fs.app.param.FsUserTagUpdateParam;
 import com.fs.app.param.FsUserUpdateParam;
 import com.fs.common.core.domain.R;
@@ -12,18 +13,21 @@ import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.exception.ServiceException;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.CompanyUser;
-import com.fs.company.service.ICompanyTagUserService;
+import com.fs.company.dto.UserProjectDTO;
 import com.fs.company.service.ICompanyUserService;
 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.domain.FsUser;
+import com.fs.store.domain.FsUserCompanyUser;
 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;
+import com.fs.store.service.IFsUserCompanyUserService;
 import com.fs.store.service.IFsUserCourseCountService;
+import com.fs.store.service.IFsUserProjectTagService;
 import com.fs.store.service.IFsUserService;
 import com.fs.store.vo.h5.*;
 import com.fs.system.service.ISysConfigService;
@@ -58,9 +62,6 @@ public class FsUserController extends AppBaseController {
     @Autowired
     private ICompanyUserService companyUserService;
 
-    @Autowired
-    private ICompanyTagUserService companyTagUserService;
-
     @Autowired
     private ImageStorageConfig imageConfig;
 
@@ -73,10 +74,16 @@ public class FsUserController extends AppBaseController {
     @Autowired
     private ISysConfigService configService;
 
+    @Autowired
+    private IFsUserCompanyUserService userCompanyUserService;
+    @Autowired
+    private IFsUserProjectTagService userProjectTagService;
+
     @Login
     @PostMapping("/pageList")
     @ApiOperation("用户会员分页列表")
     public ResponseResult<PageInfo<FsUserPageListVO>> pageList(@RequestBody FsUserPageListParam param) {
+        log.debug("用户会员分页列表 param: {}", JSON.toJSONString(param));
         param.setUserId(Long.parseLong(getUserId()));
 //        PageHelper.startPage(param.getPageNum(), param.getPageSize());
         PageInfo<FsUserPageListVO> fsUserPageListVOPageInfo = fsUserService.selectFsUserPageList(param);
@@ -113,9 +120,10 @@ public class FsUserController extends AppBaseController {
     @GetMapping("/tagList")
     @ApiOperation("用户会员标签列表")
     public ResponseResult<PageInfo<CompanyUserTagListVO>> getTagList(TagListParam param) {
+        log.debug("用户会员标签列表 param: {}", JSON.toJSONString(param));
         param.setUserId(Long.parseLong(getUserId()));
         PageHelper.startPage(param.getPageNum(), param.getPageSize());
-        List<CompanyUserTagListVO> tagList = companyTagUserService.getTagList(param);
+        List<CompanyUserTagListVO> tagList = userProjectTagService.getTagList(param);
         PageInfo<CompanyUserTagListVO> pageInfo = new PageInfo<>(tagList);
         return ResponseResult.ok(pageInfo);
     }
@@ -123,22 +131,18 @@ public class FsUserController extends AppBaseController {
     @Login
     @PostMapping("/disabled")
     @ApiOperation("批量禁用会员")
-    public ResponseResult<Boolean> disabledUser(@ApiParam(value = "联系人id集合", required = true) @RequestBody String[] ids) {
-        Boolean r = fsUserService.disabledUser(ids, false);
+    public ResponseResult<Boolean> disabledUser(@ApiParam(value = "联系人id集合", required = true) @RequestBody List<UserProjectDTO> ids) {
+        log.debug("批量禁用会员 ids: {}", JSON.toJSONString(ids));
+        Boolean r = userCompanyUserService.batchUpdateUserProjectStatus(ids, 2);
         return ResponseResult.ok(r);
     }
 
     @Login
     @PostMapping("/enabled")
     @ApiOperation("批量启用会员")
-    public ResponseResult<Boolean> enabledUser(@ApiParam(value = "联系人id集合", required = true) @RequestBody String[] ids) {
-        // 如果存在重粉的数据,则禁止启用,需要提示
-        long companyUserId = Long.parseLong(getUserId());
-        Integer count = fsUserService.selectFsUserByUserIds(ids, companyUserId);
-        if(count > 0){
-            return ResponseResult.fail(400, "重粉会员不能移除小黑屋");
-        }
-        Boolean r = fsUserService.disabledUser(ids, true);
+    public ResponseResult<Boolean> enabledUser(@ApiParam(value = "联系人id集合", required = true) @RequestBody List<UserProjectDTO> ids) {
+        log.debug("批量启用会员 ids: {}", JSON.toJSONString(ids));
+        Boolean r = userCompanyUserService.batchUpdateUserProjectStatus(ids, 1);
         return ResponseResult.ok(r);
     }
 
@@ -245,26 +249,41 @@ public class FsUserController extends AppBaseController {
     }
 
     @Login
-    @ApiOperation("修改用户备注、姓名")
+    @ApiOperation("修改用户姓名")
     @PostMapping("/changeUserInfo")
     public ResponseResult<Object> changeUserInfo(@Valid @RequestBody FsUserUpdateParam param) {
-        log.debug("修改用户备注、姓名 param:{}", JSON.toJSONString(param));
+        log.debug("修改用户姓名 param:{}", JSON.toJSONString(param));
         FsUser fsUser = fsUserService.selectFsUserById(param.getFsUserId());
         if (Objects.isNull(fsUser)) {
             throw new ServiceException("用户不存在");
         }
 
         fsUser.setNickname(param.getNickName());
-        fsUser.setRemark(param.getRemark());
         fsUserService.updateFsUser(fsUser);
         return ResponseResult.ok();
     }
 
+    @Login
+    @ApiOperation("修改用户项目备注")
+    @PostMapping("/changeUserRemark")
+    public ResponseResult<Object> changeUserProjectRemark(@Valid @RequestBody FsUserProjectUpdateParam param) {
+        log.debug("修改用户备注 param:{}", JSON.toJSONString(param));
+        FsUserCompanyUser userCompanyUser = userCompanyUserService.selectFsUserCompanyUserById(param.getUserCompanyUserId());
+        if (Objects.isNull(userCompanyUser)) {
+            throw new ServiceException("用户不存在");
+        }
+
+        userCompanyUser.setRemark(param.getRemark());
+        userCompanyUserService.updateFsUserCompanyUser(userCompanyUser);
+        return ResponseResult.ok();
+    }
+
     @Login
     @ApiOperation("修改用户标签")
     @PostMapping("/changeUserTags")
     public ResponseResult<Object> changeUserTags(@Valid @RequestBody FsUserTagUpdateParam param) {
-        companyTagUserService.changeUserTags(param.getFsUserIds(), param.getTagIds(), getCompanyId(), getCompanyUserId());
+        log.debug("修改用户标签 param:{}", JSON.toJSONString(param));
+        userProjectTagService.addUserProjectTag(param.getUserCompanyUserIds(), param.getTagIds());
         return ResponseResult.ok();
     }
 
@@ -306,6 +325,7 @@ public class FsUserController extends AppBaseController {
     @ApiOperation("会员关联绑定销售")
     @PostMapping("/beMember")
     public ResponseResult<Boolean> becomeMember(@Valid @RequestBody FsUserCourseBeMemberParam param) {
+        log.debug("会员关联绑定销售 param:{}", JSON.toJSONString(param));
         return fsUserService.becomeMember(param);
     }
 

+ 5 - 4
fs-company-app/src/main/java/com/fs/app/param/CompanyUserParam.java

@@ -1,5 +1,6 @@
 package com.fs.app.param;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
@@ -7,12 +8,12 @@ import javax.validation.constraints.NotNull;
 
 @Data
 public class CompanyUserParam {
-
     /**
-     * 公司ID
+     * 上级销售
      */
-    @NotNull(message = "公司ID不能为空")
-    private Long companyId;
+    @NotNull(message = "上级销售不能为空")
+    @ApiModelProperty("上级销售不能为空")
+    private Long companyUserId;
     /**
      * 手机号码
      */

+ 17 - 0
fs-company-app/src/main/java/com/fs/app/param/FsUserProjectUpdateParam.java

@@ -0,0 +1,17 @@
+package com.fs.app.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class FsUserProjectUpdateParam {
+
+    @ApiModelProperty("用户项目ID")
+    @NotNull(message = "用户项目ID不能为空")
+    private Long userCompanyUserId;
+
+    @ApiModelProperty("备注")
+    private String remark;
+}

+ 3 - 3
fs-company-app/src/main/java/com/fs/app/param/FsUserTagUpdateParam.java

@@ -11,9 +11,9 @@ public class FsUserTagUpdateParam {
     /**
      * 用户ID
      */
-    @ApiModelProperty("用户ID集合")
-    @NotEmpty(message = "用户ID不能为空")
-    private List<Long> fsUserIds;
+    @ApiModelProperty("用户项目ID集合")
+    @NotEmpty(message = "用户项目ID不能为空")
+    private List<Long> userCompanyUserIds;
     /**
      * 标签ID
      */

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

@@ -18,9 +18,4 @@ public class FsUserUpdateParam {
      */
     @ApiModelProperty("用户昵称")
     private String nickName;
-    /**
-     * 用户备注
-     */
-    @ApiModelProperty("用户备注")
-    private String remark;
 }

+ 11 - 9
fs-company/src/main/java/com/fs/users/controller/FsUserController.java

@@ -1,5 +1,6 @@
 package com.fs.users.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
@@ -8,16 +9,18 @@ import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.ServletUtils;
+import com.fs.company.dto.UserProjectDTO;
 import com.fs.core.security.LoginUser;
 import com.fs.core.web.service.TokenService;
 import com.fs.store.domain.FsUser;
 import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.store.service.IFsUserCompanyUserService;
 import com.fs.store.service.IFsUserService;
 import com.fs.store.vo.FsCompanyUserListQueryVO;
 import com.fs.store.vo.h5.FsUserPageListVO;
-import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -32,6 +35,7 @@ import java.util.Map;
  * @author fs
  * @date 2022-03-15
  */
+@Slf4j
 @RestController
 @RequestMapping("/users/user")
 public class FsUserController extends BaseController
@@ -40,6 +44,9 @@ public class FsUserController extends BaseController
     private IFsUserService fsUserService;
     @Autowired
     private TokenService tokenService;
+    @Autowired
+    private IFsUserCompanyUserService userCompanyUserService;
+
     /**
      * 查询用户列表
      */
@@ -144,14 +151,9 @@ public class FsUserController extends BaseController
     @PreAuthorize("@ss.hasPermi('users:user:enabledUsers')")
     @PostMapping("/enabledUsers")
     @ApiOperation("批量启用会员")
-    public ResponseResult<Boolean> enabledUsers(@RequestBody String[] ids) {
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        Integer count = fsUserService.selectFsUserByUserIds(ids, loginUser.getUser().getUserId());
-        if(count > 0){
-            return ResponseResult.fail(400, "重粉会员不能移除小黑屋");
-        }
-
-        Boolean r = fsUserService.disabledUser(ids, true);
+    public ResponseResult<Boolean> enabledUsers(@RequestBody List<UserProjectDTO> ids) {
+        log.debug("批量启用会员 ids: {}", JSON.toJSONString(ids));
+        Boolean r = userCompanyUserService.batchUpdateUserProjectStatus(ids, 1);
         return ResponseResult.ok(r);
     }
 }

+ 5 - 1
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -1009,11 +1009,15 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         }
 
         // 如果开启了黑名单审核,需要提示
-        if(fsUser.getStatus() == 0) {
+        if(userCompanyUser.getStatus() == 0) {
 //            return ResponseResult.fail(505, "管理开启了会员审核,请等待审核");
             return ResponseResult.fail(BizResponseEnum.WAIT_APPROVAL,getCompanyUserQRCode(companyUser));
         }
 
+        if (userCompanyUser.getStatus() == 2) {
+            return ResponseResult.fail(504, "已被拉黑,请联系管理员");
+        }
+
         //查询看课记录
 //        FsCourseWatchLog watchCourseVideo = courseWatchLogMapper.getWatchCourseVideoByFsUser(param.getUserId(), param.getVideoId(), param.getCompanyUserId());
         FsCourseWatchLog watchCourseVideo = courseWatchLogMapper.getCourseWatchLogByUser(param.getUserId(), param.getVideoId());

+ 8 - 0
fs-service-system/src/main/java/com/fs/store/domain/FsUserCompanyUser.java

@@ -53,4 +53,12 @@ public class FsUserCompanyUser {
      * 企微主体ID
      */
     private Long qwCompanyId;
+    /**
+     * 状态 0小黑屋 1正常 2拉黑
+     */
+    private Integer status;
+    /**
+     * 备注
+     */
+    private String remark;
 }

+ 30 - 0
fs-service-system/src/main/java/com/fs/store/domain/FsUserProjectTag.java

@@ -0,0 +1,30 @@
+package com.fs.store.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("fs_user_project_tag")
+public class FsUserProjectTag {
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /**
+     * 用户项目ID
+     */
+    private Long userCompanyUserId;
+    /**
+     * 标签ID
+     */
+    private Long tagId;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+}

+ 11 - 2
fs-service-system/src/main/java/com/fs/store/mapper/FsUserCompanyUserMapper.java

@@ -1,12 +1,13 @@
 package com.fs.store.mapper;
 
-import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.company.dto.UserProjectDTO;
 import com.fs.store.domain.FsUserCompanyUser;
 import com.fs.store.dto.FsUserTransferParamDTO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
-import org.apache.ibatis.annotations.Update;
+
+import java.util.List;
 
 /**
  * 微信用户和销售关系Mapper接口
@@ -79,4 +80,12 @@ public interface FsUserCompanyUserMapper extends BaseMapper<FsUserCompanyUser>{
     List<FsUserCompanyUser> selectRepeatCompanyUserName(@Param("userIds") List<Long> userIds);
 
     void transfer(@Param("param") FsUserTransferParamDTO transferParam);
+
+    /**
+     * 批量修改用户-项目状态
+     * @param ids       参数
+     * @param status    状态
+     * @return  count
+     */
+    int changeUserProjectStatus(@Param("ids") List<UserProjectDTO> ids, @Param("status") int status);
 }

+ 19 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsUserProjectTagMapper.java

@@ -0,0 +1,19 @@
+package com.fs.store.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.store.domain.FsUserProjectTag;
+import com.fs.store.vo.h5.CompanyUserTagListVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface FsUserProjectTagMapper extends BaseMapper<FsUserProjectTag> {
+
+    /**
+     * 查询用户项目标签列表
+     * @param params     参数
+     * @return  list
+     */
+    List<CompanyUserTagListVO> getTagList(@Param("params") Map<String, Object> params);
+}

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

@@ -24,9 +24,6 @@ public class FsUserPageListParam implements Serializable {
     @ApiModelProperty(value = "用户id,不用传")
     private Long userId;
 
-    @ApiModelProperty(value = "是否是黑名单,默认是false", required = true)
-    private Boolean isBlack = false;
-
     @ApiModelProperty(value = "销售id")
     private String companyUserId;
 
@@ -39,7 +36,7 @@ public class FsUserPageListParam implements Serializable {
     private String registerEndTime;
 
     @ApiModelProperty(value = "标签")
-    private String[] tagIds;
+    private Long[] tagIds;
 
     @ApiModelProperty(value = "tab序号,0全部;1今日新增;2今日完播;3未看过课")
     private String tabValue;
@@ -76,8 +73,11 @@ public class FsUserPageListParam implements Serializable {
     /**
      * 项目ID
      */
+    @ApiModelProperty(value = "项目ID")
     private Long projectId;
 
+    @ApiModelProperty(value = "状态 0小黑屋 1正常 2拉黑")
+    private Integer status;
 
 }
 

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

@@ -1,6 +1,7 @@
 package com.fs.store.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.company.dto.UserProjectDTO;
 import com.fs.store.domain.FsUserCompanyUser;
 
 import java.util.List;
@@ -92,12 +93,14 @@ public interface IFsUserCompanyUserService extends IService<FsUserCompanyUser>{
 
     /**
      * 绑定会员-项目-销售关系
+     *
      * @param userId        会员ID
      * @param projectId     项目ID
      * @param companyId     公司ID
      * @param companyUserId 销售ID
+     * @param status        状态 1正常 0小黑屋
      */
-    void bindRelationship(Long userId, Long projectId, Long companyId, Long companyUserId);
+    FsUserCompanyUser bindRelationship(Long userId, Long projectId, Long companyId, Long companyUserId, int status);
 
     /**
      * 修改会员-项目-销售关系
@@ -107,4 +110,12 @@ public interface IFsUserCompanyUserService extends IService<FsUserCompanyUser>{
      * @param companyUserId 销售ID
      */
     void changeRelationship(Long userId, Long projectId, Long companyId, Long companyUserId);
+
+    /**
+     * 修改会员-项目关系 状态
+     * @param ids       参数
+     * @param status    状态 0小黑屋 1正常 2拉黑
+     * @return Boolean
+     */
+    Boolean batchUpdateUserProjectStatus(List<UserProjectDTO> ids, int status);
 }

+ 33 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsUserProjectTagService.java

@@ -0,0 +1,33 @@
+package com.fs.store.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.store.domain.FsUserProjectTag;
+import com.fs.store.param.h5.TagListParam;
+import com.fs.store.vo.h5.CompanyUserTagListVO;
+
+import java.util.List;
+
+public interface IFsUserProjectTagService extends IService<FsUserProjectTag> {
+
+    /**
+     * 添加用户项目标签
+     * @param id        用户项目ID
+     * @param tagIds    标签ID集合
+     */
+    void addUserProjectTag(Long id, List<Long> tagIds);
+
+    /**
+     * 添加用户项目标签
+     * @param ids       用户项目ID集合
+     * @param tagIds    标签ID集合
+     */
+    void addUserProjectTag(List<Long> ids, List<Long> tagIds);
+
+    /**
+     * 查询用户项目标签列表
+     * @param param     参数
+     * @return  list
+     */
+    List<CompanyUserTagListVO> getTagList(TagListParam param);
+
+}

+ 21 - 1
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserCompanyUserServiceImpl.java

@@ -3,6 +3,8 @@ package com.fs.store.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.common.exception.CustomException;
+import com.fs.company.dto.UserProjectDTO;
 import com.fs.store.domain.FsUserCompanyUser;
 import com.fs.store.mapper.FsUserCompanyUserMapper;
 import com.fs.store.service.IFsUserCompanyUserService;
@@ -142,13 +144,15 @@ public class FsUserCompanyUserServiceImpl extends ServiceImpl<FsUserCompanyUserM
 
     /**
      * 绑定会员-项目-销售关系
+     *
      * @param userId        会员ID
      * @param projectId     项目ID
      * @param companyId     公司ID
      * @param companyUserId 销售ID
+     * @param status        状态 0小黑屋 1正常
      */
     @Override
-    public void bindRelationship(Long userId, Long projectId, Long companyId, Long companyUserId) {
+    public FsUserCompanyUser bindRelationship(Long userId, Long projectId, Long companyId, Long companyUserId, int status) {
         FsUserCompanyUser userCompanyUser = new FsUserCompanyUser();
         userCompanyUser.setUserId(userId);
         userCompanyUser.setProjectId(projectId);
@@ -157,7 +161,9 @@ public class FsUserCompanyUserServiceImpl extends ServiceImpl<FsUserCompanyUserM
 //        boolean hasBind = hasBind(userId, companyUserId);
 //        userCompanyUser.setIsRepeatFans(hasBind ? 1 : 0);
         userCompanyUser.setIsRepeatFans(0);
+        userCompanyUser.setStatus(status);
         save(userCompanyUser);
+        return userCompanyUser;
     }
 
     /**
@@ -180,4 +186,18 @@ public class FsUserCompanyUserServiceImpl extends ServiceImpl<FsUserCompanyUserM
             updateById(userCompanyUser);
         }
     }
+
+    /**
+     * 修改会员-项目关系 状态
+     * @param ids       参数
+     * @param status    状态 0小黑屋 1正常 2拉黑
+     * @return Boolean
+     */
+    @Override
+    public Boolean batchUpdateUserProjectStatus(List<UserProjectDTO> ids, int status) {
+        if (Objects.isNull(ids) || ids.isEmpty()) {
+            throw new CustomException("请先选择会员");
+        }
+        return baseMapper.changeUserProjectStatus(ids, status) > 0;
+    }
 }

+ 105 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserProjectTagServiceImpl.java

@@ -0,0 +1,105 @@
+package com.fs.store.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.store.domain.FsUserProjectTag;
+import com.fs.store.mapper.FsUserProjectTagMapper;
+import com.fs.store.param.h5.TagListParam;
+import com.fs.store.service.IFsUserProjectTagService;
+import com.fs.store.vo.h5.CompanyUserTagListVO;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class FsUserProjectTagServiceImpl extends ServiceImpl<FsUserProjectTagMapper, FsUserProjectTag> implements IFsUserProjectTagService {
+
+    @Resource
+    private CompanyUserMapper companyUserMapper;
+
+    /**
+     * 添加用户项目标签
+     * @param id        用户项目ID
+     * @param tagIds    标签ID集合
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void addUserProjectTag(Long id, List<Long> tagIds) {
+        // 删除原有标签
+        LambdaUpdateWrapper<FsUserProjectTag> deleteWrapper = Wrappers.<FsUserProjectTag>lambdaUpdate()
+                .eq(FsUserProjectTag::getUserCompanyUserId, id);
+        baseMapper.delete(deleteWrapper);
+
+        // 添加新标签
+        List<FsUserProjectTag> tagList = tagIds.stream().distinct().map(tagId -> {
+            FsUserProjectTag userProjectTag = new FsUserProjectTag();
+            userProjectTag.setUserCompanyUserId(id);
+            userProjectTag.setTagId(tagId);
+            userProjectTag.setCreateTime(LocalDateTime.now());
+            return userProjectTag;
+        }).collect(Collectors.toList());
+
+        if (!tagList.isEmpty()) {
+            saveBatch(tagList);
+        }
+    }
+
+    /**
+     * 添加用户项目标签
+     * @param ids       用户项目ID集合
+     * @param tagIds    标签ID集合
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void addUserProjectTag(List<Long> ids, List<Long> tagIds) {
+        // 删除原有标签
+        LambdaUpdateWrapper<FsUserProjectTag> deleteWrapper = Wrappers.<FsUserProjectTag>lambdaUpdate()
+                .in(FsUserProjectTag::getUserCompanyUserId, ids);
+        baseMapper.delete(deleteWrapper);
+
+        if (tagIds.isEmpty()) {
+            return;
+        }
+
+        // 添加新标签
+        List<FsUserProjectTag> tagList = ids.stream().map(id ->
+                tagIds.stream().distinct().map(tagId -> {
+            FsUserProjectTag userProjectTag = new FsUserProjectTag();
+            userProjectTag.setUserCompanyUserId(id);
+            userProjectTag.setTagId(tagId);
+            userProjectTag.setCreateTime(LocalDateTime.now());
+            return userProjectTag;
+        }).collect(Collectors.toList())).flatMap(List::stream).collect(Collectors.toList());
+
+        if (!tagList.isEmpty()) {
+            saveBatch(tagList);
+        }
+    }
+
+    /**
+     * 查询用户项目标签列表
+     * @param param     参数
+     * @return  list
+     */
+    @Override
+    public List<CompanyUserTagListVO> getTagList(TagListParam param) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("keywords", Optional.ofNullable(param.getKeyword()).map(keyword -> keyword.split(",")).orElse(null));
+
+        CompanyUser companyUser = companyUserMapper.selectCompanyUserById(param.getUserId());
+        if (Objects.nonNull(companyUser) && companyUser.isAdmin()) {
+            params.put("companyId", companyUser.getCompanyId());
+        } else {
+            params.put("companyUserId", param.getUserId());
+        }
+
+        return baseMapper.getTagList(params);
+    }
+}

+ 14 - 36
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserServiceImpl.java

@@ -31,9 +31,6 @@ import com.fs.course.vo.newfs.FsCourseAnalysisCountVO;
 import com.fs.course.vo.newfs.FsCourseAnalysisVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
 import com.fs.his.vo.OptionsVO;
-import com.fs.qw.cache.IQwExternalContactCacheService;
-import com.fs.qw.mapper.QwExternalContactMapper;
-import com.fs.qw.mapper.QwSessionMapper;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
 import com.fs.store.domain.*;
@@ -42,14 +39,15 @@ import com.fs.store.dto.FsUserTransferParamDTO;
 import com.fs.store.enums.BillDetailEnum;
 import com.fs.store.mapper.FsStoreOrderMapper;
 import com.fs.store.mapper.FsStoreProductAttrValueMapper;
+import com.fs.store.mapper.FsUserCourseCountMapper;
 import com.fs.store.mapper.FsUserMapper;
-import com.fs.store.mapper.*;
 import com.fs.store.param.SelectCusListPageParam;
 import com.fs.store.param.h5.CourseAnalysisParam;
 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.IFsUserCompanyUserService;
+import com.fs.store.service.IFsUserProjectTagService;
 import com.fs.store.service.IFsUserService;
 import com.fs.store.service.cache.IFsUserCourseCountCacheService;
 import com.fs.store.vo.FSUserVO;
@@ -122,9 +120,6 @@ public class FsUserServiceImpl implements IFsUserService
     @Autowired
     private ICompanyTagCacheService companyTagCacheService;
 
-    @Autowired
-    private IQwExternalContactCacheService qwExternalContactCacheService;
-
     @Autowired
     private IFsUserCompanyUserService userCompanyUserService;
 
@@ -133,16 +128,16 @@ public class FsUserServiceImpl implements IFsUserService
 
     @Autowired
     CompanyTagMapper companyTagMapper;
-    @Autowired
-    private QwSessionMapper qwSessionMapper;
-    @Autowired
-    private QwExternalContactMapper qwExternalContactMapper;
+
     @Autowired
     private SysDictDataMapper dictDataMapper;
 
     @Autowired
     private FsUserCourseCountMapper fsUserCourseCountMapper;
 
+    @Autowired
+    private IFsUserProjectTagService userProjectTagService;
+
     /**
      * 查询用户
      *
@@ -944,37 +939,20 @@ public class FsUserServiceImpl implements IFsUserService
             return ResponseResult.fail(406,"该用户已成为其他销售会员");
         }
 
-        // 添加关系表数据
-        if (Objects.isNull(userCompanyUser)){
-            userCompanyUserService.bindRelationship(param.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId());
-        }
-
         // 特殊(需求设计:需要根据公司是否开启黑名单来设置会员初始化的状态)
-        Company company = null;
-        if(param.getCompanyId() != null) {
-            company = companyMapper.selectCompanyById(param.getCompanyId());
-        }
+        Company company = companyMapper.selectCompanyById(param.getCompanyId());
         // isDefaultBlack 值为1 ,表示需要加入小黑屋,否则不加
         int isDefaultBlack = company != null ? company.getFsUserIsDefaultBlack() : 0;
-        fsUser.setStatus(isDefaultBlack == 1 ? 0 : 1);
-        fsUserMapper.updateFsUser(fsUser);
+
+        // 添加关系表数据
+        if (Objects.isNull(userCompanyUser)){
+            int defaultStatus = isDefaultBlack == 1 ? 0 : 1;
+            userCompanyUser = userCompanyUserService.bindRelationship(param.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId(), defaultStatus);
+        }
 
         // 不为空则添加新标签
         if (Objects.nonNull(param.getTagIds()) && param.getTagIds().length > 0) {
-            //关联会员标签,先删除再新增
-            Map<String, Object> map = new HashMap<>();
-            map.put("userId", param.getUserId());
-            map.put("companyId", companyUser.getCompanyId());
-            map.put("companyUserId", companyUser.getUserId());
-            companyTagUserMapper.deleteCompanyTagUserByMap(map);
-
-            CompanyTagUser companyTagUser = new CompanyTagUser();
-            companyTagUser.setUserId(param.getUserId());
-            companyTagUser.setCompanyId(companyUser.getCompanyId());
-            companyTagUser.setCompanyUserId(companyUser.getUserId());
-            companyTagUser.setTagIds(String.join(",", param.getTagIds()));
-            companyTagUser.setCreateTime(new Date());
-            companyTagUserMapper.insertCompanyTagUser(companyTagUser);
+            userProjectTagService.addUserProjectTag(userCompanyUser.getId(), Arrays.stream(param.getTagIds()).map(Long::valueOf).collect(Collectors.toList()));
         }
 
 //        // 如果是重粉,直接打上重粉的标签

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

@@ -97,5 +97,7 @@ public class FsUserPageListVO {
     private Long projectId;
     @ApiModelProperty(value = "项目名称")
     private String projectName;
+    @ApiModelProperty(value = "用户-项目-销售ID")
+    private Long userCompanyUserId;
 
 }

+ 18 - 1
fs-service-system/src/main/resources/db/upgrade/20250625会员关联项目.sql

@@ -11,4 +11,21 @@ alter table fs_user_company_user
     add column qw_company_id bigint comment '企微主体ID';
 
 alter table fs_user_course_video
-    add column project_id bigint comment '项目ID';
+    add column project_id bigint comment '项目ID';
+
+alter table fs_user_company_user
+    add column status tinyint default 1 comment '状态 0小黑屋 1正常 2拉黑';
+
+alter table fs_user_company_user
+    add column remark varchar(255) comment '备注';
+
+drop table if exists fs_user_project_tag;
+create table fs_user_project_tag (
+    `id`                             bigint        not null auto_increment comment '主键ID',
+    `user_company_user_id`           bigint                                comment '用户项目ID',
+    `tag_id`                         bigint                                comment '标签ID',
+    `create_time`                    datetime                              comment '创建时间',
+    primary key (`id`) using btree,
+    index idx_user_company_user_id(`user_company_user_id`) using btree,
+    index idx_tag_id(`tag_id`) using btree
+) engine = InnoDB comment = '用户项目标签表';

+ 20 - 1
fs-service-system/src/main/resources/mapper/store/FsUserCompanyUserMapper.xml

@@ -14,10 +14,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="qwUserId"    column="qw_user_id"    />
         <result property="qwExternalContactId"    column="qw_external_contact_id"    />
         <result property="qwCompanyId"    column="qw_company_id"    />
+        <result property="status"    column="status"    />
+        <result property="remark"    column="remark"    />
     </resultMap>
 
     <sql id="selectFsUserCompanyUserVo">
-        select id, user_id, company_user_id, company_id, is_repeat_fans, project_id, qw_user_id, qw_external_contact_id, qw_company_id from fs_user_company_user
+        select id, user_id, company_user_id, company_id, is_repeat_fans, project_id, qw_user_id, qw_external_contact_id, qw_company_id, `status`, remark from fs_user_company_user
     </sql>
 
     <select id="selectFsUserCompanyUserList" parameterType="FsUserCompanyUser" resultMap="FsUserCompanyUserResult">
@@ -31,6 +33,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="qwUserId != null "> and qw_user_id = #{qwUserId}</if>
             <if test="qwExternalContactId != null "> and qw_external_contact_id = #{qwExternalContactId}</if>
             <if test="qwCompanyId != null "> and qw_company_id = #{qwCompanyId}</if>
+            <if test="status != null "> and `status` = #{status}</if>
+            <if test="remark != null "> and remark = #{remark}</if>
         </where>
     </select>
 
@@ -51,6 +55,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="qwUserId != null">qw_user_id,</if>
             <if test="qwExternalContactId != null">qw_external_contact_id,</if>
             <if test="qwCompanyId != null">qw_company_id,</if>
+            <if test="status != null">`status`,</if>
+            <if test="remark != null">remark,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -62,6 +68,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="qwUserId != null">#{qwUserId},</if>
             <if test="qwExternalContactId != null">#{qwExternalContactId},</if>
             <if test="qwCompanyId != null">#{qwCompanyId},</if>
+            <if test="status != null">#{status},</if>
+            <if test="remark != null">#{remark},</if>
          </trim>
     </insert>
 
@@ -76,6 +84,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="qwUserId != null">qw_user_id = #{qwUserId},</if>
             <if test="qwExternalContactId != null">qw_external_contaact_id = #{qwExternalContactId},</if>
             <if test="qwCompanyId != null">qw_company_id = #{qwCompanyId},</if>
+            <if test="status != null">`status` = #{status},</if>
+            <if test="remark != null">remark = #{remark},</if>
         </trim>
         where id = #{id}
     </update>
@@ -91,6 +101,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
     </update>
 
+    <update id="changeUserProjectStatus">
+        update fs_user_company_user ucu
+        set ucu.`status` = #{status}
+        where (ucu.user_id, ucu.project_id) in
+        <foreach collection="ids" item="item" separator="," open="(" close=")">
+            (#{item.userId}, #{item.projectId})
+        </foreach>
+    </update>
+
     <delete id="deleteFsUserCompanyUserById" parameterType="Long">
         delete from fs_user_company_user where id = #{id}
     </delete>

+ 18 - 16
fs-service-system/src/main/resources/mapper/store/FsUserMapper.xml

@@ -525,7 +525,11 @@
 
     <select id="selectFsUserPageList" resultType="FsUserPageListVO">
         SELECT
-        fs_user.*,
+        fs_user.user_id,
+        fs_user.avatar,
+        fs_user.nickname,
+        fs_user.phone,
+        fs_user.create_time,
         fs_user_course_count.id,
         fs_user_course_count.watch_course_count,
         fs_user_course_count.miss_course_count,
@@ -540,13 +544,16 @@
         GROUP_CONCAT(DISTINCT company_tag.tag_id) AS tagIds,
         company_user.nick_name as companyUserNickName,
         fs_user_company_user.is_repeat_fans,
-        fs_user_company_user.project_id
+        fs_user_company_user.project_id,
+        fs_user_company_user.`status`,
+        fs_user_company_user.remark,
+        fs_user_company_user.id as userCompanyUserId
         FROM
         fs_user
+        INNER JOIN fs_user_company_user ON fs_user_company_user.user_id = fs_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
-        LEFT JOIN fs_user_company_user ON fs_user_company_user.user_id = fs_user.user_id
+        left join fs_user_project_tag upt ON upt.user_company_user_id = fs_user_company_user.id
+        LEFT JOIN company_tag ON company_tag.tag_id = upt.tag_id
         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 ">
@@ -555,14 +562,9 @@
         <if test="companyId != null ">
             and fs_user_company_user.company_id = #{companyId}
         </if>
-        <choose>
-            <when test = "isBlack">
-                AND (fs_user.status = 0)
-            </when>
-            <otherwise>
-                AND (fs_user.status = 1)
-            </otherwise>
-        </choose>
+        <if test="status != null">
+            AND fs_user_company_user.status = #{status}
+        </if>
         <if test="keyword != null and keyword !='' ">
             AND (fs_user.nickname LIKE concat('%',#{keyword},'%')
             or  fs_user.phone LIKE concat('%',#{keyword},'%')
@@ -575,9 +577,9 @@
             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=")">
-                CONCAT(',', company_tag_user.tag_ids, ',') LIKE CONCAT('%,', #{item}, ',%')
+            AND upt.tag_id in
+            <foreach collection="tagIds" item="item" index="index" open="(" separator="," close=")">
+                 #{item}
             </foreach>
         </if>
         <if test="tabValue != null and tabValue !='' ">

+ 29 - 0
fs-service-system/src/main/resources/mapper/store/FsUserProjectTagMapper.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.store.mapper.FsUserProjectTagMapper">
+
+    <select id="getTagList" resultType="com.fs.store.vo.h5.CompanyUserTagListVO">
+        select distinct
+            tag.tag_id,
+            tag.tag tagName
+        from company_tag tag
+        inner join fs_user_project_tag upt on tag.tag_id = upt.tag_id
+        inner join fs_user_company_user ucu on ucu.id = upt.user_company_user_id
+        <where>
+            <if test="params.companyId != null">
+                and ucu.company_id = #{params.companyId}
+            </if>
+            <if test="params.companyUserId != null">
+                and ucu.company_user_id = #{params.companyUserId}
+            </if>
+            <if test="params.keywords != null and params.keywords.length > 0 ">
+                and
+                <foreach item="item" collection="params.keywords" open="(" separator="or" close=")">
+                    tag.tag like concat('%',#{item},'%')
+                </foreach>
+            </if>
+        </where>
+    </select>
+</mapper>

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

@@ -160,6 +160,8 @@ public class WxCompanyUserController extends AppBaseController {
                 } else {
                     user = userService.selectFsUserByMaOpenId(session.getOpenid());
                 }
+                // 绑定关系默认状态
+                int defaultStatus = (company != null ? company.getFsUserIsDefaultBlack() : 0) == 1 ? 0 : 1;
                 if (user != null) {
                     //修改
                     FsUser userMap = new FsUser();
@@ -180,7 +182,7 @@ public class WxCompanyUserController extends AppBaseController {
                             (companyUser.getIsAllowedAllRegister() == null || companyUser.getIsAllowedAllRegister() == 1)
                             && companyUser.getIsNeedRegisterMember() != null && companyUser.getIsNeedRegisterMember() != 1){
                         if (Objects.isNull(userCompanyUser)) {
-                            userCompanyUserService.bindRelationship(user.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId());
+                            userCompanyUserService.bindRelationship(user.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId(), defaultStatus);
                         }
                     }
                     userService.updateFsUser(userMap);
@@ -189,7 +191,6 @@ public class WxCompanyUserController extends AppBaseController {
                     user = new FsUser();
                     user.setNickname(param.getNickname() != null ? param.getNickname() : "微信用户");
                     user.setAvatar(param.getAvatar() != null ? param.getAvatar() : null);
-                    user.setStatus((company != null ? company.getFsUserIsDefaultBlack() : 0) == 1 ? 0 : 1);
                     user.setMaOpenId(session.getOpenid());
                     user.setUnionId(session.getUnionid());
                     user.setCreateTime(new Date());
@@ -198,7 +199,7 @@ public class WxCompanyUserController extends AppBaseController {
                     if(companyUser != null &&
                             (companyUser.getIsAllowedAllRegister() == null || companyUser.getIsAllowedAllRegister() == 1)
                             && companyUser.getIsNeedRegisterMember() != null && companyUser.getIsNeedRegisterMember() != 1){
-                        userCompanyUserService.bindRelationship(user.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId());
+                        userCompanyUserService.bindRelationship(user.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId(), defaultStatus);
                     }
                 }
             } else {

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

@@ -101,13 +101,13 @@ public class WxH5MpController {
                 user = new FsUser();
                 user.setNickname(wxMpUser.getNickname());
                 user.setAvatar(wxMpUser.getHeadImgUrl());
-                user.setStatus((company != null ? company.getFsUserIsDefaultBlack() : 0) == 1 ? 0 : 1);
                 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){
-                    userCompanyUserService.bindRelationship(user.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId());
+                    int defaultStatus = (company != null ? company.getFsUserIsDefaultBlack() : 0) == 1 ? 0 : 1;
+                    userCompanyUserService.bindRelationship(user.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId(), defaultStatus);
                 }
             }
             log.error("用户信息user: {}, 用户id: {}", user, user.getUserId());