This commit is contained in:
PandaX
2024-03-15 15:22:35 +08:00
parent 7a25d49846
commit 00577ba627
5 changed files with 55 additions and 51 deletions

View File

@@ -88,8 +88,7 @@ sudo ./startup.sh
- <span class="tag done-tag">✔</span> **`设备管理`** - _设备的管理,支持多协议接入MQTT,TCP,UDP,COAP,Modbus,Opcua,S7,HL7等_
## 🛠 以后可能会有什么NB功能
- <span class="tag wip-tag">开发中</span> **`3D组态(2024-Q1-Q2)`** - _3D组态场景编辑器_
- <span class="tag wip-tag">开发中</span> **`多时序数据库支持(2024-Q3)`** - _多时序数据库支持规划除Tdengine外适配Greptime,Timescaledb_
- <span class="tag wip-tag">开发中</span> **`3D组态(2024-Q1-Q3)`** - _3D组态场景编辑器_
- <span class="tag wip-tag">开发中</span> **`报表设计器2024-Q4`** - _excel的低代码报表设计_
---

View File

@@ -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) {

View File

@@ -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
}

View File

@@ -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{

View File

@@ -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`