diff --git a/READEME.md b/READEME.md index 69e7a99..9c7a5d0 100755 --- a/READEME.md +++ b/READEME.md @@ -1,8 +1,9 @@ #

招行立减金券系统

* * * + ### 主要工作 + + 发券API -* * * - +* * * \ No newline at end of file diff --git a/internal/biz/alarm.go b/internal/biz/alarm.go index 526f45d..a330cd2 100644 --- a/internal/biz/alarm.go +++ b/internal/biz/alarm.go @@ -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 "

立减金发放报警通知

" + " \n" + "" + - "不好了,订单发放发生异常了" + + "券领取发生异常了" + "[%s]" + "" diff --git a/internal/pkg/ding/ding.go b/internal/pkg/ding/ding.go index 2af4ced..b0537bf 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 494055b..60ef9f6 100644 --- a/internal/pkg/ding/ding_test.go +++ b/internal/pkg/ding/ding_test.go @@ -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 := "# " + + "

立减金发放平台报警通知

" + + "%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") + 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") + card.WriteString("❗ 报警原因:
\n") + card.WriteString(fmt.Sprintf("%s\n", errMsg)) + card.WriteString("
\n") + + // 结束 div 标签 + card.WriteString("
\n") + + return card.String() +}