added: 首页主面板api

This commit is contained in:
none 2023-03-22 15:55:44 +08:00
parent d621cc5937
commit c1b3029f4b
15 changed files with 146 additions and 3 deletions

View File

@ -1,9 +1,13 @@
package xyz.playedu.api.controller.backend; package xyz.playedu.api.controller.backend;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import xyz.playedu.api.constant.BackendConstant;
import xyz.playedu.api.constant.SystemConstant; import xyz.playedu.api.constant.SystemConstant;
import xyz.playedu.api.domain.UserLearnDurationStats;
import xyz.playedu.api.service.*;
import xyz.playedu.api.types.JsonResponse; import xyz.playedu.api.types.JsonResponse;
import java.util.HashMap; import java.util.HashMap;
@ -16,11 +20,49 @@ import java.util.HashMap;
@RequestMapping("/backend/v1/dashboard") @RequestMapping("/backend/v1/dashboard")
public class DashboardController { public class DashboardController {
@Autowired
private AdminUserService adminUserService;
@Autowired
private ResourceCategoryService resourceCategoryService;
@Autowired
private UserService userService;
@Autowired
private CourseService courseService;
@Autowired
private DepartmentService departmentService;
@Autowired
private ResourceService resourceService;
@Autowired
private UserLearnDurationStatsService userLearnDurationStatsService;
@GetMapping("/index") @GetMapping("/index")
public JsonResponse index() { public JsonResponse index() {
HashMap<String, Object> data = new HashMap<>(); HashMap<String, Object> data = new HashMap<>();
data.put("version", SystemConstant.VERSION); data.put("version", SystemConstant.VERSION);
data.put("user_total", userService.total());//总学员数量
data.put("user_today", userService.todayCount());//今日注册学员数量
data.put("user_yesterday", userService.yesterdayCount());//昨日注册学员数量
data.put("course_total", courseService.total());//线上课数量
data.put("department_total", departmentService.total());
data.put("resource_category_total", resourceCategoryService.total());
data.put("admin_user_total", adminUserService.total());
data.put("resource_video_total", resourceService.total(BackendConstant.RESOURCE_TYPE_VIDEO));
data.put("resource_image_total", resourceService.total(BackendConstant.RESOURCE_TYPE_IMAGE));
data.put("user_learn_today", userLearnDurationStatsService.todayTotal());
data.put("user_learn_yesterday", userLearnDurationStatsService.yesterdayTotal());
data.put("user_learn_top10", userLearnDurationStatsService.top10());
return JsonResponse.data(data); return JsonResponse.data(data);
} }

View File

@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data; import lombok.Data;
/** /**
@ -24,11 +26,13 @@ public class UserLearnDurationRecord implements Serializable {
/** /**
* *
*/ */
@JsonProperty("user_id")
private Integer userId; private Integer userId;
/** /**
* *
*/ */
@JsonProperty("created_date")
private Date createdDate; private Date createdDate;
/** /**
@ -39,21 +43,25 @@ public class UserLearnDurationRecord implements Serializable {
/** /**
* 开始时间 * 开始时间
*/ */
@JsonProperty("start_at")
private Date startAt; private Date startAt;
/** /**
* 结束时间 * 结束时间
*/ */
@JsonProperty("end_at")
private Date endAt; private Date endAt;
/** /**
* *
*/ */
@JsonProperty("course_id")
private Integer courseId; private Integer courseId;
/** /**
* *
*/ */
@JsonProperty("hour_id")
private Integer hourId; private Integer hourId;
@TableField(exist = false) @TableField(exist = false)

View File

@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data; import lombok.Data;
/** /**
@ -24,6 +26,7 @@ public class UserLearnDurationStats implements Serializable {
/** /**
* *
*/ */
@JsonProperty("user_id")
private Integer userId; private Integer userId;
/** /**
@ -34,6 +37,7 @@ public class UserLearnDurationStats implements Serializable {
/** /**
* *
*/ */
@JsonProperty("created_date")
private Date createdDate; private Date createdDate;
@TableField(exist = false) @TableField(exist = false)

View File

@ -42,4 +42,6 @@ public interface AdminUserService extends IService<AdminUser> {
void passwordChange(AdminUser user, String password); void passwordChange(AdminUser user, String password);
List<AdminUser> chunks(List<Integer> ids); List<AdminUser> chunks(List<Integer> ids);
Long total();
} }

View File

@ -51,4 +51,6 @@ public interface CourseService extends IService<Course> {
Map<Integer, List<Integer>> getCategoryIdsGroup(List<Integer> courseIds); Map<Integer, List<Integer>> getCategoryIdsGroup(List<Integer> courseIds);
Map<Integer, List<Integer>> getDepIdsGroup(List<Integer> courseIds); Map<Integer, List<Integer>> getDepIdsGroup(List<Integer> courseIds);
Long total();
} }

View File

@ -45,4 +45,6 @@ public interface DepartmentService extends IService<Department> {
Map<Integer, List<Department>> groupByParent(); Map<Integer, List<Department>> groupByParent();
Map<Integer, String> id2name(); Map<Integer, String> id2name();
Long total();
} }

View File

@ -41,4 +41,6 @@ public interface ResourceCategoryService extends IService<ResourceCategory> {
Map<Integer, List<ResourceCategory>> groupByParent(); Map<Integer, List<ResourceCategory>> groupByParent();
Map<Integer, String> id2name(); Map<Integer, String> id2name();
Long total();
} }

View File

@ -3,6 +3,8 @@ package xyz.playedu.api.service;
import xyz.playedu.api.domain.UserLearnDurationStats; import xyz.playedu.api.domain.UserLearnDurationStats;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
* @author tengteng * @author tengteng
* @description 针对表user_learn_duration_stats的数据库操作Service * @description 针对表user_learn_duration_stats的数据库操作Service
@ -10,4 +12,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface UserLearnDurationStatsService extends IService<UserLearnDurationStats> { public interface UserLearnDurationStatsService extends IService<UserLearnDurationStats> {
void storeOrUpdate(Integer userId, Long startTime, Long endTime); void storeOrUpdate(Integer userId, Long startTime, Long endTime);
Long todayTotal();
Long yesterdayTotal();
List<UserLearnDurationStats> top10();
} }

View File

@ -38,4 +38,10 @@ public interface UserService extends IService<User> {
void passwordChange(User user, String oldPassword, String newPassword) throws ServiceException; void passwordChange(User user, String oldPassword, String newPassword) throws ServiceException;
List<User> chunks(List<Integer> ids, List<String> fields); List<User> chunks(List<Integer> ids, List<String> fields);
Long total();
Long todayCount();
Long yesterdayCount();
} }

View File

@ -175,6 +175,11 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
public List<AdminUser> chunks(List<Integer> ids) { public List<AdminUser> chunks(List<Integer> ids) {
return list(query().getWrapper().in("id", ids)); return list(query().getWrapper().in("id", ids));
} }
@Override
public Long total() {
return count();
}
} }

View File

@ -1,7 +1,6 @@
package xyz.playedu.api.service.impl; package xyz.playedu.api.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import xyz.playedu.api.domain.ResourceCourseCategory; import xyz.playedu.api.domain.ResourceCourseCategory;
@ -210,6 +209,11 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
}); });
return result; return result;
} }
@Override
public Long total() {
return count();
}
} }

View File

@ -223,6 +223,11 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
public Map<Integer, String> id2name() { public Map<Integer, String> id2name() {
return all().stream().collect(Collectors.toMap(Department::getId, Department::getName)); return all().stream().collect(Collectors.toMap(Department::getId, Department::getName));
} }
@Override
public Long total() {
return count();
}
} }

View File

@ -209,6 +209,11 @@ public class ResourceCategoryServiceImpl extends ServiceImpl<ResourceCategoryMap
public Map<Integer, String> id2name() { public Map<Integer, String> id2name() {
return all().stream().collect(Collectors.toMap(ResourceCategory::getId, ResourceCategory::getName)); return all().stream().collect(Collectors.toMap(ResourceCategory::getId, ResourceCategory::getName));
} }
@Override
public Long total() {
return count();
}
} }

View File

@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* @author tengteng * @author tengteng
@ -16,8 +17,7 @@ import java.util.Date;
* @createDate 2023-03-22 13:55:29 * @createDate 2023-03-22 13:55:29
*/ */
@Service @Service
public class UserLearnDurationStatsServiceImpl extends ServiceImpl<UserLearnDurationStatsMapper, UserLearnDurationStats> public class UserLearnDurationStatsServiceImpl extends ServiceImpl<UserLearnDurationStatsMapper, UserLearnDurationStats> implements UserLearnDurationStatsService {
implements UserLearnDurationStatsService {
@Override @Override
@SneakyThrows @SneakyThrows
@ -43,6 +43,29 @@ public class UserLearnDurationStatsServiceImpl extends ServiceImpl<UserLearnDura
newStats.setDuration((int) (stats.getDuration() + duration)); newStats.setDuration((int) (stats.getDuration() + duration));
updateById(newStats); updateById(newStats);
} }
@Override
@SneakyThrows
public Long todayTotal() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String today = simpleDateFormat.format(new Date());
return count(query().getWrapper().eq("created_date", today));
}
@Override
@SneakyThrows
public Long yesterdayTotal() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String yesterday = simpleDateFormat.format(new Date(System.currentTimeMillis() - 86399000));
return count(query().getWrapper().eq("created_date", yesterday));
}
@Override
public List<UserLearnDurationStats> top10() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String today = simpleDateFormat.format(new Date());
return list(query().getWrapper().eq("created_date", today).orderByDesc("duration").last("limit 10"));
}
} }

View File

@ -1,6 +1,7 @@
package xyz.playedu.api.service.impl; package xyz.playedu.api.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import xyz.playedu.api.constant.SystemConstant; import xyz.playedu.api.constant.SystemConstant;
@ -16,6 +17,7 @@ import xyz.playedu.api.types.paginate.PaginationResult;
import xyz.playedu.api.types.paginate.UserPaginateFilter; import xyz.playedu.api.types.paginate.UserPaginateFilter;
import xyz.playedu.api.util.HelperUtil; import xyz.playedu.api.util.HelperUtil;
import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -160,6 +162,29 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
public List<User> chunks(List<Integer> ids, List<String> fields) { public List<User> chunks(List<Integer> ids, List<String> fields) {
return list(query().getWrapper().in("id", ids).select(fields)); return list(query().getWrapper().in("id", ids).select(fields));
} }
@Override
public Long total() {
return count();
}
@Override
@SneakyThrows
public Long todayCount() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date now = new Date();
String todayDate = simpleDateFormat.format(now);
return count(query().getWrapper().between("created_at", simpleDateFormat.parse(todayDate), now));
}
@Override
@SneakyThrows
public Long yesterdayCount() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String todayDate = simpleDateFormat.format(new Date());
String yesterdayDate = simpleDateFormat.format(new Date(System.currentTimeMillis() - 86400000));
return count(query().getWrapper().between("created_at", simpleDateFormat.parse(yesterdayDate), simpleDateFormat.parse(todayDate)));
}
} }