Skip to content

Commit d4e6022

Browse files
committed
feat: 添加获取设备物模型统计信息的接口及相关逻辑
1 parent 008d9e7 commit d4e6022

5 files changed

Lines changed: 101 additions & 0 deletions

File tree

‎internal/api/device.go‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,23 @@ func (*DeviceApi) HandleDeviceTemplateMenu(c *gin.Context) {
206206
c.Set("data", data)
207207
}
208208

209+
// HandleDeviceTemplateStats 获取设备物模型统计信息
210+
// @Router /api/v1/device/template/stats [get]
211+
func (*DeviceApi) HandleDeviceTemplateStats(c *gin.Context) {
212+
var req model.GetDeviceTemplateStatsReq
213+
if !BindAndValidate(c, &req) {
214+
return
215+
}
216+
userClaims := c.MustGet("claims").(*utils.UserClaims)
217+
data, err := service.GroupApp.DeviceTemplate.GetDeviceTemplateStats(req, userClaims)
218+
if err != nil {
219+
c.Error(err)
220+
return
221+
}
222+
223+
c.Set("data", data)
224+
}
225+
209226
// DeleteDeviceTemplate 删除设备模版
210227
// @Router /api/v1/device/template/{id} [delete]
211228
func (*DeviceApi) DeleteDeviceTemplate(c *gin.Context) {

‎internal/dal/device_template.go‎

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,59 @@ func GetDeviceTemplateMenu(req *model.GetDeviceTemplateMenuReq, claims *utils.Us
118118
return data, err
119119

120120
}
121+
122+
// GetDeviceTemplateStats 获取设备物模型统计信息
123+
func GetDeviceTemplateStats(deviceTemplateID string, tenantID string) (*model.GetDeviceTemplateStatsRsp, error) {
124+
ctx := context.Background()
125+
126+
// 查询物模型基本信息
127+
dt := query.DeviceTemplate
128+
template, err := dt.WithContext(ctx).
129+
Where(dt.ID.Eq(deviceTemplateID), dt.TenantID.Eq(tenantID)).
130+
First()
131+
if err != nil {
132+
logrus.Error("query device template error: ", err)
133+
return nil, err
134+
}
135+
136+
// 统计关联设备总数和在线设备数
137+
// 通过 device_configs 表关联 devices 表
138+
dc := query.DeviceConfig
139+
d := query.Device
140+
141+
// 统计总设备数
142+
totalDevices, err := d.WithContext(ctx).
143+
Join(dc, dc.ID.EqCol(d.DeviceConfigID)).
144+
Where(dc.DeviceTemplateID.Eq(deviceTemplateID), d.TenantID.Eq(tenantID)).
145+
Count()
146+
if err != nil {
147+
logrus.Error("query total devices error: ", err)
148+
return nil, err
149+
}
150+
151+
// 统计在线设备数
152+
onlineDevices, err := d.WithContext(ctx).
153+
Join(dc, dc.ID.EqCol(d.DeviceConfigID)).
154+
Where(dc.DeviceTemplateID.Eq(deviceTemplateID), d.TenantID.Eq(tenantID), d.IsOnline.Eq(1)).
155+
Count()
156+
if err != nil {
157+
logrus.Error("query online devices error: ", err)
158+
return nil, err
159+
}
160+
161+
// 构造返回结果
162+
label := ""
163+
if template.Label != nil {
164+
label = *template.Label
165+
}
166+
167+
result := &model.GetDeviceTemplateStatsRsp{
168+
DeviceTemplateID: template.ID,
169+
Name: template.Name,
170+
Label: label,
171+
TotalDevices: totalDevices,
172+
OnlineDevices: onlineDevices,
173+
}
174+
175+
return result, nil
176+
}

‎internal/model/device_templates.http.go‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,17 @@ type GetDeviceTemplateRsp struct {
5050
CreatedAt time.Time `json:"created_at"`
5151
UpdatedAt time.Time `json:"updated_at"`
5252
}
53+
54+
// GetDeviceTemplateStatsReq 获取设备物模型统计请求
55+
type GetDeviceTemplateStatsReq struct {
56+
DeviceTemplateID string `json:"device_template_id" form:"device_template_id" validate:"required,max=36"` // 物模型ID
57+
}
58+
59+
// GetDeviceTemplateStatsRsp 获取设备物模型统计响应
60+
type GetDeviceTemplateStatsRsp struct {
61+
DeviceTemplateID string `json:"device_template_id"` // 物模型ID
62+
Name string `json:"name"` // 物模型名称
63+
Label string `json:"label"` // 标签
64+
TotalDevices int64 `json:"total_devices"` // 关联设备总数
65+
OnlineDevices int64 `json:"online_devices"` // 在线设备数
66+
}

‎internal/service/device_template.go‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,3 +194,14 @@ func (*DeviceTemplate) GetDeviceTemplateMenu(req model.GetDeviceTemplateMenuReq,
194194
}
195195
return data, nil
196196
}
197+
198+
// GetDeviceTemplateStats 获取设备物模型统计信息
199+
func (*DeviceTemplate) GetDeviceTemplateStats(req model.GetDeviceTemplateStatsReq, claims *utils.UserClaims) (*model.GetDeviceTemplateStatsRsp, error) {
200+
data, err := dal.GetDeviceTemplateStats(req.DeviceTemplateID, claims.TenantID)
201+
if err != nil {
202+
return nil, errcode.WithData(errcode.CodeDBError, map[string]interface{}{
203+
"sql_error": err.Error(),
204+
})
205+
}
206+
return data, nil
207+
}

‎router/apps/device.go‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ func (*Device) InitDevice(Router *gin.RouterGroup) {
108108
// 模板下拉菜单
109109
deviceTemplateapi.GET("/menu", api.Controllers.DeviceApi.HandleDeviceTemplateMenu)
110110

111+
// 物模型统计信息
112+
deviceTemplateapi.GET("/stats", api.Controllers.DeviceApi.HandleDeviceTemplateStats)
113+
111114
// 根据设备ID获取模板
112115
deviceTemplateapi.GET("/chart", api.Controllers.DeviceApi.HandleDeviceTemplateByDeviceId)
113116

0 commit comments

Comments
 (0)