diff --git a/apps/device/api/device.go b/apps/device/api/device.go index 5b6335e..800f4e0 100644 --- a/apps/device/api/device.go +++ b/apps/device/api/device.go @@ -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{ diff --git a/pkg/shadow/shadow.go b/pkg/shadow/shadow.go index d46dce0..d6677e9 100644 --- a/pkg/shadow/shadow.go +++ b/pkg/shadow/shadow.go @@ -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 { diff --git a/pkg/tdengine/tdengine_table.go b/pkg/tdengine/tdengine_table.go index 3f8f08e..5084c76 100644 --- a/pkg/tdengine/tdengine_table.go +++ b/pkg/tdengine/tdengine_table.go @@ -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 }