Bladeren bron

开关数据 电感数据

xu 3 dagen geleden
bovenliggende
commit
0179362427

+ 1 - 1
server/config.yaml

@@ -172,7 +172,7 @@ qiniu:
 redis:
     addr: 127.0.0.1:6379
     password: ""
-    db: 0
+    db: 4
     useCluster: false
     clusterAddrs:
         - 172.21.0.3:7000

+ 25 - 23
server/dao/device.go

@@ -7,18 +7,20 @@ import (
 
 type Device struct {
 	global.GVA_MODEL
-	Sn           string        `json:"sn" gorm:"comment:设备sn"`
-	Name         string        `json:"name" gorm:"comment:名称"`
-	Address      string        `json:"address" gorm:"comment:设备地址"`
-	TaskTime     uint          `json:"taskTime" gorm:"comment:采集时间"`
-	WaitTime     uint          `json:"waitTime" gorm:"comment:延迟时间"`
-	RadarId      int8          `json:"radarId" gorm:"comment:雷达id"`
-	SerialId     int8          `json:"serialId" gorm:"comment:串口id"`
-	Genre        int           `json:"genre" gorm:"index;comment:类型id"`
-	DeviceGenre  DeviceGenre   `json:"deviceGenre" gorm:"foreignKey:Genre;"`
-	TunnelId     int           `json:"tunnelId" gorm:"column:tunnel_id"`
-	Tunnel       Tunnel        `json:"tunnel" gorm:"foreignKey:TunnelId"`
-	DeviceRelays []DeviceRelay `json:"deviceRelays" gorm:"foreignKey:DeviceId"`
+	Sn                string              `json:"sn" gorm:"comment:设备sn"`
+	Name              string              `json:"name" gorm:"comment:名称"`
+	State             bool                `json:"state" gorm:"comment:设备状态"`
+	Address           string              `json:"address" gorm:"comment:设备地址"`
+	TaskTime          uint                `json:"taskTime" gorm:"comment:采集时间"`
+	WaitTime          uint                `json:"waitTime" gorm:"comment:延迟时间"`
+	RadarId           int8                `json:"radarId" gorm:"comment:雷达id"`
+	SerialId          int8                `json:"serialId" gorm:"comment:串口id"`
+	Genre             int                 `json:"genre" gorm:"index;comment:类型id"`
+	DeviceGenre       DeviceGenre         `json:"deviceGenre" gorm:"foreignKey:Genre;"`
+	TunnelId          int                 `json:"tunnelId" gorm:"column:tunnel_id"`
+	Tunnel            Tunnel              `json:"tunnel" gorm:"foreignKey:TunnelId"`
+	DeviceRelays      []DeviceRelay       `json:"deviceRelays" gorm:"foreignKey:DeviceSn;references:Sn"`
+	InductanceDetails []InductanceDetails `json:"inductanceDetails" gorm:"foreignKey:DeviceSn;references:Sn"`
 }
 
 func (Device) TableName() string {
@@ -81,19 +83,19 @@ func (d Device) CreateDevice() error {
 		if err != nil {
 			return err
 		}
-		if d.Genre != 6 {
-			return nil
-		}
-		var deviceRelays []DeviceRelay
-		for i := 1; i <= 4; i++ {
-			relay := DeviceRelay{
-				RelayID:  i,
-				DeviceId: int(d.ID),
-				State:    false,
+		if d.Genre == 6 {
+			var deviceRelays []DeviceRelay
+			for i := 1; i <= 4; i++ {
+				relay := DeviceRelay{
+					RelayID:  i,
+					DeviceSn: d.Sn,
+					State:    false,
+				}
+				deviceRelays = append(deviceRelays, relay)
 			}
-			deviceRelays = append(deviceRelays, relay)
+			return tx.Create(&deviceRelays).Error
 		}
-		return tx.Create(&deviceRelays).Error
+		return nil
 	})
 }
 

+ 46 - 7
server/dao/device_relay.go

@@ -1,18 +1,57 @@
 package dao
 
-import "server/global"
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"server/global"
+)
 
 type DeviceRelay struct {
-	ID       int  `json:"id"`
-	RelayID  int  `json:"relayId" gorm:"comment:回路id"`
-	DeviceId int  `json:"deviceId" gorm:"comment:设备id"`
-	State    bool `json:"state" gorm:"comment:设备状态"`
+	ID       int    `json:"id"`
+	RelayID  int    `json:"relayId" gorm:"comment:回路id"`
+	DeviceSn string `json:"deviceSn" gorm:"comment:设备Sn"`
+	State    bool   `json:"state" gorm:"comment:设备状态"`
 }
 
 func (DeviceRelay) TableName() string {
 	return "device_relay"
 }
 
-func UpdateRelayState(deviceId, relayId int, state bool) error {
-	return global.GVA_DB.Model(&DeviceRelay{}).Debug().Where("device_id = ? AND relay_id = ?", deviceId, relayId).Update("state", state).Error
+func QueryRelayBySn(sn string) (deviceRelays []DeviceRelay, err error) {
+	err = global.GVA_DB.Model(&DeviceRelay{}).Where("device_sn = ?", sn).Find(&deviceRelays).Error
+	return
+}
+
+func UpdateRelayState(deviceSn string, relayId int, state bool) error {
+	return global.GVA_DB.Model(&DeviceRelay{}).Where("device_sn = ? AND relay_id = ?", deviceSn, relayId).Update("state", state).Error
+}
+
+func GetCacheRelayState(sn string) (deviceRelays []DeviceRelay, err error) {
+	if global.GVA_REDIS == nil {
+		return
+	}
+	result, err := global.GVA_REDIS.Get(context.Background(), "device_relays_"+sn).Result()
+	if err != nil {
+		return
+	}
+	err = json.Unmarshal([]byte(result), &deviceRelays)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// SaveCacheDeviceRelays 保存电感数据
+func SaveCacheDeviceRelays(sn string, deviceRelays []DeviceRelay) (err error) {
+	jsonData, err := json.Marshal(deviceRelays)
+	if err != nil {
+		fmt.Println("Error marshalling JSON:", err)
+		return
+	}
+	if global.GVA_REDIS == nil {
+		return
+	}
+	err = global.GVA_REDIS.Set(context.Background(), "device_relays_"+sn, jsonData, 0).Err()
+	return
 }

+ 57 - 0
server/dao/inductanceDetails.go

@@ -0,0 +1,57 @@
+package dao
+
+import "server/global"
+
+type InductanceDetails struct {
+	ID                 int     `json:"id" form:"id" gorm:"primarykey"`               // 主键ID
+	DeviceSn           string  `json:"deviceSn" form:"deviceSn" gorm:"comment:电感编码"` // 电感编码
+	VoltageA           int64   `json:"voltageA" form:"voltageA" gorm:"comment:电压A"`
+	VoltageB           int64   `json:"voltageB" form:"voltageB" gorm:"comment:电压B"`
+	VoltageC           int64   `json:"voltageC" form:"voltageC" gorm:"comment:电压C"`
+	CurrentA           float64 `json:"currentA" form:"currentA" gorm:"comment:电流A"`
+	CurrentB           float64 `json:"currentB" form:"currentB" gorm:"comment:电流B"`
+	CurrentC           float64 `json:"currentC" form:"currentC" gorm:"comment:电流C"`
+	ActivePowerA       int     `json:"activePowerA" form:"activePowerA" gorm:"comment:有功功率A"`
+	ActivePowerB       int     `json:"activePowerB" form:"activePowerB" gorm:"comment:有功功率B"`
+	ActivePowerC       int     `json:"activePowerC" form:"activePowerC" gorm:"comment:有功功率C"`
+	TotalActivePower   int     `json:"totalActivePower" form:"totalActivePower" gorm:"comment:总有功功率"`
+	ApparentPowerA     int     `json:"apparentPowerA" form:"apparentPowerA" gorm:"comment:视在功率A"`
+	ApparentPowerB     int     `json:"apparentPowerB" form:"apparentPowerB" gorm:"comment:视在功率B"`
+	ApparentPowerC     int     `json:"apparentPowerC" form:"apparentPowerC" gorm:"comment:视在功率C"`
+	TotalApparentPower int     `json:"totalApparentPower" form:"totalApparentPower" gorm:"comment:总视在功率"`
+	PowerFactorA       float64 `json:"powerFactorA" form:"powerFactorA" gorm:"comment:功率因数A"`
+	PowerFactorB       float64 `json:"powerFactorB" form:"powerFactorB" gorm:"comment:功率因数B"`
+	PowerFactorC       float64 `json:"powerFactorC" form:"powerFactorC" gorm:"comment:功率因数C"`
+	TotalPowerFactor   float64 `json:"totalPowerFactor" form:"totalPowerFactor" gorm:"comment:总功率因数"`
+	UploadTime         string  `json:"uploadTime" form:"uploadTime" gorm:"comment:上传时间"`
+}
+
+func (InductanceDetails) TableName() string {
+	return "inductance_details"
+}
+
+func (id InductanceDetails) CreateInductanceDetails() error {
+	return global.GVA_DB.Create(&id).Error
+}
+
+func QueryInductanceDetailsByCode(inductanceCode string) (inductanceDetails []InductanceDetails, err error) {
+	err = global.GVA_DB.Model(&InductanceDetails{}).Where("device_sn =?", inductanceCode).Scan(&inductanceDetails).Error
+	return
+}
+
+// QueryInductanceDetailsList 查询电感详情列表
+func QueryInductanceDetailsList(limit, offset int, code string) (list []InductanceDetails, total int64, err error) {
+	db := global.GVA_DB.Model(&InductanceDetails{}).Where("device_sn", code).Order("upload_time DESC")
+	err = db.Count(&total).Error
+	if err != nil {
+		return
+	}
+	err = db.Limit(limit).Offset(offset).Find(&list).Error
+
+	return list, total, err
+}
+
+// TimingDeleteInductanceDetails 定时删除电感详情
+func TimingDeleteInductanceDetails() error {
+	return global.GVA_DB.Unscoped().Delete(&InductanceDetails{}, "upload_time < DATE_SUB(NOW(), INTERVAL 5 DAY)").Error
+}

+ 8 - 0
server/dao/tunnel.go

@@ -95,6 +95,14 @@ func UpdateTunnelLamp(id, lamp1, lamp2 int) error {
 	return global.GVA_DB.Model(&Tunnel{}).Where("id =?", id).Update("lamp_value1", lamp1).Update("lamp_value2", lamp2).Error
 }
 
+func UpdateTunnelLamp1(sn string, lamp int) error {
+	return global.GVA_DB.Model(&Tunnel{}).Where("tunnel_sn =?", sn).Update("lamp_value1", lamp).Error
+}
+
+func UpdateTunnelLamp2(sn string, lamp int) error {
+	return global.GVA_DB.Model(&Tunnel{}).Where("tunnel_sn =?", sn).Update("lamp_value2", lamp).Error
+}
+
 func UpdateTactics(sn string, tactics int) error {
 	return global.GVA_DB.Model(&Tunnel{}).Where("tunnel_sn =?", sn).Update("tactics", tactics).Error
 }

+ 1 - 0
server/initialize/gorm.go

@@ -54,6 +54,7 @@ func RegisterTables() {
 		dao.DeviceRelay{},
 		dao.EnvData{},
 		dao.OpticalData{},
+		dao.InductanceDetails{},
 	)
 	if err != nil {
 		global.GVA_LOG.Error("register table failed", zap.Error(err))

+ 17 - 0
server/model/common/mqttData.go

@@ -0,0 +1,17 @@
+package common
+
+type SwitchData struct {
+	Sn     string `json:"sn"`
+	Way    int    `json:"way"`
+	TurnOf int    `json:"turnOf"`
+}
+
+type LampData struct {
+	Way        int `json:"way"`
+	BrightNess int `json:"brightNess"`
+}
+
+type InductanceData struct {
+	Sn         string `json:"sn"`
+	TotalPower int    `json:"totalPower"`
+}

+ 4 - 3
server/service/admin/device.go

@@ -15,9 +15,10 @@ func (ds *DeviceService) QueryAllDevices() ([]dao.Device, error) {
 	return dao.QueryAllDevices()
 }
 
-func (ds *DeviceService) QueryDeviceList(info request.DeviceSearch) ([]dao.Device, int64, error) {
+func (ds *DeviceService) QueryDeviceList(info request.DeviceSearch) (devices []dao.Device, total int64, err error) {
 	limit := info.PageInfo.PageSize
 	offset := info.PageInfo.PageSize * (info.PageInfo.Page - 1)
+
 	return dao.QueryDeviceList(info.Sn, info.Name, info.Genre, limit, offset)
 }
 
@@ -60,7 +61,7 @@ func (ds *DeviceService) DeviceSwitch(info request.SwitchTunnel) error {
 	if err != nil {
 		return err
 	}
-	err = dao.UpdateRelayState(int(device.ID), info.RelayId, info.State)
+	err = dao.UpdateRelayState(device.Sn, info.RelayId, info.State)
 	if err != nil {
 		return err
 	}
@@ -89,7 +90,7 @@ func (ds *DeviceService) CreateDevice(device dao.Device) error {
 	}
 
 	if genre.Name == tunnel.SwitchType && genre.Type == "开关设备" {
-		return fmt.Errorf("开关设备需安隧道需求添加")
+		return fmt.Errorf("开关设备需安隧道需求添加")
 	}
 
 	return device.CreateDevice()

+ 35 - 0
server/service/admin/mqtt.go

@@ -7,6 +7,7 @@ import (
 	"regexp"
 	"runtime"
 	"server/dao"
+	"server/model/common"
 	"server/utils/logger"
 	"server/utils/mqtt"
 	"server/utils/protocol"
@@ -116,6 +117,40 @@ func (o *MqttHandler) Handler() interface{} {
 				logger.Get().Errorf("sn:%s device:%s 新增光感信息失败: %v", sn, data.Sn, err)
 				continue
 			}
+		case protocol.TopicGatherDataDG:
+			var data common.InductanceData
+			if err := json.Unmarshal(m.Payload(), &data); err != nil {
+				logger.Get().Errorf("Error unmarshalling JSON: %v", err)
+				continue
+			}
+			dao.InductanceDetails{
+				DeviceSn:         data.Sn,
+				TotalActivePower: data.TotalPower,
+				UploadTime:       time.Now().Format("2006-01-02 15:04:05"),
+			}.CreateInductanceDetails()
+		case protocol.TopicSwitchStates:
+			var data common.SwitchData
+			if err := json.Unmarshal(m.Payload(), &data); err != nil {
+				logger.Get().Errorf("Error unmarshalling JSON: %v", err)
+				continue
+			}
+			if data.TurnOf == 1 {
+				dao.UpdateRelayState(data.Sn, data.Way, true)
+			} else {
+				dao.UpdateRelayState(data.Sn, data.Way, false)
+			}
+
+		case protocol.TopicLampBrightNess:
+			var data common.LampData
+			if err := json.Unmarshal(m.Payload(), &data); err != nil {
+				logger.Get().Errorf("Error unmarshalling JSON: %v", err)
+				continue
+			}
+			if data.Way == 1 {
+				dao.UpdateTunnelLamp1(sn, data.BrightNess)
+			} else {
+				dao.UpdateTunnelLamp2(sn, data.BrightNess)
+			}
 		}
 
 	}

+ 9 - 6
server/utils/protocol/protocol.go

@@ -1,10 +1,13 @@
 package protocol
 
 const (
-	TopicGatherDataEnv = "gatherDataEnv"
-	TopicGatherDataOpt = "gatherDataOpt"
-	TopicLampControl   = "lampControl"
-	TopicSwitchControl = "switchControl"
-	TopicTunnelTactics = "tunnelTactics"
-	TopicTunnelTiming  = "tunnelTiming"
+	TopicGatherDataEnv  = "gatherDataEnv"
+	TopicGatherDataOpt  = "gatherDataOpt"
+	TopicGatherDataDG   = "gatherDataDG"
+	TopicSwitchStates   = "switchStates"
+	TopicLampBrightNess = "lampBrightNess"
+	TopicLampControl    = "lampControl"
+	TopicSwitchControl  = "switchControl"
+	TopicTunnelTactics  = "tunnelTactics"
+	TopicTunnelTiming   = "tunnelTiming"
 )

+ 4 - 4
web/src/view/admin/device/device.vue

@@ -336,7 +336,7 @@
           prop="taskTime"
         >
           <el-input
-            v-model="device.taskTime"
+            v-model.number="device.taskTime"
             style="width: 200px;"
           />
         </el-form-item>
@@ -346,7 +346,7 @@
           prop="waitTime"
         >
           <el-input
-            v-model="device.waitTime"
+            v-model.number="device.waitTime"
             style="width: 200px;"
           />
         </el-form-item>
@@ -463,7 +463,7 @@
           prop="taskTime"
         >
           <el-input
-            v-model="device.taskTime"
+            v-model.number="device.taskTime"
             style="width: 200px;"
           />
         </el-form-item>
@@ -473,7 +473,7 @@
           prop="waitTime"
         >
           <el-input
-            v-model="device.waitTime"
+            v-model.number="device.waitTime"
             style="width: 200px;"
           />
         </el-form-item>

+ 12 - 7
web/src/view/admin/tunnel/tunnel.vue

@@ -72,9 +72,13 @@
           align="center"
         />
         <el-table-column
-            prop="switchType"
-            label="开关类型"
-            align="center"
+          prop="switchType"
+          label="开关类型"
+          align="center"
+        />
+        <el-table-column
+          label="策略"
+          align="center"
         >
           <template #default="scope">
             <el-select
@@ -98,9 +102,9 @@
         >
           <template #default="scope">
             <el-button
-                type="primary"
-                size="small"
-                @click="jumpScreen"
+              type="primary"
+              size="small"
+              @click="jumpScreen"
             >
               大屏
             </el-button>
@@ -127,6 +131,7 @@
             </el-button>
             <el-button
               type="success"
+              size="small"
               @click="tunnelDataPanel(scope.row)"
             >
               数据面板
@@ -419,7 +424,7 @@
     <!--    数据面板-->
     <el-drawer
       v-model="isDataPanel"
-      title="控制面板"
+      title="数据面板"
       direction="rtl"
       size="80%"
     >