This commit is contained in:
ziming 2025-07-02 09:20:04 +08:00
parent 760549de2a
commit 6f96e22f5f
6 changed files with 46 additions and 17 deletions

View File

@ -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:

View File

@ -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 {
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))

View File

@ -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
}

View File

@ -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)

View File

@ -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,
})
}

View File

@ -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)
})