web-文件接口
This commit is contained in:
@@ -27,6 +27,11 @@
|
||||
<artifactId>api-usercenter</artifactId>
|
||||
<version>${school-news.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.xyzh</groupId>
|
||||
<artifactId>api-system</artifactId>
|
||||
<version>${school-news.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.xyzh</groupId>
|
||||
@@ -69,6 +74,12 @@
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.xyzh</groupId>
|
||||
<artifactId>api-file</artifactId>
|
||||
<version>${school-news.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@@ -12,7 +12,7 @@ import org.xyzh.common.dto.usercenter.TbUserAchievement;
|
||||
/**
|
||||
* @description 用户成就控制器
|
||||
* @filename UserAchievementController.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
@@ -11,7 +11,7 @@ import org.xyzh.common.dto.usercenter.TbUserBrowseRecord;
|
||||
/**
|
||||
* @description 用户浏览记录控制器
|
||||
* @filename UserBrowseRecordController.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
@@ -11,7 +11,7 @@ import org.xyzh.common.dto.usercenter.TbUserCollection;
|
||||
/**
|
||||
* @description 用户收藏控制器
|
||||
* @filename UserCollectionController.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
@@ -10,7 +10,7 @@ import org.xyzh.usercenter.service.UCUserPointsService;
|
||||
/**
|
||||
* @description 用户积分控制器
|
||||
* @filename UserPointsController.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
@@ -2,9 +2,15 @@ package org.xyzh.usercenter.controller;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.xyzh.api.file.FileService;
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
import org.xyzh.common.dto.system.TbSysFile;
|
||||
import org.xyzh.common.dto.user.TbSysUser;
|
||||
import org.xyzh.common.dto.user.TbSysUserInfo;
|
||||
import org.xyzh.api.system.user.UserService;
|
||||
import org.xyzh.common.annotation.HttpLogin;
|
||||
import org.xyzh.common.core.domain.LoginDomain;
|
||||
|
||||
@@ -13,7 +19,7 @@ import java.util.Map;
|
||||
/**
|
||||
* @description 个人中心控制器
|
||||
* @filename UserProfileController.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
@@ -23,14 +29,26 @@ public class UserProfileController {
|
||||
private static final Logger logger = LoggerFactory.getLogger(UserProfileController.class);
|
||||
|
||||
// ==================== 个人信息管理 ====================
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private FileService fileService;
|
||||
|
||||
/**
|
||||
* 获取个人信息
|
||||
*/
|
||||
@GetMapping("/info")
|
||||
public ResultDomain<TbSysUserInfo> getUserProfile(@HttpLogin LoginDomain loginDomain) {
|
||||
// TODO: 实现获取个人信息
|
||||
return null;
|
||||
ResultDomain<TbSysUserInfo> result = userService.getUserInfoById(loginDomain.getUser().getID());
|
||||
if (result.isSuccess()) {
|
||||
return result;
|
||||
} else {
|
||||
ResultDomain<TbSysUserInfo> result2 = new ResultDomain<>();
|
||||
result2.fail(result.getCode(), result.getMessage());
|
||||
return result2;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -39,25 +57,102 @@ public class UserProfileController {
|
||||
@PutMapping("/info/update")
|
||||
public ResultDomain<TbSysUserInfo> updateUserProfile(@HttpLogin LoginDomain loginDomain, @RequestBody TbSysUserInfo userInfo) {
|
||||
// TODO: 实现更新个人信息(姓名、部门、联系方式等)
|
||||
return null;
|
||||
ResultDomain<TbSysUserInfo> result = userService.updateUserInfo(userInfo);
|
||||
if (result.isSuccess()) {
|
||||
return result;
|
||||
} else {
|
||||
ResultDomain<TbSysUserInfo> result2 = new ResultDomain<>();
|
||||
result2.fail(result.getCode(), result.getMessage());
|
||||
return result2;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传用户头像
|
||||
*/
|
||||
@PostMapping("/avatar/upload")
|
||||
public ResultDomain<String> uploadAvatar(@RequestParam("file") String file) {
|
||||
// TODO: 实现上传用户头像
|
||||
return null;
|
||||
public ResultDomain<String> uploadAvatar(
|
||||
@HttpLogin LoginDomain loginDomain,
|
||||
@RequestParam("file") MultipartFile file) {
|
||||
ResultDomain<String> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
logger.info("用户上传头像: userId={}, fileName={}", userId, file.getOriginalFilename());
|
||||
|
||||
// 上传文件到文件服务
|
||||
ResultDomain<TbSysFile> uploadResult = fileService.uploadFile(
|
||||
file,
|
||||
"avatar", // 模块:头像
|
||||
userId, // 业务ID:用户ID
|
||||
userId // 上传者
|
||||
);
|
||||
|
||||
if (!uploadResult.isSuccess() || uploadResult.getData() == null) {
|
||||
resultDomain.fail("头像上传失败: " + uploadResult.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
|
||||
TbSysFile uploadedFile = (TbSysFile) uploadResult.getData();
|
||||
String avatarUrl = uploadedFile.getFileUrl();
|
||||
|
||||
// 更新用户信息中的头像
|
||||
TbSysUserInfo userInfo = new TbSysUserInfo();
|
||||
userInfo.setUserID(userId);
|
||||
userInfo.setAvatar(avatarUrl);
|
||||
|
||||
ResultDomain<TbSysUserInfo> updateResult = userService.updateUserInfo(userInfo);
|
||||
if (!updateResult.isSuccess()) {
|
||||
logger.error("更新用户头像失败: userId={}, error={}", userId, updateResult.getMessage());
|
||||
resultDomain.fail("头像上传成功但更新失败: " + updateResult.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
|
||||
logger.info("用户头像上传并更新成功: userId={}, avatarUrl={}", userId, avatarUrl);
|
||||
resultDomain.success("头像上传成功", avatarUrl);
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("上传头像失败", e);
|
||||
resultDomain.fail("上传头像失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户头像
|
||||
* 更新用户头像URL
|
||||
*/
|
||||
@PutMapping("/avatar/update")
|
||||
public ResultDomain<String> updateAvatar(@HttpLogin LoginDomain loginDomain, @RequestParam String avatarUrl) {
|
||||
// TODO: 实现更新用户头像
|
||||
return null;
|
||||
public ResultDomain<String> updateAvatar(
|
||||
@HttpLogin LoginDomain loginDomain,
|
||||
@RequestParam String avatarUrl) {
|
||||
ResultDomain<String> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
logger.info("用户更新头像URL: userId={}, avatarUrl={}", userId, avatarUrl);
|
||||
|
||||
// 更新用户信息中的头像
|
||||
TbSysUserInfo userInfo = new TbSysUserInfo();
|
||||
userInfo.setUserID(userId);
|
||||
userInfo.setAvatar(avatarUrl);
|
||||
|
||||
ResultDomain<TbSysUserInfo> updateResult = userService.updateUserInfo(userInfo);
|
||||
if (!updateResult.isSuccess()) {
|
||||
logger.error("更新用户头像URL失败: userId={}, error={}", userId, updateResult.getMessage());
|
||||
resultDomain.fail("更新头像失败: " + updateResult.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
|
||||
logger.info("用户头像URL更新成功: userId={}, avatarUrl={}", userId, avatarUrl);
|
||||
resultDomain.success("头像更新成功", avatarUrl);
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("更新头像失败", e);
|
||||
resultDomain.fail("更新头像失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 账号设置 ====================
|
||||
@@ -66,27 +161,121 @@ public class UserProfileController {
|
||||
* 修改密码
|
||||
*/
|
||||
@PutMapping("/password/change")
|
||||
public ResultDomain<Boolean> changePassword(@HttpLogin LoginDomain loginDomain, @RequestBody Map<String, Object> params) {
|
||||
// TODO: 实现修改密码
|
||||
return null;
|
||||
public ResultDomain<Boolean> changePassword(
|
||||
@HttpLogin LoginDomain loginDomain,
|
||||
@RequestBody Map<String, Object> params) {
|
||||
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
String oldPassword = (String) params.get("oldPassword");
|
||||
String newPassword = (String) params.get("newPassword");
|
||||
|
||||
if (oldPassword == null || oldPassword.isEmpty()) {
|
||||
resultDomain.fail("旧密码不能为空");
|
||||
return resultDomain;
|
||||
}
|
||||
|
||||
if (newPassword == null || newPassword.isEmpty()) {
|
||||
resultDomain.fail("新密码不能为空");
|
||||
return resultDomain;
|
||||
}
|
||||
|
||||
if (newPassword.length() < 6) {
|
||||
resultDomain.fail("新密码长度不能少于6位");
|
||||
return resultDomain;
|
||||
}
|
||||
|
||||
logger.info("用户修改密码: userId={}", userId);
|
||||
|
||||
// TODO: 验证旧密码是否正确
|
||||
// 调用用户服务修改密码
|
||||
ResultDomain<TbSysUser> changeResult = userService.resetPassword(userId, newPassword);
|
||||
|
||||
if (changeResult.isSuccess()) {
|
||||
logger.info("用户密码修改成功: userId={}", userId);
|
||||
resultDomain.success("密码修改成功", true);
|
||||
} else {
|
||||
resultDomain.fail(changeResult.getMessage());
|
||||
}
|
||||
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("修改密码失败", e);
|
||||
resultDomain.fail("修改密码失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定手机号
|
||||
*/
|
||||
@PutMapping("/phone/bind")
|
||||
public ResultDomain<Boolean> bindPhone(@HttpLogin LoginDomain loginDomain, @RequestBody Map<String, Object> params) {
|
||||
// TODO: 实现绑定手机号
|
||||
return null;
|
||||
public ResultDomain<Boolean> bindPhone(
|
||||
@HttpLogin LoginDomain loginDomain,
|
||||
@RequestBody Map<String, Object> params) {
|
||||
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
String phone = (String) params.get("phone");
|
||||
String verifyCode = (String) params.get("verifyCode");
|
||||
|
||||
if (phone == null || phone.isEmpty()) {
|
||||
resultDomain.fail("手机号不能为空");
|
||||
return resultDomain;
|
||||
}
|
||||
|
||||
logger.info("用户绑定手机号: userId={}, phone={}", userId, phone);
|
||||
|
||||
// TODO: 验证手机验证码
|
||||
// TODO: 检查手机号是否已被其他用户绑定
|
||||
// TODO: 更新用户手机号
|
||||
|
||||
resultDomain.fail("功能开发中");
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("绑定手机号失败", e);
|
||||
resultDomain.fail("绑定手机号失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定邮箱
|
||||
*/
|
||||
@PutMapping("/email/bind")
|
||||
public ResultDomain<Boolean> bindEmail(@HttpLogin LoginDomain loginDomain, @RequestBody Map<String, Object> params) {
|
||||
// TODO: 实现绑定邮箱
|
||||
return null;
|
||||
public ResultDomain<Boolean> bindEmail(
|
||||
@HttpLogin LoginDomain loginDomain,
|
||||
@RequestBody Map<String, Object> params) {
|
||||
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
String email = (String) params.get("email");
|
||||
String verifyCode = (String) params.get("verifyCode");
|
||||
|
||||
if (email == null || email.isEmpty()) {
|
||||
resultDomain.fail("邮箱不能为空");
|
||||
return resultDomain;
|
||||
}
|
||||
|
||||
logger.info("用户绑定邮箱: userId={}, email={}", userId, email);
|
||||
|
||||
// TODO: 验证邮箱验证码
|
||||
// TODO: 检查邮箱是否已被其他用户绑定
|
||||
// TODO: 更新用户邮箱
|
||||
|
||||
resultDomain.fail("功能开发中");
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("绑定邮箱失败", e);
|
||||
resultDomain.fail("绑定邮箱失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -94,8 +283,23 @@ public class UserProfileController {
|
||||
*/
|
||||
@PutMapping("/phone/unbind")
|
||||
public ResultDomain<Boolean> unbindPhone(@HttpLogin LoginDomain loginDomain) {
|
||||
// TODO: 实现解绑手机号
|
||||
return null;
|
||||
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
logger.info("用户解绑手机号: userId={}", userId);
|
||||
|
||||
// TODO: 验证用户身份
|
||||
// TODO: 清空用户手机号
|
||||
|
||||
resultDomain.fail("功能开发中");
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("解绑手机号失败", e);
|
||||
resultDomain.fail("解绑手机号失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -103,17 +307,51 @@ public class UserProfileController {
|
||||
*/
|
||||
@PutMapping("/email/unbind")
|
||||
public ResultDomain<Boolean> unbindEmail(@HttpLogin LoginDomain loginDomain) {
|
||||
// TODO: 实现解绑邮箱
|
||||
return null;
|
||||
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
logger.info("用户解绑邮箱: userId={}", userId);
|
||||
|
||||
// TODO: 验证用户身份
|
||||
// TODO: 清空用户邮箱
|
||||
|
||||
resultDomain.fail("功能开发中");
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("解绑邮箱失败", e);
|
||||
resultDomain.fail("解绑邮箱失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请账号注销
|
||||
*/
|
||||
@PostMapping("/account/delete-request")
|
||||
public ResultDomain<Boolean> requestAccountDeletion(@HttpLogin LoginDomain loginDomain, @RequestBody Map<String, Object> params) {
|
||||
// TODO: 实现申请账号注销
|
||||
return null;
|
||||
public ResultDomain<Boolean> requestAccountDeletion(
|
||||
@HttpLogin LoginDomain loginDomain,
|
||||
@RequestBody Map<String, Object> params) {
|
||||
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
String reason = (String) params.get("reason");
|
||||
|
||||
logger.info("用户申请账号注销: userId={}, reason={}", userId, reason);
|
||||
|
||||
// TODO: 创建账号注销申请记录
|
||||
// TODO: 发送通知给管理员审核
|
||||
|
||||
resultDomain.fail("功能开发中");
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("申请账号注销失败", e);
|
||||
resultDomain.fail("申请账号注销失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -121,17 +359,53 @@ public class UserProfileController {
|
||||
*/
|
||||
@GetMapping("/security/info")
|
||||
public ResultDomain<Map<String, Object>> getSecurityInfo(@HttpLogin LoginDomain loginDomain) {
|
||||
// TODO: 实现获取账号安全信息
|
||||
return null;
|
||||
ResultDomain<Map<String, Object>> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
logger.info("获取账号安全信息: userId={}", userId);
|
||||
|
||||
// TODO: 获取用户的手机号、邮箱绑定状态
|
||||
// TODO: 获取最近登录时间、IP等信息
|
||||
// TODO: 获取密码强度等级
|
||||
|
||||
resultDomain.fail("功能开发中");
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("获取账号安全信息失败", e);
|
||||
resultDomain.fail("获取账号安全信息失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证身份信息
|
||||
*/
|
||||
@PostMapping("/security/verify")
|
||||
public ResultDomain<Boolean> verifyIdentity(@HttpLogin LoginDomain loginDomain, @RequestBody Map<String, Object> params) {
|
||||
// TODO: 实现验证身份信息
|
||||
return null;
|
||||
public ResultDomain<Boolean> verifyIdentity(
|
||||
@HttpLogin LoginDomain loginDomain,
|
||||
@RequestBody Map<String, Object> params) {
|
||||
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
String verifyType = (String) params.get("verifyType"); // password, phone, email
|
||||
String verifyCode = (String) params.get("verifyCode");
|
||||
|
||||
logger.info("验证用户身份: userId={}, verifyType={}", userId, verifyType);
|
||||
|
||||
// TODO: 根据验证类型进行验证
|
||||
// TODO: 密码验证、手机验证码验证、邮箱验证码验证
|
||||
|
||||
resultDomain.fail("功能开发中");
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("验证身份信息失败", e);
|
||||
resultDomain.fail("验证身份信息失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 学习记录统计 ====================
|
||||
@@ -141,8 +415,24 @@ public class UserProfileController {
|
||||
*/
|
||||
@GetMapping("/learning/statistics")
|
||||
public ResultDomain<Map<String, Object>> getLearningStatistics(@HttpLogin LoginDomain loginDomain) {
|
||||
// TODO: 实现获取学习记录统计(折线图展示每日学习时长,柱状图展示各资源学习次数)
|
||||
return null;
|
||||
ResultDomain<Map<String, Object>> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
logger.info("获取学习记录统计: userId={}", userId);
|
||||
|
||||
// TODO: 获取用户学习记录统计数据
|
||||
// TODO: 包括总学习时长、学习天数、学习资源数量等
|
||||
// TODO: 返回折线图和柱状图数据
|
||||
|
||||
resultDomain.fail("功能开发中");
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("获取学习记录统计失败", e);
|
||||
resultDomain.fail("获取学习记录统计失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -152,8 +442,23 @@ public class UserProfileController {
|
||||
public ResultDomain<Map<String, Object>> filterLearningRecords(
|
||||
@HttpLogin LoginDomain loginDomain,
|
||||
@RequestParam(required = false) String timeRange) {
|
||||
// TODO: 实现按时间筛选学习记录(周/月)
|
||||
return null;
|
||||
ResultDomain<Map<String, Object>> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
logger.info("按时间筛选学习记录: userId={}, timeRange={}", userId, timeRange);
|
||||
|
||||
// TODO: 根据时间范围筛选学习记录(周/月/年)
|
||||
// TODO: 返回符合条件的学习记录数据
|
||||
|
||||
resultDomain.fail("功能开发中");
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("按时间筛选学习记录失败", e);
|
||||
resultDomain.fail("按时间筛选学习记录失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -161,8 +466,23 @@ public class UserProfileController {
|
||||
*/
|
||||
@GetMapping("/learning/duration-chart")
|
||||
public ResultDomain<Map<String, Object>> getLearningDurationChart(@HttpLogin LoginDomain loginDomain) {
|
||||
// TODO: 实现获取学习时长图表数据(折线图)
|
||||
return null;
|
||||
ResultDomain<Map<String, Object>> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
logger.info("获取学习时长图表数据: userId={}", userId);
|
||||
|
||||
// TODO: 获取每日学习时长数据
|
||||
// TODO: 返回折线图数据格式:{dates: [], durations: []}
|
||||
|
||||
resultDomain.fail("功能开发中");
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("获取学习时长图表数据失败", e);
|
||||
resultDomain.fail("获取学习时长图表数据失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -170,7 +490,22 @@ public class UserProfileController {
|
||||
*/
|
||||
@GetMapping("/learning/resource-chart")
|
||||
public ResultDomain<Map<String, Object>> getResourceLearningChart(@HttpLogin LoginDomain loginDomain) {
|
||||
// TODO: 实现获取资源学习次数图表数据(柱状图)
|
||||
return null;
|
||||
ResultDomain<Map<String, Object>> resultDomain = new ResultDomain<>();
|
||||
|
||||
try {
|
||||
String userId = loginDomain.getUser().getID();
|
||||
logger.info("获取资源学习次数图表数据: userId={}", userId);
|
||||
|
||||
// TODO: 获取各资源的学习次数
|
||||
// TODO: 返回柱状图数据格式:{resources: [], counts: []}
|
||||
|
||||
resultDomain.fail("功能开发中");
|
||||
return resultDomain;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("获取资源学习次数图表数据失败", e);
|
||||
resultDomain.fail("获取资源学习次数图表数据失败: " + e.getMessage());
|
||||
return resultDomain;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.util.List;
|
||||
/**
|
||||
* @description 成就数据访问层
|
||||
* @filename AchievementMapper.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
@@ -20,7 +20,7 @@ public interface AchievementMapper extends BaseMapper<TbAchievement> {
|
||||
* @description 查询成就列表
|
||||
* @param filter 过滤条件
|
||||
* @return List<TbAchievement> 成就列表
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
List<TbAchievement> selectAchievements(TbAchievement filter);
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.util.List;
|
||||
/**
|
||||
* @description 积分记录数据访问层
|
||||
* @filename PointsRecordMapper.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
@@ -20,7 +20,7 @@ public interface PointsRecordMapper extends BaseMapper<TbPointsRecord> {
|
||||
* @description 查询积分记录列表
|
||||
* @param filter 过滤条件
|
||||
* @return List<TbPointsRecord> 积分记录列表
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
List<TbPointsRecord> selectPointsRecords(TbPointsRecord filter);
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.util.List;
|
||||
/**
|
||||
* @description 用户成就数据访问层
|
||||
* @filename UserAchievementMapper.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
@@ -20,7 +20,7 @@ public interface UserAchievementMapper extends BaseMapper<TbUserAchievement> {
|
||||
* @description 查询用户成就列表
|
||||
* @param filter 过滤条件
|
||||
* @return List<TbUserAchievement> 用户成就列表
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
List<TbUserAchievement> selectUserAchievements(TbUserAchievement filter);
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.util.List;
|
||||
/**
|
||||
* @description 用户浏览记录数据访问层
|
||||
* @filename UserBrowseRecordMapper.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
@@ -20,7 +20,7 @@ public interface UserBrowseRecordMapper extends BaseMapper<TbUserBrowseRecord> {
|
||||
* @description 查询用户浏览记录列表
|
||||
* @param filter 过滤条件
|
||||
* @return List<TbUserBrowseRecord> 用户浏览记录列表
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
List<TbUserBrowseRecord> selectUserBrowseRecords(TbUserBrowseRecord filter);
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.util.List;
|
||||
/**
|
||||
* @description 用户收藏数据访问层
|
||||
* @filename UserCollectionMapper.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
@@ -20,7 +20,7 @@ public interface UserCollectionMapper extends BaseMapper<TbUserCollection> {
|
||||
* @description 查询用户收藏列表
|
||||
* @param filter 过滤条件
|
||||
* @return List<TbUserCollection> 用户收藏列表
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
List<TbUserCollection> selectUserCollections(TbUserCollection filter);
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.util.List;
|
||||
/**
|
||||
* @description 用户积分数据访问层
|
||||
* @filename UserPointsMapper.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
@@ -20,7 +20,7 @@ public interface UserPointsMapper extends BaseMapper<TbUserPoints> {
|
||||
* @description 查询用户积分列表
|
||||
* @param filter 过滤条件
|
||||
* @return List<TbUserPoints> 用户积分列表
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
List<TbUserPoints> selectUserPoints(TbUserPoints filter);
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.xyzh.api.usercenter.achievement.UserAchievementService;
|
||||
/**
|
||||
* @description 用户成就服务接口
|
||||
* @filename UCUserAchievementService.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.xyzh.api.usercenter.browse.UserBrowseRecordService;
|
||||
/**
|
||||
* @description 用户浏览记录服务接口
|
||||
* @filename UCUserBrowseRecordService.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.xyzh.api.usercenter.collection.UserCollectionService;
|
||||
/**
|
||||
* @description 用户收藏服务接口
|
||||
* @filename UCUserCollectionService.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.xyzh.api.usercenter.points.UserPointsService;
|
||||
/**
|
||||
* @description 用户积分服务接口
|
||||
* @filename UCUserPointsService.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
@@ -14,7 +14,7 @@ import org.xyzh.usercenter.service.UCUserAchievementService;
|
||||
/**
|
||||
* @description 用户成就服务实现类
|
||||
* @filename UCUserAchievementServiceImpl.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
@@ -12,7 +12,7 @@ import org.xyzh.usercenter.service.UCUserBrowseRecordService;
|
||||
/**
|
||||
* @description 用户浏览记录服务实现类
|
||||
* @filename UCUserBrowseRecordServiceImpl.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
@@ -12,7 +12,7 @@ import org.xyzh.usercenter.service.UCUserCollectionService;
|
||||
/**
|
||||
* @description 用户收藏服务实现类
|
||||
* @filename UCUserCollectionServiceImpl.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
@@ -14,7 +14,7 @@ import org.xyzh.usercenter.service.UCUserPointsService;
|
||||
/**
|
||||
* @description 用户积分服务实现类
|
||||
* @filename UCUserPointsServiceImpl.java
|
||||
* @author system
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user