提交 dcde35a3 作者: han

增加聊天新消息短信提醒

上级 f00a49e0
流水线 #8172 已通过 于阶段
in 2 分 22 秒
...@@ -112,7 +112,10 @@ ...@@ -112,7 +112,10 @@
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>
<version>5.3.5</version> <version>5.3.5</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
...@@ -127,4 +130,4 @@ ...@@ -127,4 +130,4 @@
</plugins> </plugins>
</build> </build>
</project> </project>
\ No newline at end of file
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 { ...@@ -157,7 +157,7 @@ public class UserAccountDO implements Serializable {
.inviteCount(this.inviteCount).userImg(this.userImg).build(); .inviteCount(this.inviteCount).userImg(this.userImg).build();
} }
public UserDO buildUserDO() { 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 { ...@@ -36,4 +36,6 @@ public class UserDO implements Serializable {
private String userImg; private String userImg;
@ApiModelProperty(value = "未读的消息个数") @ApiModelProperty(value = "未读的消息个数")
private Integer unreadCount; private Integer unreadCount;
@ApiModelProperty(value = "手机号")
private String phoneNum;
} }
...@@ -10,6 +10,7 @@ import com.mmc.iuav.user.model.qo.MessageUserQO; ...@@ -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.SystemMessageVO;
import com.mmc.iuav.user.model.vo.UserMessageVO; import com.mmc.iuav.user.model.vo.UserMessageVO;
import com.mmc.iuav.user.service.MessageService; import com.mmc.iuav.user.service.MessageService;
import com.mmc.iuav.user.util.ScheduledTaskUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -27,6 +28,9 @@ public class MessageServiceImpl implements MessageService { ...@@ -27,6 +28,9 @@ public class MessageServiceImpl implements MessageService {
@Autowired @Autowired
private UserServiceDao userServiceDao; private UserServiceDao userServiceDao;
@Autowired
private ScheduledTaskUtil scheduledTaskUtil;
@Override @Override
public ResultBody insertSystemMessage(SystemMessageVO messageVO) { public ResultBody insertSystemMessage(SystemMessageVO messageVO) {
SystemMessageDO systemMessageDO = new SystemMessageDO(messageVO); SystemMessageDO systemMessageDO = new SystemMessageDO(messageVO);
...@@ -124,6 +128,9 @@ public class MessageServiceImpl implements MessageService { ...@@ -124,6 +128,9 @@ public class MessageServiceImpl implements MessageService {
} }
userMessageDO.setSenderUserId(senderUserId); userMessageDO.setSenderUserId(senderUserId);
if(messageDao.insertUserMessage(userMessageDO) != 0){ 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){ if(messageDao.isUserMessageLog(userMessageDO.getReceiverUserId(), userMessageDO.getSenderUserId()) == null){
UserMessageLogDO userMessageLogDO = new UserMessageLogDO(); UserMessageLogDO userMessageLogDO = new UserMessageLogDO();
userMessageLogDO.setSenderUserId(userMessageDO.getSenderUserId()); userMessageLogDO.setSenderUserId(userMessageDO.getSenderUserId());
...@@ -147,6 +154,7 @@ public class MessageServiceImpl implements MessageService { ...@@ -147,6 +154,7 @@ public class MessageServiceImpl implements MessageService {
@Override @Override
public PageResult selectUserMessage(MessageUserQO messageQO,Integer senderUserId) { public PageResult selectUserMessage(MessageUserQO messageQO,Integer senderUserId) {
scheduledTaskUtil.destroy(messageQO.getReceiverUserId());
int count = messageDao.countUserMessage(messageQO.getReceiverUserId(),senderUserId); int count = messageDao.countUserMessage(messageQO.getReceiverUserId(),senderUserId);
if (count == 0) { if (count == 0) {
return PageResult.buildPage(messageQO.getPageNo(), messageQO.getPageSize(), count); 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 { ...@@ -29,6 +29,7 @@ public class SmsUtil {
private static String COOPERATION_TEMPLATE_PASS_CODE_6 = "SMS_464380042"; 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_7 = "SMS_464335035";
private static String COOPERATION_TEMPLATE_PASS_CODE_8 = "SMS_465080418";
//短信验证码模板 //短信验证码模板
private static String VERIFYCODE="SMS_291570267"; private static String VERIFYCODE="SMS_291570267";
...@@ -55,6 +56,10 @@ public class SmsUtil { ...@@ -55,6 +56,10 @@ public class SmsUtil {
return send(CLOUD_JOIN_WEBSITE, COOPERATION_TEMPLATE_PASS_CODE_7, null, phone); 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) { public static String send(String TemplateCode, String param, String phone) {
return send(CLOUD_JOIN_WEBSITE, TemplateCode, param, phone); return send(CLOUD_JOIN_WEBSITE, TemplateCode, param, phone);
} }
......
...@@ -208,4 +208,4 @@ ...@@ -208,4 +208,4 @@
</repository> </repository>
</repositories> </repositories>
</project> </project>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论