hikvision.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package handler
  2. import (
  3. "city_chips/internal/service"
  4. "city_chips/pkg/helper/resp"
  5. "encoding/json"
  6. "fmt"
  7. "github.com/gin-gonic/gin"
  8. "github.com/spf13/viper"
  9. "github.com/tidwall/gjson"
  10. "strconv"
  11. )
  12. type HikvisionHandler struct {
  13. *Handler
  14. hikvisionService service.HikvisionService
  15. conf *viper.Viper
  16. }
  17. func NewHikvisionHandler(handler *Handler, hikvisionService service.HikvisionService, conf *viper.Viper) *HikvisionHandler {
  18. return &HikvisionHandler{
  19. Handler: handler,
  20. hikvisionService: hikvisionService,
  21. conf: conf,
  22. }
  23. }
  24. // GetHikvisionMonitoring 获取视频监控流{
  25. // "cameraIndexCode": "748d84750e3a4a5bbad3cd4af9ed5101",
  26. // "streamType": 0,
  27. // "protocol": "rtsp",
  28. // "transmode": 1,
  29. // "expand": "transcode=0",
  30. // "streamform": "ps"
  31. // }
  32. func (h *HikvisionHandler) GetHikvisionMonitoring(ctx *gin.Context) {
  33. m := make(map[string]string)
  34. cameraIndexCode := ctx.Query("cameraIndexCode")
  35. m["cameraIndexCode"] = cameraIndexCode
  36. m["streamType"] = "0"
  37. m["protocol"] = "rtsp"
  38. m["transmode"] = "1"
  39. m["expand"] = "transcode=0"
  40. m["streamform"] = "ps"
  41. if len(cameraIndexCode) <= 0 || cameraIndexCode == "" {
  42. resp.HandleError(ctx, 1203, "设备编码不能为空", nil)
  43. return
  44. }
  45. fmt.Println(m)
  46. resp.HandleSuccess(ctx, "rtsp://10.2.145.66:655/EUrl/CLJ52BW")
  47. return
  48. hikvision, err := h.hikvisionService.Hikvision(h.conf.GetString("hikvision.api.cameras"), m, 15)
  49. //返回结果{
  50. // "code": "0",
  51. // "msg": "success",
  52. // "data": {
  53. // "url": "rtsp://10.2.145.66:655/EUrl/CLJ52BW"
  54. // }
  55. //}
  56. if err != nil {
  57. h.logger.Error("获取获取监控点资源失败")
  58. resp.HandleError(ctx, 1201, "获取获取监控点资源失败", err)
  59. return
  60. }
  61. if hikvision.Code != "0" {
  62. atoi, _ := strconv.Atoi(hikvision.Code)
  63. resp.HandleError(ctx, atoi, hikvision.Msg, nil)
  64. return
  65. }
  66. marshalString, err := json.Marshal(hikvision)
  67. if err != nil {
  68. resp.HandleError(ctx, 1202, "json序列化失败", nil)
  69. return
  70. }
  71. url := gjson.Get(string(marshalString), "data.url")
  72. resp.HandleSuccess(ctx, url)
  73. }
  74. // 视频监控云台控制{
  75. // "cameraIndexCode": "748d84750e3a4a5bbad3cd4af9ed5101",
  76. // "action": 1, 0-开始
  77. //1-停止
  78. //注:GOTO_PRESET命令下填任意值均可转到预置点,建议填0即可
  79. // "command": "GOTO_PRESET",
  80. // "speed": 4,
  81. // "presetIndex": 20
  82. //}
  83. func (h *HikvisionHandler) Gimbalcontrol(ctx *gin.Context) {
  84. m := make(map[string]string)
  85. cameraIndexCode := ctx.Query("cameraIndexCode")
  86. command := ctx.Query("command")
  87. action := ctx.Query("action")
  88. speed := ctx.Query("speed")
  89. presetIndex := ctx.Query("presetIndex")
  90. m["cameraIndexCode"] = cameraIndexCode
  91. m["action"] = action
  92. m["command"] = command
  93. m["speed"] = speed
  94. m["presetIndex"] = presetIndex
  95. if len(cameraIndexCode) <= 0 || len(command) <= 0 || len(action) <= 0 {
  96. resp.HandleError(ctx, 1203, "设备编码不能为空", nil)
  97. return
  98. }
  99. resp.HandleSuccess(ctx, m)
  100. return
  101. hikvision, err := h.hikvisionService.Hikvision(h.conf.GetString("hikvision.api.controlling"), m, 15)
  102. if err != nil {
  103. h.logger.Error("控制云台失败")
  104. resp.HandleError(ctx, 1201, "控制云台失败", err)
  105. return
  106. }
  107. if hikvision.Code != "0" {
  108. atoi, _ := strconv.Atoi(hikvision.Code)
  109. resp.HandleError(ctx, atoi, hikvision.Msg, nil)
  110. return
  111. }
  112. resp.HandleSuccess(ctx, hikvision.Msg)
  113. }
  114. // VisitorInfoCount 获取今日访客信息包含:今日来访总人数(已签离人数,未签离人数),预约人数
  115. func (h *HikvisionHandler) VisitorInfoCount(c *gin.Context) {
  116. m := make(map[string]string)
  117. parkId := c.Query("parkId")
  118. m["parkId"] = parkId
  119. resp.HandleSuccess(c, "appointmentTotal: 1, notSignOutTotal: 1, signOutTotal: 1, signTotal: 1, orderCount: 1, visitCount: 1, visitCountForTemp: 1, visitCountForOrder: 1, signOutCount: 1, notSignOutCount: 1")
  120. return
  121. hikvision, err := h.hikvisionService.Hikvision(h.conf.GetString("hikvision.api.visitorInfo"), m, 15)
  122. if err != nil {
  123. h.logger.Error("获取访客信息失败")
  124. resp.HandleError(c, 1201, "获取访客信息失败", err)
  125. return
  126. }
  127. if hikvision.Code != "0" {
  128. atoi, _ := strconv.Atoi(hikvision.Code)
  129. resp.HandleError(c, atoi, hikvision.Msg, nil)
  130. return
  131. }
  132. resp.HandleSuccess(c, hikvision.Data)
  133. }