package com.yeshi.buwan.controller.admin.api; import java.io.PrintWriter; import java.util.*; import javax.annotation.Resource; import com.google.common.base.Function; import com.google.common.collect.Maps; import com.google.gson.Gson; import com.yeshi.buwan.domain.HomeVideo; import com.yeshi.buwan.domain.VideoResource; import com.yeshi.buwan.domain.solr.SolrAlbumVideo; import com.yeshi.buwan.domain.solr.SolrShortVideo; import com.yeshi.buwan.domain.video.InternetSearchVideo; import com.yeshi.buwan.domain.video.VideoInfoExtra; 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.exception.video.IqiyiVideoSolrException; import com.yeshi.buwan.videos.iqiyi.IqiYiNewAPI; import com.yeshi.buwan.videos.iqiyi.util.IqiyiUtil2; import com.yeshi.buwan.service.imp.VideoResourceService; import com.yeshi.buwan.service.inter.juhe.Iqiyi2Service; import com.yeshi.buwan.service.inter.video.VideoInfoExtraService; 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.Constant; import com.yeshi.buwan.vo.video.VideoAdminInfoVO; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.google.gson.GsonBuilder; import com.yeshi.buwan.domain.VideoInfo; import com.yeshi.buwan.videos.iqiyi.util.IqiyiUtil; import com.yeshi.buwan.service.imp.ClassService; import com.yeshi.buwan.service.imp.VideoManager; import com.yeshi.buwan.util.JsonUtil; import com.yeshi.buwan.util.StringUtil; import com.yeshi.buwan.web.tag.PageEntity; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @Controller @RequestMapping("admin/new/api/video") public class VideoAdminController { @Resource private VideoManager videoManager; @Resource private ClassService classService; @Resource private VideoResourceService videoResourceService; @Resource private IqiyiUtil iqiyiUtil; @Resource private ThreadPoolTaskExecutor taskExecutor; @Resource private SolrAlbumVideoDataManager solrAlbumDataManager; @Resource private SolrInternetSearchVideoDataManager solrInternetSearchVideoDataManager; @Resource private SolrShortVideoDataManager solrShortVideoDataManager; @Resource private VideoInfoExtraService videoInfoExtraService; @Resource private Iqiyi2Service iqiyi2Service; @Resource private IqiyiUtil2 iqiyiUtil2; @RequestMapping(value = "/changevideoshow", method = RequestMethod.POST) public void changeVideoShow(String id, int show, PrintWriter out) { VideoInfo vi = videoManager.getVideoInfo(id); if (vi != null) { vi.setShow(show + ""); videoManager.changeVideoShow(vi); } JSONObject object = new JSONObject(); object.put("code", 0); object.put("msg", "修改成功"); out.print(object); } @RequestMapping(value = "/deletevideo", method = RequestMethod.POST) public void deleteVideo(String id, PrintWriter out) { String[] ids = id.split(","); for (String idStr : ids) videoManager.deleteVideo(idStr); JSONObject object = new JSONObject(); object.put("code", 0); object.put("msg", "删除成功"); out.print(object); } @RequestMapping(value = "/videolist", method = RequestMethod.POST) public void videoList(int videotype, int page, String key, String type, String resourceIds, int fromtype, int contenttype, String freeType, String area, PrintWriter out) { if (StringUtil.isNullOrEmpty(type)) { type = "name"; } Integer freeTypeInt = null; if (!StringUtil.isNullOrEmpty(freeType)) { freeTypeInt = Integer.parseInt(freeType); } List list = null; long count = 0; List voList = new ArrayList<>(); //正片搜索 if (contenttype == 1) { SolrVideoSearchFilter filter = new SolrVideoSearchFilter(); switch (type) { case "name": filter.setKey(key); break; case "actor": filter.setActor(key); break; case "director": filter.setDirector(key); break; } filter.setVideoType(videotype == 0 ? null : videotype); filter.setContentType(1); if (!StringUtil.isNullOrEmpty(resourceIds)) { JSONArray array = JSONArray.fromObject(resourceIds); String[] rids = new String[array.size()]; for (int i = 0; i < array.size(); i++) { rids[i] = array.optString(i); } filter.setResourceIds(Arrays.asList(rids)); } filter.setSortKey("updateTime"); filter.setFreeType(freeTypeInt); filter.setArea(StringUtil.isNullOrEmpty(area) ? null : area.trim()); List resourceList = videoResourceService.getResourceList(); Map resourceMap = new HashMap<>(); for (VideoResource vr : resourceList) { resourceMap.put(Long.parseLong(vr.getId()), vr.getName()); } if (fromtype == HomeVideo.FROM_TYPE_LOCAL) { SolrResultDTO dto = solrAlbumDataManager.find(filter, page, Constant.pageCount); if (dto.getVideoList() != null) for (SolrAlbumVideo videoInfo : (List) dto.getVideoList()) voList.add(VideoAdminInfoVO.create(videoInfo, resourceMap)); count = dto.getTotalCount(); } else if (fromtype == HomeVideo.FROM_TYPE_INTERNET) { SolrResultDTO dto = solrInternetSearchVideoDataManager.find(filter, page, Constant.pageCount); if (dto.getVideoList() != null) for (InternetSearchVideo videoInfo : (List) dto.getVideoList()) voList.add(VideoAdminInfoVO.create(videoInfo, resourceMap)); count = dto.getTotalCount(); } else if (fromtype == HomeVideo.FROM_TYPE_SHORT) { SolrShortVideoSearchFilter shortFilter = new SolrShortVideoSearchFilter(); shortFilter.setRootVideoType(filter.getVideoType()); if (!StringUtil.isNullOrEmpty(key)) { String[] keys = key.split(" "); if (!StringUtil.isNullOrEmpty(keys[0])) shortFilter.setTag(keys[0].trim()); if (keys.length > 1) { shortFilter.setKey(key.substring(key.indexOf(keys[0])).trim()); } } if (!StringUtil.isNullOrEmpty(filter.getArea())) { shortFilter.setAreas(Arrays.asList(new String[]{filter.getArea()})); //某些短视频分类为日韩 if (filter.getArea().equalsIgnoreCase("韩国")) { shortFilter.getAreas().add("日韩"); } } shortFilter.setFuzzy(true); SolrResultDTO dto = solrShortVideoDataManager.find(shortFilter, page, Constant.pageCount); if (dto.getVideoList() != null) for (SolrShortVideo videoInfo : (List) dto.getVideoList()) voList.add(VideoAdminInfoVO.create(videoInfo, resourceMap)); count = dto.getTotalCount(); } } else { list = classService.getTypeVideoListAdmin(videotype == 0 ? "" : videotype + "", page, key, contenttype); count = classService.getTypeVideoListAdminCount(videotype == 0 ? "" : videotype + "", key, contenttype); if (list != null) for (VideoInfo videoInfo : list) voList.add(VideoAdminInfoVO.create(videoInfo)); } List ids = new ArrayList<>(); for (VideoAdminInfoVO a : voList) { ids.add(a.getId()); } List extraList = videoInfoExtraService.listByIds(ids); Map maps = Maps.uniqueIndex(extraList.iterator(), new Function() { @Override public String apply(VideoInfoExtra extra) { return extra.getId(); } }); //过滤图片 for (VideoAdminInfoVO a : voList) { VideoInfoExtra extra = maps.get(a.getId()); if (extra != null) { if (a.getHpicture() != null) { if (!StringUtil.isNullOrEmpty(extra.gethPosterPicture())) a.setHpicture(extra.gethPosterPicture()); } if (a.getVpicture() != null) { if (!StringUtil.isNullOrEmpty(extra.getvPosterPicture())) a.setVpicture(extra.getvPosterPicture()); } } } JSONObject object = new JSONObject(); object.put("code", 0); JSONObject data = new JSONObject(); JSONArray array = new JSONArray(); PageEntity entity = new PageEntity(); entity.setPageIndex(page); entity.setPageSize(20); entity.setTotalCount((int) count); data.put("pageEntity", new GsonBuilder().create().toJson(entity)); data.put("data", new Gson().toJson(voList)); object.put("data", data); out.println(object); } @RequestMapping("updateVideos") public void updateVideos(PrintWriter out) { iqiyiUtil.updateAll(""); out.print(JsonUtil.loadTrueAdmin("执行成功")); } @RequestMapping("updateIqiyiAlbum") public void updateIqiyiAlbum(String url, PrintWriter out) { String aid = IqiYiNewAPI.getAidByUrl(url); if (StringUtil.isNullOrEmpty(aid)) { out.print(JsonUtil.loadFalseAdmin("未能获取到专辑")); } else { try { iqiyi2Service.validAlbumSolrState(Long.parseLong(aid)); iqiyiUtil2.syncByAid(Long.parseLong(aid),false); } catch (IqiyiVideoSolrException e) { if (e.getCode() == IqiyiVideoSolrException.CODE_ALBUM_NOT_SAVE || e.getCode() == IqiyiVideoSolrException.CODE_ALBUM_NOT_EXIST || e.getCode() == IqiyiVideoSolrException.CODE_ALBUM_NOT_ADD_TO_VIDEO) { iqiyiUtil2.syncByAid(Long.parseLong(aid),false); } else { out.print(JsonUtil.loadFalseAdmin(e.getMsg())); return; } } out.print(JsonUtil.loadTrueAdmin("专辑更新成功")); } } @RequestMapping("addIqiyiShortVideo") public void addIqiyiShortVideo(String urlJson, PrintWriter out) { // JSONArray array = JSONArray.fromObject(urlJson); // int count = 0; // for (int i = 0; i < array.size(); i++) { // String aid = IqiyiUtil.getAlbumIdFromPlayUrl(array.optString(i)); // if (!StringUtil.isNullOrEmpty(aid)) // count++; // // // 添加小视频 // // } // // String aid = IqiyiUtil.getAlbumIdFromPlayUrl(""); // if (StringUtil.isNullOrEmpty(aid)) { // out.print(JsonUtil.loadFalseAdmin("未能获取到专辑")); // } else { // iqiyiUtil.updateAlbum(aid); // out.print(JsonUtil.loadTrueAdmin("专辑更新成功")); // } } @RequestMapping("iqiyiUpdate") public void iqiyiUpdate(PrintWriter out) { taskExecutor.execute(new Runnable() { @Override public void run() { iqiyiUtil.updateAll(""); } }); JSONObject data = new JSONObject(); data.put("msg", "正在后台更新中"); out.print(data); } @RequestMapping("getVideoInfoExtra") public void getVideoInfoExtra(String id, PrintWriter out) { VideoInfoExtra extra = videoInfoExtraService.getById(id); JSONObject object = new JSONObject(); if (extra != null) { object.put("code", 0); object.put("data", new Gson().toJson(extra)); } else { object.put("code", 1); object.put("msg", "无附加信息"); } out.print(object); } @RequestMapping("updateVideoInfoExtra") public void updateVideoInfoExtra(String id, String vPicture, String hPicture, PrintWriter out) { VideoInfoExtra extra = new VideoInfoExtra(); extra.setId(id); if (StringUtil.isNullOrEmpty(vPicture)) { vPicture = ""; } extra.setvPosterPicture(vPicture); if (StringUtil.isNullOrEmpty(hPicture)) { hPicture = ""; } extra.sethPosterPicture(hPicture); videoInfoExtraService.save(extra); JSONObject object = new JSONObject(); object.put("code", 0); out.print(object); } }