From 6f96e22f5f9caca15ed665d5aa9e50e895373220 Mon Sep 17 00:00:00 2001 From: ziming Date: Wed, 2 Jul 2025 09:20:04 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E8=AD=A614?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- configs/config.yaml | 2 +- internal/biz/warning_budget.go | 37 +++++++++++++++++++----------- internal/server/cron.go | 2 +- internal/server/http.go | 1 + internal/service/script.go | 17 ++++++++++++++ internal/service/warning_budget.go | 4 ++-- 6 files changed, 46 insertions(+), 17 deletions(-) diff --git a/configs/config.yaml b/configs/config.yaml index 84c692f..c335f7d 100644 --- a/configs/config.yaml +++ b/configs/config.yaml @@ -85,7 +85,7 @@ cron: command: "0 0 1 * * ?" # 每天凌晨1点执行一次 warningBudget: isOpen: true #是否启动 true/false - command: "0 */5 * * *" #cron表达式,每一分钟执行一次 + command: "0 */5 * * *" #cron表达式,每5分钟执行一次 rdsMQ: wechatQuery: diff --git a/internal/biz/warning_budget.go b/internal/biz/warning_budget.go index 7d50373..e293a52 100644 --- a/internal/biz/warning_budget.go +++ b/internal/biz/warning_budget.go @@ -14,6 +14,16 @@ import ( "voucher/internal/biz/vo" ) +func (this *VoucherBiz) Warning(ctx context.Context, batchNo string) error { + + product, err := this.ProductRepo.GetByBatchNo(ctx, batchNo) + if err != nil { + return err + } + + return this.WarningBudget(ctx, product) +} + func (this *VoucherBiz) WarningBudgetIncr(ctx context.Context, key string, ttl time.Duration) (int64, error) { // 增加发送计数 @@ -57,7 +67,7 @@ func (this *VoucherBiz) WarningBudgetIncrDel(ctx context.Context, key string) er return nil } -func (this *VoucherBiz) WarningBudget(ctx context.Context) { +func (this *VoucherBiz) CronWarningBudget(ctx context.Context) { uid := "warningBudget" @@ -72,7 +82,7 @@ func (this *VoucherBiz) WarningBudget(ctx context.Context) { start := time.Now() log.Warnf("预警查询,执行开始: %s", start.Format(time.DateTime)) - if err := this.warningBudget(ctx); err != nil { + if err := this.cronWarningBudget(ctx); err != nil { log.Errorf("预警查询,执行失败: %this", err) } @@ -83,31 +93,31 @@ func (this *VoucherBiz) WarningBudget(ctx context.Context) { return } -func (this *VoucherBiz) warningBudget(ctx context.Context) error { +func (this *VoucherBiz) cronWarningBudget(ctx context.Context) error { - err := this.ProductRepo.FindWarningBudget(ctx, func(ctx context.Context, rows []*bo.ProductBo) error { + return this.ProductRepo.FindWarningBudget(ctx, func(ctx context.Context, rows []*bo.ProductBo) error { for _, row := range rows { - wxResp, err := this.WechatCpnRepo.QueryProduct(ctx, row.MchId, row.BatchNo) - if err != nil { - log.Context(ctx).Errorf("预警查询,查询微信券失败: %this", err) - } else { - if err = this.Calculate(ctx, row, wxResp); err != nil { - log.Context(ctx).Errorf("预警查询,处理失败: %this", err) - } + if err := this.WarningBudget(ctx, row); err != nil { + log.Context(ctx).Errorf("预警查询,处理失败: %this", err) } - time.Sleep(time.Second * 2) } return nil }) +} +func (this *VoucherBiz) WarningBudget(ctx context.Context, product *bo.ProductBo) error { + + wxResp, err := this.WechatCpnRepo.QueryProduct(ctx, product.MchId, product.BatchNo) if err != nil { return err } - + if err = this.Calculate(ctx, product, wxResp); err != nil { + return err + } return nil } @@ -189,6 +199,7 @@ func formatAsCard(product *bo.ProductBo, req *do.WxResp) string { card.WriteString("#### 🎫 基本信息\n") card.WriteString(fmt.Sprintf("- **批次号**: %s\n", product.BatchNo)) card.WriteString(fmt.Sprintf("- **活动号**: %s\n", product.ProductNo)) + card.WriteString(fmt.Sprintf("- **预警值**: %d元\n", product.WarningBudget)) card.WriteString(fmt.Sprintf("- **面额**: %d元\n", req.Amount)) card.WriteString(fmt.Sprintf("- **总预算**: %d元\n", req.AllBudget)) card.WriteString(fmt.Sprintf("- **总库存**: %d张\n", req.AllStock)) diff --git a/internal/server/cron.go b/internal/server/cron.go index 4997587..fd19be0 100644 --- a/internal/server/cron.go +++ b/internal/server/cron.go @@ -50,7 +50,7 @@ func (cs *CronServer) Start(ctx context.Context) error { return err } - if err := cs.VoucherService.WarningBudget(ctx); err != nil { + if err := cs.VoucherService.CronWarningBudget(ctx); err != nil { log.Error("cron warning budget Start err: %v", err) return err } diff --git a/internal/server/http.go b/internal/server/http.go index 0936257..7fd0ef5 100644 --- a/internal/server/http.go +++ b/internal/server/http.go @@ -43,6 +43,7 @@ func NewHTTPServer( srv.Route("/voucher/").POST("pushWechatQuery", cmb.PushWechatQuery) srv.Route("/voucher/").POST("timeSliceQueryPush", cmb.TimeSliceQueryPush) srv.Route("/voucher/").POST("pushWechatRetry/{batch_no}", cmb.PushWechatRetry) + srv.Route("/voucher/").POST("warningBudget/{batch_no}", cmb.WarningBudget) v1.RegisterCmbHTTPServer(srv, cmb) diff --git a/internal/service/script.go b/internal/service/script.go index 09d83fb..9c99afc 100644 --- a/internal/service/script.go +++ b/internal/service/script.go @@ -133,3 +133,20 @@ func (this *CmbService) PushWechatRetry(ctx http.Context) error { "data": batchNo, }) } + +func (this *CmbService) WarningBudget(ctx http.Context) error { + + batchNo := ctx.Vars().Get("batch_no") + if batchNo == "" { + return fmt.Errorf("batch_no is empty") + } + + err := this.VoucherBiz.Warning(ctx, batchNo) + if err != nil { + return err + } + + return ctx.JSON(http2.StatusOK, map[string]interface{}{ + "data": batchNo, + }) +} diff --git a/internal/service/warning_budget.go b/internal/service/warning_budget.go index 7f231e2..fd28bc4 100644 --- a/internal/service/warning_budget.go +++ b/internal/service/warning_budget.go @@ -5,7 +5,7 @@ import ( "github.com/go-kratos/kratos/v2/log" ) -func (s *VoucherService) WarningBudget(ctx context.Context) error { +func (s *VoucherService) CronWarningBudget(ctx context.Context) error { c, ok := s.bc.Cron.CommandMap["warningBudget"] @@ -26,7 +26,7 @@ func (s *VoucherService) WarningBudget(ctx context.Context) error { return s.cron.AddFunc(c.Command, func() { - s.VoucherBiz.WarningBudget(ctx) + s.VoucherBiz.CronWarningBudget(ctx) })