1.0
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"awesomeProject/internal/common"
|
||||
"awesomeProject/internal/models"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// UserScoreHandler 用户端积分处理器
|
||||
type UserScoreHandler struct{}
|
||||
|
||||
// GetMyScoreRecords 获取我的积分记录列表
|
||||
func (h *UserScoreHandler) GetMyScoreRecords(c *gin.Context) {
|
||||
currentUser, _ := c.Get("current_user")
|
||||
user := currentUser.(models.User)
|
||||
|
||||
// 分页参数
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20"))
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
if pageSize < 1 || pageSize > 50 {
|
||||
pageSize = 20
|
||||
}
|
||||
|
||||
// 搜索参数
|
||||
changeType := c.Query("change_type") // all, positive, negative
|
||||
|
||||
db := common.GetDB()
|
||||
var records []models.ScoreRecord
|
||||
var total int64
|
||||
|
||||
// 构建查询条件 - 只查询当前用户的积分记录
|
||||
query := db.Model(&models.ScoreRecord{}).Where("user_id = ?", user.ID)
|
||||
|
||||
// 添加积分变化类型筛选
|
||||
if changeType == "positive" {
|
||||
query = query.Where("change_number > 0")
|
||||
} else if changeType == "negative" {
|
||||
query = query.Where("change_number < 0")
|
||||
}
|
||||
|
||||
// 获取总数
|
||||
query.Count(&total)
|
||||
|
||||
// 分页查询
|
||||
offset := (page - 1) * pageSize
|
||||
err := query.Offset(offset).Limit(pageSize).Order("created_at DESC").Find(&records).Error
|
||||
if err != nil {
|
||||
c.JSON(http.StatusOK, common.Error(500, "查询积分记录失败"))
|
||||
return
|
||||
}
|
||||
|
||||
// 计算统计信息
|
||||
var totalIncome int // 总收入积分
|
||||
var totalExpense int // 总支出积分
|
||||
var currentPoints int // 当前积分
|
||||
|
||||
currentPoints = user.CurrentPoints
|
||||
|
||||
// 统计总收入和总支出
|
||||
db.Model(&models.ScoreRecord{}).Where("user_id = ? AND change_number > 0", user.ID).
|
||||
Select("COALESCE(SUM(change_number), 0)").Scan(&totalIncome)
|
||||
db.Model(&models.ScoreRecord{}).Where("user_id = ? AND change_number < 0", user.ID).
|
||||
Select("COALESCE(SUM(ABS(change_number)), 0)").Scan(&totalExpense)
|
||||
|
||||
// 构建返回数据
|
||||
result := map[string]interface{}{
|
||||
"list": records,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"page_size": pageSize,
|
||||
"current_points": currentPoints,
|
||||
"total_income": totalIncome,
|
||||
"total_expense": totalExpense,
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, common.Success(result))
|
||||
}
|
||||
|
||||
// GetMyScoreStats 获取我的积分统计信息
|
||||
func (h *UserScoreHandler) GetMyScoreStats(c *gin.Context) {
|
||||
currentUser, _ := c.Get("current_user")
|
||||
user := currentUser.(models.User)
|
||||
|
||||
db := common.GetDB()
|
||||
|
||||
// 当前积分
|
||||
currentPoints := user.CurrentPoints
|
||||
|
||||
// 总收入积分
|
||||
var totalIncome int
|
||||
db.Model(&models.ScoreRecord{}).Where("user_id = ? AND change_number > 0", user.ID).
|
||||
Select("COALESCE(SUM(change_number), 0)").Scan(&totalIncome)
|
||||
|
||||
// 总支出积分
|
||||
var totalExpense int
|
||||
db.Model(&models.ScoreRecord{}).Where("user_id = ? AND change_number < 0", user.ID).
|
||||
Select("COALESCE(SUM(ABS(change_number)), 0)").Scan(&totalExpense)
|
||||
|
||||
// 今日获得积分
|
||||
var todayIncome int
|
||||
db.Model(&models.ScoreRecord{}).Where("user_id = ? AND change_number > 0 AND DATE(created_at) = CURDATE()", user.ID).
|
||||
Select("COALESCE(SUM(change_number), 0)").Scan(&todayIncome)
|
||||
|
||||
// 本月获得积分
|
||||
var monthIncome int
|
||||
db.Model(&models.ScoreRecord{}).Where("user_id = ? AND change_number > 0 AND YEAR(created_at) = YEAR(NOW()) AND MONTH(created_at) = MONTH(NOW())", user.ID).
|
||||
Select("COALESCE(SUM(change_number), 0)").Scan(&monthIncome)
|
||||
|
||||
// 最近的积分记录(5条)
|
||||
var recentRecords []models.ScoreRecord
|
||||
db.Model(&models.ScoreRecord{}).Where("user_id = ?", user.ID).
|
||||
Order("created_at DESC").Limit(5).Find(&recentRecords)
|
||||
|
||||
// 构建返回数据
|
||||
result := map[string]interface{}{
|
||||
"current_points": currentPoints,
|
||||
"total_income": totalIncome,
|
||||
"total_expense": totalExpense,
|
||||
"today_income": todayIncome,
|
||||
"month_income": monthIncome,
|
||||
"recent_records": recentRecords,
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, common.Success(result))
|
||||
}
|
||||
Reference in New Issue
Block a user