Forráskód Böngészése

feat:首页数据统计相关的接口(不包含排行榜)

caoliqin 2 hete
szülő
commit
024f6ecacd

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

@@ -12,10 +12,7 @@ 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;
-import com.fs.store.vo.h5.CompanyUserTagListVO;
-import com.fs.store.vo.h5.FsUserPageListVO;
-import com.fs.store.vo.h5.UserDetailsVO;
-import com.fs.store.vo.h5.UserListPageVO;
+import com.fs.store.vo.h5.*;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
@@ -24,6 +21,9 @@ import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -59,7 +59,7 @@ public class FsUserController extends AppBaseController {
 
     @GetMapping("/allCompanyUser")
     @ApiOperation("获取所有公司销售")
-    public ResponseResult<List<CompanyUser>> getAllCompanyUser(){
+    public ResponseResult<List<CompanyUser>> getAllCompanyUser() {
         List<CompanyUser> companyUsers = companyUserService.selectAllCompanyUserByParentId(Long.parseLong(getUserId()));
         return ResponseResult.ok(companyUsers);
     }
@@ -76,7 +76,7 @@ public class FsUserController extends AppBaseController {
     @GetMapping("/details")
     @ApiOperation("用户会员详情")
     public ResponseResult<UserDetailsVO> getUserDetails(@ApiParam(value = "用户id", required = true) @RequestParam Long userId,
-                                                                   @ApiParam(value = "时间tab,不传表示查询全部,分别是:今天、昨天、前天、近七天", required = true) @RequestParam(required = false) String dateTag) {
+                                                        @ApiParam(value = "时间tab,不传表示查询全部,分别是:今天、昨天、前天、近七天", required = true) @RequestParam(required = false) String dateTag) {
         UserDetailsVO userDetails = fsUserService.getUserDetails(Long.parseLong(getUserId()), userId, dateTag);
         return ResponseResult.ok(userDetails);
     }
@@ -107,4 +107,46 @@ public class FsUserController extends AppBaseController {
         Boolean r = fsUserService.disabledUser(ids, true);
         return ResponseResult.ok(r);
     }
+
+    @Login
+    @GetMapping("/firstPage/summaryCount")
+    @ApiOperation("首页数据-顶部汇总统计")
+    public ResponseResult<FsUserSummaryCountVO> userSummaryCount() {
+        long userId = Long.parseLong(getUserId());
+        return ResponseResult.ok(fsUserService.userSummaryCount(userId));
+    }
+
+    @GetMapping("/firstPage/statistics")
+    @ApiOperation("首页数据-课程/答题/红包统计")
+    public ResponseResult<FsUserStatisticsVO> userStatistics(@ApiParam(value = "开始时间", required = true) @RequestParam String startTime,
+                                                             @ApiParam(value = "结束时间", required = true) @RequestParam String endTime) {
+        long userId = Long.parseLong(getUserId());
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String nowDate = dateFormat.format(new Date());
+        /*---------- 如果传入的日期是今天 ----------*/
+        FsUserStatisticsVO vo = fsUserService.userStatistics(userId, startTime, endTime, null, null);
+        if (nowDate.compareTo(startTime) > 0 && nowDate.compareTo(endTime) < 0) {
+            String yesterday = LocalDate.now().minusDays(1).toString();
+            FsUserStatisticsVO fsUserStatisticsVO = fsUserService.userStatistics(userId, yesterday + " 00:00:00", yesterday + " 23:59:59", null, null);
+            vo.setYesterdayVO(fsUserStatisticsVO);
+        }
+        return ResponseResult.ok(vo);
+    }
+
+    @GetMapping("/statistics/details")
+    @ApiOperation("数据统计详情-课程/答题/红包统计")
+    public ResponseResult<FsUserStatisticsVO> userStatisticsDetails(@ApiParam(value = "课程id") @RequestParam(required = false) String courseId,
+                                                                    @ApiParam(value = "视频id") @RequestParam(required = false) String videoId) {
+        long userId = Long.parseLong(getUserId());
+        FsUserStatisticsVO fsUserStatisticsVO = fsUserService.userStatisticsDetails(userId, courseId, videoId);
+        return ResponseResult.ok(fsUserStatisticsVO);
+    }
+
+//    @GetMapping("/firstPage/ranking")
+//    @ApiOperation("首页数据-排行榜统计")
+//    public ResponseResult<FsUserStatisticsVO> userRanking(@ApiParam(value = "课程id") @RequestParam(required = false) String courseId,
+//                                                          @ApiParam(value = "视频id") @RequestParam(required = false) String videoId) {
+//        long userId = Long.parseLong(getUserId());
+//        return ResponseResult.ok();
+//    }
 }

+ 7 - 6
fs-company-app/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java

@@ -8,6 +8,7 @@ import com.fs.course.service.IFsUserCourseService;
 import com.fs.course.service.IFsUserCourseVideoService;
 import com.fs.course.vo.FsCourseAnalysisVO;
 import com.fs.course.vo.FsUserCourseListPVO;
+import com.fs.course.vo.newfs.FsUserCourseListVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoDetailsVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
 import com.github.pagehelper.PageHelper;
@@ -33,12 +34,12 @@ public class FsUserCourseVideoController extends AppBaseController {
     private IFsUserCourseVideoService fsUserCourseVideoService;
 
     @Autowired
-    private IFsUserCourseService  fsUserCourseService;
+    private IFsUserCourseService fsUserCourseService;
 
     @GetMapping("/pageList")
     @ApiOperation("课程分页列表")
     public ResponseResult<PageInfo<FsUserCourseVideoPageListVO>> list(UserCourseVideoPageParam param) {
-        PageHelper.startPage(param.getPageNum(),param.getPageSize());
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
         List<FsUserCourseVideoPageListVO> list = fsUserCourseVideoService.pageListCourseVideo(param);
         PageInfo<FsUserCourseVideoPageListVO> pageInfo = new PageInfo<>(list);
         return ResponseResult.ok(pageInfo);
@@ -52,11 +53,11 @@ public class FsUserCourseVideoController extends AppBaseController {
 
     @GetMapping("/courseList")
     @ApiOperation("获取课程下拉列表")
-    public ResponseResult<PageInfo<FsUserCourseListPVO>> getAllCompanyUser(FsUserCourseListParam param){
-        PageHelper.startPage(param.getPageNum(),param.getPageSize());
+    public ResponseResult<PageInfo<FsUserCourseListVO>> getAllCompanyUser(FsUserCourseListParam param) {
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
         param.setCompanyId(getCompanyId());
-        List<FsUserCourseListPVO> fsUserCourseList = fsUserCourseService.getFsUserCourseList(param);
-        PageInfo<FsUserCourseListPVO> pageInfo = new PageInfo<>(fsUserCourseList);
+        List<FsUserCourseListVO> fsUserCourseList = fsUserCourseService.getFsUserCourseList(param);
+        PageInfo<FsUserCourseListVO> pageInfo = new PageInfo<>(fsUserCourseList);
         return ResponseResult.ok(pageInfo);
     }
 

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

@@ -7,6 +7,7 @@ import com.fs.course.param.FsUserCourseListUParam;
 import com.fs.course.param.FsUserCourseParam;
 import com.fs.course.param.newfs.FsUserCourseListParam;
 import com.fs.course.vo.*;
+import com.fs.course.vo.newfs.FsUserCourseListVO;
 import com.fs.his.vo.OptionsVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -228,6 +229,6 @@ public interface FsUserCourseMapper
     @Select("select course_id ,img_url   from fs_user_course where is_del = 0 and is_private = 1")
     List<FsUserCourse> selectFsUserCourseAllCourseByQw();
 
-    List<FsUserCourseListPVO> getFsUserCourseList(FsUserCourseListParam param);
+    List<FsUserCourseListVO> getFsUserCourseList(FsUserCourseListParam param);
 
 }

+ 2 - 1
fs-service-system/src/main/java/com/fs/course/service/IFsUserCourseService.java

@@ -11,6 +11,7 @@ import com.fs.course.param.FsUserCourseListUParam;
 import com.fs.course.param.FsUserCourseParam;
 import com.fs.course.param.newfs.FsUserCourseListParam;
 import com.fs.course.vo.*;
+import com.fs.course.vo.newfs.FsUserCourseListVO;
 import com.fs.his.vo.OptionsVO;
 
 /**
@@ -109,5 +110,5 @@ public interface IFsUserCourseService
      * h5 获取用户课程下拉列表
      * @return
      */
-    List<FsUserCourseListPVO> getFsUserCourseList(FsUserCourseListParam param);
+    List<FsUserCourseListVO> getFsUserCourseList(FsUserCourseListParam param);
 }

+ 2 - 1
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseServiceImpl.java

@@ -17,6 +17,7 @@ import com.fs.course.param.FsUserCourseParam;
 import com.fs.course.param.newfs.FsUserCourseListParam;
 import com.fs.course.service.IFsUserCourseService;
 import com.fs.course.vo.*;
+import com.fs.course.vo.newfs.FsUserCourseListVO;
 import com.fs.his.vo.OptionsVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -364,7 +365,7 @@ public class FsUserCourseServiceImpl implements IFsUserCourseService
     }
 
     @Override
-    public List<FsUserCourseListPVO> getFsUserCourseList(FsUserCourseListParam param) {
+    public List<FsUserCourseListVO> getFsUserCourseList(FsUserCourseListParam param) {
         return fsUserCourseMapper.getFsUserCourseList(param);
     }
 }

+ 21 - 0
fs-service-system/src/main/java/com/fs/course/vo/newfs/FsUserCourseListVO.java

@@ -0,0 +1,21 @@
+package com.fs.course.vo.newfs;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 课程下拉列表 对象(需要分页)
+ *
+ * @author fs
+ * @date 2024-05-15
+ */
+@Data
+public class FsUserCourseListVO {
+
+    @ApiModelProperty(value = "课程id")
+    private Long courseId;
+
+    @ApiModelProperty(value = "课程名称")
+    private String courseName;
+
+}

+ 13 - 3
fs-service-system/src/main/java/com/fs/store/mapper/FsUserMapper.java

@@ -15,9 +15,7 @@ import com.fs.store.vo.FSUserVO;
 
 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.*;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
@@ -238,4 +236,16 @@ public interface FsUserMapper
     Long selectCusListPageCount(SelectCusListPageParam param);
 
     void transferCompanyUser(FsUserTransferParamDTO param);
+
+    FsUserSummaryCountVO countUserSummary(@Param("userId") Long userId);
+
+    List<FsUserSummaryCountTagVO> countTag(@Param("userId") Long userId);
+
+    Map<String, Long> countUserCourse(@Param("userId") Long userId, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("courseId")String courseId, @Param("videoId")String videoId);
+
+    Map<String, Long> countUserAnswer(@Param("userId") Long userId, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("courseId")String courseId, @Param("videoId")String videoId);
+
+    Map<String, Object> countUserRedPacket(@Param("userId") Long userId, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("courseId")String courseId, @Param("videoId")String videoId);
+
+    Map<String, Long> countCourseDetails(@Param("userId") Long userId, @Param("courseId")String courseId, @Param("videoId")String videoId);
 }

+ 7 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsUserService.java

@@ -21,6 +21,7 @@ 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.UserListPageVO;
+import com.fs.store.vo.h5.*;
 
 /**
  * 用户Service接口
@@ -152,4 +153,10 @@ public interface IFsUserService
      */
     Map<String, Long> getUserVipCountByCompanyUserId(Long companyUserId);
 
+    FsUserSummaryCountVO userSummaryCount(Long userId);
+
+    FsUserStatisticsVO userStatistics(Long userId, String startTime, String endTime, String courseId, String videoId);
+
+    FsUserStatisticsVO userStatisticsDetails(Long userId, String courseId, String videoId);
+
 }

+ 76 - 9
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fs.store.service.impl;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -20,8 +21,6 @@ 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;
-import com.fs.qw.vo.newvo.ExternalContactPageVO;
 import com.fs.store.domain.FsStoreOrder;
 import com.fs.store.domain.FsStoreOrderItem;
 import com.fs.store.domain.FsUserBill;
@@ -42,6 +41,7 @@ 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;
+import com.fs.store.vo.h5.*;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -401,7 +401,6 @@ public class FsUserServiceImpl implements IFsUserService
         return R.error("清除vip失败");
     }
 
-
     @Override
     public FsUser selectFsUserByUnionid(String unionId) {
         return fsUserMapper.selectFsUserByUnionid(unionId);
@@ -420,10 +419,11 @@ public class FsUserServiceImpl implements IFsUserService
     @Override
     public UserListPageVO getUserNumber(Long userId) {
         List<UserListCountVO> list = fsUserMapper.getUserNumber(userId);
-        Map<String, Integer> map = list.stream().collect(Collectors.toMap(UserListCountVO::getStatus, UserListCountVO::getNum, (v1, v2) -> v1));
+        Map<String, Integer> map = list.stream()
+                .collect(Collectors.toMap(UserListCountVO::getStatus, UserListCountVO::getNum, (v1, v2) -> v1));
         UserListPageVO pageVO = new UserListPageVO();
-        pageVO.setNumber(map.getOrDefault("1",0));
-        pageVO.setBlackNum(map.getOrDefault("0",0));
+        pageVO.setNumber(map.getOrDefault("1", 0));
+        pageVO.setBlackNum(map.getOrDefault("0", 0));
         return pageVO;
     }
 
@@ -445,11 +445,11 @@ public class FsUserServiceImpl implements IFsUserService
     @Override
     public Boolean disabledUser(String[] ids, boolean status) {
         boolean result;
-        if(status){
-            //启用
+        if (status) {
+            // 启用
             result = fsUserMapper.batchUpdateFsUserByIds(ids, 1) > 0;
         } else {
-            //禁用
+            // 禁用
             result = fsUserMapper.batchUpdateFsUserByIds(ids, 0) > 0;
         }
         return result;
@@ -473,4 +473,71 @@ public class FsUserServiceImpl implements IFsUserService
     public Map<String, Long> getUserVipCountByCompanyUserId(Long companyUserId) {
         return fsUserMapper.getUserVipCountByCompanyUserId(companyUserId);
     }
+
+    @Override
+    public FsUserSummaryCountVO userSummaryCount(Long userId) {
+        FsUserSummaryCountVO fsUserSummaryCountVO = fsUserMapper.countUserSummary(userId);
+        List<FsUserSummaryCountTagVO> countTagList = fsUserMapper.countTag(userId);
+        fsUserSummaryCountVO.setTagList(countTagList);
+        return fsUserSummaryCountVO;
+    }
+
+    @Override
+    public FsUserStatisticsVO userStatistics(Long userId, String startTime, String endTime, String courseId, String videoId) {
+        return getUserStatistics(userId, startTime, endTime, courseId, videoId);
+    }
+
+    private FsUserStatisticsVO getUserStatistics(Long userId, String startTime, String endTime, String courseId, String videoId) {
+        FsUserStatisticsVO fsUserStatisticsVO = new FsUserStatisticsVO();
+
+        // 获取课程统计
+        Map<String, Long> couserMap = fsUserMapper.countUserCourse(userId, startTime, endTime, courseId, videoId);
+        if (couserMap != null) {
+            fsUserStatisticsVO.setCourseWatchNum(couserMap.get("courseWatchNum").intValue()).setCourseCompleteNum(couserMap.get("courseCompleteNum").intValue());
+
+            if (couserMap.get("courseCompleteNum") != null && couserMap.get("courseWatchNum") > 0) {
+                int courseCompleteRate = BigDecimal.valueOf(couserMap.get("courseCompleteNum"))
+                        .divide(BigDecimal.valueOf(couserMap.get("courseWatchNum")), 2, RoundingMode.HALF_UP)
+                        .multiply(BigDecimal.valueOf(100))
+                        .intValue();
+                fsUserStatisticsVO.setCourseCompleteRate(courseCompleteRate);
+            }
+        }
+
+        // 获取答题统计
+        Map<String, Long> answerMap = fsUserMapper.countUserAnswer(userId, startTime, endTime, courseId, videoId);
+        if (answerMap != null) {
+            fsUserStatisticsVO.setAnswerNum(answerMap.get("answerNum").intValue()).setAnswerRightNum(answerMap.get("answerRightNum").intValue());
+
+            if (answerMap.get("answerRightNum") != null && answerMap.get("answerNum") > 0) {
+                int answerCompleteRate = BigDecimal.valueOf(answerMap.get("answerRightNum"))
+                        .divide(BigDecimal.valueOf(answerMap.get("answerNum")), 2, RoundingMode.HALF_UP)
+                        .multiply(BigDecimal.valueOf(100))
+                        .intValue();
+                fsUserStatisticsVO.setAnswerRightRate(answerCompleteRate);
+            }
+        }
+
+        // 获取红包统计
+        Map<String, Object> redPacketMap = fsUserMapper.countUserRedPacket(userId, startTime, endTime, courseId, videoId);
+        if(redPacketMap != null && redPacketMap.get("redPacketNum") != null && redPacketMap.get("redPacketAmount") != null) {
+            fsUserStatisticsVO.setRedPacketNum(Integer.parseInt(redPacketMap.get("redPacketNum").toString()))
+                    .setRedPacketAmount(new BigDecimal(redPacketMap.get("redPacketAmount").toString()));
+        }
+        return fsUserStatisticsVO;
+    }
+
+    @Override
+    public FsUserStatisticsVO userStatisticsDetails(Long userId, String courseId, String videoId) {
+        FsUserStatisticsVO userStatisticsVO = getUserStatistics(userId, null, null, courseId, videoId);
+
+        //统计课程数据详情,在查询统计详情的时候需要显示
+        Map<String, Long> courseDetailsMap = fsUserMapper.countCourseDetails(userId, courseId, videoId);
+        if(courseDetailsMap != null && courseDetailsMap.get("courseNum") != null && courseDetailsMap.get("videoNum") != null && courseDetailsMap.get("courseUserNum") != null){
+            userStatisticsVO.setCourseNum(Integer.parseInt(courseDetailsMap.get("courseNum").toString()))
+                    .setVideoNum(Integer.parseInt(courseDetailsMap.get("videoNum").toString()))
+                    .setCourseUserNum(Integer.parseInt(courseDetailsMap.get("courseUserNum").toString()));
+        }
+        return userStatisticsVO;
+    }
 }

+ 34 - 0
fs-service-system/src/main/java/com/fs/store/vo/h5/FsUserCountVO.java

@@ -0,0 +1,34 @@
+package com.fs.store.vo.h5;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 用户相关数据统计
+ */
+@Data
+@ApiModel
+public class FsUserCountVO {
+
+    @ApiModelProperty(value = "答题次数")
+    private int answerTime;
+
+    @ApiModelProperty(value = "答题正确次数")
+    private int answerRightTime;
+
+    @ApiModelProperty(value = "答题红包数")
+    private int answerRedPacketTime;
+
+    @ApiModelProperty(value = "答题红包金额")
+    private int answerRedPacketAmount;
+
+    @ApiModelProperty(value = "完播次数")
+    private int completeWatchCount;
+
+    @ApiModelProperty(value = "观看次数")
+    private int watchTimes;
+
+
+
+}

+ 62 - 0
fs-service-system/src/main/java/com/fs/store/vo/h5/FsUserStatisticsVO.java

@@ -0,0 +1,62 @@
+package com.fs.store.vo.h5;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+
+/**
+ * 用户数据 汇总统计(首页-课程/答题/红包等数据)
+ */
+@Data
+@ApiModel
+@Accessors(chain = true)
+public class FsUserStatisticsVO {
+
+    @ApiModelProperty(value = "观看人数")
+    private int courseWatchNum;
+
+    @ApiModelProperty(value = "完播人数")
+    private int courseCompleteNum;
+
+    @ApiModelProperty(value = "完播率")
+    private int courseCompleteRate;
+
+
+    @ApiModelProperty(value = "答题人数")
+    private int answerNum;
+
+    @ApiModelProperty(value = "正确人数")
+    private int answerRightNum;
+
+    @ApiModelProperty(value = "正确率")
+    private int answerRightRate;
+
+
+    @ApiModelProperty(value = "答题红包数")
+    private int redPacketNum;
+
+    @ApiModelProperty(value = "答题红包金额")
+    private BigDecimal redPacketAmount;
+
+    @ApiModelProperty(value = "昨日数据,只有当开始时间和结束时间是今日时此对象才有值")
+    private FsUserStatisticsVO yesterdayVO;
+
+//    @ApiModelProperty(value = "新会员奖励数")
+//    private int newUserRedPacketNum;
+//
+//    @ApiModelProperty(value = "新会员奖励金额")
+//    private int newUserRedPacketAmount;
+
+    @ApiModelProperty(value = "详情-课程营期数")
+    private int courseNum;
+
+    @ApiModelProperty(value = "详情-课程数")
+    private int videoNum;
+
+    @ApiModelProperty(value = "详情-课程参与会员")
+    private int courseUserNum;
+
+}

+ 19 - 0
fs-service-system/src/main/java/com/fs/store/vo/h5/FsUserSummaryCountTagVO.java

@@ -0,0 +1,19 @@
+package com.fs.store.vo.h5;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 用户数据 汇总统计(首页-标签)
+ */
+@Data
+@ApiModel
+public class FsUserSummaryCountTagVO {
+
+    @ApiModelProperty(value = "标签统计")
+    private String tagName;
+
+    @ApiModelProperty(value = "相关人数")
+    private int number;
+}

+ 25 - 0
fs-service-system/src/main/java/com/fs/store/vo/h5/FsUserSummaryCountVO.java

@@ -0,0 +1,25 @@
+package com.fs.store.vo.h5;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 用户数据 汇总统计(首页)
+ */
+@Data
+@ApiModel
+public class FsUserSummaryCountVO {
+
+    @ApiModelProperty(value = "会员总数")
+    private int userTotal;
+
+    @ApiModelProperty(value = "今日新增会员")
+    private int todayNewUser;
+
+    @ApiModelProperty(value = "标签统计")
+    private List<FsUserSummaryCountTagVO> tagList;
+
+}

+ 1 - 1
fs-service-system/src/main/resources/mapper/course/FsUserCourseMapper.xml

@@ -230,7 +230,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </update>
 
-    <select id="getFsUserCourseList" resultType="FsUserCourseListPVO">
+    <select id="getFsUserCourseList" resultType="FsUserCourseListVO">
         SELECT
             c.*,
             cc.cate_name,

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

@@ -605,4 +605,239 @@
         </foreach>
     </update>
 
+    <select id="countUserSummary" resultType="FsUserSummaryCountVO">
+        SELECT (SELECT count(fs_user.user_id)
+                FROM fs_user
+                         LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                WHERE (
+                          company_user.user_id = #{userId}
+                              OR company_user.parent_id = #{userId}
+                          )) as userTotal,
+               (SELECT count(fs_user.user_id)
+                FROM fs_user
+                         LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                WHERE (company_user.user_id = #{userId} OR company_user.parent_id = #{userId})
+                  AND to_days(fs_user.create_time) = to_days(now())) as todayNewUser
+    </select>
+
+    <select id="countTag" resultType="FsUserSummaryCountTagVO">
+        SELECT
+            company_tag.tag AS tagName,
+            count( fs_user.user_id ) AS userCount
+        FROM
+            company_tag_user
+                LEFT JOIN fs_user ON fs_user.user_id = company_tag_user.user_id
+                LEFT JOIN company_tag ON FIND_IN_SET( company_tag.tag_id, company_tag_user.tag_ids ) > 0
+                LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+        where (company_user.user_id = #{userId} or company_user.parent_id = #{userId} ) and company_tag.tag_id is not null
+        GROUP BY
+            company_tag.tag_id
+    </select>
+
+    <select id="countUserCourse" resultType="Map">
+        SELECT
+            (
+                SELECT
+                    count( fcc.user_id )
+                FROM
+                    fs_user_course_count fcc
+                        LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
+                        LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                        LEFT JOIN fs_user_course_video fcv ON fcv.course_id = fcc.course_id
+        WHERE
+                    ( company_user.user_id = #{userId}  OR company_user.parent_id = #{userId}  )
+                    <if test="startTime != null and startTime !='' ">
+                            and fcc.create_time &gt;= #{startTime}
+                    </if>
+                    <if test="endTime != null and endTime != ''">
+                        and fcc.create_time &lt;= #{endTime}
+                    </if>
+                    <if test="courseId != null and courseId != ''">
+                        AND fcc.course_id = #{courseId}
+                    </if>
+                    <if test="videoId != null and videoId != ''">
+                        AND fcv.video_id = #{videoId}
+                    </if>
+            ) as courseWatchNum,
+            (
+                SELECT
+                    count( fcc.user_id )
+                FROM
+                    fs_user_course_count fcc
+                        LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
+                        LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                        LEFT JOIN fs_user_course_video fcv ON fcv.course_id = fcc.course_id
+                WHERE
+                    ( company_user.user_id = #{userId}  OR company_user.parent_id = #{userId}  )
+                  AND fcc.complete_watch_count > 0
+                    <if test="startTime != null and startTime !='' ">
+                        and fcc.create_time &gt;= #{startTime}
+                    </if>
+                    <if test="endTime != null and endTime != ''">
+                        and fcc.create_time &lt;= #{endTime}
+                    </if>
+                    <if test="courseId != null and courseId != ''">
+                        AND fcc.course_id =  #{courseId}
+                    </if>
+                    <if test="videoId != null and videoId != ''">
+                        AND fcv.video_id = #{videoId}
+                    </if>
+            ) as courseCompleteNum
+    </select>
+
+    <select id="countUserAnswer" resultType="Map">
+        SELECT
+        (
+        SELECT
+        count( fs_user.user_id )
+        FROM
+        fs_course_answer_logs
+        LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
+        LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
+        WHERE
+        ( company_user.user_id = #{userId} OR company_user.parent_id = #{userId} )
+        <if test="startTime != null and startTime !='' ">
+            AND fs_course_answer_logs.create_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND fs_course_answer_logs.create_time &lt;= #{endTime}
+        </if>
+        <if test="courseId != null and courseId != ''">
+            AND fs_course_answer_logs.course_id = #{courseId}
+        </if>
+        <if test="videoId != null and videoId != ''">
+            AND fs_course_answer_logs.video_id = #{videoId}
+        </if>
+        ) AS answerNum,
+        (
+        SELECT
+        count( fs_user.user_id )
+        FROM
+        fs_course_answer_logs
+        LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
+        LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
+        WHERE
+        ( company_user.user_id = #{userId} OR company_user.parent_id = #{userId} )
+        AND fs_course_answer_logs.is_right = 1
+        <if test="startTime != null and startTime !='' ">
+            AND fs_course_answer_logs.create_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND fs_course_answer_logs.create_time &lt;= #{endTime}
+        </if>
+        <if test="courseId != null and courseId != ''">
+            AND fs_course_answer_logs.course_id =  #{courseId}
+        </if>
+        <if test="videoId != null and videoId != ''">
+            AND fs_course_answer_logs.video_id = #{videoId}
+        </if>
+        ) AS answerRightNum
+    </select>
+
+    <select id="countUserRedPacket" resultType="Map">
+    SELECT
+        (
+            SELECT
+                count( flog.log_id )
+            FROM
+                fs_course_red_packet_log flog
+                    LEFT JOIN fs_user ON fs_user.user_id = flog.user_id
+                    LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
+            WHERE
+                ( company_user.user_id = #{userId}  OR company_user.parent_id = #{userId}  )
+                <if test="startTime != null and startTime !='' ">
+                    AND flog.create_time &gt;= #{startTime}
+                </if>
+                <if test="endTime != null and endTime != ''">
+                    AND flog.create_time &lt;= #{endTime}
+                </if>
+                <if test="courseId != null and courseId != ''">
+                    AND flog.course_id =  #{courseId}
+                </if>
+                <if test="videoId != null and videoId != ''">
+                    AND flog.video_id = #{videoId}
+                </if>
+        ) AS redPacketNum,
+        (
+            SELECT
+                ifnull (sum( flog.amount ), 0)
+            FROM
+                fs_course_red_packet_log flog
+                    LEFT JOIN fs_user ON fs_user.user_id = flog.user_id
+                    LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
+            WHERE
+                ( company_user.user_id = #{userId}  OR company_user.parent_id = #{userId}  )
+                <if test="startTime != null and startTime !='' ">
+                    AND flog.create_time &gt;= #{startTime}
+                </if>
+                <if test="endTime != null and endTime != ''">
+                    AND flog.create_time &lt;= #{endTime}
+                </if>
+                <if test="courseId != null and courseId != ''">
+                    AND flog.course_id =  #{courseId}
+                </if>
+                <if test="videoId != null and videoId != ''">
+                    AND flog.video_id = #{videoId}
+                </if>
+        ) AS redPacketAmount
+    </select>
+
+    <select id="countCourseDetails" resultType="Map">
+    select (SELECT count(fc.course_id)
+            FROM fs_user_course fc
+            WHERE fc.is_del = 0
+            <if test="courseId != null and courseId != ''">
+                AND fc.course_id =  #{courseId}
+            </if>
+            ) as courseNum,
+
+           (SELECT count(fcv.video_id)
+            FROM fs_user_course_video fcv
+                     LEFT JOIN fs_user_course fc ON fc.course_id = fcv.course_id
+            <if test="courseId != null and courseId != ''">
+                AND fcv.course_id =  #{courseId}
+            </if>
+            <if test="videoId != null and videoId != ''">
+                AND fcv.video_id = #{videoId}
+            </if>
+            ) as videoNum,
+        ( SELECT count( user_id ) FROM fs_user_course_count fcc
+            LEFT JOIN fs_user_course_video fcv ON fcv.course_id = fcc.course_id
+        <if test="courseId != null and courseId != ''">
+            AND fcc.course_id =  #{courseId}
+        </if>
+        <if test="videoId != null and videoId != ''">
+            AND fcv.video_id = #{videoId}
+        </if>
+         ) as courseUserNum
+    </select>
+
+    <select id="countUserRanking" resultType="Map">
+     SELECT
+                 (
+                     SELECT
+                         count( fcc.user_id )
+                     FROM
+                         fs_user_course_count fcc
+                             LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
+                             LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                             LEFT JOIN fs_user_course_video fcv ON fcv.course_id = fcc.course_id
+                     WHERE
+                         ( company_user.parent_id = 8563  )
+                       AND fcc.complete_watch_count > 0
+                     group by fcc.user_id  )
+                     /
+                 (SELECT
+                      count( fcc.user_id )
+                  FROM
+                      fs_user_course_count fcc
+                          LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
+                          LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
+                          LEFT JOIN fs_user_course_video fcv ON fcv.course_id = fcc.course_id
+                  WHERE
+                      ( company_user.parent_id = 8563  )
+                  group by fcc.user_id
+                 ) as
+    </select>
+
 </mapper>