后台新增学员的最近一个月的学习统计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>
<groupId>cn.hutool</groupId>
<artifactId>hutool-json</artifactId>
<version>5.8.15</version>
<version>5.8.16</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<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>

View File

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

View File

@ -15,6 +15,9 @@
*/
package xyz.playedu.api.controller.backend;
import cn.hutool.core.date.DateTime;
import lombok.Data;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@ -49,6 +52,7 @@ import java.util.stream.Collectors;
/**
* @Author 杭州白书科技有限公司
*
* @create 2023/2/23 09:48
*/
@RestController
@ -56,29 +60,23 @@ import java.util.stream.Collectors;
@RequestMapping("/backend/v1/user")
public class UserController {
@Autowired
private UserService userService;
@Autowired private UserService userService;
@Autowired
private UserDepartmentService userDepartmentService;
@Autowired private UserDepartmentService userDepartmentService;
@Autowired
private DepartmentService departmentService;
@Autowired private DepartmentService departmentService;
@Autowired
private ApplicationContext context;
@Autowired private ApplicationContext context;
@Autowired
private UserCourseHourRecordService userCourseHourRecordService;
@Autowired private UserCourseHourRecordService userCourseHourRecordService;
@Autowired
private UserCourseRecordService userCourseRecordService;
@Autowired private UserCourseRecordService userCourseRecordService;
@Autowired
private CourseHourService courseHourService;
@Autowired private CourseHourService courseHourService;
@Autowired
private CourseService courseService;
@Autowired private CourseService courseService;
@Autowired private UserLearnDurationStatsService userLearnDurationStatsService;
@BackendPermissionMiddleware(slug = BPermissionConstant.USER_INDEX)
@GetMapping("/index")
@ -224,7 +222,7 @@ public class UserController {
String defaultAvatar = BCtx.getConfig().get(CConfig.MEMBER_DEFAULT_AVATAR);
List<String[]> errorLines = new ArrayList<>();
errorLines.add(new String[]{"错误行", "错误信息"}); // 错误表-表头
errorLines.add(new String[] {"错误行", "错误信息"}); // 错误表-表头
// 读取存在的部门
List<Department> departments = departmentService.all();
@ -264,14 +262,14 @@ public class UserController {
i++; // 索引值
if (userItem.getEmail() == null || userItem.getEmail().trim().length() == 0) {
errorLines.add(new String[]{"" + (i + startLine) + "", "未输入邮箱账号"});
errorLines.add(new String[] {"" + (i + startLine) + "", "未输入邮箱账号"});
} else {
// 邮箱重复判断
Integer repeatLine = emailRepeat.get(userItem.getEmail());
if (repeatLine != null) {
errorLines.add(
new String[]{
"" + (i + startLine) + "", "与第" + repeatLine + "行邮箱重复"
new String[] {
"" + (i + startLine) + "", "与第" + repeatLine + "行邮箱重复"
});
} else {
emailRepeat.put(userItem.getEmail(), i + startLine);
@ -281,7 +279,7 @@ public class UserController {
// 部门数据检测
if (userItem.getDeps() == null || userItem.getDeps().trim().length() == 0) {
errorLines.add(new String[]{"" + (i + startLine) + "", "未选择部门"});
errorLines.add(new String[] {"" + (i + startLine) + "", "未选择部门"});
} else {
String[] tmpDepList = userItem.getDeps().trim().split("\\|");
Integer[] tmpDepIds = new Integer[tmpDepList.length];
@ -291,8 +289,8 @@ public class UserController {
// 判断部门id是否存在
if (tmpDepId == null || tmpDepId == 0) {
errorLines.add(
new String[]{
"" + (i + startLine) + "", "部门『" + tmpDepList[j] + "』不存在"
new String[] {
"" + (i + startLine) + "", "部门『" + tmpDepList[j] + "』不存在"
});
continue;
}
@ -304,13 +302,13 @@ public class UserController {
// 姓名为空检测
String tmpName = userItem.getName();
if (tmpName == null || tmpName.trim().length() == 0) {
errorLines.add(new String[]{"" + (i + startLine) + "", "昵称为空"});
errorLines.add(new String[] {"" + (i + startLine) + "", "昵称为空"});
}
// 密码为空检测
String tmpPassword = userItem.getPassword();
if (tmpPassword == null || tmpPassword.trim().length() == 0) {
errorLines.add(new String[]{"" + (i + startLine) + "", "密码为空"});
errorLines.add(new String[] {"" + (i + startLine) + "", "密码为空"});
}
// 待插入数据
@ -338,7 +336,7 @@ public class UserController {
List<String> existsEmails = userService.existsEmailsByEmails(emails);
if (existsEmails.size() > 0) {
for (String tmpEmail : existsEmails) {
errorLines.add(new String[]{"" + emailRepeat.get(tmpEmail) + "", "邮箱已注册"});
errorLines.add(new String[] {"" + emailRepeat.get(tmpEmail) + "", "邮箱已注册"});
}
}
if (errorLines.size() > 1) {
@ -441,12 +439,47 @@ public class UserController {
@GetMapping("/{id}/learn-stats")
@SneakyThrows
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 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);
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));
}
}