From 5bf9f5cc0ad2689de4e34d628d8ac3168df5142a Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 23 八月 2024 17:41:41 +0800
Subject: [PATCH] 修复编译bug
---
service/nvcs.go | 208 +++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 196 insertions(+), 12 deletions(-)
diff --git a/service/nvcs.go b/service/nvcs.go
index 7882db5..d5b1f41 100644
--- a/service/nvcs.go
+++ b/service/nvcs.go
@@ -6,11 +6,16 @@
"fmt"
"io/ioutil"
"net"
+ "net/http"
+ "strings"
+ "time"
"gat1400Exchange/config"
"gat1400Exchange/models"
"gat1400Exchange/pkg/logger"
+ "gat1400Exchange/util"
+ "github.com/gin-gonic/gin"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
)
@@ -30,12 +35,18 @@
Alarm []interface{} `json:"Alarm"` // You might want to define a specific type for alarms
}
-type ElevatorData struct {
+type A1ElevatorData struct {
Elevator []Elevator `json:"Elevator"`
}
+const (
+ RunStop = iota
+ RunUp
+ RunDown
+)
+
// 瀵规帴缃戠粶瑙嗛瀛楃鍙犲姞鍣�,鎺ユ敹udp鍙戦�佺殑妤煎眰淇℃伅, 鏇存柊device鍦板潃
-func NVCSServer() {
+func NVCSA1UDPServer() {
// 鎸囧畾鐩戝惉鐨勭鍙�
port := config.ServeConf.Port
@@ -73,16 +84,41 @@
reader := transform.NewReader(bytes.NewReader(buffer[:numBytes]), decoder)
decodedBytes, err := ioutil.ReadAll(reader)
- var data ElevatorData
- // Unmarshal JSON into the struct
+ var data A1ElevatorData
err = json.Unmarshal(decodedBytes, &data)
if err != nil {
logger.Warn("ElevatorData unmarshal error:%s", err.Error())
continue
}
+ logger.Debug("Received %d bytes from %s, %+v", numBytes, clientAddr, data)
if len(data.Elevator) == 0 {
continue
+ }
+
+ var runState string
+ var iRunSate int
+
+ // 璁板綍鐢垫杩愯鐘舵��
+ iRunSate = data.Elevator[0].Status.RunDir
+ if config.NVCSConf.RunState {
+ if data.Elevator[0].Status.RunDir == RunUp {
+ runState = "涓�"
+ } else if data.Elevator[0].Status.RunDir == RunDown {
+ runState = "涓�"
+ }
+ }
+
+ if !config.NVCSConf.RunState {
+ runState = ""
+ }
+
+ // 璁剧疆osd 鏍煎紡 "1F涓� 鍥� 鏋�"
+ if config.NVCSConf.OSD != "" {
+ floorText := fmt.Sprintf("%s%s %s", data.Elevator[0].Status.FloorName, runState, config.NVCSConf.OSD)
+
+ // 璋冪敤hik api 灏嗘枃瀛楁坊鍔犲埌osd鐨勫乏涓嬭
+ AddFloorToOSD(floorText)
}
if data.Elevator[0].Status.RunDir > 0 {
@@ -90,19 +126,167 @@
}
elevator := data.Elevator[0]
- var d = models.Device{
- Id: elevator.Name,
- Pos: elevator.Status.FloorName,
- Ip: elevator.IP,
+
+ // 绋嬪簭閮ㄧ讲鍦ㄨ澶囩, 瀛楃鍙犲姞鍣ㄤ笂鎶ョ殑鍚嶇О鍏佽涓虹┖. 鍦ㄤ簯绔�, 鍚嶇О蹇呴』涓庢憚鍍忔満鐩稿悓
+ if elevator.Name == "" {
+ elevator.Name = "1"
}
- err = d.Upsert()
+ var d = models.Positions{
+ DeviceId: elevator.Name,
+ Pos: elevator.Status.FloorName,
+ RunDir: iRunSate,
+ CreateTime: time.Now().Unix(),
+ TimeString: time.Now().Format("2006-01-02 15:04:05"),
+ }
+
+ err = d.Save()
if err != nil {
- logger.Warn("Device db update error:%s", err.Error())
+ logger.Warn("Device position update error:%s", err.Error())
+ }
+ }
+}
+
+/*
+A2 娆� 鏁版嵁涓婃姤鏍煎紡
+
+ {
+ "id": "10c8a1b0051607361c",
+ "State": {
+ "Floor": "-1",
+ "Floor_flag": "宸叉牎鍑�",
+ "JZ_flag": "宸叉牎鍑�,",
+ "JZ_i": 7,
+ "Pressure": "99766",
+ "Speed": "0.000",
+ "Status": "鍋滄顒�1",
+ "TFloor": 7,
+ "T_acc": "0.062",
+ "X_acc": "1.175",
+ "Y_acc": "-1.129",
+ "Z_acc": "8.344"
+ }
+*/
+type A2ElevatorData struct {
+ Id string `json:"id"`
+ State struct {
+ Floor string `json:"Floor"`
+ Status string `json:"Status"`
+ TFloor int64 `json:"TFloor"`
+ Speed string `json:"Speed"`
+ } `json:"State"`
+}
+
+type A2ElevatorConfig struct {
+ FloorData []string `json:"floordata"`
+}
+
+var A2TopFloor string
+var A2BottomFloor string
+
+func GetA2ElevatorConfig() {
+ url := "http://192.168.10.253/cgi-bin/liftnum.cgi"
+ payload := []byte("{\"display\":1}")
+ header := map[string]string{
+ "Cookie": "eyJuYW1lIjoiYWRtaW4iLCAicGFzZCI6ImFkbWluMTIzIn0=",
+ }
+
+ rsp, err := util.HttpPost(url, header, payload)
+ if err != nil {
+ logger.Warn("Get A2 floor data failure,%s", err.Error())
+ return
+ }
+
+ var configData A2ElevatorConfig
+ err = json.Unmarshal(rsp, &configData)
+ if err != nil {
+ logger.Warn("Unmarshal A2 floor data failure,%s", err.Error())
+ return
+ }
+
+ if len(configData.FloorData) > 0 {
+ A2BottomFloor, A2TopFloor = configData.FloorData[0], configData.FloorData[len(configData.FloorData)-1]
+ }
+
+ logger.Info("A2 floor config total:%d, bottomFloor:%s, topFloor:%s", len(configData.FloorData), A2BottomFloor, A2TopFloor)
+}
+
+func NVCSA2WebServer() {
+ // 鍏堣幏鍙栨�绘ゼ灞傛暟, 璁板綍鏈�楂樺眰
+ //GetA2ElevatorConfig()
+
+ r := gin.Default()
+
+ r.POST("/", func(c *gin.Context) {
+ var req A2ElevatorData
+ var runState string
+ var iRunState int
+
+ err := c.BindJSON(&req)
+ if err != nil {
+ c.JSON(http.StatusBadRequest, nil)
+ return
}
- deviceAliveCache.Add(elevator.Name, true)
+ logger.Debug("Received A2 report data %+v", req)
- logger.Debug("Received %d bytes from %s, %+v", numBytes, clientAddr, data)
+ // 璁板綍鐢垫杩愯鐘舵��
+ if strings.Contains(req.State.Status, "涓�") {
+ runState = "涓�"
+ iRunState = RunUp
+ } else if strings.Contains(req.State.Status, "涓�") {
+ runState = "涓�"
+ iRunState = RunDown
+ }
+
+ //// 宸插埌鏈�涓嬪眰
+ //if req.State.Floor == A2BottomFloor {
+ // runState = "涓�"
+ // iRunState = RunUp
+ //}
+ //if req.State.Floor == A2TopFloor {
+ // runState = "涓�"
+ // iRunState = RunDown
+ //}
+
+ if !config.NVCSConf.RunState {
+ runState = ""
+ }
+
+ if config.NVCSConf.OSD != "" {
+ floorText := fmt.Sprintf("%s%s %s", req.State.Floor, runState, config.NVCSConf.OSD)
+
+ // 璋冪敤hik api 灏嗘枃瀛楁坊鍔犲埌osd鐨勫乏涓嬭
+ AddFloorToOSD(floorText)
+ }
+
+ var d = models.Positions{
+ DeviceId: req.Id,
+ Pos: req.State.Floor,
+ RunDir: iRunState,
+ CreateTime: time.Now().Unix(),
+ TimeString: time.Now().Format("2006-01-02 15:04:05"),
+ }
+
+ err = d.Save()
+ if err != nil {
+ logger.Warn("Device position update error:%s", err.Error())
+ }
+
+ c.JSON(http.StatusOK, "ok")
+ })
+
+ err := r.Run(fmt.Sprintf(":%s", config.NVCSConf.Port))
+ if err != nil {
+ logger.Warn("Start NVCS WebServer error, %s", err.Error())
+ }
+}
+
+func StartNVCSServer() {
+ if config.NVCSConf.Model == "A1" {
+ go NVCSA1UDPServer()
+ }
+ if config.NVCSConf.Model == "A2" {
+ go NVCSA2WebServer()
}
}
--
Gitblit v1.8.0