irh
irh copied to clipboard
在goods服务的RecommendProductServiceImpl的getRealtimeRecommend()方法
在goods服务的RecommendProductServiceImpl的getRealtimeRecommend()方法 public Message<Page<ProductInfo>> getRealtimeRecommend(Integer pageSize, Integer currentPage, Long userId) { //如果是游客登录直接 查询发布时间最新的商品
if(userId == null){
log.info("智能推送{}---->商城首页"," userId == null ");
return productInfoService.getProductBriefInfoByPage(currentPage, pageSize);
}
//获得存储在redis中的实时推荐的商品id的list
String redisKey = RedisUtil.getProductRealtimeRecommendListKey(userId);
Boolean aBoolean = redisTemplate.hasKey(redisKey);
//直接返回redis的的数据
if(aBoolean){
log.info("智能推送{}---->商城首页","redis存储实时推荐商品id的list");
return getInfoFromRedis(pageSize, currentPage, redisKey);
}
//MongoDB的数据,这里找不到数据所以每次推荐都是离线推荐
ProductRealtimeRecommendDto recommendInfo = productRealtimeRecommendRepository.findByUserId(userId);
List<MongoProductInfo> recs = null;
if(recommendInfo != null){
recs = recommendInfo.getRecs();
}
String userBrowseRecordBitmap = RedisUtil.getUserBrowseRecordBitmap(BrowserType.ES_SELL_PRODUCT, userId);
//当实时推荐中没有商品时,转到离线推荐
if(CollectionUtils.isEmpty(recs)) {
log.info("智能推送{}---->商城首页","实时推荐没有商品转离线推荐");
return getOfflineRecommendListByUserId(pageSize, currentPage, userId);
}
//将商品信息存入redis中
List<Long> ids = recs.stream().map(MongoProductInfo::getProductId).collect(Collectors.toList());
ids.stream().forEach(id -> {
if(commands.getbit(userBrowseRecordBitmap.getBytes(), id) == null){
redisTemplate.opsForSet().add(redisKey, id);
}
});
return getInfoFromRedis(pageSize, currentPage, redisKey);
}
Originally posted by @liutao-lx in https://github.com/HMingR/irh/issues/3#issuecomment-799288743
@HMingR 大哥帮我康康是那些添加数据到MongoDB数据库的方式,在您的项目中是怎么个方式
https://gitee.com/peng_fei_Napoleon/irh_intelligent_recommendation 这个是仓库地址,智能推荐模块是用scale写的
我又来了,大哥有没有数据库的测试数据,您给的sql语句中少了权限表的那些数据我看的有点不懂
我又来了,大哥有没有数据库的测试数据,您给的sql语句中少了权限表的那些数据我看的有点不懂 @HMingR 老大哥
权限那一块是通过拦截请求的uri进行判断的,在程序刚启动的时候Gateway会把权限和角色加载到一个map中,然后在gateway拦截请求的uri进行判断。具体的我明天看看,电脑不在身边。而且说实话,权限那一块我写的很low,尤其是过期时间那一块。你先看看吧,不懂了再说哈哈
权限那一块是通过拦截请求的uri进行判断的,在程序刚启动的时候Gateway会把权限和角色加载到一个map中,然后在gateway拦截请求的uri进行判断。具体的我明天看看,电脑不在身边。而且说实话,权限那一块我写的很low,尤其是过期时间那一块。你先看看吧,不懂了再说哈哈
嗯嗯,明天有时间发一下您的数据库数据就好了,因为项目中的sql少了权限表的很多数据有测试数据就好了,因为那个后台去掉测试logintest前端登录不上没有权限,我现在在前后台调用就会因为没有权限调用失败
权限那一块是通过拦截请求的uri进行判断的,在程序刚启动的时候Gateway会把权限和角色加载到一个map中,然后在gateway拦截请求的uri进行判断。具体的我明天看看,电脑不在身边。而且说实话,权限那一块我写的很low,尤其是过期时间那一块。你先看看吧,不懂了再说哈哈
嗯嗯,明天有时间发一下您的数据库数据就好了,因为项目中的sql少了权限表的很多数据有测试数据就好了,因为那个后台去掉测试logintest前端登录不上没有权限,我现在在前后台调用就会因为没有权限调用失败
额,项目里面的数据就是当时测试的时候用的,其他的也没有了,你可以看看AntPathMatcher这个类,匹配请求的url和数据库里面的url的,如果你觉得是权限问题的话,你调试一下AbstractUrlFilterInvocationSecurityMetadataSource这个类和UrlAccessDecosopmManager类看看需要什么权限。是前端的问题还是后端的问题