@Service
public class VideoService {
@Autowired
private VideoDao videoDao;
public void insertAccessToken(){
//轮询所有摄像头的appkey和appSecret
List<VideoSecretBean> allVideo = videoDao.getAllAppKey();
if ( allVideo != null ){
for (VideoSecretBean bean : allVideo){
String appKey = bean.getAppKey();
String appSecret = bean.getAppSecret();
//调用萤石接口
String url = "https://open.ys7.com/api/lapp/token/get?appKey="+appKey+"&appSecret="+appSecret;
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/x-www-form-urlencoded");
RestTemplate restTemplate = new RestTemplate();
HttpEntity requestEntity = new HttpEntity<>(requestHeaders);
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(url,requestEntity,
JSONObject.class);
String accessToken = responseEntity.getBody().getJSONObject("data").get("accessToken").toString();
VideoTokenBean videoTokenBean = new VideoTokenBean();
videoTokenBean.setAccessToken(accessToken);
videoTokenBean.setAppKey(bean.getAppKey());
//入库做更新操作
videoDao.updateAccessToken(videoTokenBean);
}
}
}
}
//更新视频播放地址
public void updateVideoList() {
List<Map<String, String>> list = videoMapper.querySerial();
List<VideoBean> videoToken = videoMapper.getAllVideoToken();
if (videoToken != null) {
if (list != null) {
for (VideoBean bean : videoToken) {
String accessToken = bean.getAccessToken();
String pageStart = "0";
String pageSize = "100";
String url = "https://open.ys7.com/api/lapp/live/video/list?accessToken=" + accessToken + "&pageStart=" + pageStart + "&pageSize=" + pageSize;
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/x-www-form-urlencoded");
RestTemplate restTemplate = new RestTemplate();
HttpEntity requestEntity = new HttpEntity<>(requestHeaders);
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(url, requestEntity,
JSONObject.class);
JSONArray data = responseEntity.getBody().getJSONArray("data");
for (Map<String, String> serial : list) {
for (int i = 0; i < data.size(); i++) {
Map<String, String> datas = (Map<String, String>) data.get(i);
if (serial.get("device_serial").equals(datas.get("deviceSerial"))) {
//做更新操作
videoMapper.updateVideoList(datas.get("deviceSerial"), String.valueOf(datas.get("channelNo")),
String.valueOf(datas.get("status")), String.valueOf(datas.get("exception")));
}
}
}
}
}
}
}
//更新摄像头状态
public void insertVideo() {
List<VideoBean> videoToken = videoMapper.getAllVideoToken();
//做删除操作,避免库中数据堆积
videoMapper.updateVideo();
if (videoToken != null) {
for (VideoBean bean : videoToken) {
String accessToken = bean.getAccessToken();
String pageStart = "0";
String pageSize = "100";
String url = "https://open.ys7.com/api/lapp/live/video/list?accessToken=" + accessToken + "&pageStart=" + pageStart + "&pageSize=" + pageSize;
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/x-www-form-urlencoded");
RestTemplate restTemplate = new RestTemplate();
HttpEntity requestEntity = new HttpEntity<>(requestHeaders);
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(url, requestEntity,
JSONObject.class);
JSONArray data = responseEntity.getBody().getJSONArray("data");
if (data != null) {
for (int i = 0; i < data.size(); i++) {
Map<String, String> datas = (Map<String, String>) data.get(i);
VideoListBean videoListBean = new VideoListBean();
videoListBean.setDeviceSerial(datas.get("deviceSerial"));
videoListBean.setChannelNo(String.valueOf(datas.get("channelNo")));
videoListBean.setLiveAddress(datas.get("liveAddress"));
videoListBean.setHdAddress(datas.get("hdAddress"));
videoListBean.setRtmp(datas.get("rtmp"));
videoListBean.setRtmpHd(datas.get("rtmpHd"));
videoListBean.setStatus(String.valueOf(datas.get("status")));
videoListBean.setException(String.valueOf(datas.get("exception")));
videoListBean.setId(IdGenerator.getId());
//做插入操作
videoMapper.insertVideoList(videoListBean);
}
}
}
}
}
public interface VideoDao {
//查询数据库中的appKey和appSecret
@Select(" SELECT " +
" APPKEY appKey,APPSECRET appSecret " +
" FROM de_access_token " +
" WHERE FACTORY_TYPE = '1' ")
List<VideoSecretBean> getAllAppKey();
//更新数据库中appkey对应的AccessToken
@Update(" UPDATE de_access_token " +
" SET ACCESS_TOKEN=#{accessToken} " +
" WHERE APPKEY=#{appKey}")
int updateAccessToken(VideoTokenBean videoTokenBean);
}
//de_access_token表
CREATE TABLE `de_access_token` (
`ID` varchar(50) NOT NULL COMMENT '主键ID',
`APPKEY` varchar(50) DEFAULT NULL COMMENT 'appKey',
`APPSECRET` varchar(50) DEFAULT NULL COMMENT 'appSecret',
`ACCESS_TOKEN` varchar(255) DEFAULT NULL COMMENT '获取的accessToken',
`SERIAL_NUM` varchar(50) DEFAULT NULL COMMENT '序列号',
`VERIFY_CODE` varchar(255) DEFAULT NULL COMMENT '验证码',
`COMPANY_CODE` varchar(50) DEFAULT NULL COMMENT '公司编码',
`FACTORY_TYPE` int(1) DEFAULT NULL COMMENT '厂家类型 1:海康,2:大华',
`url` varchar(255) DEFAULT NULL COMMENT '视频存储地址',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@Component
public interface VideoMapper {
@Select("SELECT " +
" APPKEY appKey, " +
" ACCESS_TOKEN accessToken, " +
" SERIAL_NUM serialNum, " +
" VERIFY_CODE verifyCode, " +
" FACTORY_TYPE factoryType," +
" APPSECRET appSecret" +
" FROM " +
" `de_access_token` " +
" WHERE " +
" COMPANY_CODE = #{companyCode}")
videoResBean getAccessToken(String companyCode);
@Select("SELECT " +
" APPKEY appKey, " +
" ACCESS_TOKEN accessToken, " +
" SERIAL_NUM serialNum, " +
" VERIFY_CODE verifyCode, " +
" FACTORY_TYPE factoryType," +
" APPSECRET appSecret" +
" FROM " +
" `de_access_token` " +
" WHERE " +
" COMPANY_CODE = #{companyCode}")
TokenBean getTokenBean(String companyCode);
@Select(" SELECT " +
" a.ACCESS_TOKEN accessToken," +
" a.SERIAL_NUM serialNum," +
" b.COMPANY_NAME companyName " +
" FROM de_access_token a " +
" LEFT JOIN core_company b " +
" ON a.COMPANY_CODE = b.COMPANY_CODE " +
" WHERE b.P_COMPANY_ID is not null " +
" GROUP BY b.COMPANY_NAME" )
List<VideoBean> getAllVideoToken();
@Select(" SELECT " +
" APPKEY appKey,APPSECRET appSecret " +
" FROM de_access_token " +
" WHERE FACTORY_TYPE = '1' ")
List<VideoSecretBean> getAllAppKey();
@Update(" UPDATE de_access_token " +
" SET " +
" ACCESS_TOKEN=#{accessToken} " +
" WHERE APPKEY=#{appKey}")
int updateAccessToken(VideoTokenBean videoTokenBean);
@Update(" DELETE FROM de_live_address")
int updateVideo();
@Insert(" insert into de_live_address(id,device_serial,channel_no,live_address,hd_address,rtmp,rtmp_hd,status,exception) " +
" values(#{id},#{deviceSerial},#{channelNo},#{liveAddress},#{hdAddress},#{rtmp},#{rtmpHd},#{status},#{exception})")
int insertVideoList(VideoListBean videoListBean);
@Select(" SELECT " +
" device_serial " +
" FROM de_live_address " +
" where device_serial = 'E18385684'" )
List<Map<String,String>> querySerial();
@Update(" update de_live_address set status = #{status},exception = #{exception}" +
" where device_serial = #{deviceSerial} and channel_no = #{channelNo} ")
int updateVideoList(@Param("deviceSerial") String deviceSerial, @Param("channelNo") String channelNo, @Param("status") String status, @Param("exception") String exception);
@Select(" SELECT " +
" a.id,a.device_serial deviceSerial,a.CHANNEL_NO channelNo,a.live_address liveAddress,a.hd_address hdAddress,a.rtmp,a.rtmp_hd rtmpHd,a.`status`,a.exception,c.CHANNEL_NAME channelName " +
" FROM de_live_address a " +
" LEFT JOIN de_camera_address b on a.device_serial = b.DEVICE_SERIAL " +
" LEFT JOIN (" + "SELECT " +
" device_serial,CHANNEL_NAME,CHANNEL_NO,LAT,lon " +
" FROM " +
" de_camera_address WHERE COMPANY_CODE = #{companyCode} " + ") c on c.CHANNEL_NO = a.channel_no " +
" WHERE " +
" a.device_serial = (" +
" SELECT device_serial FROM de_camera_address \n" +
" WHERE COMPANY_CODE = #{companyCode} " +
" GROUP BY device_serial " + ") " +
" GROUP BY a.live_address")
List<VideoCoorBean> queryVideoInfo(@Param("companyCode") String companyCode);
//查询监理审核人id
@Select("select distinct a.id from worker_info a left join worker_company b on a.id=b.worker_id where b.worker_type in ('138') and a.company_code='JYKJJRC' ")
List<String> findSupervisorId();
@Select(" SELECT " +
" APPKEY appKey,APPSECRET appSecret " +
" FROM de_access_token " +
" WHERE id='9' ")
VideoSecretBean insertAppKey();
@Update("update de_access_token set APPKEY=#{appKey},APPSECRET=#{secret} where id='9' ")
void updateAppKey(String appKey,String secret);
}