Skip to content

Commit 5eecabc

Browse files
committed
feat(user): 添加用户收藏商品功能
- 在 ClientUserController 中新增获取用户收藏商品接口 - 新增 FavoriteVo 类用于封装收藏商品信息 - 在 UserMapper 中添加查询用户收藏商品的方法及 SQL 实现 - 在 UserService 及其实现类中增加获取用户收藏商品的业务逻辑
1 parent 03de3d8 commit 5eecabc

6 files changed

Lines changed: 112 additions & 14 deletions

File tree

common/src/main/java/com/ligg/common/mapper/UserMapper.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package com.ligg.common.mapper;
22

33
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4-
import com.baomidou.mybatisplus.core.metadata.IPage;
54
import com.ligg.common.module.entity.UserEntity;
6-
import com.ligg.common.module.vo.UserInfoVo;
5+
import com.ligg.common.module.vo.FavoriteVo;
76
import jakarta.validation.constraints.NotNull;
87
import org.apache.ibatis.annotations.Mapper;
98
import org.apache.ibatis.annotations.Update;
109

1110
import java.math.BigDecimal;
11+
import java.util.List;
1212

1313
/**
1414
* @Author Ligg
@@ -45,4 +45,9 @@ public interface UserMapper extends BaseMapper<UserEntity> {
4545
*/
4646
@Update("update user set account_balance = account_balance + #{amount} where user_id = #{userId}")
4747
int recharge(BigDecimal amount, String userId);
48+
49+
/**
50+
* 查询用户收藏商品
51+
*/
52+
List<FavoriteVo> selectUserFavorite(String userId);
4853
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.ligg.common.module.vo;
2+
3+
import lombok.Data;
4+
5+
/**
6+
* @author Ligg
7+
* @create_time 2025/11/9 18:41
8+
* @update_time 2025/11/9 18:41
9+
**/
10+
11+
@Data
12+
public class FavoriteVo {
13+
14+
/**
15+
* 商品id
16+
*/
17+
private String productId;
18+
19+
/**
20+
* 名称
21+
*/
22+
private String title;
23+
24+
/**
25+
* 图片路径
26+
*/
27+
private String imagePath;
28+
29+
/**
30+
* 原价
31+
*/
32+
private Double originalPrice;
33+
34+
/**
35+
* 现价
36+
*/
37+
private Double currentPrice;
38+
39+
/**
40+
* 评价数
41+
*/
42+
private Integer reviews;
43+
44+
/**
45+
* 评分
46+
*/
47+
private int rating;
48+
49+
/**
50+
* 库存
51+
*/
52+
private int stock;
53+
54+
/**
55+
* 阅览量
56+
*/
57+
private Integer views;
58+
}

common/src/main/java/com/ligg/common/service/UserService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
import com.baomidou.mybatisplus.extension.service.IService;
44
import com.ligg.common.module.entity.UserEntity;
5+
import com.ligg.common.module.vo.FavoriteVo;
56
import com.ligg.common.module.vo.UserInfoVo;
67
import jakarta.validation.constraints.NotNull;
78
import org.springframework.web.multipart.MultipartFile;
89

910
import java.math.BigDecimal;
11+
import java.util.List;
1012

1113
/**
1214
* @Author Ligg
@@ -61,4 +63,9 @@ public interface UserService extends IService<UserEntity> {
6163
* 临时方案
6264
*/
6365
boolean isProductFavoriteByUserId(String productId, String userId);
66+
67+
/**
68+
* 获取用户收藏商品
69+
*/
70+
List<FavoriteVo> getUserFavorite(String userId);
6471
}

common/src/main/java/com/ligg/common/service/impl/UserServiceImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.ligg.common.module.entity.ProductFavoriteEntity;
1616
import com.ligg.common.module.entity.UserEntity;
1717
import com.ligg.common.mapper.UserMapper;
18+
import com.ligg.common.module.vo.FavoriteVo;
1819
import com.ligg.common.service.FileService;
1920
import com.ligg.common.service.UserService;
2021
import com.ligg.common.service.product.ProductService;
@@ -32,6 +33,7 @@
3233

3334
import java.math.BigDecimal;
3435
import java.time.LocalDateTime;
36+
import java.util.List;
3537
import java.util.Map;
3638
import java.util.UUID;
3739

@@ -226,6 +228,14 @@ public boolean isProductFavoriteByUserId(String productId, String userId) {
226228
.eq(ProductFavoriteEntity::getUserId, userId)) != null;
227229
}
228230

231+
/**
232+
* 获取用户收藏商品
233+
*/
234+
@Override
235+
public List<FavoriteVo> getUserFavorite(String userId) {
236+
return userMapper.selectUserFavorite(userId);
237+
}
238+
229239

230240
private UserEntity getRedisUserInfo(String userId) {
231241
return (UserEntity) redisUtil.get(UserConstant.USER_INFO + ":" + userId);

common/src/main/resources/mapper/UserMapper.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,19 @@
4343
</set>
4444
where email = #{email}
4545
</update>
46+
47+
<!--根据商品id和用户id查询商品收藏信息-->
48+
<select id="selectUserFavorite" resultType="com.ligg.common.module.vo.FavoriteVo">
49+
select p.id as productId,
50+
p.title,
51+
p.image_path,
52+
p.original_price,
53+
p.current_price,
54+
p.rating,
55+
p.stock,
56+
p.views
57+
from product_favorite pf
58+
left join product p on pf.product_id = p.id
59+
where pf.user_id = #{userId}
60+
</select>
4661
</mapper>

web/api-client/src/main/java/com/ligg/apiclient/controller/ClientUserController.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ligg.apiclient.controller;
22

3+
import com.ligg.common.module.vo.FavoriteVo;
34
import com.ligg.common.constants.Constant;
45
import com.ligg.common.constants.UserConstant;
56
import com.ligg.common.enums.BusinessStates;
@@ -31,7 +32,7 @@
3132
import java.util.Objects;
3233

3334
/**
34-
* @Author Ligg
35+
* @author Ligg
3536
* @time 2025/10/10
3637
* @update_time 2025/11/6 14:28
3738
**/
@@ -44,13 +45,10 @@ public class ClientUserController {
4445

4546
private final UserService userService;
4647

47-
private final ProductCommentService commentService;
48-
4948
private final FileService fileService;
5049

51-
/**
52-
* 获取用户信息
53-
*/
50+
private final ProductCommentService commentService;
51+
5452
@Operation(summary = "获取用户信息")
5553
@GetMapping("/info")
5654
public Response<UserInfoVo> getUserInfo() {
@@ -59,6 +57,7 @@ public Response<UserInfoVo> getUserInfo() {
5957
}
6058

6159
@PutMapping
60+
@Operation(summary = "更新用户信息")
6261
public Response<String> updateUserInfo(@Validated UserDto userDto,
6362
MultipartFile avatarFile) {
6463
if (avatarFile != null && !avatarFile.isEmpty() && Objects.requireNonNull(avatarFile.getContentType()).startsWith("image")) {
@@ -75,9 +74,7 @@ public Response<String> updateUserInfo(@Validated UserDto userDto,
7574
: Response.success(BusinessStates.SUCCESS);
7675
}
7776

78-
/**
79-
* 发布商品评价
80-
*/
77+
@Operation(summary = "发布商品评价")
8178
@PostMapping("/comment")
8279
public Response<String> publishComment(@RequestParam(required = false) MultipartFile[] imageFiles,
8380
ProductCommentDto content) {
@@ -104,9 +101,7 @@ public Response<String> publishComment(@RequestParam(required = false) Multipart
104101
}
105102

106103

107-
/**
108-
* 余额充值
109-
*/
104+
@Operation(summary = "余额充值")
110105
@PatchMapping("/recharge")
111106
public Response<String> recharge(@RequestBody PaymentDto payment) {
112107
//金额是否小于0
@@ -129,4 +124,12 @@ public Response<String> productFavorite(@NotNull Long productId, @NotNull boolea
129124
? Response.error(BusinessStates.INTERNAL_SERVER_ERROR)
130125
: Response.success(BusinessStates.SUCCESS);
131126
}
127+
128+
@Operation(summary = "获取收藏商品")
129+
@GetMapping("/favorite")
130+
public Response<List<FavoriteVo>> getUserFavorite() {
131+
Map<String, Object> userInf = ThreadLocalUtil.get();
132+
String userId = (String) userInf.get(UserConstant.USER_ID);
133+
return Response.success(BusinessStates.SUCCESS, userService.getUserFavorite(userId));
134+
}
132135
}

0 commit comments

Comments
 (0)