package handler import ( "city_chips/internal/service" "city_chips/pkg/helper/resp" "encoding/json" "fmt" "github.com/gin-gonic/gin" "github.com/spf13/viper" "github.com/tidwall/gjson" "strconv" ) type HikvisionHandler struct { *Handler hikvisionService service.HikvisionService conf *viper.Viper } func NewHikvisionHandler(handler *Handler, hikvisionService service.HikvisionService, conf *viper.Viper) *HikvisionHandler { return &HikvisionHandler{ Handler: handler, hikvisionService: hikvisionService, conf: conf, } } // GetHikvisionMonitoring 获取视频监控流{ // "cameraIndexCode": "748d84750e3a4a5bbad3cd4af9ed5101", // "streamType": 0, // "protocol": "rtsp", // "transmode": 1, // "expand": "transcode=0", // "streamform": "ps" // } func (h *HikvisionHandler) GetHikvisionMonitoring(ctx *gin.Context) { m := make(map[string]string) cameraIndexCode := ctx.Query("cameraIndexCode") m["cameraIndexCode"] = cameraIndexCode m["streamType"] = "0" m["protocol"] = "rtsp" m["transmode"] = "1" m["expand"] = "transcode=0" m["streamform"] = "ps" if len(cameraIndexCode) <= 0 || cameraIndexCode == "" { resp.HandleError(ctx, 1203, "设备编码不能为空", nil) return } fmt.Println(m) resp.HandleSuccess(ctx, "rtsp://10.2.145.66:655/EUrl/CLJ52BW") return hikvision, err := h.hikvisionService.Hikvision(h.conf.GetString("hikvision.api.cameras"), m, 15) //返回结果{ // "code": "0", // "msg": "success", // "data": { // "url": "rtsp://10.2.145.66:655/EUrl/CLJ52BW" // } //} if err != nil { h.logger.Error("获取获取监控点资源失败") resp.HandleError(ctx, 1201, "获取获取监控点资源失败", err) return } if hikvision.Code != "0" { atoi, _ := strconv.Atoi(hikvision.Code) resp.HandleError(ctx, atoi, hikvision.Msg, nil) return } marshalString, err := json.Marshal(hikvision) if err != nil { resp.HandleError(ctx, 1202, "json序列化失败", nil) return } url := gjson.Get(string(marshalString), "data.url") resp.HandleSuccess(ctx, url) } // 视频监控云台控制{ // "cameraIndexCode": "748d84750e3a4a5bbad3cd4af9ed5101", // "action": 1, 0-开始 //1-停止 //注:GOTO_PRESET命令下填任意值均可转到预置点,建议填0即可 // "command": "GOTO_PRESET", // "speed": 4, // "presetIndex": 20 //} func (h *HikvisionHandler) Gimbalcontrol(ctx *gin.Context) { m := make(map[string]string) cameraIndexCode := ctx.Query("cameraIndexCode") command := ctx.Query("command") action := ctx.Query("action") speed := ctx.Query("speed") presetIndex := ctx.Query("presetIndex") m["cameraIndexCode"] = cameraIndexCode m["action"] = action m["command"] = command m["speed"] = speed m["presetIndex"] = presetIndex if len(cameraIndexCode) <= 0 || len(command) <= 0 || len(action) <= 0 { resp.HandleError(ctx, 1203, "设备编码不能为空", nil) return } resp.HandleSuccess(ctx, m) return hikvision, err := h.hikvisionService.Hikvision(h.conf.GetString("hikvision.api.controlling"), m, 15) if err != nil { h.logger.Error("控制云台失败") resp.HandleError(ctx, 1201, "控制云台失败", err) return } if hikvision.Code != "0" { atoi, _ := strconv.Atoi(hikvision.Code) resp.HandleError(ctx, atoi, hikvision.Msg, nil) return } resp.HandleSuccess(ctx, hikvision.Msg) } // VisitorInfoCount 获取今日访客信息包含:今日来访总人数(已签离人数,未签离人数),预约人数 func (h *HikvisionHandler) VisitorInfoCount(c *gin.Context) { m := make(map[string]string) parkId := c.Query("parkId") m["parkId"] = parkId resp.HandleSuccess(c, "appointmentTotal: 1, notSignOutTotal: 1, signOutTotal: 1, signTotal: 1, orderCount: 1, visitCount: 1, visitCountForTemp: 1, visitCountForOrder: 1, signOutCount: 1, notSignOutCount: 1") return hikvision, err := h.hikvisionService.Hikvision(h.conf.GetString("hikvision.api.visitorInfo"), m, 15) if err != nil { h.logger.Error("获取访客信息失败") resp.HandleError(c, 1201, "获取访客信息失败", err) return } if hikvision.Code != "0" { atoi, _ := strconv.Atoi(hikvision.Code) resp.HandleError(c, atoi, hikvision.Msg, nil) return } resp.HandleSuccess(c, hikvision.Data) }