diff --git a/Code/backend/internal/api/camera.go b/Code/backend/internal/api/camera.go index dfb28ef..ec9b522 100644 --- a/Code/backend/internal/api/camera.go +++ b/Code/backend/internal/api/camera.go @@ -6,7 +6,6 @@ import ( "go_backend/internal/dbs" "go_backend/internal/model" "go_backend/internal/utils" - "time" ) type CameraVO struct { @@ -19,9 +18,9 @@ type CameraVO struct { Type string `json:"type"` IPAddress string `json:"ip_address"` IsDeleted bool `json:"is_deleted"` - CreateTime time.Time `json:"create_time"` - DeletedTime time.Time `json:"deleted_time"` - UpdateTime time.Time `json:"update_time"` + CreateTime string `json:"create_time"` + DeletedTime string `json:"deleted_time"` + UpdateTime string `json:"update_time"` ChildVO []*CameraVO `json:"child"` } @@ -95,16 +94,14 @@ func CreateNode(router *gin.RouterGroup) { c.JSON(400, gin.H{"error": err.Error()}) return } - println("nihao", req.ParentID) newNode := model.Camera{ ParentCategoryID: int32(req.ParentID), DisplayName: req.DisplayName, IPAddress: req.Ip, } db := dbs.GetGormDB() - result := db.Create(&newNode) - - Success(c, result) + db.Create(&newNode) + Success(c, "success") }) } diff --git a/Code/backend/internal/api/personDetectionRecord.go b/Code/backend/internal/api/personDetectionRecord.go index 0d85ffd..69ecb0a 100644 --- a/Code/backend/internal/api/personDetectionRecord.go +++ b/Code/backend/internal/api/personDetectionRecord.go @@ -28,6 +28,9 @@ type detectionReturnParam struct { DetectionRecord []DetectionVO `json:"detectionRecord"` } +// Camera2AddressMap 记录cameraid:address的Map +var Camera2AddressMap = map[int]string{} + func GetDetectionRecord(router *gin.RouterGroup) { router.GET("/detection/List", func(c *gin.Context) { limit, _ := strconv.Atoi(c.Query("limit")) @@ -41,8 +44,9 @@ func GetDetectionRecord(router *gin.RouterGroup) { // 根据每条记录搜索对应的摄像头 for _, record := range detectionRecords { var cameras []model.Camera + cameraId, _ := strconv.Atoi(record.CameraID) result := db.Model(model.Camera{}). - Where("camera_id = ?", record.CameraID). + Where("camera_id = ?", cameraId). Find(&cameras) if result.Error != nil { fmt.Println(result.Error) @@ -51,7 +55,14 @@ func GetDetectionRecord(router *gin.RouterGroup) { if len(cameras) > 1 { fmt.Println("对应摄像头id ", record.CameraID, " 超过一个") } - address := mergeAddress(cameras[0], db) + // 查看缓存Map中有无对应address,有的话直接读取 + var address string + if _, exists := Camera2AddressMap[cameraId]; exists { + address = Camera2AddressMap[cameraId] + } else { + address = mergeAddress(cameras[0], db) + Camera2AddressMap[cameraId] = address + } detectionVOS = append(detectionVOS, transToDetectionVO(record, address)) } diff --git a/Code/backend/internal/api/trajectoryRecord.go b/Code/backend/internal/api/trajectoryRecord.go index 4e65239..969f9d2 100644 --- a/Code/backend/internal/api/trajectoryRecord.go +++ b/Code/backend/internal/api/trajectoryRecord.go @@ -1,9 +1,13 @@ package api import ( + "encoding/json" + "fmt" "github.com/gin-gonic/gin" "go_backend/internal/dbs" "go_backend/internal/model" + "net/url" + "strconv" ) func GetTrajectoryRecordList(router *gin.RouterGroup) { @@ -17,14 +21,76 @@ func GetTrajectoryRecordList(router *gin.RouterGroup) { }) } +type TrajectoryVO struct { + Id string `json:"id"` + CameraArray []cameraNode `json:"cameraArray"` +} + +type cameraNode struct { + Ip string `json:"ip"` + Address string `json:"address"` + Lat string `json:"lat"` + Lng string `json:"lng"` + Time string `json:"time"` +} + func GetTargetTrajectory(router *gin.RouterGroup) { router.GET("/trajectory", func(c *gin.Context) { id := c.Query("id") var tra model.TrajectoryDetectionRecord db := dbs.GetGormDB() - db.Where("id = ? ", id). + db.Model(model.TrajectoryDetectionRecord{}). + Where("id = ? ", id). Find(&tra) - Success(c, tra) + var trajectoryVO TrajectoryVO + trajectoryVO.Id = id + + // 序列化摄像头的id数组 + var cameraIds []int + err := json.Unmarshal([]byte(tra.Trajectory), &cameraIds) + if err != nil { + fmt.Println("Error parsing JSON:", err) + return + } + // 序列化记录的id数组 + var recordIds []int + err = json.Unmarshal([]byte(tra.PersonDetectionRecordIds), &recordIds) + if err != nil { + fmt.Println("Error parsing JSON:", err) + return + } + for index, id := range cameraIds { + var camera model.Camera + db.Where("camera_id = ?", id). + Find(&camera) + var address string + cameraId, _ := strconv.Atoi(camera.CameraID) + // 从已读取过的address map读取,如果没有就重新获取 + if _, exists := Camera2AddressMap[cameraId]; exists { + address = Camera2AddressMap[cameraId] + } else { + address = mergeAddress(camera, db) + Camera2AddressMap[cameraId] = address + } + var record model.PersonDetectionRecord + db.Where("id = ?", recordIds[index]).Find(&record) + + parsedUrl, err := url.Parse(record.Address) + if err != nil { + fmt.Println("Error parsing URL:", err) + } + ip := parsedUrl.Path + + cameraNode := cameraNode{ + Ip: ip, + Address: address, + Lat: camera.Latitude, + Lng: camera.Longitude, + Time: record.DetectTime.Format("2006-01-02 15:04:05"), + } + trajectoryVO.CameraArray = append(trajectoryVO.CameraArray, cameraNode) + } + Success(c, trajectoryVO) }) } diff --git a/Code/backend/internal/model/cameras.gen.go b/Code/backend/internal/model/cameras.gen.go index 86325ac..a18a772 100644 --- a/Code/backend/internal/model/cameras.gen.go +++ b/Code/backend/internal/model/cameras.gen.go @@ -4,28 +4,24 @@ package model -import ( - "time" -) - const TableNameCamera = "cameras" // Camera mapped from table type Camera struct { - ID int32 `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"` - CameraID string `gorm:"column:camera_id;comment:摄像头的id" json:"camera_id"` // 摄像头的id - DisplayName string `gorm:"column:display_name;comment:展示使用的名字" json:"display_name"` // 展示使用的名字 - ParentCategoryID int32 `gorm:"column:parent_category_id;comment:上一级的类别" json:"parent_category_id"` // 上一级的类别 - ViewPriority int32 `gorm:"column:view_priority" json:"view_priority"` - Status string `gorm:"column:status;comment:摄像头目前状态" json:"status"` // 摄像头目前状态 - Type string `gorm:"column:type;comment:类别" json:"type"` // 类别 - IPAddress string `gorm:"column:ip_address;comment:ip地址" json:"ip_address"` // ip地址 - Latitude string `gorm:"column:latitude;comment:纬度" json:"latitude"` // 纬度 - Longitude string `gorm:"column:longitude;comment:经度" json:"longitude"` // 经度 - IsDeleted bool `gorm:"column:is_deleted" json:"is_deleted"` - CreateTime time.Time `gorm:"column:create_time" json:"create_time"` - DeletedTime time.Time `gorm:"column:deleted_time" json:"deleted_time"` - UpdateTime time.Time `gorm:"column:update_time" json:"update_time"` + ID int32 `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"` + CameraID string `gorm:"column:camera_id;comment:摄像头的id" json:"camera_id"` // 摄像头的id + DisplayName string `gorm:"column:display_name;comment:展示使用的名字" json:"display_name"` // 展示使用的名字 + ParentCategoryID int32 `gorm:"column:parent_category_id;comment:上一级的类别" json:"parent_category_id"` // 上一级的类别 + ViewPriority int32 `gorm:"column:view_priority" json:"view_priority"` + Status string `gorm:"column:status;comment:摄像头目前状态" json:"status"` // 摄像头目前状态 + Type string `gorm:"column:type;comment:类别" json:"type"` // 类别 + IPAddress string `gorm:"column:ip_address;comment:ip地址" json:"ip_address"` // ip地址 + Latitude string `gorm:"column:latitude;comment:纬度" json:"latitude"` // 纬度 + Longitude string `gorm:"column:longitude;comment:经度" json:"longitude"` // 经度 + IsDeleted bool `gorm:"column:is_deleted" json:"is_deleted"` + CreateTime string `gorm:"column:create_time" json:"create_time"` + DeletedTime string `gorm:"column:deleted_time" json:"deleted_time"` + UpdateTime string `gorm:"column:update_time" json:"update_time"` } // TableName Camera's table name diff --git a/Code/backend/internal/query/cameras.gen.go b/Code/backend/internal/query/cameras.gen.go index c00f849..077c309 100644 --- a/Code/backend/internal/query/cameras.gen.go +++ b/Code/backend/internal/query/cameras.gen.go @@ -38,9 +38,9 @@ func newCamera(db *gorm.DB, opts ...gen.DOOption) camera { _camera.Latitude = field.NewString(tableName, "latitude") _camera.Longitude = field.NewString(tableName, "longitude") _camera.IsDeleted = field.NewBool(tableName, "is_deleted") - _camera.CreateTime = field.NewTime(tableName, "create_time") - _camera.DeletedTime = field.NewTime(tableName, "deleted_time") - _camera.UpdateTime = field.NewTime(tableName, "update_time") + _camera.CreateTime = field.NewString(tableName, "create_time") + _camera.DeletedTime = field.NewString(tableName, "deleted_time") + _camera.UpdateTime = field.NewString(tableName, "update_time") _camera.fillFieldMap() @@ -62,9 +62,9 @@ type camera struct { Latitude field.String // 纬度 Longitude field.String // 经度 IsDeleted field.Bool - CreateTime field.Time - DeletedTime field.Time - UpdateTime field.Time + CreateTime field.String + DeletedTime field.String + UpdateTime field.String fieldMap map[string]field.Expr } @@ -92,9 +92,9 @@ func (c *camera) updateTableName(table string) *camera { c.Latitude = field.NewString(table, "latitude") c.Longitude = field.NewString(table, "longitude") c.IsDeleted = field.NewBool(table, "is_deleted") - c.CreateTime = field.NewTime(table, "create_time") - c.DeletedTime = field.NewTime(table, "deleted_time") - c.UpdateTime = field.NewTime(table, "update_time") + c.CreateTime = field.NewString(table, "create_time") + c.DeletedTime = field.NewString(table, "deleted_time") + c.UpdateTime = field.NewString(table, "update_time") c.fillFieldMap()