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>
* * *
### 主要工作
+ 发券API
* * *

View File

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

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='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{}{

View File

@ -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 := "# <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("⚠️ **券发放异常** ⚠️\n\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("> **订单信息:**\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("<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")
// 报警原因(通过引用和代码块模拟小字体)
card.WriteString("> **❗ 报警原因:**\n\n")
card.WriteString(fmt.Sprintf("> `%s`\n", errMsg))
return card.String()
}