/
FavoriteServiceImpl.java
131 lines (104 loc) · 4.8 KB
/
FavoriteServiceImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package demo.tcloud.triblewood.qcbm.favorites.service;
import demo.tcloud.triblewood.qcbm.api.FavoriteService;
import demo.tcloud.triblewood.qcbm.common.BookInfoDto;
import demo.tcloud.triblewood.qcbm.common.Response;
import demo.tcloud.triblewood.qcbm.common.ResponseCode;
import demo.tcloud.triblewood.qcbm.favorites.entity.FavoritesInfo;
import demo.tcloud.triblewood.qcbm.favorites.persist.CacheCmpt;
import demo.tcloud.triblewood.qcbm.favorites.persist.FavoritesPersistCmpt;
import demo.tcloud.triblewood.qcbm.favorites.remote.StoreClient;
import org.apache.dubbo.config.annotation.DubboService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.ValueOperations;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@DubboService(version = "${favorites.service.version}")
public class FavoriteServiceImpl implements FavoriteService {
private static final Logger logger = LoggerFactory.getLogger(FavoriteServiceImpl.class);
private static final String FAVORITES_CACHE_KEY_PREFIX = "user.favorites.";
@Resource
CacheCmpt cacheCmpt;
@Resource
private FavoritesPersistCmpt favoritesPersistCmpt;
@Resource
private StoreClient storeClient;
@Override
public Response<String> addUserFavoriteBook(Long userId, Long isbn) {
Response<String> resp = new Response<String>(ResponseCode.SUCCESS);
logger.info("FavoriteService.addUserFavoriteBook(), userID = {}, isbn={}", userId, isbn);
if ((null == userId || 0 == userId) || (null == isbn || 0 == isbn)) {
return resp.setFailue("非法参数!");
}
try {
FavoritesInfo entity = new FavoritesInfo(userId, isbn);
if (favoritesPersistCmpt.favoriteExist(entity)) {
logger.info("book isbn = {} 已被用户 userId = {} 收藏", isbn, userId);
return resp;
}
favoritesPersistCmpt.addUserFavorite(entity);
resp.setMsg("用户 userId = " + userId + " 成功收藏 book isbn = " + isbn);
BookInfoDto dto = storeClient.getBookInfoByIsbn(isbn);
cacheCmpt.cashUserFavoriteBook(userId, dto);
}
catch (Exception e) {
logger.error("failed to add FavoritesInfo", e);
resp.setFailue("服务异常,请稍后重试!");
}
return resp;
}
public Response<String> delUserFavoriteBook(Long userId, Long isbn) {
Response<String> resp = new Response<String>(ResponseCode.SUCCESS);
logger.info("FavoriteService.delUserFavoriteBook(), userID = {}, isbn={}", userId, isbn);
if ((null == userId || 0 == userId) || (null == isbn || 0 == isbn)) {
return resp.setFailue("非法参数!");
}
try {
FavoritesInfo entity = new FavoritesInfo(userId, isbn);
favoritesPersistCmpt.deleteUserFavorite(entity);
resp.setMsg("用户 userId = " + userId + " 成功删除收藏 book isbn = " + isbn);
cacheCmpt.delUserFavoriteFromCache(userId, isbn);
}
catch (Exception e) {
logger.error("failed to delete FavoritesInfo", e);
resp.setFailue("服务异常,请稍后重试!");
}
return resp;
}
public Response<List<BookInfoDto>> queryUserFavorites(Long userId) {
Response<List<BookInfoDto>> resp = new Response<List<BookInfoDto>>(ResponseCode.SUCCESS);
logger.info("FavoriteService.queryUserFavorites(), userID = {}", userId);
if (null == userId || 0 == userId) {
return resp.setFailue("非法参数,userId 不能为空!");
}
try {
List<BookInfoDto> dtoList = cacheCmpt.getUserFavorites(userId);
if (null != dtoList) {
return resp.setData(dtoList);
}
List<Long> isbnList = favoritesPersistCmpt.getUserFavoriteBookIsbn(userId);
if (null == isbnList || isbnList.size() == 0) {
logger.info("用户 userId = {} 无收藏.", userId);
return resp;
}
List<BookInfoDto> bookInfoDtoList = new ArrayList<>();
isbnList.forEach(isbn -> {
BookInfoDto dto = storeClient.getBookInfoByIsbn(isbn);
if (dto != null) {
bookInfoDtoList.add(dto);
}
});
// set in redis
logger.info("缓存用户信息, UserId={})", userId);
cacheCmpt.cashUserFavorites(userId, bookInfoDtoList);
return resp.setData(bookInfoDtoList);
}
catch (Exception e) {
logger.error("failed to delete FavoritesInfo", e);
resp.setFailue("服务异常,请稍后重试!");
}
return resp;
}
}