|
@@ -1,23 +1,29 @@
|
|
|
package com.yonge.cooleshow.biz.dal.service.impl;
|
|
|
|
|
|
+import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.HomeDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
|
|
|
-import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
|
|
|
import com.yonge.cooleshow.biz.dal.service.HomeService;
|
|
|
+import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
|
|
|
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeVo;
|
|
|
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.common.entity.HttpResponseResult;
|
|
|
-import com.yonge.toolset.base.exception.BizException;
|
|
|
-import io.swagger.annotations.ApiModelProperty;
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.time.LocalDate;
|
|
|
-import java.time.LocalDateTime;
|
|
|
-import java.time.LocalTime;
|
|
|
import java.time.temporal.TemporalAdjusters;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @Author: liweifan
|
|
@@ -27,6 +33,8 @@ import java.util.List;
|
|
|
public class HomeServiceImpl implements HomeService {
|
|
|
@Autowired
|
|
|
private HomeDao baserMapper;
|
|
|
+ @Autowired
|
|
|
+ private CourseScheduleService courseScheduleService;
|
|
|
|
|
|
@Override
|
|
|
public HomeUserToDoNum getUserToDoNum() {
|
|
@@ -106,4 +114,86 @@ public class HomeServiceImpl implements HomeService {
|
|
|
total.setInfoList(totalList);
|
|
|
return HttpResponseResult.succeed(total);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取首页课程数据
|
|
|
+ * <p>未完成 未开始&进行中
|
|
|
+ * <p>已完成 已完成课程
|
|
|
+ *
|
|
|
+ * @param param 传入参数
|
|
|
+ * <p> - year 年
|
|
|
+ * <p> - month 月
|
|
|
+ * <p> - type 类型 PRACTICE陪练课 LIVE直播课
|
|
|
+ */
|
|
|
+ public CourseHomeVo queryCourseHomeData(Map<String, Object> param) {
|
|
|
+ CourseScheduleEnum.existCourseType(WrapperUtil.toStr(param, "type"), "课程类型参数错误");
|
|
|
+ Integer year = WrapperUtil.toInt(param, "year", "年份不能为空!");
|
|
|
+ Integer monthParam = WrapperUtil.toInt(param, "month");
|
|
|
+ //按月查询true 年查询false
|
|
|
+ boolean isYear = monthParam == 0;
|
|
|
+ int month = isYear ? 1 : monthParam;
|
|
|
+
|
|
|
+ LocalDate firstDate;
|
|
|
+ LocalDate endDate;
|
|
|
+ CourseHomeVo result = new CourseHomeVo();
|
|
|
+ CourseScheduleDao courseScheduleServiceDao = courseScheduleService.getDao();
|
|
|
+ firstDate = LocalDate.of(year, month, 1);
|
|
|
+ //获取开始时间
|
|
|
+ if (isYear) {
|
|
|
+ //查询当年最后一天
|
|
|
+ endDate = firstDate.with(TemporalAdjusters.lastDayOfYear());
|
|
|
+ } else {
|
|
|
+ //查询当月最后一天
|
|
|
+ endDate = firstDate.with(TemporalAdjusters.lastDayOfMonth());
|
|
|
+ }
|
|
|
+ param.put("startDate", firstDate);
|
|
|
+ param.put("endDate", endDate);
|
|
|
+
|
|
|
+ //查询数据
|
|
|
+ List<CourseHomeVo.CourseHomeInfoVo> courseYearInfoList;
|
|
|
+ if (isYear) {
|
|
|
+ courseYearInfoList = courseScheduleServiceDao.queryCourseHomeOfYear(param);
|
|
|
+ } else {
|
|
|
+ courseYearInfoList = courseScheduleServiceDao.queryCourseHomeOfMonth(param);
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isEmpty(courseYearInfoList)) {
|
|
|
+ courseYearInfoList = new ArrayList<>();
|
|
|
+ }
|
|
|
+ Map<String, CourseHomeVo.CourseHomeInfoVo> collect = courseYearInfoList.stream()
|
|
|
+ .collect(Collectors.toMap(CourseHomeVo.CourseHomeInfoVo::getDate, Function.identity(), (key1, key2) -> key2));
|
|
|
+ //补全数据
|
|
|
+ while (firstDate.isBefore(endDate)) {
|
|
|
+ CourseHomeVo.CourseHomeInfoVo infoVo = collect.get(firstDate.toString());
|
|
|
+ if (Objects.isNull(infoVo)) {
|
|
|
+ infoVo = new CourseHomeVo.CourseHomeInfoVo();
|
|
|
+ if (isYear) {
|
|
|
+ infoVo.setDate(firstDate.toString().substring(0, 7));
|
|
|
+ } else {
|
|
|
+ infoVo.setDate(firstDate.toString());
|
|
|
+ }
|
|
|
+ infoVo.setDoneCount(0);
|
|
|
+ infoVo.setUndoneCount(0);
|
|
|
+ courseYearInfoList.add(infoVo);
|
|
|
+ } else {
|
|
|
+ if (isYear) {
|
|
|
+ infoVo.setDate(firstDate.toString().substring(0, 7));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (isYear) {
|
|
|
+ firstDate = firstDate.plusMonths(1L);
|
|
|
+ } else {
|
|
|
+ firstDate = firstDate.plusDays(1L);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ result.setCourseHomeInfoList(courseYearInfoList);
|
|
|
+ //计算总数方法
|
|
|
+ Function<Function<CourseHomeVo.CourseHomeInfoVo, Integer>, Integer> reduceFunc = (c) -> result.getCourseHomeInfoList().stream()
|
|
|
+ .map(c)
|
|
|
+ .reduce(0, Integer::sum);
|
|
|
+ result.setTotalDoneCount(reduceFunc.apply(CourseHomeVo.CourseHomeInfoVo::getDoneCount));
|
|
|
+ result.setTotalUndoneCount(reduceFunc.apply(CourseHomeVo.CourseHomeInfoVo::getUndoneCount));
|
|
|
+ result.setTotalCount(result.getTotalDoneCount() + result.getTotalUndoneCount());
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
}
|