后台新增学员的最近一个月的学习统计api

This commit is contained in:
none 2023-04-18 15:49:39 +08:00
parent 3e36fcd1f0
commit b34c744da9
5 changed files with 80 additions and 35 deletions

View File

@ -127,12 +127,17 @@
<dependency> <dependency>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-json</artifactId> <artifactId>hutool-json</artifactId>
<version>5.8.15</version> <version>5.8.16</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId> <artifactId>hutool-http</artifactId>
<version>5.8.15</version> <version>5.8.16</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.8.16</version>
</dependency> </dependency>
<dependency> <dependency>

View File

@ -40,8 +40,7 @@ import java.util.Map;
@Slf4j @Slf4j
public class SystemController { public class SystemController {
@Autowired @Autowired private ImageCaptchaService imageCaptchaService;
private ImageCaptchaService imageCaptchaService;
@GetMapping("/image-captcha") @GetMapping("/image-captcha")
public JsonResponse imageCaptcha() throws IOException { public JsonResponse imageCaptcha() throws IOException {

View File

@ -15,6 +15,9 @@
*/ */
package xyz.playedu.api.controller.backend; package xyz.playedu.api.controller.backend;
import cn.hutool.core.date.DateTime;
import lombok.Data;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -49,6 +52,7 @@ import java.util.stream.Collectors;
/** /**
* @Author 杭州白书科技有限公司 * @Author 杭州白书科技有限公司
*
* @create 2023/2/23 09:48 * @create 2023/2/23 09:48
*/ */
@RestController @RestController
@ -56,29 +60,23 @@ import java.util.stream.Collectors;
@RequestMapping("/backend/v1/user") @RequestMapping("/backend/v1/user")
public class UserController { public class UserController {
@Autowired @Autowired private UserService userService;
private UserService userService;
@Autowired @Autowired private UserDepartmentService userDepartmentService;
private UserDepartmentService userDepartmentService;
@Autowired @Autowired private DepartmentService departmentService;
private DepartmentService departmentService;
@Autowired @Autowired private ApplicationContext context;
private ApplicationContext context;
@Autowired @Autowired private UserCourseHourRecordService userCourseHourRecordService;
private UserCourseHourRecordService userCourseHourRecordService;
@Autowired @Autowired private UserCourseRecordService userCourseRecordService;
private UserCourseRecordService userCourseRecordService;
@Autowired @Autowired private CourseHourService courseHourService;
private CourseHourService courseHourService;
@Autowired @Autowired private CourseService courseService;
private CourseService courseService;
@Autowired private UserLearnDurationStatsService userLearnDurationStatsService;
@BackendPermissionMiddleware(slug = BPermissionConstant.USER_INDEX) @BackendPermissionMiddleware(slug = BPermissionConstant.USER_INDEX)
@GetMapping("/index") @GetMapping("/index")
@ -441,12 +439,47 @@ public class UserController {
@GetMapping("/{id}/learn-stats") @GetMapping("/{id}/learn-stats")
@SneakyThrows @SneakyThrows
public JsonResponse learn(@PathVariable(name = "id") Integer id) { public JsonResponse learn(@PathVariable(name = "id") Integer id) {
User user = userService.findOrFail(id);
// 学习时长统计
// 今天昨天本周本月
// 最近一个月的每天学习时长 // 最近一个月的每天学习时长
String todayStr = DateTime.now().toDateStr();
String startDateStr = DateTime.of(DateTime.now().getTime() - 86400000L * 30).toDateStr();
long startTime = new DateTime(startDateStr).getTime();
long endTime = new DateTime(todayStr).getTime();
return JsonResponse.data(null); List<UserLearnDurationStats> monthRecords =
userLearnDurationStatsService.dateBetween(id, startDateStr, todayStr);
Map<Date, Long> date2duration =
monthRecords.stream()
.collect(
Collectors.toMap(
UserLearnDurationStats::getCreatedDate,
UserLearnDurationStats::getDuration));
@Data
class StatsItem {
private String key;
private Long value;
}
List<StatsItem> data = new ArrayList<>();
while (startTime <= endTime) {
String dateKey = DateTime.of(startTime).toDateStr();
Date tmpDate = new Date(startTime);
Long duration = 0L;
if (date2duration.get(tmpDate) != null) {
duration = date2duration.get(tmpDate);
}
StatsItem tmpItem = new StatsItem();
tmpItem.setKey(dateKey);
tmpItem.setValue(duration);
data.add(tmpItem);
startTime += 86400000;
}
return JsonResponse.data(data);
} }
} }

View File

@ -38,4 +38,6 @@ public interface UserLearnDurationStatsService extends IService<UserLearnDuratio
Long todayUserDuration(Integer userId); Long todayUserDuration(Integer userId);
Long userDuration(Integer userId); Long userDuration(Integer userId);
List<UserLearnDurationStats> dateBetween(Integer userId, String startAt, String endAt);
} }

View File

@ -109,4 +109,10 @@ public class UserLearnDurationStatsServiceImpl
Long totalDuration = getBaseMapper().getUserDuration(userId); Long totalDuration = getBaseMapper().getUserDuration(userId);
return totalDuration == null ? 0L : totalDuration; return totalDuration == null ? 0L : totalDuration;
} }
@Override
public List<UserLearnDurationStats> dateBetween(Integer userId, String startAt, String endAt) {
return list(
query().getWrapper().eq("user_id", userId).between("created_date", startAt, endAt));
}
} }