From aa28f87b0c9bccff8f09a293773f7463b5a886e6 Mon Sep 17 00:00:00 2001 From: RockYang Date: Fri, 21 Jul 2023 18:26:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=89=93=E8=B5=8F?= =?UTF-8?q?=E6=A0=B8=E9=94=80=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/handler/reward_handler.go | 72 ++++++++++++++++++++++++++++++++++ api/handler/verify_handler.go | 2 +- api/main.go | 12 +++++- web/public/images/reward.png | Bin 0 -> 33084 bytes web/src/views/ChatPlus.vue | 18 +++++++++ 5 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 api/handler/reward_handler.go create mode 100644 web/public/images/reward.png diff --git a/api/handler/reward_handler.go b/api/handler/reward_handler.go new file mode 100644 index 00000000..79f6ca82 --- /dev/null +++ b/api/handler/reward_handler.go @@ -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) + +} diff --git a/api/handler/verify_handler.go b/api/handler/verify_handler.go index 7de5a31b..a3c5a776 100644 --- a/api/handler/verify_handler.go +++ b/api/handler/verify_handler.go @@ -13,7 +13,7 @@ import ( "github.com/gin-gonic/gin" ) -// 生成验证的控制器 +// 短信验证码控制器 type VerifyHandler struct { BaseHandler diff --git a/api/main.go b/api/main.go index 0e40959e..4e6d7b10 100644 --- a/api/main.go +++ b/api/main.go @@ -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) { diff --git a/web/public/images/reward.png b/web/public/images/reward.png new file mode 100644 index 0000000000000000000000000000000000000000..d7f65b746b4842581a12ac93bb2d277a7625a6e7 GIT binary patch literal 33084 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 Y#omnX7`6YLgabY@pA{raKk5DcKY@QLO8@`> literal 0 HcmV?d00001 diff --git a/web/src/views/ChatPlus.vue b/web/src/views/ChatPlus.vue index 890c143d..17e16395 100644 --- a/web/src/views/ChatPlus.vue +++ b/web/src/views/ChatPlus.vue @@ -198,6 +198,23 @@ + + + +

您好,ChatGPT-Plus 项目目前已经运行了快半年了,一直免费给大家使用的。然而免费服务始终难以维持,服务器即将到期,免费的 + API KEY 也全部用完了,因此我们准备开启众筹模式,只需要打赏9.9元,就可以兑换 100 次对话,以此来覆盖我们的 OpenAI + 账单和服务器的费用。

+
+

+ +

+
@@ -253,6 +270,7 @@ const router = useRouter(); const showConfigDialog = ref(false); const showPasswordDialog = ref(false); const showBindMobileDialog = ref(false); +const showRewardDialog = ref(false); const isLogin = ref(false) if (isMobile()) {