Browse Source

保存文件数据丢失bug

xu 1 week ago
parent
commit
518ee15473
13 changed files with 1156 additions and 185 deletions
  1. 34 0
      api/device.go
  2. BIN
      build/jx_ld_server
  3. 37 3
      initialize/myData.go
  4. 1 0
      logs/app.log
  5. 10 0
      logs/app.log.20250317.log
  6. 616 0
      logs/app.log.20250319.log
  7. 1 0
      modbus/instruction.go
  8. 2 0
      router/router.go
  9. 33 0
      service/device.go
  10. 30 178
      static/data.json
  11. 385 0
      static/device.json
  12. 6 3
      utils/myTool.go
  13. 1 1
      work/MyJob.go

+ 34 - 0
api/device.go

@@ -36,6 +36,40 @@ func SaveDevice(c *gin.Context) {
 	model.Ok(c)
 }
 
+func DeviceSave(c *gin.Context) {
+	var device dao.Device
+	err := c.ShouldBindJSON(&device)
+	if err != nil {
+		logger.Get().Error(err.Error())
+		model.FailWithMessage(err.Error(), c)
+		return
+	}
+	err = service.DeviceSave(device)
+	if err != nil {
+		logger.Get().Error(err.Error())
+		model.FailWithMessage(err.Error(), c)
+		return
+	}
+	model.Ok(c)
+}
+
+func DevicesSave(c *gin.Context) {
+	var devices []dao.Device
+	err := c.ShouldBindJSON(&devices)
+	if err != nil {
+		logger.Get().Error(err.Error())
+		model.FailWithMessage(err.Error(), c)
+		return
+	}
+	err = service.DevicesSave(devices)
+	if err != nil {
+		logger.Get().Error(err.Error())
+		model.FailWithMessage(err.Error(), c)
+		return
+	}
+	model.Ok(c)
+}
+
 // DeviceLoopSwitch 指定设备回路进行开关灯操作
 func DeviceLoopSwitch(c *gin.Context) {
 	var deviceLoop dao.DeviceLoop

BIN
build/jx_ld_server


+ 37 - 3
initialize/myData.go

@@ -181,21 +181,55 @@ func parseData(data *model.QueueData) {
 		return
 	}
 	toString := hex.EncodeToString(data.Value)
+	logger.Get().Infof("deviceId: %s, value: %s", data.Id, toString)
 	switch toString[0:2] {
 	case "fe":
-		switch toString[4:8] { // 开关灯
-		case "0000", "0001", "0002", "0003", "0004", "0005", "0006", "0007":
+		switch toString[2:8] { // 开关灯
+		case "050000", "050001", "050002", "050003", "050004", "050005", "050006", "050007":
+			relyId, _ := strconv.Atoi(toString[7:8])
+			logger.Get().Error(dev.DeviceLoops[relyId])
 			if toString[8:12] == "0000" {
+				dev.DeviceLoops[relyId].State = 0
+			} else if toString[8:12] == "ff00" {
+				dev.DeviceLoops[relyId].State = 1
+			}
+			for i, device := range reg.Devices {
+				if device.Sn == data.Id {
+					reg.Devices[i] = dev
+				}
+			}
+			regions, err := utils.SaveRegionOnData(reg)
+			err = service.SaveData(regions)
+			if err != nil {
+				logger.Get().Errorln("设备回路状态" + err.Error())
+				return
+			}
+		case "0f0000":
+
+			OperationCommand := hex.EncodeToString(modbus.OperationCommand)
+			logger.Get().Infof("deviceId: %s, value: %s", data.Id, OperationCommand)
+			if OperationCommand[14:16] == "00" {
 				for i, loop := range dev.DeviceLoops {
 					loop.State = 0
 					dev.DeviceLoops[i] = loop
 				}
-			} else if toString[8:12] == "ff00" {
+			} else if OperationCommand[14:16] == "ff" {
 				for i, loop := range dev.DeviceLoops {
 					loop.State = 1
 					dev.DeviceLoops[i] = loop
 				}
 			}
+			for i, device := range reg.Devices {
+				if device.Sn == data.Id {
+					reg.Devices[i] = dev
+				}
+			}
+			regions, err := utils.SaveRegionOnData(reg)
+			err = service.SaveData(regions)
+			if err != nil {
+				logger.Get().Errorln("设备回路状态" + err.Error())
+				return
+			}
 		}
 		switch toString[2:6] {
 		case "0101":

+ 1 - 0
logs/app.log

@@ -0,0 +1 @@
+app.log.20250319.log

+ 10 - 0
logs/app.log.20250317.log

@@ -0,0 +1,10 @@
+{"level":"info","msg":"Application started.","time":"2025-03-17T10:14:26+08:00"}
+{"level":"info","msg":"\u0026{0xc0000a1188 {\u003cnil\u003e 0 {false 0 0 0} 0}}","time":"2025-03-17T10:14:26+08:00"}
+{"level":"info","msg":"inductanceTCP启动成功","time":"2025-03-17T10:14:26+08:00"}
+{"level":"info","msg":"进入StartInductanceTCP","time":"2025-03-17T10:14:26+08:00"}
+{"level":"info","msg":"进入InductanceTCP循环","time":"2025-03-17T10:14:26+08:00"}
+{"level":"info","msg":"Application started.","time":"2025-03-17T10:14:45+08:00"}
+{"level":"info","msg":"\u0026{0xc00009f188 {\u003cnil\u003e 0 {false 0 0 0} 0}}","time":"2025-03-17T10:14:45+08:00"}
+{"level":"info","msg":"inductanceTCP启动成功","time":"2025-03-17T10:14:45+08:00"}
+{"level":"info","msg":"进入StartInductanceTCP","time":"2025-03-17T10:14:45+08:00"}
+{"level":"info","msg":"进入InductanceTCP循环","time":"2025-03-17T10:14:45+08:00"}

File diff suppressed because it is too large
+ 616 - 0
logs/app.log.20250319.log


+ 1 - 0
modbus/instruction.go

@@ -5,6 +5,7 @@ import "server/utils"
 var (
 	ReadDeviceId           = []byte{0xFE, 0x04, 0x03, 0xEE, 0x00, 0x08, 0x85, 0xB2} //读设备id
 	ReadDeviceIdAndDOAndDI = []byte{0xFE, 0x04, 0x03, 0xE8, 0x00, 0x14, 0x64, 0x7A} //读设备id、do、di
+	OperationCommand       []byte
 )
 
 func DeviceLoopSwitch(loop int, state int) (data []byte) {

+ 2 - 0
router/router.go

@@ -15,6 +15,8 @@ func InitRouter() *gin.Engine {
 	{
 		Group.GET("get", api.LoadData)
 		Group.POST("saveDevice", api.SaveDevice)
+		Group.POST("deviceSave", api.DeviceSave)
+		Group.POST("devicesSave", api.DevicesSave)
 		Group.POST("deviceLoopSwitch", api.DeviceLoopSwitch)
 		Group.POST("deviceSwitch", api.DeviceSwitch)
 		Group.POST("deviceBatchSwitch", api.BatchDeviceSwitch)

+ 33 - 0
service/device.go

@@ -22,6 +22,37 @@ func SaveData(data []dao.Region) error {
 	return nil // Return nil to indicate success
 }
 
+func DeviceSave(device dao.Device) error {
+	regions, _ := utils.LoadData()
+
+	for i, region := range regions {
+		for j, d := range region.Devices {
+			if device.Sn == d.Sn {
+				regions[i].Devices[j] = device
+			}
+		}
+	}
+	logger.Get().Error(regions)
+	err := SaveData(regions)
+	if err != nil {
+		return err
+	}
+	// Remove the redundant return err statement.
+	return nil // Return nil to indicate success
+}
+
+func DevicesSave(device []dao.Device) error {
+	regions, _ := utils.LoadData()
+
+	regions[0].Devices = device
+	err := SaveData(regions)
+	if err != nil {
+		return err
+	}
+	// Remove the redundant return err statement.
+	return nil // Return nil to indicate success
+}
+
 func DeviceLoopSwitch(deviceLoop dao.DeviceLoop) error {
 	data := modbus.DeviceLoopSwitch(deviceLoop.ID, deviceLoop.State)
 	if conn1, ok := model.ConnectionMap1.Load(deviceLoop.DeviceId); ok {
@@ -48,6 +79,7 @@ func DeviceSwitch(req model.DeviceRequest) error {
 	if conn1, ok := model.ConnectionMap1.Load(req.Device.Sn); ok {
 		// 成功找到连接
 		netConn := conn1.(net.Conn)
+		modbus.OperationCommand = data
 		err := utils.WriteDevice(data, netConn)
 		if err != nil {
 			logger.Get().Errorf("Write device error: %v\n", err)
@@ -66,6 +98,7 @@ func DeviceBatchSwitch(req model.DevicesRequest) error {
 			continue
 		}
 		data := modbus.DeviceSwitch(device.LoopNumber, req.State)
+		modbus.OperationCommand = data
 		if conn1, ok := model.ConnectionMap1.Load(device.Sn); ok {
 			// 成功找到连接
 			netConn := conn1.(net.Conn)

+ 30 - 178
static/data.json

@@ -1,25 +1,4 @@
 [
-  {
-    "id": 6,
-    "name": "搅拌站至三岔路口",
-    "subRegion": null,
-    "devices": [],
-    "version": 136
-  },
-  {
-    "id": 7,
-    "name": "垃圾堆体道路",
-    "subRegion": null,
-    "devices": [],
-    "version": 136
-  },
-  {
-    "id": 8,
-    "name": "污水进场道路",
-    "subRegion": null,
-    "devices": [],
-    "version": 136
-  },
   {
     "id": 1,
     "name": "生活区",
@@ -34,15 +13,15 @@
         "state": 1,
         "isSun": true,
         "loopNumber": 8,
-        "onlineTime": "2025-03-19T13:40:00.0099855+08:00",
+        "onlineTime": "2025-03-19T16:30:00.0076204+08:00",
         "deviceLoops": [
           {
             "id": 1,
             "deviceId": "JM36xWRZq6PiwmKV",
             "name": "回路12",
             "state": 0,
-            "timeCondition1OnTime": "00:50",
-            "timeCondition1OffTime": "08:50",
+            "timeCondition1OnTime": "16:00",
+            "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
           },
@@ -51,8 +30,8 @@
             "deviceId": "JM36xWRZq6PiwmKV",
             "name": "回路2",
             "state": 0,
-            "timeCondition1OnTime": "00:50",
-            "timeCondition1OffTime": "08:50",
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
           },
@@ -61,8 +40,8 @@
             "deviceId": "JM36xWRZq6PiwmKV",
             "name": "回路3",
             "state": 0,
-            "timeCondition1OnTime": "00:50",
-            "timeCondition1OffTime": "08:50",
+            "timeCondition1OnTime": "16:00",
+            "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
           },
@@ -71,8 +50,8 @@
             "deviceId": "JM36xWRZq6PiwmKV",
             "name": "回路4",
             "state": 0,
-            "timeCondition1OnTime": "00:50",
-            "timeCondition1OffTime": "08:50",
+            "timeCondition1OnTime": "16:00",
+            "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
           },
@@ -81,8 +60,8 @@
             "deviceId": "JM36xWRZq6PiwmKV",
             "name": "回路5",
             "state": 0,
-            "timeCondition1OnTime": "00:50",
-            "timeCondition1OffTime": "08:50",
+            "timeCondition1OnTime": "16:00",
+            "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
           },
@@ -91,8 +70,8 @@
             "deviceId": "JM36xWRZq6PiwmKV",
             "name": "回路6",
             "state": 0,
-            "timeCondition1OnTime": "00:50",
-            "timeCondition1OffTime": "08:50",
+            "timeCondition1OnTime": "16:00",
+            "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
           },
@@ -101,8 +80,8 @@
             "deviceId": "JM36xWRZq6PiwmKV",
             "name": "回路7",
             "state": 0,
-            "timeCondition1OnTime": "00:50",
-            "timeCondition1OffTime": "08:50",
+            "timeCondition1OnTime": "16:00",
+            "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
           },
@@ -111,8 +90,8 @@
             "deviceId": "JM36xWRZq6PiwmKV",
             "name": "回路8",
             "state": 0,
-            "timeCondition1OnTime": "00:50",
-            "timeCondition1OffTime": "08:50",
+            "timeCondition1OnTime": "16:00",
+            "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
           }
@@ -140,7 +119,7 @@
             "deviceId": "JM453Sa4a8pdYdgV",
             "name": "回路1",
             "state": 0,
-            "timeCondition1OnTime": "关闭",
+            "timeCondition1OnTime": "16:00",
             "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
@@ -150,7 +129,7 @@
             "deviceId": "JM453Sa4a8pdYdgV",
             "name": "回路2",
             "state": 0,
-            "timeCondition1OnTime": "关闭",
+            "timeCondition1OnTime": "16:00",
             "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
@@ -160,7 +139,7 @@
             "deviceId": "JM453Sa4a8pdYdgV",
             "name": "回路3",
             "state": 0,
-            "timeCondition1OnTime": "关闭",
+            "timeCondition1OnTime": "16:00",
             "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
@@ -170,7 +149,7 @@
             "deviceId": "JM453Sa4a8pdYdgV",
             "name": "回路4",
             "state": 0,
-            "timeCondition1OnTime": "关闭",
+            "timeCondition1OnTime": "16:00",
             "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
@@ -199,7 +178,7 @@
             "deviceId": "JM45U0zGDCMhgrxc",
             "name": "回路1",
             "state": 0,
-            "timeCondition1OnTime": "关闭",
+            "timeCondition1OnTime": "16:00",
             "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
@@ -209,7 +188,7 @@
             "deviceId": "JM45U0zGDCMhgrxc",
             "name": "回路2",
             "state": 0,
-            "timeCondition1OnTime": "关闭",
+            "timeCondition1OnTime": "16:00",
             "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
@@ -219,7 +198,7 @@
             "deviceId": "JM45U0zGDCMhgrxc",
             "name": "回路3",
             "state": 0,
-            "timeCondition1OnTime": "关闭",
+            "timeCondition1OnTime": "16:00",
             "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
@@ -229,7 +208,7 @@
             "deviceId": "JM45U0zGDCMhgrxc",
             "name": "回路4",
             "state": 0,
-            "timeCondition1OnTime": "关闭",
+            "timeCondition1OnTime": "16:00",
             "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
@@ -258,7 +237,7 @@
             "deviceId": "JM45S67eqnSKueAK",
             "name": "回路1",
             "state": 0,
-            "timeCondition1OnTime": "关闭",
+            "timeCondition1OnTime": "16:00",
             "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
@@ -268,7 +247,7 @@
             "deviceId": "JM45S67eqnSKueAK",
             "name": "回路2",
             "state": 0,
-            "timeCondition1OnTime": "关闭",
+            "timeCondition1OnTime": "16:00",
             "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
@@ -278,7 +257,7 @@
             "deviceId": "JM45S67eqnSKueAK",
             "name": "回路3",
             "state": 0,
-            "timeCondition1OnTime": "关闭",
+            "timeCondition1OnTime": "16:00",
             "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
@@ -288,106 +267,7 @@
             "deviceId": "JM45S67eqnSKueAK",
             "name": "回路4",
             "state": 0,
-            "timeCondition1OnTime": "关闭",
-            "timeCondition1OffTime": "关闭",
-            "timeCondition2OnTime": "关闭",
-            "timeCondition2OffTime": "关闭"
-          }
-        ],
-        "sun": {
-          "deviceId": "",
-          "batteryVoltage": 0,
-          "batteryCurrent": 0,
-          "batteryPlateVoltage": 0
-        }
-      },
-      {
-        "id": 5,
-        "sn": "JM36g0RM0ivegAGK",
-        "regionId": 1,
-        "name": "入厂道路",
-        "genre": "八回路控制",
-        "state": 0,
-        "isSun": false,
-        "loopNumber": 8,
-        "onlineTime": "2025-01-19T09:46:00.039018537+08:00",
-        "deviceLoops": [
-          {
-            "id": 1,
-            "deviceId": "JM36g0RM0ivegAGK",
-            "name": "回路1",
-            "state": 0,
-            "timeCondition1OnTime": "关闭",
-            "timeCondition1OffTime": "关闭",
-            "timeCondition2OnTime": "关闭",
-            "timeCondition2OffTime": "关闭"
-          },
-          {
-            "id": 2,
-            "deviceId": "JM36g0RM0ivegAGK",
-            "name": "回路2",
-            "state": 0,
-            "timeCondition1OnTime": "关闭",
-            "timeCondition1OffTime": "关闭",
-            "timeCondition2OnTime": "关闭",
-            "timeCondition2OffTime": "关闭"
-          },
-          {
-            "id": 3,
-            "deviceId": "JM36g0RM0ivegAGK",
-            "name": "回路3",
-            "state": 0,
-            "timeCondition1OnTime": "关闭",
-            "timeCondition1OffTime": "关闭",
-            "timeCondition2OnTime": "关闭",
-            "timeCondition2OffTime": "关闭"
-          },
-          {
-            "id": 4,
-            "deviceId": "JM36g0RM0ivegAGK",
-            "name": "回路4",
-            "state": 0,
-            "timeCondition1OnTime": "关闭",
-            "timeCondition1OffTime": "关闭",
-            "timeCondition2OnTime": "关闭",
-            "timeCondition2OffTime": "关闭"
-          },
-          {
-            "id": 5,
-            "deviceId": "JM36g0RM0ivegAGK",
-            "name": "回路5",
-            "state": 0,
-            "timeCondition1OnTime": "关闭",
-            "timeCondition1OffTime": "关闭",
-            "timeCondition2OnTime": "关闭",
-            "timeCondition2OffTime": "关闭"
-          },
-          {
-            "id": 6,
-            "deviceId": "JM36g0RM0ivegAGK",
-            "name": "回路6",
-            "state": 0,
-            "timeCondition1OnTime": "关闭",
-            "timeCondition1OffTime": "关闭",
-            "timeCondition2OnTime": "关闭",
-            "timeCondition2OffTime": "关闭"
-          },
-          {
-            "id": 7,
-            "deviceId": "JM36g0RM0ivegAGK",
-            "name": "回路7",
-            "state": 0,
-            "timeCondition1OnTime": "关闭",
-            "timeCondition1OffTime": "关闭",
-            "timeCondition2OnTime": "关闭",
-            "timeCondition2OffTime": "关闭"
-          },
-          {
-            "id": 8,
-            "deviceId": "JM36g0RM0ivegAGK",
-            "name": "回路8",
-            "state": 0,
-            "timeCondition1OnTime": "关闭",
+            "timeCondition1OnTime": "16:00",
             "timeCondition1OffTime": "关闭",
             "timeCondition2OnTime": "关闭",
             "timeCondition2OffTime": "关闭"
@@ -401,34 +281,6 @@
         }
       }
     ],
-    "version": 136
-  },
-  {
-    "id": 2,
-    "name": "股份公司进场上坡",
-    "subRegion": null,
-    "devices": [],
-    "version": 136
-  },
-  {
-    "id": 3,
-    "name": "地磅房至污泥厂门口",
-    "subRegion": null,
-    "devices": [],
-    "version": 136
-  },
-  {
-    "id": 4,
-    "name": "三角花园至油库",
-    "subRegion": null,
-    "devices": [],
-    "version": 136
-  },
-  {
-    "id": 5,
-    "name": "地磅房至搅拌站",
-    "subRegion": null,
-    "devices": [],
-    "version": 136
+    "version": 571
   }
 ]

+ 385 - 0
static/device.json

@@ -0,0 +1,385 @@
+[
+  {
+    "id": 1,
+    "name": "生活区",
+    "subRegion": null,
+    "devices": [
+      {
+        "id": 1,
+        "sn": "JM36xWRZq6PiwmKV",
+        "regionId": 1,
+        "name": "维修车间",
+        "genre": "八回路控制",
+        "state": 1,
+        "isSun": true,
+        "loopNumber": 8,
+        "onlineTime": "2025-03-19T15:46:00.0082465+08:00",
+        "deviceLoops": [
+          {
+            "id": 1,
+            "deviceId": "JM36xWRZq6PiwmKV",
+            "name": "回路1",
+            "state": 0,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 2,
+            "deviceId": "JM36xWRZq6PiwmKV",
+            "name": "回路2",
+            "state": 0,
+            "timeCondition1OnTime": "14:00",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 3,
+            "deviceId": "JM36xWRZq6PiwmKV",
+            "name": "回路3",
+            "state": 0,
+            "timeCondition1OnTime": "14:00",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 4,
+            "deviceId": "JM36xWRZq6PiwmKV",
+            "name": "回路4",
+            "state": 0,
+            "timeCondition1OnTime": "14:00",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 5,
+            "deviceId": "JM36xWRZq6PiwmKV",
+            "name": "回路5",
+            "state": 0,
+            "timeCondition1OnTime": "14:00",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 6,
+            "deviceId": "JM36xWRZq6PiwmKV",
+            "name": "回路6",
+            "state": 0,
+            "timeCondition1OnTime": "14:00",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 7,
+            "deviceId": "JM36xWRZq6PiwmKV",
+            "name": "回路7",
+            "state": 0,
+            "timeCondition1OnTime": "14:00",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 8,
+            "deviceId": "JM36xWRZq6PiwmKV",
+            "name": "回路8",
+            "state": 0,
+            "timeCondition1OnTime": "14:00",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          }
+        ],
+        "sun": {
+          "deviceId": "JM36xWRZq6PiwmKV",
+          "batteryVoltage": 0,
+          "batteryCurrent": 0,
+          "batteryPlateVoltage": 0
+        }
+      },
+      {
+        "id": 3,
+        "sn": "JM453Sa4a8pdYdgV",
+        "regionId": 1,
+        "name": "洗车房",
+        "genre": "四回路控制",
+        "state": 0,
+        "isSun": false,
+        "loopNumber": 4,
+        "onlineTime": "2025-01-19T09:46:00.028035846+08:00",
+        "deviceLoops": [
+          {
+            "id": 1,
+            "deviceId": "JM453Sa4a8pdYdgV",
+            "name": "回路1",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 2,
+            "deviceId": "JM453Sa4a8pdYdgV",
+            "name": "回路2",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 3,
+            "deviceId": "JM453Sa4a8pdYdgV",
+            "name": "回路3",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 4,
+            "deviceId": "JM453Sa4a8pdYdgV",
+            "name": "回路4",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          }
+        ],
+        "sun": {
+          "deviceId": "",
+          "batteryVoltage": 0,
+          "batteryCurrent": 0,
+          "batteryPlateVoltage": 0
+        }
+      },
+      {
+        "id": 2,
+        "sn": "JM45U0zGDCMhgrxc",
+        "regionId": 1,
+        "name": "污泥厂大配电房",
+        "genre": "四回路控制",
+        "state": 0,
+        "isSun": false,
+        "loopNumber": 4,
+        "onlineTime": "2025-01-19T09:46:00.027293637+08:00",
+        "deviceLoops": [
+          {
+            "id": 1,
+            "deviceId": "JM45U0zGDCMhgrxc",
+            "name": "回路1",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 2,
+            "deviceId": "JM45U0zGDCMhgrxc",
+            "name": "回路2",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 3,
+            "deviceId": "JM45U0zGDCMhgrxc",
+            "name": "回路3",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 4,
+            "deviceId": "JM45U0zGDCMhgrxc",
+            "name": "回路4",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          }
+        ],
+        "sun": {
+          "deviceId": "",
+          "batteryVoltage": 0,
+          "batteryCurrent": 0,
+          "batteryPlateVoltage": 0
+        }
+      },
+      {
+        "id": 4,
+        "sn": "JM45S67eqnSKueAK",
+        "regionId": 1,
+        "name": "生活区",
+        "genre": "四回路控制",
+        "state": 0,
+        "isSun": false,
+        "loopNumber": 4,
+        "onlineTime": "2025-01-19T09:44:00.051568026+08:00",
+        "deviceLoops": [
+          {
+            "id": 1,
+            "deviceId": "JM45S67eqnSKueAK",
+            "name": "回路1",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 2,
+            "deviceId": "JM45S67eqnSKueAK",
+            "name": "回路2",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 3,
+            "deviceId": "JM45S67eqnSKueAK",
+            "name": "回路3",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 4,
+            "deviceId": "JM45S67eqnSKueAK",
+            "name": "回路4",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          }
+        ],
+        "sun": {
+          "deviceId": "",
+          "batteryVoltage": 0,
+          "batteryCurrent": 0,
+          "batteryPlateVoltage": 0
+        }
+      },
+      {
+        "id": 5,
+        "sn": "JM36g0RM0ivegAGK",
+        "regionId": 1,
+        "name": "入厂道路",
+        "genre": "八回路控制",
+        "state": 0,
+        "isSun": false,
+        "loopNumber": 8,
+        "onlineTime": "2025-01-19T09:46:00.039018537+08:00",
+        "deviceLoops": [
+          {
+            "id": 1,
+            "deviceId": "JM36g0RM0ivegAGK",
+            "name": "回路1",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 2,
+            "deviceId": "JM36g0RM0ivegAGK",
+            "name": "回路2",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 3,
+            "deviceId": "JM36g0RM0ivegAGK",
+            "name": "回路3",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 4,
+            "deviceId": "JM36g0RM0ivegAGK",
+            "name": "回路4",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 5,
+            "deviceId": "JM36g0RM0ivegAGK",
+            "name": "回路5",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 6,
+            "deviceId": "JM36g0RM0ivegAGK",
+            "name": "回路6",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 7,
+            "deviceId": "JM36g0RM0ivegAGK",
+            "name": "回路7",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          },
+          {
+            "id": 8,
+            "deviceId": "JM36g0RM0ivegAGK",
+            "name": "回路8",
+            "state": 1,
+            "timeCondition1OnTime": "关闭",
+            "timeCondition1OffTime": "关闭",
+            "timeCondition2OnTime": "关闭",
+            "timeCondition2OffTime": "关闭"
+          }
+        ],
+        "sun": {
+          "deviceId": "",
+          "batteryVoltage": 0,
+          "batteryCurrent": 0,
+          "batteryPlateVoltage": 0
+        }
+      }
+    ],
+    "version": 420
+  }
+]

+ 6 - 3
utils/myTool.go

@@ -115,8 +115,10 @@ func SaveData(path string, newData []dao.Region) error {
 
 	// 创建一个映射以便快速查找
 	regionMap := make(map[string]dao.Region)
+	orderSlice := make([]string, 0, len(currentRegions)) // 用于保存顺序的切片
 	for _, region := range currentRegions {
 		regionMap[region.Name] = region
+		orderSlice = append(orderSlice, region.Name)
 	}
 
 	// 遍历传入的新数据,进行版本控制检查
@@ -133,13 +135,14 @@ func SaveData(path string, newData []dao.Region) error {
 			// 如果区域不存在,则直接添加(假设这是新增的区域)
 			newRegion.Version = 1 // 新增区域的初始版本号设为1
 			regionMap[newRegion.Name] = newRegion
+			orderSlice = append(orderSlice, newRegion.Name) // 添加新区域到顺序切片
 		}
 	}
 
-	// 将 map 转换回 slice
+	// 将 map 按照 orderSlice 的顺序转换回 slice
 	updatedRegions := make([]dao.Region, 0, len(regionMap))
-	for _, region := range regionMap {
-		updatedRegions = append(updatedRegions, region)
+	for _, name := range orderSlice {
+		updatedRegions = append(updatedRegions, regionMap[name])
 	}
 
 	// 序列化数据

+ 1 - 1
work/MyJob.go

@@ -9,7 +9,7 @@ import (
 func MyJob() {
 	c := cron.New()
 
-	_ = c.AddFunc("0 */2 * * * ?", func() {
+	_ = c.AddFunc("0 * * * * ?", func() {
 		modbus.GetSunPowerInfo()
 		modbus.GetDeviceInfo()
 	})