From c2f5721ddd796bb036873d5374f35748fa8dd2ff Mon Sep 17 00:00:00 2001 From: zyj <18107291228@163.com> Date: Wed, 17 Sep 2025 18:29:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=BE=E5=A4=87=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=8F=8A=E7=99=BB=E5=BD=95=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/device.go | 13 +++++++++++++ api/websocks.go | 7 ++++++- models/device.go | 1 + router/device.go | 1 + services/device_service.go | 23 ++++++++++++++++++++++- 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/api/device.go b/api/device.go index 42ed7bc..d7b58df 100644 --- a/api/device.go +++ b/api/device.go @@ -37,6 +37,7 @@ func (*DeviceApi) SevaDeviceInfo(ctx *gin.Context) { } // 获取当前的用户ID跟token信息 token, _ := ctx.Get("token") + IP := ctx.ClientIP() // 保存当前的设备 DeviceService := services.InitDeviceService() DeviceService.UpdateByToken(token.(string), &models.Device{ @@ -47,6 +48,7 @@ func (*DeviceApi) SevaDeviceInfo(ctx *gin.Context) { Cpu: paramsJson.CPU, Mem: paramsJson.Mem, Disk: paramsJson.Disk, + Ip: IP, }) res = libs.ErrorCode["SevaSuccessful"] ctx.JSON(http.StatusOK, gin.H{ @@ -55,3 +57,14 @@ func (*DeviceApi) SevaDeviceInfo(ctx *gin.Context) { "data": res.Data, }) } + +func (*DeviceApi) GetAll(ctx *gin.Context) { + userId, _ := ctx.Get("userID") + DeviceService := services.InitDeviceService() + devices := DeviceService.GetAll(userId.(int64)) + ctx.JSON(http.StatusOK, gin.H{ + "code": 200, + "msg": "", + "data": devices, + }) +} diff --git a/api/websocks.go b/api/websocks.go index afd5c8d..b3cd39e 100644 --- a/api/websocks.go +++ b/api/websocks.go @@ -5,6 +5,7 @@ import ( grpcClient "go-desk-service/grpc-client" "go-desk-service/libs" userpb "go-desk-service/proto/gen" + "go-desk-service/services" "log" "net/http" "sync" @@ -64,7 +65,8 @@ func (*Websocks) Init(ctx *gin.Context) { return } defer conn.Close() - + deviceService := services.InitDeviceService() + deviceService.Login(tokenStr) // 将保存连接状态 // ClientsMu.Lock() // Clients[TokenStatus.UserId] = conn @@ -74,6 +76,9 @@ func (*Websocks) Init(ctx *gin.Context) { mt, message, err := conn.ReadMessage() if err != nil { log.Printf("读取错误: %v (客户端: %s)", err, conn.RemoteAddr()) + log.Println("客户端断开", tokenStr) + deviceService := services.InitDeviceService() + deviceService.Logout(tokenStr) break } log.Printf("收到来自 %s 的消息: %s", conn.RemoteAddr(), string(message)) diff --git a/models/device.go b/models/device.go index 56674c8..1ce949d 100644 --- a/models/device.go +++ b/models/device.go @@ -15,6 +15,7 @@ type Device struct { Mem string `gorm:"mem"` Disk string `gorm:"disk"` LoginStatus int `gorm:"login_status"` // 1: 已登录, 0: 未登录 + Ip string `gorm:"ip"` CreatedAt time.Time `gorm:"created_at;type:timestamptz"` UpdatedAt time.Time `gorm:"updated_at;type:timestamptz"` } diff --git a/router/device.go b/router/device.go index 81c808a..21ab3cd 100644 --- a/router/device.go +++ b/router/device.go @@ -14,4 +14,5 @@ var DeviceApi api.DeviceApi func (*Device) Init(app *gin.Engine) { group := app.Group("/device", middleware.TokenAuth()) group.POST("/seva", DeviceApi.SevaDeviceInfo) + group.POST("/all", DeviceApi.GetAll) } diff --git a/services/device_service.go b/services/device_service.go index 88ff481..7cad32e 100644 --- a/services/device_service.go +++ b/services/device_service.go @@ -60,7 +60,7 @@ func (d *DeviceService) GetInfoByToken(token string) (*models.Device, error) { func (d *DeviceService) GetUserLoginStatus(userId int64) (int, error) { var count int64 - err := d.db.Model(&models.Device{}).Where("user_id = ? AND login_status = ?", userId, 1).Count(&count).Error + err := d.db.Model(&models.Device{}).Where("user_id = ?", userId).Count(&count).Error if err != nil { return 0, err } @@ -95,3 +95,24 @@ func (d *DeviceService) SetUserLoginStatus(userId int64, token, deviceUid string UpdatedAt: time.Now(), }) } + +func (d *DeviceService) Logout(token string) { + d.db.Model(&models.Device{}).Where("token = ?", token).Updates(map[string]interface{}{ + "login_status": 0, + "updated_at": time.Now(), + }) +} + +func (d *DeviceService) GetAll(userId int64) []models.Device { + var device []models.Device + d.db.Select("id", "hostname", "platform", "platform_version", "mac", "cpu", "mem", "disk", "device_uid", "login_status", "ip").Model(&models.Device{}).Where("user_id = ?", userId).Find(&device) + + return device +} + +func (d *DeviceService) Login(token string) { + d.db.Model(&models.Device{}).Where("token = ?", token).Updates(&models.Device{ + LoginStatus: 1, + UpdatedAt: time.Now(), + }) +}