web-文件接口

This commit is contained in:
2025-10-16 10:45:44 +08:00
parent 6858899c4c
commit 40ef609ea3
191 changed files with 2379 additions and 1593 deletions

View File

@@ -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>

View File

@@ -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
*/

View File

@@ -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
*/

View File

@@ -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
*/

View File

@@ -10,7 +10,7 @@ import org.xyzh.usercenter.service.UCUserPointsService;
/**
* @description 用户积分控制器
* @filename UserPointsController.java
* @author system
* @author yslg
* @copyright xyzh
* @since 2025-10-15
*/

View File

@@ -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;
}
}
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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
*/

View File

@@ -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
*/

View File

@@ -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
*/

View File

@@ -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
*/

View File

@@ -14,7 +14,7 @@ import org.xyzh.usercenter.service.UCUserAchievementService;
/**
* @description 用户成就服务实现类
* @filename UCUserAchievementServiceImpl.java
* @author system
* @author yslg
* @copyright xyzh
* @since 2025-10-15
*/

View File

@@ -12,7 +12,7 @@ import org.xyzh.usercenter.service.UCUserBrowseRecordService;
/**
* @description 用户浏览记录服务实现类
* @filename UCUserBrowseRecordServiceImpl.java
* @author system
* @author yslg
* @copyright xyzh
* @since 2025-10-15
*/

View File

@@ -12,7 +12,7 @@ import org.xyzh.usercenter.service.UCUserCollectionService;
/**
* @description 用户收藏服务实现类
* @filename UCUserCollectionServiceImpl.java
* @author system
* @author yslg
* @copyright xyzh
* @since 2025-10-15
*/

View File

@@ -14,7 +14,7 @@ import org.xyzh.usercenter.service.UCUserPointsService;
/**
* @description 用户积分服务实现类
* @filename UCUserPointsServiceImpl.java
* @author system
* @author yslg
* @copyright xyzh
* @since 2025-10-15
*/