admin
2021-03-06 7804263c6061aef813f0db27cb3046f746572606
后台管理优化
2 文件已重命名
65个文件已修改
1 文件已复制
8个文件已添加
2020 ■■■■ 已修改文件
pom.xml 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/aspect/SignAspect.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/MonitorController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/admin/api/HomeTypeController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/admin/api/VideoAdminController.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/admin/api/VipAdminController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/api/UserController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/parser/CommentParser.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/parser/UserParser.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/VideoInfoDao.java 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/base/BaseDao.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/base/MongodbBaseDao.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/juhe/iqiyi/IqiyiAlbum2Dao.java 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/video/VideoInfoExtraDao.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/domain/VideoInfo.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/domain/entity/PlayUrl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/domain/solr/SolrAlbumVideo.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/domain/solr/SolrCommonVideo.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/domain/video/VideoInfoExtra.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/search/SolrResultDTO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/search/SolrVideoSearchFilter.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/job/SolrJob.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/job/video/VideoUpdateJob.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/pptv/PPTVApiUtil.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/pptv/PPTVVipManager.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/query/BaseQuery.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/AdService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/AttentionService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/CategoryRecommendCacheVideoService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/CategoryVideoService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/ClassService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/LoginUserServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/SearchService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/StarService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/StatisticsService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/UserService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/VideoInfoService.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/VideoResourceService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/juhe/FunTV2ServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/juhe/Iqiyi2ServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/juhe/IqiyiService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/juhe/PPTVServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/juhe/SoHuService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/shop/ShopService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/video/VideoInfoExtraServiceImpl.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/inter/LoginUserService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/inter/video/VideoInfoExtraService.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/manager/SolrAlbumVideoDataManager.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/manager/SolrCommonVideoDataManager.java 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/Constant.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/JuheVideoUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/SpringContext.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/factory/SolrVideoFactory.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/factory/VideoInfoFactory.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/vo/video/VideoAdminInfoVO.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/env-dev/logback.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/env-dev/solr.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/env-pro/logback.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/env-pro/solr.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/solr.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/admin/new/add-shipingfenlei.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/admin/new/edit-lmneirong-video.html 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/admin/new/fenqu.html 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/admin/new/image/icon_vip.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/admin/new/tuijian-lanmuneirong-videos.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/AcfunTest.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/AlipayTest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/ClearVideo.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/DES.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/GeneralTest.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/Iqiyi2.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/PPTVTest.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/SolrTest.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/SouGouTest.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/UserTest.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/vip/VIPTest.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -10,9 +10,9 @@
    <properties>
        <org.hibernate.version>4.1.2</org.hibernate.version>
        <org.springframework-version>4.0.3.RELEASE</org.springframework-version>
        <org.springframework-version>4.3.0.RELEASE</org.springframework-version>
        <spring.mongodb.version>1.10.10.RELEASE</spring.mongodb.version>
        <solrj.version>7.5.0</solrj.version>
        <solrj.version>5.5.5</solrj.version>
        <logback.version>1.2.3</logback.version>
    </properties>
@@ -98,20 +98,13 @@
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${org.springframework-version}</version>
            <version>4.3.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.0.2.RELEASE</version>
            <scope>compile</scope>
            <version>4.3.0.RELEASE</version>
        </dependency>
        <!-- Spring AOP -->
@@ -529,37 +522,17 @@
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>com.janeluo</groupId>
            <artifactId>ikanalyzer</artifactId>
            <version>2012_u6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-solr -->
        <!--spring data solr-->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-solr</artifactId>
            <version>4.0.3.RELEASE</version>
            <version>2.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
            <version>2.3.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.xuxueli</groupId>
@@ -633,6 +606,16 @@
            <groupId>com.qcloud</groupId>
            <artifactId>cmq-http-client</artifactId>
            <version>1.0.7</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 支付宝相关 -->
@@ -659,23 +642,6 @@
        </dependency>
        <dependency>
            <groupId>vpush</groupId>
            <artifactId>vpush-server-sdk</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>opush</groupId>
            <artifactId>opush-server-sdk</artifactId>
            <version>1.0.6</version>
        </dependency>
        <dependency>
            <groupId>mipush</groupId>
            <artifactId>MiPush_SDK_Server_Http</artifactId>
            <version>1.0.11</version>
        </dependency>
    </dependencies>
src/main/java/com/yeshi/buwan/aspect/SignAspect.java
@@ -73,8 +73,8 @@
            if (!sign.equalsIgnoreCase(acceptData.getSign())) {
                if (out == null)
                    out = response.getWriter();
                System.out.println("签名错误");
                out.print(JsonUtil.loadFalseJson("签名错误"));
                return null;
            }
        } else {
src/main/java/com/yeshi/buwan/controller/MonitorController.java
@@ -2,23 +2,20 @@
import com.yeshi.buwan.dto.search.SolrResultDTO;
import com.yeshi.buwan.dto.search.SolrVideoSearchFilter;
import com.yeshi.buwan.service.manager.SolrAlbumDataManager;
import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Controller
@RequestMapping("monitor")
public class MonitorController {
    @Resource
    private SolrAlbumDataManager solrDataManager;
    private SolrAlbumVideoDataManager solrDataManager;
    /**
src/main/java/com/yeshi/buwan/controller/admin/api/HomeTypeController.java
@@ -121,12 +121,13 @@
    }
    @RequestMapping(value = "/addhometype", method = RequestMethod.POST)
    public void addHomeType(@Valid HomeType homeType, String detailsystemids, BindingResult bingdingResult,
    public void addHomeType(@Valid HomeType homeType, String detailsystemids, BindingResult bingdingResult, HttpSession session,
                            PrintWriter out) {
        if (bingdingResult.hasErrors()) {// 错误
        }
        homeType.setCreatetime(System.currentTimeMillis() + "");
        homeType.setSystem(SystemUtil.getAdminSelectedSystem(session));
        Serializable id = homeTypeService.addHomeType(homeType);
        if (id != null && !StringUtil.isNullOrEmpty(detailsystemids)) {
@@ -191,6 +192,8 @@
    @RequestMapping(value = "/gethometype", method = RequestMethod.POST)
    public void getHomeType(long id, PrintWriter out) {
        HomeType ht = homeTypeService.getHomeTypeById(id + "");
        ht.setSystem(null);
        ht.setAdmin(null);
        List<DetailSystemSelect> selectList = homeTypeService.getDetailSystemSelectByType(id + "");
        Gson gson = new GsonBuilder().create();
        JSONObject object = new JSONObject();
src/main/java/com/yeshi/buwan/controller/admin/api/VideoAdminController.java
@@ -3,15 +3,20 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
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.SolrVideo;
import com.yeshi.buwan.domain.solr.SolrAlbumVideo;
import com.yeshi.buwan.domain.video.VideoInfoExtra;
import com.yeshi.buwan.dto.search.SolrResultDTO;
import com.yeshi.buwan.dto.search.SolrVideoSearchFilter;
import com.yeshi.buwan.iqiyi.IqiYiNewAPI;
import com.yeshi.buwan.service.manager.SolrAlbumDataManager;
import com.yeshi.buwan.service.inter.video.VideoInfoExtraService;
import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager;
import com.yeshi.buwan.util.Constant;
import com.yeshi.buwan.vo.video.VideoAdminInfoVO;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
@@ -28,7 +33,6 @@
import com.yeshi.buwan.service.imp.VideoManager;
import com.yeshi.buwan.util.JsonUtil;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.TimeUtil;
import com.yeshi.buwan.web.tag.PageEntity;
import net.sf.json.JSONArray;
@@ -57,7 +61,10 @@
    private ThreadPoolTaskExecutor taskExecutor;
    @Resource
    private SolrAlbumDataManager solrAlbumDataManager;
    private SolrAlbumVideoDataManager solrAlbumDataManager;
    @Resource
    private VideoInfoExtraService videoInfoExtraService;
    @RequestMapping(value = "/changevideoshow", method = RequestMethod.POST)
    public void changeVideoShow(String id, int show, PrintWriter out) {
@@ -85,10 +92,15 @@
    }
    @RequestMapping(value = "/videolist", method = RequestMethod.POST)
    public void videoList(int videotype, int page, String key, String type, String resourceIds, int contenttype, PrintWriter out) {
    public void videoList(int videotype, int page, String key, String type, String resourceIds, int contenttype, String freeType, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(type)) {
            type = "name";
        }
        Integer freeTypeInt = null;
        if (!StringUtil.isNullOrEmpty(freeType)) {
            freeTypeInt = Integer.parseInt(freeType);
        }
@@ -125,9 +137,11 @@
            filter.setSortKey("updateTime");
            filter.setFreeType(freeTypeInt);
            SolrResultDTO dto = solrAlbumDataManager.find(filter, page, Constant.pageCount);
            if (dto.getVideoList() != null)
                for (SolrVideo videoInfo : dto.getVideoList())
                for (SolrAlbumVideo videoInfo : (List<SolrAlbumVideo>) dto.getVideoList())
                    voList.add(VideoAdminInfoVO.create(videoInfo));
            count = dto.getTotalCount();
        } else {
@@ -138,6 +152,30 @@
                for (VideoInfo videoInfo : list)
                    voList.add(VideoAdminInfoVO.create(videoInfo));
        }
        List<String> ids = new ArrayList<>();
        for (VideoAdminInfoVO a : voList) {
            ids.add(a.getId());
        }
        List<VideoInfoExtra> extraList = videoInfoExtraService.listByIds(ids);
        Map<String, VideoInfoExtra> maps = Maps.uniqueIndex(extraList.iterator(), new Function<VideoInfoExtra, String>() {
            @Override
            public String apply(VideoInfoExtra extra) {
                return extra.getId();
            }
        });
        //过滤图片
        for (VideoAdminInfoVO a : voList) {
            VideoInfoExtra extra = maps.get(a.getId());
            if (extra != null) {
                if (!StringUtil.isNullOrEmpty(extra.gethPosterPicture()))
                    a.setPicture(extra.gethPosterPicture());
            }
        }
        JSONObject object = new JSONObject();
        object.put("code", 0);
        JSONObject data = new JSONObject();
@@ -206,5 +244,42 @@
        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);
    }
}
src/main/java/com/yeshi/buwan/controller/admin/api/VipAdminController.java
@@ -1,28 +1,14 @@
package com.yeshi.buwan.controller.admin.api;
import com.google.gson.*;
import com.yeshi.buwan.acFun.AcFunUtil;
import com.yeshi.buwan.domain.SolrVideo;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.vip.UserVIPInfo;
import com.yeshi.buwan.domain.vip.VIPOrderRecord;
import com.yeshi.buwan.dto.search.SolrResultDTO;
import com.yeshi.buwan.dto.search.SolrVideoSearchFilter;
import com.yeshi.buwan.iqiyi.IqiYiNewAPI;
import com.yeshi.buwan.iqiyi.util.IqiyiUtil;
import com.yeshi.buwan.service.imp.ClassService;
import com.yeshi.buwan.service.imp.ResourceVideoService;
import com.yeshi.buwan.service.imp.VideoManager;
import com.yeshi.buwan.service.inter.vip.VIPService;
import com.yeshi.buwan.service.manager.SolrAlbumDataManager;
import com.yeshi.buwan.util.Constant;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.TimeUtil;
import com.yeshi.buwan.vo.video.VideoAdminInfoVO;
import com.yeshi.buwan.web.tag.PageEntity;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
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;
@@ -30,9 +16,7 @@
import org.yeshi.utils.JsonUtil;
import javax.annotation.Resource;
import java.io.PrintWriter;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
src/main/java/com/yeshi/buwan/controller/api/UserController.java
@@ -43,6 +43,12 @@
        if (extra == null)
            extra = loginUserService.initExtra(loginUid);
        //是否有pptvuid
        if (extra != null && StringUtil.isNullOrEmpty(extra.getPptvUid())) {
            extra = loginUserService.initPPTVUid(extra.getId());
        }
        //需要初始化VIP信息
        vipService.initUserVipInfo(loginUid);
src/main/java/com/yeshi/buwan/controller/parser/CommentParser.java
@@ -109,29 +109,38 @@
        }
        LoginUser lu = null;
        try {
            LoginUser lu = userService.login(loginInfoDto);
            if (lu != null) {
                JSONObject object = new JSONObject();
                object.put("LoginUid", lu.getId());
                out.print(JsonUtil.loadTrueJson(object.toString()));
            } else {
            lu = userService.login(loginInfoDto);
            if (lu == null) {
                out.print(JsonUtil.loadFalseJson("登录失败"));
                return;
            }
        } catch (LoginUserException e) {
            //用户不存在
            if (e.getCode() == LoginUserException.CODE_NO_USER && loginTypeInt == LoginUser.LOGIN_TYPE_EMAIL) {
            if (e.getCode() == LoginUserException.CODE_NO_USER && loginTypeInt != LoginUser.LOGIN_TYPE_EMAIL) {
                //注册
                try {
                    userService.register(loginInfoDto);
                    lu = userService.register(loginInfoDto);
                } catch (RegisterUserException e1) {
                    out.print(JsonUtil.loadFalseJson("登录失败"));
                    return;
                }
            } else {
                out.print(JsonUtil.loadFalseJson(e.getMessage()));
                return;
            }
        }
        if (lu != null) {
            JSONObject object = new JSONObject();
            object.put("LoginUid", lu.getId());
            object.put("Portrait", lu.getPortrait());
            object.put("NickName", lu.getName());
            out.print(JsonUtil.loadTrueJson(object.toString()));
        } else {
            out.print(JsonUtil.loadFalseJson("登录失败"));
        }
    }
src/main/java/com/yeshi/buwan/controller/parser/UserParser.java
@@ -7,7 +7,7 @@
import com.yeshi.buwan.exception.user.LoginUserException;
import com.yeshi.buwan.exception.user.RegisterUserException;
import com.yeshi.buwan.service.imp.*;
import com.yeshi.buwan.service.manager.SolrAlbumDataManager;
import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager;
import com.yeshi.buwan.util.*;
import com.yeshi.buwan.util.JuHe.VideoResourceUtil;
import com.yeshi.buwan.util.annotation.RequireUid;
@@ -52,7 +52,7 @@
    @Resource
    private VideoInfoService videoInfoService;
    @Resource
    private SolrAlbumDataManager solrDataManager;
    private SolrAlbumVideoDataManager solrDataManager;
    @Resource
    private ConfigParser configParser;
src/main/java/com/yeshi/buwan/dao/VideoInfoDao.java
@@ -1,6 +1,7 @@
package com.yeshi.buwan.dao;
import com.yeshi.buwan.dao.base.BaseDao;
import com.yeshi.buwan.query.BaseQuery;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate4.HibernateCallback;
@@ -17,6 +18,236 @@
@Repository
public class VideoInfoDao extends BaseDao<VideoInfo> {
    /**
     * 选择性更新
     *
     * @param bean
     */
    public void updateSelective(VideoInfo bean) {
        List<String> wheres = new ArrayList<>();
        List<Serializable> params = new ArrayList<>();
        if (bean.getTag() != null) {
            wheres.add("vi.tag=?");
            params.add(bean.getTag());
        }
        if (bean.getTotalNumber() != null) {
            wheres.add("vi.totalNumber=?");
            params.add(bean.getTotalNumber());
        }
        if (bean.getPicture() != null) {
            wheres.add("vi.picture=?");
            params.add(bean.getPicture());
        }
        if (bean.getName() != null) {
            wheres.add("vi.name=?");
            params.add(bean.getName());
        }
        if (bean.getIntroduction() != null) {
            wheres.add("vi.introduction=?");
            params.add(bean.getIntroduction());
        }
        if (bean.getDuration() != null) {
            wheres.add("vi.duration=?");
            params.add(bean.getDuration());
        }
        if (bean.getMainActor() != null) {
            wheres.add("vi.mainActor=?");
            params.add(bean.getMainActor());
        }
        if (bean.getYear() != null) {
            wheres.add("vi.year=?");
            params.add(bean.getYear());
        }
        if (bean.getBeizhu() != null) {
            wheres.add("vi.beizhu=?");
            params.add(bean.getBeizhu());
        }
        if (bean.getQulity() != null) {
            wheres.add("vi.qulity=?");
            params.add(bean.getQulity());
        }
        if (bean.getScore() != null) {
            wheres.add("vi.score=?");
            params.add(bean.getScore());
        }
        if (bean.getShare() != null) {
            wheres.add("vi.share=?");
            params.add(bean.getShare());
        }
        if (bean.getShow() != null) {
            wheres.add("vi.show=?");
            params.add(bean.getShow());
        }
        if (bean.getWatchCount() != null) {
            wheres.add("vi.watchCount=?");
            params.add(bean.getWatchCount());
        }
        if (bean.getOrderby() != null) {
            wheres.add("vi.orderby=?");
            params.add(bean.getOrderby());
        }
        if (bean.getNowNumber() != null) {
            wheres.add("vi.nowNumber=?");
            params.add(bean.getNowNumber());
        }
        if (bean.getFinish() != null) {
            wheres.add("vi.finish=?");
            params.add(bean.getFinish());
        }
        if (bean.getBaseurl() != null) {
            wheres.add("vi.baseurl=?");
            params.add(bean.getBaseurl());
        }
        if (bean.getMonth() != null) {
            wheres.add("vi.month=?");
            params.add(bean.getMonth());
        }
        if (bean.getDay() != null) {
            wheres.add("vi.day=?");
            params.add(bean.getDay());
        }
        if (bean.getArea() != null) {
            wheres.add("vi.area=?");
            params.add(bean.getArea());
        }
        if (bean.getFocus() != null) {
            wheres.add("vi.focus=?");
            params.add(bean.getFocus());
        }
        if (bean.getLeafctgs() != null) {
            wheres.add("vi.leafctgs=?");
            params.add(bean.getLeafctgs());
        }
        if (bean.getDirector() != null) {
            wheres.add("vi.director=?");
            params.add(bean.getDirector());
        }
        if (bean.getKeyword() != null) {
            wheres.add("vi.keyword=?");
            params.add(bean.getKeyword());
        }
        if (bean.getVpicture() != null) {
            wheres.add("vi.vpicture=?");
            params.add(bean.getVpicture());
        }
        if (bean.getHpicture() != null) {
            wheres.add("vi.hpicture=?");
            params.add(bean.getHpicture());
        }
        if (bean.getLatestVpicture() != null) {
            wheres.add("vi.latestVpicture=?");
            params.add(bean.getLatestVpicture());
        }
        if (bean.getLatestHpicture() != null) {
            wheres.add("vi.latestHpicture=?");
            params.add(bean.getLatestHpicture());
        }
        if (bean.getContentType() != null) {
            wheres.add("vi.contentType=?");
            params.add(bean.getContentType());
        }
        if (bean.getCanSave() != null) {
            wheres.add("vi.canSave=?");
            params.add(bean.getCanSave());
        }
        if (bean.getAdmin() != null) {
            wheres.add("vi.admin=?");
            params.add(bean.getAdmin());
        }
        if (bean.getVideoType() != null) {
            wheres.add("vi.videoType=?");
            params.add(bean.getVideoType());
        }
        if (bean.getCommentCount() != null) {
            wheres.add("vi.commentCount=?");
            params.add(bean.getCommentCount());
        }
        if (bean.getLatestWatchCount() != null) {
            wheres.add("vi.latestWatchCount=?");
            params.add(bean.getLatestWatchCount());
        }
        if (bean.getVideocount() != null) {
            wheres.add("vi.videocount=?");
            params.add(bean.getVideocount());
        }
        if (bean.getType() != null) {
            wheres.add("vi.type=?");
            params.add(bean.getType());
        }
        wheres.add("vi.updatetime=?");
        params.add(System.currentTimeMillis() + "");
        String hql = "update VideoInfo vi set " + StringUtil.concat(wheres, ",") + " where vi.id=" + bean.getId();
        Serializable[] ps = new Serializable[params.size()];
        params.toArray(ps);
        update(hql, ps);
    }
    public List<VideoInfo> list(DaoQuery query) {
        String hql = "from VideoInfo vi ";
        List<Serializable> paramList = new ArrayList<>();
        List<String> andList = new ArrayList<>();
        if (query.show != null) {
            andList.add("vi.show= ?");
            paramList.add(query.show);
        }
        if (query.name != null) {
            andList.add("vi.name= ?");
            paramList.add(query.name);
        }
        if (query.minId != null) {
            andList.add("vi.id>=" + query.minId);
        }
        if (andList.size() > 0) {
            hql += "where " + StringUtil.concat(andList, " and ");
        }
        Serializable[] params = new Serializable[paramList.size()];
        paramList.toArray(params);
        return findList(hql, (int) query.start, query.count, params);
    }
    public long count(DaoQuery query) {
        String hql = "from VideoInfo vi ";
        List<Serializable> paramList = new ArrayList<>();
        List<String> andList = new ArrayList<>();
        if (query.show != null) {
            andList.add("vi.show= ?");
            paramList.add(query.show);
        }
        if (query.name != null) {
            andList.add("vi.name= ?");
            paramList.add(query.name);
        }
        if (query.minId != null) {
            andList.add("vi.id>=" + query.minId);
        }
        if (andList.size() > 0) {
            hql += "where " + StringUtil.concat(andList, " and ");
        }
        Serializable[] params = new Serializable[paramList.size()];
        paramList.toArray(params);
        return getCount(hql, params);
    }
    /**
     * 根据名字查询
     *
@@ -26,7 +257,11 @@
     * @return
     */
    public List<VideoInfo> listByName(String name, int start, int count) {
        return list("from VideoInfo vi where vi.name=?", start, count, new Serializable[]{name});
        DaoQuery query = new DaoQuery();
        query.start = start;
        query.count = count;
        query.name = name;
        return list(query);
    }
@@ -65,4 +300,10 @@
        });
    }
    public static class DaoQuery extends BaseQuery {
        public String show;
        public String name;
        public Long minId;
    }
}
src/main/java/com/yeshi/buwan/dao/base/BaseDao.java
@@ -8,9 +8,9 @@
import org.springframework.orm.hibernate4.HibernateCallback;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import java.io.Serializable;
import java.util.List;
@@ -85,6 +85,24 @@
    }
    public List<T> findList(String hql, final int start, final int count, final Serializable[] params) {
        final String tempsql = hql;
        return (List<T>) hibernateTemplate.execute(new HibernateCallback() {
            public Object doInHibernate(Session session) throws HibernateException {
                Query query = session.createQuery(tempsql);
                if (params != null)
                    for (int i = 0; i < params.length; i++) {
                        query.setParameter(i, params[i]);
                    }
                query.setFirstResult(start);
                query.setMaxResults(count);
                log.info("list");
                return query.list();
            }
        });
    }
    public void update(String hql, final Serializable[] params) {
        hibernateTemplate.execute(new HibernateCallback() {
src/main/java/com/yeshi/buwan/dao/base/MongodbBaseDao.java
@@ -88,6 +88,11 @@
        mongoTemplate.remove(query, getEntityClass());
    }
    public void deleteByPrimaryKey(Object id) {
        Query query = Query.query(Criteria.where("_id").is(id));
        mongoTemplate.remove(query, getEntityClass());
    }
    @SuppressWarnings("unchecked")
    protected Class<T> getEntityClass() {
        Class<T> tClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
src/main/java/com/yeshi/buwan/dao/juhe/iqiyi/IqiyiAlbum2Dao.java
src/main/java/com/yeshi/buwan/dao/video/VideoInfoExtraDao.java
New file
@@ -0,0 +1,59 @@
package com.yeshi.buwan.dao.video;
import com.yeshi.buwan.dao.base.MongodbBaseDao;
import com.yeshi.buwan.domain.video.AlbumVideoMap;
import com.yeshi.buwan.domain.video.VideoInfoExtra;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Repository
public class VideoInfoExtraDao extends MongodbBaseDao<VideoInfoExtra> {
    /**
     * 选择性更新
     *
     * @param extra
     */
    public void updateSelective(VideoInfoExtra extra) {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is(extra.getId()));
        Update update = new Update();
        if (extra.gethPosterPicture() != null) {
            update.set("hPosterPicture", extra.gethPosterPicture());
        }
        if (extra.getvPosterPicture() != null) {
            update.set("vPosterPicture", extra.getvPosterPicture());
        }
        update.set("updateTime", new Date());
        update(query, update);
    }
    /**
     * 根据ID查询
     *
     * @param ids
     * @return
     */
    public List<VideoInfoExtra> listByIds(List<String> ids) {
        List<Criteria> whereList = new ArrayList<>();
        for (String id : ids) {
            whereList.add(Criteria.where("id").is(id));
        }
        Criteria[] wheres = new Criteria[whereList.size()];
        whereList.toArray(wheres);
        Query query = new Query();
        query.addCriteria(new Criteria().orOperator(wheres));
        return findList(query);
    }
}
src/main/java/com/yeshi/buwan/domain/VideoInfo.java
@@ -10,6 +10,7 @@
import javax.persistence.Transient;
import com.google.gson.annotations.Expose;
import org.springframework.data.annotation.Id;
/**
 * 视频信息
@@ -32,16 +33,24 @@
     */
    private static final long serialVersionUID = 1L;
    @Id
    @Expose
    // @Field
    private String id;
    @Expose
    // @Field
    private String tag;
    private String totalNumber;// 所有集数
    @Expose
    private Long createtime;
    private String updatetime;
    @Expose
    private String picture;
    @Expose
    // @Field
    private String name;
    @Expose
@@ -50,93 +59,69 @@
    private String duration;
    @Expose
    // @Field
    private String mainActor;
    @Expose
    private String year;
    @Expose
    private VideoType videoType;
    private String orderby;
    @Expose
    private String thirdType = "0";
    private AdminInfo admin;
    @Expose
    private String beizhu;
    @Expose
    private String qulity;
    @Expose
    private long createtime;
    @Expose
    // @Field
    private String score;
    @Expose
    private String watchCount;
    private String share;// 是否必须分享
    private String show;
    @Expose
    private String watchCount;
    private String orderby;
    @Expose
    private String nowNumber;// 更新到了第几集
    @Expose
    private String finish;// 是否更新完了?0-没有 1-更新完了
    private String baseurl;// 专辑的地址c
    @Expose
    // @Field
    private String share;// 是否必须分享
    private String totalNumber;// 所有集数
    @Expose
    // @Field
    private String tag;
    @Expose
    // @Field
    private boolean canSave;// 0-不能缓存 1-能缓存
    @Expose
    private String area;// 地区
    @Expose
    private int commentCount;
    // @Field
    private String updatetime;
    private String month;
    private String day;
    @Expose
    private List<VideoResource> resourceList;
    private List<VideoType> typeList;
    private String area;// 地区
    private String focus;// 看点
    private String leafctgs;
    private String director;
    private String keyword;
    // 内容类型
    private int contentType;
    @Expose
    private int showType;// 1-长条 2-短条
    @Expose
    private String playPicture;
    @Expose
    private String vpicture;
    @Expose
    private String hpicture;
    private String latestVpicture;
    private String latestHpicture;
    // 内容类型
    private Integer contentType;
    @Expose
    private Boolean canSave;// 0-不能缓存 1-能缓存
    private AdminInfo admin;
    @Expose
    private VideoType videoType;
    @Expose
    private Integer commentCount;
    private Integer latestWatchCount;
    private Integer videocount;
    private int latestWatchCount;
    private int videocount;
    //非数据库缓存数据
    @Expose
    private String thirdType = "0";
    @Expose
    private List<VideoResource> resourceList;
    private List<VideoType> typeList;
    @Expose
    private int showType;// 1-长条 2-短条
    @Expose
    private String playPicture;
    //0-免费  1-VIP  2-用券
    //免费类型
    @Expose
    @Transient
    private int free;
    @Transient
    private VideoResourceMapExtraInfo videoResourceMapExtraInfo;
@@ -150,19 +135,19 @@
        this.videoResourceMapExtraInfo = videoResourceMapExtraInfo;
    }
    public int getVideocount() {
    public Integer getVideocount() {
        return videocount;
    }
    public void setVideocount(int videocount) {
    public void setVideocount(Integer videocount) {
        this.videocount = videocount;
    }
    public int getLatestWatchCount() {
    public Integer getLatestWatchCount() {
        return latestWatchCount;
    }
    public void setLatestWatchCount(int latestWatchCount) {
    public void setLatestWatchCount(Integer latestWatchCount) {
        this.latestWatchCount = latestWatchCount;
    }
@@ -214,11 +199,11 @@
        this.showType = showType;
    }
    public int getContentType() {
    public Integer getContentType() {
        return contentType;
    }
    public void setContentType(int contentType) {
    public void setContentType(Integer contentType) {
        this.contentType = contentType;
    }
@@ -262,11 +247,11 @@
        this.typeList = typeList;
    }
    public int getCommentCount() {
    public Integer getCommentCount() {
        return commentCount;
    }
    public void setCommentCount(int commentCount) {
    public void setCommentCount(Integer commentCount) {
        this.commentCount = commentCount;
    }
@@ -278,7 +263,6 @@
        this.area = area;
    }
    private String director;
    public String getDirector() {
        return director;
@@ -316,11 +300,12 @@
        return serialVersionUID;
    }
    public boolean isCanSave() {
    public Boolean getCanSave() {
        return canSave;
    }
    public void setCanSave(boolean canSave) {
    public void setCanSave(Boolean canSave) {
        this.canSave = canSave;
    }
@@ -521,16 +506,16 @@
        this.qulity = qulity;
    }
    public long getCreatetime() {
    public Long getCreatetime() {
        return createtime;
    }
    public void setCreatetime(long createtime) {
    public void setCreatetime(Long createtime) {
        this.createtime = createtime;
    }
    // 用作分類統計
    // @Field
    private String type;
    public String getType() {
src/main/java/com/yeshi/buwan/domain/entity/PlayUrl.java
@@ -4,7 +4,9 @@
import com.yeshi.buwan.domain.VideoResource;
import org.omg.CORBA.PRIVATE_MEMBER;
public class PlayUrl {
import java.io.Serializable;
public class PlayUrl implements Serializable {
    @Expose
    private VideoResource resource;
    @Expose
src/main/java/com/yeshi/buwan/domain/solr/SolrAlbumVideo.java
copy from src/main/java/com/yeshi/buwan/domain/SolrVideo.java copy to src/main/java/com/yeshi/buwan/domain/solr/SolrAlbumVideo.java
File was copied from src/main/java/com/yeshi/buwan/domain/SolrVideo.java
@@ -1,4 +1,4 @@
package com.yeshi.buwan.domain;
package com.yeshi.buwan.domain.solr;
import org.apache.solr.client.solrj.beans.Field;
import org.springframework.data.solr.core.mapping.Indexed;
@@ -7,9 +7,17 @@
import java.util.Date;
/**
 * 搜索引擎中保存的视频对象
 * 搜索引擎中保存的专辑对象
 */
public class SolrVideo implements Serializable {
public class SolrAlbumVideo implements Serializable {
    public final static int FREE_TYPE_FREE = 0;
    //VIP
    public final static int FREE_TYPE_VIP = 1;
    //用券
    public final static int FREE_TYPE_COUPON = 2;
    @Field
    private String id;
    @Field
@@ -61,6 +69,12 @@
    @Field
    @Indexed
    private String resourceIds;//视频资源ID列表
    @Field("free_type")
    @Indexed
    private int freeType;//免费类型
    public long getUpdateTime() {
@@ -262,4 +276,13 @@
    public void setUpdatetime(String updatetime) {
        this.updatetime = updatetime;
    }
    public int getFreeType() {
        return freeType;
    }
    public void setFreeType(int freeType) {
        this.freeType = freeType;
    }
}
src/main/java/com/yeshi/buwan/domain/solr/SolrCommonVideo.java
File was renamed from src/main/java/com/yeshi/buwan/domain/SolrVideo.java
@@ -1,4 +1,4 @@
package com.yeshi.buwan.domain;
package com.yeshi.buwan.domain.solr;
import org.apache.solr.client.solrj.beans.Field;
import org.springframework.data.solr.core.mapping.Indexed;
@@ -7,17 +7,19 @@
import java.util.Date;
/**
 * 搜索引擎中保存的视频对象
 * 搜索引擎中保存的一般视频对象
 */
public class SolrVideo implements Serializable {
public class SolrCommonVideo implements Serializable {
    @Field
    private String id;
    @Field
    private String mainactor;
    @Field
    private int show;
    @Field("latest_hpicture")
    private String latestHpicture;
    @Field
    private String name;
    @Field
    private String tag;
    @Field
    private String duration;
    @Field
@@ -27,9 +29,9 @@
    @Field("latest_vpicture")
    private String latestVpicture;
    @Field
    private String tag;
    @Field
    private String hpicture;
    @Field("latest_hpicture")
    private String latestHpicture;
    @Field
    private String area;
    @Field
@@ -48,14 +50,18 @@
    private int commentcount;
    @Field
    private int videocount;
    @Field
    private String name;
    @Field
    private String updatetime;
    @Field
    private long updateTime;
    @Indexed
    @Field("root_video_type")
    private long rootVideoType;//视频主分类
    @Indexed
    @Field("video_types")
    private String videoTypes;
    @Field
    private String year;
    @Field
@@ -262,4 +268,13 @@
    public void setUpdatetime(String updatetime) {
        this.updatetime = updatetime;
    }
    public String getVideoTypes() {
        return videoTypes;
    }
    public void setVideoTypes(String videoTypes) {
        this.videoTypes = videoTypes;
    }
}
src/main/java/com/yeshi/buwan/domain/video/VideoInfoExtra.java
New file
@@ -0,0 +1,59 @@
package com.yeshi.buwan.domain.video;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
@Document(collection = "videoInfoExtra")
public class VideoInfoExtra {
    @Id
    private String id;
    //封面横图
    private String hPosterPicture;
    //封面竖图
    private String vPosterPicture;
    private Date createTime;
    private Date updateTime;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String gethPosterPicture() {
        return hPosterPicture;
    }
    public void sethPosterPicture(String hPosterPicture) {
        this.hPosterPicture = hPosterPicture;
    }
    public String getvPosterPicture() {
        return vPosterPicture;
    }
    public void setvPosterPicture(String vPosterPicture) {
        this.vPosterPicture = vPosterPicture;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}
src/main/java/com/yeshi/buwan/dto/search/SolrResultDTO.java
@@ -1,23 +1,21 @@
package com.yeshi.buwan.dto.search;
import com.yeshi.buwan.domain.SolrVideo;
import java.util.List;
public class SolrResultDTO {
    private List<SolrVideo> videoList;
    private List videoList;
    private int totalCount;
    public SolrResultDTO(List<SolrVideo> videoList, int totalCount) {
    public SolrResultDTO(List videoList, int totalCount) {
        this.videoList = videoList;
        this.totalCount = totalCount;
    }
    public List<SolrVideo> getVideoList() {
    public List getVideoList() {
        return videoList;
    }
    public void setVideoList(List<SolrVideo> videoList) {
    public void setVideoList(List videoList) {
        this.videoList = videoList;
    }
src/main/java/com/yeshi/buwan/dto/search/SolrVideoSearchFilter.java
@@ -12,6 +12,8 @@
    private String[] resourceIds;
    private String sortKey;
    private Integer freeType;
    public String getDirector() {
        return director;
    }
@@ -68,4 +70,12 @@
    public void setResourceIds(String[] resourceIds) {
        this.resourceIds = resourceIds;
    }
    public Integer getFreeType() {
        return freeType;
    }
    public void setFreeType(Integer freeType) {
        this.freeType = freeType;
    }
}
src/main/java/com/yeshi/buwan/job/SolrJob.java
@@ -2,8 +2,10 @@
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.yeshi.buwan.service.manager.SolrAlbumDataManager;
import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager;
import com.yeshi.buwan.service.manager.SolrCommonVideoDataManager;
import com.yeshi.buwan.util.SolrUtil;
import com.yeshi.buwan.util.StringUtil;
import org.springframework.stereotype.Component;
import org.yeshi.utils.LinuxRemoteCommandUtil;
@@ -17,7 +19,10 @@
public class SolrJob {
    @Resource
    private SolrAlbumDataManager solrAlbumDataManager;
    private SolrAlbumVideoDataManager solrAlbumDataManager;
    @Resource
    private SolrCommonVideoDataManager solrCommonVideoDataManager;
    @XxlJob("solr-watch")
    public ReturnT<String> reStartSolr(String param) throws Exception {
@@ -56,4 +61,15 @@
        return ReturnT.SUCCESS;
    }
    @XxlJob("solr-syncCommonVideo")
    public ReturnT<String> syncCommonVideo(String param) throws Exception {
        Long minId = null;
        if (!StringUtil.isNullOrEmpty(param)) {
            minId = Long.parseLong(param);
        }
        //同步视频
        solrCommonVideoDataManager.syncAllVideo(minId);
        return ReturnT.SUCCESS;
    }
}
src/main/java/com/yeshi/buwan/job/video/VideoUpdateJob.java
@@ -2,7 +2,7 @@
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.yeshi.buwan.service.manager.SolrAlbumDataManager;
import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@@ -11,7 +11,7 @@
public class VideoUpdateJob {
    @Resource
    private SolrAlbumDataManager solrAlbumDataManager;
    private SolrAlbumVideoDataManager solrAlbumDataManager;
    /**
     * 同步所有专辑
src/main/java/com/yeshi/buwan/pptv/PPTVApiUtil.java
@@ -4,6 +4,7 @@
import com.yeshi.buwan.pptv.entity.PPTVSeries;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.TimeUtil;
import com.yeshi.buwan.util.log.LoggerUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.httpclient.HttpClient;
@@ -161,7 +162,7 @@
        Map<String, String> params = new HashMap<>();
        params.put("uid", uid);
//        String result = baseRequest("https://coapi.pptv.com/coapi-web/api/http/sopRequest", params, "pptv.channel.openid.get");
        String result = baseRequest("http://coapiwebsit.cnsuning.com/coapi-web/api/http/sopRequest", params, "pptv.channel.openid.get");
        String result = baseRequest("https://coapi.pptv.com/coapi-web/api/http/sopRequest", params, "pptv.channel.openid.get");
        System.out.println(result);
        JSONObject resultJSON = JSONObject.fromObject(result);
        JSONObject response = resultJSON.optJSONObject("response");
@@ -184,7 +185,7 @@
     * @param code
     */
    public static boolean login(String code) {
        String url = String.format("https://coapi.pptv.com/coapi-web/api/getUserToken/%s/%s.htm", APP_KEY, code);
        String url = String.format("https://coapi.pptv.com/coapi-web/api/getUserToken/%s/%s.htm", APP_KEY,URLEncoder.encode(code));
        String result = HttpUtil.get(url);
        System.out.println(result);
        JSONObject resultJSON = JSONObject.fromObject(result);
@@ -211,6 +212,7 @@
        params.put("orderTime", TimeUtil.getGernalTime(orderTime.getTime(), "yyyy-MM-dd HH:mm:ss"));
        params.put("sign", StringUtil.Md5(String.format("%s&%s&%s&%s", openId, params.get("channel"), orderNo, "2MnD8nCWu7EzbiJ")));
        String result = get("http://billing.api.pptv.com/cusp/jointMember", params);
        LoggerUtil.getVIPLogger().info("开通会员-订单号:{},结果:{}", orderNo, result);
        System.out.println(result);
        JSONObject data = JSONObject.fromObject(result);
        if (data.optInt("errorCode") == 0) {
src/main/java/com/yeshi/buwan/pptv/PPTVVipManager.java
@@ -9,6 +9,7 @@
import com.yeshi.buwan.service.inter.vip.VIPPriceService;
import com.yeshi.buwan.util.StringUtil;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@@ -26,10 +27,12 @@
    /**
     * 购买VIP
     *
     * @param record
     * @throws PPTVException
     * @throws VIPException
     */
    @Transactional(rollbackFor = Exception.class)
    public void buyVIP(VIPOrderRecord record) throws PPTVException, VIPException {
        if (record.getState() != VIPOrderRecord.STATE_PAY) {
            throw new VIPException(11, "尚未支付成功");
src/main/java/com/yeshi/buwan/query/BaseQuery.java
New file
@@ -0,0 +1,6 @@
package com.yeshi.buwan.query;
public class BaseQuery {
    public long start;
    public int count;
}
src/main/java/com/yeshi/buwan/service/imp/AdService.java
@@ -417,7 +417,6 @@
                    session.flush();
                    session.getTransaction().commit();
                } catch (Exception e) {
                    if (session.getTransaction().isActive())
                        session.getTransaction().rollback();
                }
                return null;
src/main/java/com/yeshi/buwan/service/imp/AttentionService.java
@@ -137,7 +137,6 @@
                } catch (Exception e) {
                    isS = false;
                    e.printStackTrace();
                    if (session.getTransaction().isActive())
                        session.getTransaction().rollback();
                }
                return isS;
src/main/java/com/yeshi/buwan/service/imp/CategoryRecommendCacheVideoService.java
@@ -8,6 +8,7 @@
import com.yeshi.buwan.domain.DetailSystem;
import com.yeshi.buwan.service.inter.VideoResourceMapExtraInfoService;
import com.yeshi.buwan.service.inter.video.VideoInfoExtraService;
import com.yeshi.buwan.util.JuHe.VideoResourceUtil;
import org.hibernate.HibernateException;
import org.hibernate.SQLQuery;
@@ -37,7 +38,7 @@
    private CategoryRecommendVideoService categoryRecommendVideoService;
    @Resource
    private VideoResourceMapExtraInfoService videoResourceMapExtraInfoService;
    private VideoInfoExtraService videoInfoExtraService;
    @Resource
    private VideoResourceUtil videoResourceUtil;
@@ -243,7 +244,7 @@
            }
        });
        return videoResourceMapExtraInfoService.batchExtraInfo(videoInfoList, resourceList);
        return videoInfoExtraService.batchExtra(videoInfoList, resourceList);
    }
    public CategoryRecommendCacheVideo getByVid(String vid) {
src/main/java/com/yeshi/buwan/service/imp/CategoryVideoService.java
@@ -11,6 +11,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate4.HibernateCallback;
import org.springframework.stereotype.Service;
import org.yeshi.utils.StringUtil;
import java.util.ArrayList;
import java.util.List;
@@ -32,4 +33,14 @@
        }
    }
    public List<CategoryVideo> getCategoryList(List<VideoInfo> videoInfoList) {
        String hql = "from CategoryVideo cv where ";
        List<String> orList=new ArrayList<>();
        for (VideoInfo videoInfo : videoInfoList) {
            orList.add( "cv.video.id=" + videoInfo.getId() );
        }
        hql+= StringUtil.concat(orList," or ");
        return categoryVideoDao.list(hql);
    }
}
src/main/java/com/yeshi/buwan/service/imp/ClassService.java
@@ -7,6 +7,7 @@
import javax.annotation.Resource;
import com.yeshi.buwan.service.inter.VideoResourceMapExtraInfoService;
import com.yeshi.buwan.service.inter.video.VideoInfoExtraService;
import org.hibernate.CacheMode;
import org.hibernate.HibernateException;
import org.hibernate.Session;
@@ -36,8 +37,9 @@
    private VideoInfoDao videoInfoDao;
    @Resource
    private SuperVideoTypeDao superVideoTypeDao;
    @Resource
    private VideoResourceMapExtraInfoService videoResourceMapExtraInfoService;
    private VideoInfoExtraService videoInfoExtraService;
    public List<VideoType> getTypeList() {
        List<VideoType> list = videoTypeDao.list("from VideoType v where v.show='1' and v.parent=null");
@@ -293,7 +295,7 @@
            dataList.add(info);
        }
        dataList = videoResourceMapExtraInfoService.batchExtraInfo(dataList, resourceIdList);
        dataList = videoInfoExtraService.batchExtra(dataList, resourceIdList);
        return dataList;
    }
src/main/java/com/yeshi/buwan/service/imp/LoginUserServiceImpl.java
@@ -30,6 +30,7 @@
    public void initExtra(LoginUserExtra extra) {
        if (extra.getCreateTime() == null)
            extra.setCreateTime(new Date());
        extra.setPptvUid(PPTVUtil.getPPTVUid(extra.getId()));
        loginUserExtraDao.save(extra);
    }
@@ -189,6 +190,18 @@
    }
    @Override
    public LoginUserExtra initPPTVUid(String uid) {
        LoginUserExtra extra = loginUserExtraDao.get(uid);
        if (extra != null) {
            LoginUserExtra update = new LoginUserExtra(uid);
            update.setPptvUid(PPTVUtil.getPPTVUid(uid));
            loginUserExtraDao.updateSelective(update);
            extra.setPptvUid(update.getPptvUid());
        }
        return extra;
    }
    @Override
    public void updateSelectiveByPrimaryKey(LoginUser loginUser) {
        loginUserDao.updateSelective(loginUser);
    }
src/main/java/com/yeshi/buwan/service/imp/SearchService.java
@@ -2,12 +2,14 @@
import com.yeshi.buwan.dao.*;
import com.yeshi.buwan.domain.*;
import com.yeshi.buwan.domain.solr.SolrAlbumVideo;
import com.yeshi.buwan.domain.web.DetailSystemSelect;
import com.yeshi.buwan.domain.web.HotSearchAdmin;
import com.yeshi.buwan.dto.search.SolrResultDTO;
import com.yeshi.buwan.dto.search.SolrVideoSearchFilter;
import com.yeshi.buwan.service.inter.VideoResourceMapExtraInfoService;
import com.yeshi.buwan.service.manager.SolrAlbumDataManager;
import com.yeshi.buwan.service.inter.video.VideoInfoExtraService;
import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager;
import com.yeshi.buwan.util.*;
import com.yeshi.buwan.util.factory.VideoInfoFactory;
import com.yeshi.buwan.util.video.VideoConstant;
@@ -40,10 +42,10 @@
    @Resource
    private DetailSystemDao detailSystemDao;
    @Resource
    private SolrAlbumDataManager solrAlbumDataManager;
    private SolrAlbumVideoDataManager solrAlbumDataManager;
    @Resource
    private VideoResourceMapExtraInfoService videoResourceMapExtraInfoService;
    private VideoInfoExtraService videoInfoExtraService;
    @SuppressWarnings("rawtypes")
    @Cacheable(value = "userCache", key = "'suggestSearch'+'-'+#key+'-'+#system")
@@ -289,7 +291,7 @@
            if (solrResultDTO != null) {
                albumCount = solrResultDTO.getTotalCount();
                for (SolrVideo sv : solrResultDTO.getVideoList()) {
                for (SolrAlbumVideo sv : (List<SolrAlbumVideo>) solrResultDTO.getVideoList()) {
                    VideoInfo video = VideoInfoFactory.create(sv);
                    video.setShowType(1);
                    if (!StringUtil.isNullOrEmpty(video.getMainActor())) {
@@ -372,7 +374,7 @@
        }
        //获取附加信息
        list = videoResourceMapExtraInfoService.batchExtraInfo(list, resourceList);
        list = videoInfoExtraService.batchExtra(list, resourceList);
        return new VideoListResultVO(list, videoType == 0 ? albumCount : 1000L);
    }
src/main/java/com/yeshi/buwan/service/imp/StarService.java
@@ -12,6 +12,7 @@
import javax.annotation.Resource;
import com.yeshi.buwan.service.inter.VideoResourceMapExtraInfoService;
import com.yeshi.buwan.service.inter.video.VideoInfoExtraService;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.cache.annotation.Cacheable;
@@ -44,8 +45,9 @@
    @Resource
    private DetailSystemDao detailSystemDao;
    @Resource
    private VideoResourceMapExtraInfoService videoResourceMapExtraInfoService;
    private VideoInfoExtraService videoInfoExtraService;
    public StarService() {
@@ -183,7 +185,7 @@
            e.printStackTrace();
        }
        list = videoResourceMapExtraInfoService.batchExtraInfo(list, resourceList);
        list = videoInfoExtraService.batchExtra(list, resourceList);
        return list;
    }
src/main/java/com/yeshi/buwan/service/imp/StatisticsService.java
@@ -348,7 +348,6 @@
                } catch (Exception e) {
                    e.printStackTrace();
                    LogHelper.error(e.getMessage());
                    if (session.getTransaction().isActive())
                        session.getTransaction().rollback();
                }
                LogHelper.print("统计完成...");
@@ -441,7 +440,6 @@
                } catch (Exception e) {
                    e.printStackTrace();
                    if (session.getTransaction().isActive())
                        session.getTransaction().rollback();
                }
                return null;
@@ -487,7 +485,6 @@
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    if (session.getTransaction().isActive())
                        session.getTransaction().rollback();
                }
                return null;
@@ -549,7 +546,6 @@
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    if (session.getTransaction().isActive())
                        session.getTransaction().rollback();
                }
                return null;
@@ -579,7 +575,6 @@
                    session.getTransaction().commit();
                } catch (Exception e) {
                    e.printStackTrace();
                    if (session.getTransaction().isActive())
                        session.getTransaction().rollback();
                }
                return null;
src/main/java/com/yeshi/buwan/service/imp/UserService.java
@@ -12,6 +12,7 @@
import com.yeshi.buwan.dto.user.QQUserInfo;
import com.yeshi.buwan.exception.user.LoginUserException;
import com.yeshi.buwan.exception.user.RegisterUserException;
import com.yeshi.buwan.service.inter.LoginUserService;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.cache.annotation.Cacheable;
@@ -44,6 +45,9 @@
    @Resource
    private LoginUserExtraDao loginUserExtraDao;
    @Resource
    private LoginUserService loginUserService;
    // 用户操作
@@ -257,7 +261,7 @@
     *
     * @param dto
     */
    public void register(LoginInfoDto dto) throws RegisterUserException {
    public LoginUser register(LoginInfoDto dto) throws RegisterUserException {
        LoginUser loginUser = null;
        LoginUserExtra loginUserExtra = null;
        switch (dto.getLoginType()) {
@@ -295,6 +299,7 @@
                loginUser.setLoginType(LoginUser.LOGIN_TYPE_QQ);
                loginUser.setQqOpenId(dto.getQqUserInfo().getOpenId());
                loginUser.setName(dto.getQqUserInfo().getName());
                loginUser.setPortrait(dto.getQqUserInfo().getPortrait());
                loginUserExtra = new LoginUserExtra();
@@ -316,6 +321,7 @@
                loginUser.setWxUnionId(dto.getWeiXinUser().getUnionid());
                loginUser.setName(dto.getWeiXinUser().getNickname());
                loginUser.setWxOpenId(dto.getWeiXinUser().getOpenid());
                loginUser.setPortrait(dto.getWeiXinUser().getHeadimgurl());
                loginUserExtra = new LoginUserExtra();
@@ -371,7 +377,9 @@
        loginUserExtra.setId(loginUser.getId());
        loginUserExtra.setCreateTime(new Date());
        loginUserExtraDao.save(loginUserExtra);
        loginUserService.initExtra(loginUserExtra);
        return loginUser;
    }
    public LoginUser getLoginUser(String id) {
src/main/java/com/yeshi/buwan/service/imp/VideoInfoService.java
@@ -1,13 +1,14 @@
package com.yeshi.buwan.service.imp;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.*;
import javax.annotation.Resource;
import com.yeshi.buwan.util.HibernateSessionFactory;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.TimeUtil;
import com.yeshi.buwan.util.mq.CMQManager;
import com.yeshi.buwan.util.video.VideoConstant;
import org.hibernate.HibernateException;
import org.hibernate.SQLQuery;
@@ -137,12 +138,12 @@
    /**
     * 是否存在相同的视频
     * 是否存在相同的视频(根据名称与上映时间)
     *
     * @param newVideoInfo
     * @return
     */
    public VideoInfo getExistSameVideo(VideoInfo newVideoInfo) {
    public VideoInfo getExistSameVideoWithTime(VideoInfo newVideoInfo) {
        int year = Integer.parseInt(newVideoInfo.getYear());
        List<VideoInfo> list = videoInfoDao.listByName(newVideoInfo.getName(), 0, 5);
        if (list != null && list.size() > 0)
@@ -183,6 +184,54 @@
        return null;
    }
    /**
     * 根据名称与主演
     *
     * @param newVideoInfo
     * @return
     */
    public VideoInfo getExistSameVideoWithDirector(VideoInfo newVideoInfo) {
        List<VideoInfo> list = videoInfoDao.listByName(newVideoInfo.getName(), 0, 5);
        if (list != null && list.size() > 0) {
            if (VideoConstant.isMainCategory(newVideoInfo.getVideoType().getId())) {
                for (int i = 0; i < list.size(); i++) {
                    VideoInfo vi = list.get(i);
                    if (getSameDirectorOrActorCount(vi.getDirector(), newVideoInfo.getDirector()) > 0 || getSameDirectorOrActorCount(vi.getMainActor(), newVideoInfo.getMainActor()) > 0) {
//                        if (getSameDirectorOrActorCount(vi.getMainActor(), newVideoInfo.getMainActor()) > 0) {
                        return list.get(i);
//                        }
                    }
                }
            } else {
                return list.get(0);
            }
        }
        return null;
    }
    private int getSameDirectorOrActorCount(String d1, String d2) {
        if (!StringUtil.isNullOrEmpty(d1) && !StringUtil.isNullOrEmpty(d2)) {
            List<String> d1List = new ArrayList<>();
            if (d1.contains("/")) {
                d1List.addAll(Arrays.asList(d1.trim().split("/")));
            } else {
                d1List.addAll(Arrays.asList(d1.trim().split(" ")));
            }
            List<String> d2List = new ArrayList<>();
            if (d2.contains("/"))
                d2List.addAll(Arrays.asList(d2.trim().split("/")));
            else
                d2List.addAll(Arrays.asList(d2.trim().split(" ")));
            d1List.retainAll(d2List);
            return d1List.size();
        }
        return 0;
    }
    public List<VideoInfo> listByVideoIds(List<String> videoIds) {
        return videoInfoDao.listByVideoIds(videoIds);
@@ -202,4 +251,66 @@
        videoInfoDao.statisticVideoExtraInfo(videoId);
    }
    /**
     * 列表查询
     *
     * @param query
     * @return
     */
    public List<VideoInfo> list(VideoInfoDao.DaoQuery query) {
        return videoInfoDao.list(query);
    }
    public long count(VideoInfoDao.DaoQuery query) {
        return videoInfoDao.count(query);
    }
    public void updateVideoInfo(VideoInfo videoInfo) {
        VideoInfo oldVideo = videoInfoDao.find(VideoInfo.class, videoInfo.getId());
        if (oldVideo == null)
            return;
        videoInfoDao.updateSelective(videoInfo);
        //是否需要更新搜索引擎
        boolean needUpdateSolr = false;
        //tag变化
        if (videoInfo.getTag() != null && !videoInfo.getTag().equalsIgnoreCase(oldVideo.getTag())) {
            needUpdateSolr = true;
        }
        //名称变化
        if (videoInfo.getName() != null && !videoInfo.getName().equalsIgnoreCase(oldVideo.getName())) {
            needUpdateSolr = true;
        }
        //picture变化
        if (videoInfo.getHpicture() != null && !videoInfo.getHpicture().equalsIgnoreCase(oldVideo.getHpicture())) {
            needUpdateSolr = true;
        }
        if (videoInfo.getVpicture() != null && !videoInfo.getVpicture().equalsIgnoreCase(oldVideo.getVpicture())) {
            needUpdateSolr = true;
        }
        if (videoInfo.getPicture() != null && !videoInfo.getPicture().equalsIgnoreCase(oldVideo.getPicture())) {
            needUpdateSolr = true;
        }
        //视频类型发生变化
        if (videoInfo.getVideoType() != null && (oldVideo.getVideoType() == null || videoInfo.getVideoType().getId() != oldVideo.getVideoType().getId())) {
            needUpdateSolr = true;
        }
        //是否显示
        if (videoInfo.getShow() != null && !videoInfo.getShow().equalsIgnoreCase(oldVideo.getShow())) {
            needUpdateSolr = true;
        }
        if (needUpdateSolr) {
            CMQManager.getInstance().addSolrMsg(videoInfo.getId());
        }
    }
}
src/main/java/com/yeshi/buwan/service/imp/VideoResourceService.java
@@ -1,25 +1,21 @@
package com.yeshi.buwan.service.imp;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import javax.annotation.Resource;
import com.yeshi.buwan.dao.VideoResourceDao;
import com.yeshi.buwan.domain.LeShiAccount;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.VideoResource;
import com.yeshi.buwan.util.StringUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.hibernate.HibernateException;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.springframework.orm.hibernate4.HibernateCallback;
import org.springframework.stereotype.Service;
import com.yeshi.buwan.dao.VideoResourceDao;
import com.yeshi.buwan.domain.LeShiAccount;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.VideoResource;
import com.yeshi.buwan.util.StringUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import javax.annotation.Resource;
import java.util.Iterator;
import java.util.List;
@Service
public class VideoResourceService {
src/main/java/com/yeshi/buwan/service/imp/juhe/FunTV2ServiceImpl.java
@@ -107,7 +107,7 @@
            }
        } else {//视频不存在
            //判断2个视频实体是否为同一视频
            VideoInfo oldVideo = videoInfoService.getExistSameVideo(newVideoInfo);
            VideoInfo oldVideo = videoInfoService.getExistSameVideoWithTime(newVideoInfo);
            if (oldVideo == null) {
                //添加视频
                Serializable id = videoInfoDao.save(newVideoInfo);
src/main/java/com/yeshi/buwan/service/imp/juhe/Iqiyi2ServiceImpl.java
@@ -182,7 +182,7 @@
            }
        } else {//视频不存在
            //判断2个视频实体是否为同一视频
            VideoInfo oldVideo = videoInfoService.getExistSameVideo(newVideoInfo);
            VideoInfo oldVideo = videoInfoService.getExistSameVideoWithTime(newVideoInfo);
            if (oldVideo == null) {
                //添加视频
                Serializable id = videoInfoDao.save(newVideoInfo);
src/main/java/com/yeshi/buwan/service/imp/juhe/IqiyiService.java
@@ -123,7 +123,6 @@
                    logger.error("saveVideoInfo");
                    logger.error(e.getMessage());
                    e.printStackTrace();
                    if (session.getTransaction().isActive())
                        session.getTransaction().rollback();
                }
                return null;
@@ -564,7 +563,6 @@
                } catch (Exception e) {
                    logger.error("insertAlbumToVideoInfo");
                    logger.error(e.getMessage());
                    if (session.getTransaction().isActive())
                        session.getTransaction().rollback();
                    e.printStackTrace();
                }
src/main/java/com/yeshi/buwan/service/imp/juhe/PPTVServiceImpl.java
@@ -80,7 +80,7 @@
            }
        } else {//视频不存在
            //判断2个视频实体是否为同一视频
            VideoInfo oldVideo = videoInfoService.getExistSameVideo(newVideoInfo);
            VideoInfo oldVideo = videoInfoService.getExistSameVideoWithDirector(newVideoInfo);
            if (oldVideo == null) {
                //添加视频
                Serializable id = videoInfoDao.save(newVideoInfo);
@@ -140,7 +140,7 @@
        VideoPPTVMap map = videoPPTVMapDao.selectByInfoId(infoId);
        if (map == null)
            return;
        videoPPTVMapDao.delete(map.getVideoId());
        videoPPTVMapDao.deleteByPrimaryKey(map.getVideoId());
        resourceVideoService.delete(map.getVideoId() + "", PPTVUtil.RESOURCE_ID + "");
    }
src/main/java/com/yeshi/buwan/service/imp/juhe/SoHuService.java
@@ -209,7 +209,6 @@
                    session.getTransaction().commit();
                } catch (Exception e) {
                    e.printStackTrace();
                    if (session.getTransaction().isActive())
                        session.getTransaction().rollback();
                }
                return vid;
src/main/java/com/yeshi/buwan/service/imp/shop/ShopService.java
@@ -228,7 +228,6 @@
                        return true;
                    }
                } catch (Exception e) {
                    if (session.getTransaction().isActive())
                        session.getTransaction().rollback();
                }
                return false;
src/main/java/com/yeshi/buwan/service/imp/video/VideoInfoExtraServiceImpl.java
New file
@@ -0,0 +1,90 @@
package com.yeshi.buwan.service.imp.video;
import com.google.common.base.Function;
import com.google.common.collect.Maps;
import com.yeshi.buwan.dao.video.VideoInfoExtraDao;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.video.VideoInfoExtra;
import com.yeshi.buwan.service.inter.VideoResourceMapExtraInfoService;
import com.yeshi.buwan.service.inter.video.VideoInfoExtraService;
import com.yeshi.buwan.util.StringUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Service
public class VideoInfoExtraServiceImpl implements VideoInfoExtraService {
    @Resource
    private VideoInfoExtraDao videoInfoExtraDao;
    @Resource
    private VideoResourceMapExtraInfoService videoResourceMapExtraInfoService;
    @Override
    public VideoInfoExtra getById(String id) {
        return videoInfoExtraDao.get(id);
    }
    @Override
    public List<VideoInfoExtra> listByIds(List<String> ids) {
        List<VideoInfoExtra> list = videoInfoExtraDao.listByIds(ids);
        return list;
    }
    @Override
    public void save(VideoInfoExtra extra) {
        //是否存在
        VideoInfoExtra old = videoInfoExtraDao.get(extra.getId());
        if (old == null) {
            extra.setCreateTime(new Date());
            videoInfoExtraDao.save(extra);
            return;
        }
        videoInfoExtraDao.updateSelective(extra);
    }
    @Override
    public void batchExtra(List<VideoInfo> videoInfoList) {
        List<String> ids = new ArrayList<>();
        for (VideoInfo videoInfo : videoInfoList) {
            ids.add(videoInfo.getId());
        }
        List<VideoInfoExtra> list = videoInfoExtraDao.listByIds(ids);
        Map<String, VideoInfoExtra> maps = Maps.uniqueIndex(list.iterator(), new Function<VideoInfoExtra, String>() {
            @Override
            public String apply(VideoInfoExtra extra) {
                return extra.getId();
            }
        });
        for (VideoInfo vi : videoInfoList) {
            VideoInfoExtra extra = maps.get(vi.getId());
            if (extra != null) {
                if (!StringUtil.isNullOrEmpty(extra.getvPosterPicture())) {
                    vi.setVpicture(extra.getvPosterPicture());
                }
                if (!StringUtil.isNullOrEmpty(extra.gethPosterPicture())) {
                    vi.setHpicture(extra.gethPosterPicture());
                }
            }
        }
    }
    @Override
    public List<VideoInfo> batchExtra(List<VideoInfo> videoInfoList, List<Long> resourceIds) {
        batchExtra(videoInfoList);
        videoResourceMapExtraInfoService.batchExtraInfo(videoInfoList, resourceIds);
        return videoInfoList;
    }
}
src/main/java/com/yeshi/buwan/service/inter/LoginUserService.java
@@ -116,6 +116,10 @@
    public LoginUserExtra initExtra(String uid);
    public LoginUserExtra initPPTVUid(String uid);
    /**
     * 根据主键更新
     *
src/main/java/com/yeshi/buwan/service/inter/video/VideoInfoExtraService.java
New file
@@ -0,0 +1,45 @@
package com.yeshi.buwan.service.inter.video;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.video.VideoInfoExtra;
import java.util.List;
public interface VideoInfoExtraService {
    public VideoInfoExtra getById(String id);
    /**
     * 主键查询
     * @param ids
     * @return
     */
    public List<VideoInfoExtra> listByIds(List<String> ids);
    /**
     * 保存信息
     *
     * @param extra
     */
    public void save(VideoInfoExtra extra);
    /**
     * 批量查询
     *
     * @param videoInfoList
     */
    public void batchExtra(List<VideoInfo> videoInfoList);
    /**
     * 批量查询
     *
     * @param videoInfoList
     * @param resourceIds
     */
    public List<VideoInfo> batchExtra(List<VideoInfo> videoInfoList, List<Long> resourceIds);
}
src/main/java/com/yeshi/buwan/service/manager/SolrAlbumVideoDataManager.java
File was renamed from src/main/java/com/yeshi/buwan/service/manager/SolrAlbumDataManager.java
@@ -1,7 +1,7 @@
package com.yeshi.buwan.service.manager;
import com.yeshi.buwan.domain.ResourceVideo;
import com.yeshi.buwan.domain.SolrVideo;
import com.yeshi.buwan.domain.solr.SolrAlbumVideo;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.VideoResource;
import com.yeshi.buwan.domain.video.AlbumVideoMap;
@@ -9,7 +9,10 @@
import com.yeshi.buwan.dto.search.SolrVideoSearchFilter;
import com.yeshi.buwan.service.imp.ResourceVideoService;
import com.yeshi.buwan.service.imp.VideoInfoService;
import com.yeshi.buwan.service.imp.VideoResourceService;
import com.yeshi.buwan.service.inter.VideoResourceMapExtraInfoService;
import com.yeshi.buwan.service.inter.juhe.AlbumVideoMapService;
import com.yeshi.buwan.service.inter.video.VideoInfoExtraService;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.factory.SolrVideoFactory;
import org.apache.solr.client.solrj.response.UpdateResponse;
@@ -19,6 +22,7 @@
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.core.query.Criteria;
import org.springframework.data.solr.core.query.Query;
import org.springframework.data.solr.core.query.SimpleFilterQuery;
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.data.solr.core.query.result.ScoredPage;
import org.springframework.stereotype.Component;
@@ -30,11 +34,11 @@
 * 搜索引擎-专辑数据管理
 */
@Component
public class SolrAlbumDataManager {
public class SolrAlbumVideoDataManager {
    private final static String CORE_NAME = "buwan_album";
    private final String CORE_NAME = "buwan_album";
    private final Logger logger = LoggerFactory.getLogger(SolrAlbumDataManager.class);
    private final Logger logger = LoggerFactory.getLogger(SolrAlbumVideoDataManager.class);
    @Resource
    private SolrTemplate solrTemplate;
@@ -49,8 +53,26 @@
    private ResourceVideoService resourceVideoService;
    @Resource
    private VideoInfoExtraService videoInfoExtraService;
    @Resource
    private VideoResourceService videoResourceService;
    public void saveOrUpdate(VideoInfo videoInfo) {
        UpdateResponse updateResponse = solrTemplate.saveBean(CORE_NAME, SolrVideoFactory.create(videoInfo, videoInfo.getResourceList()));
        List<VideoResource> resourceList = videoResourceService.getResourceList();
        List<Long> rids = new ArrayList<>();
        for (VideoResource vr : resourceList) {
            rids.add(Long.parseLong(vr.getId()));
        }
        List<VideoInfo> videoList = new ArrayList<>();
        videoList.add(videoInfo);
        videoInfoExtraService.batchExtra(videoList, rids);
        UpdateResponse updateResponse = solrTemplate.saveBean(CORE_NAME, SolrVideoFactory.createAlbum(videoInfo, videoInfo.getResourceList()));
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit(CORE_NAME);
        } else {
@@ -59,9 +81,17 @@
    }
    public void saveOrUpdate(List<VideoInfo> videoInfoList) {
        List<SolrVideo> solrVideoList = new ArrayList<>();
        List<VideoResource> resourceList = videoResourceService.getResourceList();
        List<Long> rids = new ArrayList<>();
        for (VideoResource vr : resourceList) {
            rids.add(Long.parseLong(vr.getId()));
        }
        videoInfoExtraService.batchExtra(videoInfoList, rids);
        List<SolrAlbumVideo> solrVideoList = new ArrayList<>();
        for (VideoInfo vi : videoInfoList) {
            solrVideoList.add(SolrVideoFactory.create(vi, vi.getResourceList()));
            solrVideoList.add(SolrVideoFactory.createAlbum(vi, vi.getResourceList()));
        }
        UpdateResponse updateResponse = solrTemplate.saveBeans(CORE_NAME, solrVideoList);
        if (updateResponse.getStatus() == 0) {
@@ -84,7 +114,7 @@
//        }
//    }
    public void deleteById(String id) {
        UpdateResponse updateResponse = solrTemplate.deleteByIds(CORE_NAME, id);
        UpdateResponse updateResponse = solrTemplate.deleteById(CORE_NAME, id);
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit(CORE_NAME);
        } else {
@@ -92,9 +122,9 @@
        }
    }
    public SolrVideo findOne(String id) {
        Optional<SolrVideo> solrVideo = solrTemplate.getById(CORE_NAME, id, SolrVideo.class);
        return solrVideo.get();
    public SolrAlbumVideo findOne(String id) {
        SolrAlbumVideo solrVideo = solrTemplate.getById(CORE_NAME, id, SolrAlbumVideo.class);
        return solrVideo;
    }
    public SolrResultDTO find(SolrVideoSearchFilter filter, int page, int pageSize) {
@@ -105,35 +135,30 @@
        Query query = null;
        if (!StringUtil.isNullOrEmpty(filter.getKey())) {
            //solr精准检索需要带引号
            query = new SimpleQuery("name:\"" + filter.getKey() + "\"");
            query = new SimpleQuery(new Criteria("name").expression("\"" + filter.getKey() + "\"").or("mainactor").expression("\"" + filter.getKey() + "\""));
        } else if (!StringUtil.isNullOrEmpty(filter.getActor())) {
            query = new SimpleQuery(new Criteria("mainactor").expression("\"" + filter.getActor() + "\""));
        } else if (!StringUtil.isNullOrEmpty(filter.getDirector())) {
            query = new SimpleQuery(new Criteria("director").expression("\"" + filter.getDirector() + "\""));
        } else {
            query = new SimpleQuery();
            query = new SimpleQuery("*:*");
        }
        Criteria criteria = new Criteria("contenttype").is(filter.getContentType());
        if (filter.getVideoType() != null) {
            criteria = criteria.and("root_video_type").is(filter.getVideoType());
        }
        if (filter.getActor() != null) {
            criteria = criteria.and("mainactor").expression("\"" + filter.getActor() + "\"");
        }
        if (filter.getDirector() != null) {
            criteria = criteria.and("director").expression("\"" + filter.getDirector() + "\"");
            query.addFilterQuery(new SimpleFilterQuery(Criteria.where("root_video_type").is(filter.getVideoType())));
        }
        if (filter.getResourceIds() != null && filter.getResourceIds().length > 0) {
            criteria = criteria.and("resourceIds").contains(filter.getResourceIds());
            query.addFilterQuery(new SimpleFilterQuery(Criteria.where("resourceIds").contains(filter.getResourceIds())));
        }
        if(filter.getFreeType()!=null){
            query.addFilterQuery(new SimpleFilterQuery(Criteria.where("free_type").is(filter.getFreeType())));
        }
        /** 添加条件 */
        if (criteria != null)
            query.addCriteria(criteria);
        /** 设置分页开始记录数(第一页) 默认0 */
        query.setOffset((page - 1) * pageSize * 1L);
        query.setOffset((page - 1) * pageSize);
        /** 设置每页显示记录数,默认10 */
        query.setRows(pageSize);
        if (StringUtil.isNullOrEmpty(filter.getSortKey())) {
@@ -141,23 +166,25 @@
        } else {
            query.addSort(new Sort(Sort.Direction.DESC, filter.getSortKey()));
        }
        ScoredPage<SolrVideo> result = solrTemplate.queryForPage(CORE_NAME, query, SolrVideo.class);
        ScoredPage<SolrAlbumVideo> result = solrTemplate.queryForPage(CORE_NAME, query, SolrAlbumVideo.class);
        System.out.println("总记录数:" + result.getTotalElements());
        List<SolrVideo> list = result.getContent();
        List<SolrAlbumVideo> list = result.getContent();
        return new SolrResultDTO(list, (int) result.getTotalElements());
    }
    public List<String> getSuggestKeyList(String key) {
        Query query = new SimpleQuery("name:\"" + key + "\"");
        /** 设置分页开始记录数(第一页) 默认0 */
        query.setOffset(0L);
        query.setOffset(0);
        /** 设置每页显示记录数,默认10 */
        query.setRows(10);
        ScoredPage<SolrVideo> result = solrTemplate.queryForPage(CORE_NAME, query, SolrVideo.class);
        ScoredPage<SolrAlbumVideo> result = solrTemplate.queryForPage(CORE_NAME, query, SolrAlbumVideo.class);
        System.out.println("总记录数:" + result.getTotalElements());
        List<SolrVideo> list = result.getContent();
        List<SolrAlbumVideo> list = result.getContent();
        List<String> keyList = new ArrayList<>();
        for (SolrVideo sv : list)
        for (SolrAlbumVideo sv : list)
            if (!keyList.contains(sv.getName()))
                keyList.add(sv.getName());
        return keyList;
@@ -195,10 +222,9 @@
                        vi.setResourceList(map.get(vi.getId()));
                    }
                }
                saveOrUpdate(videoList);
            } catch (Exception e) {
                logger.error("专辑搜索引擎数据同步失败");
                logger.error("专辑搜索引擎数据同步失败",e);
            }
        }
    }
@@ -207,6 +233,7 @@
        AlbumVideoMap map = albumVideoMapService.selectByVideoId(videoId);
        if (map == null)
            return;
        VideoInfo video = videoInfoService.getVideoInfo(videoId);
        if (video != null) {
            List<ResourceVideo> rvList = resourceVideoService.getResourceList(video.getId());
src/main/java/com/yeshi/buwan/service/manager/SolrCommonVideoDataManager.java
New file
@@ -0,0 +1,247 @@
package com.yeshi.buwan.service.manager;
import com.yeshi.buwan.dao.VideoInfoDao;
import com.yeshi.buwan.domain.*;
import com.yeshi.buwan.domain.solr.SolrCommonVideo;
import com.yeshi.buwan.domain.solr.SolrCommonVideo;
import com.yeshi.buwan.domain.video.AlbumVideoMap;
import com.yeshi.buwan.dto.search.SolrResultDTO;
import com.yeshi.buwan.dto.search.SolrVideoSearchFilter;
import com.yeshi.buwan.service.imp.CategoryVideoService;
import com.yeshi.buwan.service.imp.ResourceVideoService;
import com.yeshi.buwan.service.imp.VideoInfoService;
import com.yeshi.buwan.service.inter.juhe.AlbumVideoMapService;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.factory.SolrVideoFactory;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Sort;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.core.query.Criteria;
import org.springframework.data.solr.core.query.Query;
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.data.solr.core.query.result.ScoredPage;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 搜索引擎-专辑数据管理
 */
@Component
public class SolrCommonVideoDataManager {
    private final String CORE_NAME = "buwan_video";
    private final Logger logger = LoggerFactory.getLogger(SolrCommonVideoDataManager.class);
    @Resource
    private SolrTemplate solrTemplate;
    @Resource
    private AlbumVideoMapService albumVideoMapService;
    @Resource
    private VideoInfoService videoInfoService;
    @Resource
    private ResourceVideoService resourceVideoService;
    @Resource
    private CategoryVideoService categoryVideoService;
    public void saveOrUpdate(VideoInfo videoInfo) {
        UpdateResponse updateResponse = solrTemplate.saveBean(CORE_NAME, SolrVideoFactory.createAlbum(videoInfo, videoInfo.getResourceList()));
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit(CORE_NAME);
        } else {
            solrTemplate.rollback(CORE_NAME);
        }
    }
    /**
     * 保存到搜索文档
     *
     * @param videoInfoList
     */
    public void saveOrUpdate(List<VideoInfo> videoInfoList) {
        List<SolrCommonVideo> solrVideoList = new ArrayList<>();
        for (VideoInfo vi : videoInfoList) {
            solrVideoList.add(SolrVideoFactory.createCommon(vi, vi.getTypeList(), vi.getResourceList()));
        }
        UpdateResponse updateResponse = solrTemplate.saveBeans(CORE_NAME, solrVideoList);
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit(CORE_NAME);
        } else {
            solrTemplate.rollback(CORE_NAME);
        }
    }
    public void deleteById(String id) {
        UpdateResponse updateResponse = solrTemplate.deleteById(CORE_NAME, id);
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit(CORE_NAME);
        } else {
            solrTemplate.rollback(CORE_NAME);
        }
    }
    public SolrCommonVideo findOne(String id) {
        SolrCommonVideo solrVideo = solrTemplate.getById(CORE_NAME, id, SolrCommonVideo.class);
        return solrVideo;
    }
    public SolrResultDTO find(SolrVideoSearchFilter filter, int page, int pageSize) {
        if (filter.getKey() == null) {
            filter.setKey("");
        }
        logger.info(filter.getKey() + "#" + page);
        Query query = null;
        if (!StringUtil.isNullOrEmpty(filter.getKey())) {
            //solr精准检索需要带引号
            query = new SimpleQuery("name:\"" + filter.getKey() + "\"");
        } else {
            query = new SimpleQuery();
        }
        Criteria criteria = new Criteria("contenttype").is(filter.getContentType());
        if (filter.getVideoType() != null) {
            criteria = criteria.and("root_video_type").is(filter.getVideoType());
        }
        if (filter.getActor() != null) {
            criteria = criteria.and("mainactor").expression("\"" + filter.getActor() + "\"");
        }
        if (filter.getDirector() != null) {
            criteria = criteria.and("director").expression("\"" + filter.getDirector() + "\"");
        }
        if (filter.getResourceIds() != null && filter.getResourceIds().length > 0) {
            criteria = criteria.and("resourceIds").contains(filter.getResourceIds());
        }
        /** 添加条件 */
        if (criteria != null)
            query.addCriteria(criteria);
        /** 设置分页开始记录数(第一页) 默认0 */
        query.setOffset((page - 1) * pageSize);
        /** 设置每页显示记录数,默认10 */
        query.setRows(pageSize);
        if (StringUtil.isNullOrEmpty(filter.getSortKey())) {
            query.addSort(new Sort(Sort.Direction.DESC, "year"));
        } else {
            query.addSort(new Sort(Sort.Direction.DESC, filter.getSortKey()));
        }
        ScoredPage<SolrCommonVideo> result = solrTemplate.queryForPage(CORE_NAME, query, SolrCommonVideo.class);
        System.out.println("总记录数:" + result.getTotalElements());
        List<SolrCommonVideo> list = result.getContent();
        return new SolrResultDTO(list, (int) result.getTotalElements());
    }
    public List<String> getSuggestKeyList(String key) {
        Query query = new SimpleQuery("name:\"" + key + "\"");
        /** 设置分页开始记录数(第一页) 默认0 */
        query.setOffset(0);
        /** 设置每页显示记录数,默认10 */
        query.setRows(10);
        ScoredPage<SolrCommonVideo> result = solrTemplate.queryForPage(CORE_NAME, query, SolrCommonVideo.class);
        System.out.println("总记录数:" + result.getTotalElements());
        List<SolrCommonVideo> list = result.getContent();
        List<String> keyList = new ArrayList<>();
        for (SolrCommonVideo sv : list)
            if (!keyList.contains(sv.getName()))
                keyList.add(sv.getName());
        return keyList;
    }
    /**
     * 同步所有专辑
     */
    public void syncAllVideo(Long minId) {
        VideoInfoDao.DaoQuery query = new VideoInfoDao.DaoQuery();
        query.show = 1 + "";
        query.minId=minId;
        long count = videoInfoService.count(query);
        int pageSize = 100;
        int pageCount = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
        for (int i = 0; i < pageCount; i++) {
            //查询第一个数据
            query.start = i * pageSize;
            query.minId = null;
            query.count = 1;
            List<VideoInfo> list = videoInfoService.list(query);
            if (list == null || list.size() == 0)
                continue;
            query.minId = Long.parseLong(list.get(0).getId());
            query.count = pageSize;
            list = videoInfoService.list(query);
            if (list == null || list.size() == 0)
                continue;
            //拉取分类
            List<CategoryVideo> categoryVideoList = categoryVideoService.getCategoryList(list);
            Map<String, List<VideoType>> typeMap = new HashMap<>();
            for (CategoryVideo cv : categoryVideoList) {
                if (cv == null || cv.getVideo() == null || cv.getVideoType() == null)
                    continue;
                if (typeMap.get(cv.getVideo().getId()) == null)
                    typeMap.put(cv.getVideo().getId(), new ArrayList<>());
                typeMap.get(cv.getVideo().getId()).add(cv.getVideoType());
            }
            for (VideoInfo videoInfo : list) {
                videoInfo.setTypeList(typeMap.get(videoInfo.getId()));
            }
            //拉取资源
            List<ResourceVideo> rvList = resourceVideoService.getResourceList(list);
            Map<String, List<VideoResource>> map = new HashMap<>();
            for (ResourceVideo rv : rvList) {
                if (rv.getVideo() != null && rv.getResource() != null) {
                    if (map.get(rv.getVideo().getId()) == null)
                        map.put(rv.getVideo().getId(), new ArrayList<>());
                    map.get(rv.getVideo().getId()).add(rv.getResource());
                }
            }
            for (VideoInfo vi : list) {
                if (map.get(vi.getId()) != null) {
                    vi.setResourceList(map.get(vi.getId()));
                }
            }
            try {
                saveOrUpdate(list);
            } catch (Exception e) {
                logger.error("一般视频搜索引擎数据同步失败",e);
            }
        }
    }
//    public void syncAlbum(String videoId) {
//        AlbumVideoMap map = albumVideoMapService.selectByVideoId(videoId);
//        if (map == null)
//            return;
//        VideoInfo video = videoInfoService.getVideoInfo(videoId);
//        if (video != null) {
//            List<ResourceVideo> rvList = resourceVideoService.getResourceList(video.getId());
//            List<VideoResource> vrList = new ArrayList<>();
//            for (ResourceVideo rv : rvList)
//                vrList.add(rv.getResource());
//            video.setResourceList(vrList);
//            saveOrUpdate(video);
//        }
//    }
}
src/main/java/com/yeshi/buwan/util/Constant.java
@@ -15,7 +15,7 @@
    public static boolean isUpdate = false;// 是否在上传应用市场;
    public static boolean IsOutNet = false;// 是否为外网
    public static boolean IsOutNet = true;// 是否为外网
    public static boolean JobTasker = false;
src/main/java/com/yeshi/buwan/util/JuheVideoUtil.java
@@ -43,7 +43,6 @@
            // }
        } catch (Exception e) {
            if (session.getTransaction().isActive())
                session.getTransaction().rollback();
            e.printStackTrace();
        } finally {
src/main/java/com/yeshi/buwan/util/SpringContext.java
@@ -13,7 +13,7 @@
import com.yeshi.buwan.service.inter.juhe.FunTV2Service;
import com.yeshi.buwan.service.inter.juhe.Iqiyi2Service;
import com.yeshi.buwan.service.inter.juhe.PPTVService;
import com.yeshi.buwan.service.manager.SolrAlbumDataManager;
import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager;
import com.yeshi.buwan.util.mq.CMQManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,7 +37,7 @@
    private VideoInfoService videoInfoService;
    @Resource
    private SolrAlbumDataManager solrDataManager;
    private SolrAlbumVideoDataManager solrDataManager;
    @Resource
    private Iqiyi2Service iqiyi2Service;
src/main/java/com/yeshi/buwan/util/factory/SolrVideoFactory.java
@@ -1,9 +1,11 @@
package com.yeshi.buwan.util.factory;
import com.yeshi.buwan.domain.SolrVideo;
import com.yeshi.buwan.domain.CategoryVideo;
import com.yeshi.buwan.domain.VideoType;
import com.yeshi.buwan.domain.solr.SolrAlbumVideo;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.VideoResource;
import com.yeshi.buwan.util.VideoTypeUtil;
import com.yeshi.buwan.domain.solr.SolrCommonVideo;
import org.yeshi.utils.StringUtil;
import java.util.ArrayList;
@@ -13,8 +15,8 @@
public class SolrVideoFactory {
    public static SolrVideo create(VideoInfo videoInfo, List<VideoResource> videoResources) {
        SolrVideo solrVideo = new SolrVideo();
    public static SolrAlbumVideo createAlbum(VideoInfo videoInfo, List<VideoResource> videoResources) {
        SolrAlbumVideo solrVideo = new SolrAlbumVideo();
        solrVideo.setMainactor(videoInfo.getMainActor());
        solrVideo.setShow(Integer.parseInt(videoInfo.getShow()));
        solrVideo.setLatestHpicture(videoInfo.getLatestHpicture());
@@ -53,6 +55,66 @@
            solrVideo.setResourceIds(StringUtil.concat(resourceIds, ","));
        }
        solrVideo.setFreeType(videoInfo.getFree());
        return solrVideo;
    }
    public static SolrCommonVideo createCommon(VideoInfo videoInfo, List<VideoType> typeList, List<VideoResource> videoResources) {
        SolrCommonVideo solrVideo = new SolrCommonVideo();
        solrVideo.setMainactor(videoInfo.getMainActor());
        solrVideo.setShow(Integer.parseInt(videoInfo.getShow()));
        solrVideo.setLatestHpicture(videoInfo.getLatestHpicture());
        solrVideo.setDuration(videoInfo.getDuration());
        solrVideo.setScore(videoInfo.getScore());
        solrVideo.setVpicture(videoInfo.getVpicture());
        solrVideo.setLatestVpicture(videoInfo.getLatestVpicture());
        solrVideo.setId(videoInfo.getId());
        solrVideo.setTag(videoInfo.getTag());
        solrVideo.setHpicture(videoInfo.getHpicture());
        solrVideo.setArea(videoInfo.getArea());
        solrVideo.setCreatetime(videoInfo.getCreatetime() + "");
        solrVideo.setWatchcount(Integer.parseInt(videoInfo.getWatchCount()));
        solrVideo.setDirector(videoInfo.getDirector());
        solrVideo.setPicture(videoInfo.getPicture());
        solrVideo.setContenttype(videoInfo.getContentType());
        solrVideo.setSolrTime(new Date());
        solrVideo.setCommentcount(videoInfo.getCommentCount());
        solrVideo.setVideocount(videoInfo.getVideocount());
        solrVideo.setName(videoInfo.getName());
        solrVideo.setUpdatetime(videoInfo.getUpdatetime());
        if (videoInfo.getUpdatetime() != null)
            solrVideo.setUpdateTime(Long.parseLong(videoInfo.getUpdatetime()));
        if (videoInfo.getVideoType() != null)
            solrVideo.setRootVideoType(videoInfo.getVideoType().getId());
        if (typeList != null && typeList.size() > 0) {
            VideoType videoType = typeList.get(0);
            if (videoType.getParent() != null) {
                solrVideo.setRootVideoType(videoType.getParent().getId());
            } else {
                solrVideo.setRootVideoType(videoType.getId());
            }
            List<Long> ids = new ArrayList<>();
            for (VideoType cv : typeList) {
                ids.add(cv.getId());
            }
            solrVideo.setVideoTypes(StringUtil.concat(ids, ","));
        }
        solrVideo.setYear(videoInfo.getYear());
        if (videoResources != null && videoResources.size() > 0) {
            List<String> resourceIds = new ArrayList<>();
            for (VideoResource vr : videoResources) {
                resourceIds.add(vr.getId());
            }
            solrVideo.setResourceIds(StringUtil.concat(resourceIds, ","));
        }
        return solrVideo;
    }
}
src/main/java/com/yeshi/buwan/util/factory/VideoInfoFactory.java
@@ -1,13 +1,13 @@
package com.yeshi.buwan.util.factory;
import com.yeshi.buwan.domain.SolrVideo;
import com.yeshi.buwan.domain.solr.SolrAlbumVideo;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.VideoType;
public class VideoInfoFactory {
    public static VideoInfo create(SolrVideo solrVideo) {
    public static VideoInfo create(SolrAlbumVideo solrVideo) {
        VideoInfo video = new VideoInfo();
        video.setMainActor(solrVideo.getMainactor());
        video.setShow(solrVideo.getShow() + "");
src/main/java/com/yeshi/buwan/vo/video/VideoAdminInfoVO.java
@@ -1,6 +1,6 @@
package com.yeshi.buwan.vo.video;
import com.yeshi.buwan.domain.SolrVideo;
import com.yeshi.buwan.domain.solr.SolrAlbumVideo;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.TimeUtil;
@@ -13,6 +13,15 @@
    private String updatetime;
    private String show;
    private String tag;
    private Integer freeType;
    public Integer getFreeType() {
        return freeType;
    }
    public void setFreeType(Integer freeType) {
        this.freeType = freeType;
    }
    public void setShow(String show) {
        this.show = show;
@@ -45,7 +54,7 @@
    }
    public static VideoAdminInfoVO create(SolrVideo solrVideo) {
    public static VideoAdminInfoVO create(SolrAlbumVideo solrVideo) {
        VideoAdminInfoVO vo = new VideoAdminInfoVO();
        vo.setId(solrVideo.getId());
        vo.setName(solrVideo.getName());
@@ -56,6 +65,7 @@
                        StringUtil.isNullOrEmpty(solrVideo.getUpdatetime() + "") ? "0" : solrVideo.getUpdatetime() + ""),
                "yyyy-MM-dd"));
        vo.setTag(solrVideo.getTag());
        vo.setFreeType(solrVideo.getFreeType());
        return vo;
    }
src/main/resources/env-dev/logback.xml
@@ -137,7 +137,7 @@
    </logger>
    <!--视频搜索关键词 -->
    <logger name="com.yeshi.buwan.service.manager.SolrAlbumDataManager" level="INFO" additivity="true">
    <logger name="com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager" level="INFO" additivity="true">
        <appender-ref ref="searchAppender"></appender-ref>
    </logger>
src/main/resources/env-dev/solr.properties
@@ -1,3 +1,3 @@
solr.url=http://203.195.196.115:8983/solr
solr.url=http://193.112.35.168:9983/solr
solr.user=solr
solr.pwd=IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c=
src/main/resources/env-pro/logback.xml
@@ -149,7 +149,7 @@
    </logger>
    <!--视频搜索关键词 -->
    <logger name="com.yeshi.buwan.service.manager.SolrAlbumDataManager" level="INFO" additivity="true">
    <logger name="com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager" level="INFO" additivity="true">
        <appender-ref ref="searchAppender"></appender-ref>
    </logger>
src/main/resources/env-pro/solr.properties
@@ -1 +1 @@
solr.url=http://172.16.16.12:8983/solr/buwan_album
solr.url=http://172.16.16.12:8983/solr
src/main/resources/solr.xml
@@ -2,20 +2,16 @@
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:solr="http://www.springframework.org/schema/data/solr"
       xmlns:mongo="http://www.springframework.org/schema/data/mongo"
       xsi:schemaLocation="http://www.springframework.org/schema/data/solr
    http://www.springframework.org/schema/data/solr/spring-solr.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/solr http://www.springframework.org/schema/data/solr/spring-solr.xsd">
    <solr:solr-client id="solrClient" url="${solr.url}" />
    <!--<bean id="solrClient" class="org.apache.solr.client.solrj.impl.HttpSolrClient">-->
        <!--<constructor-arg value="${solr.url}"></constructor-arg>-->
    <!--</bean>-->
    <solr:solr-client id="client" url="${solr.url}"></solr:solr-client>
    <bean id="solrTemplate"
          class="org.springframework.data.solr.core.SolrTemplate">
        <constructor-arg ref="solrServer"/>
        <constructor-arg name="solrClient" ref="client"/>
    </bean>
</beans>
src/main/webapp/admin/new/add-shipingfenlei.html
@@ -192,6 +192,7 @@
</script>
<script>
    function addVideoType(key,orderby,name,beizhu,iconFile,iconUrl,show){
        var showtitle=$("#input6").is(":checked")?1:0;
        $.post("api/videoType/addVideoType",{"pid":key,"orderby":orderby,"name":name,"beizhu":beizhu,"iconFile":iconFile,"iconUrl":iconUrl,"show":show,"showTitle":showtitle},function(data){
                    if(data == "yes") {
                            layer.alert('保存成功!', {
src/main/webapp/admin/new/edit-lmneirong-video.html
@@ -17,52 +17,30 @@
            .checkbox input[type=checkbox] {
                top: 6px;
            }
        img{
            margin-bottom: 10px;
        }
        </style>
    </head>
    <body>
        <nav class="navbar navbar-default navbar-fixed-top">
        </nav>
        <div id="mainbody">
            <div id="sidebar">
                <dl>
                </dl>
            </div>
            <div id="neirong">
                <div class="erjidh">
                    <ol class="breadcrumb">
                        <li>
                            <a href="tuijian-lanmuneirong.html">栏目视频</a>
                        </li>
                        <li class="active">修改视频信息</li>
                    </ol>
                </div>
<div>
    <div style="width: 700px;margin: 50px auto">
                <form class="form-horizontal" role="form">
                    <div class="form-group">
                        <label for="input1" class="changdu1 control-label">名称</label>
                <label for="input1" class="changdu1 control-label">封面横图</label>
                        <div class="col-sm-7">
                            <input type="text" class="form-control disabled" id="name" placeholder="">
                    <img style="width: 200px;" class="picture-img-h"/>
                    <input type="text" class="form-control" id="hPosterPicture" placeholder="">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="input1" class="changdu1 control-label">图片</label>
                <label for="input2" class="changdu1 control-label">封面竖图</label>
                        <div class="col-sm-7">
                            <img style="width: 200px;" class="picture-img" />
                            <input type="text" class="form-control" id="picture" placeholder="">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="input2" class="changdu1 control-label">简介</label>
                        <div class="col-sm-7">
                            <input type="text" class="form-control" id="tag" placeholder="">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="input2" class="changdu1 control-label">权重</label>
                        <div class="col-sm-7">
                            <input type="text" class="form-control" id="orderby" placeholder="">
                    <img style="width: 200px;" class="picture-img-v"/>
                    <input type="text" class="form-control" id="vPosterPicture" placeholder="">
                        </div>
                    </div>
                </form>
@@ -70,16 +48,15 @@
                    <div class="button">
                        <button type="button" class="btn btn-primary save">保存</button>
                    </div>
                    <div class="button">
                        <a href="tuijian-lanmuneirong.html" class="btn btn-default" role="button">取消</a>
                    </div>
            <!--<div class="button">-->
                <!--<button type="reset" class="btn btn-primary reset">重置</button>-->
            <!--</div>-->
                </div>
            </div>
        </div>
        <script src="//cdn.bootcss.com/jquery/1.10.1/jquery.min.js"></script>
        <script src="js/bootstrap.min.js"></script>
        <script src="js/nav.js"></script>
        <script src="js/common.js"></script>
        <script src="layer/layer.js"></script>
        <script>
@@ -89,6 +66,7 @@
                if(r != null) return unescape(r[2]);
                return null;
            }
            $(function() {
                //获取参数
                var id = getQueryString("id");
@@ -96,15 +74,24 @@
                var index = layer.load(0, {
                    'shade': false
                });
                $.post('../new/api/home/gethomevideo', {
        $.post('../new/api/video/getVideoInfoExtra', {
                    'id': id
                }, function(data) {
                    layer.close(index);
                    $("#name").val(data.data.video.name);
                    $("#tag").val(data.data.tag);
                    $("#picture").val(data.data.picture);
                    $("#orderby").val(data.data.orderby);
                    $(".picture-img").attr("src", data.data.picture);
            if (data.code == 0) {
                if (data.data.hPosterPicture) {
                    $("#hPosterPicture").val(data.data.hPosterPicture);
                    $(".picture-img-h").attr("src", data.data.hPosterPicture);
                }
                if (data.data.vPosterPicture) {
                    $("#vPosterPicture").val(data.data.vPosterPicture);
                    $(".picture-img-v").attr("src", data.data.vPosterPicture);
                }
            }
                }, 'json');
                $(".save").click(function() {
@@ -118,14 +105,18 @@
                    if(dess.length > 0)
                        dess = dess.substr(0, dess.length - 1);
                    $.post('../new/api/home/updatehomevideo', {
            $.post('../new/api/video/updateVideoInfoExtra', {
                        'id': id,
                        'tag': $("#tag").val(),
                        'picture': $("#picture").val(),
                        'orderby':$("#orderby").val()
                'vPicture': $("#vPosterPicture").val(),
                'hPicture': $("#hPosterPicture").val(),
                    }, function(data) {
                        layer.close(index);
                if (data.code == 0) {
                    layer.msg("修改成功");
                } else {
                        layer.msg(data.msg);
                }
                        doResponse(data, function() {
                        });
src/main/webapp/admin/new/fenqu.html
@@ -109,6 +109,14 @@
                <option value="25">PPTV</option>
            </select>
            <select name="select" class="form-control search freeType">
                <option value="">--请选择收费类型--</option>
                <option value="0">免费</option>
                <option value="1">会员</option>
            </select>
            <select name="select" class="form-control search type">
                <option value="name" selected>片名</option>
                <option value="actor">主演</option>
@@ -207,6 +215,10 @@
                                <img alt src="image/banner/青云志.jpg" class="video-img" style="width: 240px;">
                                <span style="position: absolute;right: 2px;bottom: 2px;color: red" class="tag"></span>
                                <img src="image/icon_vip.png"
                                     style="position: absolute;right: 0px;top: 0px;height: 40px;"
                                     class="vip"/>
                            </div>
                        </td>
                        <td width="17%">
@@ -234,7 +246,7 @@
                        </td>
                        <td width="7%">
                            <div class="anniu">
                                <a key="370" class="edit" onclick="p_del()"><img src="image/bianji.png"></a>
                                <a key="370" target="_blank" class="edit"><img src="image/bianji.png"></a>
                            </div>
                        </td>
                    </tr>
@@ -406,6 +418,7 @@
    </div>
</div>
<div id="dialog-chooselink" style="display: none;">
    <select name="select" class="form-control addType">
@@ -651,6 +664,7 @@
                "detailsystem": $(".search-div .select-detailsystem").val(),
                "type": $(".search-div .type").val(),
                "contenttype": $(".contenttype").val(),
                "freeType": $(".freeType").val(),
                "key": $("#kw").val(),
                "resourceIds": JSON.stringify(resourceIds)
            }, function (data) {
@@ -685,6 +699,12 @@
                    fk.find(".edit").attr("key", da.id);
                    fk.find(".delete").attr("key", da.id);
                    fk.find(".source").text(da.source);
                    fk.find(".edit").attr("href","edit-lmneirong-video.html?id=" + da.id);
                    if (da.freeType == 1)
                        fk.find(".vip").css("display", "block");
                    else
                        fk.find(".vip").css("display", "none");
                    fk.css("display", "table-row");
                }
@@ -752,9 +772,11 @@
                });
                $(".table .anniu .edit").bind("click", function () {
                });
                // $(".table .anniu .edit").bind("click", function () {
                //     var id = $(this).attr("key");
                //     $("#video-edit-frame").attr("src", "edit-lmneirong-video.html?id=" + id);
                //     $("#video-edit").modal("show")
                // });
            }, 'json');
        }
src/main/webapp/admin/new/image/icon_vip.png
src/main/webapp/admin/new/tuijian-lanmuneirong-videos.html
@@ -246,7 +246,7 @@
                            });
                            $(".table .anniu .edit").bind("click", function() {
                                window.location.href = "edit-lmneirong-video.html?id=" + $(this).attr("key");
                                // window.location.href = "edit-lmneirong-video.html?id=" + $(this).attr("key");
                            });
                        }, 'json');
src/test/java/com/hxh/spring/test/AcfunTest.java
@@ -10,6 +10,8 @@
import com.yeshi.buwan.service.imp.AcFunTemporaryService;
import com.yeshi.buwan.util.BeanUtil;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.video.AcfunApiUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -17,9 +19,9 @@
import javax.annotation.Resource;
@RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试
@ContextConfiguration(locations = {"classpath:spring.xml"})
@WebAppConfiguration
//@RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试
//@ContextConfiguration(locations = {"classpath:spring.xml"})
//@WebAppConfiguration
public class AcfunTest {
    @Resource
@@ -59,4 +61,10 @@
    }
    @Test
    public void getVideoList() {
        AcfunApiUtil.videoList("");
    }
}
src/test/java/com/hxh/spring/test/AlipayTest.java
@@ -85,7 +85,7 @@
    @Test
    public void refound() {
        String orderNo = "buwan_vip_48";
        String orderNo = "buwan_vip_80";
        try {
            AlipayH5PayUtil.refund(getAppInfo(), orderNo, null, new BigDecimal("14.8"), orderNo+"_1");
        } catch (AlipayApiException e) {
src/test/java/com/hxh/spring/test/ClearVideo.java
@@ -4,6 +4,8 @@
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.orm.hibernate4.HibernateCallback;
import com.yeshi.buwan.dao.VideoInfoDao;
@@ -13,26 +15,36 @@
import com.yeshi.buwan.iqiyi.entity.VideoIqiyi;
import com.yeshi.buwan.service.imp.ClearService;
import com.yeshi.buwan.util.BeanUtil;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import javax.annotation.Resource;
/**
 * 清除时间比较久远的小视频数据
 * 
 * @author Administrator
 *
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring.xml"})
@WebAppConfiguration
public class ClearVideo {
    public static void main(String[] args) {
    @Resource
    public ClearService clearService;
    @Test
    public void main() {
        // ClearService clearService = BeanUtil.getBean(ClearService.class);
        // for (int i = 0; i < 1000; i++) {
        // clearService.clearDependVideo();
        // }
        ClearService clearService = BeanUtil.getBean(ClearService.class);
        for (int i = 0; i < 300; i++) {
            long[] typeIds = new long[] { 299,242,216,249,290,219 };
            for (long id : typeIds) {
                clearService.clearVideos(new long[] { id }, "2019-01-20");
                clearService.clearVideos(new long[]{id}, "2021-02-01");
            }
        }
        // }
@@ -139,4 +151,9 @@
    }
    @Test
    public void clearDepend(){
        clearService.clearDependVideo();
    }
}
src/test/java/com/hxh/spring/test/DES.java
@@ -1,9 +1,10 @@
package com.hxh.spring.test;
import com.yeshi.buwan.util.DESUtil;
public class DES {
    @org.junit.Test
    public void test1() {
//        StringBuilder builder = new StringBuilder("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");
//        System.out.println(DESUtil.decode(builder.toString()));
        System.out.println(DESUtil.decode("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"));
    }
}
src/test/java/com/hxh/spring/test/GeneralTest.java
@@ -2,6 +2,7 @@
import com.yeshi.buwan.dao.base.MongodbBaseDao;
import com.yeshi.buwan.dao.video.VideoResourceVersionMapDao;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.video.VideoResourceVersionMap;
import com.yeshi.buwan.service.inter.video.VideoResourceVersionMapService;
import org.yeshi.utils.generater.SpringComponentGenerater;
@@ -13,7 +14,7 @@
    @org.junit.Test
    public void createDao() {
        try {
            SpringComponentGenerater.createMongoDao(new MongoDBDaoData.Builder().setBaseDaoClass(MongodbBaseDao.class).setDaoPackageName("com.yeshi.buwan.dao.video").setEntityClass(VideoResourceVersionMap.class).create(), "D:\\workspace\\BuWan\\src\\main\\java\\com\\yeshi\\buwan\\dao\\video\\");
            SpringComponentGenerater.createMongoDao(new MongoDBDaoData.Builder().setBaseDaoClass(MongodbBaseDao.class).setDaoPackageName("com.yeshi.buwan.dao.video").setEntityClass(VideoInfo.class).create(), "D:\\workspace\\BuWan\\src\\main\\java\\com\\yeshi\\buwan\\dao\\video\\");
        } catch (Exception e) {
            e.printStackTrace();
        }
src/test/java/com/hxh/spring/test/Iqiyi2.java
@@ -2,28 +2,22 @@
import com.google.gson.Gson;
import com.yeshi.buwan.dao.juhe.iqiyi.IqiyiAlbum2Dao;
import com.yeshi.buwan.dao.juhe.iqiyi.VideoIqiyi2Dao;
import com.yeshi.buwan.dao.juhe.iqiyi.VideoIqiyiDao;
import com.yeshi.buwan.domain.ResourceVideo;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.VideoResource;
import com.yeshi.buwan.funtv.FunTVUtil2;
import com.yeshi.buwan.funtv.entity.VideoFunTV2;
import com.yeshi.buwan.iqiyi.IqiYiNewAPI;
import com.yeshi.buwan.iqiyi.entity.IqiyiAlbum2;
import com.yeshi.buwan.iqiyi.entity.VideoIqiyi;
import com.yeshi.buwan.iqiyi.entity.VideoIqiyi2;
import com.yeshi.buwan.iqiyi.util.IqiyiUtil;
import com.yeshi.buwan.iqiyi.util.IqiyiUtil2;
import com.yeshi.buwan.iqiyi.vo.IqiyiAlbumListResult;
import com.yeshi.buwan.job.SMSJob;
import com.yeshi.buwan.job.video.Iqiyi2VideoUpdate;
import com.yeshi.buwan.query.Iqiyi2AlbumQuery;
import com.yeshi.buwan.service.imp.CategoryVideoService;
import com.yeshi.buwan.service.imp.ResourceVideoService;
import com.yeshi.buwan.service.imp.VideoInfoService;
import com.yeshi.buwan.service.inter.juhe.Iqiyi2Service;
import com.yeshi.buwan.service.manager.SolrAlbumDataManager;
import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager;
import com.yeshi.buwan.util.*;
import com.yeshi.buwan.util.mq.CMQManager;
import net.sf.json.JSONArray;
@@ -274,7 +268,7 @@
    private VideoInfoService videoInfoService;
    @Resource
    private SolrAlbumDataManager solrDataManager;
    private SolrAlbumVideoDataManager solrDataManager;
    @Test
    public void addResources() {
src/test/java/com/hxh/spring/test/PPTVTest.java
@@ -7,11 +7,15 @@
import com.yeshi.buwan.pptv.entity.PPTVSeries;
import com.yeshi.buwan.service.inter.LoginUserService;
import com.yeshi.buwan.service.inter.juhe.PPTVService;
import com.yeshi.buwan.util.log.LoggerUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.yeshi.utils.HtmlToolUtil;
import javax.annotation.Resource;
import java.util.List;
@@ -74,6 +78,11 @@
        }
    }
    @Test
    public void login() {
        PPTVApiUtil.login("zcoAY6ev7RpYSLzXKtWybniCK+sgBiCARUii_uyNdFw-");
    }
    @Test
    public void getApiDetail() {
@@ -85,7 +94,7 @@
    public void getOpenId() {
        //CODE:XefbSM0H8BC9kaEGEjHF2U7wd6Sd9ec1oSUmG1gZDTg=
//        PPTVApiUtil.login("XefbSM0H8BC9kaEGEjHF2U7wd6Sd9ec1oSUmG1gZDTg=");
        String pptvUid = PPTVUtil.decryptPPTVCode("XefbSM0H8BC9kaEGEjHF2U7wd6Sd9ec1oSUmG1gZDTg=").pptvUid;
        String pptvUid = "buwan_844600";//PPTVUtil.decryptPPTVCode("XefbSM0H8BC9kaEGEjHF2U7wd6Sd9ec1oSUmG1gZDTg=").pptvUid;
        String openId = PPTVApiUtil.getOpenId(pptvUid);
        System.out.println(openId);
@@ -106,9 +115,38 @@
    @Test
    public void addVideoInfo() {
        PPTVSeries series = pptvService.getSeriesDetail("4205");
        PPTVSeries series = pptvService.getSeriesDetail("26796");
        pptvService.addToVideoInfo(series);
    }
    @Test
    public void offline() {
        List<String[]> list = HtmlToolUtil.parseSQLYogExportHtmData("C:\\Users\\Administrator\\Desktop\\草稿\\PPTV重复的电视剧.htm", 1);
        for (int i = 1000; i < list.size(); i++) {
            String[] sts = list.get(i);
            String name = sts[0];
            Query query = new Query();
            query.addCriteria(Criteria.where("name").is(name));
            PPTVSeries series = pptvSeriesDao.findOne(query);
            if (series != null) {
                pptvService.offLineSeries(series.getInfoID());
                //添加到详情
                try {
                    Thread.sleep(1000 * 3L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                series = pptvService.getSeriesDetail(series.getInfoID());
                pptvService.addToVideoInfo(series);
            }
        }
    }
    @Test
    public void logs() {
        LoggerUtil.getVIPLogger().info("123123");
    }
}
src/test/java/com/hxh/spring/test/SolrTest.java
@@ -1,35 +1,30 @@
package com.hxh.spring.test;
import com.yeshi.buwan.dao.HomeNoticeDao;
import com.yeshi.buwan.domain.SolrVideo;
import com.yeshi.buwan.dto.search.SolrResultDTO;
import com.yeshi.buwan.dto.search.SolrVideoSearchFilter;
import com.yeshi.buwan.service.imp.VideoInfoService;
import com.yeshi.buwan.service.manager.SolrAlbumDataManager;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager;
import com.yeshi.buwan.service.manager.SolrCommonVideoDataManager;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.server.support.HttpSolrClientFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import javax.annotation.Resource;
import java.security.Principal;
import java.util.Optional;
//Optional@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(locations = {"classpath:spring.xml"})
//@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring.xml"})
@WebAppConfiguration
public class SolrTest {
    @Resource
    private SolrAlbumDataManager solrDataManager;
    private SolrAlbumVideoDataManager solrDataManager;
    @Resource
    private SolrCommonVideoDataManager solrCommonVideoDataManager;
    @Resource
    private VideoInfoService videoInfoService;
@@ -51,14 +46,14 @@
    @Test
    public void addSolrAlbum() {
//        solrDataManager.syncAlbum("8224447");
        SolrClient solrClient = new HttpSolrClient.Builder("http://203.195.196.115:8983/solr").build();
        Credentials credentials = new UsernamePasswordCredentials("solr", "IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c=");
        HttpSolrClientFactory factory = new HttpSolrClientFactory(solrClient, null, null);
        SolrTemplate solrTemplate = new SolrTemplate(factory);
        solrTemplate.afterPropertiesSet();
        Optional<SolrVideo> solrVideoOptional = solrTemplate.getById("buwan_album", "8077525", SolrVideo.class);
       System.out.println(solrVideoOptional);
        solrDataManager.syncAllAlbum();
        System.out.println();
    }
    @Test
    public void syncSolrCommonVideo() {
//        solrCommonVideoDataManager.syncAllVideo();
    }
src/test/java/com/hxh/spring/test/SouGouTest.java
@@ -2,10 +2,6 @@
import org.junit.Test;
import com.yeshi.buwan.util.BeanUtil;
import com.yeshi.buwan.util.email.MailSenderUtil;
import com.yeshi.buwan.util.news.SouGouParser;
public class SouGouTest {
    @Test
    public void sougouTest() {
src/test/java/com/hxh/spring/test/UserTest.java
New file
@@ -0,0 +1,48 @@
package com.hxh.spring.test;
import com.yeshi.buwan.dao.user.LoginUserDao;
import com.yeshi.buwan.dao.user.LoginUserExtraDao;
import com.yeshi.buwan.domain.user.LoginUser;
import com.yeshi.buwan.domain.user.LoginUserExtra;
import com.yeshi.buwan.util.StringUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import javax.annotation.Resource;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring.xml"})
@WebAppConfiguration
public class UserTest {
    @Resource
    private LoginUserExtraDao loginUserExtraDao;
    @Resource
    private LoginUserDao loginUserDao;
    @Test
    public void test() {
        Query query = new Query();
        List<LoginUserExtra> extraList = loginUserExtraDao.findList(query);
        for (LoginUserExtra extra : extraList) {
            LoginUser user = loginUserDao.find(LoginUser.class, extra.getId());
            if (user != null && StringUtil.isNullOrEmpty(user.getPortrait())) {
                if (!StringUtil.isNullOrEmpty(extra.getWxPortrait())) {
                    user.setPortrait(extra.getWxPortrait());
                    loginUserDao.update(user);
                } else if (!StringUtil.isNullOrEmpty(extra.getQqPortrait())) {
                    user.setPortrait(extra.getQqPortrait());
                    loginUserDao.update(user);
                }
            }
        }
    }
}
src/test/java/com/hxh/spring/test/vip/VIPTest.java
@@ -5,6 +5,7 @@
import com.yeshi.buwan.domain.vip.VIPPrice;
import com.yeshi.buwan.domain.vip.VIPPriceType;
import com.yeshi.buwan.exception.vip.VIPException;
import com.yeshi.buwan.pptv.PPTVVipManager;
import com.yeshi.buwan.service.inter.vip.VIPPriceService;
import com.yeshi.buwan.service.inter.vip.VIPService;
import com.yeshi.buwan.util.Constant;
@@ -45,6 +46,9 @@
    @Resource
    private VIPService vipService;
    @Resource
    private PPTVVipManager pptvVipManager;
    @Test
    public void addVIPPrice() {
@@ -139,11 +143,11 @@
    @Test
    public void paySuccess() {
        try {
            vipService.checkOrderPayState(23 + "");
        } catch (Exception e) {
            e.printStackTrace();
        }
//        try {
//            vipService.paySuccess("",VIPOrderRecord.PAY_WAY_WX,new BigDecimal("14.8"),)
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    }
    public static void main(String[] args) {
@@ -182,9 +186,8 @@
    @Test
    public void test3() throws Exception {
        vipService.checkOrderPayState(54+"");
        VIPOrderRecord record = vipService.getOrderRecord("82");
        pptvVipManager.buyVIP(record);
    }
}