//package com.tourism.webadmin.aspect;
//import com.tourism.webadmin.annotation.PushNotification;
//import com.tourism.webadmin.app.website.dto.SystemMessageDTO;
//import com.tourism.webadmin.back.model.constant.NoticeType;
//import com.tourism.webadmin.back.service.TourFansService;
//import com.tourism.webadmin.strategy.NotificationStrategy;
//import com.tourism.webadmin.strategy.NotificationStrategyFactory;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.AfterReturning;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.aspectj.lang.reflect.MethodSignature;
//import org.springframework.amqp.rabbit.core.RabbitTemplate;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.ApplicationContext;
//import org.springframework.stereotype.Component;
//
//import java.lang.reflect.Method;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * PushNotificationAspect 类。
// * <p>
// * 描述：
// *
// * @author huangwenwen
// * @date 2025/1/6
// */
//
//@Aspect
//@Component
//@Slf4j
//public class PushNotificationAspect {
//
//    private final RabbitTemplate rabbitTemplate;
//
//
//    @Autowired
//    private ApplicationContext applicationContext;
//
//    public PushNotificationAspect(RabbitTemplate rabbitTemplate) {
//        this.rabbitTemplate = rabbitTemplate;
//    }
//    @Pointcut("@annotation(com.tourism.webadmin.annotation.PushNotification)")
//    public void pointcut(){
//
//    }
//    @Around(value = "pointcut()")
//    public Object pushNotification( ProceedingJoinPoint joinPoint) throws Throwable{
//
//        // 获取目标方法
//        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//        Method method = signature.getMethod();
//
//        // 初始化变量
//        Object result = null;
//        Object[] args = joinPoint.getArgs(); // 获取方法的参数
//        PushNotification pushNotification = null;
//
//        // 检查是否标注了 PushNotification 注解
//        if (method.isAnnotationPresent(PushNotification.class)) {
//            // 获取注解实例
//            pushNotification = method.getAnnotation(PushNotification.class);
//
//            // 获取 noticeType 值
//            int noticeType = pushNotification.noticeType();
//
//            // 获取对应策略
//            NotificationStrategy strategy = NotificationStrategyFactory.getStrategy(noticeType,applicationContext);
//            if (strategy == null) {
//                return null;
//            }
//
//            // 构建消息体
//            Map<String, Object> params = new HashMap<>();
//            params.put("methodArgs", args); // 方法参数
//            params.put("noticeType", noticeType);
//            String message = strategy.buildMessage(params);
//            // 推送消息到队列
//            if (noticeType==NoticeType.NOTICE_FOCUS){
//                rabbitTemplate.convertAndSend("focusExchange", "focusRouter", message);
//            }else {
//                rabbitTemplate.convertAndSend("systemExchange", "interactRouter", message);
//            }
//        }
//
//        // 执行目标方法
//        result = joinPoint.proceed(args);
//        return result;
//
//    }
//}
