diff --git a/dao/im.go b/dao/im.go index 3a0c00d..47a9367 100644 --- a/dao/im.go +++ b/dao/im.go @@ -5,6 +5,7 @@ import ( "encoding/json" "gorm.io/gorm" "log" + "time" ) type Session struct { @@ -133,3 +134,32 @@ func FindSessionMessageCountByUserID(userID int) []SessionMessageCount { } return sessionMessageCounts } + +// 获取会话数,问答数,今日问答数 +func FindBaseSessionMessageStatisticsInfo() (int64, int64, int64, error) { + //所有会话数 + var sessionCount int64 + var messageCount int64 + var todayMessageCount int64 + today := time.Now().Truncate(24 * time.Hour) + var db2 *gorm.DB + if proto.Config.SERVER_SQL_LOG { + db2 = DB.Debug() + } else { + db2 = DB + } + + // 查询会话数量 + if err := db2.Model(&Session{}).Count(&sessionCount).Error; err != nil { + return 0, 0, 0, err + } + // 查询消息数量 + if err := db2.Model(&Message{}).Count(&messageCount).Error; err != nil { + return 0, 0, 0, err + } + // 查询今天的消息数量 + if err := db2.Model(&Message{}).Where("created_at > ?", today).Count(&todayMessageCount).Error; err != nil { + return 0, 0, 0, err + } + return sessionCount, messageCount, todayMessageCount, nil +} diff --git a/dao/user.go b/dao/user.go index 61113fc..5bfdbc0 100644 --- a/dao/user.go +++ b/dao/user.go @@ -188,3 +188,9 @@ func UserStatisticsData(userID int) UserStatistics { DB.Model(&Message{}).Where("from_id = ?", userID).Count(&userStatistics.MessageCount) return userStatistics } + +func FindUserNum() int64 { + var count int64 + DB.Model(&User{}).Count(&count) + return count +} diff --git a/handler/tool.go b/handler/tool.go index ec58474..9ec9f2b 100644 --- a/handler/tool.go +++ b/handler/tool.go @@ -53,6 +53,7 @@ func SetUpToolGroup(router *gin.Engine) { toolGroup.POST("/monitor", SetDeviceStatusV2) //发送邮件 toolGroup.POST("/send_mail", SendMailTool) + toolGroup.POST("/dashboard", DashBoardStatistics) } func SetDeviceStatusV2(c *gin.Context) { @@ -403,3 +404,12 @@ func SendMailTool(c *gin.Context) { } } + +func DashBoardStatistics(c *gin.Context) { + //用户统计信息 + rbase := service.GetBaseDashboardInfo() + var resp proto.DashBoardStatisticsResp + resp.DashBoardStatisticsSt = rbase + c.JSON(http.StatusOK, gin.H{"code": proto.SuccessCode, "message": "success", "data": resp}) + return +} diff --git a/proto/tool.go b/proto/tool.go new file mode 100644 index 0000000..34124e0 --- /dev/null +++ b/proto/tool.go @@ -0,0 +1,13 @@ +package proto + +// 基础统计信息,会话数,问答数,用户数,今日处理问答数 +type DashBoardStatisticsSt struct { + SessionNum int64 `json:"session_num"` + MessageCount int64 `json:"message_count"` + UserCount int64 `json:"user_count"` + TodayMessageCount int64 `json:"today_message_count"` +} + +type DashBoardStatisticsResp struct { + DashBoardStatisticsSt DashBoardStatisticsSt `json:"dashboard_statistics_st"` +} diff --git a/service/toolService.go b/service/toolService.go index c3979d0..de1dc38 100644 --- a/service/toolService.go +++ b/service/toolService.go @@ -1,9 +1,11 @@ package service import ( + "StuAcaWorksAI/dao" "StuAcaWorksAI/proto" "StuAcaWorksAI/worker" "fmt" + "log" "regexp" "time" ) @@ -113,3 +115,16 @@ func CheckEmail(email string) bool { reg := regexp.MustCompile(pattern) return reg.MatchString(email) } + +// 获取基础信息统计信息 +func GetBaseDashboardInfo() proto.DashBoardStatisticsSt { + var res proto.DashBoardStatisticsSt + var err error + res.SessionNum, res.MessageCount, res.TodayMessageCount, err = dao.FindBaseSessionMessageStatisticsInfo() + if err != nil { + log.Println("get base dashboard info error:", err) + } + // 获取用户数 + res.UserCount = dao.FindUserNum() + return res +}