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