71 lines
2.2 KiB
Go
71 lines
2.2 KiB
Go
package financewithdrawal
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"strings"
|
||
"time"
|
||
|
||
"hyapp/pkg/dingtalkrobot"
|
||
)
|
||
|
||
type dingTalkNotifier struct {
|
||
client *dingtalkrobot.Client
|
||
}
|
||
|
||
// NewDingTalkNotifier 创建用户提现申请通知器;nil client 表示当前环境不启用提醒。
|
||
func NewDingTalkNotifier(client *dingtalkrobot.Client) Notifier {
|
||
if client == nil {
|
||
return nil
|
||
}
|
||
return &dingTalkNotifier{client: client}
|
||
}
|
||
|
||
func (n *dingTalkNotifier) NotifyApplicationCreated(ctx context.Context, application Application) error {
|
||
if n == nil || n.client == nil {
|
||
return nil
|
||
}
|
||
return n.client.SendMarkdown(ctx, dingtalkrobot.MarkdownMessage{
|
||
Title: "用户提现申请待审核",
|
||
Text: withdrawalApplicationCreatedMarkdown(application),
|
||
})
|
||
}
|
||
|
||
func withdrawalApplicationCreatedMarkdown(application Application) string {
|
||
return strings.Join([]string{
|
||
"### 用户提现申请待审核",
|
||
"",
|
||
fmt.Sprintf("- 申请ID:%d", application.ID),
|
||
fmt.Sprintf("- APP:%s", markdownValue(application.AppCode)),
|
||
fmt.Sprintf("- 用户ID:%d", application.UserID),
|
||
fmt.Sprintf("- 工资资产:%s", markdownValue(application.SalaryAssetType)),
|
||
fmt.Sprintf("- 提现金额:$ %s", markdownValue(application.WithdrawAmount)),
|
||
fmt.Sprintf("- 提现方式:%s", markdownValue(application.WithdrawMethod)),
|
||
fmt.Sprintf("- 提现地址:%s", markdownValue(application.WithdrawAddress)),
|
||
fmt.Sprintf("- 冻结交易:%s", markdownValue(application.FreezeTransactionID)),
|
||
fmt.Sprintf("- 申请时间:%s", markdownValue(formatNotifyMillis(application.CreatedAtMS))),
|
||
"- 后台地址:https://admin-acc.global-interaction.com/finance/",
|
||
}, "\n")
|
||
}
|
||
|
||
func formatNotifyMillis(value int64) string {
|
||
if value <= 0 {
|
||
return "-"
|
||
}
|
||
// 财务人员按北京时间处理审核;数据库和接口仍保留 Unix 毫秒作为事实时间。
|
||
return time.UnixMilli(value).In(time.FixedZone("UTC+8", 8*60*60)).Format("2006-01-02 15:04:05")
|
||
}
|
||
|
||
func markdownValue(value string) string {
|
||
value = strings.TrimSpace(value)
|
||
if value == "" {
|
||
return "-"
|
||
}
|
||
if len([]rune(value)) > 240 {
|
||
runes := []rune(value)
|
||
value = string(runes[:240]) + "..."
|
||
}
|
||
replacer := strings.NewReplacer("\r", " ", "\n", " ", "\t", " ")
|
||
return replacer.Replace(value)
|
||
}
|