UcEventBusIptv2ManagementUcEngine.java 5.43 KB
package com.topdraw.mq.consumer;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.topdraw.business.module.member.service.MemberService;
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.exception.BadRequestException;
import com.topdraw.exception.EntityNotFoundException;
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.rabbit.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Objects;

@Component
@Slf4j
public class UcEventBusIptv2ManagementUcEngine {

    @Autowired
    private RestTemplateClient restTemplateClient;
    @Autowired
    private UserTvService userTvService;
    @Autowired
    private MemberService memberService;

    /**
     * 事件
     * @param content
     * @description 基础数据同步
     * @author Hongyan Wang
     * @date 2021/9/7 11:26 上午
     */
    /*@RabbitHandler
    @RabbitListener(queues = RabbitMqConfig.UC_EVENTBUS_QUEUE,
            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
     */
    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)) {
                        UserTvDTO userTvDTO = this.userTvService.findByPlatformAccount(platformAccount);
                        String priorityMemberCode = userTvDTO.getPriorityMemberCode();
                        String memberCode = "";
                        if (StringUtils.isNotBlank(priorityMemberCode)) {
                            memberCode = priorityMemberCode;
                        } else {
                            memberCode = this.memberService.findById(userTvDTO.getMemberId()).getCode();
                        }

                        if (StringUtils.isBlank(memberCode))
                            throw new EntityNotFoundException(MemberDTO.class, "memberCode", "memberCode is null");

                        msgData1.setMemberCode(memberCode);
                    }

                    msgData1.setEvent(8);
                    msgData1.setDeviceType(deviceType);
                    msgData1.setMediaId(mediaId);

                    JSONObject param = new JSONObject();
                    param.put("playDuration", playDuration);
                    msgData1.setParam(JSON.toJSONString(param));
                    JSONObject description = new JSONObject();
                    description.put("mediaId", mediaId);
                    description.put("mediaName", mediaName);
                    description.put("playDuration", playDuration);
                    description.put("mediaCode", mediaCode);
                    description.put("time", time);
                    msgData1.setDescription(JSON.toJSONString(description));

                    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;
    }
}