package com.sandu.ximon.admin.service;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.http.HttpUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.github.pagehelper.PageHelper;
|
import com.sandu.common.execption.BusinessException;
|
import com.sandu.common.object.BaseConditionVO;
|
import com.sandu.common.service.impl.BaseServiceImpl;
|
import com.sandu.ximon.admin.param.MonitorParam;
|
import com.sandu.ximon.admin.security.SecurityUtils;
|
import com.sandu.ximon.dao.bo.AirEquipmentBo;
|
import com.sandu.ximon.dao.bo.MonitorBo;
|
import com.sandu.ximon.dao.domain.Monitor;
|
import com.sandu.ximon.admin.dto.YSY_AccessTokenDto;
|
import com.sandu.ximon.admin.dto.YSY_MonitorDto;
|
import com.sandu.ximon.dao.mapper.MonitorMapper;
|
import lombok.AllArgsConstructor;
|
import org.springframework.stereotype.Service;
|
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
@Service
|
@AllArgsConstructor
|
public class MonitorService extends BaseServiceImpl<MonitorMapper, Monitor> {
|
private final MonitorMapper monitorMapper;
|
//萤石云AppKey
|
private static final String AppKey = "51a534ebadf54c31a0848dc575dfa206";
|
//萤石云 AppKey Secret
|
private static final String Secret = "8c32c67a73c87b9e461b2e3bdf58967a";
|
|
//萤石云地址
|
private static final String YSY_URL = "https://open.ys7.com/api/lapp";
|
//获取萤石云accessToken地址
|
private static final String ACCESSTOKEN_URL = "/token/get";
|
//添加萤石云摄像头
|
private static final String ADD_DEVICE_URL = "/device/add";
|
//删除萤石云摄像头
|
private static final String DELETE_DEVICE_URL = "/device/delete";
|
//获取萤石云单个设备信息
|
private static final String GET_DEVICE_URL = "/device/info";
|
//获取萤石云摄像头播放地址URL
|
private static final String GET_VEDIO_URL = "/v2/live/address/get";
|
|
|
private final PoleBindingService poleBindingService;
|
|
/**
|
* 模糊查询
|
*/
|
public List<MonitorBo> listMonitorByKeyword(BaseConditionVO baseConditionVO, MonitorParam monitorParam) {
|
Long clientId = SecurityUtils.getClientId();
|
PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
|
List<Long> listAirEquipmentId;
|
|
//绑定状态:已绑定/未绑定/全部
|
if (monitorParam.getBindingState() == null || 2 == monitorParam.getBindingState()) {
|
//全部
|
int bindingState = 2;
|
listAirEquipmentId = monitorMapper.listMonitorId(monitorParam.getKeyword(), clientId, bindingState);
|
} else {
|
listAirEquipmentId = monitorMapper.listMonitorId(monitorParam.getKeyword(), clientId, monitorParam.getBindingState());
|
}
|
if (CollUtil.isEmpty(listAirEquipmentId)) {
|
return CollUtil.newArrayList();
|
}
|
|
List<MonitorBo> monitorList = monitorMapper.listMonitorByIds(listAirEquipmentId);
|
return monitorList;
|
}
|
|
|
// /**
|
// * 查询全部摄像头
|
// */
|
// public List<Monitor> listMonitor() {
|
// LambdaQueryWrapper<Monitor> wrapper = Wrappers.lambdaQuery(Monitor.class);
|
// List<Monitor> list = list(wrapper);
|
//
|
// return list;
|
// }
|
//
|
// /**
|
// * 模糊查询
|
// */
|
// public List<Monitor> listMonitorByKeyword(MonitorParam monitorParam) {
|
// //设备状态:在线/离线/全部
|
// int equipmentState1;
|
// int equipmentState2;
|
// if (2 == monitorParam.getEquipmentState()) {
|
// //在线
|
// equipmentState1 = 1;
|
// //离线
|
// equipmentState2 = 0;
|
// } else {
|
// equipmentState1 = monitorParam.getEquipmentState();
|
// equipmentState2 = monitorParam.getEquipmentState();
|
// }
|
//
|
// //绑定状态:已绑定/未绑定/全部
|
// int bindingState1;
|
// int bindingState2;
|
// if (2 == monitorParam.getBindingState()) {
|
// //已绑定
|
// bindingState1 = 1;
|
// //未绑定
|
// bindingState2 = 0;
|
// } else {
|
// bindingState1 = monitorParam.getBindingState();
|
// bindingState2 = monitorParam.getBindingState();
|
// }
|
//// return monitorMapper.listMonitorByKeyword(monitorParam.getKeyword(), equipmentState1, equipmentState2, bindingState1, bindingState2);
|
// return monitorMapper.listMonitorByKeyword1(baseConditionVO, monitorParam.getKeyword(), bindingState1, bindingState2);
|
// }
|
|
/**
|
* 删除摄像头
|
*
|
* @param Id
|
* @return
|
*/
|
public boolean deleteMonitor(Long Id) {
|
Monitor monitor = getById(Id);
|
if (monitor == null) {
|
throw new BusinessException("找不到摄像头");
|
}
|
|
//删除摄像头设备前需要先解绑
|
poleBindingService.unBindPole(monitor.getDeviceSerial());
|
return removeById(Id);
|
}
|
|
/**
|
* 获取萤石云accessToken
|
*/
|
|
public String getAccessToken() {
|
Map<String, Object> paramMap = new HashMap<>();
|
paramMap.put("appKey", AppKey);
|
paramMap.put("appSecret", Secret);
|
String s = HttpUtil.post(YSY_URL + ACCESSTOKEN_URL, paramMap);
|
YSY_AccessTokenDto accessTokenDto = JSON.parseObject(s, YSY_AccessTokenDto.class);
|
return accessTokenDto.getData().getAccessToken();
|
}
|
|
/**
|
* 添加萤石云摄像头
|
*
|
* @param accessToken 授权过程获取的access_token
|
* @param deviceSerial 设备序列号,存在英文字母的设备序列号,字母需为大写
|
* @param validateCode 设备验证码,设备机身上的六位大写字母
|
*/
|
public YSY_MonitorDto addYSYMonitor(String accessToken, String deviceSerial, String validateCode) {
|
|
Map<String, Object> paramMap = new HashMap<>();
|
paramMap.put("accessToken", accessToken);
|
paramMap.put("deviceSerial", deviceSerial);
|
paramMap.put("validateCode", validateCode);
|
String s = HttpUtil.post(YSY_URL + ADD_DEVICE_URL, paramMap);
|
System.out.println(s);
|
YSY_MonitorDto monitorDto = JSON.parseObject(s, YSY_MonitorDto.class);
|
return monitorDto;
|
}
|
|
|
/**
|
* 删除萤石云摄像头
|
*
|
* @param accessToken 授权过程获取的access_token
|
* @param deviceSerial 设备序列号,存在英文字母的设备序列号,字母需为大写
|
*/
|
public YSY_MonitorDto deleteYSYMonitor(String accessToken, String deviceSerial) {
|
|
Map<String, Object> paramMap = new HashMap<>();
|
paramMap.put("accessToken", accessToken);
|
paramMap.put("deviceSerial", deviceSerial);
|
String s = HttpUtil.post(YSY_URL + DELETE_DEVICE_URL, paramMap);
|
System.out.println(s);
|
YSY_MonitorDto monitorDto = JSON.parseObject(s, YSY_MonitorDto.class);
|
return monitorDto;
|
}
|
|
/**
|
* 获取萤石云摄像头单个设备信息
|
*
|
* @param accessToken 授权过程获取的access_token
|
* @param deviceSerial 设备序列号,存在英文字母的设备序列号,字母需为大写
|
*/
|
public YSY_MonitorDto getYSYMonitorInfo(String accessToken, String deviceSerial) {
|
|
Map<String, Object> paramMap = new HashMap<>();
|
paramMap.put("accessToken", accessToken);
|
paramMap.put("deviceSerial", deviceSerial);
|
String s = HttpUtil.post(YSY_URL + GET_DEVICE_URL, paramMap);
|
System.out.println(s);
|
YSY_MonitorDto monitor = JSON.parseObject(s, YSY_MonitorDto.class);
|
return monitor;
|
}
|
|
/**
|
* 将摄像头设备相关信息存储到数据库
|
*
|
* @param monitor 摄像头对象
|
* @return
|
*/
|
public boolean addMonitorInfoToTable(Monitor monitor) {
|
Monitor one = getOne(Wrappers.lambdaQuery(Monitor.class).eq(Monitor::getDeviceSerial, monitor.getDeviceSerial()));
|
if (one == null) {
|
return save(monitor);
|
} else {
|
monitor.setId(one.getId());
|
return updateById(monitor);
|
}
|
}
|
|
/**
|
* 将摄像头设备相关信息更新到数据库
|
*
|
* @param monitor 摄像头对象
|
* @return
|
*/
|
public boolean upDateMonitorInfo(Monitor monitor) {
|
if (monitor.getId() == null) {
|
throw new BusinessException("缺少摄像头相关ID参数");
|
}
|
|
Monitor info = getById(monitor.getId());
|
|
if (info == null) {
|
throw new BusinessException("找不到相关摄像头");
|
}
|
if (!monitor.getDevicesCode().equals(info.getDevicesCode()) || !monitor.getDeviceSerial().equals(info.getDeviceSerial())) {
|
throw new BusinessException("监控序列号或监控验证码不正确");
|
}
|
|
return updateById(monitor);
|
}
|
|
/**
|
* 返回摄像头实时画面播放地址
|
*
|
* @param accessToken
|
* @param deviceSerial
|
* @return
|
*/
|
public String getMonitorVideoUrl(String accessToken, String deviceSerial, int protocol, int expireTime) {
|
if (expireTime < 30 || expireTime > 62208000) {
|
throw new BusinessException("设置的URL播放地址过期时长数据错误");
|
}
|
Map<String, Object> paramMap = new HashMap<>();
|
paramMap.put("accessToken", accessToken);
|
paramMap.put("deviceSerial", deviceSerial);
|
paramMap.put("protocol", protocol);
|
paramMap.put("expireTime", expireTime);
|
String s = HttpUtil.post(YSY_URL + GET_VEDIO_URL, paramMap);
|
System.out.println(s);
|
YSY_MonitorDto monitor = JSON.parseObject(s, YSY_MonitorDto.class);
|
if ("200".equals(monitor.getCode())) {
|
return monitor.getData().getUrl();
|
} else {
|
throw new BusinessException(monitor.getMsg());
|
}
|
}
|
|
|
}
|