You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.5 KiB
48 lines
1.5 KiB
package com.example.web.service;
|
|
|
|
import com.example.web.dto.NotificationDTO;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.messaging.simp.SimpMessagingTemplate;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.ZoneOffset;
|
|
|
|
/**
|
|
* WebSocket通知服务
|
|
*/
|
|
@Service
|
|
public class NotificationService {
|
|
|
|
@Autowired
|
|
private SimpMessagingTemplate messagingTemplate;
|
|
|
|
/**
|
|
* 广播通知给所有用户
|
|
*/
|
|
public void broadcastNotification(NotificationDTO notification) {
|
|
messagingTemplate.convertAndSend("/topic/notifications", notification);
|
|
}
|
|
|
|
/**
|
|
* 发送通知给特定用户
|
|
*/
|
|
public void sendNotificationToUser(String userId, NotificationDTO notification) {
|
|
messagingTemplate.convertAndSendToUser(userId, "/queue/notifications", notification);
|
|
}
|
|
|
|
/**
|
|
* 发送客户数据更新通知
|
|
*/
|
|
public void sendCustomerUpdateNotification(String customerId, String message) {
|
|
NotificationDTO notification = new NotificationDTO();
|
|
notification.setType("CUSTOMER_UPDATE");
|
|
notification.setTitle("客户数据更新");
|
|
notification.setMessage(message);
|
|
notification.setCustomerId(customerId);
|
|
notification.setTimestamp(LocalDateTime.now(ZoneOffset.UTC));
|
|
|
|
// 广播给所有用户
|
|
messagingTemplate.convertAndSend("/topic/customers/" + customerId, notification);
|
|
}
|
|
}
|
|
|