ef5e314214ef4da8d8231f0a6f31c25c98afbd2f.svn-base 5.65 KB
package com.bjivt.showtime.api.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;

import org.apache.commons.beanutils.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.bjivt.showtime.api.dao.LiveDao;
import com.bjivt.showtime.api.entity.ChatRoom;
import com.bjivt.showtime.api.entity.Live;
import com.bjivt.showtime.api.entity.ParticipantEntity;
import com.bjivt.showtime.api.entity.User;
import com.bjivt.showtime.api.service.LiveService;
import com.bjivt.showtime.api.utils.Pager;
import com.bjivt.showtime.api.utils.PropertiesUtil;
import com.bjivt.showtime.api.utils.RestUtil;
import com.bjivt.showtime.api.utils.RestUtil.Method;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.basic.DateConverter;
import com.thoughtworks.xstream.io.xml.DomDriver;

@Service
public class LiveServiceImpl extends BaseServiceImpl<Live, Integer> implements LiveService {

	@Autowired
	private LiveDao _livedao;

	@Autowired
	public void setBaseDao(LiveDao _livedao) {
		super.setBaseDao(_livedao);
	}
	
	public Map<String, Object> getLiveRoomInfoById(Integer id,Integer type) {
		return _livedao.getLiveRoomInfoById( id, type);
	}

	@Override
	public void startLive() {

	}

	public Live getLiveByUserId(Integer userId, Integer type) {
		return _livedao.getLiveByUserId(userId, type);
	}

	public List<Map<String, Object>> getFollowerLiveList(Integer userId, Pager page) {
		return _livedao.getFollowerLiveList(userId, page);
	}

	public List<Map<String, Object>> getHotLiveList(Pager page) {
		return _livedao.getHotLiveList(page);
	}

	public List<Map<String, Object>> getUserLiveList(Integer userId,Pager page) {
		return _livedao.getUserLiveList(userId, page);
	}

	public List<Map<String, Object>> requestFollowerVideoLiveList(Integer userId,Pager page) {
		return _livedao.requestFollowerVideoLiveList(userId, page);
	}

	public List<Map<String, Object>> getUserGiftList(Integer userId, Pager page) {
		return _livedao.getUserGiftList(userId,page);
	}

	public List<Map<String, Object>> getLiveGiftList(Integer liveId, Pager page) {
		return _livedao.getLiveGiftList(liveId,page);
	}

	public List<Map<String, Object>> requestNewLiveList(Pager page) {
		return _livedao.requestNewLiveList(page);
	}

	public List<Map<String, Object>> getStarLiveList(Pager page) {
		return _livedao.getStarLiveList(page);
	}

	public void getLiveRoom() {
		List<Map<String,Object>> list = _livedao.getLiveRoom();
		for (Map<String, Object> map : list) {
			Live live = new Live();
			try {
				BeanUtils.populate(live, map);
				if(live != null && live.getHeartbeat() != null &&  (System.currentTimeMillis()/1000 - live.getHeartbeat()) > 90){
					live.setType(2);
					_livedao.update(live);
					//System.out.println("------关闭非正常直播------");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	public List<Map<String, Object>> getHotLiveList() {
		return _livedao.getHotLiveList();
	}

	public List<Map<String, Object>> getRecordListByUserId(Integer userId) {
		return _livedao.getRecordListByUserId(userId);
	}

	public List<Map<String, Object>> getLocationLLiveList(Float maxlongitude,Float maxlatitude, Float minlongitude, Float minlatitude, Pager page) {
		return _livedao.getLocationLLiveList(maxlongitude, maxlatitude, minlongitude, minlatitude, page);
	}

	@Override
	public List<Map<String, Object>> getUserGiftToOtherList(Integer userId, Pager page) {
		return _livedao.getUserGiftToOtherList(userId, page);
	}

	@Override
	public List<Map<String, Object>> getRecordListByUserId(Integer userId, Pager pager) {
		// TODO Auto-generated method stub
		return _livedao.getRecordListByUserId(userId, pager);
	}
	/**
	 * @see 查询某个房间的所有观看用户信息
	 */
	@Override
	public List<Map<String, Object>> getLiveUserList(Integer liveId, Pager page) {
		return _livedao.getLiveUserList(liveId,page);
	}

	@Override
	public ChatRoom getChatRoomInfo(String roomName) {
		if (roomName.contains("@")) {
			roomName =  roomName.substring(0, roomName.indexOf("@"));
		}
		
		try {
			// 调用Openfire接口
			Map<String, String> headers = new HashMap<String, String>();
			headers.put("Authorization", PropertiesUtil.config.get("openfire.restapi.secret"));
	
			RestUtil rest = new RestUtil(headers);
			String result = rest.load(
					String.format("%s/plugins/restapi/v1/chatrooms/%s",
							PropertiesUtil.config.get("openfire.restapi.url"),roomName),
					Method.GET, null);
	
			if (result != null) {
				XStream xstream = new XStream(new DomDriver());
				xstream .autodetectAnnotations(true);
				xstream.registerConverter(new DateConverter("yyyy-MM-dd'T'HH:mm:ss", null, TimeZone.getTimeZone("GMT+8")));
				xstream.alias("chatRoom", ChatRoom.class);
				xstream.alias("currUsers", Integer.class);
				xstream.alias("broadcastPresenceRole", String.class);
				xstream.alias("owner", String.class);
				xstream.alias("ownerGroup", String.class);
				xstream.alias("admin", String.class);
				xstream.alias("adminGroup", String.class);
				xstream.alias("member", String.class);
				xstream.alias("memberGroup", String.class);
				xstream.alias("outcast", String.class);
				xstream.alias("outcastGroup", String.class);
				xstream.alias("participants", ParticipantEntity.class);

				ChatRoom room = (ChatRoom) xstream.fromXML(result);
				
				return room;
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		
		return null;
	}

	@Override
	public int getUserLiveCount(int userId, Pager pager) {
		return _livedao.getUserLiveCount(userId, pager);
	}

	@Override
	public User getUserByLiveId(Integer liveId) {
		return _livedao.getUserByLiveId(liveId);
	}

}