admin
2021-03-23 7def9937241d8c5fada7a63c8a0fd144bf0c05ff
IOS上线版本资源隐藏
18个文件已修改
2个文件已添加
800 ■■■■■ 已修改文件
src/main/java/com/yeshi/buwan/controller/api/PushController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/parser/ClassParser.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/parser/ConfigParser.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/parser/HomeParser.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/parser/UserParser.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/juhe/pptv/PPTVSeriesDao.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/log/BaseLog.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/job/video/PPTVVideoUpdate.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/pptv/PPTVUtil.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/juhe/PPTVServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/Constant.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/JuHe/VideoResourceUtil.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/TimeUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/log/LoggerUtil.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/log/UserActiveLogFactory.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/log/VideoLogFactory.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/env-pro/logback.xml 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/LogTest.java 361 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/PPTVTest.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/SolrTest.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
//    }
}