From 539a78196da60eb97cf7057c5c85dfaa9b240741 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 11 十月 2024 16:21:32 +0800
Subject: [PATCH] 添加A3平层传感器数据获取方式

---
 controller/systemCtl.go |  102 ++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 85 insertions(+), 17 deletions(-)

diff --git a/controller/systemCtl.go b/controller/systemCtl.go
index e0ec71b..6985d70 100644
--- a/controller/systemCtl.go
+++ b/controller/systemCtl.go
@@ -1,13 +1,13 @@
 package controller
 
 import (
-	"gat1400Exchange/models"
-	"gat1400Exchange/pkg/logger"
 	"net/http"
+	"sync"
 	"time"
 
 	"gat1400Exchange/config"
 	"gat1400Exchange/pkg/auth"
+	"gat1400Exchange/pkg/logger"
 	"gat1400Exchange/repository"
 	"gat1400Exchange/vo"
 
@@ -15,21 +15,32 @@
 )
 
 type SystemController struct {
-	Auth       *auth.DigestAuth
-	Repository repository.SystemRepository
+	Auth     *auth.DigestAuth
+	ApeRepo  repository.ApeRepository
+	DevCache *sync.Map // 缂撳瓨璁惧绫诲瀷, id涓簁ey, value涓� ape 閲囬泦璁惧, subPlatform 涓嬬骇, cascade涓婄骇
 }
 
 // 鏋勯�犲嚱鏁�
 func NewSystemController() SystemController {
-	svr := repository.NewSystemRepository()
-	controller := SystemController{Repository: svr}
+	svr := repository.NewApeRepository()
+	controller := SystemController{ApeRepo: svr}
 
-	controller.Auth = auth.NewDigestAuthenticator("Basic Realm", func(user, realm string) string {
-		// 闇�瑕佸湪杩欓噷瀹炵幇妫�鏌ョ敤鎴峰悕鍜屽瘑鐮佹槸鍚︽湁鏁堢殑閫昏緫, 鐩墠浣跨敤鍥哄畾瀵嗙爜
+	realm := "Basic Realm"
+	if config.ServeConf.Realm != "" {
+		realm = config.ServeConf.Realm
+	}
+
+	controller.Auth = auth.NewDigestAuthenticator(realm, func(user, realm string) string {
+		if user == config.ServeConf.Username {
+			return config.ServeConf.Password
+		}
+
 		return config.ServeConf.Password
 	})
 
 	controller.Auth.PlainTextSecrets = true
+	controller.DevCache = new(sync.Map)
+	controller.InitDeviceCache()
 
 	return controller
 }
@@ -43,12 +54,33 @@
 		return
 	}
 
+	var req vo.RequestRegister
+	if err := c.BindJSON(&req); err != nil {
+		c.AbortWithStatus(http.StatusBadRequest)
+		return
+	}
+
 	rspMsg := vo.ResponseStatus{
 		RequestURL:   c.FullPath(),
 		StatusCode:   vo.StatusSuccess,
 		StatusString: vo.StatusString[vo.StatusSuccess],
-		Id:           user,
+		Id:           req.RegisterObject.DeviceID,
 		LocalTime:    time.Now().Format("20060102150405"),
+	}
+
+	if user == config.ServeConf.Username || user == req.RegisterObject.DeviceID {
+		s.DevCache.Store(req.RegisterObject.DeviceID, 0)
+
+		if err := s.ApeRepo.Create(req.RegisterObject.DeviceID); err != nil {
+			logger.Warn("Create ape failure,%s", err.Error())
+			c.AbortWithStatus(http.StatusInternalServerError)
+			return
+		}
+	} else {
+		// 鏈紦瀛樼殑id, 鍙兘鏄柊娣诲姞鐨勪笂涓嬬骇, 鏇存柊缂撳瓨
+		if _, ok := s.DevCache.Load(req.RegisterObject.DeviceID); !ok {
+			s.InitDeviceCache()
+		}
 	}
 
 	c.JSON(http.StatusOK, gin.H{"ResponseStatusObject": rspMsg})
@@ -62,13 +94,8 @@
 		return
 	}
 
-	var d = models.Device{
-		Id: req.KeepaliveObject.DeviceID,
-	}
-
-	err := d.Upsert()
-	if err != nil {
-		logger.Warn("Device db update camera error:%s", err.Error())
+	if devType, ok := s.DevCache.Load(req.KeepaliveObject.DeviceID); ok {
+		s.ApeRepo.Keepalive(req.KeepaliveObject.DeviceID, devType.(int))
 	}
 
 	rspMsg := vo.ResponseStatus{
@@ -91,7 +118,6 @@
 	}
 
 	// 鍒犲簱
-
 	rspMsg := vo.ResponseStatus{
 		RequestURL:   c.FullPath(),
 		StatusCode:   vo.StatusSuccess,
@@ -105,6 +131,7 @@
 
 // 鏃堕棿鏍″噯
 func (s SystemController) Time(c *gin.Context) {
+	//iTime, _ := strconv.ParseInt(time.Now().Format("20060102150405"), 10, 64)
 	rspMsg := vo.ResponseSystemTime{
 		VIIDServerID: config.ServeConf.ID,
 		LocalTime:    time.Now().Format("20060102150405"),
@@ -112,3 +139,44 @@
 
 	c.JSON(http.StatusOK, gin.H{"SystemTimeObject": rspMsg})
 }
+
+// 璁惧鍒楄〃
+func (s SystemController) ApeList(c *gin.Context) {
+	apeList, err := s.ApeRepo.List()
+	if err != nil {
+		logger.Error(err.Error())
+	}
+
+	c.JSON(http.StatusOK, gin.H{"ApeList": apeList})
+}
+
+// 淇敼璁惧
+func (s SystemController) ApeUpdate(c *gin.Context) {
+	var req vo.Ape
+	if err := c.BindJSON(&req); err != nil {
+		c.JSON(http.StatusBadRequest, gin.H{"msg": err.Error()})
+		return
+	}
+
+	fromId := c.Param("from_id")
+	err := s.ApeRepo.Save(fromId, &req)
+	if err != nil {
+		c.JSON(http.StatusBadRequest, gin.H{"msg": err.Error()})
+		return
+	}
+
+	c.JSON(http.StatusOK, gin.H{"msg": "ok"})
+}
+
+func (s SystemController) InitDeviceCache() {
+	// 娓呯┖
+	s.DevCache.Range(func(key, value interface{}) bool {
+		s.DevCache.Delete(key)
+		return true
+	})
+
+	for k, v := range s.ApeRepo.CollectDeviceType() {
+		s.DevCache.Store(k, v)
+	}
+
+}

--
Gitblit v1.8.0