diff --git a/README.md b/README.md
index 31da90f..de5558a 100644
--- a/README.md
+++ b/README.md
@@ -88,8 +88,7 @@ sudo ./startup.sh
- ✔ **`设备管理`** - _设备的管理,支持多协议接入,MQTT,TCP,UDP,COAP,Modbus,Opcua,S7,HL7等_
## 🛠 以后可能会有什么NB功能?
-- 开发中 **`3D组态(2024-Q1-Q2)`** - _3D组态场景编辑器_
-- 开发中 **`多时序数据库支持(2024-Q3)`** - _多时序数据库支持,规划除Tdengine外,适配Greptime,Timescaledb_
+- 开发中 **`3D组态(2024-Q1-Q3)`** - _3D组态场景编辑器_
- 开发中 **`报表设计器(2024-Q4)`** - _excel的低代码报表设计_
---
diff --git a/apps/device/api/device.go b/apps/device/api/device.go
index 72760d5..0f17eb8 100644
--- a/apps/device/api/device.go
+++ b/apps/device/api/device.go
@@ -11,6 +11,7 @@ import (
"pandax/kit/biz"
"pandax/kit/model"
"pandax/kit/restfulx"
+ "pandax/pkg/cache"
"pandax/pkg/global"
model2 "pandax/pkg/global/model"
"pandax/pkg/shadow"
@@ -208,7 +209,39 @@ func (p *DeviceApi) UpdateDevice(rc *restfulx.ReqCtx) {
func (p *DeviceApi) DeleteDevice(rc *restfulx.ReqCtx) {
id := restfulx.PathParam(rc, "id")
ids := strings.Split(id, ",")
- biz.ErrIsNil(p.DeviceApp.Delete(ids), "删除失败")
+
+ for _, id := range ids {
+ device, err := p.DeviceApp.FindOne(id)
+ if err != nil {
+ continue
+ }
+ err = p.DeviceApp.Delete([]string{id})
+ if err != nil {
+ continue
+ }
+ // 删除表
+ err = deleteDeviceTable(device.Name)
+ // 删除所有缓存
+ if device.DeviceType == global.GATEWAYS {
+ // 因为网关子设备没有Token,使用Name做的存储
+ cache.DelDeviceEtoken(device.Name)
+ } else {
+ cache.DelDeviceEtoken(device.Token)
+ }
+ }
+}
+
+// 删除Tdengine时序数据
+func deleteDeviceTable(device string) error {
+ err := global.TdDb.DropTable(device + "_" + entity.ATTRIBUTES_TSL)
+ if err != nil {
+ return err
+ }
+ err = global.TdDb.DropTable(device + "_" + entity.TELEMETRY_TSL)
+ if err != nil {
+ return err
+ }
+ return nil
}
func (p *DeviceApi) ScreenTwinData(rc *restfulx.ReqCtx) {
diff --git a/apps/device/api/product.go b/apps/device/api/product.go
index fbbb20d..6acde05 100644
--- a/apps/device/api/product.go
+++ b/apps/device/api/product.go
@@ -10,6 +10,7 @@ import (
"pandax/kit/biz"
"pandax/kit/model"
"pandax/kit/restfulx"
+ "pandax/pkg/cache"
"pandax/pkg/global"
model2 "pandax/pkg/global/model"
"strings"
@@ -147,10 +148,27 @@ func (p *ProductApi) DeleteProduct(rc *restfulx.ReqCtx) {
}
// 删除产品
err := p.ProductApp.Delete(ids)
- biz.ErrIsNil(err, "删除失败")
+ biz.ErrIsNil(err, "产品删除失败")
+ // 删除所有模型,固件
for _, id := range ids {
- // 删除所有模型,固件
+ // 删除超级表
+ deleteDeviceStable(id)
+ // 删除所有缓存
+ cache.DelProductRule(id)
+ // 删除绑定的属性及OTA记录
p.TemplateApp.Delete([]string{id})
p.OtaAPP.Delete([]string{id})
}
}
+
+func deleteDeviceStable(productId string) error {
+ err := global.TdDb.DropStable(productId + "_" + entity.ATTRIBUTES_TSL)
+ if err != nil {
+ return err
+ }
+ err = global.TdDb.DropStable(productId + "_" + entity.TELEMETRY_TSL)
+ if err != nil {
+ return err
+ }
+ return nil
+}
diff --git a/apps/device/services/device.go b/apps/device/services/device.go
index f9dbe4a..112d31c 100644
--- a/apps/device/services/device.go
+++ b/apps/device/services/device.go
@@ -193,20 +193,6 @@ func (m *deviceModelImpl) Delete(ids []string) error {
if err := global.Db.Table(m.table).Delete(&entity.Device{}, "id in (?)", ids).Error; err != nil {
return err
}
- for _, id := range ids {
- device, err := m.FindOne(id)
- if err != nil {
- continue
- }
- // 删除表
- err = deleteDeviceTable(device.Name)
- // 删除所有缓存
- if device.DeviceType == global.GATEWAYS {
- cache.DelDeviceEtoken(device.Name)
- } else {
- cache.DelDeviceEtoken(device.Token)
- }
- }
return nil
}
@@ -223,19 +209,6 @@ func createDeviceTable(productId, device string) error {
return nil
}
-// 删除Tdengine时序数据
-func deleteDeviceTable(device string) error {
- err := global.TdDb.DropTable(device + "_" + entity.ATTRIBUTES_TSL)
- if err != nil {
- return err
- }
- err = global.TdDb.DropTable(device + "_" + entity.TELEMETRY_TSL)
- if err != nil {
- return err
- }
- return nil
-}
-
func GetDeviceToken(data *entity.Device) *model.DeviceAuth {
now := time.Now()
etoken := &model.DeviceAuth{
diff --git a/apps/device/services/product.go b/apps/device/services/product.go
index c1d10d5..8f08c42 100644
--- a/apps/device/services/product.go
+++ b/apps/device/services/product.go
@@ -2,7 +2,6 @@ package services
import (
"pandax/apps/device/entity"
- "pandax/pkg/cache"
"pandax/pkg/global"
)
@@ -118,12 +117,6 @@ func (m *productModelImpl) Delete(ids []string) error {
if err := global.Db.Table(m.table).Delete(&entity.Product{}, "id in (?)", ids).Error; err != nil {
return err
}
- for _, id := range ids {
- // 删除超级表
- deleteDeviceStable(id)
- // 删除所有缓存
- cache.DelProductRule(id)
- }
return nil
}
@@ -139,18 +132,6 @@ func createDeviceStable(productId string) error {
return nil
}
-func deleteDeviceStable(productId string) error {
- err := global.TdDb.DropStable(productId + "_" + entity.ATTRIBUTES_TSL)
- if err != nil {
- return err
- }
- err = global.TdDb.DropStable(productId + "_" + entity.TELEMETRY_TSL)
- if err != nil {
- return err
- }
- return nil
-}
-
// 获取产品数量统计
func (m *productModelImpl) FindProductCount() (count entity.DeviceCount, err error) {
sql := `SELECT COUNT(*) AS total, (SELECT COUNT(*) FROM products WHERE DATE(create_time) = CURDATE()) AS today FROM products`