Bläddra i källkod

对接抓拍功能 查询列表

xu 4 dagar sedan
förälder
incheckning
2315886f1e

+ 32 - 0
server/api/v1/devices/captureVehicles.go

@@ -0,0 +1,32 @@
+package devices
+
+import (
+	"github.com/gin-gonic/gin"
+	"go.uber.org/zap"
+	"server/global"
+	"server/model/common/response"
+	"server/model/devices"
+)
+
+type CaptureVehiclesApi struct{}
+
+func (cva *CaptureVehiclesApi) QueryCaptureVehiclesList(c *gin.Context) {
+	var info devices.SearchCaptureVehicles
+	if err := c.ShouldBind(&info); err != nil {
+		global.GVA_LOG.Error("参数错误", zap.Error(err))
+		response.FailWithMessage("参数错误", c)
+		return
+	}
+	list, total, err := captureVehiclesService.QueryCaptureVehiclesList(info)
+	if err != nil {
+		global.GVA_LOG.Error("查询失败", zap.Error(err))
+		response.FailWithMessage("查询失败", c)
+		return
+	}
+	response.OkWithDetailed(response.PageResult{
+		List:     list,
+		Total:    total,
+		Page:     info.Page,
+		PageSize: info.PageSize,
+	}, "获取成功", c)
+}

+ 7 - 5
server/api/v1/devices/enter.go

@@ -8,12 +8,14 @@ type ApiGroup struct {
 	SoundPeriodApi
 	VoiceApi
 	CameraApi
+	CaptureVehiclesApi
 }
 
 var (
-	ScreensService     = service.ServiceGroupApp.DevicesServiceGroup.ScreensService
-	programService     = service.ServiceGroupApp.DevicesServiceGroup.ProgramService
-	soundPeriodService = service.ServiceGroupApp.DevicesServiceGroup.SoundPeriodService
-	voiceService       = service.ServiceGroupApp.DevicesServiceGroup.VoiceService
-	cameraService      = service.ServiceGroupApp.DevicesServiceGroup.CameraService
+	ScreensService         = service.ServiceGroupApp.DevicesServiceGroup.ScreensService
+	programService         = service.ServiceGroupApp.DevicesServiceGroup.ProgramService
+	soundPeriodService     = service.ServiceGroupApp.DevicesServiceGroup.SoundPeriodService
+	voiceService           = service.ServiceGroupApp.DevicesServiceGroup.VoiceService
+	cameraService          = service.ServiceGroupApp.DevicesServiceGroup.CameraService
+	captureVehiclesService = service.ServiceGroupApp.DevicesServiceGroup.CaptureVehiclesService
 )

BIN
server/build/smart_intersectionV2.0


+ 4 - 4
server/config.yaml

@@ -172,7 +172,7 @@ qiniu:
     use-cdn-domains: false
 redis:
     addr: 127.0.0.1:6379
-    password: ""
+    password:
     db: 1
 sqlite:
     prefix: ""
@@ -196,7 +196,7 @@ system:
     iplimit-count: 15000
     iplimit-time: 3600
     use-multipoint: false
-    use-redis: false
+    use-redis: true
     use-mongo: false
 tencent-cos:
     bucket: xxxxx-10005608
@@ -218,6 +218,6 @@ zap:
 mqtt:
     server: "tcp://118.253.180.18:1883"
     id: "smart_intersectionV2.0_local"
-    user: "admin"
-    password: "#BgYgMRhshtS0I7E"
+    user: ""
+    password: ""
 

+ 26 - 0
server/dao/capture_vehicles.go

@@ -0,0 +1,26 @@
+package dao
+
+import "server/global"
+
+type CaptureVehicles struct {
+	global.GVA_MODEL
+	CameraId    int    `json:"cameraId" form:"cameraId" gorm:"comment:'摄像头id'"`
+	SLicense    string `json:"sLicense" form:"sLicense" gorm:"comment:'车牌号'"`
+	VehicleType int    `json:"vehicleType" form:"vehicleType" gorm:"comment:'车辆类型'"`
+	CaptureTime string `json:"captureTime" form:"captureTime" gorm:"comment:'抓拍时间'"`
+}
+
+func (CaptureVehicles) TableName() string {
+	return "capture_vehicles"
+}
+
+func QueryCaptureVehiclesList(limit, offset int) (captureVehicles []CaptureVehicles, total int64, err error) {
+	db := global.GVA_DB.Model(&CaptureVehicles{})
+
+	err = db.Count(&total).Error
+	if err != nil {
+		return
+	}
+	err = db.Limit(limit).Offset(offset).Find(&captureVehicles).Error
+	return
+}

+ 8 - 1
server/dao/dev_camera.go

@@ -13,11 +13,18 @@ type Camera struct {
 	Password  string `json:"password" gorm:"column:password;comment:'密码'"`
 	Channel   string `json:"channel" gorm:"column:channel;comment:'通道号'"`
 	DevType   string `json:"devType" form:"devType" gorm:"comment:'设备类型'"`
+	DeviceId  string `json:"deviceId" gorm:"column:device_id;comment:'设备id'"`
 	SerialNum string `json:"serialNum" form:"serialNum" gorm:"comment:'设备序列号'"`
 	LocalTime string `json:"lacalTime" form:"lacalTime" gorm:"comment:'设备端系统时间'"`
 	State     int    `json:"state" gorm:"column:state;comment:'状态'"`
+	IsCapture bool   `json:"isCapture" form:"isCapture" gorm:"comment:'是否抓拍'"`
 
-	ScreensId int `json:"screensId" gorm:"column:screens_id;comment:'显示器id'"`
+	ScreensId       int               `json:"screensId" gorm:"column:screens_id;comment:'显示器id'"`
+	CaptureVehicles []CaptureVehicles `json:"captureVehicles" form:"captureVehicles" gorm:"-"`
+}
+
+func (Camera) TableName() string {
+	return "cameras"
 }
 
 func QueryAllCameras() (cameras []Camera, err error) {

+ 4 - 2
server/dao/dev_screens.go

@@ -3,6 +3,7 @@ package dao
 import (
 	"gorm.io/gorm"
 	"server/global"
+	"time"
 )
 
 type Screens struct {
@@ -13,6 +14,7 @@ type Screens struct {
 	IPAddress   string         `gorm:"type:varchar(40)" json:"ipAddress"`   //IP地址
 	Remark      string         `gorm:"type:varchar(60)" json:"Remark"`      //备注
 	IsDeleted   gorm.DeletedAt `gorm:"default:null" json:"isDeleted"`       //是否删除
+	OnTime      time.Time      `gorm:"default:null" json:"onTime"`          // 在线时间
 	Status      int            `gorm:"type:int;default:0" json:"status"`    //在线状态 0=离线,1=在线
 
 	Project Project `gorm:"foreignkey:ProjectId"`
@@ -96,7 +98,7 @@ func QueryScreensBySn(sn string) (screen Screens, err error) {
 	return
 }
 
-func UpdateScreensStatusBySn(sn string, status int) (err error) {
-	err = global.GVA_DB.Debug().Model(&Screens{}).Where("sn = ?", sn).Update("status", status).Error
+func UpdateScreensStatusBySn(sn, onTime string, status int) (err error) {
+	err = global.GVA_DB.Debug().Model(&Screens{}).Where("sn = ?", sn).Update("status", status).Update("on_time", onTime).Error
 	return
 }

+ 2 - 0
server/initialize/gorm.go

@@ -52,6 +52,8 @@ func RegisterTables() {
 		dao.Program{},
 		dao.SoundPeriod{},
 		dao.Event{},
+		dao.Camera{},
+		dao.CaptureVehicles{},
 	)
 	if err != nil {
 		global.GVA_LOG.Error("register table failed", zap.Error(err))

+ 3 - 4
server/initialize/timer.go

@@ -6,7 +6,6 @@ import (
 	"server/dao"
 	"server/service/devices"
 	"server/task"
-	"server/utils/protocol"
 	"time"
 
 	"server/global"
@@ -50,12 +49,12 @@ func IsOnline() {
 			for sn, device := range devices.DeviceOnlineTimes {
 				//符合条件
 				if time.Now().Add(-2 * time.Minute).After(*device) {
-					err := dao.UpdateScreensStatusBySn(sn, 0)
+					err := dao.UpdateScreensStatusBySn(sn, "", 0)
 					if err != nil {
 						global.GVA_LOG.Error(fmt.Sprintf("修改屏幕状态失败:%s", err.Error()))
 					}
-					topic := devices.MqttService.GetTopic(sn, protocol.TopicOffline)
-					_ = devices.MqttService.Publish(topic, sn)
+					//topic := devices.MqttService.GetTopic(sn, protocol.TopicOffline)
+					//_ = devices.MqttService.Publish(topic, sn)
 					delete(devices.DeviceOnlineTimes, sn)
 					global.GVA_LOG.Info(fmt.Sprintf("设备【sn】%v 离线了", sn))
 				}

+ 4 - 0
server/model/devices/common.go

@@ -131,3 +131,7 @@ type CameraEndianEventResponse struct {
 type SearchCamera struct {
 	request.PageInfo
 }
+
+type SearchCaptureVehicles struct {
+	request.PageInfo
+}

+ 21 - 0
server/router/devices/captureVehicles.go

@@ -0,0 +1,21 @@
+package devices
+
+import (
+	"github.com/gin-gonic/gin"
+	v1 "server/api/v1"
+)
+
+type CaptureVehiclesRouter struct {
+}
+
+func (cvr *CaptureVehiclesRouter) InitCaptureVehiclesRouter(Router *gin.RouterGroup, PubRouter *gin.RouterGroup) {
+	captureVehiclesRouter := Router.Group("captureVehicles")
+	//captureVehiclesPubRouter := PubRouter.Group("captureVehicles")
+	CaptureVehiclesApi := v1.ApiGroupApp.DevicesApiGroup.CaptureVehiclesApi
+	{
+	}
+
+	{
+		captureVehiclesRouter.POST("queryCaptureVehiclesList", CaptureVehiclesApi.QueryCaptureVehiclesList)
+	}
+}

+ 16 - 0
server/service/devices/captureVehicles.go

@@ -0,0 +1,16 @@
+package devices
+
+import (
+	"server/dao"
+	"server/model/devices"
+)
+
+type CaptureVehiclesService struct {
+}
+
+func (cvs *CaptureVehiclesService) QueryCaptureVehiclesList(info devices.SearchCaptureVehicles) (interface{}, int64, error) {
+	limit := info.PageSize
+	offset := info.PageSize * (info.Page - 1)
+
+	return dao.QueryCaptureVehiclesList(limit, offset)
+}

+ 1 - 0
server/service/devices/enter.go

@@ -6,4 +6,5 @@ type ServiceGroup struct {
 	SoundPeriodService
 	VoiceService
 	CameraService
+	CaptureVehiclesService
 }

+ 4 - 1
server/service/devices/mqtt.go

@@ -103,7 +103,7 @@ func (o *MqttHandler) Handler() interface{} {
 			}
 		case protocol.TopicChanStatus: //修改屏幕状态
 			status, _ := strconv.Atoi(m.PayloadString())
-			err := dao.UpdateScreensStatusBySn(sn, status)
+			err := dao.UpdateScreensStatusBySn(sn, time.Now().Format("2006-1-2 15:04:05"), status)
 			if err != nil {
 				global.GVA_LOG.Error(fmt.Sprintf("修改屏幕状态失败:%s", err.Error()))
 			}
@@ -117,6 +117,9 @@ func (o *MqttHandler) Handler() interface{} {
 			parsedTime, _ := time.Parse(layout, cleanTimeStr)
 			//fmt.Println("转换时间:", parsedTime)
 			DeviceOnlineTimes[sn] = &parsedTime
+
+			dao.UpdateScreensStatusBySn(sn, parsedTime.Format("2006-1-2 15:04:05"), 1)
+
 		}
 
 	}

+ 1 - 1
server/service/tcp/deviceMgr.go

@@ -68,7 +68,7 @@ func (s *Device) Process() {
 				s.Info = screen
 				s.IsLogin = true
 				Devices[data[20:44]] = s
-				_ = dao.UpdateScreensStatusBySn(s.Info.Sn, 1)
+				_ = dao.UpdateScreensStatusBySn(s.Info.Sn, time.Now().Format("2006-1-2 15:04:05"), 1)
 			} //更新上次发送心跳时间
 			Devices[data[20:44]].Conn = s.Conn
 			global.GVA_LOG.Info("设备心跳", zap.String("ScreensName", s.Info.ScreensName))

+ 1 - 1
server/utils/cache/device_redis.go

@@ -18,7 +18,7 @@ func init() {
 
 const (
 	//设备在线状态
-	DeviceStateKey = "dev_state_%s"
+	DeviceStateKey = "dev_camera_state_%s"
 )
 
 func CacheDeviceInfoKey(sn string) string {

+ 1 - 1
server/utils/protocol/protocol.go

@@ -6,5 +6,5 @@ const (
 	TopicLowSpeed   = "lowSpeed"   //低速时
 	TopicSetControl = "setControl" //云台下发控制
 	TopicReportTime = "reportTime" //上报在线时间
-	TopicOffline    = "Offline"    //上报线时间
+	TopicOffline    = "Offline"    //上报线时间
 )