UcEventBusIptv2IptvConsumer.java 5.27 KB
package com.topdraw.mq.consumer;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.module.user.iptv.service.UserTvService;
import com.topdraw.business.module.user.iptv.service.dto.UserTvDTO;
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.apache.commons.lang3.StringUtils;
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;
import java.util.Objects;

@Component
@Slf4j
public class UcEventBusIptv2IptvConsumer {

    @Autowired
    RestTemplateClient restTemplateClient;
    @Autowired
    private UserTvService userTvService;

    /**
     * 事件
     * @param content
     * @description 基础数据同步
     * @author Hongyan Wang
     * @date 2021/9/7 11:26 上午
     */
    @RabbitHandler
    @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);

                PlayContent.MsgData msgData = playContent.getMsgData();
                if (Objects.nonNull(msgData)) {
                    String time = playContent.getTime();
                    Integer deviceType = playContent.getDeviceType();
                    String platformAccount = msgData.getPlatformAccount();

                    String mediaCode = msgData.getMediaCode();
                    Long mediaId = msgData.getMediaId();
                    String mediaName = msgData.getMediaName();
                    Integer playDuration = msgData.getPlayDuration();

                    DataSyncMsg dataSyncMsg = new DataSyncMsg();
                    dataSyncMsg.setEventType(evt);
                    DataSyncMsg.MsgData msgData1 = new DataSyncMsg.MsgData();

                    if (StringUtils.isNotBlank(platformAccount)) {
                        MemberDTO memberDTO = this.userTvService.findMemberByPlatformAccount(platformAccount);
                        Long memberId = memberDTO.getId();
                        String memberCode = memberDTO.getCode();
                        msgData1.setMemberCode(memberCode);
                    }

                    msgData1.setEvent(8);
                    msgData1.setDeviceType(deviceType);
                    msgData1.setMediaId(mediaId);
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("mediaId", mediaId);
                    jsonObject.put("mediaName", mediaName);
                    jsonObject.put("playDuration", playDuration);
                    jsonObject.put("mediaCode", mediaCode);
                    jsonObject.put("time", time);
                    msgData1.setDescription(JSON.toJSONString(jsonObject));

                    dataSyncMsg.setMsg(msgData1);
                    return dataSyncMsg;
                }

                System.out.println(playContent);
                break;

        }

        return null;
    }

    /**
     * 任务处理
     * @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;
    }
}