浏览代码

vip定制课

zouxuan 4 月之前
父节点
当前提交
0406df4c97

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

@@ -10,12 +10,12 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Description 老师课后作业相关接口
@@ -28,22 +28,17 @@ import java.util.List;
 @RequestMapping("${app-config.url.teacher:}/home")
 public class TeacherHomeController extends BaseController {
 
-    @Autowired
+    @Resource
     private SysUserService sysUserService;
-
-    @Autowired
+    @Resource
     private CourseScheduleService courseScheduleService;
-
-    @Autowired
+    @Resource
     private MusicSheetService musicSheetService;
-
-    @Autowired
+    @Resource
     private UserAccountRecordService userAccountRecordService;
-
     @Resource
     private SysMusicCompareRecordService sysMusicCompareRecordService;
-
-    @Autowired
+    @Resource
     private HomeService homeService;
 
     @ApiOperation(value = "首页统计数据")
@@ -88,14 +83,14 @@ public class TeacherHomeController extends BaseController {
     @PostMapping(value = "/practice")
     public HttpResponseResult<TeacherIndexWrapper.TeacherPracticeHome> practice(@RequestBody TeacherIndexWrapper.SummarySearch summarySearch) {
         summarySearch.setTeacherId(sysUserService.getUserId());
-        return succeed(sysMusicCompareRecordService.getTeacherPracticeHome(summarySearch));
+        return succeed(homeService.getTeacherPracticeHome(summarySearch));
     }
 
     @ApiOperation("首页练习数据学员列表")
     @PostMapping(value = "/studentPractice")
     public HttpResponseResult<List<TeacherIndexWrapper.StudentPracticeSummaryDto>> studentPractice(@RequestBody TeacherIndexWrapper.StudentSearch studentSearch) {
         studentSearch.setTeacherId(sysUserService.getUserId());
-        return succeed(sysMusicCompareRecordService.getTeacherHomeStudent(studentSearch));
+        return succeed(homeService.getTeacherHomeStudent(studentSearch));
     }
 
     @ApiOperation(value = "课程统计")
@@ -141,15 +136,13 @@ public class TeacherHomeController extends BaseController {
 
     @ApiOperation(value = "课程曝光/购买")
     @PostMapping("/courseExposure")
-    public HttpResponseResult<List<TeacherHomeWrapper.MusicSheetTotal>> courseExposure(@RequestBody TeacherHomeWrapper.MusicSheetQuery query) {
-        SysUser sysUser = sysUserService.getUser();
-        if (sysUser == null  || sysUser.getId() == null) {
-
-            return failed("用户信息获取失败");
-        }
-        query.setTeacherId(sysUser.getId());
-
-        return succeed(homeService.musicSheetPage(query));
+    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);
+        //获取曝光的统计数据
+        stringListMap.put("exposure", homeService.courseExposureTotal(query));
+        return succeed(stringListMap);
     }
 
 }

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ExposureRecordDao.java

@@ -3,11 +3,15 @@ package com.yonge.cooleshow.biz.dal.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yonge.cooleshow.biz.dal.entity.ExposureRecord;
 import com.yonge.cooleshow.biz.dal.wrapper.ExposureRecordWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.TeacherIndexWrapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 public interface ExposureRecordDao extends BaseMapper<ExposureRecord> {
     void saveExposureRecord(@Param("beans") List<ExposureRecordWrapper.SaveExposureRecordDto> exposureRecordDto);
+
+    List<TeacherIndexWrapper.CourseExposureTotal> courseExposureTotal(@Param("param") TeacherIndexWrapper.CourseExposureSearch search,
+                                                                      @Param("groupBy") String groupBy);
 }
 

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDetailDao.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.wrapper.TeacherIndexWrapper;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
@@ -46,4 +47,13 @@ public interface UserOrderDetailDao extends BaseMapper<UserOrderDetail>{
     List<UserOrderDetailVo> getOrderDetilListByOrderNos(@Param("orderNos") List<String> orderNos);
 
 	int getActivityGoodsCount(@Param("userId") Long userId, @Param("client") String client, @Param("activityId") Long activityId);
+
+    List<TeacherIndexWrapper.CourseExposureTotal> liveBuyTotal(@Param("param") TeacherIndexWrapper.CourseExposureSearch search,
+															   @Param("groupBy") String groupBy);
+
+	List<TeacherIndexWrapper.CourseExposureTotal> videoBuyTotal(@Param("param") TeacherIndexWrapper.CourseExposureSearch search,
+																@Param("groupBy") String groupBy);
+
+	List<TeacherIndexWrapper.CourseExposureTotal> musicSheetBuyTotal(@Param("param") TeacherIndexWrapper.CourseExposureSearch search,
+																	 @Param("groupBy") String groupBy);
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ExposureRecordService.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.dao.ExposureRecordDao;
 import com.yonge.cooleshow.biz.dal.entity.ExposureRecord;
 import com.yonge.cooleshow.biz.dal.wrapper.ExposureRecordWrapper;
 
@@ -8,5 +9,7 @@ import java.util.List;
 
 public interface ExposureRecordService extends IService<ExposureRecord> {
 
+    ExposureRecordDao getDao();
+
     void record(List<ExposureRecordWrapper.SaveExposureRecordDto> exposureRecordDto);
 }

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

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.biz.dal.vo.SubjectHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalStudent;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeUserToDoNum;
+import com.yonge.cooleshow.biz.dal.wrapper.TeacherIndexWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherHomeWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
@@ -80,4 +81,13 @@ public interface HomeService {
     TeacherHomeWrapper.MusicSheetTotal musicSheetTotal(Long teacherId);
 
     List<TeacherHomeWrapper.MusicSheetTotal> musicSheetPage(TeacherHomeWrapper.MusicSheetQuery query);
+
+
+    TeacherIndexWrapper.TeacherPracticeHome getTeacherPracticeHome(TeacherIndexWrapper.SummarySearch summarySearch);
+
+    List<TeacherIndexWrapper.StudentPracticeSummaryDto> getTeacherHomeStudent(TeacherIndexWrapper.StudentSearch studentSearch);
+
+    List<TeacherIndexWrapper.CourseExposureTotal> courseExposureTotal(TeacherIndexWrapper.CourseExposureSearch query);
+
+    Map<String,List<TeacherIndexWrapper.CourseExposureTotal>> courseBuyTotal(TeacherIndexWrapper.CourseExposureSearch query);
 }

+ 0 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysMusicCompareRecordService.java

@@ -64,8 +64,4 @@ public interface SysMusicCompareRecordService extends BaseService<Long, SysMusic
     SysMusicCompareRecordQueryInfo.StatDto rankingList(SysMusicCompareRecordQueryInfo.StudentCompareRecordQueryInfo queryInfo);
 
     Map<Long, SysMusicCompareRecord> getMapByIds(List<Long> musicPracticeRecordIds);
-
-    TeacherIndexWrapper.TeacherPracticeHome getTeacherPracticeHome(TeacherIndexWrapper.SummarySearch summarySearch);
-
-    List<TeacherIndexWrapper.StudentPracticeSummaryDto> getTeacherHomeStudent(TeacherIndexWrapper.StudentSearch studentSearch);
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderDetailService.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.dao.UserOrderDetailDao;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderDetailSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
@@ -15,6 +16,8 @@ import java.util.List;
  */
 public interface UserOrderDetailService extends IService<UserOrderDetail>  {
 
+	UserOrderDetailDao getDao();
+
 	/**
      * 查询详情
      * @author liweifan

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

@@ -7,15 +7,10 @@ import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
 import com.yonge.cooleshow.biz.dal.dao.UserAccountRecordDao;
 import com.yonge.cooleshow.biz.dal.dto.SubjectHomeSearch;
 import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
-import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.TeacherTagEnum;
-import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
-import com.yonge.cooleshow.biz.dal.service.HomeService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
-import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.SubjectHomeVo;
@@ -23,14 +18,18 @@ import com.yonge.cooleshow.biz.dal.vo.TagTotalTeacher;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalStudent;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeUserToDoNum;
+import com.yonge.cooleshow.biz.dal.wrapper.TeacherIndexWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherHomeWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
+import com.yonge.toolset.utils.date.DateUtil;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
@@ -43,18 +42,22 @@ import java.util.stream.Collectors;
  */
 @Service
 public class HomeServiceImpl implements HomeService {
-    @Autowired
+    @Resource
     private HomeDao baserMapper;
-    @Autowired
+    @Resource
     private CourseScheduleService courseScheduleService;
-
-    @Autowired
-    private MusicSheetService musicSheetService;
-    @Autowired
+    @Resource
     private MusicSheetDao musicSheetDao;
-
-    @Autowired
+    @Resource
     private UserAccountRecordDao userAccountRecordDao;
+    @Resource
+    private ExposureRecordService exposureRecordService;
+    @Resource
+    private TeacherService teacherService;
+    @Resource
+    private SysMusicCompareRecordService sysMusicCompareRecordService;
+    @Resource
+    private UserOrderDetailService userOrderDetailService;
 
     @Override
     public HomeUserToDoNum getUserToDoNum() {
@@ -381,4 +384,165 @@ public class HomeServiceImpl implements HomeService {
         return musicSheetDao.musicSheetPage(query);
     }
 
+    @Override
+    public TeacherIndexWrapper.TeacherPracticeHome getTeacherPracticeHome(TeacherIndexWrapper.SummarySearch summarySearch) {
+        TeacherIndexWrapper.TeacherPracticeHome teacherPracticeHome = new TeacherIndexWrapper.TeacherPracticeHome();
+        //获取老师关联的学员
+        List<Long> studentIds = teacherService.getDao().getStudentIds(summarySearch.getTeacherId(),summarySearch.getSubjectId());
+        if(CollectionUtils.isEmpty(studentIds)){
+            return teacherPracticeHome;
+        }
+        //获取学员练习汇总
+        TeacherIndexWrapper.PracticeSummaryDto practiceSummary = sysMusicCompareRecordService.getDao().getStudentTrainOverView(studentIds,summarySearch);
+        //计算平均练习时长
+        if(Objects.nonNull(practiceSummary)
+                && practiceSummary.getPracticeCount().compareTo(BigDecimal.ZERO) > 0
+                && practiceSummary.getTotalPracticeTime().compareTo(BigDecimal.ZERO) > 0){
+            practiceSummary.setAveragePracticeTime(practiceSummary.getTotalPracticeTime().divide(practiceSummary.getPracticeCount(), 0, BigDecimal.ROUND_HALF_UP));
+        }
+        teacherPracticeHome.setPracticeSummary(practiceSummary);
+
+        //获取学员练习时长
+        //获取分组条件,如果所选时间段只有一天,则按小时分组,超过一个月按天分组,超过一年按月分组
+        String groupBy;
+        List<String> dateList;
+        Date startDate = DateUtil.strToDate(summarySearch.getStartTime(), DateUtil.DEFAULT_PATTERN);
+        if(StringUtils.equals(summarySearch.getStartTime(),summarySearch.getEndTime())){
+            groupBy = "%Y-%m-%d %H";
+            //获取当天的小时段
+            dateList = DateUtil.getHourList(startDate);
+        }else {
+            Date endDate = DateUtil.strToDate(summarySearch.getEndTime(), DateUtil.DEFAULT_PATTERN);
+            if(DateUtil.daysBetween(startDate,endDate) <= 31){
+                groupBy = "%Y-%m-%d";
+                dateList = DateUtil.getDayList(startDate,endDate);
+            }else if(DateUtil.monthsBetween(startDate,endDate) <= 12){
+                groupBy = "%Y-%m";
+                dateList = DateUtil.getMonthList(startDate,endDate);
+            }else {
+                groupBy = "%Y";
+                dateList = DateUtil.getYearList(startDate,endDate);
+            }
+        }
+        List<TeacherIndexWrapper.PracticeTimeDto> studentTrainTime = sysMusicCompareRecordService.getDao().getStudentTrainTime(studentIds, summarySearch, groupBy);
+        //补全时间段
+        teacherPracticeHome.setPracticeTimes(fillData(studentTrainTime,dateList));
+        //练习人数
+        List<TeacherIndexWrapper.PracticeTimeDto> studentTrainCount = sysMusicCompareRecordService.getDao().getStudentTrainCount(studentIds, summarySearch, groupBy);
+        //补全时间段
+        teacherPracticeHome.setPracticeCounts(fillData(studentTrainCount,dateList));
+
+        return teacherPracticeHome;
+    }
+
+    //数据补全,按时间顺序
+    private List<TeacherIndexWrapper.PracticeTimeDto> fillData(List<TeacherIndexWrapper.PracticeTimeDto> studentTrainTime, List<String> dateList) {
+        Map<String,TeacherIndexWrapper.PracticeTimeDto> timeMap = studentTrainTime.stream()
+                .collect(Collectors.toMap(TeacherIndexWrapper.PracticeTimeDto::getDate, o -> o));
+        List<TeacherIndexWrapper.PracticeTimeDto> result = new ArrayList<>();
+        for (String s : dateList) {
+            TeacherIndexWrapper.PracticeTimeDto practiceTimeDto = timeMap.get(s);
+            if(Objects.nonNull(practiceTimeDto)){
+                result.add(practiceTimeDto);
+            }else {
+                result.add(new TeacherIndexWrapper.PracticeTimeDto(s,0L));
+            }
+        }
+        return result;
+    }
+
+    //数据补全,按时间顺序
+    private List<TeacherIndexWrapper.CourseExposureTotal> exposureFillData(List<TeacherIndexWrapper.CourseExposureTotal> exposureTotals,
+                                                                           List<String> dateList,
+                                                                           String[] typeArr) {
+        //按类型分组
+        Map<String, List<TeacherIndexWrapper.CourseExposureTotal>> typeMap = exposureTotals.stream()
+                .collect(Collectors.groupingBy(TeacherIndexWrapper.CourseExposureTotal::getType));
+        List<TeacherIndexWrapper.CourseExposureTotal> result = new ArrayList<>();
+        //按时间段补全数据
+        for (String s : dateList) {
+            for (String type : typeArr) {
+                List<TeacherIndexWrapper.CourseExposureTotal> dateMap = typeMap.get(type);
+                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));
+                }
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public List<TeacherIndexWrapper.StudentPracticeSummaryDto> getTeacherHomeStudent(TeacherIndexWrapper.StudentSearch studentSearch) {
+        //获取老师关联的学员
+        List<Long> studentIds = teacherService.getDao().getStudentIds(studentSearch.getTeacherId(),studentSearch.getSubjectId());
+        if(CollectionUtils.isEmpty(studentIds)){
+            return Collections.emptyList();
+        }
+        //获取学员练习汇总
+        return sysMusicCompareRecordService.getDao().getStudentTrainOverViewList(studentIds,studentSearch);
+    }
+
+
+    @Override
+    public List<TeacherIndexWrapper.CourseExposureTotal> courseExposureTotal(TeacherIndexWrapper.CourseExposureSearch search) {
+        String groupBy;
+        List<String> dateList;
+        Date startDate = DateUtil.strToDate(search.getStartTime(), DateUtil.DEFAULT_PATTERN);
+        Date endDate = DateUtil.strToDate(search.getEndTime(), DateUtil.DEFAULT_PATTERN);
+        if(DateUtil.daysBetween(startDate,endDate) <= 31){
+            groupBy = "%Y-%m-%d";
+            dateList = DateUtil.getDayList(startDate,endDate);
+        }else if(DateUtil.monthsBetween(startDate,endDate) <= 12){
+            groupBy = "%Y-%m";
+            dateList = DateUtil.getMonthList(startDate,endDate);
+        }else {
+            groupBy = "%Y";
+            dateList = DateUtil.getYearList(startDate,endDate);
+        }
+        List<TeacherIndexWrapper.CourseExposureTotal> courseExposureTotals = exposureRecordService.getDao().courseExposureTotal(search, groupBy);
+        String[] typeArr = new String[]{GoodTypeEnum.LIVE.getCode(),GoodTypeEnum.VIDEO.getCode(),GoodTypeEnum.MUSIC.getCode()};
+        return exposureFillData(courseExposureTotals,dateList,typeArr);
+    }
+
+    @Override
+    public Map<String,List<TeacherIndexWrapper.CourseExposureTotal>> courseBuyTotal(TeacherIndexWrapper.CourseExposureSearch search) {
+        //获取学员练习时长
+        //获取分组条件,如果所选时间段只有一天,则按小时分组,超过一个月按天分组,超过一年按月分组
+        String groupBy;
+        List<String> dateList;
+        Date startDate = DateUtil.strToDate(search.getStartTime(), DateUtil.DEFAULT_PATTERN);
+        Date endDate = DateUtil.strToDate(search.getEndTime(), DateUtil.DEFAULT_PATTERN);
+        if(DateUtil.daysBetween(startDate,endDate) <= 31){
+            groupBy = "%Y-%m-%d";
+            dateList = DateUtil.getDayList(startDate,endDate);
+        }else if(DateUtil.monthsBetween(startDate,endDate) <= 12){
+            groupBy = "%Y-%m";
+            dateList = DateUtil.getMonthList(startDate,endDate);
+        }else {
+            groupBy = "%Y";
+            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()}));
+        }
+        return result;
+    }
+
 }

+ 0 - 82
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMusicCompareRecordServiceImpl.java

@@ -524,88 +524,6 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
         return list.stream().collect(Collectors.toMap(SysMusicCompareRecord::getId, o ->o));
     }
 
-    @Override
-    public TeacherIndexWrapper.TeacherPracticeHome getTeacherPracticeHome(TeacherIndexWrapper.SummarySearch summarySearch) {
-		TeacherIndexWrapper.TeacherPracticeHome teacherPracticeHome = new TeacherIndexWrapper.TeacherPracticeHome();
-		//获取老师关联的学员
-		List<Long> studentIds = teacherService.getDao().getStudentIds(summarySearch.getTeacherId(),summarySearch.getSubjectId());
-		if(CollectionUtils.isEmpty(studentIds)){
-			return teacherPracticeHome;
-		}
-		//获取学员练习汇总
-		TeacherIndexWrapper.PracticeSummaryDto practiceSummary = sysMusicCompareRecordDao.getStudentTrainOverView(studentIds,summarySearch);
-		//计算平均练习时长
-		if(Objects.nonNull(practiceSummary)
-		&& practiceSummary.getPracticeCount().compareTo(BigDecimal.ZERO) > 0
-		&& practiceSummary.getTotalPracticeTime().compareTo(BigDecimal.ZERO) > 0){
-			practiceSummary.setAveragePracticeTime(practiceSummary.getTotalPracticeTime().divide(practiceSummary.getPracticeCount(), 0, BigDecimal.ROUND_HALF_UP));
-		}
-		teacherPracticeHome.setPracticeSummary(practiceSummary);
-
-		//获取学员练习时长
-		//获取分组条件,如果所选时间段只有一天,则按小时分组,超过一个月按天分组,超过一年按月分组
-		String groupBy;
-		List<String> dateList;
-		Date startDate = DateUtil.strToDate(summarySearch.getStartTime(), DateUtil.DEFAULT_PATTERN);
-		if(StringUtils.equals(summarySearch.getStartTime(),summarySearch.getEndTime())){
-			groupBy = "%Y-%m-%d %H";
-			//获取当天的小时段
-			dateList = DateUtil.getHourList(startDate);
-		}else {
-			Date endDate = DateUtil.strToDate(summarySearch.getEndTime(), DateUtil.DEFAULT_PATTERN);
-			if(DateUtil.daysBetween(startDate,endDate) <= 31){
-				groupBy = "%Y-%m-%d";
-				dateList = DateUtil.getDayList(startDate,endDate);
-			}else if(DateUtil.monthsBetween(startDate,endDate) <= 12){
-				groupBy = "%Y-%m";
-				dateList = DateUtil.getMonthList(startDate,endDate);
-			}else {
-				groupBy = "%Y";
-				dateList = DateUtil.getYearList(startDate,endDate);
-			}
-		}
-		List<TeacherIndexWrapper.PracticeTimeDto> studentTrainTime = sysMusicCompareRecordDao.getStudentTrainTime(studentIds, summarySearch, groupBy);
-		//补全时间段
-		teacherPracticeHome.setPracticeTimes(fillData(studentTrainTime,dateList));
-		//练习人数
-		List<TeacherIndexWrapper.PracticeTimeDto> studentTrainCount = sysMusicCompareRecordDao.getStudentTrainCount(studentIds, summarySearch, groupBy);
-		//补全时间段
-		teacherPracticeHome.setPracticeCounts(fillData(studentTrainCount,dateList));
-
-        return teacherPracticeHome;
-    }
-
-	//数据补全,按时间顺序
-	private List<TeacherIndexWrapper.PracticeTimeDto> fillData(List<TeacherIndexWrapper.PracticeTimeDto> studentTrainTime, List<String> dateList) {
-		if(CollectionUtils.isEmpty(studentTrainTime)){
-			return studentTrainTime;
-		}
-		Map<String,TeacherIndexWrapper.PracticeTimeDto> timeMap = studentTrainTime.stream()
-				.collect(Collectors.toMap(TeacherIndexWrapper.PracticeTimeDto::getDate, o -> o));
-		List<TeacherIndexWrapper.PracticeTimeDto> result = new ArrayList<>();
-		for (String s : dateList) {
-			TeacherIndexWrapper.PracticeTimeDto practiceTimeDto = timeMap.get(s);
-			if(Objects.nonNull(practiceTimeDto)){
-				result.add(practiceTimeDto);
-			}else {
-				result.add(new TeacherIndexWrapper.PracticeTimeDto(s,0L));
-			}
-		}
-		return result;
-	}
-
-	@Override
-	public List<TeacherIndexWrapper.StudentPracticeSummaryDto> getTeacherHomeStudent(TeacherIndexWrapper.StudentSearch studentSearch) {
-		//获取老师关联的学员
-		List<Long> studentIds = teacherService.getDao().getStudentIds(studentSearch.getTeacherId(),studentSearch.getSubjectId());
-		if(CollectionUtils.isEmpty(studentIds)){
-			return Collections.emptyList();
-		}
-		//获取学员练习汇总
-		return sysMusicCompareRecordDao.getStudentTrainOverViewList(studentIds,studentSearch);
-	}
-
-
 	private String getExpireTime() {
 
 		String homeworkExpireTime = sysConfigService.findConfigValue(SysConfigConstant.HOMEWORK_EXPIRE_TIME);

+ 9 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderDetailServiceImpl.java

@@ -3,12 +3,12 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
-import org.springframework.stereotype.Service;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderDetailSearch;
 import com.yonge.cooleshow.biz.dal.dao.UserOrderDetailDao;
+import com.yonge.cooleshow.biz.dal.dto.search.OrderDetailSearch;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
 import com.yonge.cooleshow.biz.dal.service.UserOrderDetailService;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
+import org.springframework.stereotype.Service;
 
 import java.util.List;
 
@@ -17,6 +17,11 @@ import java.util.List;
 public class UserOrderDetailServiceImpl extends ServiceImpl<UserOrderDetailDao, UserOrderDetail> implements UserOrderDetailService {
 
     @Override
+    public UserOrderDetailDao getDao() {
+        return baseMapper;
+    }
+
+    @Override
     public UserOrderDetailVo detail(Long id) {
         UserOrderDetailVo detail = baseMapper.detail(id);
         return detail;

+ 46 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TeacherIndexWrapper.java

@@ -8,6 +8,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 @ApiModel(value = "TeacherIndexWrapper", description = "首页数据统计")
@@ -122,4 +123,49 @@ public class TeacherIndexWrapper {
         private Long averagePracticeTime;
     }
 
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class CourseExposureTotal{
+
+        @ApiModelProperty("日期")
+        private String date;
+
+        @ApiModelProperty("曝光数")
+        private Integer exposureNum;
+
+        @ApiModelProperty("类型")
+        private String type;
+
+        public CourseExposureTotal(String date, String type, Integer exposureNum) {
+            this.date = date;
+            this.type = type;
+            this.exposureNum = exposureNum;
+        }
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class CourseExposureSearch{
+
+        @ApiModelProperty("开始时间")
+        private String startTime;
+
+        @ApiModelProperty("结束时间")
+        private String endTime;
+
+        @ApiModelProperty("类型MUSIC:乐谱,LIVE:直播课,VIDEO:视频课")
+        private String type;
+
+        @ApiModelProperty("老师id")
+        private Long teacherId;
+
+        @ApiModelProperty("学员列表")
+        private List<Long> studentIds;
+
+    }
+
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ExposureRecordDao.xml

@@ -12,4 +12,15 @@
 		ON DUPLICATE KEY UPDATE
 		exposure_num_ = exposure_num_ + 1
 	</update>
+    <select id="courseExposureTotal"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.TeacherIndexWrapper$CourseExposureTotal">
+		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.objectType != null and param.objectType != ''">
+				and er.object_type_ = #{param.objectType}
+		</if>
+		group by er.object_type_,DATE_FORMAT(er.exposure_time_, #{groupBy})
+		ORDER BY type,'date'
+	</select>
 </mapper>

+ 33 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml

@@ -150,4 +150,37 @@
         and o.status_ in ('PAID','WAIT_PAY','PAYING')
         and t.gift_flag_ = 0
     </select>
+    <select id="liveBuyTotal"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.TeacherIndexWrapper$CourseExposureTotal">
+        select uod.good_type_ type,COUNT(distinct uod.order_no_) exposureNum,
+               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'
+        AND DATE_FORMAT(uod.create_time_, '%Y-%m-%d') BETWEEN #{param.startTime} AND #{param.endTime}
+        group by 'date' order by 'date'
+    </select>
+    <select id="videoBuyTotal"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.TeacherIndexWrapper$CourseExposureTotal">
+        select uod.good_type_ type,COUNT(distinct uod.order_no_) exposureNum,
+               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 video_lesson_group cg On cg.id_ = uod.biz_id_
+        where uod.good_type_ = 'VIDEO' AND cg.teacher_id_ = #{param.teacherId} AND uo.status_ = 'PAID'
+          AND DATE_FORMAT(uod.create_time_, '%Y-%m-%d') BETWEEN #{param.startTime} AND #{param.endTime}
+        group by 'date' order by 'date'
+    </select>
+    <select id="musicSheetBuyTotal"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.TeacherIndexWrapper$CourseExposureTotal">
+        select uod.good_type_ type,COUNT(distinct uod.order_no_) exposureNum,
+               DATE_FORMAT(uod.create_time_,#{groupBy}) 'date' from user_order_detail uod
+        left join user_order uo ON uo.order_no_ = uod.order_no_
+        where uod.good_type_ = 'MUSIC' AND uo.status_ = 'PAID'
+          AND uo.user_id_ IN
+          <foreach collection="param.studentIds" item="userId" open="(" close=")" separator=",">
+              #{userId}
+            </foreach>
+          AND DATE_FORMAT(uod.create_time_, '%Y-%m-%d') BETWEEN #{param.startTime} AND #{param.endTime}
+        group by 'date' order by 'date'
+    </select>
 </mapper>