CameraBaseServiceImpl.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. package com.huimv.admin.service.impl;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import cn.hutool.core.util.RandomUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.huimv.admin.common.utils.Result;
  9. import com.huimv.admin.common.utils.ResultCode;
  10. import com.huimv.admin.entity.CameraBase;
  11. import com.huimv.admin.entity.CameraBrand;
  12. import com.huimv.admin.entity.vo.CameraListVo;
  13. import com.huimv.admin.entity.vo.CameraListsVo;
  14. import com.huimv.admin.entity.vo.CameraVo;
  15. import com.huimv.admin.mapper.CameraAreaMapper;
  16. import com.huimv.admin.mapper.CameraBaseMapper;
  17. import com.huimv.admin.mapper.CameraBrandMapper;
  18. import com.huimv.admin.service.ICameraBaseService;
  19. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Service;
  22. import java.util.ArrayList;
  23. import java.util.List;
  24. /**
  25. * <p>
  26. * 服务实现类
  27. * </p>
  28. *
  29. * @author author
  30. * @since 2023-02-16
  31. */
  32. @Service
  33. public class CameraBaseServiceImpl extends ServiceImpl<CameraBaseMapper, CameraBase> implements ICameraBaseService {
  34. @Autowired
  35. private CameraBrandMapper cameraBrandMapper;
  36. @Autowired
  37. private CameraAreaMapper cameraAreaMapper;
  38. @Override
  39. public Result listPage(CameraListVo cameraListVo) {
  40. Integer current = cameraListVo.getCurrent();
  41. String strchStr = cameraListVo.getStrchStr();
  42. Integer size = cameraListVo.getSize();
  43. Integer areaId = cameraListVo.getAreaId();
  44. Integer brandId = cameraListVo.getBrandId();
  45. Integer sort = cameraListVo.getSort();
  46. Integer farmId = cameraListVo.getFarmId();
  47. Integer isOnline = cameraListVo.getIsOnline();
  48. QueryWrapper<CameraBase> wrapper = new QueryWrapper<>();
  49. if (farmId != null) {
  50. wrapper.eq("farm_id", farmId);
  51. }
  52. if (areaId != null) {
  53. wrapper.eq("area_id", areaId);
  54. }
  55. if (brandId != null) {
  56. wrapper.eq("brand_id", brandId);
  57. }
  58. if (isOnline != null) {
  59. wrapper.eq("is_online", isOnline);
  60. }
  61. if (StringUtils.isNotBlank(strchStr)) {
  62. wrapper.and(i -> i.like("camera_name", strchStr)
  63. .or().like("camera_ip", strchStr));
  64. }
  65. if (sort == null) {
  66. wrapper.orderByDesc("id");
  67. } else if (sort == 1) {
  68. wrapper.orderByDesc("sort");
  69. } else {
  70. wrapper.orderByAsc("sort");
  71. }
  72. wrapper.orderByDesc("id");
  73. return new Result(ResultCode.SUCCESS, page(new Page<>(current, size), wrapper));
  74. }
  75. @Override
  76. public List getCameraDetails(CameraListsVo cameraListsVo) {
  77. List<Integer> cameraIds = cameraListsVo.getCameraIds();
  78. CameraListVo cameraListVo = new CameraListsVo();
  79. cameraListVo.setCurrent(1);
  80. cameraListVo.setSize(10000);
  81. cameraListVo.setStrchStr(cameraListsVo.getStrchStr());
  82. cameraListVo.setAreaId(cameraListsVo.getAreaId());
  83. cameraListVo.setBrandId(cameraListsVo.getBrandId());
  84. cameraListVo.setSort(cameraListsVo.getSort());
  85. if (cameraIds == null || cameraIds.size() == 0){
  86. return null;
  87. }
  88. List cameraDetailsList = new ArrayList();
  89. IPage<CameraBase> page = (IPage<CameraBase>)this.listPage(cameraListVo).getData();
  90. List<CameraBase> list = page.getRecords();
  91. int i = 0;
  92. final String farmAppPort = "8081";
  93. final String farmVideoApp = "/appleVideo/play?";
  94. final String hlsMediaPort= "85";
  95. for (CameraBase camera : list) {
  96. for (Integer cameraId : cameraIds) {
  97. if (cameraId.equals( camera.getId())){
  98. String cameraAccount = camera.getAccount();
  99. String cameraPassword = camera.getPassword();
  100. String camerIp = camera.getCameraIp();
  101. String cameraName = camera.getCameraName();
  102. Integer areaId = camera.getAreaId();
  103. String url = cameraAreaMapper.selectById(areaId).getPublicUrl();
  104. String rtsp ;
  105. CameraBrand cameraBrand = cameraBrandMapper.selectById(camera.getBrandId());
  106. Integer type = cameraBrand.getStreamType();
  107. if (type == 0){
  108. rtsp = cameraBrand.getMainStream();
  109. }else {
  110. rtsp = cameraBrand.getAssistStream();
  111. }
  112. CameraVo cameraVo= new CameraVo();
  113. cameraVo.setId(camera.getId());
  114. cameraVo.setAreaId(areaId);
  115. cameraVo.setWsUrl("ws://" + url + "/camera_relay?tcpaddr=" + cameraAccount + "%3A" + cameraPassword + "%40" + camerIp);
  116. // cameraVo.setRtspUrl("rtsp://" + cameraAccount + ":" + cameraPassword + "@" + camerIp + rtsp);
  117. //http://61.153.248.106:6713/mag/hls/6bf5d2cf30bb440cad3fc126512f5188/1/live.m3u8
  118. // cameraVo.setRtspUrl("http://" + ip + ":" + port + "/mag/hls/" + sysKey +"/1/live.m3u8");
  119. cameraVo.setRtspUrl("http://61.153.248.106:6713/mag/hls/6bf5d2cf30bb440cad3fc126512f5188/1/live.m3u8");
  120. cameraVo.setCameraName(cameraName);
  121. cameraVo.setHttpUrl(handleHlsHttpUrl(url,cameraAccount,cameraPassword,camerIp,farmAppPort,farmVideoApp,hlsMediaPort));
  122. if (i > 0){
  123. cameraVo.setLastId(list.get(i-1).getId());
  124. }
  125. if (i < list.size()-1 ){
  126. cameraVo.setNextId(list.get(i+1).getId());
  127. }
  128. cameraDetailsList.add(cameraVo);
  129. }
  130. }
  131. i++;
  132. }
  133. return cameraDetailsList;
  134. }
  135. //构造HlsHttp地址
  136. private String handleHlsHttpUrl(String url, String cameraAccount, String cameraPassword, String camerIp, String farmAppPort, String farmVideoApp, String hlsMediaPort) {
  137. url = url.substring(0,url.indexOf(":"));
  138. url="http://"+url;
  139. //return url+":"+farmAppPort+farmVideoApp+"url="+cameraAccount + ":" + cameraPassword + "@" + camerIp+"&name="+"&dt=3000&targetUrl="+url+":"+hlsMediaPort;
  140. return url+":"+farmAppPort+farmVideoApp+"url="+cameraAccount + ":" + cameraPassword + "@" + camerIp+"&dt=3000&targetUrl="+url+":"+hlsMediaPort;
  141. }
  142. // @Override
  143. public List getCameraDetails_yu(CameraListsVo cameraListsVo) {
  144. List<Integer> cameraIds = cameraListsVo.getCameraIds();
  145. CameraListVo cameraListVo = new CameraListsVo();
  146. cameraListVo.setCurrent(1);
  147. cameraListVo.setSize(10000);
  148. cameraListVo.setStrchStr(cameraListsVo.getStrchStr());
  149. cameraListVo.setAreaId(cameraListsVo.getAreaId());
  150. cameraListVo.setBrandId(cameraListsVo.getBrandId());
  151. cameraListVo.setSort(cameraListsVo.getSort());
  152. if (cameraIds == null || cameraIds.size() == 0) {
  153. return null;
  154. }
  155. List cameraDetailsList = new ArrayList();
  156. IPage<CameraBase> page = (IPage<CameraBase>) this.listPage(cameraListVo).getData();
  157. List<CameraBase> list = page.getRecords();
  158. int i = 0;
  159. for (CameraBase camera : list) {
  160. for (Integer cameraId : cameraIds) {
  161. if (cameraId.equals(camera.getId())) {
  162. String cameraAccount = camera.getAccount();
  163. String cameraPassword = camera.getPassword();
  164. String camerIp = camera.getCameraIp();
  165. String cameraName = camera.getCameraName();
  166. Integer areaId = camera.getAreaId();
  167. String url = cameraAreaMapper.selectById(areaId).getPublicUrl();
  168. String rtsp;
  169. CameraBrand cameraBrand = cameraBrandMapper.selectById(camera.getBrandId());
  170. Integer type = cameraBrand.getStreamType();
  171. if (type == 0) {
  172. rtsp = cameraBrand.getMainStream();
  173. } else {
  174. rtsp = cameraBrand.getAssistStream();
  175. }
  176. CameraVo cameraVo = new CameraVo();
  177. cameraVo.setAreaId(areaId);
  178. cameraVo.setWsUrl("ws://" + url + "/camera_relay?tcpaddr=" + cameraAccount + "%3A" + cameraPassword + "%40" + camerIp);
  179. cameraVo.setRtspUrl("rtsp://" + cameraAccount + ":" + cameraPassword + "@" + camerIp + rtsp);
  180. cameraVo.setCameraName(cameraName);
  181. if (i > 0) {
  182. cameraVo.setLastId(list.get(i - 1).getId());
  183. }
  184. if (i < list.size() - 1) {
  185. cameraVo.setNextId(list.get(i + 1).getId());
  186. }
  187. cameraDetailsList.add(cameraVo);
  188. }
  189. }
  190. i++;
  191. }
  192. return cameraDetailsList;
  193. }
  194. @Override
  195. public Result updateStatus(Integer id) {
  196. CameraBase byId = this.getById(id);
  197. if (byId.getRunStatus()) {
  198. byId.setRunStatus(false);
  199. this.updateById(byId);
  200. return new Result(10000, "已停用", true);
  201. } else {
  202. byId.setRunStatus(true);
  203. this.updateById(byId);
  204. return new Result(10000, "已启用", true);
  205. }
  206. }
  207. @Override
  208. public Result add(CameraBase camera) {
  209. Integer areaId = camera.getAreaId();
  210. Integer brandId = camera.getBrandId();
  211. int brandName = this.count(new QueryWrapper<CameraBase>().eq("camera_name", camera.getCameraName()).eq("farm_id", camera.getFarmId()));
  212. if (brandName > 0) {
  213. return new Result(10001, "摄像头名称重复", false);
  214. }
  215. if (areaId != null) {
  216. camera.setAreaName(cameraAreaMapper.selectById(areaId).getAreaName());
  217. }
  218. if (brandId != null) {
  219. camera.setBrandName(cameraBrandMapper.selectById(brandId).getBrandName());
  220. }
  221. this.save(camera);
  222. return new Result(10000, "添加成功", true);
  223. }
  224. @Override
  225. public Result updates(CameraBase camera) {
  226. Integer areaId = camera.getAreaId();
  227. Integer brandId = camera.getBrandId();
  228. this.updateById(camera);
  229. int brandName = this.count(new QueryWrapper<CameraBase>().eq("camera_name", camera.getCameraName()));
  230. if (brandName > 1) {
  231. return new Result(10001, "摄像头名称重复", false);
  232. }
  233. if (areaId != null) {
  234. camera.setAreaName(cameraAreaMapper.selectById(areaId).getAreaName());
  235. }
  236. if (brandId != null) {
  237. camera.setBrandName(cameraBrandMapper.selectById(brandId).getBrandName());
  238. }
  239. this.updateById(camera);
  240. return new Result(10000, "修改成功", true);
  241. }
  242. @Override
  243. public CameraVo getCameraDetailsByRoomId(Integer roomId) {
  244. CameraBase camera = this.getOne(new QueryWrapper<CameraBase>().eq("room_id", roomId));
  245. return getCameraVo(camera);
  246. }
  247. // @Override
  248. // public Result initCamera(Integer farmId, Integer userId) {
  249. // BaseScreenCameraAccount cameraAccount = cameraAccountMapper.selectOne(new QueryWrapper<BaseScreenCameraAccount>().eq("farm_id", farmId).eq("account_id", userId));
  250. // Integer cameraId;
  251. // if (ObjectUtil.isEmpty(cameraAccount)) {
  252. // cameraId = this.getOne(new QueryWrapper<Camera>().eq("run_status", 1).eq("farm_id", farmId).last("limit 1")).getId();
  253. // } else {
  254. // cameraId = cameraAccount.getCameraId();
  255. // }
  256. //
  257. //
  258. // Camera camera = this.getById(cameraId);
  259. // if (!camera.getRunStatus()) {
  260. // return new Result(10001, "该摄像头已经被禁用", false);
  261. // }
  262. //
  263. // return new Result(ResultCode.SUCCESS, getCameraVo(camera));
  264. // }
  265. @Override
  266. public Result listScreenCamera(Integer farmId) {
  267. List<CameraBase> cameras = this.list(new QueryWrapper<CameraBase>().eq("farm_id", farmId));
  268. List list = new ArrayList();
  269. for (int i = 0; i < 6; i++) {
  270. list.add(getCameraVo(cameras.get(RandomUtil.randomInt(0, cameras.size()))));
  271. }
  272. return new Result(ResultCode.SUCCESS, list);
  273. }
  274. // @Override
  275. // public Result screenCamera(Integer farmId) {
  276. //
  277. // BaseRoom baseRoom = baseRoomMapper.selectOne(new QueryWrapper<BaseRoom>().eq("farm_id", farmId).last("limit 1"));
  278. // Integer roomId;
  279. // if (ObjectUtil.isNotEmpty(baseRoom)) {
  280. //
  281. // roomId = baseRoom.getId();
  282. // } else {
  283. // return new Result(ResultCode.SUCCESS, null);
  284. // }
  285. // Camera room_id = this.getOne(new QueryWrapper<Camera>().eq("room_id", roomId));
  286. // CameraVo cameraVo = getCameraVo(room_id);
  287. //
  288. // return new Result(ResultCode.SUCCESS, cameraVo);
  289. // }
  290. @Override
  291. public List getCameraDetails2(CameraListsVo cameraListsVo) {
  292. List<Integer> cameraIds = cameraListsVo.getCameraIds();
  293. CameraListVo cameraListVo = new CameraListsVo();
  294. cameraListVo.setCurrent(1);
  295. cameraListVo.setSize(10000);
  296. cameraListVo.setStrchStr(cameraListsVo.getStrchStr());
  297. cameraListVo.setAreaId(cameraListsVo.getAreaId());
  298. cameraListVo.setBrandId(cameraListsVo.getBrandId());
  299. cameraListVo.setSort(cameraListsVo.getSort());
  300. if (cameraIds == null || cameraIds.size() == 0){
  301. return null;
  302. }
  303. List cameraDetailsList = new ArrayList();
  304. IPage<CameraBase> page = (IPage<CameraBase>)this.listPage(cameraListVo).getData();
  305. List<CameraBase> list = page.getRecords();
  306. int i = 0;
  307. final String farmAppPort = "8081";
  308. final String farmVideoApp = "/appleVideo/play?";
  309. final String hlsMediaPort= "85";
  310. for (CameraBase camera : list) {
  311. for (Integer cameraId : cameraIds) {
  312. if (cameraId.equals( camera.getId())){
  313. String cameraAccount = camera.getAccount();
  314. String cameraPassword = camera.getPassword();
  315. String camerIp = camera.getCameraIp();
  316. String cameraName = camera.getCameraName();
  317. Integer areaId = camera.getAreaId();
  318. String url = cameraAreaMapper.selectById(areaId).getPublicUrl();
  319. url = url.substring(0,url.indexOf(":"));
  320. url="http://"+url;
  321. CameraVo cameraVo= new CameraVo();
  322. cameraVo.setAreaId(areaId);
  323. // cameraVo.setWsUrl("ws://" + url + "/camera_relay?tcpaddr=" + cameraAccount + "%3A" + cameraPassword + "%40" + camerIp);
  324. // cameraVo.setRtspUrl("rtsp://" + cameraAccount + ":" + cameraPassword + "@" + camerIp + rtsp);
  325. //示例
  326. // cameraVo.setHttpUrl("http://183.249.204.153:8081/appleVideo/play?url=admin:hmkj6688@192.168.1.108&name=101&dt=3000&targetUrl=http://183.249.204.153:85");
  327. cameraVo.setHttpUrl(url+":"+farmAppPort+farmVideoApp+"url="+cameraAccount + ":" + cameraPassword + "@" + camerIp+"&name="+"&dt=3000&targetUrl="+url+":"+hlsMediaPort);
  328. cameraVo.setCameraName(cameraName);
  329. if (i > 0){
  330. cameraVo.setLastId(list.get(i-1).getId());
  331. }
  332. if (i < list.size()-1 ){
  333. cameraVo.setNextId(list.get(i+1).getId());
  334. }
  335. cameraDetailsList.add(cameraVo);
  336. }
  337. }
  338. i++;
  339. }
  340. return cameraDetailsList;
  341. }
  342. @Override
  343. public List getByAreaId(Integer areaId) {
  344. return null;
  345. }
  346. public CameraVo getCameraVo(CameraBase camera) {
  347. String cameraAccount = camera.getAccount();
  348. String cameraPassword = camera.getPassword();
  349. String camerIp = camera.getCameraIp();
  350. String cameraName = camera.getCameraName();
  351. Integer areaId = camera.getAreaId();
  352. String url = cameraAreaMapper.selectById(areaId).getPublicUrl();
  353. String rtsp;
  354. CameraBrand cameraBrand = cameraBrandMapper.selectById(camera.getBrandId());
  355. Integer type = cameraBrand.getStreamType();
  356. if (type == 0) {
  357. rtsp = cameraBrand.getMainStream();
  358. } else {
  359. rtsp = cameraBrand.getAssistStream();
  360. }
  361. CameraVo cameraVo = new CameraVo();
  362. cameraVo.setAreaId(areaId);
  363. if (camera.getId() == 767){
  364. cameraVo.setWsUrl("ws://" + url + "/camera_relay?tcpaddr=" + cameraAccount + "%3A" + cameraPassword + "%40" + camerIp);
  365. cameraVo.setRtspUrl("rtsp://" + cameraAccount + ":" + cameraPassword + "@" + camerIp + "/cam/realmonitor?channel=2&subtype=0");
  366. }else {
  367. cameraVo.setWsUrl("ws://" + url + "/camera_relay?tcpaddr=" + cameraAccount + "%3A" + cameraPassword + "%40" + camerIp);
  368. cameraVo.setRtspUrl("rtsp://" + cameraAccount + ":" + cameraPassword + "@" + camerIp + rtsp);
  369. }
  370. // cameraVo.setWsUrl("ws://" + url + "/camera_relay?tcpaddr=" + cameraAccount + "%3A" + cameraPassword + "%40" + camerIp);
  371. // cameraVo.setRtspUrl("rtsp://" + cameraAccount + ":" + cameraPassword + "@" + camerIp + rtsp);
  372. cameraVo.setCameraName(cameraName);
  373. return cameraVo;
  374. }
  375. }