From f788607ff771a47bc60d6a86e00b3433c40f3d2c Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期五, 24 九月 2021 15:22:03 +0800 Subject: [PATCH] 接入视频直播 --- src/main/java/com/yeshi/buwan/controller/api/VideoPlayController.java | 241 +++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 218 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/yeshi/buwan/controller/api/VideoPlayController.java b/src/main/java/com/yeshi/buwan/controller/api/VideoPlayController.java index 9efd862..ca59293 100644 --- a/src/main/java/com/yeshi/buwan/controller/api/VideoPlayController.java +++ b/src/main/java/com/yeshi/buwan/controller/api/VideoPlayController.java @@ -1,19 +1,29 @@ package com.yeshi.buwan.controller.api; import com.google.gson.Gson; +import com.yeshi.buwan.domain.jump.JumpDetail; +import com.yeshi.buwan.domain.jump.JumpTypeEnum; +import com.yeshi.buwan.domain.pptv.PPTVPlayProcessRecord; import com.yeshi.buwan.domain.video.VideoWatchHistory; -import com.yeshi.buwan.pptv.PPTVApiUtil; -import com.yeshi.buwan.pptv.entity.PPTVProgram; -import com.yeshi.buwan.pptv.entity.PPTVSeries; -import com.yeshi.buwan.pptv.entity.PPTVSeriesProgramMap; -import com.yeshi.buwan.pptv.entity.VideoPPTVMap; +import com.yeshi.buwan.domain.vip.VideoBuyRecord; +import com.yeshi.buwan.exception.ParamsException; +import com.yeshi.buwan.videos.pptv.PPTVApiUtil; +import com.yeshi.buwan.videos.pptv.PPTVUtil; +import com.yeshi.buwan.videos.pptv.entity.PPTVProgram; +import com.yeshi.buwan.videos.pptv.entity.PPTVSeries; +import com.yeshi.buwan.videos.pptv.entity.PPTVSeriesProgramMap; +import com.yeshi.buwan.videos.pptv.entity.VideoPPTVMap; +import com.yeshi.buwan.service.inter.juhe.PPTVPlayProcessRecordService; import com.yeshi.buwan.service.inter.juhe.PPTVService; -import com.yeshi.buwan.service.inter.push.PushDeviceTokenService; +import com.yeshi.buwan.service.inter.system.SystemConfigService; import com.yeshi.buwan.service.inter.video.VideoWatchHistoryService; -import com.yeshi.buwan.util.JsonUtil; +import com.yeshi.buwan.service.inter.vip.VIPService; +import com.yeshi.buwan.service.inter.vip.VideoBuyRecordService; +import com.yeshi.buwan.util.*; import com.yeshi.buwan.vo.AcceptData; import com.yeshi.buwan.vo.video.PPTVVideoActivityInfoVO; import com.yeshi.buwan.vo.video.PPTVWatchVIPVideoActivityWay; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; @@ -23,6 +33,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Date; import java.util.List; @Controller @@ -36,6 +47,21 @@ @Resource private VideoWatchHistoryService videoWatchHistoryService; + + @Resource + private SystemConfigService systemConfigService; + + @Resource + private VIPService vipService; + + @Resource + private VideoBuyRecordService videoBuyRecordService; + + @Resource + private RedisManager redisManager; + + @Resource + private PPTVPlayProcessRecordService pptvPlayProcessRecordService; /** @@ -53,24 +79,50 @@ logger.info("鎾斁PPTV锛歭oginUid-{}锛宑id-{}锛寁id-{}", loginUid, Cid, Vid); - PPTVSeriesProgramMap map = pptvService.selectMapByCode(Cid, Vid); + PPTVSeriesProgramMap map = pptvService.selectMapByCode(Cid, StringUtil.isNullOrEmpty(Vid) ? null : Vid); if (map != null) { String infoId = map.getInfoId(); - VideoPPTVMap videoPPTVMap = pptvService.selectVideoPPTVMapByInfoId(infoId); + PPTVSeries series = pptvService.selectSeriesBySeriesCode(Cid); + if (series == null) { + return ""; + } + + VideoPPTVMap videoPPTVMap = pptvService.selectVideoPPTVMapByPPInfo(infoId, (series.getProgramType().contains("鐢靛奖") || series.getProgramType2().contains("鐢靛奖")) ? Vid : null); + if (videoPPTVMap != null) { - PPTVProgram program = pptvService.selectProgramById(Vid); + PPTVProgram program = pptvService.selectProgramById(StringUtil.isNullOrEmpty(Vid) ? Cid : Vid); if (program != null && program.getSeriesNum() != null) { //褰撳墠鎾斁鐨勯泦鏁� program.getSeriesNum(); VideoWatchHistory history = new VideoWatchHistory(); history.setDevice(acceptData.getDevice()); history.setVideoId(videoPPTVMap.getVideoId()); history.setUid(loginUid); - history.setPosition(Integer.parseInt(program.getSeriesNum()) - 1); + history.setPosition(StringUtil.isNullOrEmpty(program.getSeriesNum()) ? 0 : Integer.parseInt(program.getSeriesNum()) - 1); videoWatchHistoryService.add(history); } } } return ""; + } + + + @RequestMapping("pptvFinishPlay") + @ResponseBody + public String pptvFinishPlay(AcceptData acceptData, String loginUid, String cid, String vid, Integer currentTime) { + ///璁板綍缁撴潫鎾斁 + PPTVPlayProcessRecord record = new PPTVPlayProcessRecord(); + record.setCid(cid); + record.setDetailSystemId(acceptData.getDetailSystem().getId()); + record.setDeviceId(StringUtil.isNullOrEmpty(acceptData.getUtdId()) ? acceptData.getDevice() : acceptData.getUtdId()); + record.setVid(vid); + record.setLoginUid(loginUid); + record.setCurrentTime(currentTime); + try { + pptvPlayProcessRecordService.addRecord(record); + } catch (ParamsException e) { + e.printStackTrace(); + } + return JsonUtil.loadTrueJson(""); } /** @@ -88,11 +140,22 @@ //鏌ヨcid涓巚id鐨勫悕瀛� PPTVSeries pptvSeries = pptvService.selectSeriesBySeriesCode(cid); if (pptvSeries == null) { +// PPTVProgram program = pptvService.selectProgramById(cid); try { pptvSeries = PPTVApiUtil.getDetail(cid); - }catch(Exception e){ + ThreadUtil.run(new Runnable() { + @Override + public void run() { + pptvService.syncSeries(cid); + } + }); + } catch (Exception e) { } + } + + if (StringUtil.isNullOrEmpty(vid)) { + vid = cid; } PPTVVideoActivityInfoVO vo = new PPTVVideoActivityInfoVO(); @@ -103,20 +166,152 @@ } List<PPTVWatchVIPVideoActivityWay> wayList = new ArrayList<>(); - PPTVWatchVIPVideoActivityWay way = new PPTVWatchVIPVideoActivityWay(); - way.setEndBgColor("#E9CE93"); - way.setStartBgColor("#F7EDD7"); - way.setEndPrice(new BigDecimal("99")); - way.setIcon("http://192.168.3.122:8848/BuWanWeb/icon_test1.png"); - way.setStartPrice(new BigDecimal("6")); - way.setSubTitle("鍖呮湀銆佸銆佸勾鍗�"); - way.setTitle("VIP鐪嬮珮娓� 鍏嶅箍鍛�"); - way.setTextColor("#885E24"); - way.setType("vip"); - wayList.add(way); + PPTVWatchVIPVideoActivityWay way = null; + + if (!vipService.isVIP(loginUid)) { + way = new PPTVWatchVIPVideoActivityWay(); + way.setEndBgColor("#E9CE93"); + way.setStartBgColor("#F7EDD7"); + way.setEndPrice(new BigDecimal("77.8")); + way.setIcon("https://buwan-1255749512.cos.ap-guangzhou.myqcloud.com/resource/icon_vip.png"); + way.setStartPrice(new BigDecimal("8.8")); + way.setSubTitle("鍖呮湀銆佸銆佸勾鍗�"); + way.setTitle("VIP鐪嬮珮娓� 鍏嶅箍鍛�"); + way.setTextColor("#885E24"); + way.setType("vip"); + wayList.add(way); + } + + + //3.9.2鍚庤繑鍥炲崟鐗囪喘涔� + if (VersionUtil.isGraterThan392(acceptData.getPlatform(), acceptData.getVersion())) { + String buyVideoUrl = systemConfigService.getConfigValueByKeyCache("buyVideoUrl"); + if (buyVideoUrl != null && pptvSeries != null && PPTVUtil.isVIPVideo(pptvSeries.getFree()) && PPTVUtil.getAvaiableStates().contains(pptvSeries.getStatus())) { + boolean canBuy = pptvSeries.getGoodsInfo() != null && !StringUtil.isNullOrEmpty(pptvSeries.getGoodsInfo().getGoodsNo()); + if (canBuy) { + way = new PPTVWatchVIPVideoActivityWay(); + way.setEndBgColor("#DCE8FF"); + way.setStartBgColor("#DCE8FF"); +// way.setEndPrice(new BigDecimal("77.8")); + way.setIcon("http://img.ysdq.yeshitv.com/resource/icon_free_money.png"); + way.setStartPrice(new BigDecimal("0")); + way.setSubTitle("鐣呬韩娴烽噺楂樻竻"); + way.setTitle("0鍏冪湅鍗曠墖锛堝奖瑙嗚眴鎶垫墸锛�"); + way.setTextColor("#0052F6"); + way.setType("video"); + JumpDetail jumpDetail = new JumpDetail(); + jumpDetail.setNeedLogin(true); + jumpDetail.setType(JumpTypeEnum.web); + way.setJumpDetail(jumpDetail); + JSONObject params = new JSONObject(); + params.put("url", buyVideoUrl.replace("{cid}", cid).replace("{vid}", vid)); + params.put("close", false); + way.setParams(params.toString().replace("\"", "\\" + "\"")); + wayList.add(way); + } + } + } + vo.setWayList(wayList); return JsonUtil.loadTrueJson(new Gson().toJson(vo)); } + /** + * 鑾峰彇PPTV鐨勬挱鏀剧姸鎬� + * + * @param acceptData + * @param loginUid + * @param cid + * @param vid + * @return + */ + @RequestMapping("getPPTVVideoPlayState") + @ResponseBody + public String getPPTVVideoPlayState(AcceptData acceptData, String loginUid, String cid, String vid) { + + vid = StringUtil.isNullOrEmpty(vid) ? cid : vid; + + //鑾峰彇褰撳墠鐢ㄦ埛鏄惁涓簐ip + boolean vip = StringUtil.isNullOrEmpty(loginUid) ? false : vipService.isVIP(loginUid); + + boolean isVIPVideo = false; + boolean isBought = false; + boolean canBuy = false; + //鑾峰彇鏄惁涓簐ip瑙嗛 + PPTVSeries pptvSeries = pptvService.selectSeriesBySeriesCode(cid); + + if (pptvSeries != null) { + if (StringUtil.isNullOrEmpty(vid) || vid.trim().equalsIgnoreCase("0")) { + if (pptvSeries != null) { + isVIPVideo = PPTVUtil.isVIPVideo(pptvSeries.getFree()); + } + } else { + PPTVProgram program = pptvService.selectProgramById(vid); + if (program != null) + isVIPVideo = PPTVUtil.isVIPVideo(program.getFree()); + } + + canBuy = pptvSeries.getGoodsInfo() != null && !StringUtil.isNullOrEmpty(pptvSeries.getGoodsInfo().getGoodsNo()); + //鏄惁宸茬粡璐拱鍗曠墖 + if (pptvSeries != null && canBuy) { + isBought = !StringUtil.isNullOrEmpty(redisManager.getCommonString(PPTVUtil.getBuyGoodsCacheKey(loginUid, pptvSeries.getGoodsInfo().getGoodsNo()))); + } + } + + if (!isBought) + isBought = videoBuyRecordService.isBought(loginUid, cid, vid, new Date()); + + //鑾峰彇鎾斁杩涘害 + PPTVPlayProcessRecord record = new PPTVPlayProcessRecord(); + record.setCid(cid); + record.setDetailSystemId(acceptData.getDetailSystem().getId()); + record.setDeviceId(StringUtil.isNullOrEmpty(acceptData.getUtdId()) ? acceptData.getDevice() : acceptData.getUtdId()); + String id = PPTVPlayProcessRecord.createId(record.getDetailSystemId(), record.getDeviceId(), cid); + record = pptvPlayProcessRecordService.selectByPrimaryKey(id); + + + net.sf.json.JSONObject data = new net.sf.json.JSONObject(); + data.put("vipUser", vip); + data.put("vipVideo", isVIPVideo); + data.put("bought", isBought); + data.put("canBuy", canBuy); + data.put("showInterstitialAd", true); + data.put("showPreVideoAd", false); + if (pptvSeries != null) + data.put("title", pptvSeries.getName()); + if (record != null) { + data.put("playPosition", record.getCurrentTime()); + } + return JsonUtil.loadTrueJson(data.toString()); + } + + + /** + * 鑾峰彇璁㈠崟鐨勮棰戜俊鎭� + * + * @param acceptData + * @return + */ + @RequestMapping("getOrderVideoInfo") + @ResponseBody + public String getOrderVideoInfo(AcceptData acceptData, String loginUid, String cid, String vid) { + VideoBuyRecord record = videoBuyRecordService.getLatestRecord(loginUid, cid, vid); + if (record == null) { + return JsonUtil.loadFalseJson("璐拱璁板綍涓嶅瓨鍦�"); + } + JumpDetail jumpDetail = new JumpDetail(); + jumpDetail.setType(JumpTypeEnum.clazz); + jumpDetail.setActivity("com.weikou.beibeivideo.ui.media.VideoDetailActivity2"); + net.sf.json.JSONObject params = new net.sf.json.JSONObject(); + params.put("Id", PPTVUtil.getVisualVideoId(record.getCid(), record.getVid())); + params.put("from", "order"); + + net.sf.json.JSONObject data = new net.sf.json.JSONObject(); + data.put("jumpDetail", new Gson().toJson(jumpDetail)); + data.put("params", params); + return JsonUtil.loadTrueJson(data.toString()); + } + + } -- Gitblit v1.8.0