jiazx0107@163.com
2023-11-04 43ce77a85d8297a53dc25430fff10ead57296167
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package com.ld.igds.three.controller;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.ld.igds.camera.CameraUtil;
import com.ld.igds.common.CoreThreeService;
import com.ld.igds.data.ConfigHikMedia;
import com.ld.igds.models.ThreeConf;
import com.ld.igds.sec.dto.SecCameraDto;
import com.ld.igds.sec.manager.SecManager;
import com.ld.igds.three.ThreeCodeEnum;
import com.ld.igds.three.data.ThreeResponse;
import com.ld.igds.three.manager.ThreeManager;
import com.ld.igds.three.param.ThreeRequest;
import com.ld.igds.three.util.ThreeRespUtil;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
 
/**
 * 三维接口3.0入口
 *
 * @author chen
 */
@Slf4j
@RestController
@RequestMapping("api-3d/v3")
public class ThreeController {
    @Autowired
    private CoreThreeService commonService;
    @Autowired
    private SecManager securityManager;
    @Autowired
    private ConfigHikMedia configHikMedia;
    @Autowired
    private ThreeManager threeManager;
 
    /**
     * 业务入口
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping("/gateway")
    public Object gateway(@RequestBody ThreeRequest<JSONObject> request) {
        //判断参数
        if (null == request) {
            return ThreeRespUtil.error(ThreeCodeEnum.CODE_1005);
        }
        //判断接口编码、组织编码、分库编码、签名
        if (null == request.getInterfaceId() ||
                null == request.getCompanyId() ||
                null == request.getDeptId()) {
            return ThreeRespUtil.error(ThreeCodeEnum.CODE_1005, request);
        }
        ThreeResponse<Object> result;
        try {
 
            //执行业务操作
            result = threeManager.execute(request);
 
        } catch (Exception e) {
            result = ThreeRespUtil.error(ThreeCodeEnum.CODE_1111, "后端异常:" + e.getMessage(), request);
        }
        return JSON.parseObject(JSON.toJSONString(result,
                SerializerFeature.QuoteFieldNames,
                SerializerFeature.WriteMapNullValue,
                SerializerFeature.WriteNullNumberAsZero,
                SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteNullStringAsEmpty,
                SerializerFeature.WriteNullBooleanAsFalse));
 
    }
 
    /**
     * 鸟瞰图页面 -- 视频播放,通过播放参数不同跳转不同页面播放
     *
     * @param id 摄像机three ID
     * @return
     */
    @RequestMapping("/video-play")
    public ModelAndView play(
            @RequestParam(value = "id", required = true) String id) {
        ModelAndView view = new ModelAndView();
        //查询单个仓库
        ThreeConf threeConf = commonService.getCacheThreeConfById(ContextUtil.getDefaultCompanyId(),id);
        if(threeConf == null || StringUtils.isEmpty(threeConf.getCameraId())){
            view.addObject("errorMsg", "没获取到关联配置,请先刷新缓存!");
            view.setViewName("admin/afgl/video-error");
            return view;
        }
        // 设置logo
        String logName = FilesUtil.getLogoByCompanyId(ContextUtil.getDefaultCompanyId());
        view.addObject("logo", "../../static/img/" + logName);
 
        SecCameraDto param = new SecCameraDto();
        param.setId(threeConf.getCameraId());
        param.setCompanyId(threeConf.getCompanyId());
        SecCameraDto camera = securityManager.getPlayAddr(param);
 
        if (camera == null) {
            view.addObject("errorMsg", "获取视频设备出错,请先刷新缓存!");
            view.setViewName("admin/afgl/video-error");
            return view;
        }
 
        String playType = camera.getPlayType();
        if (StringUtils.isEmpty(playType)) {
            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)) {
            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;
    }
}