package com.huimv.admin.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huimv.admin.common.utils.Result; import com.huimv.admin.common.utils.ResultCode; import com.huimv.admin.entity.SysCamera; import com.huimv.admin.entity.SysCameraBrand; import com.huimv.admin.entity.vo.*; import com.huimv.admin.mapper.SysCameraAreaMapper; import com.huimv.admin.mapper.SysCameraBrandMapper; import com.huimv.admin.mapper.SysCameraMapper; import com.huimv.admin.service.ISysCameraService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; /** *

* 服务实现类 *

* * @author author * @since 2023-06-01 */ @Service public class SysCameraServiceImpl extends ServiceImpl implements ISysCameraService { @Autowired private SysCameraMapper cameraBaseMapper; @Autowired private SysCameraAreaMapper cameraAreaMapper; @Autowired private SysCameraBrandMapper cameraBrandMapper; // @Autowired // private BaseScreenCameraAccountMapper cameraAccountMapper; @Override public Result listPage(CameraListVo cameraListVo) { Integer current = cameraListVo.getCurrent(); String strchStr = cameraListVo.getStrchStr(); Integer size = cameraListVo.getSize(); Integer areaId = cameraListVo.getAreaId(); Integer brandId = cameraListVo.getBrandId(); Integer sort = cameraListVo.getSort(); Integer farmId = cameraListVo.getFarmId(); Integer isOnline = cameraListVo.getIsOnline(); QueryWrapper wrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(strchStr)) { wrapper.and(i -> i.like("camera_name", strchStr) .or().like("camera_ip", strchStr)); } if (farmId != null) { wrapper.eq("farm_id", farmId); } if (areaId != null) { wrapper.eq("area_id", areaId); } if (brandId != null) { wrapper.eq("brand_id", brandId); } if (isOnline != null) { wrapper.eq("is_online", isOnline); } if (sort == null) { wrapper.orderByDesc("id"); } else if (sort == 1) { wrapper.orderByDesc("sort"); } else { wrapper.orderByAsc("sort"); } // wrapper.orderByDesc("id"); return new Result(ResultCode.SUCCESS, page(new Page<>(current, size), wrapper)); } @Override public List getCameraDetails(CameraListsVo cameraListsVo) throws InterruptedException { List cameraIds = cameraListsVo.getCameraIds(); CameraListVo cameraListVo = new CameraListsVo(); cameraListVo.setCurrent(1); cameraListVo.setSize(10000); cameraListVo.setStrchStr(cameraListsVo.getStrchStr()); cameraListVo.setAreaId(cameraListsVo.getAreaId()); cameraListVo.setBrandId(cameraListsVo.getBrandId()); cameraListVo.setSort(cameraListsVo.getSort()); if (cameraIds == null || cameraIds.size() == 0) { return null; } List cameraDetailsList = new ArrayList(); IPage page = (IPage) this.listPage(cameraListVo).getData(); List list = page.getRecords(); int i = 0; final String farmAppPort = "8081"; final String farmVideoApp = "/appleVideo/play?"; final String hlsMediaPort = "85"; for (Integer cameraId : cameraIds) { for (SysCamera camera : list) { if (cameraId.equals(camera.getId())) { String cameraAccount = camera.getAccount(); String cameraPassword = camera.getPassword(); String camerIp = camera.getCameraIp(); String cameraName = camera.getCameraName(); Integer areaId = camera.getAreaId(); String url = cameraAreaMapper.selectById(areaId).getPublicUrl(); String rtsp; SysCameraBrand cameraBrand = cameraBrandMapper.selectById(camera.getBrandId()); Integer type = cameraBrand.getStreamType(); if (type == 0) { rtsp = cameraBrand.getMainStream(); } else { rtsp = cameraBrand.getAssistStream(); } CameraVo cameraVo = new CameraVo(); cameraVo.setId(camera.getId()); cameraVo.setAreaId(areaId); cameraVo.setWsUrl("ws://" + url + "/camera_relay?tcpaddr=" + cameraAccount + "%3A" + cameraPassword + "%40" + camerIp /*+ "/h265/ch1/main/av_stream"*/); cameraVo.setRtspUrl("rtsp://" + cameraAccount + ":" + cameraPassword + "@" + camerIp + rtsp); cameraVo.setCameraName(cameraName); cameraVo.setHttpUrl(handleHlsHttpUrl(url,cameraAccount,cameraPassword,camerIp,farmAppPort,farmVideoApp,hlsMediaPort)); if (i > 0) { cameraVo.setLastId(list.get(i - 1).getId()); } if (i < list.size() - 1) { cameraVo.setNextId(list.get(i + 1).getId()); } cameraDetailsList.add(cameraVo); } } i++; } return cameraDetailsList; } //构造HlsHttp地址 private String handleHlsHttpUrl(String url, String cameraAccount, String cameraPassword, String camerIp, String farmAppPort, String farmVideoApp, String hlsMediaPort) { url = url.substring(0, url.indexOf(":")); url = "http://" + url; //return url+":"+farmAppPort+farmVideoApp+"url="+cameraAccount + ":" + cameraPassword + "@" + camerIp+"&name="+"&dt=3000&targetUrl="+url+":"+hlsMediaPort; return url + ":" + farmAppPort + farmVideoApp + "url=" + cameraAccount + ":" + cameraPassword + "@" + camerIp + "&dt=3000&targetUrl=" + url + ":" + hlsMediaPort; } @Override public Result add(SysCamera camera) { Integer areaId = camera.getAreaId(); Integer brandId = camera.getBrandId(); int brandName = this.count(new QueryWrapper().eq("camera_name", camera.getCameraName()).eq("farm_id", camera.getFarmId())); if (brandName > 0) { return new Result(10001, "摄像头名称重复", false); } if (areaId != null) { camera.setAreaName(cameraAreaMapper.selectById(areaId).getAreaName()); } if (brandId != null) { camera.setBrandName(cameraBrandMapper.selectById(brandId).getBrandName()); } this.save(camera); return new Result(10000, "添加成功", true); } @Override public Result updates(SysCamera camera) { Integer areaId = camera.getAreaId(); Integer brandId = camera.getBrandId(); this.updateById(camera); int brandName = this.count(new QueryWrapper().eq("camera_name", camera.getCameraName())); if (brandName > 1) { return new Result(10001, "摄像头名称重复", false); } if (areaId != null) { camera.setAreaName(cameraAreaMapper.selectById(areaId).getAreaName()); } if (brandId != null) { camera.setBrandName(cameraBrandMapper.selectById(brandId).getBrandName()); } this.updateById(camera); return new Result(10000, "修改成功", true); } // @Override // public Result initCamera(Integer farmId, Integer userId) { // BaseScreenCameraAccount cameraAccount = cameraAccountMapper.selectOne(new QueryWrapper().eq("farm_id", farmId).eq("account_id", userId)); // Integer cameraId; // if (ObjectUtil.isEmpty(cameraAccount)) { // cameraId = this.getOne(new QueryWrapper().eq("run_status", 1).eq("farm_id", farmId).last("limit 1")).getId(); // } else { // cameraId = cameraAccount.getCameraId(); // } // // // SysCamera camera = this.getById(cameraId); // if (camera.getRunStatus() == 0) { // return new Result(10001, "该摄像头已经被禁用", false); // } // // return new Result(ResultCode.SUCCESS, getCameraVo(camera)); // } public CameraVo getCameraVo(SysCamera camera) { String cameraAccount = camera.getAccount(); String cameraPassword = camera.getPassword(); String camerIp = camera.getCameraIp(); String cameraName = camera.getCameraName(); Integer areaId = camera.getAreaId(); String url = cameraAreaMapper.selectById(areaId).getPublicUrl(); String rtsp; SysCameraBrand cameraBrand = cameraBrandMapper.selectById(camera.getBrandId()); Integer type = cameraBrand.getStreamType(); if (type == 0) { rtsp = cameraBrand.getMainStream(); } else { rtsp = cameraBrand.getAssistStream(); } CameraVo cameraVo = new CameraVo(); cameraVo.setAreaId(areaId); cameraVo.setWsUrl("ws://" + url + "/camera_relay?tcpaddr=" + cameraAccount + "%3A" + cameraPassword + "%40" + camerIp); cameraVo.setRtspUrl("rtsp://" + cameraAccount + ":" + cameraPassword + "@" + camerIp + rtsp); cameraVo.setCameraName(cameraName); return cameraVo; } }