package ding import ( "fmt" "strings" "testing" "voucher/internal/biz/do" ) func TestSendTextMessage(t *testing.T) { webhookURL := "your_webhook_url" secret := "your_secret" client := NewDingTalkClient(webhookURL, secret) // 发送文本消息 content := "这是一条测试文本消息,@相关人员。" atMobiles := []string{"13800138000"} isAtAll := false err := client.SendTextMessage(content, atMobiles, isAtAll) if err != nil { fmt.Println("文本消息发送失败:", err) } else { fmt.Println("文本消息发送成功") } } func TestSendLinkMessage(t *testing.T) { title := "测试链接消息" text := "这是一条测试链接消息的详细内容,@相关人员。" messageURL := "https://example.com" picURL := "https://example.com/pic.jpg" webhookURL := "your_webhook_url" secret := "your_secret" atMobiles := []string{"13800138000"} client := NewDingTalkClient(webhookURL, secret) err := client.SendLinkMessage(title, text, messageURL, picURL, atMobiles, false) if err != nil { fmt.Println("链接消息发送失败:", err) } else { fmt.Println("链接消息发送成功") } } func TestSendMarkdownMessage(t *testing.T) { markdownTitle := "测试 Markdown 消息" //markdownText := "#

立减金发放平台报警通知

\n不好了,订单发放发生异常了,错误内容[批次号不存在]@相关人员。" markdownText := alarmText("批次号不存在") atMobiles := []string{"18666173766", "15102807142"} 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 alarmText(errMsg string) string { remarks := fmt.Sprintf("订单号:%s,商品编号:%s,原因:%s", "123456", "001", errMsg) msg := "# " + "

立减金发放平台报警通知

" + "
\n" + "" + "不好了,订单发放发生异常了" + "[%s]请尽快处理@相关人员。" + "" return fmt.Sprintf(msg, remarks) } func TestSend(t *testing.T) { webhookURL := "your_webhook_url" secret := "your_secret" client := NewDingTalkClient(webhookURL, secret) // 发送文本消息 content := "这是一条测试文本消息,@相关人员。" atMobiles := []string{"13800138000"} err := client.SendTextMessage(content, atMobiles, false) if err != nil { fmt.Println("文本消息发送失败:", err) } else { fmt.Println("文本消息发送成功") } // 发送链接消息 title := "测试链接消息" text := "这是一条测试链接消息的详细内容,@相关人员。" messageURL := "https://example.com" picURL := "https://example.com/pic.jpg" err = client.SendLinkMessage(title, text, messageURL, picURL, atMobiles, false) if err != nil { fmt.Println("链接消息发送失败:", err) } else { fmt.Println("链接消息发送成功") } // 发送 Markdown 消息 markdownTitle := "测试 Markdown 消息" markdownText := "# 标题\n这是一条测试 Markdown 消息的详细内容,@13800138000。" err = client.SendMarkdownMessage(markdownTitle, markdownText, atMobiles, false) if err != nil { fmt.Println("Markdown 消息发送失败:", err) } else { fmt.Println("Markdown 消息发送成功") } } func TestWarningBudgetText(t *testing.T) { req := do.WarningBudget{ StockName: "招行2元立减金", StockId: "20627186", StockNo: "CMB20627186", Amount: 2, AllBudget: 70010, AllStock: 35005, UsedStock: 9390, UsedBudget: 18780, AvailableStock: 25615, RemainingBudget: 51230, } str := formatAsCard(req) t.Log("\n" + str) markdownTitle := "批次预算预警" atMobiles := []string{"18666173766"} webhookURL := "https://oapi.dingtalk.com/robot/send?access_token=5f10c2213cbf8168985cb2d061ebb1a5f70bd1dd47ec7cef58fa6fe545d52588" secret := "SEC77b63d70a9e22317144e712b4538ce1e0013db885c65f7f9bae283e8958b39eb" client := NewDingTalkClient(webhookURL, secret) if err := client.SendMarkdownMessage(markdownTitle, str, atMobiles, false); err != nil { fmt.Println("Markdown 消息发送失败:", err) } else { fmt.Println("Markdown 消息发送成功") } } func formatAsCard(req do.WarningBudget) string { var card strings.Builder card.WriteString("### " + req.StockName + "\n\n") // 基本信息 card.WriteString("#### 🎫 基本信息\n") card.WriteString(fmt.Sprintf("- **批次号**: %s\n", req.StockId)) card.WriteString(fmt.Sprintf("- **活动号**: %s\n", req.StockNo)) card.WriteString(fmt.Sprintf("- **面额**: %d元\n", req.Amount)) card.WriteString(fmt.Sprintf("- **总预算**: %d元\n", req.AllBudget)) card.WriteString(fmt.Sprintf("- **总库存**: %d张\n", req.AllStock)) card.WriteString("\n") // 使用情况 card.WriteString("#### 📊 使用情况\n") card.WriteString(fmt.Sprintf("- **已发券数**: %d张\n", req.UsedStock)) card.WriteString(fmt.Sprintf("- **已发券金额**: %d元\n", req.UsedBudget)) card.WriteString(fmt.Sprintf("- **剩余库存**: %d张\n", req.AvailableStock)) card.WriteString(fmt.Sprintf("- **剩余预算**: %d元\n", req.RemainingBudget)) card.WriteString("\n") // 使用率 stockUsageRate := float64(req.UsedStock) / float64(req.AllStock) * 100 card.WriteString("#### 📈 使用率\n") card.WriteString(fmt.Sprintf("- **使用率**: %.1f%%\n", stockUsageRate)) return card.String() }