feat: 增加打赏核销功能

This commit is contained in:
RockYang
2023-07-21 18:26:51 +08:00
parent 1e1bcd4a30
commit aa28f87b0c
5 changed files with 101 additions and 3 deletions

View File

@@ -0,0 +1,72 @@
package handler
import (
"chatplus/core"
"chatplus/core/types"
"chatplus/store/model"
"chatplus/utils"
"chatplus/utils/resp"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
type RewardHandler struct {
BaseHandler
db *gorm.DB
}
func NewRewardHandler(server *core.AppServer, db *gorm.DB) *RewardHandler {
h := RewardHandler{db: db}
h.App = server
return &h
}
// Verify 打赏码核销
func (h *RewardHandler) Verify(c *gin.Context) {
var data struct {
TxId string
}
if err := c.ShouldBindJSON(&data); err != nil {
resp.ERROR(c, types.InvalidArgs)
return
}
var item model.Reward
res := h.db.Where("tx_id = ?", data.TxId).First(&item)
if res.Error != nil {
resp.ERROR(c, "无效的打赏交易流水号!")
return
}
if item.Status {
resp.ERROR(c, "当前打赏交易流水号已经被核销,请不要重复核销!")
return
}
user, err := utils.GetLoginUser(c, h.db)
if err != nil {
resp.HACKER(c)
return
}
tx := h.db.Begin()
calls := (item.Amount + 0.01) * 10
res = h.db.Model(&user).UpdateColumn("calls", gorm.Expr("calls + ?", calls))
if res.Error != nil {
resp.ERROR(c, "更新数据库失败!")
return
}
// 更新核销状态
item.Status = true
res = h.db.Updates(&item)
if res.Error != nil {
tx.Rollback()
resp.ERROR(c, "更新数据库失败!")
return
}
tx.Commit()
resp.SUCCESS(c)
}

View File

@@ -13,7 +13,7 @@ import (
"github.com/gin-gonic/gin"
)
// 生成验证控制器
// 短信验证控制器
type VerifyHandler struct {
BaseHandler

View File

@@ -104,8 +104,11 @@ func main() {
// 创建微信机器人
fx.Provide(wexin.NewWeChatBot),
fx.Invoke(func(bot *wexin.WeChatBot) error {
return bot.Login()
fx.Invoke(func(bot *wexin.WeChatBot) {
go func() {
err := bot.Login()
log.Fatal(err)
}()
}),
// 创建函数
@@ -137,6 +140,7 @@ func main() {
fx.Provide(handler.NewChatHandler),
fx.Provide(handler.NewUploadHandler),
fx.Provide(handler.NewVerifyHandler),
fx.Provide(handler.NewRewardHandler),
fx.Provide(admin.NewConfigHandler),
fx.Provide(admin.NewAdminHandler),
@@ -182,6 +186,10 @@ func main() {
group.GET("token", h.Token)
group.POST("sms", h.SendMsg)
}),
fx.Invoke(func(s *core.AppServer, h *handler.RewardHandler) {
group := s.Engine.Group("/api/reward/")
group.GET("verify", h.Verify)
}),
// 管理后台控制器
fx.Invoke(func(s *core.AppServer, h *admin.ConfigHandler) {