diff --git a/src/main/java/xyz/playedu/api/controller/backend/DashboardController.java b/src/main/java/xyz/playedu/api/controller/backend/DashboardController.java index 6ff31c7..7ed70a5 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/DashboardController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/DashboardController.java @@ -1,9 +1,13 @@ 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.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import xyz.playedu.api.constant.BackendConstant; import xyz.playedu.api.constant.SystemConstant; +import xyz.playedu.api.domain.UserLearnDurationStats; +import xyz.playedu.api.service.*; import xyz.playedu.api.types.JsonResponse; import java.util.HashMap; @@ -16,11 +20,49 @@ import java.util.HashMap; @RequestMapping("/backend/v1/dashboard") 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") public JsonResponse index() { HashMap data = new HashMap<>(); 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); } diff --git a/src/main/java/xyz/playedu/api/domain/UserLearnDurationRecord.java b/src/main/java/xyz/playedu/api/domain/UserLearnDurationRecord.java index 3e744aa..dbac266 100644 --- a/src/main/java/xyz/playedu/api/domain/UserLearnDurationRecord.java +++ b/src/main/java/xyz/playedu/api/domain/UserLearnDurationRecord.java @@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; /** @@ -24,11 +26,13 @@ public class UserLearnDurationRecord implements Serializable { /** * */ + @JsonProperty("user_id") private Integer userId; /** * */ + @JsonProperty("created_date") private Date createdDate; /** @@ -39,21 +43,25 @@ public class UserLearnDurationRecord implements Serializable { /** * 开始时间 */ + @JsonProperty("start_at") private Date startAt; /** * 结束时间 */ + @JsonProperty("end_at") private Date endAt; /** * */ + @JsonProperty("course_id") private Integer courseId; /** * */ + @JsonProperty("hour_id") private Integer hourId; @TableField(exist = false) diff --git a/src/main/java/xyz/playedu/api/domain/UserLearnDurationStats.java b/src/main/java/xyz/playedu/api/domain/UserLearnDurationStats.java index cd3e9e5..07c5b08 100644 --- a/src/main/java/xyz/playedu/api/domain/UserLearnDurationStats.java +++ b/src/main/java/xyz/playedu/api/domain/UserLearnDurationStats.java @@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; /** @@ -24,6 +26,7 @@ public class UserLearnDurationStats implements Serializable { /** * */ + @JsonProperty("user_id") private Integer userId; /** @@ -34,6 +37,7 @@ public class UserLearnDurationStats implements Serializable { /** * */ + @JsonProperty("created_date") private Date createdDate; @TableField(exist = false) diff --git a/src/main/java/xyz/playedu/api/service/AdminUserService.java b/src/main/java/xyz/playedu/api/service/AdminUserService.java index 73a1701..61fe403 100644 --- a/src/main/java/xyz/playedu/api/service/AdminUserService.java +++ b/src/main/java/xyz/playedu/api/service/AdminUserService.java @@ -42,4 +42,6 @@ public interface AdminUserService extends IService { void passwordChange(AdminUser user, String password); List chunks(List ids); + + Long total(); } diff --git a/src/main/java/xyz/playedu/api/service/CourseService.java b/src/main/java/xyz/playedu/api/service/CourseService.java index 8c73d2f..f421c10 100644 --- a/src/main/java/xyz/playedu/api/service/CourseService.java +++ b/src/main/java/xyz/playedu/api/service/CourseService.java @@ -51,4 +51,6 @@ public interface CourseService extends IService { Map> getCategoryIdsGroup(List courseIds); Map> getDepIdsGroup(List courseIds); + + Long total(); } diff --git a/src/main/java/xyz/playedu/api/service/DepartmentService.java b/src/main/java/xyz/playedu/api/service/DepartmentService.java index 7de6cfc..9f4b7e4 100644 --- a/src/main/java/xyz/playedu/api/service/DepartmentService.java +++ b/src/main/java/xyz/playedu/api/service/DepartmentService.java @@ -45,4 +45,6 @@ public interface DepartmentService extends IService { Map> groupByParent(); Map id2name(); + + Long total(); } diff --git a/src/main/java/xyz/playedu/api/service/ResourceCategoryService.java b/src/main/java/xyz/playedu/api/service/ResourceCategoryService.java index 360449c..22108c4 100644 --- a/src/main/java/xyz/playedu/api/service/ResourceCategoryService.java +++ b/src/main/java/xyz/playedu/api/service/ResourceCategoryService.java @@ -41,4 +41,6 @@ public interface ResourceCategoryService extends IService { Map> groupByParent(); Map id2name(); + + Long total(); } diff --git a/src/main/java/xyz/playedu/api/service/UserLearnDurationStatsService.java b/src/main/java/xyz/playedu/api/service/UserLearnDurationStatsService.java index 8415f92..e7a27d1 100644 --- a/src/main/java/xyz/playedu/api/service/UserLearnDurationStatsService.java +++ b/src/main/java/xyz/playedu/api/service/UserLearnDurationStatsService.java @@ -3,6 +3,8 @@ package xyz.playedu.api.service; import xyz.playedu.api.domain.UserLearnDurationStats; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * @author tengteng * @description 针对表【user_learn_duration_stats】的数据库操作Service @@ -10,4 +12,10 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface UserLearnDurationStatsService extends IService { void storeOrUpdate(Integer userId, Long startTime, Long endTime); + + Long todayTotal(); + + Long yesterdayTotal(); + + List top10(); } diff --git a/src/main/java/xyz/playedu/api/service/UserService.java b/src/main/java/xyz/playedu/api/service/UserService.java index fd87cd6..baa5577 100644 --- a/src/main/java/xyz/playedu/api/service/UserService.java +++ b/src/main/java/xyz/playedu/api/service/UserService.java @@ -38,4 +38,10 @@ public interface UserService extends IService { void passwordChange(User user, String oldPassword, String newPassword) throws ServiceException; List chunks(List ids, List fields); + + Long total(); + + Long todayCount(); + + Long yesterdayCount(); } diff --git a/src/main/java/xyz/playedu/api/service/impl/AdminUserServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/AdminUserServiceImpl.java index 9109c20..dde7d1b 100644 --- a/src/main/java/xyz/playedu/api/service/impl/AdminUserServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/AdminUserServiceImpl.java @@ -175,6 +175,11 @@ public class AdminUserServiceImpl extends ServiceImpl chunks(List ids) { return list(query().getWrapper().in("id", ids)); } + + @Override + public Long total() { + return count(); + } } diff --git a/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java index f18300a..d153bd3 100644 --- a/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/CourseServiceImpl.java @@ -1,7 +1,6 @@ package xyz.playedu.api.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import xyz.playedu.api.domain.ResourceCourseCategory; @@ -210,6 +209,11 @@ public class CourseServiceImpl extends ServiceImpl impleme }); return result; } + + @Override + public Long total() { + return count(); + } } diff --git a/src/main/java/xyz/playedu/api/service/impl/DepartmentServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/DepartmentServiceImpl.java index 6f98897..6b5a962 100644 --- a/src/main/java/xyz/playedu/api/service/impl/DepartmentServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/DepartmentServiceImpl.java @@ -223,6 +223,11 @@ public class DepartmentServiceImpl extends ServiceImpl id2name() { return all().stream().collect(Collectors.toMap(Department::getId, Department::getName)); } + + @Override + public Long total() { + return count(); + } } diff --git a/src/main/java/xyz/playedu/api/service/impl/ResourceCategoryServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/ResourceCategoryServiceImpl.java index 23e49fc..1a7d8e1 100644 --- a/src/main/java/xyz/playedu/api/service/impl/ResourceCategoryServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/ResourceCategoryServiceImpl.java @@ -209,6 +209,11 @@ public class ResourceCategoryServiceImpl extends ServiceImpl id2name() { return all().stream().collect(Collectors.toMap(ResourceCategory::getId, ResourceCategory::getName)); } + + @Override + public Long total() { + return count(); + } } diff --git a/src/main/java/xyz/playedu/api/service/impl/UserLearnDurationStatsServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserLearnDurationStatsServiceImpl.java index a143811..5658978 100644 --- a/src/main/java/xyz/playedu/api/service/impl/UserLearnDurationStatsServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/UserLearnDurationStatsServiceImpl.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; /** * @author tengteng @@ -16,8 +17,7 @@ import java.util.Date; * @createDate 2023-03-22 13:55:29 */ @Service -public class UserLearnDurationStatsServiceImpl extends ServiceImpl - implements UserLearnDurationStatsService { +public class UserLearnDurationStatsServiceImpl extends ServiceImpl implements UserLearnDurationStatsService { @Override @SneakyThrows @@ -43,6 +43,29 @@ public class UserLearnDurationStatsServiceImpl extends ServiceImpl 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")); + } } diff --git a/src/main/java/xyz/playedu/api/service/impl/UserServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserServiceImpl.java index 2517a34..57f136f 100644 --- a/src/main/java/xyz/playedu/api/service/impl/UserServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/UserServiceImpl.java @@ -1,6 +1,7 @@ package xyz.playedu.api.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; 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.util.HelperUtil; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @@ -160,6 +162,29 @@ public class UserServiceImpl extends ServiceImpl implements Us public List chunks(List ids, List 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))); + } }