package controller
|
|
import (
|
"gat1400Exchange/config"
|
"gat1400Exchange/service"
|
"net/http"
|
"time"
|
|
"gat1400Exchange/pkg/logger"
|
"gat1400Exchange/repository"
|
"gat1400Exchange/vo"
|
|
"github.com/gin-gonic/gin"
|
)
|
|
type CaptureController struct {
|
Repository repository.CaptureRepository
|
}
|
|
// 构造函数
|
func NewCaptureController() CaptureController {
|
svr := repository.NewCaptureRepository()
|
controller := CaptureController{Repository: svr}
|
|
return controller
|
}
|
|
// 批量提交人脸
|
func (a CaptureController) Faces(c *gin.Context) {
|
var req vo.RequestFaceList
|
if err := c.BindJSON(&req); err != nil {
|
c.AbortWithStatus(http.StatusBadRequest)
|
return
|
}
|
|
if len(req.FaceListObject.FaceObject) == 0 {
|
c.AbortWithStatus(http.StatusBadRequest)
|
return
|
}
|
|
face := req.FaceListObject.FaceObject[0]
|
logger.Debug("Receive new message, Id:%s Ip:%s faceId:%s, LeftTopX:%d, appearTime:%s", c.RemoteIP(), face.DeviceID, face.FaceID, face.LeftTopX, face.FaceAppearTime)
|
|
// 如果开启了下级, 身份应该是消息代理, 不再转发到服务器
|
if config.ClientConf.Enable && config.ServeConf.Role == "agent" {
|
go a.Repository.VIIDMsgForward(&req)
|
} else if config.ServeConf.Role == "cascade" {
|
go service.AddFaceNotification(&face)
|
}
|
|
if config.ForwardConf.SyncServer != "" {
|
go a.Repository.FaceForward(req.FaceListObject.FaceObject)
|
}
|
|
// 设备保活
|
service.KeepDeviceAlive(face.DeviceID)
|
|
rspMsg := vo.ResponseStatus{
|
RequestURL: c.FullPath(),
|
StatusCode: vo.StatusSuccess,
|
StatusString: vo.StatusString[vo.StatusSuccess],
|
Id: face.FaceID,
|
LocalTime: time.Now().Format("20060102150405"),
|
}
|
|
c.JSON(http.StatusOK, gin.H{"ResponseStatusObject": rspMsg})
|
}
|
func (a CaptureController) VideoLabels(c *gin.Context) {
|
var req vo.RequestVideoLabelList
|
if err := c.BindJSON(&req); err != nil {
|
c.AbortWithStatus(http.StatusBadRequest)
|
return
|
}
|
|
if len(req.VideoLabelListObject.VideoLabelObject) == 0 {
|
c.AbortWithStatus(http.StatusBadRequest)
|
return
|
}
|
|
videoLabel := req.VideoLabelListObject.VideoLabelObject[0]
|
logger.Debug("Receive new message, Id:%s Ip:%s faceId:%s, LeftTopX:%d, appearTime:%s", c.RemoteIP(), videoLabel.VideoLabelID)
|
|
// 转人脸消息
|
var face vo.FaceObject
|
face.FaceID = videoLabel.VideoLabelID
|
face.InfoKind = 1
|
face.SourceID = videoLabel.VideoImageID
|
face.SourceID = videoLabel.VideoImageID
|
face.LocationMarkTime = videoLabel.CreateTimeAbs
|
face.FaceAppearTime = videoLabel.BehaviorAnalysisObject.BehaviorBeginTime
|
face.FaceDisAppearTime = videoLabel.BehaviorAnalysisObject.BehaviorEndTime
|
|
for idx, _ := range videoLabel.SubImageList.SubImageInfoObject {
|
videoLabel.SubImageList.SubImageInfoObject[idx].EventSort = 10
|
}
|
|
face.SubImageList.SubImageInfoObject = videoLabel.SubImageList.SubImageInfoObject
|
|
// 如果开启了下级, 身份应该是消息代理, 不再转发到服务器
|
if config.ClientConf.Enable && config.ServeConf.Role == "agent" {
|
//go a.Repository.VIIDMsgForward(&req)
|
} else if config.ServeConf.Role == "cascade" {
|
go service.AddFaceNotification(&face)
|
}
|
|
if config.ForwardConf.SyncServer != "" {
|
go a.Repository.FaceForward([]vo.FaceObject{face})
|
}
|
|
// 设备保活
|
service.KeepDeviceAlive(videoLabel.IVADeviceID)
|
|
rspMsg := vo.ResponseStatus{
|
RequestURL: c.FullPath(),
|
StatusCode: vo.StatusSuccess,
|
StatusString: vo.StatusString[vo.StatusSuccess],
|
Id: videoLabel.VideoLabelID,
|
LocalTime: time.Now().Format("20060102150405"),
|
}
|
|
c.JSON(http.StatusOK, gin.H{"ResponseStatusObject": rspMsg})
|
}
|