package com.yeshi.buwan.controller.parser; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.yeshi.buwan.domain.*; import com.yeshi.buwan.domain.Collection; import com.yeshi.buwan.domain.solr.SolrAlbumVideo; import com.yeshi.buwan.domain.solr.SolrShortVideo; import com.yeshi.buwan.domain.system.DetailSystem; import com.yeshi.buwan.domain.system.DetailSystemConfig; import com.yeshi.buwan.domain.user.LoginUser; import com.yeshi.buwan.domain.video.InternetSearchVideo; import com.yeshi.buwan.dto.log.BaseLog; import com.yeshi.buwan.dto.search.SolrResultDTO; import com.yeshi.buwan.dto.search.SolrShortVideoSearchFilter; import com.yeshi.buwan.dto.search.SolrVideoSearchFilter; import com.yeshi.buwan.dto.user.LoginInfoDto; import com.yeshi.buwan.exception.user.LoginUserException; import com.yeshi.buwan.exception.user.RegisterUserException; import com.yeshi.buwan.videos.pptv.PPTVUtil; import com.yeshi.buwan.service.imp.*; import com.yeshi.buwan.service.inter.juhe.InternetSearchVideoService; import com.yeshi.buwan.service.inter.system.SystemConfigService; import com.yeshi.buwan.service.manager.search.SolrAlbumVideoDataManager; import com.yeshi.buwan.service.manager.search.SolrInternetSearchVideoDataManager; import com.yeshi.buwan.service.manager.search.SolrShortVideoDataManager; import com.yeshi.buwan.util.*; import com.yeshi.buwan.util.JuHe.VideoResourceUtil; import com.yeshi.buwan.util.annotation.RequireUid; import com.yeshi.buwan.util.email.MailSenderUtil; import com.yeshi.buwan.util.factory.VideoInfoFactory; import com.yeshi.buwan.util.factory.vo.UserInfoVOFactory; import com.yeshi.buwan.util.log.LoggerUtil; import com.yeshi.buwan.util.log.UserActiveLogFactory; import com.yeshi.buwan.util.video.VideoCategoryConstant; import com.yeshi.buwan.util.video.VideoConstant; import com.yeshi.buwan.util.video.VideoUtil; import com.yeshi.buwan.vo.AcceptData; import com.yeshi.buwan.vo.video.VideoListResultVO; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import redis.clients.jedis.Jedis; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.io.File; import java.io.PrintWriter; import java.lang.reflect.Type; import java.util.*; @Controller public class UserParser { Logger searchKeyLogger = LoggerFactory.getLogger("searchKey"); @Resource private SystemService systemService; @Resource private DetailSystemConfigService configService; @Resource private UserService userService; @Resource private ShareService shareService; @Resource private SearchService searchService; @Resource private RecommendService recommendService; @Resource private CollectionService collectionService; @Resource private UserBannerService userBannerService; @Resource private VideoResourceUtil videoResouceUtil; @Resource private BanQuanService banQuanService; @Resource private VideoInfoService videoInfoService; @Resource private SolrAlbumVideoDataManager solrDataManager; @Resource private SolrInternetSearchVideoDataManager solrInternetSearchVideoDataManager; @Resource private SolrShortVideoDataManager solrShortVideoDataManager; @Resource private ConfigParser configParser; @Resource private SystemConfigService systemConfigService; @Resource private RedisManager redisManager; public void getUid(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { DetailSystem detailSystem = systemService.getDetailSystemByPackage(acceptData.getPackageName()); String uid = userService.getUid(acceptData.getDevice(), acceptData.getSystem(), acceptData.getImei(), acceptData.getMac(), acceptData.getLat(), acceptData.getLng()); UserInfo userInfo = userService.getUserInfo(uid); if (uid.equalsIgnoreCase("0")) { out.print(JsonUtil.loadFalseJson("获取uid失败")); return; } else { Map map = configService.getConfigAsMap(acceptData.getChildDetailSystem(), acceptData.getVersion()); ShareContent share = shareService.getShareContent(detailSystem.getId()); JSONObject object = new JSONObject(); object.put("Uid", uid); object.put("Portrait", userInfo.getPortrait()); object.put("Nickname", userInfo.getNickname()); object.put("ZiXun", map.get("zixun_url")); if (acceptData.getPlatform().equalsIgnoreCase("ios") && !"中国".equalsIgnoreCase(userInfo.getCountry()))// 正在审核的版本 object.put("CommentUrl", ""); else if (share != null) object.put("CommentUrl", share.getShareUrl()); object.put("IOSSlotID", ""); if (acceptData.getPlatform().equalsIgnoreCase("ios") && !"中国".equalsIgnoreCase(userInfo.getCountry())) { object.put("IOSDownLoad", "0");// 是否显示下载 0-不下载 1-下载 } else object.put("IOSDownLoad", "1");// 是否显示下载 0-不下载 1-下载 object.put("ShareContent", "业界良心!这是我用过最好的视频APP!最新的都有!"); if (share != null) { object.put("ShareContent", share.getShareContent()); object.put("ShareUrl", share.getShareUrl()); } object.put("WXShareIcon", map.get("wx_share_icon")); object.put("WXShareUrl", map.get("wx_share_url")); object.put("WXShareContent", map.get("wx_share_content")); if ("qq".equalsIgnoreCase(acceptData.getChannel())) { object.put("TopIcon", ""); object.put("TuiGuang", ""); } else { object.put("TuiGuang", map.get("taobao_tuiguang")); object.put("TopIcon", map.get("top_icon")); } object.put("SOHU_partner", detailSystem.getSohuPartner()); object.put("SOHU_key", detailSystem.getSohuKey()); if (acceptData.getPackageName().contains("com.ys")) object.put("NoticeContent", map.get("play_notice_content_ys")); else if (acceptData.getPackageName().contains("com.doudou")) { object.put("NoticeContent", map.get("play_notice_content_doudou")); } else object.put("NoticeContent", map.get("play_notice_content")); object.put("ShowMoreApp", map.get("show_more_app")); object.put("ShowAd", map.get("show_ad")); object.put("PPTVSO", map.get("pptvsourl")); object.put("COMMENT_ALERT", map.get("comment_alert")); object.put("evalueate", map.get("evalueate")); object.put("shopurl", map.get("shopurl")); object.put("copyplate", map.get("copy_plate")); //开关设置 String channel = acceptData.getChannel().toLowerCase(); String adOpenSettings = map.get("ad_other_open_settings"); JSONObject adOpenSettingsJson = JSONObject.fromObject(adOpenSettings); if (!adOpenSettingsJson.keySet().contains(channel.toLowerCase())) { channel = "qq"; } int closeVersion = adOpenSettingsJson.optInt(channel); if (acceptData.getVersion() >= closeVersion) { object.put("adClickDownload", true); } else { object.put("adClickDownload", false); } // 广告类型 object.put("adType", map.get("ad_type")); // String fullVideoVersionChannels = map.get("video_detail_full_video_version_channel"); // JSONObject json = JSONObject.fromObject(fullVideoVersionChannels); // if (json.optInt(acceptData.getChannel().toLowerCase(), 0) > 0) { // } ConfigParser.ADConfig adConfig = configParser.getAdShowType("ad_video_detail_full_video", acceptData.getChannel(), acceptData.getVersion(), map); String type = adConfig == null ? "" : adConfig.getType(); if (!StringUtil.isNullOrEmpty(type)) {// 是否屏蔽详情页全屏广告 JSONObject adType = JSONObject.fromObject(map.get("ad_type")); adType.put("videoDetailSplashAd", true); object.put("adType", adType.toString()); } else { JSONObject adType = JSONObject.fromObject(map.get("ad_type")); adType.put("videoDetailSplashAd", false); object.put("adType", adType.toString()); } out.print(JsonUtil.loadTrueJson(object.toString())); } } // 搜索 public void suggestSearch(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String key = request.getParameter("Key"); if (StringUtil.isNullOrEmpty(key)) { out.print(JsonUtil.loadFalseJson("请上传Key")); return; } List list = solrDataManager.getSuggestKeyList(key); //searchService.suggestSearch(key, acceptData.getSystem()); if (acceptData.getPlatform().equalsIgnoreCase("ios")) { if (Constant.IOSTest) { if (acceptData.getVersion() == 1) { list = new ArrayList<>(); } } } List list1 = solrInternetSearchVideoDataManager.getSuggestKeyList(key); if (list1 != null) { list.addAll(list1); } Set set = new HashSet<>(); if (list != null) { for (String st : list) { set.add(st); } list.clear(); list.addAll(set); } //按关键词的匹配度排序 Comparator cm = new Comparator() { @Override public int compare(String o1, String o2) { float s1 = CompareStrSimUtil.getSimilarityRatio(o1, key, true); float s2 = CompareStrSimUtil.getSimilarityRatio(o2, key, true); return s2 > s1 ? 1 : -1; } }; Collections.sort(list, cm); JSONObject object = new JSONObject(); object.put("count", list.size() + ""); JSONArray array = new JSONArray(); for (int i = 0; i < list.size(); i++) { if (i < 10) array.add(StringUtil.outPutResultJson(list.get(i))); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } private List createSearchVideoDetailsVO(VideoInfo video) { List detailList = new ArrayList<>(); if (video.getVideoType() != null && (Integer.parseInt(video.getVideoType().getId() + "") == VideoCategoryConstant.CATEGORY_DIANSHIJU || Integer.parseInt(video.getVideoType().getId() + "") == VideoCategoryConstant.CATEGORY_DONGMAN)) { if (video.getVideocount() != null && video.getVideocount() <= 5) { for (int i = 0; i < video.getVideocount(); i++) { VideoDetailInfo detail = new VideoDetailInfo(); detail.setTag((i + 1) + ""); detailList.add(detail); } } else { for (int i = 0; i < 3; i++) { VideoDetailInfo detail = new VideoDetailInfo(); detail.setTag((i + 1) + ""); detailList.add(detail); } for (int i = video.getVideocount() - 3; i < video.getVideocount(); i++) { VideoDetailInfo detail = new VideoDetailInfo(); detail.setTag((i + 1) + ""); detailList.add(detail); } } } return detailList; } // 搜索 public void search(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String key = request.getParameter("Key"); String type = request.getParameter("Type"); String page = request.getParameter("Page"); String videoType = request.getParameter("VideoType"); String contentType = request.getParameter("ContentType"); if (StringUtil.isNullOrEmpty(key)) { out.print(JsonUtil.loadFalseJson("请上传Key")); return; } if (StringUtil.isNullOrEmpty(type)) { out.print(JsonUtil.loadFalseJson("请上传Type")); return; } int pageIndex = StringUtil.getPage(page); if (pageIndex <= 0) { pageIndex = 1; } DetailSystem detailSystem = systemService.getDetailSystemByPackage(acceptData.getPackageName()); UserInfo user1 = userService.getUserInfo(acceptData.getUid()); if (Utils.isTest(request, user1, detailSystem.getId())) { detailSystem = systemService.getDetailSystemById(40 + ""); JSONObject object = new JSONObject(); object.put("count", 0); JSONArray array = new JSONArray(); object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } else { List resourceList = videoResouceUtil.getAvailableResourceIds(detailSystem, acceptData.getVersion(), acceptData.getChannel()); String cacheMD5 = "0"; if (resourceList != null && resourceList.size() > 0) for (Long l : resourceList) cacheMD5 += "#" + l; cacheMD5 = StringUtil.Md5(cacheMD5); List list = searchService.search(detailSystem.getId(), request.getRemoteAddr(), acceptData.getUid(), key, pageIndex, (StringUtil.isNullOrEmpty(contentType) ? 0 : Integer.parseInt(contentType)), acceptData.getSystem(), resourceList, cacheMD5); //组织数据 for (VideoInfo video : list) { //如果是正片,且为5大分类 就采用竖条展示 if (video.getShowType() == 1) { video.setVideoDetailList(createSearchVideoDetailsVO(video)); } } cacheMD5 = "0"; if (list != null) { for (VideoInfo info : list) { cacheMD5 += info.getId() + "#"; } } list = banQuanService.getBanQuanVideo(list, detailSystem.getId(), cacheMD5); JSONObject object = new JSONObject(); object.put("count", Constant.isUpdate ? 19 + "" : list.size()); JSONArray array = new JSONArray(); for (int i = 0; i < list.size(); i++) { if (JuheVideoUtil.isNeedDelete((VideoInfo) list.get(i), detailSystem.getId())) { list.remove(i); i--; } } List keyList = banQuanService.getBanQuanKeyListAll(Integer.parseInt(detailSystem.getId())); for (int i = 0; i < list.size(); i++) { boolean delete = false; for (int j = 0; j < keyList.size(); j++) { if (list.get(i).getName().contains(keyList.get(j))) { delete = true; break; } } if (delete) { list.remove(i); i--; } } for (int i = 0; i < list.size(); i++) { ((VideoInfo) list.get(i)) .setPicture(VideoPictureUtil.getShowPicture((VideoInfo) list.get(i), acceptData.getPlatform(), acceptData.getVersion() + "")); array.add(StringUtil.outPutResultJson(list.get(i))); } object.put("data", array); if (pageIndex == 1) {//返回导航栏 } out.print(JsonUtil.loadTrueJson(object.toString())); } } // 搜索 public void searchNew(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { //type: 0-全部 1- String key = request.getParameter("Key"); String type = request.getParameter("Type"); String page = request.getParameter("Page"); if (StringUtil.isNullOrEmpty(key)) { out.print(JsonUtil.loadFalseJson("请上传Key")); return; } if (StringUtil.isNullOrEmpty(type)) { out.print(JsonUtil.loadFalseJson("请上传Type")); return; } final String id = StringUtil.Md5(String.format("%s#%s#%s#%s", acceptData.getDetailSystem().getId(), acceptData.getDevice(), key, type)); ThreadUtil.run(new Runnable() { @Override public void run() { String redisKey = "search-" + id; Jedis jedis = redisManager.getJedis(); try { //重复请求过滤 if (jedis.setnx(redisKey, "1") <= 0) { return; } jedis.expire(redisKey, 120); JSONObject searchData = new JSONObject(); searchData.put("key", key); searchData.put("type", type); searchData.put("detailSystemId", acceptData.getDetailSystem().getId()); searchData.put("device", acceptData.getDevice()); searchData.put("createTime", System.currentTimeMillis()); searchKeyLogger.info(new Gson().toJson(searchData)); } finally { jedis.close(); } } }); LoggerUtil.getUserActiveLogger().info(UserActiveLogFactory.createSearch(new BaseLog(acceptData, ""), key, type)); int pageIndex = StringUtil.getPage(page); if (pageIndex <= 0) { pageIndex = 1; } List resourceList = videoResouceUtil.getAvailableResourceIds(acceptData.getDetailSystem(), acceptData.getVersion(), acceptData.getChannel()); String cacheMD5 = "0"; if (resourceList != null && resourceList.size() > 0) for (Long l : resourceList) cacheMD5 += "#" + l; cacheMD5 = StringUtil.Md5(cacheMD5); VideoListResultVO videoListResultVO = searchService.searchNew(acceptData.getDetailSystem().getId(), request.getRemoteAddr(), acceptData.getUid(), key, pageIndex, Integer.parseInt(type), acceptData.getSystem(), resourceList, cacheMD5); //组织数据 for (VideoInfo video : videoListResultVO.getVideoList()) { //如果是正片,且为5大分类 就采用竖条展示 if (video.getShowType() == 1) { video.setVideoDetailList(createSearchVideoDetailsVO(video)); } } cacheMD5 = "0"; if (videoListResultVO.getVideoList() != null) { for (VideoInfo info : videoListResultVO.getVideoList()) { cacheMD5 += info.getId() + "#"; } } List list = banQuanService.getBanQuanVideo(videoListResultVO.getVideoList(), acceptData.getDetailSystem().getId(), cacheMD5); JSONObject object = new JSONObject(); object.put("count", Constant.isUpdate ? 19 + "" : videoListResultVO.getCount()); JSONArray array = new JSONArray(); for (int i = 0; i < list.size(); i++) { if (JuheVideoUtil.isNeedDelete((VideoInfo) list.get(i), acceptData.getDetailSystem().getId())) { list.remove(i); i--; } } if (pageIndex == 1) {//返回导航栏 List typeList = new ArrayList<>(); VideoType vt = new VideoType(); vt.setId(0); vt.setName("全部"); typeList.add(vt); List set = new ArrayList<>(); //将视频内容分类并排序 Map> videoMap = new HashMap<>(); for (int i = 0; i < list.size(); i++) { VideoInfo videoInfo = list.get(i); if (videoInfo.getShowType() == 1 && videoInfo.getVideoType() != null) { if (videoMap.get(videoInfo.getVideoType().getId()) == null) videoMap.put(videoInfo.getVideoType().getId(), new ArrayList<>()); videoMap.get(videoInfo.getVideoType().getId()).add(videoInfo); if (!set.contains(videoInfo.getVideoType().getId())) set.add(videoInfo.getVideoType().getId()); if (VersionUtil.isGraterThan390(acceptData.getPlatform(), acceptData.getVersion()) && (StringUtil.isNullOrEmpty(type) || type.equalsIgnoreCase("0"))) { list.remove(i); i--; } } } //重新组织数据 if (VersionUtil.isGraterThan390(acceptData.getPlatform(), acceptData.getVersion()) && (StringUtil.isNullOrEmpty(type) || type.equalsIgnoreCase("0"))) { List albumVideoList = new ArrayList<>(); for (int i = 0; i < set.size(); i++) { Long typeId = set.get(i); String typeName = VideoConstant.getMainCategoryName(typeId); if (!StringUtil.isNullOrEmpty(typeName)) { videoMap.get(typeId).get(0).setAlbumMoreInfo(new VideoInfo.VideoAlbumMoreInfo(typeName, i + 1)); albumVideoList.addAll(videoMap.get(typeId)); } } list.addAll(0, albumVideoList); } for (int i = 0; i < set.size(); i++) { Long typeId = set.get(i); String typeName = VideoConstant.getMainCategoryName(typeId); if (!StringUtil.isNullOrEmpty(typeName)) { vt = new VideoType(); vt.setId(typeId); vt.setName(typeName); typeList.add(vt); } } //韩剧不返回高清 if (!acceptData.getDetailSystem().getId().equalsIgnoreCase("48")) { vt = new VideoType(); vt.setId(Constant.SEARCH_RESULT_TYPE_HIGH_DEFINITION); vt.setName("高清"); typeList.add(vt); } JSONArray array1 = new JSONArray(); for (VideoType vt1 : typeList) array1.add(StringUtil.outPutResultJson(vt1)); object.put("typeList", array1); } for (int i = 0; i < list.size(); i++) { ((VideoInfo) list.get(i)) .setPicture(VideoPictureUtil.getShowPicture((VideoInfo) list.get(i), acceptData.getPlatform(), acceptData.getVersion() + "")); array.add(StringUtil.outPutResultJson(list.get(i))); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } @Resource private InternetSearchVideoService internetSearchVideoService; private void guessLikeForInternetSearch(AcceptData acceptData, String videoId, PrintWriter out) { InternetSearchVideo internetSearchVideo = internetSearchVideoService.selectByPrimaryKey(videoId); if (internetSearchVideo != null) { int rootType = internetSearchVideo.getRootType(); SolrVideoSearchFilter filter = new SolrVideoSearchFilter(); filter.setVideoType(rootType); filter.setResourceIds(Arrays.asList(new String[]{PPTVUtil.RESOURCE_ID + ""})); filter.setSortKey("watchcount"); SolrResultDTO dto = solrDataManager.find(filter, 1, 20); List solrAlbumVideoList = new ArrayList<>(); solrAlbumVideoList.addAll(dto.getVideoList()); List list = new ArrayList<>(); for (int i = 0; i < 4; i++) { if (solrAlbumVideoList.size() > 0) { int p = (int) (Math.random() * solrAlbumVideoList.size()); SolrAlbumVideo solrAlbumVideo = solrAlbumVideoList.get(p); list.add(VideoInfoFactory.create(solrAlbumVideo)); solrAlbumVideoList.remove(p); } } if (list.size() < 4) { filter.setResourceIds(null); dto = solrDataManager.find(filter, 1, 20); solrAlbumVideoList.clear(); solrAlbumVideoList.addAll(dto.getVideoList()); for (int i = list.size(); i < 4; i++) { if (solrAlbumVideoList.size() > 0) { int p = (int) (Math.random() * solrAlbumVideoList.size()); SolrAlbumVideo solrAlbumVideo = solrAlbumVideoList.get(p); list.add(VideoInfoFactory.create(solrAlbumVideo)); solrAlbumVideoList.remove(p); } } } JSONObject object = new JSONObject(); object.put("count", list.size() + ""); JSONArray array = new JSONArray(); for (int i = 0; i < list.size(); i++) { array.add(StringUtil.outPutResultJson(list.get(i))); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } } private void guessLikeForShortVideo(AcceptData acceptData, String videoId, PrintWriter out) { SolrShortVideo solrShortVideo = solrShortVideoDataManager.findOne(videoId); SolrShortVideoSearchFilter filter = new SolrShortVideoSearchFilter(); filter.setRootVideoType(solrShortVideo.getRootVideoType()); if (solrShortVideo.getArea() != null) { filter.setAreas(Arrays.asList(solrShortVideo.getArea().split(","))); } SolrResultDTO dto = solrShortVideoDataManager.find(filter, 1, 10); JSONObject object = new JSONObject(); object.put("count", dto.getVideoList().size() + ""); JSONArray array = new JSONArray(); for (int i = 0; i < dto.getVideoList().size(); i++) { SolrShortVideo temp = (SolrShortVideo) dto.getVideoList().get(i); if (temp.getId().equalsIgnoreCase(videoId)) continue; array.add(StringUtil.outPutResultJson(VideoInfoFactory.create(temp))); } if (array.size() % 2 != 0) { array.remove(array.size() - 1); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } // 猜你喜欢 public void guessLike(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String videoId = request.getParameter("VideoId"); int fromtype = VideoUtil.getVideoFromType(videoId); switch (fromtype) { case HomeVideo.FROM_TYPE_INTERNET: guessLikeForInternetSearch(acceptData, videoId, out); return; case HomeVideo.FROM_TYPE_SHORT: guessLikeForShortVideo(acceptData, videoId, out); return; } DetailSystem ds = systemService.getDetailSystemByPackage(acceptData.getPackageName()); List resourceList = videoResouceUtil.getAvailableResourceIds(acceptData.getDetailSystem(), acceptData.getVersion(), acceptData.getChannel()); List list1 = StringUtil.isNullOrEmpty(videoId) ? recommendService.guessLikeList(ds.getId(), 4, resourceList, CacheUtil.getMD5Long(resourceList)) : recommendService.guessLikeList(ds.getId(), 4, videoId, resourceList, CacheUtil.getMD5Long(resourceList)); if ("ios".equalsIgnoreCase(acceptData.getPlatform())) { // 过审核时使用 list1 = videoInfoService.simpleRandomVideoList(4); } List list = new ArrayList<>(); list.addAll(list1); if ("android".equalsIgnoreCase(acceptData.getPlatform()) && acceptData.getVersion() < 35) { if (list.size() > 3) list = list.subList(0, 3); } else if ("ios".equalsIgnoreCase(acceptData.getPlatform()) && acceptData.getVersion() < 15) { if (list.size() > 3) list = list.subList(0, 3); } JSONObject object = new JSONObject(); object.put("count", list.size() + ""); JSONArray array = new JSONArray(); for (int i = 0; i < list.size(); i++) { if (list.get(i).getPicture().contains("qiyi")) list.get(i).setPicture(list.get(i).getPicture().replace(".jpg", "_260_360.jpg")); array.add(StringUtil.outPutResultJson(list.get(i))); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } // 获取热门搜索 public void getHotSearch(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { DetailSystem detailSystem = systemService.getDetailSystemByPackage(acceptData.getPackageName()); List list = searchService.getHotSearchList(detailSystem.getId()); JSONObject object = new JSONObject(); object.put("count", list.size() + ""); JSONArray array = new JSONArray(); for (int i = 0; i < list.size(); i++) { array.add(StringUtil.outPutResultJson(list.get(i))); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } //新版热门搜索 public void getHotSearchNew(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { DetailSystemConfig config = configService.getConfigByKey("hot_search", acceptData.getDetailSystem(), acceptData.getVersion()); if (config == null) { out.print(JsonUtil.loadFalseJson("无内容")); return; } String value = config.getValue(); Type type = new TypeToken>() { }.getType(); List list = new Gson().fromJson(value, type); JSONObject object = new JSONObject(); object.put("count", list.size() + ""); JSONArray array = new JSONArray(); for (int i = 0; i < list.size(); i++) { array.add(list.get(i)); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } //获取搜索排行榜 public void getSearchRank(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { // try { // Map> map = IqiyiRankUtil.getRank(10); // } catch (IOException e) { // e.printStackTrace(); // } //搜索排行 String value = systemConfigService.getConfigValueByKeyCache("searchRank"); Map map = new TreeMap<>(); if (!StringUtil.isNullOrEmpty(value)) { JSONObject root = JSONObject.fromObject(value); for (Iterator its = root.keys(); its.hasNext(); ) { String key = its.next(); JSONArray array = root.optJSONArray(key); JSONObject data = new JSONObject(); switch (key) { case "热搜": data.put("热搜榜", array); map.put(0, data); break; case "电视剧": data.put("电视剧榜", array); map.put(1, data); break; case "电影": data.put("电影榜", array); map.put(2, data); break; case "综艺": data.put("综艺榜", array); map.put(3, data); break; case "动漫": data.put("动漫榜", array); map.put(4, data); break; } } } JSONObject data = new JSONObject(); for (Iterator its = map.keySet().iterator(); its.hasNext(); ) { Integer key = its.next(); JSONObject item = map.get(key); String k = item.keys().next().toString(); data.put(k, item.optJSONArray(k)); } JSONObject object = new JSONObject(); object.put("data", data); out.print(JsonUtil.loadTrueJson(object.toString())); } // 获取用户信息 public void getUserInfo(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { UserData data = userService.getUserData(acceptData.getUid()); out.print(JsonUtil.loadTrueJson(StringUtil.outPutResultJson(data))); } @RequireUid // 获取收藏的视频 public void getCollectedVideo(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String page = request.getParameter("Page"); String loginUid = request.getParameter("LoginUid"); int pageIndex = StringUtil.getPage(page); if (pageIndex <= 0) { out.print(JsonUtil.loadFalseJson("请上传Page")); return; } List list = collectionService.getCollectVideo(acceptData.getUid(), loginUid, pageIndex); JSONObject object = new JSONObject(); object.put("count", collectionService.getCollectVideoCount(acceptData.getUid()) + ""); JSONArray array = new JSONArray(); for (int i = 0; i < list.size(); i++) { array.add(StringUtil.outPutResultJson(list.get(i))); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } // 搜藏送积分 @RequireUid public void getScoreCollect(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String videoId = request.getParameter("VideoId"); String type = request.getParameter("Type"); String thirdType = request.getParameter("ThirdType"); String loginUid = request.getParameter("LoginUid"); if (StringUtil.isNullOrEmpty(videoId)) { out.print(JsonUtil.loadFalseJson("请上传VideoId")); return; } if (StringUtil.isNullOrEmpty(type)) { out.print(JsonUtil.loadFalseJson("请上传Type")); return; } if (type.equalsIgnoreCase("1")) {// 收藏 ScoreHelper helper = new ScoreHelper(); if (collectionService.isCollect(acceptData.getUid(), videoId)) { helper.setScore("0"); } else { VideoInfo vf = new VideoInfo(); vf.setId(videoId); Collection c = new Collection(); c.setUser(new UserInfo(acceptData.getUid())); if (!StringUtil.isNullOrEmpty(loginUid)) { c.setLoginUser(new LoginUser(loginUid)); } c.setVideo(vf); c.setThirdType(thirdType); c.setCreatetime((new StringBuilder(String.valueOf(System.currentTimeMillis()))).toString()); collectionService.saveCollection(c); } JSONObject object = new JSONObject(); object.put("GetScore", helper.getScore()); object.put("TotalScore", helper.getTotalScore()); out.print(JsonUtil.loadTrueJson(object.toString())); } else// 取消收藏 { String[] videoIds = videoId.split(","); String[] thirdTypes = thirdType.split(","); collectionService.cancelCollect(acceptData.getUid(), loginUid, videoIds, thirdTypes); out.print(JsonUtil.loadTrueJson("")); } } public void getUserBanner(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { DetailSystem detailSystem = systemService.getDetailSystemByPackage(acceptData.getPackageName()); List list = userBannerService.getUserBannerList(detailSystem.getId()); long count = list.size(); JSONObject object = new JSONObject(); object.put("count", count + ""); JSONArray array = new JSONArray(); for (int i = 0; i < list.size(); i++) { array.add(StringUtil.outPutResultJson(list.get(i))); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } @RequireUid public void updateUserInfo(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String portrait = request.getParameter("Portrait"); String nickname = request.getParameter("Nickname");// 昵称 UserInfo user = userService.getUserInfo(acceptData.getUid()); if (!StringUtil.isNullOrEmpty(portrait)) user.setPortrait(portrait); if (!StringUtil.isNullOrEmpty(nickname)) user.setNickname(nickname); userService.updateUserInfo(user); out.print(JsonUtil.loadTrueJson("")); } private void getRelativeVideosForInternetSearch(AcceptData acceptData, String videoId, PrintWriter out) { InternetSearchVideo internetSearchVideo = internetSearchVideoService.selectByPrimaryKey(videoId); if (internetSearchVideo != null) { SolrVideoSearchFilter filter = new SolrVideoSearchFilter(); filter.setKey(internetSearchVideo.getName()); filter.setFuzzy(true); SolrResultDTO dto = solrDataManager.find(filter, 1, 20); List solrAlbumVideoList = new ArrayList<>(); solrAlbumVideoList.addAll(dto.getVideoList()); List list = new ArrayList<>(); for (int i = 0; i < 4; i++) { if (i < solrAlbumVideoList.size()) { SolrAlbumVideo solrAlbumVideo = solrAlbumVideoList.get(i); list.add(VideoInfoFactory.create(solrAlbumVideo)); } } JSONObject object = new JSONObject(); object.put("count", list.size() + ""); JSONArray array = new JSONArray(); for (int i = 0; i < list.size(); i++) { array.add(StringUtil.outPutResultJson(list.get(i))); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } } private void getRelativeVideosForShortVideo(AcceptData acceptData, String videoId, PrintWriter out) { SolrShortVideo solrShortVideo = solrShortVideoDataManager.findOne(videoId); SolrShortVideoSearchFilter filter = new SolrShortVideoSearchFilter(); filter.setKey(solrShortVideo.getName()); filter.setFuzzy(true); SolrResultDTO dto = solrShortVideoDataManager.find(filter, 1, 10); JSONObject object = new JSONObject(); object.put("count", dto.getVideoList().size() + ""); JSONArray array = new JSONArray(); for (int i = 0; i < dto.getVideoList().size(); i++) { SolrShortVideo temp = (SolrShortVideo) dto.getVideoList().get(i); if (temp.getId().equalsIgnoreCase(videoId)) continue; array.add(StringUtil.outPutResultJson(VideoInfoFactory.create(temp))); } if (array.size() % 2 != 0) { array.remove(array.size() - 1); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } /** * 相关视频 * * @param request * @ */ public void getRelativeVideos(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String videoId = request.getParameter("VideoId"); if (StringUtil.isNullOrEmpty(videoId)) { out.print(JsonUtil.loadFalseJson("请上传VideoId")); return; } int fromtype = VideoUtil.getVideoFromType(videoId); switch (fromtype) { case HomeVideo.FROM_TYPE_INTERNET: getRelativeVideosForInternetSearch(acceptData, videoId, out); return; case HomeVideo.FROM_TYPE_SHORT: getRelativeVideosForShortVideo(acceptData, videoId, out); return; } List resourceList = videoResouceUtil.getAvailableResourceIds(acceptData.getDetailSystem(), acceptData.getVersion(), acceptData.getChannel()); DetailSystem ds = systemService.getDetailSystemByPackage(acceptData.getPackageName()); List list = recommendService.getRelativeVideoList(ds.getId(), 4, videoId, resourceList, CacheUtil.getMD5Long(resourceList)); if ("android".equalsIgnoreCase(acceptData.getPlatform()) && acceptData.getVersion() < 35) { if (list.size() > 3) list = list.subList(0, 3); } else if ("ios".equalsIgnoreCase(acceptData.getPlatform()) && acceptData.getVersion() < 15) { if (list.size() > 3) list = list.subList(0, 3); } JSONObject object = new JSONObject(); object.put("count", list.size() + ""); JSONArray array = new JSONArray(); for (int i = 0; i < list.size(); i++) { array.add(StringUtil.outPutResultJson(list.get(i))); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } /** * 大家都在看 * * @param request * @ */ public void getPeopleSeeVideos(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String videoId = request.getParameter("VideoId"); if (StringUtil.isNullOrEmpty(videoId)) { out.print(JsonUtil.loadFalseJson("请上传VideoId")); return; } List resourceList = videoResouceUtil.getAvailableResourceIds(acceptData.getDetailSystem(), acceptData.getVersion(), acceptData.getChannel()); DetailSystem ds = systemService.getDetailSystemByPackage(acceptData.getPackageName()); List list1 = recommendService.peopleSee(ds.getId(), 4, videoId, resourceList, CacheUtil.getMD5Long(resourceList)); if ("ios".equalsIgnoreCase(acceptData.getPlatform())) { // 过审核时使用 list1 = videoInfoService.simpleRandomVideoList(4); } List list = new ArrayList<>(); list.addAll(list1); if ("android".equalsIgnoreCase(acceptData.getPlatform()) && acceptData.getVersion() < 35) { if (list.size() > 3) list = list.subList(0, 3); } else if ("ios".equalsIgnoreCase(acceptData.getPlatform()) && acceptData.getVersion() < 15) { if (list.size() > 3) list = list.subList(0, 3); } JSONObject object = new JSONObject(); object.put("count", list.size() + ""); JSONArray array = new JSONArray(); for (int i = 0; i < list.size(); i++) { array.add(StringUtil.outPutResultJson(list.get(i))); } object.put("data", array); out.print(JsonUtil.loadTrueJson(object.toString())); } /** * 注册 * * @param request * @param out */ public void register(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String account = request.getParameter("Email");// 邮箱 String pwd = request.getParameter("Pwd");// 密码 String nickName = request.getParameter("NickName");// 昵称 String code = request.getParameter("VerifyCode");// 验证码 String portrait = request.getParameter("Portrait");// 验证码 if (StringUtil.isNullOrEmpty(account)) { out.print(JsonUtil.loadFalseJson("请上传Email")); return; } if (StringUtil.isNullOrEmpty(pwd)) { out.print(JsonUtil.loadFalseJson("请上传Pwd")); return; } if (StringUtil.isNullOrEmpty(code)) { out.print(JsonUtil.loadFalseJson("请上传VerifyCode")); return; } if (!code.equalsIgnoreCase(request.getSession().getAttribute(account) + "")) { out.print(JsonUtil.loadFalseJson("验证码错误")); return; } if (!StringUtil.isNullOrEmpty(account) && !account.trim().endsWith("@qq.com")) { out.print(JsonUtil.loadFalseJson("只支持QQ邮箱注册")); return; } int port = request.getRemotePort(); String ip = getIp(request); if (StringUtil.isNullOrEmpty(nickName)) nickName = "无名氏"; LoginInfoDto loginInfoDto = new LoginInfoDto(); loginInfoDto.setEmail(account); loginInfoDto.setSystemId(acceptData.getDetailSystem().getSystem().getId()); loginInfoDto.setLoginType(LoginUser.LOGIN_TYPE_EMAIL); loginInfoDto.setPwd(StringUtil.Md5(pwd)); loginInfoDto.setIpInfo(ip + ":" + port); loginInfoDto.setNickName(nickName); try { userService.register(loginInfoDto); out.print(JsonUtil.loadTrueJson("注册成功")); } catch (RegisterUserException e) { out.print(JsonUtil.loadFalseJson(e.getMessage())); } } /** * 发送验证码 * * @param request * @param out */ public void sendVerifyCode(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { final String account = request.getParameter("Email");// 邮箱 if (StringUtil.isNullOrEmpty(account)) { out.print(JsonUtil.loadFalseJson("请上传Email")); return; } if (!StringUtil.isNullOrEmpty(account) && !account.trim().endsWith("@qq.com")) { out.print(JsonUtil.loadFalseJson("只支持QQ邮箱注册")); return; } final String code = StringUtil.getVerifyCode(); request.getSession().setAttribute(account, code); // new Thread(new Runnable() { // public void run() { // for (int i = 0; i < 3; i++) { DetailSystem detailSystem = systemService.getDetailSystemByPackage(acceptData.getPackageName()); String title = "布丸社区注册验证码:" + code; String content = "布丸社区注册验证码:" + code; if (!detailSystem.getAppName().contains("布丸")) { String name = detailSystem.getAppName(); title = name + "验证码:" + code; content = title; } boolean isS = MailSenderUtil.sendEmail(account, "ysyz17784739772@126.com", "weikou2014", title, content); // } // }).start(); out.print(JsonUtil.loadTrueJson("验证码发送成功")); } /** * 登录 * * @param request * @param out */ public void login(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String account = request.getParameter("Email");// 邮箱 String pwd = request.getParameter("Pwd");// 密码 if (StringUtil.isNullOrEmpty(account)) { out.print(JsonUtil.loadFalseJson("请上传Email")); return; } if (StringUtil.isNullOrEmpty(pwd)) { out.print(JsonUtil.loadFalseJson("请上传Pwd")); return; } // DetailSystem ds = // systemService.getDetailSystemByPackage(packageName); // 注册 --用户名,昵称,密码 LoginInfoDto loginInfoDto = new LoginInfoDto(); loginInfoDto.setLoginType(LoginUser.LOGIN_TYPE_EMAIL); loginInfoDto.setSystemId(acceptData.getDetailSystem().getSystem().getId()); loginInfoDto.setEmail(account); loginInfoDto.setPwd(StringUtil.Md5(pwd)); loginInfoDto.setIpInfo(IPUtil.getRemotIP(request) + ":" + request.getRemotePort()); try { LoginUser user = userService.login(loginInfoDto); out.print(JsonUtil.loadTrueJson(StringUtil.outPutResultJson(user))); } catch (LoginUserException e) { out.print(JsonUtil.loadFalseJson(e.getMessage())); } } /** * 更改用户信息 * * @param request * @param out */ public void updateLoginUserInfo(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String nickName = request.getParameter("NickName");// 昵称 String sex = request.getParameter("Sex");// 性别 0-女 1-男 String birthDay = request.getParameter("BirthDay");// 生日 String personalSign = request.getParameter("PersonalSign");// 个性签名 String loginUid = request.getParameter("LoginUid");// 个性签名 String portrait = request.getParameter("Portrait"); if (StringUtil.isNullOrEmpty(loginUid)) { out.print(JsonUtil.loadFalseJson("请上传LoginUid")); return; } // 注册 --用户名,昵称,密码 LoginUser user = userService.getLoginUser(loginUid); if (user != null) { if (!StringUtil.isNullOrEmpty(nickName)) user.setName(nickName); String potrait = savePortrait(portrait, request.getSession()); if (!StringUtil.isNullOrEmpty(potrait)) user.setPortrait(potrait); if (!StringUtil.isNullOrEmpty(sex)) user.setSex(sex); if (!StringUtil.isNullOrEmpty(acceptData.getSign())) user.setSign(personalSign); if (!StringUtil.isNullOrEmpty(birthDay)) user.setBirthday(birthDay); userService.updateLoginUserInfo(user); } out.print(JsonUtil.loadTrueJson("修改成功")); } /** * 获取用户信息 * * @param request * @param out */ public void getLoginUserInfo(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String loginUid = request.getParameter("LoginUid");// 个性签名 if (StringUtil.isNullOrEmpty(loginUid)) { out.print(JsonUtil.loadFalseJson("请上传LoginUid")); return; } // 注册 --用户名,昵称,密码 LoginUser user = userService.getLoginUser(loginUid); if (user.getState() != null && user.getState() == LoginUser.STATE_UNREGISTER) { out.print(JsonUtil.loadFalseJson("账户已注销")); return; } //隐藏user中的email user.setEmail(UserInfoVOFactory.getHiddenEmail(user.getEmail())); if (user.getPortrait() != null && !user.getPortrait().startsWith("http")) user.setPortrait("http://" + Constant.WEBSITE + "/BuWan" + user.getPortrait()); out.print(JsonUtil.loadTrueJson(StringUtil.outPutResultJson(user))); } /** * 设置密码 * * @param request * @param out */ public void setPwd(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String email = request.getParameter("Email");// 个性签名 String pwd = request.getParameter("Pwd");// 密码 String verifyCode = request.getParameter("VerifyCode");// 验证码 if (StringUtil.isNullOrEmpty(email)) { out.print(JsonUtil.loadFalseJson("请上传Email")); return; } if (StringUtil.isNullOrEmpty(pwd)) { out.print(JsonUtil.loadFalseJson("请上传Pwd")); return; } if (StringUtil.isNullOrEmpty(verifyCode)) { out.print(JsonUtil.loadFalseJson("请上传VerifyCode")); return; } if (!verifyCode.equalsIgnoreCase(request.getSession().getAttribute(email) + "")) { out.print(JsonUtil.loadFalseJson("验证码错误")); return; } // 注册 --用户名,昵称,密码 LoginUser user = userService.getLoginUserByOpenId(email); if (user == null) { out.print(JsonUtil.loadFalseJson("该用户不存在")); } else { user.setPwd(StringUtil.Md5(pwd)); userService.updateLoginUserInfo(user); out.print(JsonUtil.loadTrueJson("密码设置成功")); } } /** * 设置密码 * * @param request * @param out */ public void unRegister(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { // 包名 String callback = request.getParameter("callback"); String loginUid = request.getParameter("LoginUid"); if (StringUtil.isNullOrEmpty(loginUid)) { out.print(callback + "(" + JsonUtil.loadFalseJson("用户尚未登录", false) + ")"); return; } // 注册 --用户名,昵称,密码 try { userService.unRegister(Long.parseLong(loginUid)); out.print(callback + "(" + JsonUtil.loadTrueJson("注销成功", false) + ")"); } catch (Exception e) { out.print(callback + "(" + JsonUtil.loadFalseJson(e.getMessage(), false) + ")"); } } public static String savePortrait(String base64, HttpSession session) { if (StringUtil.isNullOrEmpty(base64)) return ""; String fileName = "portrait_" + System.currentTimeMillis() + ".jpg"; // 定义上传路径 String path = session.getServletContext().getRealPath("upload") + "/" + fileName; if (!new File(session.getServletContext().getRealPath("upload") + "/").exists()) new File(session.getServletContext().getRealPath("upload") + "/").mkdirs(); boolean isS = StringUtil.generateImageFromBase64(base64, path); if (!isS) return ""; try { String result = COSManager.getInstance().uploadFile(new File(path), fileName); if (!StringUtil.isNullOrEmpty(result)) return result; } catch (IllegalStateException e) { e.printStackTrace(); } return ""; } public void getIPInfo(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("X-Real-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } out.print(ip + "-----" + IPUtil.getIPContry(request.getRemoteAddr())); } public static String getIp(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } }