提交 dcde35a3 作者: han

增加聊天新消息短信提醒

上级 f00a49e0
流水线 #8172 已通过 于阶段
in 2 分 22 秒
......@@ -112,7 +112,10 @@
<artifactId>hutool-all</artifactId>
<version>5.3.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
<build>
......
package com.mmc.iuav.user.config;
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.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* Redis的配置类
* 修改redis序列化对象时 key-value的序列化方式
*
* @author han
* @date 2023/08/09
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// 关联redis工厂
redisTemplate.setConnectionFactory(factory);
// 设置key的序列化方式
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setHashValueSerializer(stringRedisSerializer);
return redisTemplate;
}
}
......@@ -157,7 +157,7 @@ public class UserAccountDO implements Serializable {
.inviteCount(this.inviteCount).userImg(this.userImg).build();
}
public UserDO buildUserDO() {
return UserDO.builder().userAccountId(this.id).nickName(this.nickName).userName(this.userName).userImg(this.userImg).build();
return UserDO.builder().userAccountId(this.id).nickName(this.nickName).userName(this.userName).userImg(this.userImg).phoneNum(this.phoneNum).build();
}
}
......@@ -36,4 +36,6 @@ public class UserDO implements Serializable {
private String userImg;
@ApiModelProperty(value = "未读的消息个数")
private Integer unreadCount;
@ApiModelProperty(value = "手机号")
private String phoneNum;
}
......@@ -10,6 +10,7 @@ import com.mmc.iuav.user.model.qo.MessageUserQO;
import com.mmc.iuav.user.model.vo.SystemMessageVO;
import com.mmc.iuav.user.model.vo.UserMessageVO;
import com.mmc.iuav.user.service.MessageService;
import com.mmc.iuav.user.util.ScheduledTaskUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -27,6 +28,9 @@ public class MessageServiceImpl implements MessageService {
@Autowired
private UserServiceDao userServiceDao;
@Autowired
private ScheduledTaskUtil scheduledTaskUtil;
@Override
public ResultBody insertSystemMessage(SystemMessageVO messageVO) {
SystemMessageDO systemMessageDO = new SystemMessageDO(messageVO);
......@@ -124,6 +128,9 @@ public class MessageServiceImpl implements MessageService {
}
userMessageDO.setSenderUserId(senderUserId);
if(messageDao.insertUserMessage(userMessageDO) != 0){
UserAccountDO userAccount = userServiceDao.getUserAccountById(userMessageDO.getReceiverUserId());
UserDO userDO = userAccount.buildUserDO();
scheduledTaskUtil.create(userDO);
if(messageDao.isUserMessageLog(userMessageDO.getReceiverUserId(), userMessageDO.getSenderUserId()) == null){
UserMessageLogDO userMessageLogDO = new UserMessageLogDO();
userMessageLogDO.setSenderUserId(userMessageDO.getSenderUserId());
......@@ -147,6 +154,7 @@ public class MessageServiceImpl implements MessageService {
@Override
public PageResult selectUserMessage(MessageUserQO messageQO,Integer senderUserId) {
scheduledTaskUtil.destroy(messageQO.getReceiverUserId());
int count = messageDao.countUserMessage(messageQO.getReceiverUserId(),senderUserId);
if (count == 0) {
return PageResult.buildPage(messageQO.getPageNo(), messageQO.getPageSize(), count);
......
package com.mmc.iuav.user.util;
import com.mmc.iuav.user.entity.UserDO;
import com.mmc.iuav.user.service.WxService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.TimerTask;
@Component
public class MyTask extends TimerTask implements Serializable {
private UserDO userDO;
// private WxService wxService;
public void setUserDO(UserDO userDO) {
this.userDO = userDO;
}
// public void setWxService(WxService wxService) {
// this.wxService = wxService;
// }
private static final long serialVersionUID = 1L;
@Override
public void run() {
SmsUtil.sendNewMessage(userDO.getPhoneNum());
System.out.println("定时任务执行完毕!");
}
}
package com.mmc.iuav.user.util;
import com.google.gson.Gson;
import com.mmc.iuav.user.entity.UserDO;
import com.mmc.iuav.user.service.WxService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.Instant;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@Component
public class ScheduledTaskUtil {
@Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private TaskScheduler taskScheduler;
@Autowired
private WxService wxService;
private final Map<Integer, ScheduledFuture<?>> scheduledTasks = new ConcurrentHashMap<>();
public void create(UserDO userDO){
long delay = 600000; // 延迟10分钟开始执行
MyTask task = new MyTask();
task.setUserDO(userDO);
// task.setWxService(wxService);
redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.opsForValue().set("task" + userDO.getUserAccountId(), new Gson().toJson(task), delay, TimeUnit.MILLISECONDS);
// 使用TaskScheduler执行定时任务
System.out.println("定时任务已开启");
ScheduledFuture<?> scheduledFuture = taskScheduler.schedule(task, Instant.now().plusMillis(delay));
scheduledTasks.put(userDO.getUserAccountId(), scheduledFuture);
}
public void destroy(Integer userAccountId){
redisTemplate.setValueSerializer(RedisSerializer.json());
MyTask task = new Gson().fromJson(redisTemplate.opsForValue().get("task"+userAccountId), MyTask.class);
ScheduledFuture<?> scheduledFuture = scheduledTasks.get(userAccountId);
if (task != null && scheduledFuture != null) {
scheduledFuture.cancel(false);
redisTemplate.delete("task"+userAccountId);
scheduledTasks.remove(userAccountId);
System.out.println("定时任务已取消");
}
}
}
......@@ -29,6 +29,7 @@ public class SmsUtil {
private static String COOPERATION_TEMPLATE_PASS_CODE_6 = "SMS_464380042";
private static String COOPERATION_TEMPLATE_PASS_CODE_7 = "SMS_464335035";
private static String COOPERATION_TEMPLATE_PASS_CODE_8 = "SMS_465080418";
//短信验证码模板
private static String VERIFYCODE="SMS_291570267";
......@@ -55,6 +56,10 @@ public class SmsUtil {
return send(CLOUD_JOIN_WEBSITE, COOPERATION_TEMPLATE_PASS_CODE_7, null, phone);
}
//聊天新消息通知
public static String sendNewMessage(String phone) {
return send(CLOUD_JOIN_WEBSITE, COOPERATION_TEMPLATE_PASS_CODE_8, null, phone);
}
public static String send(String TemplateCode, String param, String phone) {
return send(CLOUD_JOIN_WEBSITE, TemplateCode, param, phone);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论