feat: 最近动态

This commit is contained in:
zlg
2024-07-20 15:44:34 +08:00
parent 58b5430115
commit cf20e5c13f
5 changed files with 309 additions and 61 deletions

View File

@@ -2,22 +2,25 @@ package com.schisandra.share.application.controller;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.google.gson.Gson;
import com.schisandra.share.application.convert.SchisandraShareCircleDTOConverter; import com.schisandra.share.application.convert.SchisandraShareCircleDTOConverter;
import com.schisandra.share.application.dto.SchisandraShareCircleDTO; import com.schisandra.share.application.dto.SchisandraShareCircleDTO;
import com.schisandra.share.common.entity.Result; import com.schisandra.share.common.entity.Result;
import com.schisandra.share.common.redis.RedisUtil;
import com.schisandra.share.domain.bo.SchisandraShareCircleBO; import com.schisandra.share.domain.bo.SchisandraShareCircleBO;
import com.schisandra.share.domain.service.SchisandraShareCircleDomainService; import com.schisandra.share.domain.service.SchisandraShareCircleDomainService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.HashMap; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
/** /**
* 分享圈 controller * 分享圈 controller
@@ -29,7 +32,9 @@ import java.util.List;
@RequestMapping("/share/circle/") @RequestMapping("/share/circle/")
@Slf4j @Slf4j
public class SchisandraShareCircleController { public class SchisandraShareCircleController {
private final String SHARE_USER_RECENT = "share:user:recent:situation";
@Resource
RedisUtil redisUtil;
@Resource @Resource
private SchisandraShareCircleDomainService schisandraShareCircleDomainService; private SchisandraShareCircleDomainService schisandraShareCircleDomainService;
@Resource @Resource
@@ -48,7 +53,16 @@ public class SchisandraShareCircleController {
Preconditions.checkNotNull(schisandraShareCircleDTO.getIcon(), "图标不能为空"); Preconditions.checkNotNull(schisandraShareCircleDTO.getIcon(), "图标不能为空");
Preconditions.checkNotNull(schisandraShareCircleDTO.getDescription(), "描述不能为空"); Preconditions.checkNotNull(schisandraShareCircleDTO.getDescription(), "描述不能为空");
SchisandraShareCircleBO SchisandraShareCircleBO = SchisandraShareCircleDTOConverter.INSTANCE.convertDTOToBO(schisandraShareCircleDTO); SchisandraShareCircleBO SchisandraShareCircleBO = SchisandraShareCircleDTOConverter.INSTANCE.convertDTOToBO(schisandraShareCircleDTO);
return Result.ok(schisandraShareCircleDomainService.add(SchisandraShareCircleBO)); if (schisandraShareCircleDomainService.add(SchisandraShareCircleBO)) {
String value = "您最近创建了一个圈子:" + schisandraShareCircleDTO.getName();
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = dateFormat.format(date);
String key = redisUtil.buildKey(SHARE_USER_RECENT, schisandraShareCircleDTO.getUserId(), formattedDate);
redisUtil.setNx(key, value, 30L, TimeUnit.DAYS);
return Result.ok();
}
return Result.fail();
} catch (Exception e) { } catch (Exception e) {
log.error("SchisandraShareCircleController.register.error:{}", e.getMessage(), e); log.error("SchisandraShareCircleController.register.error:{}", e.getMessage(), e);
return Result.fail("新增分享圈失败"); return Result.fail("新增分享圈失败");
@@ -119,7 +133,17 @@ public class SchisandraShareCircleController {
Preconditions.checkNotNull(schisandraShareCircleDTO.getViews(), "不能为空"); Preconditions.checkNotNull(schisandraShareCircleDTO.getViews(), "不能为空");
SchisandraShareCircleBO schisandraShareCircleBO = SchisandraShareCircleDTOConverter.INSTANCE.convertDTOToBO(schisandraShareCircleDTO); SchisandraShareCircleBO schisandraShareCircleBO = SchisandraShareCircleDTOConverter.INSTANCE.convertDTOToBO(schisandraShareCircleDTO);
return Result.ok(schisandraShareCircleDomainService.delete(schisandraShareCircleBO));
if (schisandraShareCircleDomainService.delete(schisandraShareCircleBO)) {
String value = "您最近删除了一个圈子:" + schisandraShareCircleDTO.getName();
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = dateFormat.format(date);
String key = redisUtil.buildKey(SHARE_USER_RECENT, schisandraShareCircleDTO.getUserId(), formattedDate);
redisUtil.setNx(key, value, 30L, TimeUnit.DAYS);
return Result.ok();
}
return Result.fail();
} catch (Exception e) { } catch (Exception e) {
log.error("SchisandraShareCircleController.delete.error:{}", e.getMessage(), e); log.error("SchisandraShareCircleController.delete.error:{}", e.getMessage(), e);
return Result.fail("删除分享圈信息失败"); return Result.fail("删除分享圈信息失败");

View File

@@ -8,6 +8,7 @@ import com.schisandra.share.application.convert.SchisandraUserLikesCommentDTOCon
import com.schisandra.share.application.dto.SchisandraShareCommentReplyDTO; import com.schisandra.share.application.dto.SchisandraShareCommentReplyDTO;
import com.schisandra.share.application.dto.SchisandraUserLikesCommentDTO; import com.schisandra.share.application.dto.SchisandraUserLikesCommentDTO;
import com.schisandra.share.common.entity.Result; import com.schisandra.share.common.entity.Result;
import com.schisandra.share.common.redis.RedisUtil;
import com.schisandra.share.common.utils.CaffeineUtil; import com.schisandra.share.common.utils.CaffeineUtil;
import com.schisandra.share.domain.bo.SchisandraShareCommentReplyBO; import com.schisandra.share.domain.bo.SchisandraShareCommentReplyBO;
import com.schisandra.share.domain.bo.SchisandraUserLikesCommentBO; import com.schisandra.share.domain.bo.SchisandraUserLikesCommentBO;
@@ -19,8 +20,11 @@ import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
/** /**
* 评论回复表 controller * 评论回复表 controller
@@ -32,20 +36,16 @@ import java.util.List;
@RequestMapping("/share/comment/reply/") @RequestMapping("/share/comment/reply/")
@Slf4j @Slf4j
public class SchisandraShareCommentReplyController { public class SchisandraShareCommentReplyController {
private final String SHARE_USER_RECENT = "share:user:recent:situation";
/**
* 点赞
*
* @param Id
* @return
*/
@Resource @Resource
RocketMQTemplate rocketMQTemplate; RocketMQTemplate rocketMQTemplate;
@Resource @Resource
CaffeineUtil caffeineUtil; CaffeineUtil caffeineUtil;
@Resource @Resource
private SchisandraShareCommentReplyDomainService schisandraShareCommentReplyDomainService; private SchisandraShareCommentReplyDomainService schisandraShareCommentReplyDomainService;
@Resource
RedisUtil redisUtil;
/** /**
* @description: 点赞 * @description: 点赞
* @param: [schisandraUserLikesCommentDTO] * @param: [schisandraUserLikesCommentDTO]
@@ -218,6 +218,12 @@ public class SchisandraShareCommentReplyController {
} }
} }
); );
String value = "您最近发表评论:" + schisandraShareCommentReplyDTO.getContent();
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = dateFormat.format(date);
String key = redisUtil.buildKey(SHARE_USER_RECENT,schisandraShareCommentReplyDTO.getUserId(), formattedDate);
redisUtil.setNx(key, value, 30L, TimeUnit.DAYS);
return Result.ok(); return Result.ok();
} }
return Result.fail(); return Result.fail();

View File

@@ -4,17 +4,16 @@ import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.schisandra.share.application.convert.SchisandraShareDetailDTOConverter; import com.schisandra.share.application.convert.SchisandraShareDetailDTOConverter;
import com.schisandra.share.application.convert.SchisandraUserLikesCommentDTOConverter;
import com.schisandra.share.application.convert.SchisandraUserLikesDetailDTOConverter; import com.schisandra.share.application.convert.SchisandraUserLikesDetailDTOConverter;
import com.schisandra.share.application.dto.SchisandraShareDetailDTO; import com.schisandra.share.application.dto.SchisandraShareDetailDTO;
import com.schisandra.share.application.dto.SchisandraUserLikesCommentDTO;
import com.schisandra.share.application.dto.SchisandraUserLikesDetailDTO; import com.schisandra.share.application.dto.SchisandraUserLikesDetailDTO;
import com.schisandra.share.common.entity.Result; import com.schisandra.share.common.entity.Result;
import com.schisandra.share.common.redis.RedisUtil;
import com.schisandra.share.common.utils.CaffeineUtil; import com.schisandra.share.common.utils.CaffeineUtil;
import com.schisandra.share.domain.bo.SchisandraShareDetailBO; import com.schisandra.share.domain.bo.SchisandraShareDetailBO;
import com.schisandra.share.domain.bo.SchisandraUserLikesCommentBO;
import com.schisandra.share.domain.bo.SchisandraUserLikesDetailBO; import com.schisandra.share.domain.bo.SchisandraUserLikesDetailBO;
import com.schisandra.share.domain.service.SchisandraShareDetailDomainService; import com.schisandra.share.domain.service.SchisandraShareDetailDomainService;
import feign.form.FormData;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendCallback; import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult; import org.apache.rocketmq.client.producer.SendResult;
@@ -23,8 +22,11 @@ import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
/** /**
* 分享详情表 controller * 分享详情表 controller
@@ -37,13 +39,15 @@ import java.util.List;
@Slf4j @Slf4j
public class SchisandraShareDetailController { public class SchisandraShareDetailController {
private final String SHARE_USER_RECENT = "share:user:recent:situation";
@Resource
CaffeineUtil caffeineUtil;
@Resource
RedisUtil redisUtil;
@Resource @Resource
private SchisandraShareDetailDomainService schisandraShareDetailDomainService; private SchisandraShareDetailDomainService schisandraShareDetailDomainService;
@Resource @Resource
private RocketMQTemplate rocketMQTemplate; private RocketMQTemplate rocketMQTemplate;
@Resource
CaffeineUtil caffeineUtil;
/** /**
@@ -82,6 +86,7 @@ public class SchisandraShareDetailController {
public void onSuccess(SendResult sendResult) { public void onSuccess(SendResult sendResult) {
System.out.println(sendResult); System.out.println(sendResult);
} }
@Override @Override
public void onException(Throwable e) { public void onException(Throwable e) {
e.printStackTrace(); e.printStackTrace();
@@ -105,6 +110,7 @@ public class SchisandraShareDetailController {
return Result.fail("获取评论数量失败!!!"); return Result.fail("获取评论数量失败!!!");
} }
} }
/** /**
* 获取我的分享 * 获取我的分享
*/ */
@@ -146,12 +152,19 @@ public class SchisandraShareDetailController {
public void onSuccess(SendResult sendResult) { public void onSuccess(SendResult sendResult) {
System.out.println(sendResult); System.out.println(sendResult);
} }
@Override @Override
public void onException(Throwable e) { public void onException(Throwable e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
); );
String value="您最近创建了一个分享:"+schisandraShareDetailDTO.getTitle();
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = dateFormat.format(date);
String key = redisUtil.buildKey(SHARE_USER_RECENT, schisandraShareDetailDTO.getUserId(),formattedDate);
redisUtil.setNx(key, value, 30L, TimeUnit.DAYS);
return Result.ok(); return Result.ok();
} }
return Result.fail(); return Result.fail();
@@ -177,6 +190,7 @@ public class SchisandraShareDetailController {
public void onSuccess(SendResult sendResult) { public void onSuccess(SendResult sendResult) {
System.out.println(sendResult); System.out.println(sendResult);
} }
@Override @Override
public void onException(Throwable e) { public void onException(Throwable e) {
e.printStackTrace(); e.printStackTrace();
@@ -216,6 +230,7 @@ public class SchisandraShareDetailController {
public void onSuccess(SendResult sendResult) { public void onSuccess(SendResult sendResult) {
System.out.println(sendResult); System.out.println(sendResult);
} }
@Override @Override
public void onException(Throwable e) { public void onException(Throwable e) {
e.printStackTrace(); e.printStackTrace();
@@ -314,12 +329,19 @@ public class SchisandraShareDetailController {
public void onSuccess(SendResult sendResult) { public void onSuccess(SendResult sendResult) {
System.out.println(sendResult); System.out.println(sendResult);
} }
@Override @Override
public void onException(Throwable e) { public void onException(Throwable e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
); );
String value="您最近删除了一个分享:"+schisandraShareDetailDTO.getTitle();
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = dateFormat.format(date);
String key = redisUtil.buildKey(SHARE_USER_RECENT, schisandraShareDetailDTO.getUserId(),formattedDate);
redisUtil.setNx(key, value, 30L, TimeUnit.DAYS);
return Result.ok(); return Result.ok();
} }
return Result.fail(); return Result.fail();

View File

@@ -0,0 +1,46 @@
package com.schisandra.share.common.redis;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* Redis的config处理
*
* @author: schisandra
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(redisSerializer);
redisTemplate.setHashKeySerializer(redisSerializer);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer());
return redisTemplate;
}
private Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() {
Jackson2JsonRedisSerializer<Object> jsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
jsonRedisSerializer.setObjectMapper(objectMapper);
return jsonRedisSerializer;
}
}

View File

@@ -0,0 +1,150 @@
package com.schisandra.share.common.redis;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* RedisUtil工具类
*
* @author: schisandra
* @date: 2024/2/19
*/
@Component
@Slf4j
public class RedisUtil {
@Resource
private RedisTemplate redisTemplate;
private static final String CACHE_KEY_SEPARATOR = ":";
public List<Object> getDataFromDirectory(String directory) {
Set<String>keys=redisTemplate.keys(directory+":*");
List<Object> keysList=new ArrayList<>();
keys.forEach(key->{
HashMap<String,String> map=new HashMap<>();
String value= (String) redisTemplate.opsForValue().get(key);
String keyName=key.substring(key.lastIndexOf(":")+1);
map.put(keyName,value);
keysList.add(map);
});
return keysList;
}
public List<HashMap<Object,Object>> getDataFromDir(String directory) {
Set<String>keys=redisTemplate.keys(directory);
List<HashMap<Object,Object>> keysList=new ArrayList<>();
keys.forEach(key->{
HashMap<Object,Object> map=new HashMap<>();
HashMap<Object,Object> value= (HashMap<Object, Object>) redisTemplate.opsForValue().get(key);
map.put(key,value);
keysList.add(map);
});
return keysList;
}
/**
* 构建缓存key
*/
public String buildKey(String... strObjs) {
return Stream.of(strObjs).collect(Collectors.joining(CACHE_KEY_SEPARATOR));
}
/**
* 是否存在key
*/
public boolean exist(String key) {
return redisTemplate.hasKey(key);
}
/**
* 删除key
*/
public boolean del(String key) {
return redisTemplate.delete(key);
}
/**
* set(不带过期)
*/
public void set(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
public void setJson(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
public HashMap<String, String> getJson(String key) {
return (HashMap<String, String>) redisTemplate.opsForValue().get(key);
}
/**
* set(带过期)
*/
public boolean setNx(String key, String value, Long time, TimeUnit timeUnit) {
return redisTemplate.opsForValue().setIfAbsent(key, value, time, timeUnit);
}
/**
* 获取string类型缓存
*/
public String get(String key) {
return (String) redisTemplate.opsForValue().get(key);
}
public Boolean zAdd(String key, String value, Long score) {
return redisTemplate.opsForZSet().add(key, value, Double.valueOf(String.valueOf(score)));
}
public Long countZset(String key) {
return redisTemplate.opsForZSet().size(key);
}
public Set<String> rangeZset(String key, long start, long end) {
return redisTemplate.opsForZSet().range(key, start, end);
}
public Long removeZset(String key, Object value) {
return redisTemplate.opsForZSet().remove(key, value);
}
public void removeZsetList(String key, Set<String> value) {
value.stream().forEach((val) -> redisTemplate.opsForZSet().remove(key, val));
}
public Double score(String key, Object value) {
return redisTemplate.opsForZSet().score(key, value);
}
public Set<String> rangeByScore(String key, long start, long end) {
return redisTemplate.opsForZSet().rangeByScore(key, Double.valueOf(String.valueOf(start)), Double.valueOf(String.valueOf(end)));
}
public Object addScore(String key, Object obj, double score) {
return redisTemplate.opsForZSet().incrementScore(key, obj, score);
}
public Object rank(String key, Object obj) {
return redisTemplate.opsForZSet().rank(key, obj);
}
public void setNx(String key, HashMap<Object, Object> map, Long time, TimeUnit timeUnit) {
redisTemplate.opsForValue().set(key, map, time, timeUnit);
}
}