package com.ld.igds.sec.controller; import com.bstek.bdf2.core.business.IUser; import com.bstek.bdf2.core.model.DefaultDept; import com.ld.igds.camera.CameraUtil; import com.ld.igds.camera.data.ApiCameraResp; import com.ld.igds.common.manager.CommonManager; import com.ld.igds.constant.BizType; import com.ld.igds.constant.Constant; import com.ld.igds.data.ConfigHikMedia; import com.ld.igds.data.PageResponse; import com.ld.igds.models.Depot; import com.ld.igds.sec.dto.*; import com.ld.igds.camera.data.ApiCameraData; import com.ld.igds.sec.manager.SecManager; import com.ld.igds.util.ContextUtil; import com.ld.igds.util.FilesUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import java.util.Date; import java.util.List; /** * 安防--视频监控管理控制层 * @author */ @Slf4j @RestController @RequestMapping("basic/security") public class SecurityController { @Autowired private SecManager securityManager; @Autowired private ConfigHikMedia configHikMedia; @Autowired private CommonManager commonManager; /** * 监控概览 * * @param type 1.表示2.5D鸟瞰图页面预览;2.表示列表预览页面 * @return */ @RequestMapping("/aerial-video") public ModelAndView aerialVideo( @RequestParam(value = "type", required = false) String type) { if (StringUtils.isEmpty(type)) type = "1"; ModelAndView view = new ModelAndView(); IUser user = ContextUtil.getLoginUser(); view.addObject(Constant.MODEL_KEY_LOGIN_USER, user); // 设置logo String logName = FilesUtil.getAerialByDeptId(ContextUtil.subDeptId(null)); view.addObject("logo", "../../static/img/" + logName); view.addObject("bizType", BizType.SECURITY.getCode()); String deptId = ContextUtil.subDeptId(user); List listCamera = securityManager.listCamera(deptId, user.getCompanyId()); view.addObject("deptId", deptId); view.addObject("listCamera", listCamera); view.setViewName("admin/afgl/aerial-video"); // 设置鸟瞰背景图 String aerialImg = FilesUtil.getAerialByDeptId(deptId); view.addObject("backgroundImg", "../../static/img/" + aerialImg); if ("2".equals(type)) { view.setViewName("admin/afgl/aerial-video2"); } return view; } /** * 鸟瞰图页面 -- 视频播放,通过播放参数不同跳转不同页面播放 * * @param cameraId 摄像机系统ID * @param playType 配置的播放方式 * @param time 时间参数,无具体含义 * @return */ @RequestMapping("/video-play") public ModelAndView play( @RequestParam(value = "cameraId", required = true) String cameraId, @RequestParam(value = "playType", required = false) String playType, @RequestParam(value = "time", required = false) String time) { ModelAndView view = new ModelAndView(); IUser user = ContextUtil.getLoginUser(); // 设置logo String logName = FilesUtil.getLogoByCompanyId(user.getCompanyId()); view.addObject("logo", "../../static/img/" + logName); // 设置默认播放方式 if (StringUtils.isEmpty(playType)) { playType = CameraUtil.PLAY_TYPE_VLC; } SecCameraDto param = new SecCameraDto(); param.setId(cameraId); SecCameraDto camera = securityManager.getPlayAddr(param); if (camera == null) { view.addObject("errorMsg", "获取视频设备出错,请先刷新缓存!"); view.setViewName("admin/afgl/video-error"); return view; } if (StringUtils.isEmpty(camera.getPlayAddr())) { view.addObject("errorMsg", "获取视频流失败,请重试!"); view.setViewName("admin/afgl/video-error"); } log.info("-----获取播放地址-----{}--{}", camera.getName(), camera.getPlayAddr()); //vlc播放页面 if (CameraUtil.PLAY_TYPE_VLC.equals(playType)) { view.setViewName("admin/afgl/video-vlc"); } //流媒体播放页面 if (CameraUtil.PLAY_TYPE_FZZY_GB.equals(playType) || CameraUtil.PLAY_TYPE_EASY_GBS.equals(playType) || CameraUtil.PLAY_TYPE_MEDIA_HIK_INFOVISION_IOT_161.equals(playType)) { view.setViewName("admin/afgl/video-media"); } if (CameraUtil.PLAY_TYPE_MEDIA_HIK.equals(playType)) { view.setViewName("admin/afgl/video-hikmedia"); view.addObject("hikMediaProp", configHikMedia.getHikProp(ContextUtil.getCompanyId())); } //海康WEB插件播放页面 if (CameraUtil.PLAY_TYPE_HIK_WEB4.equals(playType)) { view.setViewName("admin/afgl/video-hikweb4"); } // 设置摄像头信息 view.addObject("cameraData", camera); return view; } /** * 获取视频播放地址 * * @param param * @return */ @RequestMapping("/get-media") public @ResponseBody SecCameraDto getMedia(@RequestBody SecCameraDto param) { return securityManager.getPlayAddr(param); } /** * 视频云台操作 * * @param param * @return */ @RequestMapping("/ptz-media") public @ResponseBody ApiCameraResp ptzMedia(@RequestBody ApiCameraData param) { return securityManager.ptzMedia(param); } /** * 视频云台预置位设置 * * @param param * @return */ @RequestMapping("/ptz-preset") public @ResponseBody ApiCameraResp ptzPreset(@RequestBody ApiCameraData param) { return securityManager.ptzPreset(param); } /** * 流媒体服务器,保证流媒体推流 * * @param param * @return */ @RequestMapping("/keep-alive") public @ResponseBody ApiCameraResp keepAlive(@RequestBody ApiCameraData param) { return securityManager.keepAlive(param); } /*** * 视频鸟瞰图中更改摄像头位置 * * @param params * @return */ @RequestMapping("/update-pos") public PageResponse updatePos( @RequestBody List params) { return securityManager.updatePos(params); } /** * 人员进出 * * @param * @return */ @RequestMapping("/personnel-access") public ModelAndView personnelAccess(@RequestParam(value = "parentCode", required = false) String parentCode) { ModelAndView view = new ModelAndView(); view.addObject("time", DateFormatUtils.format(new Date(), "yyyy-MM-dd")); view.setViewName("admin/afgl/personnel-access"); return view; } /** * 车辆进出 * @param * @return */ @RequestMapping("/vehicle-access") public ModelAndView vehicleAccess(@RequestParam(value = "parentCode", required = false) String parentCode) { ModelAndView view = new ModelAndView(); view.addObject("time", DateFormatUtils.format(new Date(), "yyyy-MM-dd")); view.setViewName("admin/afgl/vehicle-access"); return view; } /** * 舱内抓拍 * @param * @return */ @RequestMapping("/depot-capture") public ModelAndView depotCapture(@RequestParam(value = "parentCode", required = false) String parentCode) { ModelAndView view = new ModelAndView(); // 仓库列表做下拉框使用 List listDepot = commonManager.listDepot(null); view.addObject(Constant.MODEL_KEY_DEPOT_LIST, listDepot); view.addObject("time", DateFormatUtils.format(new Date(), "yyyy-MM-dd")); view.setViewName("admin/afgl/depot-capture"); return view; } /** * 贷款监管 * @param * @return */ @RequestMapping("/provide") public ModelAndView provide(@RequestParam(value = "parentCode", required = false) String parentCode) { ModelAndView view = new ModelAndView(); view.setViewName("test/provide"); return view; } /** * 页面控制--数量检测页面 * * @param depotId * @return */ @RequestMapping("/video-test") public ModelAndView videoDetection( @RequestParam(value = "depotId", required = false) String depotId, @RequestParam(value = "deptId", required = false) String deptId, @RequestParam(value = "t", required = false) String t) { if (StringUtils.isEmpty(t)) t = "1"; ModelAndView view = new ModelAndView(); // 仓库列表做下拉框使用 List listDepot = commonManager.listDepot(null); view.addObject(Constant.MODEL_KEY_DEPOT_LIST, listDepot); IUser user = ContextUtil.getLoginUser(); view.addObject(Constant.MODEL_KEY_LOGIN_USER, user); if (StringUtils.isEmpty(deptId)) { deptId = ContextUtil.subDeptId(user); } view.addObject("deptId", deptId); view.addObject("bizType", BizType.QUANTITY.getCode()); view.addObject("depotId", depotId); //获取当前用户所在的分库名称 DefaultDept dept = commonManager.getSubDept(user, deptId); view.addObject("dept", dept); view.setViewName("admin/afgl/video-test"); return view; } }