Long 2 hete
szülő
commit
c22b1dfacd
29 módosított fájl, 960 hozzáadás és 2 törlés
  1. 15 0
      fs-company-app/src/main/java/com/fs/app/controller/CompanyTagController.java
  2. 145 1
      fs-company-app/src/main/java/com/fs/app/controller/CompanyUserController.java
  3. 29 0
      fs-company-app/src/main/java/com/fs/app/param/CompanyUserChangeApplyParam.java
  4. 32 0
      fs-company-app/src/main/java/com/fs/app/param/CompanyUserParam.java
  5. 27 0
      fs-company-app/src/main/java/com/fs/app/param/CompanyUserUpdateParam.java
  6. 77 0
      fs-company/src/main/java/com/fs/company/controller/CompanyUserChangeApplyController.java
  7. 23 0
      fs-company/src/main/java/com/fs/company/param/CompanyUserChangeApplyAuditParam.java
  8. 57 0
      fs-service-system/src/main/java/com/fs/company/domain/CompanyUserChangeApply.java
  9. 24 0
      fs-service-system/src/main/java/com/fs/company/domain/CompanyUserChangeApplyUser.java
  10. 8 0
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyDeptMapper.java
  11. 10 0
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyTagUserMapper.java
  12. 26 0
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserChangeApplyMapper.java
  13. 24 0
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserChangeApplyUserMapper.java
  14. 7 0
      fs-service-system/src/main/java/com/fs/company/service/ICompanyDeptService.java
  15. 9 0
      fs-service-system/src/main/java/com/fs/company/service/ICompanyTagUserService.java
  16. 46 0
      fs-service-system/src/main/java/com/fs/company/service/ICompanyUserChangeApplyService.java
  17. 24 0
      fs-service-system/src/main/java/com/fs/company/service/ICompanyUserChangeApplyUserService.java
  18. 10 0
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyDeptServiceImpl.java
  19. 11 0
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java
  20. 12 0
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyTagUserServiceImpl.java
  21. 145 0
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserChangeApplyServiceImpl.java
  22. 34 0
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserChangeApplyUserServiceImpl.java
  23. 15 0
      fs-service-system/src/main/java/com/fs/company/vo/CompanyTagUserVO.java
  24. 15 0
      fs-service-system/src/main/java/com/fs/company/vo/CompanyUserChangeApplyUserVO.java
  25. 61 0
      fs-service-system/src/main/java/com/fs/company/vo/CompanyUserChangeApplyVO.java
  26. 1 1
      fs-service-system/src/main/java/com/fs/course/mapper/FsCourseRedPacketLogMapper.java
  27. 10 0
      fs-service-system/src/main/resources/mapper/company/CompanyTagUserMapper.xml
  28. 38 0
      fs-service-system/src/main/resources/mapper/company/CompanyUserChangeApplyMapper.xml
  29. 25 0
      fs-service-system/src/main/resources/mapper/company/CompanyUserChangeApplyUserMapper.xml

+ 15 - 0
fs-company-app/src/main/java/com/fs/app/controller/CompanyTagController.java

@@ -6,13 +6,17 @@ import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
 import com.fs.company.domain.CompanyTag;
 import com.fs.company.service.ICompanyTagService;
+import com.fs.company.service.ICompanyTagUserService;
+import com.fs.company.vo.CompanyTagUserVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @Api(tags = "企业标签接口")
@@ -22,6 +26,7 @@ import java.util.List;
 public class CompanyTagController extends AppBaseController {
 
     private final ICompanyTagService companyTagService;
+    private final ICompanyTagUserService companyTagUserService;
 
     /**
      * 查询公司标签列表
@@ -60,4 +65,14 @@ public class CompanyTagController extends AppBaseController {
         companyTagService.deleteCompanyTagByTagIds(tagIds);
         return R.ok();
     }
+
+    @Login
+    @GetMapping("/tagSubUsers")
+    @ApiOperation("标签下会员列表")
+    public R tagSubUsers(@RequestParam Long tagId) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("tagId", tagId);
+        params.put("companyId", getCompanyId());
+        return R.ok().put("data", companyTagUserService.selectUserListByMap(params));
+    }
 }

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

@@ -1,11 +1,27 @@
 package com.fs.app.controller;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fs.app.annotation.Login;
+import com.fs.app.param.CompanyUserChangeApplyParam;
+import com.fs.app.param.CompanyUserParam;
+import com.fs.app.param.CompanyUserUpdateParam;
 import com.fs.app.vo.CompanySubUserVO;
+import com.fs.common.annotation.RepeatSubmit;
+import com.fs.common.constant.UserConstants;
 import com.fs.common.core.domain.R;
+import com.fs.common.exception.ServiceException;
 import com.fs.common.utils.bean.BeanUtils;
+import com.fs.company.domain.Company;
+import com.fs.company.domain.CompanyDept;
 import com.fs.company.domain.CompanyUser;
+import com.fs.company.domain.CompanyUserChangeApply;
+import com.fs.company.service.ICompanyDeptService;
+import com.fs.company.service.ICompanyService;
+import com.fs.company.service.ICompanyUserChangeApplyService;
 import com.fs.company.service.ICompanyUserService;
+import com.fs.company.vo.CompanyUserChangeApplyVO;
+import com.fs.core.security.SecurityUtils;
 import com.fs.course.service.IFsCourseRedPacketLogService;
 import com.fs.course.service.IFsCourseWatchLogService;
 import com.github.pagehelper.PageHelper;
@@ -16,6 +32,7 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
@@ -30,8 +47,11 @@ import java.util.stream.Collectors;
 public class CompanyUserController extends AppBaseController {
 
     private final ICompanyUserService companyUserService;
+    private final ICompanyService companyService;
+    private final ICompanyDeptService companyDeptService;
     private final IFsCourseWatchLogService courseWatchLogService;
     private final IFsCourseRedPacketLogService courseRedPacketLogService;
+    private final ICompanyUserChangeApplyService companyUserChangeApplyService;
 
     @Login
     @ApiOperation("下级用户列表")
@@ -43,6 +63,7 @@ public class CompanyUserController extends AppBaseController {
         List<CompanyUser> companyUsers = companyUserService.selectCompanySubUserList(Long.parseLong(getUserId()));
         PageInfo<CompanyUser> page = new PageInfo<>(companyUsers);
 
+        // 转换对象
         List<CompanySubUserVO> users = page.getList().stream().map(u -> {
             CompanySubUserVO vo = new CompanySubUserVO();
             BeanUtils.copyProperties(u, vo);
@@ -74,10 +95,133 @@ public class CompanyUserController extends AppBaseController {
             return vo;
         }).collect(Collectors.toList());
 
-        PageInfo<CompanySubUserVO> pageInfo = new PageInfo<>(users);
+        PageInfo<CompanySubUserVO> pageInfo = new PageInfo<>();
         BeanUtils.copyProperties(page, pageInfo);
+        pageInfo.setList(users);
 
         return R.ok().put("data", pageInfo);
     }
 
+    @Login
+    @ApiOperation("修改用户信息")
+    @PostMapping("/updateUserInfo")
+    public R updateUserInfo(@Valid @RequestBody CompanyUserUpdateParam param) {
+        CompanyUser companyUser = companyUserService.selectCompanyUserById(param.getUserId());
+        if (Objects.isNull(companyUser)) {
+            throw new ServiceException("用户不存在");
+        }
+
+        companyUser.setUserId(param.getUserId());
+        companyUser.setNickName(param.getNickName());
+        companyUser.setPhonenumber(param.getPhoneNumber());
+        companyUser.setRemark(param.getRemark());
+        companyUserService.updateCompanyUser(companyUser);
+        return R.ok();
+    }
+
+    @ApiOperation("注册")
+    @PostMapping("/resisterCompanyUser")
+    public R resisterCompanyUser(@Valid @RequestBody CompanyUserParam param) {
+        Company company = companyService.selectCompanyById(param.getCompanyId());
+        if (Objects.isNull(company)) {
+            return R.error("公司不存在");
+        }
+
+        // 判断用户数量是否已达到上线
+        Integer count = companyUserService.selectCompanyUserCountByCompanyId(param.getCompanyId());
+        if(count > company.getLimitUserCount()) {
+            return R.error("用户数量已达到上限");
+        }
+
+        if (UserConstants.NOT_UNIQUE.equals(String.valueOf(companyUserService.checkUserName(param.getPhoneNumber())))) {
+            return R.error("注册用户'" + param.getPhoneNumber() + "'失败,登录账号已存在");
+        }
+
+        // 组装参数
+        CompanyUser companyUser = new CompanyUser();
+        BeanUtils.copyProperties(param, companyUser);
+
+        companyUser.setUserName(param.getPhoneNumber());
+        companyUser.setPhonenumber(param.getPhoneNumber());
+        companyUser.setPassword(SecurityUtils.encryptPassword(companyUser.getPassword()));
+        companyUser.setCreateTime(new Date());
+
+        // 部门
+        CompanyDept dept = companyDeptService.getDefaultCompanyDeptByCompanyId(param.getCompanyId());
+        if (Objects.nonNull(dept)) {
+            companyUser.setDeptId(dept.getDeptId());
+        }
+
+        companyUserService.insertUser(companyUser);
+        return R.ok();
+    }
+
+    @Login
+    @ApiOperation("接收群管列表")
+    @GetMapping("/companyUserListByCompanyId")
+    public R CompanyUserListByCompanyId(){
+        // 查询公司下销售
+        CompanyUser companyUser = new CompanyUser();
+        companyUser.setCompanyId(getCompanyId());
+        List<CompanyUser> companyUsers = companyUserService.selectCompanyUserList(companyUser);
+        return R.ok().put("data",companyUsers);
+    }
+
+    @Login
+    @RepeatSubmit
+    @ApiOperation("更换会员归属申请")
+    @PostMapping("/changeUserParentApply")
+    public R changeVipUser(@Valid @RequestBody CompanyUserChangeApplyParam param) {
+        // 参数校验
+        CompanyUser fromUser = companyUserService.selectCompanyUserById(param.getFrom());
+        if (Objects.isNull(fromUser)) {
+            return R.error("原归属销售不存在");
+        }
+
+        CompanyUser toUser = companyUserService.selectCompanyUserById(param.getTo());
+        if (Objects.isNull(toUser)) {
+            throw new ServiceException("申请更换归属销售不存在");
+        }
+
+        if (param.getType() != 0 && param.getType() != 1) {
+            throw new ServiceException("类型不正确");
+        }
+
+        if (param.getType() == 1 && (Objects.isNull(param.getIds()) || param.getIds().isEmpty())) {
+            throw new ServiceException("请先选择会员");
+        }
+
+        // 存在待审核的申请不能再次申请
+        Wrapper<CompanyUserChangeApply> applyWrapper = Wrappers.<CompanyUserChangeApply>lambdaQuery()
+                .eq(CompanyUserChangeApply::getFrom, fromUser.getUserId())
+                .eq(CompanyUserChangeApply::getStatus, 0);
+        if (companyUserChangeApplyService.count(applyWrapper) > 0) {
+            throw new ServiceException("存在待审核申请");
+        }
+
+        CompanyUser companyUser = companyUserService.selectCompanyUserById(Long.parseLong(getUserId()));
+
+        // 添加申请
+        companyUserChangeApplyService.apply(param.getFrom(), param.getTo(), param.getType(), param.getIds(), companyUser.getCompanyId(), companyUser.getUserName());
+        return R.ok();
+    }
+
+    @Login
+    @ApiOperation("申请列表")
+    @GetMapping("/applyList")
+    public R applyList(@RequestParam(required = false) Integer status,
+                       @RequestParam(required = false, defaultValue = "1") Integer pageNum,
+                       @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
+        log.debug("申请列表 status: {}, pageNum: {}, pageSize: {}", status, pageNum, pageSize);
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("status", status);
+        map.put("companyId", getCompanyId());
+
+        PageHelper.startPage(pageNum, pageSize);
+        List<CompanyUserChangeApplyVO> list = companyUserChangeApplyService.selectApplyListByMap(map);
+        PageInfo<CompanyUserChangeApplyVO> page = new PageInfo<>(list);
+        return R.ok().put("data", page);
+    }
+
 }

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

@@ -0,0 +1,29 @@
+package com.fs.app.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+public class CompanyUserChangeApplyParam {
+    /**
+     * 原归属销售
+     */
+    @NotNull(message = "原归属销售ID不能为空")
+    private Long from;
+    /**
+     * 申请归属销售
+     */
+    @NotNull(message = "申请更换归属销售ID不能为空")
+    private Long to;
+    /**
+     * 类型  0全部 1部分
+     */
+    @NotNull(message = "类型不能为空")
+    private Integer type;
+    /**
+     * 需更换归属会员id集合
+     */
+    private List<Long> ids;
+}

+ 32 - 0
fs-company-app/src/main/java/com/fs/app/param/CompanyUserParam.java

@@ -0,0 +1,32 @@
+package com.fs.app.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class CompanyUserParam {
+
+    /**
+     * 公司ID
+     */
+    @NotNull(message = "公司ID不能为空")
+    private Long companyId;
+    /**
+     * 手机号码
+     */
+    @NotBlank(message = "手机号码不能为空")
+    private String phoneNumber;
+    /**
+     * 昵称
+     */
+    @NotBlank(message = "昵称不能为空")
+    private String nickName;
+    /**
+     * 密码
+     */
+    @NotBlank(message = "用户密码不能为空")
+    private String password;
+
+}

+ 27 - 0
fs-company-app/src/main/java/com/fs/app/param/CompanyUserUpdateParam.java

@@ -0,0 +1,27 @@
+package com.fs.app.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class CompanyUserUpdateParam {
+
+    /**
+     * 用户ID
+     */
+    @NotNull(message = "用户ID不能为空")
+    private Long userId;
+    /**
+     * 昵称
+     */
+    private String nickName;
+    /**
+     * 电话号码
+     */
+    private String phoneNumber;
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 77 - 0
fs-company/src/main/java/com/fs/company/controller/CompanyUserChangeApplyController.java

@@ -0,0 +1,77 @@
+package com.fs.company.controller;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.fs.common.exception.ServiceException;
+import com.fs.common.utils.StringUtils;
+import com.fs.company.param.CompanyUserChangeApplyAuditParam;
+import com.fs.company.service.ICompanyUserChangeApplyService;
+import com.fs.company.vo.CompanyUserChangeApplyVO;
+import com.fs.core.security.SecurityUtils;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+
+import javax.validation.Valid;
+
+/**
+ * 更换会员归属申请Controller
+ */
+@RestController
+@RequestMapping("/company/apply")
+public class CompanyUserChangeApplyController extends BaseController
+{
+    @Autowired
+    private ICompanyUserChangeApplyService companyUserChangeApplyService;
+
+    /**
+     * 查询更换会员归属申请列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:apply:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(@RequestParam(required = false) Integer status)
+    {
+        Map<String, Object> map = new HashMap<>();
+        map.put("status", status);
+        map.put("companyId", SecurityUtils.getLoginUser().getCompany().getCompanyId());
+
+        startPage();
+        List<CompanyUserChangeApplyVO> list = companyUserChangeApplyService.selectApplyListByMap(map);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取更换会员归属申请详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('company:apply:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(companyUserChangeApplyService.selectApplyDetailById(id));
+    }
+
+    /**
+     * 获取更换会员归属申请详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('company:apply:audit')")
+    @PostMapping(value = "/audit")
+    public AjaxResult audit(@Valid @RequestBody CompanyUserChangeApplyAuditParam param)
+    {
+        if (param.getStatus() != 1 && param.getStatus() != 2) {
+            throw new ServiceException("审核类型不正确");
+        }
+
+        if (param.getStatus() == 2 && StringUtils.isBlank(param.getReason())) {
+            throw new ServiceException("拒绝理由不能为空");
+        }
+
+        companyUserChangeApplyService.audit(param.getId(), param.getStatus(), param.getReason(), SecurityUtils.getUsername());
+        return AjaxResult.success();
+    }
+
+}

+ 23 - 0
fs-company/src/main/java/com/fs/company/param/CompanyUserChangeApplyAuditParam.java

@@ -0,0 +1,23 @@
+package com.fs.company.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class CompanyUserChangeApplyAuditParam {
+    /**
+     * 申请记录ID
+     */
+    @NotNull(message = "申请记录ID不能为空")
+    private Long id;
+    /**
+     * 状态 0通过 1拒绝
+     */
+    @NotNull(message = "审核状态不能为空")
+    private Integer status;
+    /**
+     * 原因
+     */
+    private String reason;
+}

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

@@ -0,0 +1,57 @@
+package com.fs.company.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("company_user_change_apply")
+public class CompanyUserChangeApply {
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 公司ID
+     */
+    private Long companyId;
+    /**
+     * 原归属销售
+     */
+    @TableField("`from`")
+    private Long from;
+    /**
+     * 申请归属销售
+     */
+    @TableField("`to`")
+    private Long to;
+    /**
+     * 审核状态 0待审核 1通过 2拒绝
+     */
+    private Integer status;
+    /**
+     * 申请人
+     */
+    private String applyBy;
+    /**
+     * 申请时间
+     */
+    private LocalDateTime applyTime;
+    /**
+     * 审核人
+     */
+    private String auditBy;
+    /**
+     * 审核时间
+     */
+    private LocalDateTime auditTime;
+    /**
+     * 被拒原因
+     */
+    private String reason;
+}

+ 24 - 0
fs-service-system/src/main/java/com/fs/company/domain/CompanyUserChangeApplyUser.java

@@ -0,0 +1,24 @@
+package com.fs.company.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("company_user_change_apply_user")
+public class CompanyUserChangeApplyUser {
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /**
+     * 申请ID
+     */
+    private Long applyId;
+    /**
+     * 用户ID
+     */
+    private Long userId;
+}

+ 8 - 0
fs-service-system/src/main/java/com/fs/company/mapper/CompanyDeptMapper.java

@@ -82,4 +82,12 @@ public interface CompanyDeptMapper
     List<String> selectCompanyDeptNamesByIds(String ids);
 
     Long selectCompanyDeptByIdCompany(Long deptId);
+
+    /**
+     * 获取公司默认部门
+     * @param companyId 公司ID
+     * @return  公司部门
+     */
+    @Select("select cd.* from company_dept cd where cd.company_id = #{companyId} and cd.dept_name = '默认' and cd.parent_id = 0 limit 1")
+    CompanyDept getTopCompanyDeptByCompanyId(@Param("companyId") Long companyId);
 }

+ 10 - 0
fs-service-system/src/main/java/com/fs/company/mapper/CompanyTagUserMapper.java

@@ -1,7 +1,10 @@
 package com.fs.company.mapper;
 
 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 org.apache.ibatis.annotations.Param;
@@ -63,4 +66,11 @@ public interface CompanyTagUserMapper
     public int deleteCompanyTagUserByIds(Long[] ids);
 
     List<CompanyUserTagListVO> getTagList(@Param("param") TagListParam param, @Param("keywords") String[] keywords, @Param("userIds") List<Long> userIds);
+
+    /**
+     * 根据条件查询标签下用户
+     * @param params    条件
+     * @return  list
+     */
+    List<CompanyTagUserVO> selectUserListByMap(@Param("params") Map<String, Object> params);
 }

+ 26 - 0
fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserChangeApplyMapper.java

@@ -0,0 +1,26 @@
+package com.fs.company.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.company.domain.CompanyUserChangeApply;
+import com.fs.company.vo.CompanyUserChangeApplyVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface CompanyUserChangeApplyMapper extends BaseMapper<CompanyUserChangeApply> {
+
+    /**
+     * 查询申请列表
+     * @param map 条件
+     * @return  list
+     */
+    List<CompanyUserChangeApplyVO> selectApplyListByMap(@Param("map") Map<String, Object> map);
+
+    /**
+     * 查询申请详情
+     * @param id    申请记录ID
+     * @return  CompanyUserChangeApplyVO
+     */
+    CompanyUserChangeApplyVO detailById(@Param("id") Long id);
+}

+ 24 - 0
fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserChangeApplyUserMapper.java

@@ -0,0 +1,24 @@
+package com.fs.company.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.company.domain.CompanyUserChangeApplyUser;
+import com.fs.company.vo.CompanyUserChangeApplyUserVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface CompanyUserChangeApplyUserMapper extends BaseMapper<CompanyUserChangeApplyUser> {
+
+    /**
+     * 查询申请记录关联用户
+     * @param applyId   申请记录ID
+     * @return  list
+     */
+    List<CompanyUserChangeApplyUserVO> getApplyUsers(@Param("applyId") Long applyId);
+
+    /**
+     * 修改申请记录关联用户销售
+     * @param applyId 申请记录ID
+     */
+    void changeUser(@Param("applyId") Long applyId);
+}

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

@@ -77,4 +77,11 @@ public interface ICompanyDeptService
     int selectNormalChildrenDeptById(Long deptId);
 
     List<String> selectCompanyDeptNamesByIds(String ids);
+
+    /**
+     * 获取公司默认部门
+     * @param companyId 公司ID
+     * @return 部门
+     */
+    CompanyDept getDefaultCompanyDeptByCompanyId(Long companyId);
 }

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

@@ -1,7 +1,10 @@
 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;
 
@@ -68,4 +71,10 @@ public interface ICompanyTagUserService
      */
     List<CompanyUserTagListVO> getTagList(TagListParam param);
 
+    /**
+     * 根据条件查询标签下用户
+     * @param params    条件
+     * @return  list
+     */
+    List<CompanyTagUserVO> selectUserListByMap(Map<String, Object> params);
 }

+ 46 - 0
fs-service-system/src/main/java/com/fs/company/service/ICompanyUserChangeApplyService.java

@@ -0,0 +1,46 @@
+package com.fs.company.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.company.domain.CompanyUserChangeApply;
+import com.fs.company.vo.CompanyUserChangeApplyVO;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ICompanyUserChangeApplyService extends IService<CompanyUserChangeApply> {
+
+    /**
+     * 申请更换会员归属
+     *
+     * @param from      原归属
+     * @param to        新归属
+     * @param type      类型  0全部 1部分
+     * @param ids       会员
+     * @param companyId 公司ID
+     * @param userName  操作用户
+     */
+    void apply(Long from, Long to, Integer type, List<Long> ids, Long companyId, String userName);
+
+    /**
+     * 查询申请列表
+     * @param map 条件
+     * @return  list
+     */
+    List<CompanyUserChangeApplyVO> selectApplyListByMap(Map<String, Object> map);
+
+    /**
+     * 查询申请详情
+     * @param id    申请记录ID
+     * @return  CompanyUserChangeApplyVO
+     */
+    CompanyUserChangeApplyVO selectApplyDetailById(Long id);
+
+    /**
+     * 申请记录审核
+     * @param id        申请记录ID
+     * @param status    审核状态 1通过 2拒绝
+     * @param reason    拒绝理由
+     * @param username  审核人
+     */
+    void audit(Long id, Integer status, String reason, String username);
+}

+ 24 - 0
fs-service-system/src/main/java/com/fs/company/service/ICompanyUserChangeApplyUserService.java

@@ -0,0 +1,24 @@
+package com.fs.company.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.company.domain.CompanyUserChangeApplyUser;
+import com.fs.company.vo.CompanyUserChangeApplyUserVO;
+import com.fs.company.vo.CompanyUserVO;
+
+import java.util.List;
+
+public interface ICompanyUserChangeApplyUserService extends IService<CompanyUserChangeApplyUser> {
+
+    /**
+     * 查询申请记录关联用户
+     * @param applyId   申请记录ID
+     * @return  list
+     */
+    List<CompanyUserChangeApplyUserVO> getApplyUsers(Long applyId);
+
+    /**
+     * 修改申请记录关联用户销售
+     * @param applyId 申请记录ID
+     */
+    void changeUser(Long applyId);
+}

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

@@ -224,6 +224,16 @@ public class CompanyDeptServiceImpl implements ICompanyDeptService
         return companyDeptMapper.selectCompanyDeptNamesByIds(ids);
     }
 
+    /**
+     * 获取公司默认部门
+     * @param companyId 公司ID
+     * @return 部门
+     */
+    @Override
+    public CompanyDept getDefaultCompanyDeptByCompanyId(Long companyId) {
+        return companyDeptMapper.getTopCompanyDeptByCompanyId(companyId);
+    }
+
     /**
      * 递归列表
      */

+ 11 - 0
fs-service-system/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java

@@ -115,6 +115,17 @@ public class CompanyServiceImpl implements ICompanyService
             dept.setCreateTime(new Date());
             dept.setDeptName(company.getCompanyName());
             deptMapper.insertCompanyDept(dept);
+
+            // 创建默认部门
+            CompanyDept defaultDept = new CompanyDept();
+            defaultDept.setCompanyId(company.getCompanyId());
+            defaultDept.setParentId(dept.getDeptId());
+            defaultDept.setAncestors("0," + dept.getDeptId());
+            defaultDept.setStatus("0");
+            defaultDept.setCreateTime(new Date());
+            defaultDept.setDeptName("默认");
+            deptMapper.insertCompanyDept(defaultDept);
+
             //创建岗位
             CompanyPost post=new CompanyPost();
             post.setCompanyId(company.getCompanyId());

+ 12 - 0
fs-service-system/src/main/java/com/fs/company/service/impl/CompanyTagUserServiceImpl.java

@@ -2,12 +2,14 @@ package com.fs.company.service.impl;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.company.vo.CompanyTagUserVO;
 import com.fs.store.param.h5.TagListParam;
 import com.fs.store.vo.h5.CompanyUserTagListVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -121,4 +123,14 @@ public class CompanyTagUserServiceImpl implements ICompanyTagUserService
 
         return companyTagUserMapper.getTagList(param, keywords, userIds);
     }
+
+    /**
+     * 根据条件查询标签下用户
+     * @param params    条件
+     * @return  list
+     */
+    @Override
+    public List<CompanyTagUserVO> selectUserListByMap(Map<String, Object> params) {
+        return companyTagUserMapper.selectUserListByMap(params);
+    }
 }

+ 145 - 0
fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserChangeApplyServiceImpl.java

@@ -0,0 +1,145 @@
+package com.fs.company.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.common.exception.ServiceException;
+import com.fs.company.domain.CompanyUserChangeApply;
+import com.fs.company.domain.CompanyUserChangeApplyUser;
+import com.fs.company.mapper.CompanyUserChangeApplyMapper;
+import com.fs.company.service.ICompanyUserChangeApplyService;
+import com.fs.company.service.ICompanyUserChangeApplyUserService;
+import com.fs.company.vo.CompanyUserChangeApplyVO;
+import com.fs.store.domain.FsUser;
+import com.fs.store.mapper.FsUserMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.*;
+
+@Service
+@AllArgsConstructor
+public class CompanyUserChangeApplyServiceImpl extends ServiceImpl<CompanyUserChangeApplyMapper, CompanyUserChangeApply> implements ICompanyUserChangeApplyService {
+
+    private final ICompanyUserChangeApplyUserService companyUserChangeApplyUserService;
+    private final FsUserMapper userMapper;
+
+    /**
+     * 申请更换会员归属
+     *
+     * @param from      原归属
+     * @param to        新归属
+     * @param type      类型  0全部 1部分
+     * @param ids       会员
+     * @param companyId 公司ID
+     * @param userName  操作用户
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void apply(Long from, Long to, Integer type, List<Long> ids, Long companyId, String userName) {
+        List<CompanyUserChangeApplyUser> users = new ArrayList<>();
+
+        // 全部
+        if (type == 0) {
+            FsUser param = new FsUser();
+            param.setCompanyUserId(from);
+            List<FsUser> userList = userMapper.selectFsUserList(param);
+            for (FsUser user : userList) {
+                CompanyUserChangeApplyUser uu = new CompanyUserChangeApplyUser();
+                uu.setUserId(user.getUserId());
+                users.add(uu);
+            }
+        }
+        // 部分
+        else {
+            for (Long id : ids) {
+                FsUser user = userMapper.selectFsUserById(id);
+                if (Objects.isNull(user)) {
+                    throw new ServiceException("会员不存在");
+                }
+
+                CompanyUserChangeApplyUser uu = new CompanyUserChangeApplyUser();
+                uu.setUserId(user.getUserId());
+                users.add(uu);
+            }
+        }
+
+        if (users.isEmpty()) {
+            throw new ServiceException("不存在可更换会员");
+        }
+
+        // 添加申请
+        CompanyUserChangeApply apply = new CompanyUserChangeApply();
+        apply.setCompanyId(companyId);
+        apply.setFrom(from);
+        apply.setTo(to);
+        apply.setApplyTime(LocalDateTime.now());
+        apply.setApplyBy(userName);
+        save(apply);
+
+        // 添加申请关联会员
+        users.forEach(user -> user.setApplyId(apply.getId()));
+        companyUserChangeApplyUserService.saveBatch(users);
+    }
+
+    /**
+     * 查询申请列表
+     * @param map 条件
+     * @return  list
+     */
+    @Override
+    public List<CompanyUserChangeApplyVO> selectApplyListByMap(Map<String, Object> map) {
+        List<CompanyUserChangeApplyVO> list = baseMapper.selectApplyListByMap(map);
+        list.forEach(user -> user.setUsers(companyUserChangeApplyUserService.getApplyUsers(user.getId())));
+        return list;
+    }
+
+    /**
+     * 查询申请详情
+     * @param id    申请记录ID
+     * @return  CompanyUserChangeApplyVO
+     */
+    @Override
+    public CompanyUserChangeApplyVO selectApplyDetailById(Long id) {
+        CompanyUserChangeApplyVO companyUserChangeApplyVO = baseMapper.detailById(id);
+        if (Objects.nonNull(companyUserChangeApplyVO)) {
+            companyUserChangeApplyVO.setUsers(companyUserChangeApplyUserService.getApplyUsers(id));
+        }
+        return companyUserChangeApplyVO;
+    }
+
+    /**
+     * 申请记录审核
+     * @param id        申请记录ID
+     * @param status    审核状态
+     * @param reason    拒绝理由
+     * @param username  审核人
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void audit(Long id, Integer status, String reason, String username) {
+        CompanyUserChangeApply companyUserChangeApply = baseMapper.selectById(id);
+        if (Objects.isNull(companyUserChangeApply)) {
+            throw new ServiceException("申请记录不存在");
+        }
+
+        if (companyUserChangeApply.getStatus() != 0) {
+            throw new ServiceException("请勿重复审核");
+        }
+
+        // 通过
+        if (status == 1) {
+            // 修改会员关联销售
+            companyUserChangeApplyUserService.changeUser(id);
+        }
+        // 拒绝
+        else {
+            companyUserChangeApply.setReason(reason);
+        }
+
+        companyUserChangeApply.setAuditBy(username);
+        companyUserChangeApply.setAuditTime(LocalDateTime.now());
+        companyUserChangeApply.setStatus(status);
+        baseMapper.updateById(companyUserChangeApply);
+    }
+}

+ 34 - 0
fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserChangeApplyUserServiceImpl.java

@@ -0,0 +1,34 @@
+package com.fs.company.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.company.domain.CompanyUserChangeApplyUser;
+import com.fs.company.mapper.CompanyUserChangeApplyUserMapper;
+import com.fs.company.service.ICompanyUserChangeApplyUserService;
+import com.fs.company.vo.CompanyUserChangeApplyUserVO;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+@Service
+public class CompanyUserChangeApplyUserServiceImpl extends ServiceImpl<CompanyUserChangeApplyUserMapper, CompanyUserChangeApplyUser> implements ICompanyUserChangeApplyUserService {
+
+    /**
+     * 查询申请记录关联用户
+     * @param applyId   申请记录ID
+     * @return  list
+     */
+    @Override
+    public List<CompanyUserChangeApplyUserVO> getApplyUsers(Long applyId) {
+        return baseMapper.getApplyUsers(applyId);
+    }
+
+    /**
+     * 修改申请记录关联用户销售
+     * @param applyId 申请记录ID
+     */
+    @Override
+    public void changeUser(Long applyId) {
+        baseMapper.changeUser(applyId);
+    }
+}

+ 15 - 0
fs-service-system/src/main/java/com/fs/company/vo/CompanyTagUserVO.java

@@ -0,0 +1,15 @@
+package com.fs.company.vo;
+
+import lombok.Data;
+
+@Data
+public class CompanyTagUserVO {
+    /**
+     * 用户ID
+     */
+    private Long userId;
+    /**
+     * 用户昵称
+     */
+    private String userName;
+}

+ 15 - 0
fs-service-system/src/main/java/com/fs/company/vo/CompanyUserChangeApplyUserVO.java

@@ -0,0 +1,15 @@
+package com.fs.company.vo;
+
+import lombok.Data;
+
+@Data
+public class CompanyUserChangeApplyUserVO {
+    /**
+     * 用户ID
+     */
+    private Long userId;
+    /**
+     * 用户名称
+     */
+    private String userName;
+}

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

@@ -0,0 +1,61 @@
+package com.fs.company.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class CompanyUserChangeApplyVO {
+    /**
+     * 主键ID
+     */
+    private Long id;
+    /**
+     * 原销售
+     */
+    private Long from;
+    /**
+     * 原销售名称
+     */
+    private String fromName;
+    /**
+     * 申请更换销售
+     */
+    private Long to;
+    /**
+     * 申请更换销售名称
+     */
+    private String toName;
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 申请人
+     */
+    private String applyBy;
+    /**
+     * 申请时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime applyTime;
+    /**
+     * 审核人
+     */
+    private String auditBy;
+    /**
+     * 审核时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime auditTime;
+    /**
+     * 被拒原因
+     */
+    private String reason;
+    /**
+     * 需更换用户
+     */
+    private List<CompanyUserChangeApplyUserVO> users;
+}

+ 1 - 1
fs-service-system/src/main/java/com/fs/course/mapper/FsCourseRedPacketLogMapper.java

@@ -152,6 +152,6 @@ public interface FsCourseRedPacketLogMapper
      * @param companyUserId 销售ID
      * @return amount
      */
-    @Select("select sum(fcrpl.amount) from fs_course_red_packet_log fcrpl where fcrpl.company_user_id = #{companyUserId}")
+    @Select("select ifnull(sum(fcrpl.amount), 0) from fs_course_red_packet_log fcrpl where fcrpl.company_user_id = #{companyUserId}")
     BigDecimal getSumByCompanyUserIdId(@Param("companyUserId") Long companyUserId);
 }

+ 10 - 0
fs-service-system/src/main/resources/mapper/company/CompanyTagUserMapper.xml

@@ -95,4 +95,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
     </select>
 
+    <!-- 根据条件查询标签下用户 -->
+    <select id="selectUserListByMap" resultType="com.fs.company.vo.CompanyTagUserVO">
+        select
+            fu.user_id,
+            fu.nickname as userName
+        from company_tag_user ctu
+        inner join fs_user fu on fu.user_id = ctu.user_id
+        where ctu.company_id = #{params.companyId} and find_in_set(#{params.tagId}, ctu.tag_ids)
+    </select>
+
 </mapper>

+ 38 - 0
fs-service-system/src/main/resources/mapper/company/CompanyUserChangeApplyMapper.xml

@@ -0,0 +1,38 @@
+<?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.CompanyUserChangeApplyMapper">
+
+    <resultMap id="applyMap" type="CompanyUserChangeApplyVO">
+    </resultMap>
+
+    <sql id="applySQL">
+        select
+            cuca.*,
+            fu.user_name fromName,
+            tu.user_name toName
+        from company_user_change_apply cuca
+        left join company_user fu on fu.user_id = cuca.`from`
+        left join company_user tu on tu.user_id = cuca.`to`
+    </sql>
+
+    <!-- 查询申请列表 -->
+    <select id="selectApplyListByMap" resultMap="applyMap">
+        <include refid="applySQL"/>
+        <where>
+            <if test="map.status != null">
+                cuca.status = #{map.status}
+            </if>
+            <if test="map.companyId != null">
+                and cuca.company_id = #{map.companyId}
+            </if>
+        </where>
+    </select>
+
+    <!-- 查询申请详情 -->
+    <select id="detailById" resultMap="applyMap">
+        <include refid="applySQL"/>
+        where cuca.id = #{id}
+    </select>
+</mapper>

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

@@ -0,0 +1,25 @@
+<?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.CompanyUserChangeApplyUserMapper">
+
+    <!-- 查询申请记录关联用户 -->
+    <select id="getApplyUsers" resultType="com.fs.company.vo.CompanyUserChangeApplyUserVO">
+        select
+            fu.user_id,
+            fu.nickname as userName
+        from company_user_change_apply_user cucau
+        inner join fs_user fu on fu.user_id = cucau.user_id
+        where cucau.apply_id = #{applyId}
+    </select>
+
+    <!-- 修改申请记录关联用户销售 -->
+    <update id="changeUser">
+        update fs_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}
+    </update>
+</mapper>