Ai
43 Star 529 Fork 161

联犀/物联网iot模块

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
deviceManage.go 4.31 KB
一键复制 编辑 原始数据 按行查看 历史
杨磊 提交于 2025-08-01 19:32 +08:00 . feat: 支持时序数据存储策略
package schemaDataRepo
import (
"context"
"fmt"
"gitee.com/unitedrhino/share/stores"
"gitee.com/unitedrhino/things/service/dmsvr/internal/repo/tsDB"
"gitee.com/unitedrhino/things/service/dmsvr/internal/repo/tsDB/tdengine"
"gitee.com/unitedrhino/things/share/devices"
"gitee.com/unitedrhino/things/share/domain/schema"
"strings"
)
func (d *DeviceDataRepo) InitDevice(ctx context.Context,
t *schema.Model,
productID string,
deviceName string) error {
//不使用了
//err := d.createPropertyTable(ctx, t.Property, productID, deviceName)
//if err != nil {
// logx.WithContext(ctx).Errorf(
// "%s.createPropertyTable productID:%v,deviceName:%v,err:%v,properties:%v",
// utils.FuncName(), productID, deviceName, utils.Fmt(t.Property), err)
// return err
//}
//
//sql := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s USING %s TAGS ('%s','%s');",
// d.GetEventTableName(productID, deviceName), d.GetEventStableName(), productID, deviceName)
//if _, err := d.t.ExecContext(ctx, sql); err != nil {
// logx.WithContext(ctx).Errorf(
// "%s.EventTable productID:%v,deviceName:%v,err:%v",
// utils.FuncName(), productID, deviceName, err)
// return err
//}
return nil
}
func (d *DeviceDataRepo) DeleteDevice(
ctx context.Context,
t *schema.Model,
productID string,
deviceName string) error {
tableList := d.GetTableNameList(t, productID, deviceName)
var sqls []string
for _, v := range tableList {
sqls = append(sqls, fmt.Sprintf(" if exists %s ", v))
}
sql := fmt.Sprintf("DROP TABLE %s", strings.Join(sqls, ","))
if _, err := d.t.ExecContext(ctx, sql); err != nil {
return err
}
err := d.DeleteDeviceProperty(ctx, productID, deviceName, nil)
if err != nil {
return err
}
_, err = d.kv.DelCtx(ctx, tsDB.GenRedisPropertyLastKey(productID, deviceName), tsDB.GenRedisPropertyFirstKey(productID, deviceName))
return err
}
func GetArrayID(id string, num int) string {
return fmt.Sprintf("%s_%d", id, num)
}
func (d *DeviceDataRepo) createPropertyTable(
ctx context.Context, p schema.PropertyMap, productID string, deviceName string) error {
//不使用了
//for _, v := range p {
// if v.Define.Type == schema.DataTypeArray {
// for i := 0; i < cast.ToInt(v.Define.Max); i++ {
// sql := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s USING %s TAGS('%s','%s',%d,'%s');",
// d.GetPropertyTableName(productID, deviceName, GetArrayID(v.Identifier, i)),
// d.GetPropertyStableName(v, productID, v.Identifier), productID, deviceName, i, v.Define.ArrayInfo.Type)
// if _, err := d.t.ExecContext(ctx, sql); err != nil {
// return err
// }
// }
// } else {
// sql := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s USING %s TAGS('%s','%s','%s');",
// d.GetPropertyTableName(productID, deviceName, v.Identifier),
// d.GetPropertyStableName(v, productID, v.Identifier), productID, deviceName, v.Define.Type)
// if _, err := d.t.ExecContext(ctx, sql); err != nil {
// return err
// }
// }
//
//}
return nil
}
func (d *DeviceDataRepo) DeleteDeviceProperty(ctx context.Context, productID string, deviceName string, s []schema.Property) error {
var sqls []string
if len(s) > 0 {
for _, v := range s {
sqls = append(sqls, fmt.Sprintf(" if exists %s ", d.GetPropertyTableName(productID, deviceName, v.Identifier)))
}
} else { //删除设备的所有表
for _, tbName := range DeviceStables {
rows, err := d.t.QueryContext(ctx, fmt.Sprintf("select distinct tbname from %s where product_id='%s' and device_name='%s';",
tbName, productID, deviceName))
if err != nil {
return err
}
var datas []map[string]any
err = stores.Scan(rows, &datas)
if err != nil {
return err
}
for _, v := range datas {
sqls = append(sqls, fmt.Sprintf(" if exists `%s` ", v["tbname"]))
}
}
}
if len(sqls) > 0 {
sql := fmt.Sprintf("DROP TABLE %s", strings.Join(sqls, ","))
if _, err := d.t.ExecContext(ctx, sql); err != nil {
return err
}
}
_, err := d.kv.DelCtx(ctx, tsDB.GenRedisPropertyLastKey(productID, deviceName), tsDB.GenRedisPropertyFirstKey(productID, deviceName))
return err
}
func (d *DeviceDataRepo) UpdateDevice(ctx context.Context, dev devices.Core, t *schema.Model, affiliation devices.Affiliation) error {
var tables = d.GetTableNameList(t, dev.ProductID, dev.DeviceName)
err := tdengine.AlterTag(ctx, d.t, tables, tdengine.AffiliationToMap(affiliation, d.groupConfigs))
return err
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/unitedrhino/things.git
git@gitee.com:unitedrhino/things.git
unitedrhino
things
物联网iot模块
v1.5.18

搜索帮助