648540858
2023-05-12 d849352441eaf2ef3398eb25cd0f933ff59beec9
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package com.genersoft.iot.vmp.storager.dao;
 
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis;
import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
 
import java.util.List;
 
@Mapper
@Repository
public interface StreamPushMapper {
 
    @Insert("INSERT INTO wvp_stream_push (app, stream, total_reader_count, origin_type, origin_type_str, " +
            "push_time, alive_second, media_server_id, server_id, update_time, create_time, push_ing, self) VALUES" +
            "(#{app}, #{stream}, #{totalReaderCount}, #{originType}, #{originTypeStr}, " +
            "#{pushTime}, #{aliveSecond}, #{mediaServerId} , #{serverId} , #{updateTime} , #{createTime}, " +
            "#{pushIng}, #{self} )")
    int add(StreamPushItem streamPushItem);
 
 
    @Update(value = {" <script>" +
            "UPDATE wvp_stream_push " +
            "SET update_time=#{updateTime}" +
            "<if test=\"mediaServerId != null\">, media_server_id=#{mediaServerId}</if>" +
            "<if test=\"totalReaderCount != null\">, total_reader_count=#{totalReaderCount}</if>" +
            "<if test=\"originType != null\">, origin_type=#{originType}</if>" +
            "<if test=\"originTypeStr != null\">, origin_type_str=#{originTypeStr}</if>" +
            "<if test=\"pushTime != null\">, push_time=#{pushTime}</if>" +
            "<if test=\"aliveSecond != null\">, alive_second=#{aliveSecond}</if>" +
            "<if test=\"pushIng != null\">, push_ing=#{pushIng}</if>" +
            "<if test=\"self != null\">, self=#{self}</if>" +
            "WHERE app=#{app} AND stream=#{stream}"+
            " </script>"})
    int update(StreamPushItem streamPushItem);
 
    @Delete("DELETE FROM wvp_stream_push WHERE app=#{app} AND stream=#{stream}")
    int del(String app, String stream);
 
    @Delete("<script> "+
            "DELETE sp FROM wvp_stream_push sp left join wvp_gb_stream gs on sp.app = gs.app AND sp.stream = gs.stream where " +
            "<foreach collection='streamPushItems' item='item' separator='or'>" +
            "(sp.app=#{item.app} and sp.stream=#{item.stream} and gs.gb_id is null) " +
            "</foreach>" +
            "</script>")
    int delAllWithoutGBId(List<StreamPushItem> streamPushItems);
 
    @Delete("<script> "+
            "DELETE FROM wvp_stream_push where " +
            "<foreach collection='streamPushItems' item='item' separator='or'>" +
            "(app=#{item.app} and stream=#{item.stream}) " +
            "</foreach>" +
            "</script>")
    int delAll(List<StreamPushItem> streamPushItems);
 
    @Delete("<script> "+
            "DELETE FROM wvp_stream_push where " +
            "<foreach collection='gbStreams' item='item' separator='or'>" +
            "(app=#{item.app} and stream=#{item.stream}) " +
            "</foreach>" +
            "</script>")
    int delAllForGbStream(List<GbStream> gbStreams);
 
 
    @Select(value = {" <script>" +
            "SELECT " +
            "st.*, " +
            "gs.gb_id, gs.name, gs.longitude, gs.latitude, gs.gb_stream_id " +
            "from " +
            "wvp_stream_push st " +
            "LEFT join wvp_gb_stream gs " +
            "on st.app = gs.app AND st.stream = gs.stream " +
            "WHERE " +
            "1=1 " +
            " <if test='query != null'> AND (st.app LIKE concat('%',#{query},'%') OR st.stream LIKE concat('%',#{query},'%') OR gs.gb_id LIKE concat('%',#{query},'%') OR gs.name LIKE concat('%',#{query},'%'))</if> " +
            " <if test='pushing == true' > AND (gs.gb_id is null OR st.push_ing=1)</if>" +
            " <if test='pushing == false' > AND (st.push_ing is null OR st.push_ing=0) </if>" +
            " <if test='mediaServerId != null' > AND st.media_server_id=#{mediaServerId} </if>" +
            "order by st.create_time desc" +
            " </script>"})
    List<StreamPushItem> selectAllForList(String query, Boolean pushing, String mediaServerId);
 
    @Select("SELECT st.*, gs.gb_id, gs.name, gs.longitude, gs.latitude FROM wvp_stream_push st LEFT join wvp_gb_stream gs on st.app = gs.app AND st.stream = gs.stream order by st.create_time desc")
    List<StreamPushItem> selectAll();
 
    @Select("SELECT st.*, gs.gb_id, gs.name, gs.longitude, gs.latitude FROM wvp_stream_push st LEFT join wvp_gb_stream gs on st.app = gs.app AND st.stream = gs.stream WHERE st.app=#{app} AND st.stream=#{stream}")
    StreamPushItem selectOne(String app, String stream);
 
    @Insert("<script>"  +
            "Insert IGNORE INTO wvp_stream_push (app, stream, total_reader_count, origin_type, origin_type_str, " +
            "create_time, alive_second, media_server_id, status, push_ing) " +
            "VALUES <foreach collection='streamPushItems' item='item' index='index' separator=','>" +
            "( #{item.app}, #{item.stream}, #{item.totalReaderCount}, #{item.originType}, " +
            "#{item.originTypeStr},#{item.createTime}, #{item.aliveSecond}, #{item.mediaServerId}, #{item.status} ," +
            " #{item.pushIng} )" +
            " </foreach>" +
            "</script>")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    int addAll(List<StreamPushItem> streamPushItems);
 
    @Delete("DELETE FROM wvp_stream_push")
    void clear();
 
    @Delete("DELETE sp FROM wvp_stream_push sp left join wvp_gb_stream gs on gs.app = sp.app and gs.stream= sp.stream WHERE sp.media_server_id=#{mediaServerId} and gs.gb_id is null ")
    void deleteWithoutGBId(String mediaServerId);
 
    @Select("SELECT * FROM wvp_stream_push WHERE media_server_id=#{mediaServerId}")
    List<StreamPushItem> selectAllByMediaServerId(String mediaServerId);
 
    @Select("SELECT sp.* FROM wvp_stream_push sp left join wvp_gb_stream gs on gs.app = sp.app and gs.stream= sp.stream WHERE sp.media_server_id=#{mediaServerId} and gs.gb_id is null")
    List<StreamPushItem> selectAllByMediaServerIdWithOutGbID(String mediaServerId);
 
    @Update("UPDATE wvp_stream_push " +
            "SET status=#{status} " +
            "WHERE app=#{app} AND stream=#{stream}")
    int updateStatus(String app, String stream, boolean status);
 
    @Update("UPDATE wvp_stream_push " +
            "SET push_ing=#{pushIng} " +
            "WHERE app=#{app} AND stream=#{stream}")
    int updatePushStatus(String app, String stream, boolean pushIng);
 
    @Update("UPDATE wvp_stream_push " +
            "SET status=#{status} " +
            "WHERE media_server_id=#{mediaServerId}")
    void updateStatusByMediaServerId(String mediaServerId, boolean status);
 
 
    @Select("<script> "+
            "SELECT gs.* FROM wvp_stream_push sp left join wvp_gb_stream gs on sp.app = gs.app AND sp.stream = gs.stream " +
            "where sp.status = true and (gs.app, gs.stream) in (" +
            "<foreach collection='offlineStreams' item='item' separator=','>" +
            "(#{item.app}, #{item.stream}) " +
            "</foreach>" +
            ")</script>")
    List<GbStream> getOnlinePusherForGbInList(List<StreamPushItemFromRedis> offlineStreams);
 
    @Update("<script> "+
            "UPDATE wvp_stream_push SET status=0  where (app, stream) in (" +
            "<foreach collection='offlineStreams' item='item' separator=','>" +
            "(#{item.app}, #{item.stream}) " +
            "</foreach>" +
            ")</script>")
    void offline(List<StreamPushItemFromRedis> offlineStreams);
 
    @Select("<script> "+
            "SELECT * FROM wvp_stream_push sp left join wvp_gb_stream gs on sp.app = gs.app AND sp.stream = gs.stream " +
            "where sp.status = 0 and (gs.app, gs.stream) in (" +
            "<foreach collection='onlineStreams' item='item' separator=','>" +
            "(#{item.app}, #{item.stream}) " +
            "</foreach>" +
            ") </script>")
    List<GbStream> getOfflinePusherForGbInList(List<StreamPushItemFromRedis> onlineStreams);
 
    @Update("<script> "+
            "UPDATE wvp_stream_push SET status=1  where (app, stream) in (" +
            "<foreach collection='onlineStreams' item='item' separator=','>" +
            "(#{item.app}, #{item.stream}) " +
            "</foreach>" +
            ")</script>")
    void online(List<StreamPushItemFromRedis> onlineStreams);
 
    @Select("SELECT gs.* FROM wvp_stream_push sp left join wvp_gb_stream gs on sp.app = gs.app AND sp.stream = gs.stream where sp.status = true")
    List<GbStream> getOnlinePusherForGb();
 
    @Update("UPDATE wvp_stream_push SET status=0")
    void setAllStreamOffline();
 
    @Select("SELECT CONCAT(app,stream) from wvp_gb_stream")
    List<String> getAllAppAndStream();
 
    @Select(value = {" <script>" +
            " <if test='pushIngAsOnline == true'> select count(1) as total, sum(push_ing) as online from wvp_stream_push </if>" +
            " <if test='pushIngAsOnline == false'> select count(1) as total, sum(status) as online from wvp_stream_push </if>" +
            " </script>"})
    ResourceBaceInfo getOverview(boolean pushIngAsOnline);
}