src/main/java/com/yeshi/buwan/controller/api/PushController.java
@@ -47,7 +47,7 @@ PushDeviceToken token = new PushDeviceToken(); token.setType(type); token.setType(PushDeviceToken.PushPlatform.valueOf(type)); token.setDetailSystemId(acceptData.getDetailSystem().getId()); token.setUtdId(acceptData.getUtdId()); token.setToken(regId); src/main/java/com/yeshi/buwan/controller/parser/ClassParser.java
@@ -5,6 +5,7 @@ import com.yeshi.buwan.domain.ad.CommonAdPositionAd; import com.yeshi.buwan.domain.recommend.CategoryRecommendVideo; import com.yeshi.buwan.domain.recommend.HomeRecommendSpecial; import com.yeshi.buwan.domain.solr.SolrAlbumVideo; import com.yeshi.buwan.domain.special.Special; import com.yeshi.buwan.domain.system.DetailSystem; import com.yeshi.buwan.dto.search.SolrResultDTO; @@ -19,6 +20,7 @@ import com.yeshi.buwan.util.JuHe.VideoResourceUtil; import com.yeshi.buwan.util.ad.CommonAdUtil; import com.yeshi.buwan.util.annotation.RequireUid; import com.yeshi.buwan.util.factory.VideoInfoFactory; import com.yeshi.buwan.util.video.VideoConstant; import com.yeshi.buwan.vo.AcceptData; import com.yeshi.buwan.vo.HomeClassVO; @@ -121,8 +123,14 @@ if (!StringUtil.isNullOrEmpty(list.get(i).getPicture())) { list.get(i).getType().setIcon(list.get(i).getPicture()); } typeList.add(list.get(i).getType()); if ("ios".equalsIgnoreCase(acceptData.getPlatform()) && acceptData.getVersion() >= Constant.IOS_ONLINING_VERSION) { if (VideoConstant.isMainCategory(list.get(i).getType().getId())) { typeList.add(list.get(i).getType()); } } else typeList.add(list.get(i).getType()); } JSONObject object = new JSONObject(); object.put("count", (new StringBuilder(String.valueOf(typeList.size()))).toString()); @@ -257,6 +265,44 @@ // continue; // } typelist.add(type); } if ("ios".equalsIgnoreCase(acceptData.getPlatform()) && acceptData.getVersion() >= Constant.IOS_ONLINING_VERSION) { typelist = new ArrayList<>(); HomeClassVO vo = new HomeClassVO(); vo.setId(309L); vo.setName("推荐"); vo.setShowTitle("推荐"); vo.setDataType(HomeClassVO.DATA_TYPE_RECOMMEND); typelist.add(vo); vo = new HomeClassVO(); vo.setId(VideoConstant.VIDEO_CATEGORY_DIANYING); vo.setName("电影"); vo.setShowTitle("电影"); vo.setDataType(HomeClassVO.DATA_TYPE_CLASS); typelist.add(vo); vo = new HomeClassVO(); vo.setId(VideoConstant.VIDEO_CATEGORY_DIANSHIJU); vo.setName("电视剧"); vo.setShowTitle("电视剧"); vo.setDataType(HomeClassVO.DATA_TYPE_CLASS); typelist.add(vo); vo = new HomeClassVO(); vo.setId(VideoConstant.VIDEO_CATEGORY_DONGMAN); vo.setName("动漫"); vo.setShowTitle("动漫"); vo.setDataType(HomeClassVO.DATA_TYPE_CLASS); typelist.add(vo); vo = new HomeClassVO(); vo.setId(VideoConstant.VIDEO_CATEGORY_ZONGYI); vo.setName("综艺"); vo.setShowTitle("综艺"); vo.setDataType(HomeClassVO.DATA_TYPE_CLASS); typelist.add(vo); } JSONObject object = new JSONObject(); @@ -479,7 +525,7 @@ } else if (!StringUtil.isNullOrEmpty(homeType)) { list = new ArrayList<VideoInfo>(); list = new ArrayList<>(); List<HomeVideo> homeVideoList = homeTypeService.getVideoByTypes(homeType, pageIndex, detailSystem); for (HomeVideo hv : homeVideoList) { @@ -818,11 +864,33 @@ out.print(JsonUtil.loadTrueJson(object.toString())); } @Resource private VideoResourceService videoResourceService; @RequireUid public void getSpecialDetail(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String specialid = request.getParameter("Id"); Special special = specialService.getSpecial(specialid); List<VideoInfo> list = specialService.getSpecialVideoList(specialid); List<Long> availableResourceIds = videoResouceUtil.getAvailableResourceIds(acceptData.getDetailSystem(), acceptData.getVersion()); List<VideoInfo> tempList = new ArrayList<>(); for (VideoInfo videoInfo : list) { List<VideoResource> resourceList = videoResourceService.getResourceByVideo(videoInfo); List<Long> rids = new ArrayList<>(); for (VideoResource vr : resourceList) { if (availableResourceIds.contains(Long.parseLong(vr.getId()))) { rids.add(Long.parseLong(vr.getId())); break; } } if (rids.size() > 0) { tempList.add(videoInfo); } } list = tempList; JSONObject object = new JSONObject(); object.put("count", list.size()); JSONArray array = new JSONArray(); @@ -895,8 +963,24 @@ public void getRecommendCategoryVideoList(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { String typeid = request.getParameter("Type"); DetailSystem detailSystem = systemService.getDetailSystemByPackage(acceptData.getPackageName()); List<VideoInfo> rankList = categoryRecommendCacheVideoService.getVideoListByRank(Integer.parseInt(typeid), detailSystem.getId(), acceptData.getPlatform(), acceptData.getVersion()); List<VideoInfo> rankList = null; if ("ios".equalsIgnoreCase(acceptData.getPlatform()) && acceptData.getVersion() >= Constant.IOS_ONLINING_VERSION) { SolrVideoSearchFilter filter = new SolrVideoSearchFilter(); filter.setResourceIds(new String[]{25 + ""}); filter.setVideoType(Integer.parseInt(typeid)); filter.setFreeType(0); SolrResultDTO dto = solrAlbumVideoDataManager.find(filter, 1, 30); List<SolrAlbumVideo> list = dto.getVideoList(); rankList = new ArrayList<>(); for (SolrAlbumVideo video : list) { rankList.add(VideoInfoFactory.create(video)); } } else { rankList = categoryRecommendCacheVideoService.getVideoListByRank(Integer.parseInt(typeid), detailSystem.getId(), acceptData.getPlatform(), acceptData.getVersion()); } List<VideoInfo> list = new ArrayList<>(); list.addAll(rankList); for (VideoInfo vi : list) {// 清除无用数据,防止浪费带宽,更改图片 src/main/java/com/yeshi/buwan/controller/parser/ConfigParser.java
@@ -15,12 +15,15 @@ import com.yeshi.buwan.domain.system.DetailSystem; import com.yeshi.buwan.domain.recommend.FloatAD; import com.yeshi.buwan.dto.config.ADShieldIPConfig; import com.yeshi.buwan.dto.log.BaseLog; import com.yeshi.buwan.log.LogHelper; import com.yeshi.buwan.service.imp.SystemService; import com.yeshi.buwan.service.inter.ad.FloatADService; import com.yeshi.buwan.service.manager.IPManager; import com.yeshi.buwan.util.IPUtil; import com.yeshi.buwan.util.StringUtil; import com.yeshi.buwan.util.log.LoggerUtil; import com.yeshi.buwan.util.log.UserActiveLogFactory; import com.yeshi.buwan.vo.AcceptData; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,6 +38,7 @@ @Controller public class ConfigParser { Logger logger = LoggerFactory.getLogger(ConfigParser.class); @Resource private DetailSystemConfigService configService; @@ -47,12 +51,15 @@ @Resource private IPManager ipManager; public ADConfig getAdShowType(String key, String channel, int version, Map<String, String> map) { String splash = map.get(key); JSONObject jsonObject = JSONObject.fromObject(splash); if (jsonObject == null||jsonObject.isEmpty()) return null; ADConfig adConfig = null; channel = channel.toLowerCase(); if (jsonObject.optJSONObject(channel) == null) { if (jsonObject == null || jsonObject.optJSONObject(channel) == null) { // 默认为应用宝 channel = "qq"; } @@ -120,6 +127,7 @@ } public void getConfig(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { LoggerUtil.getUserActiveLogger().info(UserActiveLogFactory.createAppSplash(new BaseLog(acceptData, ""))); DetailSystem detailSystem = systemService.getDetailSystemByPackage(acceptData.getPackageName()); Map<String, String> map = configService.getConfigAsMap(detailSystem, acceptData.getVersion()); JSONObject data = new JSONObject(); @@ -213,9 +221,7 @@ //PPTV免广告权益时长,暂时设置为3小时 data.put("pptvNoAdRewardHour", 3); //设置网页加速域名 data.put("webSpeedUpHost",map.get("web_speed_up_host")); data.put("webSpeedUpHost", map.get("web_speed_up_host")); out.print(JsonUtil.loadTrueJson(data.toString())); @@ -230,7 +236,7 @@ * @param out */ public void getHomeConfig(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { DetailSystem detailSystem = systemService.getDetailSystemByPackage(acceptData.getPackageName()); LoggerUtil.getUserActiveLogger().info(UserActiveLogFactory.createAppMainPage(new BaseLog(acceptData, ""))); List<FloatAD> adList = floatADService.listShowAD(1, 1); Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); JSONObject data = new JSONObject(); src/main/java/com/yeshi/buwan/controller/parser/HomeParser.java
@@ -16,6 +16,7 @@ import com.yeshi.buwan.domain.system.DetailSystemConfig; import com.yeshi.buwan.domain.system.DetailSystem; import com.yeshi.buwan.domain.video.VideoWatchHistory; import com.yeshi.buwan.dto.log.BaseLog; import com.yeshi.buwan.pptv.PPTVUtil; import com.yeshi.buwan.pptv.entity.PPTVSeries; import com.yeshi.buwan.service.imp.*; @@ -24,6 +25,8 @@ import com.yeshi.buwan.service.inter.video.VideoWatchHistoryService; import com.yeshi.buwan.util.*; import com.yeshi.buwan.util.annotation.RequireUid; import com.yeshi.buwan.util.log.LoggerUtil; import com.yeshi.buwan.util.log.UserActiveLogFactory; import com.yeshi.buwan.util.log.VideoLogFactory; import com.yeshi.buwan.vo.AcceptData; import org.apache.commons.httpclient.HttpClient; @@ -419,12 +422,14 @@ data.put("name", series.getName()); data.put("pptv", true); out.print(JsonUtil.loadTrueJson(data.toString())); LoggerUtil.getUserActiveLogger().info(UserActiveLogFactory.createVideoDetail(new BaseLog(acceptData, loginUid), videoId, series.getName(), from)); return; } VideoInfo info = videoDeailUtil.getVideoInfo(detailSystem.getId(), videoId, resourceId, resourceList, CacheUtil.getMD5Long(resourceList)); LoggerUtil.getUserActiveLogger().info(UserActiveLogFactory.createVideoDetail(new BaseLog(acceptData, loginUid), videoId, info != null ? info.getName() : "", from)); List<VideoType> typeList = classService.getVideoTypeList(info.getId()); if (typeList != null && typeList.size() > 0) { src/main/java/com/yeshi/buwan/controller/parser/UserParser.java
@@ -4,6 +4,7 @@ import com.yeshi.buwan.domain.Collection; import com.yeshi.buwan.domain.system.DetailSystem; import com.yeshi.buwan.domain.user.LoginUser; import com.yeshi.buwan.dto.log.BaseLog; import com.yeshi.buwan.dto.user.LoginInfoDto; import com.yeshi.buwan.exception.user.LoginUserException; import com.yeshi.buwan.exception.user.RegisterUserException; @@ -14,12 +15,16 @@ 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.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.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 javax.annotation.Resource; @@ -31,6 +36,7 @@ @Controller public class UserParser { @Resource private SystemService systemService; @Resource @@ -335,6 +341,8 @@ // 搜索 public void searchNew(AcceptData acceptData, HttpServletRequest request, PrintWriter out) { //type: 0-全部 1- String key = request.getParameter("Key"); String type = request.getParameter("Type"); @@ -350,6 +358,8 @@ return; } LoggerUtil.getUserActiveLogger().info(UserActiveLogFactory.createSearch(new BaseLog(acceptData, ""), key, type)); int pageIndex = StringUtil.getPage(page); if (pageIndex <= 0) { pageIndex = 1; src/main/java/com/yeshi/buwan/dao/juhe/pptv/PPTVSeriesDao.java
@@ -2,6 +2,7 @@ import com.yeshi.buwan.dao.base.MongodbBaseDao; import com.yeshi.buwan.pptv.entity.PPTVSeries; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Repository; @@ -17,4 +18,13 @@ return findList(query); } public List<PPTVSeries> list(String type, int start, int count) { Query query = new Query(); query.skip(start); query.limit(count); query.addCriteria(new Criteria().orOperator(Criteria.where("programType2").is(type), Criteria.where("programType").is(type))); return findList(query); } } src/main/java/com/yeshi/buwan/dto/log/BaseLog.java
New file @@ -0,0 +1,72 @@ package com.yeshi.buwan.dto.log; import com.yeshi.buwan.vo.AcceptData; public class BaseLog { private String detailSystemId; private Integer version; private String device; private String utdId; private String loginUid; public BaseLog(String detailSystemId, Integer version, String device, String utdId, String loginUid) { this.detailSystemId = detailSystemId; this.version = version; this.device = device; this.utdId = utdId; this.loginUid = loginUid; } public BaseLog(AcceptData acceptData, String loginUid) { this.detailSystemId = acceptData.getDetailSystem().getId(); this.version = acceptData.getVersion(); this.device = acceptData.getDevice(); this.utdId = acceptData.getUtdId(); this.loginUid = loginUid; } public String getDetailSystemId() { return detailSystemId; } public void setDetailSystemId(String detailSystemId) { this.detailSystemId = detailSystemId; } public Integer getVersion() { return version; } public void setVersion(Integer version) { this.version = version; } public String getDevice() { return device; } public void setDevice(String device) { this.device = device; } public String getUtdId() { return utdId; } public void setUtdId(String utdId) { this.utdId = utdId; } public String getLoginUid() { return loginUid; } public void setLoginUid(String loginUid) { this.loginUid = loginUid; } @Override public String toString() { return String.format("%s#%s#%s#%s#%s", detailSystemId, version, device, utdId, loginUid); } } src/main/java/com/yeshi/buwan/job/video/PPTVVideoUpdate.java
@@ -2,6 +2,8 @@ import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; import com.yeshi.buwan.dao.juhe.pptv.PPTVSeriesDao; import com.yeshi.buwan.dao.juhe.pptv.VideoPPTVMapDao; import com.yeshi.buwan.funtv.FunTVNewApi; import com.yeshi.buwan.funtv.entity.FunTVAlbum2; import com.yeshi.buwan.funtv.entity.FunTVShortVideo2; @@ -30,6 +32,12 @@ @Resource private PPTVService pptvService; @Resource private PPTVSeriesDao pptvSeriesDao; @Resource private VideoPPTVMapDao videoPPTVMapDao; /** * 更新最近几天的视频 @@ -50,4 +58,28 @@ } @XxlJob("video-update-pptv-syncVideo") public ReturnT<String> syncVideo(String param) throws Exception { List<PPTVSeries> list = pptvSeriesDao.list(0, 10000); for (PPTVSeries s : list) { if (s != null) { switch (s.getStatus()) { case "add": case "update": if (videoPPTVMapDao.selectByInfoId(s.getInfoID()) == null) { PPTVSeries series = PPTVApiUtil.getDetail(s.getSeriesCode()); pptvService.save(series); Thread.sleep(1000); System.out.println(s.getName()); series = pptvService.getSeriesDetail(s.getInfoID()); if (series != null) pptvService.addToVideoInfo(series); } break; } } } return ReturnT.SUCCESS; } } src/main/java/com/yeshi/buwan/pptv/PPTVUtil.java
@@ -38,6 +38,9 @@ case "动漫": videoType = VideoConstant.VIDEO_CATEGORY_DONGMAN; break; case "少儿": videoType = 312; break; default: return null; } @@ -85,6 +88,20 @@ } else { tag = series.getPublishTime().split(" ")[0]; } } else { if ("1".equalsIgnoreCase(series.getSeriesCount())) { tag = "评分:" + score; } else { if (series.getCurrentNum() != null && series.getSeriesCount().trim().equalsIgnoreCase(series.getCurrentNum().trim())) { tag = series.getSeriesCount() + "集全"; } else { if (series.getCurrentNum() != null) tag = "更新至" + series.getCurrentNum() + "集"; else { tag = "更新至" + series.getSeriesCount() + "集"; } } } } src/main/java/com/yeshi/buwan/service/imp/juhe/PPTVServiceImpl.java
@@ -68,9 +68,11 @@ VideoInfo newVideoInfo = PPTVUtil.convertToVideoInfo(series); if (newVideoInfo == null) return; // if (newVideoInfo.getVideoType() != null) { // newVideoInfo.setVideoType(videoTypeService.getVideoType(newVideoInfo.getVideoType().getId())); // } VideoType videoType = videoTypeService.getVideoType(newVideoInfo.getVideoType().getId()); if (videoType.getParent() != null) newVideoInfo.setVideoType(videoType.getParent()); VideoPPTVMap videoPPTV = videoPPTVMapDao.selectByInfoId(series.getInfoID()); if (videoPPTV != null) {//渠道视频已经存在 VideoInfo videoInfo = videoInfoService.getVideoInfo(videoPPTV.getVideoId() + ""); @@ -142,7 +144,7 @@ //添加视频来源映射 resourceVideoService.addVideoResource(newVideoInfo.getId(), PPTVUtil.RESOURCE_ID + ""); //添加视频分类映射 categoryVideoService.addCategoryVideo(newVideoInfo.getId(), newVideoInfo.getVideoType().getId()); categoryVideoService.addCategoryVideo(newVideoInfo.getId(), videoType.getId()); CMQManager.getInstance().addSolrMsg(newVideoInfo.getId()); } @@ -195,7 +197,11 @@ @Override public void save(List<PPTVSeries> seriesList) { for (PPTVSeries series : seriesList) { save(series); try { save(series); } catch (Exception e) { } } } @@ -217,9 +223,12 @@ CMQManager.getInstance().addPPTVSeriesUpdateMsg(new PPTVMQMsg(series.getInfoID(), PPTVMQMsg.TYPE_ADD_OR_UPDATE)); } System.out.println("addorupdate:"+series.getName()); break; //删除 case "del": System.out.println("delete:"+series.getName()); deleteSeries(series); infoIds.add(series.getInfoID()); break; @@ -281,7 +290,7 @@ PPTVQuery query = new PPTVQuery(); query.seriesCode = series.getSeriesCode(); Set<String> seriesCodeSet = deleteMap(query); pptvSeriesDao.delete(series.getInfoID()); pptvSeriesDao.deleteByPrimaryKey(series.getInfoID()); } @@ -320,7 +329,7 @@ PPTVQuery query = new PPTVQuery(); query.programCode = program.getProgramCode(); Set<String> infoIdSet = deleteMap(query); pptvProgramDao.delete(program.getProgramCode()); pptvProgramDao.deleteByPrimaryKey(program.getProgramCode()); return infoIdSet; } src/main/java/com/yeshi/buwan/util/Constant.java
@@ -132,4 +132,8 @@ } //IOS正在上线的版本 public final static int IOS_ONLINING_VERSION = 78; } src/main/java/com/yeshi/buwan/util/JuHe/VideoResourceUtil.java
@@ -17,12 +17,19 @@ @Cacheable(value = "homeCache", key = "'getAvailableResourceIds-'+'-'+#detailSystem.id+'-'+#versionCode") public List<Long> getAvailableResourceIds(DetailSystem detailSystem, int versionCode) { List<String> ridList = videoResourceVersionMapService.listResourceId(detailSystem.getId(), versionCode); if (detailSystem.getId().equalsIgnoreCase("43") && versionCode > 83) { ridList = new ArrayList<>(); // ridList.add("19"); // ridList.add("24"); ridList.add("25"); } List<Long> ids = new ArrayList<>(); if (ridList != null) { for (String id : ridList) { ids.add(Long.parseLong(id)); } } return ids; } src/main/java/com/yeshi/buwan/util/TimeUtil.java
@@ -83,7 +83,7 @@ SimpleDateFormat sdf = new SimpleDateFormat(format); try { date = sdf.parse(st); LogUtil.i(date.getTime() + ""); // LogUtil.i(date.getTime() + ""); return date.getTime(); } catch (Exception e) { e.printStackTrace(); src/main/java/com/yeshi/buwan/util/log/LoggerUtil.java
@@ -7,6 +7,7 @@ private static Logger vipLogger = LoggerFactory.getLogger("vip"); private static Logger testLogger = LoggerFactory.getLogger("test"); private static Logger userActiveLogger = LoggerFactory.getLogger("userActive"); public static Logger getVIPLogger() { return vipLogger; @@ -16,4 +17,8 @@ return testLogger; } public static Logger getUserActiveLogger() { return userActiveLogger; } } src/main/java/com/yeshi/buwan/util/log/UserActiveLogFactory.java
New file @@ -0,0 +1,72 @@ package com.yeshi.buwan.util.log; import com.yeshi.buwan.dto.log.BaseLog; /** * 用户活跃日志 */ public class UserActiveLogFactory { /** * 创建日志 * * @param baseLog * @param position * @param params1 * @param params2 * @param params3 * @return */ private static String create(BaseLog baseLog, String position, String params1, String params2, String params3) { return baseLog.toString() + String.format("#%s#%s#%s#%s", position, params1 == null ? "" : params1, params2 == null ? "" : params2, params3 == null ? "" : params3); } /** * 进入欢迎页 * * @param baseLog * @return */ public static String createAppSplash(BaseLog baseLog) { return create(baseLog, "splash", null, null, null); } /** * 进入主页 * * @param baseLog * @return */ public static String createAppMainPage(BaseLog baseLog) { return create(baseLog, "home", null, null, null); } /** * 搜索 * * @param baseLog * @param key * @param type * @return */ public static String createSearch(BaseLog baseLog, String key, String type) { return create(baseLog, "search", key, type, null); } /** * 进入视频详情 * * @param baseLog * @param videoId * @param videoName * @param from * @return */ public static String createVideoDetail(BaseLog baseLog, String videoId, String videoName, String from) { return create(baseLog, "videoDetail", videoId, videoName, from); } } src/main/java/com/yeshi/buwan/util/log/VideoLogFactory.java
@@ -7,6 +7,8 @@ */ public class VideoLogFactory { /** * 获取播放链接日志 * @@ -20,6 +22,7 @@ public static String createPlayUrlLog(String detailSystemId, String id, String type, int resourceid, String videoid) { return String.format("getPlayUrl:%s#%s#%s#%s#%s", detailSystemId, videoid, resourceid, id, type); } /** * 播放统计 @@ -53,8 +56,8 @@ * @param resourceId * @return */ public static String createUserVideoDetailLog(String device,String utdId, String loginUid, String detailSystemId, String videoId, String resourceId, String from) { return String.format("getUserVideoDetail:%s#%s#%s#%s#%s#%s#", device,utdId, loginUid, detailSystemId, videoId, resourceId, from); public static String createUserVideoDetailLog(String device, String utdId, String loginUid, String detailSystemId, String videoId, String resourceId, String from) { return String.format("getUserVideoDetail:%s#%s#%s#%s#%s#%s#", device, utdId, loginUid, detailSystemId, videoId, resourceId, from); } src/main/resources/env-pro/logback.xml
@@ -78,10 +78,10 @@ </appender> <!-- 搜索统计 --> <appender name="searchAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.filePath}/search.log</file> <appender name="Appender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.filePath}/.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.filePath}/info/search.%d{yyyy-MM-dd}.log.gz</fileNamePattern> <fileNamePattern>${log.filePath}/info/.%d{yyyy-MM-dd}.log.gz</fileNamePattern> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> @@ -116,6 +116,23 @@ <file>${log.filePath}/video/video_play_user.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.filePath}/video/video_play_user.%d{yyyy-MM-dd}.log.gz</fileNamePattern> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="userActiveAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.filePath}/user/user_active.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.filePath}/user/user_active.%d{yyyy-MM-dd}.log.gz</fileNamePattern> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> @@ -167,11 +184,11 @@ <!--视频搜索关键词 --> <logger name="com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager" level="INFO" additivity="true"> <appender-ref ref="searchAppender"></appender-ref> <appender-ref ref="Appender"></appender-ref> </logger> <logger name="com.yeshi.buwan.service.imp.SearchService" level="INFO" additivity="true"> <appender-ref ref="searchAppender"></appender-ref> <logger name="com.yeshi.buwan.service.imp.Service" level="INFO" additivity="true"> <appender-ref ref="Appender"></appender-ref> </logger> @@ -194,6 +211,14 @@ </logger> <logger name="userActive" level="INFO" additivity="false"> <appender-ref ref="userActiveAppender"></appender-ref> </logger> <appender name="vipAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.filePath}/vip/vip.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> src/test/java/com/hxh/spring/test/LogTest.java
@@ -1,16 +1,40 @@ package com.hxh.spring.test; import com.google.gson.Gson; import com.yeshi.buwan.util.StringUtil; import com.yeshi.buwan.util.TimeUtil; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; public class LogTest { private final static Logger logger = LoggerFactory.getLogger(LogTest.class); private static List<String> loadLog(String filePath) { List<String> list = new ArrayList<>(); Scanner scanner = null; try { scanner = new Scanner(new FileInputStream(filePath)); while (scanner.hasNextLine()) { String text = scanner.nextLine(); if (!StringUtil.isNullOrEmpty(text)) { list.add(text); } } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { scanner.close(); } return list; } @Test public void testLog() throws FileNotFoundException { @@ -70,9 +94,6 @@ } int p = 0; for (Iterator<Integer> its = ordersMap.keySet().iterator(); its.hasNext(); ) { Integer key = its.next(); @@ -84,4 +105,338 @@ } } @Test public void videoPlay() throws Exception { Set<String> sets = new HashSet<>(); Gson gson = new Gson(); Scanner scanner = new Scanner(new FileInputStream("C:\\Users\\Administrator\\Desktop\\日志\\布丸播放\\play_2021_03_20.log")); Map<String, Integer> countMap = new HashMap<>(); List<String> videoList = new ArrayList<>(); while (scanner.hasNextLine()) { String text = scanner.nextLine(); UserVideoPlayLogInfo logInfo = gson.fromJson(text, UserVideoPlayLogInfo.class); if ("25".equalsIgnoreCase(logInfo.getResourceId())) sets.add(logInfo.getUtdId()); if (countMap.get(logInfo.getUtdId()) == null) { countMap.put(logInfo.getUtdId(), 0); } if (logInfo.getUtdId() != null && logInfo.getUtdId().equalsIgnoreCase("X8UXEo0HT/0DAMYZJa0w9lWp")) { videoList.add(text); } countMap.put(logInfo.getUtdId(), countMap.get(logInfo.getUtdId()) + 1); System.out.println(logInfo); } System.out.println(sets.size()); scanner.close(); for (String st : videoList) { System.out.println(st); } } private void printAction(String utdId, List<UserActiveLogInfo> infoList) { StringBuilder builder = new StringBuilder(); builder.append(utdId); builder.append("#"); Date last = null; for (UserActiveLogInfo info : infoList) { Date thisDate = new Date(TimeUtil.convertGernalTime(info.getTime(), "yyyy-MM-dd HH:mm:ss.SSS")); builder.append(info.getType()); if (last != null) { builder.append("("); builder.append((thisDate.getTime() - last.getTime()) + ""); builder.append(")"); } if ("videoDetail".equalsIgnoreCase(info.getType())) { builder.append(":" + info.getParams2()); } if ("search".equalsIgnoreCase(info.getType())) { builder.append(":" + info.getParams1()); } builder.append("-"); last = thisDate; } System.out.println(builder.toString()); } private String getAction(List<UserActiveLogInfo> infoList) { List<String> typeList = new ArrayList<>(); for (UserActiveLogInfo info : infoList) { typeList.add(info.getType()); } return org.yeshi.utils.StringUtil.concat(typeList, "-"); } private String getPercent(int total, int count) { return new BigDecimal(count).multiply(new BigDecimal(100)).divide(new BigDecimal(total), 2, RoundingMode.FLOOR) + "%"; } @Test public void userActive() throws Exception { Gson gson = new Gson(); List<String> list = loadLog("C:\\Users\\Administrator\\Desktop\\日志\\布丸播放\\active_2021_03_23.log"); Map<String, List<UserActiveLogInfo>> map = new HashMap<>(); for (String st : list) { UserActiveLogInfo activeLogInfo = gson.fromJson(st, UserActiveLogInfo.class); if (activeLogInfo != null && !StringUtil.isNullOrEmpty(activeLogInfo.getUtdId())) { if (map.get(activeLogInfo.getUtdId()) == null) { map.put(activeLogInfo.getUtdId(), new ArrayList<>()); } map.get(activeLogInfo.getUtdId()).add(activeLogInfo); } } int recommendPlay = 0; int playCount = 0; int searchCount = 0; int searchPlayCount = 0; int noSearchAndPlay = 0; int searchNoPlay = 0; int noComeInCount = 0; int comeinAndNoAction = 0; for (Iterator<String> its = map.keySet().iterator(); its.hasNext(); ) { String key = its.next(); // printAction(key, map.get(key)); String actions = getAction(map.get(key)); if (actions.contains("splash-home-videoDetail")) { recommendPlay++; } if (actions.contains("videoDetail")) { playCount++; } if (actions.contains("search")) { searchCount++; } if (actions.contains("search-videoDetail")) { searchPlayCount++; } //搜索未播放 if (!actions.contains("search-videoDetail") && actions.contains("search")) { searchNoPlay++; // printAction(key, map.get(key)); } if (!actions.contains("search") && !actions.contains("videoDetail")) { noSearchAndPlay++; } if (actions.contains("splash") && !actions.contains("home") && !actions.contains("search") && !actions.contains("videoDetail")) { noComeInCount++; printAction(key, map.get(key)); } if (actions.contains("splash") && actions.contains("home") && !actions.contains("search") && !actions.contains("videoDetail")) { comeinAndNoAction++; } } System.out.println("活跃总数:" + map.size()); System.out.println("播放总数:" + playCount + "比例为:" + getPercent(map.size(), playCount)); System.out.println("推荐播放:" + recommendPlay + "比例为:" + getPercent(map.size(), recommendPlay)); System.out.println("搜索总数:" + searchCount + "比例为:" + getPercent(map.size(), searchCount)); System.out.println("搜索之后播放总数:" + searchPlayCount + "比例为:" + getPercent(map.size(), searchPlayCount)); System.out.println("搜索之后未播放总数:" + searchNoPlay + "比例为:" + getPercent(map.size(), searchNoPlay)); System.out.println("未搜索也未播放总数:" + noSearchAndPlay + "比例为:" + getPercent(map.size(), noSearchAndPlay)); System.out.println("未能成功进入首页总数:" + noComeInCount + "比例为:" + getPercent(map.size(), noComeInCount)); System.out.println("进入首页后无动作的总数:" + comeinAndNoAction + "比例为:" + getPercent(map.size(), comeinAndNoAction)); } class UserVideoPlayLogInfo { /** * resourceId : 25 * detailSystemId : 44 * device : e07f8f33-3c42-3d7f-99f0-c26e2b294117 * utdId : YFYbx3x95gADACWMYFfQNm5Q * time : 2021-03-21 00:00:05.866 * videoId : 7724416 * method : getUserVideoDetail */ private String resourceId; private String detailSystemId; private String device; private String utdId; private String time; private String videoId; private String method; public String getResourceId() { return resourceId; } public void setResourceId(String resourceId) { this.resourceId = resourceId; } public String getDetailSystemId() { return detailSystemId; } public void setDetailSystemId(String detailSystemId) { this.detailSystemId = detailSystemId; } public String getDevice() { return device; } public void setDevice(String device) { this.device = device; } public String getUtdId() { return utdId; } public void setUtdId(String utdId) { this.utdId = utdId; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } public String getVideoId() { return videoId; } public void setVideoId(String videoId) { this.videoId = videoId; } public String getMethod() { return method; } public void setMethod(String method) { this.method = method; } } class UserActiveLogInfo { /** * logName : userActive * type : videoDetail * device : aaad1d79-78d6-36a1-9bd1-83f489dec3ad * time : 2021-03-22 14:04:10.663 * utdId : X++3kU3tfqIDAP+Ug24skyKv * params1 : 1206314 * params2 : 包青天之开封奇案TV版 * params3 : search * version : 107 * detailSystemId : 44 */ private String logName; private String type; private String device; private String time; private String utdId; private String params1; private String params2; private String params3; private String version; private String detailSystemId; public String getLogName() { return logName; } public void setLogName(String logName) { this.logName = logName; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getDevice() { return device; } public void setDevice(String device) { this.device = device; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } public String getUtdId() { return utdId; } public void setUtdId(String utdId) { this.utdId = utdId; } public String getParams1() { return params1; } public void setParams1(String params1) { this.params1 = params1; } public String getParams2() { return params2; } public void setParams2(String params2) { this.params2 = params2; } public String getParams3() { return params3; } public void setParams3(String params3) { this.params3 = params3; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getDetailSystemId() { return detailSystemId; } public void setDetailSystemId(String detailSystemId) { this.detailSystemId = detailSystemId; } } } src/test/java/com/hxh/spring/test/PPTVTest.java
@@ -80,6 +80,18 @@ } catch (Exception e) { e.printStackTrace(); } // List<PPTVSeries> list = PPTVApiUtil.getUpdateList(); // System.out.println(list); } @Test public void syncVideo() { try { pptvVideoUpdate.syncVideo(""); } catch (Exception e) { e.printStackTrace(); } } @Test @@ -119,8 +131,11 @@ @Test public void addVideoInfo() { PPTVSeries series = pptvService.getSeriesDetail("26796"); // List<PPTVSeries> seriesList = pptvSeriesDao.list("少儿", 0, 100); // for (PPTVSeries series : seriesList) { PPTVSeries series = pptvService.getSeriesDetail("381472"); pptvService.addToVideoInfo(series); // } } @Test @@ -257,7 +272,7 @@ } } // @Test // @Test public void getDetail(String sCode) { PPTVSeries series = PPTVApiUtil.getDetail(sCode); pptvService.save(series); src/test/java/com/hxh/spring/test/SolrTest.java
@@ -55,7 +55,7 @@ @Test public void addSolrAlbum() { solrDataManager.syncAllAlbum(); solrDataManager.syncAlbum("8268378"); System.out.println(); } @@ -97,5 +97,10 @@ } } // @Test // public void clear(){ // solrDataManager.clear(); // } }