This commit is contained in:
ziming 2025-07-03 14:14:59 +08:00
parent b4e56b8303
commit d5278f4594
4 changed files with 44 additions and 45 deletions

View File

@ -1,9 +1,5 @@
# <p align="center">招行立减金券系统</p> # <p align="center">招行立减金券系统</p>
* * * * * *
### 主要工作 ### 主要工作
+ 发券API + 发券API
* * * * * *

View File

@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"github.com/redis/go-redis/v9" "github.com/redis/go-redis/v9"
"strings"
"voucher/internal/biz/bo" "voucher/internal/biz/bo"
"voucher/internal/biz/vo" "voucher/internal/biz/vo"
"voucher/internal/pkg/lock" "voucher/internal/pkg/lock"
@ -41,8 +42,8 @@ func (this *VoucherBiz) alarm(ctx context.Context, order *bo.OrderBo, errMsg str
} }
// 通知 // 通知
title := fmt.Sprintf("券领取异常") title := fmt.Sprintf("券发放异常")
if err = this.DingMixRepo.SendMarkdownMessage(ctx, title, this.alarmText(ctx, order, errMsg)); err != nil { if err = this.DingMixRepo.SendMarkdownMessage(ctx, title, alarmText2(order, errMsg)); err != nil {
return err return err
} }
@ -68,3 +69,26 @@ func (this *VoucherBiz) alarmText(_ context.Context, order *bo.OrderBo, errMsg s
return fmt.Sprintf(msg, remarks) 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()
}

View File

@ -121,9 +121,9 @@ func (c *TalkClient) SendMarkdownMessage(title, text string, atMobiles []string,
if len(atMobiles) > 0 { if len(atMobiles) > 0 {
var atStr string var atStr string
for _, mobile := range atMobiles { for _, mobile := range atMobiles {
atStr += fmt.Sprintf("<font color='green'>@%s</font>", mobile) atStr += fmt.Sprintf("<font color='red'>@%s</font>", mobile)
} }
text += fmt.Sprintf("\n<font color='red'>请尽快处理</font>%s", atStr) text += fmt.Sprintf("\n<font color='black'>请尽快处理</font>%s", atStr)
} }
message := map[string]interface{}{ message := map[string]interface{}{

View File

@ -200,8 +200,8 @@ func TestOrderFailSend(t *testing.T) {
AppID: "app_123456gadabout", AppID: "app_123456gadabout",
MerchantNo: "185585225542", MerchantNo: "185585225542",
} }
markdownText := alarmText3(order, "测试券发放异常通知Post https://api.mch.weixin.qq.com/v3/marketing/favor/users/oW97fjtVl8wHarrDpptBvQQKKu7Q/coupons: EOF") markdownText := alarmText2(order, "测试券发放异常通知Post https://api.mch.weixin.qq.com/v3/marketing/favor/users/oW97fjtVl8wHarrDpptBvQQKKu7Q/coupons: EOF")
t.Log(markdownText) t.Logf("\n%s", markdownText)
markdownTitle := "测试 Markdown 消息" markdownTitle := "测试 Markdown 消息"
atMobiles := []string{"18666173766"} 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 := "# <font color='green'>" +
"<h1>立减金发放平台报警通知</h1>" +
"<font color='black'>%s</font>" +
"</font> \n" +
"<font color='red'>%s</font>"
return fmt.Sprintf(msg, remarks, errMsg)
}
func alarmText2(order *bo.OrderBo, errMsg string) string { func alarmText2(order *bo.OrderBo, errMsg string) string {
var card strings.Builder var card strings.Builder
// 警示栏(带图标和醒目颜色) // 警示信息(简化版)
card.WriteString("<div style=\"font-size: 10px; background-color: #f8f8f8; padding: 5px; border-radius: 5px;\">\n") card.WriteString("⚠️ **券发放异常** ⚠️\n\n")
card.WriteString("<h4 style=\"color: #FF8C00;\">⚠️ <strong>券发放异常</strong> ⚠️</h4>\n")
// 订单信息区块(压缩展示、增加换行、调小字体) // 订单信息(通过引用和代码块模拟小字体)
card.WriteString("<div style=\"font-size: 8px; padding: 2px; background-color: #f0f0f0; border-radius: 5px;\">\n") card.WriteString("> **订单信息:**\n\n")
card.WriteString("<strong>订单信息:</strong><br>\n") card.WriteString(fmt.Sprintf("> AppID: `%s`\n\n", order.AppID))
card.WriteString(fmt.Sprintf("AppID: <code>%s</code><br>\n", order.AppID)) card.WriteString(fmt.Sprintf("> OpenID: `%s`\n\n", order.Account))
card.WriteString(fmt.Sprintf("OpenID: <code>%s</code><br>\n", order.Account)) card.WriteString(fmt.Sprintf("> 批次号: `%s`\n\n", order.BatchNo))
card.WriteString(fmt.Sprintf("批次: <code>%s</code><br>\n", order.BatchNo)) card.WriteString(fmt.Sprintf("> 活动号: `%s`\n\n", order.ProductNo))
card.WriteString(fmt.Sprintf("活动号: <code>%s</code><br>\n", order.ProductNo)) card.WriteString(fmt.Sprintf("> 订单号: `%s`\n\n", order.OrderNo))
card.WriteString(fmt.Sprintf("订单号: <code>%s</code><br>\n", order.OrderNo)) card.WriteString(fmt.Sprintf("> 招行订单号: `%s`\n", order.OutBizNo))
card.WriteString(fmt.Sprintf("招行订单号: <code>%s</code><br>\n", order.OutBizNo)) card.WriteString("\n")
card.WriteString("</div>\n")
// 报警原因区块(红色背景、字体可调、明确换行) // 报警原因(通过引用和代码块模拟小字体)
card.WriteString("<div style=\"font-size: 8px; padding: 2px; background-color: #ffcccc; border-radius: 5px; margin-top: 1px;\">\n") card.WriteString("> **❗ 报警原因:**\n\n")
card.WriteString("<strong>❗ 报警原因:</strong><br>\n") card.WriteString(fmt.Sprintf("> `%s`\n", errMsg))
card.WriteString(fmt.Sprintf("<code>%s</code>\n", errMsg))
card.WriteString("</div>\n")
// 结束 div 标签
card.WriteString("</div>\n")
return card.String() return card.String()
} }