Pārlūkot izejas kodu

销售关联自己的用户账号

xgb 2 nedēļas atpakaļ
vecāks
revīzija
5634002473

+ 8 - 0
fs-company/src/main/java/com/fs/company/controller/company/CompanyProfileController.java

@@ -10,8 +10,10 @@ import com.fs.common.enums.ImTypeEnum;
 import com.fs.common.exception.file.OssException;
 import com.fs.common.utils.PatternUtils;
 import com.fs.common.utils.ServletUtils;
+import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.file.FileUploadUtils;
 import com.fs.company.domain.CompanyUser;
+import com.fs.company.mapper.CompanyFsUserMapper;
 import com.fs.company.param.CompanyUserEditParam;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.framework.security.LoginUser;
@@ -47,6 +49,8 @@ public class CompanyProfileController extends BaseController
 
     @Autowired
     private OpenIMService openIMService;
+    @Autowired
+    private CompanyFsUserMapper companyFsUserMapper;
     /**
      * 个人信息
      */
@@ -55,6 +59,10 @@ public class CompanyProfileController extends BaseController
     {
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         CompanyUser user = loginUser.getUser();
+        String fsUser = companyFsUserMapper.selectUserListBySalesId(user.getUserId());
+        if(StringUtils.isNotEmpty(fsUser)){
+            user.setFsUserId(fsUser);
+        }
         AjaxResult ajax = AjaxResult.success(user);
         ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
         ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));

+ 43 - 0
fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java

@@ -30,10 +30,13 @@ import com.fs.company.vo.CompanyUserQwListVO;
 import com.fs.company.vo.CompanyUserVO;
 import com.fs.config.cloud.CloudHostProper;
 import com.fs.course.config.CourseConfig;
+import com.fs.course.domain.FsUserCompanyUser;
 import com.fs.framework.security.LoginUser;
 import com.fs.framework.security.SecurityUtils;
 import com.fs.framework.service.TokenService;
+import com.fs.his.domain.FsUser;
 import com.fs.his.utils.qrcode.QRCodeUtils;
+import com.fs.his.vo.CompanyUserBindUserVO;
 import com.fs.his.vo.OptionsVO;
 import com.fs.hisStore.service.IFsUserScrmService;
 import com.fs.hisStore.vo.FsStoreProductExportVO;
@@ -905,4 +908,44 @@ public class CompanyUserController extends BaseController {
         List<com.fs.hisStore.domain.FsUserScrm> userList = companyUserService.selectBoundFsUsersByCompanyUserId(companyUserId);
         return R.ok().put("data", userList);
     }
+
+    /**
+     * 绑定销售和fs_user 的关系(该销售绑定fs_user)
+     */
+    @ApiOperation("绑定销售和fs_user 的关系(该销售绑定fs_user)")
+//    @PreAuthorize("@ss.hasPermi('company:user:bindUser')")
+    @PostMapping("/bindSaleAndFsUser")
+    public R bindSaleAndFsUser(@RequestBody FsUserCompanyUser companyUser){
+        int i = companyUserService.bindCompanyUserAndFsUser(companyUser.getCompanyUserId(), companyUser.getUserId());
+        return i>0?R.ok():R.error("绑定失败");
+    }
+
+    /**
+     * 解绑销售和 fs_user 的关系
+     */
+    @ApiOperation("解绑销售和 fs_user 的关系")
+    @PostMapping("/unbindSaleAndFsUser")
+    public R unbindSaleAndFsUser(@RequestBody FsUserCompanyUser companyUser) {
+        try {
+            boolean result = companyUserService.unbindCompanyUserAndFsUser(companyUser.getCompanyUserId(), companyUser.getUserId());
+            return result ? R.ok("解绑成功") : R.error("解绑失败");
+        } catch (Exception e) {
+            logger.error("解绑销售和用户关系异常", e);
+            return R.error("操作失败:" + e.getMessage());
+        }
+    }
+
+
+    /**
+     * 获取销售绑定的fs_user
+     */
+
+    @GetMapping("/getFsUserBySaleId")
+    public  TableDataInfo getFsUserBySaleId(FsUser fsUser){
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        fsUser.setCompanyId(loginUser.getCompany().getCompanyId());
+        startPage();
+        List<CompanyUserBindUserVO> list = companyUserService.getFsUserByCompanyUserId(fsUser);
+        return getDataTable(list);
+    }
 }

+ 29 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyFsUser.java

@@ -0,0 +1,29 @@
+package com.fs.company.domain;
+
+import com.baidu.dev2.thirdparty.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class CompanyFsUser extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    private Long id;
+
+    /** fs_user 用户id */
+    @Excel(name = "fs_user 用户id")
+    private Long fsUserId;
+
+    /** company_user 销售id */
+    @Excel(name = "company_user 销售id")
+    private Long companyUserId;
+
+    /** 绑定状态 */
+    @Excel(name = "绑定状态")
+    private Integer status;
+
+}

+ 6 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyUser.java

@@ -204,6 +204,12 @@ public class CompanyUser extends BaseEntity
     @TableField(exist = false)
     private List<Long> deptList;
 
+    @TableField(exist = false)
+    /**
+     * 多个用户ID,逗号分隔
+     */
+    private  String  fsUserId;
+
     public String getMaOpenId() {
         return maOpenId;
     }

+ 53 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyFsUserMapper.java

@@ -0,0 +1,53 @@
+package com.fs.company.mapper;
+
+import com.fs.company.domain.CompanyFsUser;
+import com.fs.his.domain.FsUser;
+import com.fs.his.vo.CompanyUserBindUserVO;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+public interface CompanyFsUserMapper {
+
+    /**
+     * 新增公司用户绑定关系
+     *
+     * @param companyFsUser 公司用户绑定关系
+     * @return 结果
+     */
+    public int insertCompanyFsUser(CompanyFsUser companyFsUser);
+
+    /**
+     * 根据FS用户ID查询绑定关系
+     *
+     * @param fsUserId FS用户ID
+     * @return 公司用户绑定关系
+     */
+    public CompanyFsUser selectByFsUserId(Long fsUserId);
+
+    /**
+     * 更新公司用户绑定关系
+     *
+     * @param companyFsUser 公司用户绑定关系
+     * @return 结果
+     */
+    public int updateCompanyFsUser(CompanyFsUser companyFsUser);
+
+    /**
+     * 销售公司用户列表
+     */
+    List<CompanyUserBindUserVO> selecUserList(FsUser fsUser);
+
+    /**
+     * 根据销售id 查询绑定的用户
+     */
+    String selectUserListBySalesId(Long companyUserId);
+
+    @Select("select * from company_fs_user where company_user_id=#{companyUserId} and fs_user_id=#{userId}")
+    CompanyFsUser selectByCompanyUserIdAndUserId(@Param("companyUserId") Long companyUserId, @Param("userId") Long userId);
+
+    @Delete("delete from company_fs_user WHERE id=#{id}")
+    int deleteById(Long id);
+}

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

@@ -7,7 +7,9 @@ import com.fs.company.param.CompanyUserAreaParam;
 import com.fs.company.param.CompanyUserCodeParam;
 import com.fs.company.param.CompanyUserQwParam;
 import com.fs.company.vo.*;
+import com.fs.his.domain.FsUser;
 import com.fs.his.vo.CitysAreaVO;
+import com.fs.his.vo.CompanyUserBindUserVO;
 import com.fs.his.vo.OptionsVO;
 import com.fs.hisStore.vo.FsStoreProductExportVO;
 import com.fs.qw.dto.UserProjectDTO;
@@ -286,4 +288,27 @@ public interface ICompanyUserService {
      * 根据销售绑定关系获取销售邀请码
      */
     CompanyUser getInviteCodeByCompanyUserIdAndUserId( Long userId);
+
+    /**
+     * 绑定销售和fs_user 的关系(该销售绑定fs_user)
+     */
+    int  bindCompanyUserAndFsUser(Long companyUserId, Long fsUserId);
+
+    /**
+     * 解绑销售和 fs_user 的关系
+     * @param companyUserId 销售 ID
+     * @param userId 用户 ID
+     * @return 是否删除成功
+     */
+    boolean unbindCompanyUserAndFsUser(Long companyUserId, Long userId);
+
+    /**
+     * 获取销售绑定的fs_user
+     */
+    List<CompanyUserBindUserVO> getFsUserByCompanyUserId(FsUser fsUser);
+
+    /**
+     * 获取销售绑定的fs_user
+     */
+    int countCompanyUserByUserId(Long userId);
 }

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

@@ -23,9 +23,12 @@ import com.fs.company.param.CompanyUserQwParam;
 import com.fs.company.service.*;
 import com.fs.company.vo.*;
 import com.fs.course.service.IFsUserCompanyUserService;
+import com.fs.his.domain.FsUser;
 import com.fs.his.mapper.FsUserMapper;
 import com.fs.his.service.IFsCityService;
+import com.fs.his.utils.PhoneUtil;
 import com.fs.his.vo.CitysAreaVO;
+import com.fs.his.vo.CompanyUserBindUserVO;
 import com.fs.his.vo.OptionsVO;
 import com.fs.hisStore.domain.FsStoreProductAttrScrm;
 import com.fs.hisStore.domain.FsStoreProductAttrValueScrm;
@@ -131,6 +134,9 @@ public class CompanyUserServiceImpl implements ICompanyUserService
     @Autowired
     private CompanyMapper companyMapper;
 
+    @Autowired
+    private  CompanyFsUserMapper companyFsUserMapper;
+
     /**
      * 邀请码缓存
      */
@@ -1161,6 +1167,79 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         return null;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int bindCompanyUserAndFsUser(Long companyUserId, Long fsUserId) {
+        // 检查该用户是否已经与其他销售绑定
+        CompanyFsUser existingBinding = companyFsUserMapper.selectByFsUserId(fsUserId);
+
+        if (existingBinding != null) {
+            // 如果已存在绑定关系,检查是否是同一个销售
+            if (existingBinding.getCompanyUserId().equals(companyUserId)) {
+                // 已经是同一个销售,更新状态并返回成功
+                existingBinding.setStatus(1);
+                existingBinding.setCreateTime(DateUtils.getNowDate());
+                return companyFsUserMapper.updateCompanyFsUser(existingBinding);
+            } else {
+                // 已绑定其他销售,需要先解绑
+                throw new CustomException("该用户已绑定销售:" +
+                        companyUserService.selectCompanyUserNameUserById(existingBinding.getCompanyUserId()) +
+                        ",需先解绑后才能重新绑定");
+            }
+        }
+
+        // 没有绑定记录,创建新的绑定关系
+        CompanyFsUser companyFsUser = new CompanyFsUser();
+        companyFsUser.setCompanyUserId(companyUserId);
+        companyFsUser.setFsUserId(fsUserId);
+        companyFsUser.setStatus(1);
+        companyFsUser.setCreateTime(DateUtils.getNowDate());
+        return companyFsUserMapper.insertCompanyFsUser(companyFsUser);
+    }
+
+    @Override
+    public boolean unbindCompanyUserAndFsUser(Long companyUserId, Long userId) {
+        // 校验参数
+        if (companyUserId == null || userId == null) {
+            throw new IllegalArgumentException("销售 ID 或用户 ID 不能为空");
+        }
+
+        // 查询是否存在绑定关系
+        CompanyFsUser relation = companyFsUserMapper.selectByCompanyUserIdAndUserId(companyUserId, userId);
+        if (relation == null) {
+            throw new RuntimeException("未找到销售与用户之间的绑定关系");
+        }
+
+        // 删除绑定关系
+        int rows = companyFsUserMapper.deleteById(relation.getId());
+        return rows > 0;
+    }
+
+
+    @Override
+    public List<CompanyUserBindUserVO> getFsUserByCompanyUserId(FsUser fsUser) {
+        //加密手机号
+        if (StringUtils.isNotBlank(fsUser.getPhone())) {
+            fsUser.setPhone(PhoneUtil.encryptPhone(fsUser.getPhone()));
+        }
+        List<CompanyUserBindUserVO> fsUsers = companyFsUserMapper.selecUserList(fsUser);
+        for (CompanyUserBindUserVO user : fsUsers) {
+            if (StringUtils.isNotBlank(user.getPhone())) {
+                user.setPhone(PhoneUtil.decryptPhone(user.getPhone()));
+            }
+        }
+        return fsUsers;
+    }
+
+    @Override
+    public int countCompanyUserByUserId(Long userId) {
+        CompanyFsUser existingBinding = companyFsUserMapper.selectByFsUserId(userId);
+        if(existingBinding!=null){
+            return 1;
+        }
+        return 0;
+    }
+
     /**
      * 生成基础邀请码
      */

+ 11 - 0
fs-service/src/main/java/com/fs/company/vo/CompanyUserQwListVO.java

@@ -137,4 +137,15 @@ public class CompanyUserQwListVO extends BaseEntity {
     /** 企微用户列表 */
     List<QwUserVO> qwUsers;
 
+    /**
+     * 绑定会员昵称
+     */
+    private  String  bindUser;
+
+    /**
+     * 绑定会员状态
+     */
+    private  Integer bindStatus;
+
+
 }

+ 2 - 0
fs-service/src/main/java/com/fs/his/domain/FsUser.java

@@ -156,6 +156,8 @@ public class FsUser extends BaseEntity
     private Integer isAddQw;//是否添加企微客服
     private Integer isShow;//是否展示购买以及订单状态
 
+    private Boolean isCompanyUser;// 是否是销售
+
     private Long parentId; //邀请人id
 
     private String courseMaOpenId; //看课小程序openid

+ 15 - 0
fs-service/src/main/java/com/fs/his/vo/CompanyUserBindUserVO.java

@@ -0,0 +1,15 @@
+package com.fs.his.vo;
+
+import lombok.Data;
+
+@Data
+public class CompanyUserBindUserVO {
+
+    private Long userId;
+
+    private String phone;
+
+    private  String nickName;
+
+    private  Integer status;
+}

+ 72 - 0
fs-service/src/main/resources/mapper/company/CompanyFsUserMapper.xml

@@ -0,0 +1,72 @@
+<?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.company.mapper.CompanyFsUserMapper">
+
+    <resultMap type="CompanyFsUser" id="CompanyFsUserResult">
+        <result property="id"    column="id"    />
+        <result property="fsUserId"    column="fs_user_id"    />
+        <result property="companyUserId"    column="company_user_id"    />
+        <result property="status"    column="status"    />
+        <result property="createTime"    column="create_time"    />
+    </resultMap>
+
+    <insert id="insertCompanyFsUser" parameterType="CompanyFsUser" useGeneratedKeys="true" keyProperty="id">
+        insert into company_fs_user
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="fsUserId != null">fs_user_id,</if>
+            <if test="companyUserId != null">company_user_id,</if>
+            <if test="status != null">status,</if>
+            <if test="createTime != null">create_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="fsUserId != null">#{fsUserId},</if>
+            <if test="companyUserId != null">#{companyUserId},</if>
+            <if test="status != null">#{status},</if>
+            <if test="createTime != null">#{createTime},</if>
+        </trim>
+    </insert>
+    <update id="updateCompanyFsUser">
+        update company_fs_user
+        <set>
+            <if test="fsUserId != null">fs_user_id = #{fsUserId},</if>
+            <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+        </set>
+        where id = #{id}
+    </update>
+    <select id="selecUserList" resultType="com.fs.his.vo.CompanyUserBindUserVO">
+        SELECT
+            u.user_id userId,
+            u.phone,
+            u.nick_name nickName,
+            cfs.`status`
+        FROM
+            fs_user u
+                LEFT JOIN fs_user_company_user fsu ON u.user_id = fsu.user_id
+                LEFT JOIN company_fs_user cfs on u.user_id=cfs.fs_user_id
+        WHERE
+            fsu.company_id =#{companyId}
+        <if test="phone != null and phone != ''">
+            and u.phone = #{phone}
+        </if>
+        <if test="nickName != null and nickName != ''">
+            and u.nick_name like concat('%',#{nickName},'%')
+        </if>
+        <if test="userId !=null and userId !=''">
+            and u.user_id=#{userId}
+        </if>
+        GROUP BY
+            u.user_id
+    </select>
+    <select id="selectByFsUserId" resultType="com.fs.company.domain.CompanyFsUser">
+        select * from company_fs_user where fs_user_id = #{fsUserId}
+    </select>
+    <select id="selectUserListBySalesId" resultType="java.lang.String">
+        SELECT GROUP_CONCAT(fs_user_id) FROM  company_fs_user   WHERE company_user_id=#{companyUserId}
+    </select>
+
+
+</mapper>

+ 7 - 3
fs-service/src/main/resources/mapper/company/CompanyUserMapper.xml

@@ -99,12 +99,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         u.qw_user_id,
         u.doctor_id,
         d.dept_name,
-        d.leader
+        d.leader,
+        GROUP_CONCAT(fu.nick_name) bindUser,
+        cfu.`status` bindStatus
         from
         company_user u
         left join
         company_dept d on u.dept_id = d.dept_id
-
+        LEFT JOIN
+        company_fs_user cfu on u.user_id=cfu.company_user_id
+        LEFT JOIN fs_user fu on cfu.fs_user_id=fu.user_id
         where
         u.del_flag = '0'
         <if test="userId != null ">
@@ -145,7 +149,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="deptId != null and deptId != 0">
             AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM company_dept t WHERE find_in_set(#{deptId}, ancestors) ))
         </if>
-
+        GROUP BY u.user_id
         <!-- 数据范围过滤 -->
         ${params.dataScope}
     </select>

+ 8 - 0
fs-user-app/src/main/java/com/fs/app/controller/UserController.java

@@ -133,6 +133,14 @@ public class UserController extends  AppBaseController {
                 }
             }
 
+            user.setIsCompanyUser(false);
+            //判断该用户是否是销售
+            int i = companyUserService.countCompanyUserByUserId(user.getUserId());
+            if(i>0){
+                //是销售
+                user.setIsCompanyUser(true);
+            }
+
             CompanyUser companyUser =new CompanyUser();
             if(user.getInvitedBySalesId()!=null){
                 companyUser = companyUserService.getInviteCodeByCompanyUserIdAndUserId(user.getInvitedBySalesId());