This commit is contained in:
ziming 2025-07-03 13:37:54 +08:00
parent 018247a7d8
commit e7a362519b
4 changed files with 82 additions and 6 deletions

View File

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

View File

@ -41,7 +41,8 @@ func (this *VoucherBiz) alarm(ctx context.Context, order *bo.OrderBo, errMsg str
}
// 通知
if err = this.DingMixRepo.SendMarkdownMessage(ctx, "异常通知", this.alarmText(ctx, order, errMsg)); err != nil {
title := fmt.Sprintf("券领取异常")
if err = this.DingMixRepo.SendMarkdownMessage(ctx, title, this.alarmText(ctx, order, errMsg)); err != nil {
return err
}
@ -61,7 +62,7 @@ func (this *VoucherBiz) alarmText(_ context.Context, order *bo.OrderBo, errMsg s
"<h1>立减金发放报警通知</h1>" +
"</font> \n" +
"<font color='black'>" +
"不好了,订单发放发生异常了" +
"券领取发生异常了" +
"[<font color='red'>%s</font>]" +
"</font>"

View File

@ -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("<font color='#228B22'>@%s</font>", mobile)
atStr += fmt.Sprintf("<font color='green'>@%s</font>", mobile)
}
text += fmt.Sprintf("\n请尽快处理%s", atStr)
text += fmt.Sprintf("\n<font color='red'>请尽快处理</font>%s", atStr)
}
message := map[string]interface{}{

View File

@ -4,6 +4,7 @@ import (
"fmt"
"strings"
"testing"
"voucher/internal/biz/bo"
"voucher/internal/biz/do"
)
@ -186,3 +187,76 @@ func formatAsCard(req do.WarningBudget) string {
return card.String()
}
func TestOrderFailSend(t *testing.T) {
order := &bo.OrderBo{
OrderNo: "20231101001",
OutBizNo: "CMB_20231101001",
VoucherNo: "123456",
ProductNo: "CMB202020",
BatchNo: "202020",
Account: "oUx7j0xxdcdergdaegasfcg",
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)
markdownTitle := "测试 Markdown 消息"
atMobiles := []string{"18666173766"}
webhookURL := "https://oapi.dingtalk.com/robot/send?access_token=5f10c2213cbf8168985cb2d061ebb1a5f70bd1dd47ec7cef58fa6fe545d52588"
secret := "SEC77b63d70a9e22317144e712b4538ce1e0013db885c65f7f9bae283e8958b39eb"
client := NewDingTalkClient(webhookURL, secret)
if err := client.SendMarkdownMessage(markdownTitle, markdownText, atMobiles, false); err != nil {
fmt.Println("Markdown 消息发送失败:", err)
} else {
fmt.Println("Markdown 消息发送成功")
}
}
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 {
var card strings.Builder
// 警示栏(带图标和醒目颜色)
card.WriteString("<div style=\"font-size: 10px; background-color: #f8f8f8; padding: 5px; border-radius: 5px;\">\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("<strong>订单信息:</strong><br>\n")
card.WriteString(fmt.Sprintf("AppID: <code>%s</code><br>\n", order.AppID))
card.WriteString(fmt.Sprintf("OpenID: <code>%s</code><br>\n", order.Account))
card.WriteString(fmt.Sprintf("批次: <code>%s</code><br>\n", order.BatchNo))
card.WriteString(fmt.Sprintf("活动号: <code>%s</code><br>\n", order.ProductNo))
card.WriteString(fmt.Sprintf("订单号: <code>%s</code><br>\n", order.OrderNo))
card.WriteString(fmt.Sprintf("招行订单号: <code>%s</code><br>\n", order.OutBizNo))
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("<strong>❗ 报警原因:</strong><br>\n")
card.WriteString(fmt.Sprintf("<code>%s</code>\n", errMsg))
card.WriteString("</div>\n")
// 结束 div 标签
card.WriteString("</div>\n")
return card.String()
}