| | |
| | | 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.manager.SolrDataManager; |
| | | 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.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.lang.reflect.Type; |
| | | import java.util.*; |
| | | |
| | | @Controller |
| | | public class UserParser { |
| | | |
| | | Logger searchKeyLogger = LoggerFactory.getLogger("searchKey"); |
| | | |
| | | |
| | | @Resource |
| | | private SystemService systemService; |
| | | @Resource |
| | | private ConfigService configService; |
| | | private DetailSystemConfigService configService; |
| | | @Resource |
| | | private UserService userService; |
| | | @Resource |
| | |
| | | private BanQuanService banQuanService; |
| | | @Resource |
| | | private VideoInfoService videoInfoService; |
| | | @Resource |
| | | private SolrAlbumVideoDataManager solrDataManager; |
| | | @Resource |
| | | private SolrInternetSearchVideoDataManager solrInternetSearchVideoDataManager; |
| | | |
| | | @Resource |
| | | private SolrDataManager solrDataManager; |
| | | 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()); |
| | |
| | | object.put("Uid", uid); |
| | | object.put("Portrait", userInfo.getPortrait()); |
| | | object.put("Nickname", userInfo.getNickname()); |
| | | object.put("TopIcon", map.get("top_icon")); |
| | | |
| | | object.put("ZiXun", map.get("zixun_url")); |
| | | if (acceptData.getPlatform().equalsIgnoreCase("ios") && !"中国".equalsIgnoreCase(userInfo.getCountry()))// 正在审核的版本 |
| | | object.put("CommentUrl", ""); |
| | | else |
| | | else if (share != null) |
| | | object.put("CommentUrl", share.getShareUrl()); |
| | | object.put("IOSSlotID", ""); |
| | | |
| | |
| | | object.put("WXShareIcon", map.get("wx_share_icon")); |
| | | object.put("WXShareUrl", map.get("wx_share_url")); |
| | | object.put("WXShareContent", map.get("wx_share_content")); |
| | | object.put("TuiGuang", map.get("taobao_tuiguang")); |
| | | |
| | | 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()); |
| | | |
| | |
| | | object.put("shopurl", map.get("shopurl")); |
| | | object.put("copyplate", map.get("copy_plate")); |
| | | |
| | | // 是否广告点击下载 |
| | | if ("huawei".equalsIgnoreCase(acceptData.getChannel()) |
| | | && acceptData.getVersion() >= Integer.parseInt(map.get("ad_click_download_version"))) { |
| | | //开关设置 |
| | | 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 |
| | | } else { |
| | | object.put("adClickDownload", false); |
| | | } |
| | | |
| | | |
| | | // 广告类型 |
| | | object.put("adType", map.get("ad_type")); |
| | | |
| | | int fullVideoVersion = Integer.parseInt(map.get("video_detail_full_video_version")); |
| | | String fullVideoVersionChannels = map.get("video_detail_full_video_version_channel"); |
| | | JSONObject json = JSONObject.fromObject(fullVideoVersionChannels); |
| | | if (json.optInt(acceptData.getChannel().toLowerCase(), 0) > 0) { |
| | | fullVideoVersion = json.optInt(acceptData.getChannel().toLowerCase(), 0); |
| | | } |
| | | // String fullVideoVersionChannels = map.get("video_detail_full_video_version_channel"); |
| | | // JSONObject json = JSONObject.fromObject(fullVideoVersionChannels); |
| | | // if (json.optInt(acceptData.getChannel().toLowerCase(), 0) > 0) { |
| | | // } |
| | | |
| | | if (acceptData.getVersion() >= fullVideoVersion) {// 是否屏蔽详情页全屏广告 |
| | | |
| | | 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()); |
| | |
| | | if (acceptData.getPlatform().equalsIgnoreCase("ios")) { |
| | | if (Constant.IOSTest) { |
| | | if (acceptData.getVersion() == 1) { |
| | | list = new ArrayList<String>(); |
| | | list = new ArrayList<>(); |
| | | } |
| | | } |
| | | } |
| | | List<String> list1 = solrInternetSearchVideoDataManager.getSuggestKeyList(key); |
| | | if (list1 != null) { |
| | | list.addAll(list1); |
| | | } |
| | | |
| | | Set<String> set = new HashSet<>(); |
| | | |
| | | if (list != null) { |
| | | for (String st : list) { |
| | | set.add(st); |
| | | } |
| | | list.clear(); |
| | | list.addAll(set); |
| | | } |
| | | |
| | | //按关键词的匹配度排序 |
| | | Comparator<String> cm = new Comparator<String>() { |
| | | @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++) { |
| | | array.add(StringUtil.outPutResultJson(list.get(i))); |
| | | if (i < 10) |
| | | array.add(StringUtil.outPutResultJson(list.get(i))); |
| | | } |
| | | object.put("data", array); |
| | | out.print(JsonUtil.loadTrueJson(object.toString())); |
| | |
| | | private List<VideoDetailInfo> createSearchVideoDetailsVO(VideoInfo video) { |
| | | List<VideoDetailInfo> 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() <= 5) { |
| | | if (video.getVideocount() != null && video.getVideocount() <= 5) { |
| | | for (int i = 0; i < video.getVideocount(); i++) { |
| | | VideoDetailInfo detail = new VideoDetailInfo(); |
| | | detail.setTag((i + 1) + ""); |
| | |
| | | object.put("data", array); |
| | | out.print(JsonUtil.loadTrueJson(object.toString())); |
| | | } else { |
| | | List<Long> resourceList = videoResouceUtil.getAvailableResourceIds(acceptData.getPlatform(), acceptData.getVersion()); |
| | | List<Long> resourceList = videoResouceUtil.getAvailableResourceIds(detailSystem, acceptData.getVersion(), acceptData.getChannel()); |
| | | String cacheMD5 = "0"; |
| | | if (resourceList != null && resourceList.size() > 0) |
| | | for (Long l : resourceList) |
| | |
| | | acceptData.getUid(), key, pageIndex, (StringUtil.isNullOrEmpty(contentType) ? 0 : Integer.parseInt(contentType)), |
| | | acceptData.getSystem(), resourceList, cacheMD5); |
| | | //组织数据 |
| | | Set<Integer> albumCategorys = VideoCategoryConstant.getAlbumCategorys(); |
| | | for (VideoInfo video : list) { |
| | | //如果是正片,且为5大分类 就采用竖条展示 |
| | | /** |
| | | * 是专辑,并且为正片 |
| | | */ |
| | | //video.getVideoType() != null && albumCategorys.contains(Integer.parseInt(video.getVideoType().getId() + "")) && |
| | | if (video.getContentType() == 0) { |
| | | if (video.getShowType() == 1) { |
| | | video.setVideoDetailList(createSearchVideoDetailsVO(video)); |
| | | video.setShowType(1); |
| | | } else |
| | | video.setShowType(0); |
| | | |
| | | } |
| | | } |
| | | cacheMD5 = "0"; |
| | | if (list != null) { |
| | |
| | | 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<Long> 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<VideoInfo> 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<VideoType> typeList = new ArrayList<>(); |
| | | VideoType vt = new VideoType(); |
| | | vt.setId(0); |
| | | vt.setName("全部"); |
| | | typeList.add(vt); |
| | | List<Long> set = new ArrayList<>(); |
| | | //将视频内容分类并排序 |
| | | Map<Long, List<VideoInfo>> 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<VideoInfo> 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<SolrAlbumVideo> solrAlbumVideoList = new ArrayList<>(); |
| | | solrAlbumVideoList.addAll(dto.getVideoList()); |
| | | List<VideoInfo> 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<Long> resourceList = videoResouceUtil.getAvailableResourceIds(acceptData.getPlatform(), acceptData.getVersion()); |
| | | List<Long> resourceList = videoResouceUtil.getAvailableResourceIds(acceptData.getDetailSystem(), acceptData.getVersion(), acceptData.getChannel()); |
| | | List<VideoInfo> list1 = StringUtil.isNullOrEmpty(videoId) |
| | | ? recommendService.guessLikeList(ds.getId(), 4, resourceList, CacheUtil.getMD5Long(resourceList)) |
| | | : recommendService.guessLikeList(ds.getId(), 4, videoId, resourceList, |
| | |
| | | list1 = videoInfoService.simpleRandomVideoList(4); |
| | | } |
| | | |
| | | List<VideoInfo> list = new ArrayList<VideoInfo>(); |
| | | List<VideoInfo> list = new ArrayList<>(); |
| | | list.addAll(list1); |
| | | |
| | | if ("android".equalsIgnoreCase(acceptData.getPlatform()) && acceptData.getVersion() < 35) { |
| | |
| | | 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<List<String>>() { |
| | | }.getType(); |
| | | |
| | | List<String> 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<String, List<String>> map = IqiyiRankUtil.getRank(10); |
| | | // } catch (IOException e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | |
| | | //搜索排行 |
| | | String value = systemConfigService.getConfigValueByKeyCache("searchRank"); |
| | | |
| | | Map<Integer, JSONObject> map = new TreeMap<>(); |
| | | if (!StringUtil.isNullOrEmpty(value)) { |
| | | JSONObject root = JSONObject.fromObject(value); |
| | | for (Iterator<String> 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<Integer> 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())); |
| | | } |
| | | |
| | | // 获取用户信息 |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | 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<SolrAlbumVideo> solrAlbumVideoList = new ArrayList<>(); |
| | | solrAlbumVideoList.addAll(dto.getVideoList()); |
| | | List<VideoInfo> 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())); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 相关视频 |
| | | * |
| | |
| | | return; |
| | | } |
| | | |
| | | List<Long> resourceList = videoResouceUtil.getAvailableResourceIds(acceptData.getPlatform(), acceptData.getVersion()); |
| | | 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<Long> resourceList = videoResouceUtil.getAvailableResourceIds(acceptData.getDetailSystem(), acceptData.getVersion(), acceptData.getChannel()); |
| | | |
| | | DetailSystem ds = systemService.getDetailSystemByPackage(acceptData.getPackageName()); |
| | | List<VideoInfo> list = recommendService.getRelativeVideoList(ds.getId(), 4, videoId, resourceList, |
| | |
| | | return; |
| | | } |
| | | |
| | | List<Long> resourceList = videoResouceUtil.getAvailableResourceIds(acceptData.getPlatform(), acceptData.getVersion()); |
| | | List<Long> resourceList = videoResouceUtil.getAvailableResourceIds(acceptData.getDetailSystem(), acceptData.getVersion(), acceptData.getChannel()); |
| | | |
| | | DetailSystem ds = systemService.getDetailSystemByPackage(acceptData.getPackageName()); |
| | | List<VideoInfo> list1 = recommendService.peopleSee(ds.getId(), 4, videoId, resourceList, |
| | |
| | | list1 = videoInfoService.simpleRandomVideoList(4); |
| | | } |
| | | |
| | | List<VideoInfo> list = new ArrayList<VideoInfo>(); |
| | | List<VideoInfo> list = new ArrayList<>(); |
| | | list.addAll(list1); |
| | | |
| | | if ("android".equalsIgnoreCase(acceptData.getPlatform()) && acceptData.getVersion() < 35) { |
| | |
| | | String pwd = request.getParameter("Pwd");// 密码 |
| | | String nickName = request.getParameter("NickName");// 昵称 |
| | | String code = request.getParameter("VerifyCode");// 验证码 |
| | | String portrait = request.getParameter("Portrait");// 验证码 |
| | | |
| | | |
| | | if (StringUtil.isNullOrEmpty(account)) { |
| | |
| | | if (StringUtil.isNullOrEmpty(nickName)) |
| | | nickName = "无名氏"; |
| | | |
| | | DetailSystem ds = systemService.getDetailSystemByPackage(acceptData.getPackageName()); |
| | | // 注册 --用户名,昵称,密码 |
| | | LoginUser user = new LoginUser(); |
| | | user.setCreatetime(System.currentTimeMillis() + ""); |
| | | user.setDetailsystem(ds.getId()); |
| | | user.setDevice(acceptData.getDevice()); |
| | | user.setLoginType(3); |
| | | user.setName(nickName); |
| | | user.setOpenid(account); |
| | | user.setPwd(StringUtil.Md5(pwd)); |
| | | user.setPortrait(savePortrait(request)); |
| | | user.setIpinfo(ip + ":" + port); |
| | | |
| | | String result = userService.registerByEmail(user); |
| | | if (result.contains("成功")) |
| | | 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("注册成功")); |
| | | else |
| | | out.print(JsonUtil.loadFalseJson(result)); |
| | | } catch (RegisterUserException e) { |
| | | out.print(JsonUtil.loadFalseJson(e.getMessage())); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | // new Thread(new Runnable() { |
| | | // public void run() { |
| | | // for (int i = 0; i < 3; i++) { |
| | | boolean isS = MailSenderUtil.sendEmail(account, "ysyz17784739772@126.com", "weikou2014", "布丸社区注册验证码:" + code, |
| | | "布丸社区注册验证码:" + code); |
| | | 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(); |
| | |
| | | // systemService.getDetailSystemByPackage(packageName); |
| | | // 注册 --用户名,昵称,密码 |
| | | |
| | | LoginUser user = new LoginUser(); |
| | | user.setDevice(acceptData.getDevice()); |
| | | user.setLoginType(3); |
| | | user.setOpenid(account); |
| | | user.setPwd(StringUtil.Md5(pwd)); |
| | | user.setPortrait("http://buwan-1255749512.file.myqcloud.com/resource/ic_portrait_default.png"); |
| | | user = userService.loginByEmail(user); |
| | | if (user == null || user.getState() != LoginUser.STATE_NORMAL) |
| | | out.print(JsonUtil.loadFalseJson("登录失败")); |
| | | else |
| | | LoginInfoDto loginInfoDto = new LoginInfoDto(); |
| | | loginInfoDto.setLoginType(LoginUser.LOGIN_TYPE_EMAIL); |
| | | loginInfoDto.setSystemId(acceptData.getDetailSystem().getSystem().getId()); |
| | | loginInfoDto.setEmail(account); |
| | | loginInfoDto.setPwd(StringUtil.Md5(pwd)); |
| | | try { |
| | | LoginUser user = userService.login(loginInfoDto); |
| | | out.print(JsonUtil.loadTrueJson(StringUtil.outPutResultJson(user))); |
| | | } catch (LoginUserException e) { |
| | | out.print(JsonUtil.loadFalseJson(e.getMessage())); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | 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; |
| | |
| | | if (user != null) { |
| | | if (!StringUtil.isNullOrEmpty(nickName)) |
| | | user.setName(nickName); |
| | | String potrait = savePortrait(request); |
| | | String potrait = savePortrait(portrait, request.getSession()); |
| | | if (!StringUtil.isNullOrEmpty(potrait)) |
| | | user.setPortrait(potrait); |
| | | if (!StringUtil.isNullOrEmpty(sex)) |
| | |
| | | |
| | | // 注册 --用户名,昵称,密码 |
| | | 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))); |
| | |
| | | } |
| | | |
| | | if (!verifyCode.equalsIgnoreCase(request.getSession().getAttribute(email) + "")) { |
| | | out.print(JsonUtil.loadTrueJson("验证码错误")); |
| | | out.print(JsonUtil.loadFalseJson("验证码错误")); |
| | | return; |
| | | } |
| | | |
| | |
| | | |
| | | } |
| | | |
| | | private String savePortrait(HttpServletRequest request) { |
| | | String base64 = request.getParameter("Portrait"); |
| | | public static String savePortrait(String base64, HttpSession session) { |
| | | if (StringUtil.isNullOrEmpty(base64)) |
| | | return ""; |
| | | |
| | | String fileName = "portrait_" + System.currentTimeMillis() + ".jpg"; |
| | | // 定义上传路径 |
| | | String path = request.getSession().getServletContext().getRealPath("upload") + "/" + fileName; |
| | | if (!new File(request.getSession().getServletContext().getRealPath("upload") + "/").exists()) |
| | | new File(request.getSession().getServletContext().getRealPath("upload") + "/").mkdirs(); |
| | | 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 ""; |