Browse Source

老师端首页统计

zouxuan 4 months ago
parent
commit
8c75e10fed

+ 6 - 6
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherHomeController.java

@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -37,8 +38,6 @@ public class TeacherHomeController extends BaseController {
     @Resource
     private UserAccountRecordService userAccountRecordService;
     @Resource
-    private SysMusicCompareRecordService sysMusicCompareRecordService;
-    @Resource
     private HomeService homeService;
 
     @ApiOperation(value = "首页统计数据")
@@ -137,12 +136,13 @@ public class TeacherHomeController extends BaseController {
     @ApiOperation(value = "课程曝光/购买")
     @PostMapping("/courseExposure")
     public HttpResponseResult<Map<String, List<TeacherIndexWrapper.CourseExposureTotal>>> courseExposure(@RequestBody TeacherIndexWrapper.CourseExposureSearch query) {
-        //获取购买的统计数据
         query.setTeacherId(sysUserService.getUserId());
-        Map<String, List<TeacherIndexWrapper.CourseExposureTotal>> stringListMap = homeService.courseBuyTotal(query);
+        Map<String, List<TeacherIndexWrapper.CourseExposureTotal>> result = new HashMap<>(2);
+        //获取购买的统计数据
+        result.put("buy", homeService.courseBuyTotal(query));
         //获取曝光的统计数据
-        stringListMap.putAll(homeService.courseExposureTotal(query));
-        return succeed(stringListMap);
+        result.put("exposure", homeService.courseExposureTotal(query));
+        return succeed(result);
     }
 
 }

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/HomeService.java

@@ -87,7 +87,7 @@ public interface HomeService {
 
     List<TeacherIndexWrapper.StudentPracticeSummaryDto> getTeacherHomeStudent(TeacherIndexWrapper.StudentSearch studentSearch);
 
-    Map<String,List<TeacherIndexWrapper.CourseExposureTotal>> courseExposureTotal(TeacherIndexWrapper.CourseExposureSearch query);
+    List<TeacherIndexWrapper.CourseExposureTotal> courseExposureTotal(TeacherIndexWrapper.CourseExposureSearch query);
 
-    Map<String,List<TeacherIndexWrapper.CourseExposureTotal>> courseBuyTotal(TeacherIndexWrapper.CourseExposureSearch query);
+    List<TeacherIndexWrapper.CourseExposureTotal> courseBuyTotal(TeacherIndexWrapper.CourseExposureSearch query);
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ExposureRecordServiceImpl.java

@@ -49,7 +49,7 @@ public class ExposureRecordServiceImpl extends ServiceImpl<ExposureRecordDao, Ex
             //按对象id分组,并获取集合数量
             Map<Long, Integer> exposureNumMap = saveExposureReportDtos.stream().collect(Collectors.groupingBy(ExposureRecordWrapper.SaveExposureRecordDto::getObjectId, Collectors.summingInt(e -> 1)));
             exposureNumMap.forEach((objectId,exposureNum)-> {
-                if ("LIVE".equals(k)) {
+                if ("LIVE".equals(k) || "VIP_COURSE".equals(k) || "PRACTICE".equals(k)) {
                     courseGroupService.getDao().updateExposureNum(objectId, exposureNum);
                 } else if ("VIDEO".equals(k)) {
                     videoLessonGroupService.getDao().updateExposureNum(objectId, exposureNum);

+ 74 - 44
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/HomeServiceImpl.java

@@ -453,30 +453,20 @@ public class HomeServiceImpl implements HomeService {
 
     //数据补全,按时间顺序
     private List<TeacherIndexWrapper.CourseExposureTotal> exposureFillData(List<TeacherIndexWrapper.CourseExposureTotal> exposureTotals,
-                                                                           List<String> dateList,
-                                                                           String[] typeArr) {
-        if(exposureTotals == null){
-            exposureTotals = new ArrayList<>();
-        }
-        //按类型分组
-        Map<String, List<TeacherIndexWrapper.CourseExposureTotal>> typeMap = exposureTotals.stream()
-                .collect(Collectors.groupingBy(TeacherIndexWrapper.CourseExposureTotal::getType));
+                                                                           List<String> dateList) {
         List<TeacherIndexWrapper.CourseExposureTotal> result = new ArrayList<>();
         //按时间段补全数据
         for (String s : dateList) {
-            for (String type : typeArr) {
-                List<TeacherIndexWrapper.CourseExposureTotal> dateMap = typeMap.get(type);
-                if(CollectionUtils.isEmpty(dateMap)){
-                    result.add(new TeacherIndexWrapper.CourseExposureTotal(s,type,0));
+            if(CollectionUtils.isEmpty(exposureTotals)){
+                result.add(new TeacherIndexWrapper.CourseExposureTotal(s,0));
+            }else {
+                Map<String, TeacherIndexWrapper.CourseExposureTotal> dateMapGroup = exposureTotals.stream()
+                        .collect(Collectors.toMap(TeacherIndexWrapper.CourseExposureTotal::getDate, o -> o));
+                TeacherIndexWrapper.CourseExposureTotal courseExposureTotal = dateMapGroup.get(s);
+                if(Objects.nonNull(courseExposureTotal)){
+                    result.add(courseExposureTotal);
                 }else {
-                    Map<String, TeacherIndexWrapper.CourseExposureTotal> dateMapGroup = dateMap.stream()
-                            .collect(Collectors.toMap(TeacherIndexWrapper.CourseExposureTotal::getDate, o -> o));
-                    TeacherIndexWrapper.CourseExposureTotal courseExposureTotal = dateMapGroup.get(s);
-                    if(Objects.nonNull(courseExposureTotal)){
-                        result.add(courseExposureTotal);
-                    }else {
-                        result.add(new TeacherIndexWrapper.CourseExposureTotal(s,type,0));
-                    }
+                    result.add(new TeacherIndexWrapper.CourseExposureTotal(s,0));
                 }
             }
         }
@@ -496,7 +486,7 @@ public class HomeServiceImpl implements HomeService {
 
 
     @Override
-    public Map<String,List<TeacherIndexWrapper.CourseExposureTotal>> courseExposureTotal(TeacherIndexWrapper.CourseExposureSearch search) {
+    public List<TeacherIndexWrapper.CourseExposureTotal> courseExposureTotal(TeacherIndexWrapper.CourseExposureSearch search) {
         String groupBy;
         List<String> dateList;
         Date startDate = DateUtil.strToDate(search.getStartTime(), DateUtil.DEFAULT_PATTERN);
@@ -512,18 +502,20 @@ public class HomeServiceImpl implements HomeService {
             dateList = DateUtil.getYearList(startDate,endDate);
         }
         List<TeacherIndexWrapper.CourseExposureTotal> courseExposureTotals = exposureRecordService.getDao().courseExposureTotal(search, groupBy);
-        //按分类分组
-        Map<String,List<TeacherIndexWrapper.CourseExposureTotal>> typeMap = courseExposureTotals.stream()
-                .collect(Collectors.groupingBy(TeacherIndexWrapper.CourseExposureTotal::getType));
-        Map<String,List<TeacherIndexWrapper.CourseExposureTotal>> result = new HashMap<>();
-        result.put("EXPOSURE_LIVE",exposureFillData(typeMap.get(GoodTypeEnum.LIVE.getCode()),dateList,new String[]{GoodTypeEnum.LIVE.getCode()}));
-        result.put("EXPOSURE_VIDEO",exposureFillData(typeMap.get(GoodTypeEnum.VIDEO.getCode()),dateList,new String[]{GoodTypeEnum.VIDEO.getCode()}));
-        result.put("EXPOSURE_MUSIC",exposureFillData(typeMap.get(GoodTypeEnum.MUSIC.getCode()),dateList,new String[]{GoodTypeEnum.MUSIC.getCode()}));
-        return result;
+//        //按分类分组
+//        Map<String,List<TeacherIndexWrapper.CourseExposureTotal>> typeMap = courseExposureTotals.stream()
+//                .collect(Collectors.groupingBy(TeacherIndexWrapper.CourseExposureTotal::getType));
+//        Map<String,List<TeacherIndexWrapper.CourseExposureTotal>> result = new HashMap<>();
+//        result.put("EXPOSURE_VIP",exposureFillData(typeMap.get(GoodTypeEnum.VIP_COURSE.getCode()),dateList,new String[]{GoodTypeEnum.VIP_COURSE.getCode()}));
+//        result.put("EXPOSURE_PRACTICE",exposureFillData(typeMap.get(GoodTypeEnum.PRACTICE.getCode()),dateList,new String[]{GoodTypeEnum.PRACTICE.getCode()}));
+//        result.put("EXPOSURE_LIVE",exposureFillData(typeMap.get(GoodTypeEnum.LIVE.getCode()),dateList,new String[]{GoodTypeEnum.LIVE.getCode()}));
+//        result.put("EXPOSURE_VIDEO",exposureFillData(typeMap.get(GoodTypeEnum.VIDEO.getCode()),dateList,new String[]{GoodTypeEnum.VIDEO.getCode()}));
+//        result.put("EXPOSURE_MUSIC",exposureFillData(typeMap.get(GoodTypeEnum.MUSIC.getCode()),dateList,new String[]{GoodTypeEnum.MUSIC.getCode()}));
+        return exposureFillData(courseExposureTotals,dateList);
     }
 
     @Override
-    public Map<String,List<TeacherIndexWrapper.CourseExposureTotal>> courseBuyTotal(TeacherIndexWrapper.CourseExposureSearch search) {
+    public List<TeacherIndexWrapper.CourseExposureTotal> courseBuyTotal(TeacherIndexWrapper.CourseExposureSearch search) {
         //获取学员练习时长
         //获取分组条件,如果所选时间段只有一天,则按小时分组,超过一个月按天分组,超过一年按月分组
         String groupBy;
@@ -541,21 +533,59 @@ public class HomeServiceImpl implements HomeService {
             dateList = DateUtil.getYearList(startDate,endDate);
         }
         Map<String,List<TeacherIndexWrapper.CourseExposureTotal>> result = new HashMap<>();
-        //直播课
-        List<TeacherIndexWrapper.CourseExposureTotal> liveSummer = userOrderDetailService.getDao().liveBuyTotal(search,groupBy);
-        result.put(GoodTypeEnum.LIVE.getCode(),exposureFillData(liveSummer,dateList,new String[]{GoodTypeEnum.LIVE.getCode()}));
-        //视频课
-        List<TeacherIndexWrapper.CourseExposureTotal> videoSummer = userOrderDetailService.getDao().videoBuyTotal(search,groupBy);
-        result.put(GoodTypeEnum.VIDEO.getCode(),exposureFillData(videoSummer,dateList,new String[]{GoodTypeEnum.VIDEO.getCode()}));
-        //获取老师关联的学员
-        List<Long> studentIds = teacherService.getDao().getStudentIds(search.getTeacherId(),null);
-        if(CollectionUtils.isNotEmpty(studentIds)){
-            //曲谱
-            search.setStudentIds(studentIds);
-            List<TeacherIndexWrapper.CourseExposureTotal> musicSheetSummer = userOrderDetailService.getDao().musicSheetBuyTotal(search,groupBy);
-            result.put(GoodTypeEnum.MUSIC.getCode(),exposureFillData(musicSheetSummer,dateList,new String[]{GoodTypeEnum.MUSIC.getCode()}));
+        if(StringUtils.isEmpty(search.getType())){
+            //直播课
+            List<TeacherIndexWrapper.CourseExposureTotal> liveSummer = userOrderDetailService.getDao().liveBuyTotal(search,groupBy);
+            result.put(GoodTypeEnum.LIVE.getCode(),exposureFillData(liveSummer,dateList));
+            //视频课
+            List<TeacherIndexWrapper.CourseExposureTotal> videoSummer = userOrderDetailService.getDao().videoBuyTotal(search,groupBy);
+            result.put(GoodTypeEnum.VIDEO.getCode(),exposureFillData(videoSummer,dateList));
+            //获取老师关联的学员
+            List<Long> studentIds = teacherService.getDao().getStudentIds(search.getTeacherId(),null);
+            if(CollectionUtils.isNotEmpty(studentIds)){
+                //曲谱
+                search.setStudentIds(studentIds);
+                List<TeacherIndexWrapper.CourseExposureTotal> musicSheetSummer = userOrderDetailService.getDao().musicSheetBuyTotal(search,groupBy);
+                result.put(GoodTypeEnum.MUSIC.getCode(),exposureFillData(musicSheetSummer,dateList));
+            }
+        }else {
+            if(StringUtils.equals("LIVE",search.getType()) || StringUtils.equals("VIP_COURSE",search.getType()) || StringUtils.equals("PRACTICE",search.getType())){
+                //直播课
+                List<TeacherIndexWrapper.CourseExposureTotal> liveSummer = userOrderDetailService.getDao().liveBuyTotal(search,groupBy);
+                result.put(GoodTypeEnum.LIVE.getCode(),exposureFillData(liveSummer,dateList));
+            }else if (StringUtils.equals("VIDEO",search.getType())){
+                //视频课
+                List<TeacherIndexWrapper.CourseExposureTotal> videoSummer = userOrderDetailService.getDao().videoBuyTotal(search,groupBy);
+                result.put(GoodTypeEnum.VIDEO.getCode(),exposureFillData(videoSummer,dateList));
+            }else if (StringUtils.equals("MUSIC",search.getType())){
+                //获取老师关联的学员
+                List<Long> studentIds = teacherService.getDao().getStudentIds(search.getTeacherId(),null);
+                if(CollectionUtils.isNotEmpty(studentIds)){
+                    //曲谱
+                    search.setStudentIds(studentIds);
+                    List<TeacherIndexWrapper.CourseExposureTotal> musicSheetSummer = userOrderDetailService.getDao().musicSheetBuyTotal(search,groupBy);
+                    result.put(GoodTypeEnum.MUSIC.getCode(),exposureFillData(musicSheetSummer,dateList));
+                }
+            }
         }
-        return result;
+        //将数据合并,map中所有的数据按时间,将list中的数据相加
+        List<TeacherIndexWrapper.CourseExposureTotal> finalResult = new ArrayList<>();
+        for (String s : dateList) {
+            TeacherIndexWrapper.CourseExposureTotal courseExposureTotal = new TeacherIndexWrapper.CourseExposureTotal();
+            courseExposureTotal.setDate(s);
+            courseExposureTotal.setExposureNum(0);
+            for (Map.Entry<String, List<TeacherIndexWrapper.CourseExposureTotal>> entry : result.entrySet()) {
+                List<TeacherIndexWrapper.CourseExposureTotal> value = entry.getValue();
+                Map<String, TeacherIndexWrapper.CourseExposureTotal> collect = value.stream()
+                        .collect(Collectors.toMap(TeacherIndexWrapper.CourseExposureTotal::getDate, o -> o));
+                TeacherIndexWrapper.CourseExposureTotal exposureTotal = collect.get(s);
+                if(Objects.nonNull(exposureTotal)){
+                    courseExposureTotal.setExposureNum(courseExposureTotal.getExposureNum() + exposureTotal.getExposureNum());
+                }
+            }
+            finalResult.add(courseExposureTotal);
+        }
+        return finalResult;
     }
 
 }

+ 1 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TeacherIndexWrapper.java

@@ -126,7 +126,6 @@ public class TeacherIndexWrapper {
     @Data
     @Builder
     @NoArgsConstructor
-    @AllArgsConstructor
     public static class CourseExposureTotal{
 
         @ApiModelProperty("日期")
@@ -135,12 +134,8 @@ public class TeacherIndexWrapper {
         @ApiModelProperty("曝光数")
         private Integer exposureNum;
 
-        @ApiModelProperty("类型")
-        private String type;
-
-        public CourseExposureTotal(String date, String type, Integer exposureNum) {
+        public CourseExposureTotal(String date, Integer exposureNum) {
             this.date = date;
-            this.type = type;
             this.exposureNum = exposureNum;
         }
     }

+ 4 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/ExposureRecordDao.xml

@@ -17,7 +17,10 @@
 		select DATE_FORMAT(er.exposure_time_, #{groupBy}) 'date',er.object_type_ as type,
 		       SUM(er.exposure_num_) exposureNum from exposure_record er
 		where er.exposure_time_ BETWEEN #{param.startTime} AND #{param.endTime}
+		<if test="param.type != null and param.type != ''">
+			and er.object_type_ = #{param.type}
+		</if>
 		group by er.object_type_,DATE_FORMAT(er.exposure_time_, #{groupBy})
-		ORDER BY type,'date'
+		ORDER BY 'date'
 	</select>
 </mapper>

+ 4 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml

@@ -156,8 +156,11 @@
                DATE_FORMAT(uod.create_time_,#{groupBy}) 'date' from user_order_detail uod
         left join user_order uo ON uo.order_no_ = uod.order_no_
         left join course_group cg On cg.id_ = uod.biz_id_
-        where uod.good_type_ = 'LIVE' AND cg.teacher_id_ = #{param.teacherId} AND uo.status_ = 'PAID'
+        where cg.teacher_id_ = #{param.teacherId} AND uo.status_ = 'PAID'
         AND DATE_FORMAT(uod.create_time_, '%Y-%m-%d') BETWEEN #{param.startTime} AND #{param.endTime}
+        <if test="param.type != null and param.type != ''">
+            and uod.good_type_ = #{param.type}
+        </if>
         group by 'date' order by 'date'
     </select>
     <select id="videoBuyTotal"