diff --git a/READEME.md b/READEME.md index 9c7a5d0..717e8d6 100755 --- a/READEME.md +++ b/READEME.md @@ -1,9 +1,5 @@ #

招行立减金券系统

- * * * - ### 主要工作 - + 发券API - * * * \ No newline at end of file diff --git a/internal/biz/alarm.go b/internal/biz/alarm.go index a330cd2..e1254bb 100644 --- a/internal/biz/alarm.go +++ b/internal/biz/alarm.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "github.com/redis/go-redis/v9" + "strings" "voucher/internal/biz/bo" "voucher/internal/biz/vo" "voucher/internal/pkg/lock" @@ -41,8 +42,8 @@ func (this *VoucherBiz) alarm(ctx context.Context, order *bo.OrderBo, errMsg str } // 通知 - title := fmt.Sprintf("券领取异常") - if err = this.DingMixRepo.SendMarkdownMessage(ctx, title, this.alarmText(ctx, order, errMsg)); err != nil { + title := fmt.Sprintf("券发放异常") + if err = this.DingMixRepo.SendMarkdownMessage(ctx, title, alarmText2(order, errMsg)); err != nil { return err } @@ -68,3 +69,26 @@ func (this *VoucherBiz) alarmText(_ context.Context, order *bo.OrderBo, errMsg s return fmt.Sprintf(msg, remarks) } + +func alarmText2(order *bo.OrderBo, errMsg string) string { + var card strings.Builder + + // 警示信息(简化版) + card.WriteString("⚠️ **券发放异常** ⚠️\n\n") + + // 订单信息(通过引用和代码块模拟小字体) + card.WriteString("> **订单信息:**\n\n") + card.WriteString(fmt.Sprintf("> AppID: `%s`\n\n", order.AppID)) + card.WriteString(fmt.Sprintf("> OpenID: `%s`\n\n", order.Account)) + card.WriteString(fmt.Sprintf("> 批次号: `%s`\n\n", order.BatchNo)) + card.WriteString(fmt.Sprintf("> 活动号: `%s`\n\n", order.ProductNo)) + card.WriteString(fmt.Sprintf("> 订单号: `%s`\n\n", order.OrderNo)) + card.WriteString(fmt.Sprintf("> 招行订单号: `%s`\n", order.OutBizNo)) + card.WriteString("\n") + + // 报警原因(通过引用和代码块模拟小字体) + card.WriteString("> **❗ 报警原因:**\n\n") + card.WriteString(fmt.Sprintf("> `%s`\n", errMsg)) + + return card.String() +} diff --git a/internal/pkg/ding/ding.go b/internal/pkg/ding/ding.go index b0537bf..62dab13 100644 --- a/internal/pkg/ding/ding.go +++ b/internal/pkg/ding/ding.go @@ -121,9 +121,9 @@ func (c *TalkClient) SendMarkdownMessage(title, text string, atMobiles []string, if len(atMobiles) > 0 { var atStr string for _, mobile := range atMobiles { - atStr += fmt.Sprintf("@%s", mobile) + atStr += fmt.Sprintf("@%s", mobile) } - text += fmt.Sprintf("\n请尽快处理%s", atStr) + text += fmt.Sprintf("\n请尽快处理%s", atStr) } message := map[string]interface{}{ diff --git a/internal/pkg/ding/ding_test.go b/internal/pkg/ding/ding_test.go index 60ef9f6..59f1e38 100644 --- a/internal/pkg/ding/ding_test.go +++ b/internal/pkg/ding/ding_test.go @@ -200,8 +200,8 @@ func TestOrderFailSend(t *testing.T) { AppID: "app_123456gadabout", MerchantNo: "185585225542", } - markdownText := alarmText3(order, "测试,券发放异常通知,Post https://api.mch.weixin.qq.com/v3/marketing/favor/users/oW97fjtVl8wHarrDpptBvQQKKu7Q/coupons: EOF") - t.Log(markdownText) + markdownText := alarmText2(order, "测试,券发放异常通知,Post https://api.mch.weixin.qq.com/v3/marketing/favor/users/oW97fjtVl8wHarrDpptBvQQKKu7Q/coupons: EOF") + t.Logf("\n%s", markdownText) markdownTitle := "测试 Markdown 消息" atMobiles := []string{"18666173766"} @@ -217,46 +217,25 @@ func TestOrderFailSend(t *testing.T) { } } -func alarmText3(order *bo.OrderBo, errMsg string) string { - - f := "\nAppID:%s\nOpenID:%s\n批次号:%s\n活动号:%s\n订单号:%s\n招行订单号:%s\n" - remarks := fmt.Sprintf(f, order.AppID, order.Account, order.BatchNo, order.ProductNo, order.OrderNo, order.OutBizNo) - - msg := "# " + - "

立减金发放平台报警通知

" + - "%s" + - "
\n" + - "%s" - - return fmt.Sprintf(msg, remarks, errMsg) -} - func alarmText2(order *bo.OrderBo, errMsg string) string { var card strings.Builder - // 警示栏(带图标和醒目颜色) - card.WriteString("
\n") - card.WriteString("

⚠️ 券发放异常 ⚠️

\n") + // 警示信息(简化版) + card.WriteString("⚠️ **券发放异常** ⚠️\n\n") - // 订单信息区块(压缩展示、增加换行、调小字体) - card.WriteString("
\n") - card.WriteString("订单信息:
\n") - card.WriteString(fmt.Sprintf("AppID: %s
\n", order.AppID)) - card.WriteString(fmt.Sprintf("OpenID: %s
\n", order.Account)) - card.WriteString(fmt.Sprintf("批次: %s
\n", order.BatchNo)) - card.WriteString(fmt.Sprintf("活动号: %s
\n", order.ProductNo)) - card.WriteString(fmt.Sprintf("订单号: %s
\n", order.OrderNo)) - card.WriteString(fmt.Sprintf("招行订单号: %s
\n", order.OutBizNo)) - card.WriteString("
\n") + // 订单信息(通过引用和代码块模拟小字体) + card.WriteString("> **订单信息:**\n\n") + card.WriteString(fmt.Sprintf("> AppID: `%s`\n\n", order.AppID)) + card.WriteString(fmt.Sprintf("> OpenID: `%s`\n\n", order.Account)) + card.WriteString(fmt.Sprintf("> 批次号: `%s`\n\n", order.BatchNo)) + card.WriteString(fmt.Sprintf("> 活动号: `%s`\n\n", order.ProductNo)) + card.WriteString(fmt.Sprintf("> 订单号: `%s`\n\n", order.OrderNo)) + card.WriteString(fmt.Sprintf("> 招行订单号: `%s`\n", order.OutBizNo)) + card.WriteString("\n") - // 报警原因区块(红色背景、字体可调、明确换行) - card.WriteString("
\n") - card.WriteString("❗ 报警原因:
\n") - card.WriteString(fmt.Sprintf("%s\n", errMsg)) - card.WriteString("
\n") - - // 结束 div 标签 - card.WriteString("
\n") + // 报警原因(通过引用和代码块模拟小字体) + card.WriteString("> **❗ 报警原因:**\n\n") + card.WriteString(fmt.Sprintf("> `%s`\n", errMsg)) return card.String() }