UcEventBusConsumer.java 3.87 KB
package com.topdraw.mq.consumer;

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.topdraw.config.RabbitMqConfig;
import com.topdraw.mq.domain.DataSyncMsg;
import com.topdraw.resttemplate.RestTemplateClient;
import com.topdraw.util.JSONUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;

import java.sql.Timestamp;

@Component
@Slf4j
public class UcEventBusConsumer {

    @Autowired
    RestTemplateClient restTemplateClient;

    @Autowired
    AutoRoute autoUser;

    /**
     * 事件
     * @param content
     * @description 基础数据同步
     * @author Hongyan Wang
     * @date 2021/9/7 11:26 上午
     */
    @RabbitHandler/*
    @RabbitListener(bindings = {
            @QueueBinding(value = @Queue(value = RabbitMqConfig.UC_EVENTBUS_TOPIC),
                    exchange = @Exchange(type = ExchangeTypes.TOPIC, name = RabbitMqConfig.UC_EVENTBUS),
                    key = RabbitMqConfig.UC_EVENTBUS_KEY)
    }, containerFactory = "managementRabbitListenerContainerFactory")*/
    @RabbitListener(queues = RabbitMqConfig.UC_EVENTBUS_TOPIC, containerFactory = "managementRabbitListenerContainerFactory")
    public void ucEventConsumer(String content) {
        log.info(" receive dataSync msg , content is : {} ", content);
        DataSyncMsg dataSyncMsg = this.parseContent(content);
//        this.taskDeal(dataSyncMsg);
        log.info("ucEventConsumer ====>>>> end");
    }

    /**
     * 数据解析
     * @param content
     * @return
     */
      /*{
            "evt": "play”,  // 表示播放
            "deviceType": 1, // 1代表大屏
            "time": "2022-04-01 00:10:09”,
            "msgData": {
                    "platformAccount": "itv094430@“, // 大屏用户账号
                    "playDuration": 60, // 播放时长,单位分钟
                    "mediaId": 3433, // 节目id,此次是累计计算,可不传
                    "mediaCode": "media_123”, // 节目标识,同上
                    "mediaName": "白宫陷落” // 节目名称,同上
            }
        }*/
    private DataSyncMsg parseContent(String content) {

        CommonMsg commonMsg = JSONUtil.parseMsg2Object(content, CommonMsg.class);

        String evt = commonMsg.getEvt();
        switch (evt.toUpperCase()) {

            case "PLAY":
                PlayContent playContent = JSONUtil.parseMsg2Object(content, PlayContent.class);
                System.out.println(playContent);
                break;

        }

        DataSyncMsg dataSyncMsg = JSONUtil.parseMsg2Object(content,DataSyncMsg.class);
        Assert.notNull(dataSyncMsg,"ERROR -->> operationConsumer -->> parseContent -->> 【dataSyncMsg】 not be null !!");
        DataSyncMsg.MsgData msgData = dataSyncMsg.getMsg();
        Assert.notNull(msgData,"ERROR -->> operationConsumer -->> parseContent -->> 【msgData】 not be null !!");
        return dataSyncMsg;
    }

    /**
     * 任务处理
     * @param dataSyncMsg
     */
    private void taskDeal(DataSyncMsg dataSyncMsg) {
        this.restTemplateClient.dealTask(dataSyncMsg);
    }

    @Data
    static class PlayContent {
        private String evt;
        private Integer deviceType;
        private String time;
        private MsgData msgData;

        @Data
        static class MsgData {
            private String platformAccount;
            private Integer playDuration;
            private Long mediaId;
            private String mediaCode;
            private String mediaName;
        }
    }

    @Data
    static class CommonMsg {
        private String evt;
        private Integer deviceType;
        private String time;
    }
}