mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-04-23 02:48:34 +08:00
@@ -1,11 +1,16 @@
|
||||
package api
|
||||
|
||||
// ==========================================================================
|
||||
// 生成日期:2023-06-30 09:19:43 +0800 CST
|
||||
// 生成路径: apps/device/api/devices.go
|
||||
// 生成人:panda
|
||||
// ==========================================================================
|
||||
import (
|
||||
"fmt"
|
||||
"pandax/apps/device/util"
|
||||
"github.com/PandaXGO/PandaKit/biz"
|
||||
"github.com/PandaXGO/PandaKit/model"
|
||||
"github.com/PandaXGO/PandaKit/restfulx"
|
||||
"pandax/kit/biz"
|
||||
"pandax/kit/model"
|
||||
"pandax/kit/restfulx"
|
||||
"pandax/pkg/global"
|
||||
model2 "pandax/pkg/global/model"
|
||||
"pandax/pkg/shadow"
|
||||
@@ -21,7 +26,6 @@ type DeviceApi struct {
|
||||
DeviceAlarmApp services.DeviceAlarmModel
|
||||
ProductApp services.ProductModel
|
||||
ProductTemplateApp services.ProductTemplateModel
|
||||
DeviceShadow shadow.DeviceShadow // 添加设备影子
|
||||
}
|
||||
|
||||
func (p *DeviceApi) GetDevicePanel(rc *restfulx.ReqCtx) {
|
||||
@@ -92,12 +96,13 @@ func (p *DeviceApi) GetDeviceStatus(rc *restfulx.ReqCtx) {
|
||||
biz.ErrIsNil(err, "查询设备模板失败")
|
||||
// 从设备影子中读取
|
||||
res := make([]entity.DeviceStatusVo, 0)
|
||||
getDevice := shadow.InitDeviceShadow(device.Name, device.Pid)
|
||||
rs := make(map[string]shadow.DevicePoint)
|
||||
if classify == global.TslAttributesType {
|
||||
rs, _ = p.DeviceShadow.GetDevicePoints(device.Name, global.TslAttributesType) // 使用GetDevicePoints()函数
|
||||
rs = getDevice.AttributesPoints
|
||||
}
|
||||
if classify == global.TslTelemetryType {
|
||||
rs, _ = p.DeviceShadow.GetDevicePoints(device.Name, global.TslTelemetryType) // 使用GetDevicePoints()函数
|
||||
rs = getDevice.TelemetryPoints
|
||||
}
|
||||
for _, tel := range *template {
|
||||
sdv := entity.DeviceStatusVo{
|
||||
|
||||
@@ -57,6 +57,18 @@ func init() {
|
||||
DeviceShadowInstance = shadow
|
||||
}
|
||||
|
||||
func InitDeviceShadow(deviceName, ProductId string) Device {
|
||||
device, err := DeviceShadowInstance.GetDevice(deviceName)
|
||||
if err == UnknownDeviceErr {
|
||||
attributes := make(map[string]DevicePoint)
|
||||
telemetry := make(map[string]DevicePoint)
|
||||
device = NewDevice(deviceName, ProductId, attributes, telemetry)
|
||||
DeviceShadowInstance.AddDevice(device)
|
||||
//shadow.DeviceShadowInstance.SetDeviceTTL()
|
||||
}
|
||||
return device
|
||||
}
|
||||
|
||||
func (d *deviceShadow) AddDevice(device Device) (err error) {
|
||||
if _, ok := d.m.Load(device.Name); ok {
|
||||
return DeviceRepeatErr
|
||||
@@ -78,7 +90,6 @@ func (d *deviceShadow) GetDevice(deviceName string) (device Device, err error) {
|
||||
return Device{}, UnknownDeviceErr
|
||||
}
|
||||
}
|
||||
|
||||
func (d *deviceShadow) SetDevicePoint(deviceName, pointType, pointName string, value interface{}) (err error) {
|
||||
deviceAny, ok := d.m.Load(deviceName)
|
||||
if !ok {
|
||||
|
||||
@@ -5,6 +5,8 @@ import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/kakuilan/kgo"
|
||||
)
|
||||
|
||||
// RunSql 运行
|
||||
@@ -20,19 +22,17 @@ func (s *TdEngine) InsertDevice(deviceKey string, data map[string]interface{}) e
|
||||
}
|
||||
|
||||
var (
|
||||
field []string
|
||||
value []interface{}
|
||||
placeholders []string
|
||||
field = []string{}
|
||||
value = []string{}
|
||||
)
|
||||
|
||||
for k, v := range data {
|
||||
field = append(field, k)
|
||||
value = append(value, v)
|
||||
placeholders = append(placeholders, "?")
|
||||
value = append(value, "'"+kgo.KConv.ToStr(v)+"'")
|
||||
}
|
||||
|
||||
sql := fmt.Sprintf("INSERT INTO %s (%s) VALUES (%s)", strings.ToLower(deviceKey), strings.Join(field, ","), strings.Join(placeholders, ","))
|
||||
_, err := s.db.Exec(sql, value...)
|
||||
// 存在sql注入隐患,在之后的提交修复
|
||||
sql := "INSERT INTO ? (?) VALUES (?)"
|
||||
_, err := s.db.Exec(sql, strings.ToLower(deviceKey), strings.Join(field, ","), strings.Join(value, ","))
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user