From d6831b733a4a97f2271c544c92ce33701634a97b Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 29 三月 2024 13:55:17 +0800
Subject: [PATCH] 修复楼层匹配
---
models/device.go | 16 +++++++++++++++-
repository/captureRepo.go | 16 +++++++++++++---
models/positions.go | 16 ++++++++++++++++
models/db.go | 2 +-
4 files changed, 45 insertions(+), 5 deletions(-)
diff --git a/models/db.go b/models/db.go
index 287e8b4..b0f9506 100644
--- a/models/db.go
+++ b/models/db.go
@@ -20,7 +20,7 @@
logger.Debug("db open error ", err)
return err
}
- _ = db.AutoMigrate(Device{})
+ _ = db.AutoMigrate(&Device{}, &Positions{})
// 娣诲姞榛樿鏁版嵁
InitData()
diff --git a/models/device.go b/models/device.go
index 473ff0f..854ae65 100644
--- a/models/device.go
+++ b/models/device.go
@@ -1,6 +1,9 @@
package models
-import "gorm.io/gorm"
+import (
+ "gorm.io/gorm"
+ "time"
+)
type Device struct {
Id string `gorm:"column:id;primary_key;" json:"id"`
@@ -37,6 +40,7 @@
if err == gorm.ErrRecordNotFound {
// 璁板綍涓嶅瓨鍦紝鍒涘缓鏂拌褰�
db.Create(&d)
+
} else {
// 鍏朵粬閿欒锛屼綘鍙互杩涜閫傚綋鐨勫鐞�
return err
@@ -53,5 +57,15 @@
db.Save(&existingDevice)
}
+ // 璁板綍浣嶇疆鐨勫巻鍙�, 缁欎汉鑴告姄鎷嶅尮閰嶆ゼ灞�
+ if existingDevice.Pos != "" {
+ var pos = Positions{
+ DeviceId: d.Id,
+ Pos: d.Pos,
+ CreateTime: time.Now().Unix(),
+ }
+
+ db.Create(&pos)
+ }
return nil
}
diff --git a/models/positions.go b/models/positions.go
new file mode 100644
index 0000000..db9a27a
--- /dev/null
+++ b/models/positions.go
@@ -0,0 +1,16 @@
+package models
+
+type Positions struct {
+ Id uint `gorm:"column:id;primary_key;auto_increment;unique;not null;"`
+ DeviceId string `gorm:"column:device_id;" json:"device_id"`
+ Pos string `gorm:"column:pos" json:"pos"`
+ CreateTime int64 `gorm:"column:create_time;autoCreateTime;"`
+}
+
+func (d *Positions) TableName() string {
+ return "positions"
+}
+
+func (d *Positions) FindDevicePosition(devId string, timestamp int64) error {
+ return db.Table(d.TableName()).Where(&d, "device_id = ? AND create_time < ?", devId, timestamp).Order("create_time desc").First(&d).Error
+}
diff --git a/repository/captureRepo.go b/repository/captureRepo.go
index 76a963d..1928a33 100644
--- a/repository/captureRepo.go
+++ b/repository/captureRepo.go
@@ -48,7 +48,7 @@
// 杞彂鍥惧儚
logger.Debug("鍑嗗杞彂,deviceId:%s, image len:%d, server:%s", deviceId, len(faceImageStr), config.ForwardConf.SyncServer)
if deviceId != "" && faceImageStr != "" && config.ForwardConf.SyncServer != "" {
- pd := c.PackPushData(deviceId, faceId, faceImageStr)
+ pd := c.PackPushData(deviceId, faceId, faceImageStr, face.FaceAppearTime)
if pd == nil {
return
}
@@ -65,7 +65,7 @@
return
}
-func (c CaptureRepository) PackPushData(deviceId, faceId, faceImage string) *vo.PushDataInfo {
+func (c CaptureRepository) PackPushData(deviceId, faceId, faceImage, appearTime string) *vo.PushDataInfo {
var pd = new(vo.PushDataInfo)
var device models.Device
@@ -73,6 +73,16 @@
logger.Warn("Can't find device in database, device:%s, %s", deviceId, err.Error())
return pd
}
+
+ // 鍖归厤妤煎眰
+ aTime, err := time.ParseInLocation("20060102150405", appearTime, time.Local)
+ if err != nil {
+ logger.Warn("Parse face appear time error,%s", err.Error())
+ aTime = time.Now()
+ }
+
+ var devPos models.Positions
+ _ := devPos.FindDevicePosition(deviceId, aTime.Unix())
imageBytes, err := base64.StdEncoding.DecodeString(faceImage)
if err != nil {
@@ -85,7 +95,7 @@
tr := vo.TaskResultInfo{
Id: uuid.NewV4().String(),
CameraId: deviceId,
- CameraAddr: device.Addr + device.Pos,
+ CameraAddr: device.Addr + devPos.Pos,
CameraName: device.Name,
PicMaxUrl: []string{""},
PicDate: time.Now().Format("2006-01-02 15:04:05"),
--
Gitblit v1.8.0