Prechádzať zdrojové kódy

催课面板、员工列表、审核、禁用、群管理员列表

Long 2 týždňov pred
rodič
commit
087ab9055f
38 zmenil súbory, kde vykonal 816 pridanie a 73 odobranie
  1. 63 0
      fs-company-app/src/main/java/com/fs/app/controller/CompanyTagController.java
  2. 84 0
      fs-company-app/src/main/java/com/fs/app/controller/CompanyUserController.java
  3. 20 0
      fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java
  4. 60 0
      fs-company-app/src/main/java/com/fs/app/controller/QwWorkTaskController.java
  5. 72 22
      fs-company-app/src/main/java/com/fs/app/controller/UserController.java
  6. 23 0
      fs-company-app/src/main/java/com/fs/app/param/QwWorkTaskQueryParam.java
  7. 27 0
      fs-company-app/src/main/java/com/fs/app/utils/ValidateUtil.java
  8. 28 0
      fs-company-app/src/main/java/com/fs/app/vo/CompanySubUserVO.java
  9. 29 0
      fs-company-app/src/main/java/com/fs/app/vo/CompanyUserAppVO.java
  10. 17 39
      fs-company-app/src/main/java/com/fs/app/vo/UserVO.java
  11. 11 0
      fs-service-system/src/main/java/com/fs/company/domain/CompanyUser.java
  12. 6 0
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserMapper.java
  13. 2 1
      fs-service-system/src/main/java/com/fs/company/service/ICompanyService.java
  14. 6 0
      fs-service-system/src/main/java/com/fs/company/service/ICompanyTagService.java
  15. 13 0
      fs-service-system/src/main/java/com/fs/company/service/ICompanyUserService.java
  16. 3 6
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java
  17. 12 0
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyTagServiceImpl.java
  18. 22 0
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  19. 26 0
      fs-service-system/src/main/java/com/fs/company/vo/CompanyQueryVo.java
  20. 24 0
      fs-service-system/src/main/java/com/fs/course/mapper/FsCourseRedPacketLogMapper.java
  21. 8 0
      fs-service-system/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java
  22. 22 0
      fs-service-system/src/main/java/com/fs/course/service/IFsCourseRedPacketLogService.java
  23. 8 0
      fs-service-system/src/main/java/com/fs/course/service/IFsCourseWatchLogService.java
  24. 31 0
      fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseRedPacketLogServiceImpl.java
  25. 10 0
      fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseWatchLogServiceImpl.java
  26. 8 0
      fs-service-system/src/main/java/com/fs/qw/mapper/QwWorkTaskMapper.java
  27. 8 0
      fs-service-system/src/main/java/com/fs/qw/service/IQwUserService.java
  28. 7 0
      fs-service-system/src/main/java/com/fs/qw/service/IQwWorkTaskService.java
  29. 11 0
      fs-service-system/src/main/java/com/fs/qw/service/impl/QwUserServiceImpl.java
  30. 10 0
      fs-service-system/src/main/java/com/fs/qw/service/impl/QwWorkTaskServiceImpl.java
  31. 24 0
      fs-service-system/src/main/java/com/fs/store/mapper/FsUserMapper.java
  32. 10 3
      fs-service-system/src/main/java/com/fs/store/service/IFsUserService.java
  33. 43 0
      fs-service-system/src/main/java/com/fs/store/service/impl/FsUserServiceImpl.java
  34. 21 2
      fs-service-system/src/main/resources/mapper/company/CompanyUserMapper.xml
  35. 9 0
      fs-service-system/src/main/resources/mapper/course/FsCourseRedPacketLogMapper.xml
  36. 19 0
      fs-service-system/src/main/resources/mapper/course/FsCourseWatchLogMapper.xml
  37. 11 0
      fs-service-system/src/main/resources/mapper/qw/QwWorkTaskMapper.xml
  38. 8 0
      fs-service-system/src/main/resources/mapper/store/FsUserMapper.xml

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

@@ -0,0 +1,63 @@
+package com.fs.app.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.fs.app.annotation.Login;
+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 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.List;
+
+@Slf4j
+@Api(tags = "企业标签接口")
+@RestController
+@RequestMapping("/app/companyTag")
+@AllArgsConstructor
+public class CompanyTagController extends AppBaseController {
+
+    private final ICompanyTagService companyTagService;
+
+    /**
+     * 查询公司标签列表
+     */
+    @Login
+    @GetMapping("/list")
+    @ApiOperation("查询公司标签列表")
+    public R list() {
+        CompanyTag companyTag = new CompanyTag();
+        companyTag.setCompanyId(getCompanyId());
+        List<CompanyTag> list = companyTagService.selectCompanyTagList(companyTag);
+        return R.ok().put("data", list);
+    }
+
+    /**
+     * 新增公司标签
+     */
+    @Login
+    @PostMapping("/add")
+    @ApiOperation("新增公司标签")
+    public R add(@RequestBody CompanyTag companyTag) throws CustomException {
+        log.debug("新增公司标签 companyTag: {}", JSON.toJSONString(companyTag));
+        companyTag.setCompanyId(getCompanyId());
+        companyTagService.insertCompanyTag(companyTag);
+        return R.ok();
+    }
+
+    /**
+     * 删除公司标签
+     */
+    @Login
+    @PostMapping("/delete")
+    @ApiOperation("删除公司标签")
+    public R remove(@RequestParam List<Long> tagIds) {
+        log.debug("删除公司标签 tagIds: {}", tagIds);
+        companyTagService.deleteCompanyTagByTagIds(tagIds);
+        return R.ok();
+    }
+}

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

@@ -0,0 +1,84 @@
+package com.fs.app.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.fs.app.annotation.Login;
+import com.fs.app.vo.CompanySubUserVO;
+import com.fs.common.core.domain.R;
+import com.fs.common.utils.bean.BeanUtils;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.param.BaseQueryParam;
+import com.fs.company.service.ICompanyUserService;
+import com.fs.course.service.IFsCourseRedPacketLogService;
+import com.fs.course.service.IFsCourseWatchLogService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+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.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Api(tags = "企业用户接口")
+@RestController
+@RequestMapping("/app/companyUser")
+@AllArgsConstructor
+public class CompanyUserController extends AppBaseController {
+
+    private final ICompanyUserService companyUserService;
+    private final IFsCourseWatchLogService courseWatchLogService;
+    private final IFsCourseRedPacketLogService courseRedPacketLogService;
+
+    @Login
+    @ApiOperation("下级用户列表")
+    @GetMapping("/getCompanyUserList")
+    public R getCompanyUserList(@RequestParam BaseQueryParam baseParam) {
+        log.debug("下级用户列表 param:{}", JSON.toJSONString(baseParam));
+        PageHelper.startPage(baseParam.getPageNum(), baseParam.getPageSize());
+        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);
+
+            Map<String, Object> params = new HashMap<>();
+            params.put("date", LocalDate.now());
+            params.put("companyUserId", u.getUserId());
+            params.put("logTypes", Arrays.asList(1,2,4));
+
+            // 今日观看人数
+            int count = courseWatchLogService.countByMap(params);
+            vo.setTodayWatchCount(count);
+
+            // 今日完播人数
+            params.put("logTypes", Collections.singletonList(2));
+            int finishCount = courseWatchLogService.countByMap(params);
+            vo.setTodayFinishCount(finishCount);
+
+            // 今日完播率
+            BigDecimal rate = count > 0 ? BigDecimal.valueOf(finishCount)
+                    .divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP)
+                    .multiply(BigDecimal.valueOf(100)) : BigDecimal.ZERO;
+            vo.setTodayFinishRate(rate);
+
+            // 今日红包金额
+            BigDecimal amount = courseRedPacketLogService.getSumByCompanyUserIdId(u.getUserId());
+            vo.setTodayRedPacketAmount(amount);
+
+            return vo;
+        }).collect(Collectors.toList());
+
+        PageInfo<CompanySubUserVO> pageInfo = new PageInfo<>(users);
+        BeanUtils.copyProperties(page, pageInfo);
+
+        return R.ok().put("data", pageInfo);
+    }
+
+}

+ 20 - 0
fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java

@@ -2,10 +2,13 @@ package com.fs.app.controller;
 
 
 import com.fs.app.annotation.Login;
+import com.fs.app.utils.ValidateUtil;
+import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.service.ICompanyTagUserService;
 import com.fs.company.service.ICompanyUserService;
+import com.fs.company.vo.CompanyQueryVo;
 import com.fs.store.param.h5.FsUserPageListParam;
 import com.fs.store.param.h5.TagListParam;
 import com.fs.store.service.IFsUserService;
@@ -22,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 
 @Api(tags = "用户会员相关接口")
@@ -104,5 +108,21 @@ public class FsUserController extends AppBaseController {
         return ResponseResult.ok(r);
     }
 
+    /**
+     * 统计经销商会员总数和群管总数
+     */
+    @Login
+    @ApiOperation("统计经销商会员总数和群管总数")
+    @PostMapping("/getCompanyUserAndUserCount")
+    public R getCompanyUserAndUserCount(@RequestBody CompanyQueryVo companyQueryVo)  {
+        ValidateUtil.validate(companyQueryVo.getStartTime(), companyQueryVo.getEndTime());
+        if (companyQueryVo.getType()==0){
+            companyQueryVo.setCompanyId(getCompanyId());
+        }else {
+            companyQueryVo.setCompanyUserId(Long.parseLong(getUserId()));
+        }
+        Map<String, Integer> companyUserAndUserCount = fsUserService.getCompanyUserAndUserCount(companyQueryVo);
+        return R.ok().put("data",companyUserAndUserCount);
+    }
 
 }

+ 60 - 0
fs-company-app/src/main/java/com/fs/app/controller/QwWorkTaskController.java

@@ -0,0 +1,60 @@
+package com.fs.app.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.fs.app.annotation.Login;
+import com.fs.common.core.domain.R;
+import com.fs.qw.domain.QwWorkTask;
+import com.fs.qw.service.IQwUserService;
+import com.fs.qw.service.IQwWorkTaskService;
+import com.fs.app.param.QwWorkTaskQueryParam;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.*;
+
+@Slf4j
+@Api(tags = "企微任务看板接口")
+@RestController
+@RequestMapping("/app/qwWorkTask")
+@AllArgsConstructor
+public class QwWorkTaskController extends AppBaseController {
+
+    private final IQwWorkTaskService qwWorkTaskService;
+    private final IQwUserService qwUserService;
+
+    @Login
+    @ApiOperation("企微任务看板列表")
+    @GetMapping("/list")
+    public R list (@Valid QwWorkTaskQueryParam param) {
+        log.debug("企微任务看板列表:{}", JSON.toJSONString(param));
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("qwUserId", param.getQwUserId());
+        params.put("companyId", getCompanyId());
+        params.put("companyUserId", getUserId());
+        params.put("date", param.getDate());
+
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        List<QwWorkTask> list = qwWorkTaskService.selectQwWorkTaskListByMap(params);
+
+        PageInfo<QwWorkTask> pageInfo = new PageInfo<>(list);
+        return R.ok().put("data", pageInfo);
+    }
+
+    @Login
+    @ApiOperation("销售下的企微用户")
+    @GetMapping("/getMyQwUserList")
+    public R userList() {
+        Long userId = Long.parseLong(getUserId());
+        return R.ok().put("data", qwUserService.selectQwUserListOptionsVOByCompanyUserId(userId));
+    }
+
+}

+ 72 - 22
fs-company-app/src/main/java/com/fs/app/controller/UserController.java

@@ -1,65 +1,61 @@
 package com.fs.app.controller;
 
-import cn.hutool.core.img.ImgUtil;
-import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.lang.Validator;
-import cn.hutool.extra.qrcode.QrCodeUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.app.annotation.Login;
-import com.fs.app.param.EditPwdParam;
-import com.fs.app.param.EditUserInfoParam;
-import com.fs.app.param.EditUserQrCodeParam;
-import com.fs.app.param.LoginParam;
+import com.fs.app.param.*;
 import com.fs.app.utils.JwtUtils;
+import com.fs.app.vo.CompanySubUserVO;
+import com.fs.app.vo.CompanyUserAppVO;
 import com.fs.app.vo.UserListVO;
 import com.fs.app.vo.UserVO;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.config.FSConfig;
-import com.fs.common.constant.Constants;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.exception.BaseException;
 import com.fs.common.exception.CustomException;
+import com.fs.common.exception.ServiceException;
 import com.fs.common.utils.PinYinUtil;
 
-import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.common.utils.bean.BeanUtils;
 import com.fs.common.utils.http.HttpUtils;
 import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.domain.CompanyUserCard;
+import com.fs.company.param.BaseQueryParam;
 import com.fs.company.param.CompanyUserCardQueryParam;
 import com.fs.company.service.*;
 import com.fs.company.vo.CompanyUserVO;
 import com.fs.core.security.SecurityUtils;
-import com.fs.crm.param.CrmDelEventParam;
-import com.fs.crm.param.CrmEventListQueryParam;
-import com.fs.crm.vo.CrmEventListQueryVO;
-import com.fs.store.vo.FsStoreCouponIssueVO;
+import com.fs.course.service.IFsCourseRedPacketLogService;
+import com.fs.his.param.BaseParam;
+import com.fs.store.service.IFsUserService;
 import com.fs.wx.miniapp.config.WxMaProperties;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
-import io.jsonwebtoken.Claims;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import org.apache.commons.io.FileUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
+import java.math.BigDecimal;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import static com.fs.common.constant.Constants.PAGE_SIZE;
 
+@Slf4j
 @Api("个人中心")
 @RestController
 @RequestMapping(value = "/app/user")
@@ -84,6 +80,10 @@ public class UserController extends AppBaseController {
 
     @Autowired
     ICompanyUserCardService companyUserCardService;
+    @Autowired
+    private IFsUserService fsUserService;
+    @Autowired
+    private IFsCourseRedPacketLogService courseRedPacketLogService;
 
     @Autowired
     private WxMaProperties properties;
@@ -256,10 +256,13 @@ public class UserController extends AppBaseController {
     @Login
     @ApiOperation("获取通讯录")
     @GetMapping("/getAllUsers")
-    public R getAllUsers(HttpServletRequest request, @ApiParam(required = false, name = "searchKey", value = "searchKey") @RequestParam(value = "searchKey", required = false) String searchKey) {
+    public R getAllUsers(HttpServletRequest request, @ApiParam(required = false, name = "searchKey", value = "searchKey") @RequestParam(value = "searchKey", required = false) String searchKey,
+                         @RequestParam Integer isAudit) {
+        log.debug("获取通讯录 searchKey:{}, isAudit: {}", searchKey, isAudit);
         CompanyUser user = new CompanyUser();
         user.setNickName(searchKey);
         user.setCompanyId(getCompanyId());
+        user.setIsAudit(isAudit);
         user.setIsDel(0);
         List<CompanyUserVO> list = userService.selectMyUserList(user);
         List<UserVO> users = new ArrayList<>();
@@ -270,6 +273,10 @@ public class UserController extends AppBaseController {
             vo.setNickName(u.getNickName());
             vo.setUserId(u.getUserId());
             vo.setAvatar(u.getAvatar());
+            vo.setRegisterTime(u.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
+            vo.setStatus(u.getStatus());
+            vo.setPhoneNumber(u.getPhonenumber());
+            vo.setIsAudit(u.getIsAudit());
             users.add(vo);
         }
         Map<Object, List<UserVO>> res = users.parallelStream().collect(
@@ -285,13 +292,14 @@ public class UserController extends AppBaseController {
         return R.ok().put("users", vos);
     }
 
-    @Login
+//    @Login
     @ApiOperation("获取用户信息ByUserId")
     @GetMapping("/getUserInfoByUserId")
     public R getUserInfoByUserId(
             @ApiParam(required = true, name = "userId", value = "用户ID") @RequestParam(value = "userId", required = false) Long userId,
             HttpServletRequest request) {
         try {
+            log.debug("获取用户信息ByUserId userId:{}", userId);
             CompanyUser user = userService.selectCompanyUserById(userId);
             List<String> postList = postService.selectPostNameListByUserId(userId);
             if (user == null) {
@@ -300,7 +308,24 @@ public class UserController extends AppBaseController {
             if (user.getStatus().equals("1")) {
                 return R.error(40002, "用户已停用");
             }
-            return R.ok().put("user", user).put("post", postList);
+
+
+            // 查询用户会员数、今日新增用户数
+            Map<String, Long> result = fsUserService.getUserVipCountByCompanyUserId(userId);
+            // 红包数
+            int redPackCount = courseRedPacketLogService.getCountByCompanyUserIdId(userId);
+            // 新用户红包金额
+            BigDecimal newVipRedPackAmount = courseRedPacketLogService.getNewVipRedPackAmountByCompanyUserIdId(userId);
+
+            CompanyUserAppVO userVO = new CompanyUserAppVO();
+            BeanUtils.copyProperties(user, userVO);
+
+            userVO.setVipCount(result.getOrDefault("vipCount", 0L));
+            userVO.setNewVipCount(result.getOrDefault("newVipCount", 0L));
+            userVO.setRedPacketCount(redPackCount);
+            userVO.setNewVipRedPackAmount(newVipRedPackAmount);
+
+            return R.ok().put("user", userVO).put("post", postList);
         } catch (Exception e) {
 
             return R.error("操作异常");
@@ -583,4 +608,29 @@ public class UserController extends AppBaseController {
         return R.ok().put("data", list);
     }
 
+    @Login
+    @ApiOperation("修改用户状态")
+    @PostMapping("/changeUserState")
+    public R changeUserState(@RequestParam Long userId) {
+        log.debug("修改用户状态 userId :{}", userId);
+        CompanyUser companyUser = companyUserService.selectCompanyUserById(userId);
+        if (Objects.isNull(companyUser)) {
+            throw new ServiceException("用户不存在");
+        }
+
+        String state = "0".equals(companyUser.getStatus()) ? "1" : "0";
+        companyUser.setStatus(state);
+        companyUserService.updateCompanyUser(companyUser);
+        return R.ok();
+    }
+
+    @Login
+    @ApiOperation("批量审核用户")
+    @PostMapping("/audit")
+    public R auditUser(@RequestParam List<Long> userIds) {
+        log.debug("批量审核用户 userIds :{}", userIds);
+        companyUserService.auditUsers(userIds);
+        return R.ok();
+    }
+
 }

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

@@ -0,0 +1,23 @@
+package com.fs.app.param;
+
+import com.fs.common.param.BaseQueryParam;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class QwWorkTaskQueryParam extends BaseQueryParam {
+
+    /**
+     * 企微用户ID
+     */
+    @NotBlank(message = "ID不能为空")
+    private String qwUserId;
+    /**
+     * 时间 (yyyy-MM-dd)
+     */
+    @NotBlank(message = "时间不能为空")
+    private String date;
+}

+ 27 - 0
fs-company-app/src/main/java/com/fs/app/utils/ValidateUtil.java

@@ -0,0 +1,27 @@
+package com.fs.app.utils;
+
+import com.fs.common.exception.CustomException;
+import com.fs.common.utils.StringUtils;
+
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+
+public class ValidateUtil {
+    public static void validate(String startTime, String endTime) throws CustomException {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        if (StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)){
+            try {
+                formatter.parse(startTime);
+            } catch (DateTimeParseException e) {
+                throw new CustomException("开始时间格式不正确,应为 yyyy-MM-dd HH:mm:ss");
+            }
+
+            try {
+                formatter.parse(endTime);
+            } catch (DateTimeParseException e) {
+                throw new CustomException("结束时间格式不正确,应为 yyyy-MM-dd HH:mm:ss");
+            }
+        }
+
+    }
+}

+ 28 - 0
fs-company-app/src/main/java/com/fs/app/vo/CompanySubUserVO.java

@@ -0,0 +1,28 @@
+package com.fs.app.vo;
+
+import com.fs.company.domain.CompanyUser;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class CompanySubUserVO extends CompanyUser {
+    /**
+     * 今日观看人数
+     */
+    private Integer todayWatchCount;
+    /**
+     * 今日完播人数
+     */
+    private Integer todayFinishCount;
+    /**
+     * 今日完播率
+     */
+    private BigDecimal todayFinishRate;
+    /**
+     * 今日红包金额
+     */
+    private BigDecimal todayRedPacketAmount;
+}

+ 29 - 0
fs-company-app/src/main/java/com/fs/app/vo/CompanyUserAppVO.java

@@ -0,0 +1,29 @@
+package com.fs.app.vo;
+
+import com.fs.company.domain.CompanyUser;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class CompanyUserAppVO extends CompanyUser {
+
+    /**
+     * 会员数
+     */
+    private Long vipCount;
+    /**
+     * 新增会员数
+     */
+    private Long newVipCount;
+    /**
+     * 红包数
+     */
+    private Integer redPacketCount;
+    /**
+     * 新用户红包金额
+     */
+    private BigDecimal newVipRedPackAmount;
+}

+ 17 - 39
fs-company-app/src/main/java/com/fs/app/vo/UserVO.java

@@ -1,5 +1,13 @@
 package com.fs.app.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+
+@Getter
+@Setter
 public class UserVO {
     String nickName;
     String firstLetter;
@@ -7,43 +15,13 @@ public class UserVO {
     Long userId;
     String avatar;
 
-    public String getAvatar() {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar) {
-        this.avatar = avatar;
-    }
-
-    public String getNickName() {
-        return nickName;
-    }
-
-    public void setNickName(String nickName) {
-        this.nickName = nickName;
-    }
-
-    public String getFirstLetter() {
-        return firstLetter;
-    }
-
-    public void setFirstLetter(String firstLetter) {
-        this.firstLetter = firstLetter;
-    }
-
-    public String getDeptName() {
-        return deptName;
-    }
-
-    public void setDeptName(String deptName) {
-        this.deptName = deptName;
-    }
-
-    public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
+    // 注册时间
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate registerTime;
+    // 禁用状态 0正常 1停用
+    private String status;
+    // 电话号码
+    private String phoneNumber;
+    // 审核状态 0未审核 1已审核
+    private Integer isAudit;
 }

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

@@ -127,6 +127,17 @@ public class CompanyUser extends BaseEntity
 
     private Integer qwStatus;
 
+    /** 是否审核 */
+    private Integer isAudit;
+
+    public Integer getIsAudit() {
+        return isAudit;
+    }
+
+    public void setIsAudit(Integer isAudit) {
+        this.isAudit = isAudit;
+    }
+
     /** 域名 */
     private String domain;
 

+ 6 - 0
fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserMapper.java

@@ -256,6 +256,12 @@ public interface CompanyUserMapper
 
     List<CompanyUser> selectAllCompanyUserByParentId(Long parentId);
 
+    /**
+     * 批量审核用户
+     * @param userIds 用户ID集合
+     */
+    void auditUsers(List<Long> userIds);
+
     List<CompanyUser> getAllUserListLimit(@Param("companyId") Long companyId,
                                           @Param("keywords") String keywords);
 }

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

@@ -1,6 +1,8 @@
 package com.fs.company.service;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 import com.fs.common.core.domain.R;
 import com.fs.company.domain.Company;
@@ -10,7 +12,6 @@ import com.fs.company.vo.CompanyVO;
 import com.fs.store.domain.FsStoreOrder;
 import com.fs.store.domain.FsStorePayment;
 import com.fs.his.vo.OptionsVO;
-import org.apache.ibatis.annotations.Param;
 
 /**
  * 企业Service接口

+ 6 - 0
fs-service-system/src/main/java/com/fs/company/service/ICompanyTagService.java

@@ -58,4 +58,10 @@ public interface ICompanyTagService
      * @return 结果
      */
     public int deleteCompanyTagById(Long tagId);
+
+    /**
+     * 删除标签
+     * @param tagIds 标签ID
+     */
+    void deleteCompanyTagByTagIds(List<Long> tagIds);
 }

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

@@ -137,5 +137,18 @@ public interface ICompanyUserService {
 
     List<CompanyUser> selectAllCompanyUserByParentId(Long parentId);
 
+    /**
+     * 批量审核用户
+     * @param userIds 用户ID集合
+     */
+    void auditUsers(List<Long> userIds);
+
+    /**
+     * 查询下级销售列表
+     * @param companyUserId 销售ID
+     * @return list
+     */
+    List<CompanyUser> selectCompanySubUserList(Long companyUserId);
+
     List<CompanyUser> getAllUserListLimit(Long companyId, String keywords);
 }

+ 3 - 6
fs-service-system/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java

@@ -1,8 +1,7 @@
 package com.fs.company.service.impl;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 import cn.hutool.json.JSONUtil;
 import com.fs.common.core.domain.R;
@@ -10,17 +9,15 @@ import com.fs.common.utils.DateUtils;
 import com.fs.company.domain.*;
 import com.fs.company.mapper.*;
 import com.fs.company.param.CompanyParam;
-import com.fs.company.service.ICompanyProfitService;
 import com.fs.company.vo.CompanyCrmVO;
 import com.fs.company.vo.CompanyVO;
+import com.fs.course.mapper.FsCourseRedPacketLogMapper;
 import com.fs.store.config.StoreConfig;
 import com.fs.store.domain.FsStoreOrder;
 import com.fs.store.domain.FsStorePayment;
 import com.fs.store.mapper.FsStoreOrderMapper;
 import com.fs.his.vo.OptionsVO;
 import com.fs.system.service.ISysConfigService;
-import com.github.pagehelper.PageHelper;
-import lombok.Synchronized;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -61,7 +58,7 @@ public class CompanyServiceImpl implements ICompanyService
     @Autowired
     private FsStoreOrderMapper storeOrderMapper;
     @Autowired
-    private ICompanyProfitService companyProfitService;
+    private FsCourseRedPacketLogMapper courseRedPacketLogMapper;
 
     @Override
     public List<OptionsVO> selectAllCompanyList() {

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

@@ -92,4 +92,16 @@ public class CompanyTagServiceImpl implements ICompanyTagService
     {
         return companyTagMapper.deleteCompanyTagById(tagId);
     }
+
+    /**
+     * 删除标签
+     * @param tagIds 标签ID
+     */
+    @Override
+    public void deleteCompanyTagByTagIds(List<Long> tagIds) {
+        if (tagIds.isEmpty()) {
+            return;
+        }
+        companyTagMapper.deleteCompanyTagByIds(tagIds.toArray(new Long[0]));
+    }
 }

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

@@ -407,4 +407,26 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         return companyUserMapper.getAllUserListLimit(companyId,keywords);
     }
 
+    /**
+     * 批量审核用户
+     * @param userIds 用户ID集合
+     */
+    @Override
+    public void auditUsers(List<Long> userIds) {
+        if (userIds.isEmpty()) {
+            return;
+        }
+        companyUserMapper.auditUsers(userIds);
+    }
+
+    /**
+     * 查询下级销售列表
+     * @param companyUserId 销售ID
+     * @return list
+     */
+    @Override
+    public List<CompanyUser> selectCompanySubUserList(Long companyUserId) {
+        return companyUserMapper.selectAllCompanyUserByParentId(companyUserId);
+    }
+
 }

+ 26 - 0
fs-service-system/src/main/java/com/fs/company/vo/CompanyQueryVo.java

@@ -0,0 +1,26 @@
+package com.fs.company.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel
+public class CompanyQueryVo {
+    @ApiModelProperty("供销商id")
+    private Long companyId;
+    @ApiModelProperty("群管id")
+    private Long companyUserId;
+    @ApiModelProperty("开始时间")
+    private String startTime;
+    @ApiModelProperty("结束时间")
+    private String endTime;
+    @ApiModelProperty("课程id")
+    private Long courseId;
+    @ApiModelProperty("小节id")
+    private Long videoId;
+    @ApiModelProperty("用户id")
+    private Long userId;
+    @ApiModelProperty("0:经销商/1:群管")
+    private Long type;
+}

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

@@ -7,6 +7,7 @@ import com.fs.course.vo.FsCourseRedPacketLogListPVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -130,4 +131,27 @@ public interface FsCourseRedPacketLogMapper
 
     @Select("select * from fs_course_red_packet_log where video_id = #{videoId} and user_id = #{userId} limit 1")
     FsCourseRedPacketLog selectFsCourseRedPacketLogByTemporary(@Param("videoId") Long videoId, @Param("userId")Long userId);
+
+    /**
+     * 查询红包数量
+     * @param companyUserId 销售ID
+     * @return count
+     */
+    @Select("select count(fcrpl.log_id) from fs_course_red_packet_log fcrpl where fcrpl.company_user_id = #{companyUserId}")
+    int getCountByCompanyUserIdId(@Param("companyUserId") Long companyUserId);
+
+    /**
+     * 查询新用户红包金额总和
+     * @param companyUserId 销售ID
+     * @return amount
+     */
+    BigDecimal getNewVipRedPackAmountByCompanyUserIdId(@Param("companyUserId") Long companyUserId);
+
+    /**
+     * 查询红包金额数
+     * @param companyUserId 销售ID
+     * @return amount
+     */
+    @Select("select sum(fcrpl.amount) from fs_course_red_packet_log fcrpl where fcrpl.company_user_id = #{companyUserId}")
+    BigDecimal getSumByCompanyUserIdId(@Param("companyUserId") Long companyUserId);
 }

+ 8 - 0
fs-service-system/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java

@@ -14,6 +14,7 @@ import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 短链课程看课记录Mapper接口
@@ -299,4 +300,11 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
     @Select("SELECT l.qw_external_contact_id,l.log_type,l.qw_user_id,l.create_time lineTime,l.company_user_id as company_user_id,l.user_id as user_id,l.company_id as company_id FROM fs_course_watch_log l" +
             " WHERE DATE(l.create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY) and l.video_id =#{videoId}")
     List<FsQwCourseWatchLogVO> selectFsCourseBeforeMonthWatchLogByVideoId(Long videoId);
+
+    /**
+     * 根据条件查询条数
+     * @param params    参数
+     * @return  count
+     */
+    int countByMap(@Param("params") Map<String, Object> params);
 }

+ 22 - 0
fs-service-system/src/main/java/com/fs/course/service/IFsCourseRedPacketLogService.java

@@ -1,5 +1,6 @@
 package com.fs.course.service;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 import com.fs.common.core.domain.R;
@@ -67,4 +68,25 @@ public interface IFsCourseRedPacketLogService
 
     List<FsCourseRedPacketLogListPVO> selectFsCourseRedPacketLogListVO(FsCourseRedPacketLogParam fsCourseRedPacketLog);
     List<FsCourseRedPacketLogListPVO> selectFsCourseRedPacketLogListVONew(FsCourseRedPacketLogParam fsCourseRedPacketLog);
+
+    /**
+     * 查询红包数量
+     * @param companyUserId 销售ID
+     * @return count
+     */
+    int getCountByCompanyUserIdId(Long companyUserId);
+
+    /**
+     * 查询新用户红包金额总和
+     * @param companyUserId 销售ID
+     * @return amount
+     */
+    BigDecimal getNewVipRedPackAmountByCompanyUserIdId(Long companyUserId);
+
+    /**
+     * 查询红包金额数
+     * @param companyUserId 销售ID
+     * @return amount
+     */
+    BigDecimal getSumByCompanyUserIdId(Long companyUserId);
 }

+ 8 - 0
fs-service-system/src/main/java/com/fs/course/service/IFsCourseWatchLogService.java

@@ -9,6 +9,7 @@ import com.fs.course.vo.FsCourseWatchLogListVO;
 import com.fs.course.vo.FsCourseWatchLogStatisticsListVO;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 短链课程看课记录Service接口
@@ -105,4 +106,11 @@ public interface IFsCourseWatchLogService extends IService<FsCourseWatchLog> {
 
 
     FsCourseWatchLog getWatchCourseVideoH5(Long videoId,String qwUserId,Long externalId);
+
+    /**
+     * 根据条件查询数量
+     * @param params    参数
+     * @return  count
+     */
+    int countByMap(Map<String, Object> params);
 }

+ 31 - 0
fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseRedPacketLogServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.course.service.impl;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -119,4 +120,34 @@ public class FsCourseRedPacketLogServiceImpl implements IFsCourseRedPacketLogSer
     public List<FsCourseRedPacketLogListPVO> selectFsCourseRedPacketLogListVONew(FsCourseRedPacketLogParam fsCourseRedPacketLog) {
         return fsCourseRedPacketLogMapper.selectFsCourseRedPacketLogListVONew(fsCourseRedPacketLog);
     }
+
+    /**
+     * 查询红包数量
+     * @param companyUserId 销售ID
+     * @return count
+     */
+    @Override
+    public int getCountByCompanyUserIdId(Long companyUserId) {
+        return fsCourseRedPacketLogMapper.getCountByCompanyUserIdId(companyUserId);
+    }
+
+    /**
+     * 查询新用户红包金额总和
+     * @param companyUserId 销售ID
+     * @return amount
+     */
+    @Override
+    public BigDecimal getNewVipRedPackAmountByCompanyUserIdId(Long companyUserId) {
+        return fsCourseRedPacketLogMapper.getNewVipRedPackAmountByCompanyUserIdId(companyUserId);
+    }
+
+    /**
+     * 查询红包金额数
+     * @param companyUserId 销售ID
+     * @return amount
+     */
+    @Override
+    public BigDecimal getSumByCompanyUserIdId(Long companyUserId) {
+        return fsCourseRedPacketLogMapper.getSumByCompanyUserIdId(companyUserId);
+    }
 }

+ 10 - 0
fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseWatchLogServiceImpl.java

@@ -211,6 +211,16 @@ public class FsCourseWatchLogServiceImpl extends ServiceImpl<FsCourseWatchLogMap
         return fsCourseWatchLogMapper.getWatchCourseLogVideoBySop(videoId,qwUserId,externalId);
     }
 
+    /**
+     * 根据条件查询数量
+     * @param params    参数
+     * @return  count
+     */
+    @Override
+    public int countByMap(Map<String, Object> params) {
+        return baseMapper.countByMap(params);
+    }
+
     @Override
     public FsCourseWatchLog getWatchCourseLogVideoBySop(Long videoId,String qwUserId,Long externalId )
     {

+ 8 - 0
fs-service-system/src/main/java/com/fs/qw/mapper/QwWorkTaskMapper.java

@@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 企微任务看板Mapper接口
@@ -116,4 +117,11 @@ public interface QwWorkTaskMapper extends BaseMapper<QwWorkTask>{
             "</script>"
     })
     void updateQwWorkTaskStatus1(List<Long> overIds1);
+
+    /**
+     * 查询企微任务看板
+     * @param params 参数
+     * @return list
+     */
+    List<QwWorkTask> selectQwWorkTaskListByMap(@Param("params") Map<String, Object> params);
 }

+ 8 - 0
fs-service-system/src/main/java/com/fs/qw/service/IQwUserService.java

@@ -138,4 +138,12 @@ public interface IQwUserService
 
 
     void addRedisKey(String id, String key);
+
+    /**
+     * 根据企微用户ID和企微ID查询企微用户记录
+     * @param qwUserId  企微用户ID
+     * @param corpId    企微ID
+     * @return  QwUser
+     */
+    QwUser getByQwUserIdAndCorId(String qwUserId, String corpId);
 }

+ 7 - 0
fs-service-system/src/main/java/com/fs/qw/service/IQwWorkTaskService.java

@@ -6,6 +6,7 @@ import com.fs.qw.param.QwWorkTaskListParam;
 import com.fs.qw.vo.QwWorkTaskListVO;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 企微任务看板Service接口
@@ -99,4 +100,10 @@ public interface IQwWorkTaskService extends IService<QwWorkTask>{
      */
     void addQwWorkByCourseLastTime();
 
+    /**
+     * 查询企微任务看板
+     * @param params 参数
+     * @return list
+     */
+    List<QwWorkTask> selectQwWorkTaskListByMap(Map<String, Object> params);
 }

+ 11 - 0
fs-service-system/src/main/java/com/fs/qw/service/impl/QwUserServiceImpl.java

@@ -728,6 +728,17 @@ public class QwUserServiceImpl implements IQwUserService
         redisCache.setCacheObject(key,id,10,TimeUnit.SECONDS);
     }
 
+    /**
+     * 根据企微用户ID和企微ID查询企微用户记录
+     * @param qwUserId  企微用户ID
+     * @param corpId    企微ID
+     * @return  QwUser
+     */
+    @Override
+    public QwUser getByQwUserIdAndCorId(String qwUserId, String corpId) {
+        return qwUserMapper.selectQwUserByCorpIdAndUserId(corpId, qwUserId);
+    }
+
     void updateQwUserName(QwUser user,QwCompany qwCompany){
         String serverQwUserName = qwApiService.getServerQwUserName(qwCompany.getCorpId(), qwCompany.getOpenSecret(), user.getQwUserId());
         if (serverQwUserName==null|| serverQwUserName.isEmpty()){

+ 10 - 0
fs-service-system/src/main/java/com/fs/qw/service/impl/QwWorkTaskServiceImpl.java

@@ -441,6 +441,16 @@ public class QwWorkTaskServiceImpl extends ServiceImpl<QwWorkTaskMapper, QwWorkT
         }
     }
 
+    /**
+     * 查询企微任务看板
+     * @param params 参数
+     * @return list
+     */
+    @Override
+    public List<QwWorkTask> selectQwWorkTaskListByMap(Map<String, Object> params) {
+        return qwWorkTaskMapper.selectQwWorkTaskListByMap(params);
+    }
+
     /**
      * 根据SOP执行日志和特定条件,为符合要求的外部联系人添加企业微信工作任务。
      * <p>

+ 24 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsUserMapper.java

@@ -1,6 +1,7 @@
 package com.fs.store.mapper;
 
 import java.util.List;
+import java.util.Map;
 
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
@@ -221,6 +222,13 @@ public interface FsUserMapper
 
     int batchUpdateFsUserByIds(@Param("ids") String[] ids, @Param("status") Integer status);
 
+    /**
+     * 查询销售会员总数,今日新增会员数
+     * @param companyUserId 销售ID
+     * @return map
+     */
+    Map<String, Long> getUserVipCountByCompanyUserId(@Param("companyUserId") Long companyUserId);
+
     /**
      * 分页获取客户
      * @param param 参数
@@ -230,4 +238,20 @@ public interface FsUserMapper
     Long selectCusListPageCount(SelectCusListPageParam param);
 
     void transferCompanyUser(FsUserTransferParamDTO param);
+
+    /**
+     * 公司fsUser数
+     * @param companyId 公司ID
+     * @return count
+     */
+    @Select("select count(fu.user_id) from fs_user fu where fu.company_id = #{companyId}")
+    int selectCountByCompanyId(@Param("companyId") Long companyId);
+
+    /**
+     * 公司销售fsUser数
+     * @param companyUserId 销售ID
+     * @return count
+     */
+    @Select("select count(fu.user_id) from fs_user fu where fu.company_user_id = #{companyUserId}")
+    int selectCountByCompanyUserId(@Param("companyUserId") Long companyUserId);
 }

+ 10 - 3
fs-service-system/src/main/java/com/fs/store/service/IFsUserService.java

@@ -1,13 +1,13 @@
 package com.fs.store.service;
 
 import java.util.List;
+import java.util.Map;
 
 import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
+import com.fs.company.vo.CompanyQueryVo;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
-import com.fs.qw.vo.newvo.ExternalContactDetailsVO;
-import com.fs.qw.vo.newvo.ExternalContactPageVO;
 import com.fs.store.domain.FsStoreOrder;
 import com.fs.store.domain.FsStoreOrderItem;
 import com.fs.store.domain.FsUser;
@@ -20,7 +20,6 @@ import com.fs.store.vo.FsCompanyUserListQueryVO;
 import com.fs.store.vo.FsUserTuiVO;
 import com.fs.store.vo.h5.FsUserPageListVO;
 import com.fs.store.vo.h5.UserDetailsVO;
-import com.fs.store.vo.h5.UserListCountVO;
 import com.fs.store.vo.h5.UserListPageVO;
 
 /**
@@ -146,4 +145,12 @@ public interface IFsUserService
 
     void transfer(FsUserTransferParamDTO param);
 
+    /**
+     * 查询销售会员总数,今日新增会员数
+     * @param companyUserId 销售ID
+     * @return map
+     */
+    Map<String, Long> getUserVipCountByCompanyUserId(Long companyUserId);
+
+    Map<String, Integer> getCompanyUserAndUserCount(CompanyQueryVo companyQueryVo);
 }

+ 43 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserServiceImpl.java

@@ -1,6 +1,8 @@
 package com.fs.store.service.impl;
 
 import java.math.BigDecimal;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -14,6 +16,8 @@ import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.utils.DateUtils;
 import com.fs.company.cache.ICompanyUserCacheService;
 import com.fs.company.domain.CompanyUser;
+import com.fs.company.service.ICompanyUserService;
+import com.fs.company.vo.CompanyQueryVo;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
 import com.fs.qw.vo.newvo.ExternalContactNumVO;
@@ -72,6 +76,9 @@ public class FsUserServiceImpl implements IFsUserService
 
     @Autowired
     private ICompanyUserCacheService companyUserCacheService;
+    @Autowired
+    private ICompanyUserService companyUserService;
+
     /**
      * 查询用户
      *
@@ -456,4 +463,40 @@ public class FsUserServiceImpl implements IFsUserService
 
         fsUserMapper.transferCompanyUser(param);
     }
+
+    /**
+     * 查询销售会员总数,今日新增会员数
+     * @param companyUserId 销售ID
+     * @return map
+     */
+    @Override
+    public Map<String, Long> getUserVipCountByCompanyUserId(Long companyUserId) {
+        return fsUserMapper.getUserVipCountByCompanyUserId(companyUserId);
+    }
+
+    @Override
+    public Map<String, Integer> getCompanyUserAndUserCount(CompanyQueryVo companyQueryVo) {
+        if (companyQueryVo.getCompanyId() == null && companyQueryVo.getCompanyUserId() == null) {
+            return Collections.emptyMap();
+        }
+
+        HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
+        if (companyQueryVo.getCompanyId() != null) {
+            Long companyId = companyQueryVo.getCompanyId();
+            //会员人数
+            int count = fsUserMapper.selectCountByCompanyId(companyId);
+            //群管人数
+            Integer companyCount = companyUserService.selectCompanyUserCountByCompanyId(companyId);
+            stringIntegerHashMap.put("companyUserUserCount", count);
+            stringIntegerHashMap.put("companyUserCount", companyCount);
+            return stringIntegerHashMap;
+        } else if (companyQueryVo.getCompanyUserId() != null) {
+            Long companyUserId = companyQueryVo.getCompanyUserId();
+            //会员人数
+            int count = fsUserMapper.selectCountByCompanyUserId(companyUserId);
+            stringIntegerHashMap.put("companyUserUserCount", count);
+            return stringIntegerHashMap;
+        }
+        return Collections.emptyMap();
+    }
 }

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

@@ -37,6 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="qwUserId"    column="qw_user_id"    />
         <result property="qwStatus"    column="qw_status"    />
         <result property="domain"    column="domain"    />
+        <result property="isAudit"    column="is_audit"    />
         <association property="dept"    column="dept_id" javaType="CompanyDept" resultMap="deptResult" />
         <collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
 
@@ -133,6 +134,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="qwUserId != null">qw_user_id,</if>
             <if test="qwStatus != null">qw_status,</if>
             <if test="domain != null">`domain`,</if>
+            <if test="isAudit != null">`is_audit`,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="companyId != null">#{companyId},</if>
@@ -163,6 +165,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="qwUserId != null">#{qwUserId},</if>
             <if test="qwStatus != null">#{qwStatus},</if>
             <if test="domain != null">#{domain},</if>
+            <if test="isAudit != null">#{isAudit},</if>
          </trim>
     </insert>
 
@@ -196,6 +199,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="qwUserId != null">qw_user_id = #{qwUserId},</if>
             <if test="qwStatus != null">qw_status = #{qwStatus},</if>
             <if test="domain != null">`domain` = #{domain},</if>
+            <if test="isAudit != null">`is_audit` = #{isAudit},</if>
         </trim>
         where user_id = #{userId}
     </update>
@@ -228,6 +232,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="jpushId != null">jpush_id = #{jpushId},</if>
             <if test="qwUserId != null">qw_user_id = #{qwUserId},</if>
             <if test="qwStatus != null">qw_status = #{qwStatus},</if>
+            <if test="domain != null">`domain` = #{domain},</if>
+            <if test="isAudit != null">`is_audit` = #{isAudit},</if>
         </trim>
         where company_id = #{companyId}
     </update>
@@ -258,7 +264,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where u.user_name = #{userName}
     </select>
     <sql id="selectUserVo">
-        select u.user_id,u.company_id,u.qw_user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time,u.id_card, u.remark,u.user_type,u.open_id,u.qr_code_weixin,u.qr_code_wecom,u.jpush_id,u.domain,
+        select u.user_id,u.company_id,u.qw_user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time,u.id_card, u.remark,u.user_type,u.open_id,u.qr_code_weixin,u.qr_code_wecom,u.jpush_id,u.domain,u.is_audit,
         d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
         from company_user u
@@ -269,7 +275,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 
     <select id="selectMyUserList" parameterType="com.fs.company.vo.CompanyUserVO" resultMap="CompanyUserVOResult">
-        select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.open_id,u.id_card, d.dept_name, d.leader from company_user u
+        select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.open_id,u.id_card, d.dept_name, d.leader, u.is_audit
+        from company_user u
         left join company_dept d on u.dept_id = d.dept_id
         where u.del_flag = '0' and u.status=0
         <if test="companyId != null  ">
@@ -290,6 +297,9 @@ 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>
+        <if test="isAudit != null">
+            AND u.is_audit = #{isAudit}
+        </if>
 
     </select>
 
@@ -364,6 +374,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="remark"    column="remark"    />
         <result property="openId"    column="open_id"    />
         <result property="nowDayCustomerCount"    column="now_day_customer_count"    />
+        <result property="isAudit"    column="is_audit"    />
         <association property="dept"    column="dept_id" javaType="CompanyDept" resultMap="deptResult" />
         <collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
         <collection property="posts" javaType="java.util.ArrayList" ofType="com.fs.company.domain.CompanyPost"
@@ -399,5 +410,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         limit 10
     </select>
 
+    <update id="auditUsers">
+        update company_user
+        set is_audit = 1
+        where user_id in
+        <foreach collection="ids" open="(" close=")" separator="," item="id">
+            #{id}
+        </foreach>
+    </update>
 
 </mapper>

+ 9 - 0
fs-service-system/src/main/resources/mapper/course/FsCourseRedPacketLogMapper.xml

@@ -85,6 +85,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          order by watch.log_id desc
     </select>
 
+    <!-- 查询新用户红包金额总和 -->
+    <select id="getNewVipRedPackAmountByCompanyUserIdId" resultType="java.math.BigDecimal">
+        select
+            ifnull(sum(fcrpl.amount), 0)
+        from fs_course_red_packet_log fcrpl
+        inner join fs_user fu on fu.user_id = fcrpl.user_id and date(fu.create_time) = CURDATE()
+        where fcrpl.company_user_id = #{companyUserId}
+    </select>
+
     <insert id="insertFsCourseRedPacketLog" parameterType="FsCourseRedPacketLog" useGeneratedKeys="true" keyProperty="logId">
         insert into fs_course_red_packet_log
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 19 - 0
fs-service-system/src/main/resources/mapper/course/FsCourseWatchLogMapper.xml

@@ -608,4 +608,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </if>
         </where>
     </select>
+
+    <!-- 根据条件查询条数 -->
+    <select id="countByMap" resultType="java.lang.Integer">
+        select count(fcwl.log_id) from fs_course_watch_log fcwl
+        <where>
+            <if test="params.logTypes != null and params.logTypes.size() > 0">
+                and fcwl.log_type in
+                <foreach collection="params.logTypes" open="(" close=")" separator="," item="logType">
+                    #{logType}
+                </foreach>
+            </if>
+            <if test="params.companyUserId != null">
+                and fcwl.company_user_id = #{params.companyUserId}
+            </if>
+            <if test="params.date != null">
+                and date(fcwl.create_time) = #{params.date}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 11 - 0
fs-service-system/src/main/resources/mapper/qw/QwWorkTaskMapper.xml

@@ -58,6 +58,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by t.score desc,t.id desc
     </select>
 
+    <select id="selectQwWorkTaskListByMap" resultType="com.fs.qw.domain.QwWorkTask">
+        select
+            qwt.*
+        from qw_work_task qwt
+        where qwt.qw_user_id = #{params.qwUserId}
+          and date(qwt.create_time) = #{params.date}
+          and qwt.company_id = #{params.companyId}
+          and qwt.company_user_id = #{params.companyUserId}
+          and qwt.status = 0
+    </select>
+
     <insert id="insertQwWorkTask" parameterType="QwWorkTask" useGeneratedKeys="true" keyProperty="id">
         insert into qw_work_task
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 8 - 0
fs-service-system/src/main/resources/mapper/store/FsUserMapper.xml

@@ -589,6 +589,14 @@
         fs_user.user_id = #{fsUserId}
     </select>
 
+    <select id="getUserVipCountByCompanyUserId" resultType="java.util.Map">
+        select
+            count(if(date(u.create_time) = curdate(),u.user_id, null)) newVipCount,
+            count(u.user_id) vipCount
+        from fs_user u
+        where u.company_user_id = #{companyUserId}
+    </select>
+
     <update id="batchUpdateFsUserByIds" parameterType="Long">
         update fs_user
         set status = #{status} where user_id in