package org.dromara.system.task;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.system.websocket.MessageWebSocketServer;
import org.springframework.stereotype.Component;

/**
 * 消息定时任务
 *
 * @author ruoyi
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class MessageScheduledTask {

//    private final SysMessageMapper messageMapper;
//    private final SysMessageUserMapper messageUserMapper;
    private final MessageWebSocketServer messageWebSocketServer;

    /**
     * 每分钟执行一次，处理待发送的消息
     */
//    @Scheduled(cron = "0 */1 * * * ?")
//    @Transactional(rollbackFor = Exception.class)
//    public void processScheduledMessages() {
//        log.info("开始处理定时消息...");
//        try {
//            // 查询待发送的消息
//            LambdaQueryWrapper<SysMessage> lqw = new LambdaQueryWrapper<>();
//            List<SysMessage> messages = messageMapper.selectList(lqw);
//            for (SysMessage message : messages) {
//                // 查询消息接收者
//                LambdaQueryWrapper<SysMessageUser> userLqw = new LambdaQueryWrapper<>();
//                userLqw.eq(SysMessageUser::getMessageId, message.getId());
//                List<SysMessageUser> messageUsers = messageUserMapper.selectList(userLqw);
//                // 发送消息
//                SysMessageVo messageVo = MapstructUtils.convert(message, SysMessageVo.class);
//                for (SysMessageUser messageUser : messageUsers) {
//                    try {
//                        messageWebSocketServer.sendMessage(messageUser.getUserId(), String.valueOf(messageVo));
//                    } catch (Exception e) {
//                        log.error("发送消息失败，消息ID：{}，用户ID：{}", message.getId(), messageUser.getUserId(), e);
//                    }
//                }
//                // 更新消息状态为已发送
//                messageMapper.updateById(message);
//            }
//            log.info("定时消息处理完成，共处理{}条消息", messages.size());
//        } catch (Exception e) {
//            log.error("处理定时消息时发生错误", e);
//        }
//    }
}
