admin
2021-04-03 32d6c2ea8039b4771fd6b1ded8b022733e32352f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package com.yeshi.buwan.service.imp;
 
import java.util.*;
 
import com.yeshi.buwan.dao.VideoResourceMapExtraInfoDao;
import com.yeshi.buwan.dao.juhe.iqiyi.VideoIqiyiDao;
import com.yeshi.buwan.domain.VideoResource;
import com.yeshi.buwan.domain.VideoResourceMapExtraInfo;
import com.yeshi.buwan.dto.mq.VideoExtraInfoChangeMQMsg;
import com.yeshi.buwan.iqiyi.entity.VideoIqiyi;
import com.yeshi.buwan.util.mq.CMQManager;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate4.HibernateCallback;
import org.springframework.stereotype.Service;
 
import com.yeshi.buwan.dao.ResourceVideoDao;
import com.yeshi.buwan.domain.ResourceVideo;
import com.yeshi.buwan.domain.VideoInfo;
import org.springframework.transaction.annotation.Transactional;
 
import javax.annotation.Resource;
 
@Service
public class ResourceVideoService {
 
    @Autowired
    private ResourceVideoDao resourceVideoDao;
 
    @Resource
    private VideoResourceMapExtraInfoDao videoResourceMapExtraInfoDao;
 
 
    @SuppressWarnings("unchecked")
    public List<ResourceVideo> getResourceList(final List<VideoInfo> list) {
        if (list == null || list.size() == 0) {
            return new ArrayList<>();
        }
        return (List<ResourceVideo>) resourceVideoDao.excute(new HibernateCallback<List<ResourceVideo>>() {
            @Override
            public List<ResourceVideo> doInHibernate(Session session)
                    throws HibernateException {
                StringBuffer hql = new StringBuffer("from ResourceVideo rv  ");
                int i = 0;
                for (VideoInfo videoInfo : list) {
                    if (i == 0)
                        hql.append(" where ( rv.video.id = ? ) ");
                    else
                        hql.append(" or ( rv.video.id = ? ) ");
                    i++;
                }
                hql.append(" order by rv.video.id desc ");
                Query query = session.createQuery(hql.toString());
                i = 0;
                for (VideoInfo videoInfo : list) {
                    query.setParameter(i, videoInfo.getId());
                    i++;
                }
                return query.list();
            }
        });
    }
 
    /**
     * 获取资源列表
     *
     * @param videoId
     * @return
     */
    public List<ResourceVideo> getResourceList(String videoId) {
        List<VideoInfo> videoInfoList = new ArrayList<>();
        videoInfoList.add(new VideoInfo(videoId));
        return getResourceList(videoInfoList);
    }
 
    /**
     * 获取默认的源
     *
     * @param videoId
     * @param avaiableResourceIds
     * @return
     */
    public VideoResource getDefaultVideoResource(String videoId, Set<Long> avaiableResourceIds) {
        List<ResourceVideo> resourceVideoList = resourceVideoDao.list("FROM ResourceVideo rv where rv.video.id=? order by rv.resource.orderby desc", videoId);
        //删除无用来源
        for (int i = 0; i < resourceVideoList.size(); i++) {
            if (!avaiableResourceIds.contains(Long.parseLong(resourceVideoList.get(i).getResource().getId())) || resourceVideoList.get(i).getResource() == null) {
                resourceVideoList.remove(i--);
            }
        }
        //排序
 
        List<VideoResource> resourceList = new ArrayList<>();
 
        for (ResourceVideo rv : resourceVideoList) {
            resourceList.add(rv.getResource());
        }
 
        Comparator<VideoResource> cm = new Comparator<VideoResource>() {
            @Override
            public int compare(VideoResource o1, VideoResource o2) {
                return o2.getOrderby() - o1.getOrderby();
            }
        };
 
        Collections.sort(resourceList, cm);
        if (resourceList.size() > 0)
            return resourceList.get(0);
 
        return null;
    }
 
 
    /**
     * 根据视频ID与ResourceId查询
     *
     * @param videoId
     * @param sourceId
     * @return
     */
 
    public long countByVideoIdAndResourceId(String videoId, long sourceId) {
        return resourceVideoDao.countByVideoIdAndResourceId(videoId, sourceId + "");
    }
 
    public void save(ResourceVideo resourceVideo) {
        resourceVideoDao.save(resourceVideo);
    }
 
    public void addVideoResource(String videoId, String resourceId) {
        ResourceVideo rv = resourceVideoDao.selectByVideoIdAndResourceId(videoId, resourceId);
        if (rv == null) {
            System.out.println(videoId + ":" + resourceId);
            rv = new ResourceVideo();
            rv.setResource(new VideoResource(resourceId + ""));
            rv.setVideo(new VideoInfo(videoId + ""));
            resourceVideoDao.save(rv);
            CMQManager.getInstance().addVideoExtraInfoChanged(new VideoExtraInfoChangeMQMsg(VideoExtraInfoChangeMQMsg.TYPE_RESOURCE, videoId, VideoExtraInfoChangeMQMsg.ACTION_ADD));
        }
    }
 
    @Transactional
    public void delete(String videoId, String resourceId) {
        ResourceVideo resourceVideo = resourceVideoDao.selectByVideoIdAndResourceId(videoId, resourceId + "");
        if (resourceVideo != null) {
            resourceVideoDao.delete(resourceVideo);
            CMQManager.getInstance().addVideoExtraInfoChanged(new VideoExtraInfoChangeMQMsg(VideoExtraInfoChangeMQMsg.TYPE_RESOURCE, videoId, VideoExtraInfoChangeMQMsg.ACTION_DELETE));
        }
 
        VideoResourceMapExtraInfo extraInfo = new VideoResourceMapExtraInfo(videoId, Long.parseLong(resourceId));
        extraInfo = videoResourceMapExtraInfoDao.find(VideoResourceMapExtraInfo.class, extraInfo.getId());
        if (extraInfo != null) {
            videoResourceMapExtraInfoDao.delete(extraInfo);
        }
    }
 
 
}