diff --git a/internal/biz/do/handle.go b/internal/biz/do/handle.go index 6001203..81c70b7 100644 --- a/internal/biz/do/handle.go +++ b/internal/biz/do/handle.go @@ -301,8 +301,8 @@ func (r *Handle) HandleBot(ctx context.Context, rec *entitys.Recognize, task *en } var detailPage string entitys.ResLog(rec.Ch, task.Index, "需求记录完成") - switch task.OutPutFormat { - case entitys.OutPutFormatMarkdown: + switch rec.OutPutScene { + case entitys.OutPutSceneDingTalk: // 构建跳转链接 detailPage = "[去查看](" + r.conf.Dingtalk.TableDemand.Url + ")" default: diff --git a/internal/biz/group_config.go b/internal/biz/group_config.go index f6a96eb..0c6dbbc 100644 --- a/internal/biz/group_config.go +++ b/internal/biz/group_config.go @@ -253,16 +253,17 @@ func (g *GroupConfigBiz) handleMatch(ctx context.Context, rec *entitys.Recognize break } } + rec.OutPutScene = entitys.OutPutSceneDingTalk if pointTask == nil || pointTask.Index == "other" { return g.otherTask(ctx, rec) } + switch constants.TaskType(pointTask.Type) { case constants.TaskTypeFunc: return g.handleTask(ctx, rec, pointTask) case constants.TaskTypeBot: return g.handle.HandleBot(ctx, rec, &entitys.Task{ - Index: pointTask.Index, - OutPutFormat: entitys.OutPutFormatMarkdown, + Index: pointTask.Index, }) case constants.TaskTypeReport: return g.handleReport(ctx, rec, pointTask, groupConfig) diff --git a/internal/entitys/bot.go b/internal/entitys/bot.go index 0496898..03b1a09 100644 --- a/internal/entitys/bot.go +++ b/internal/entitys/bot.go @@ -23,11 +23,5 @@ type DingTalkBot struct { } type Task struct { - Index string `json:"bot_index"` - OutPutFormat OutPutFormat `json:"out_put_format"` + Index string `json:"bot_index"` } - -type OutPutFormat string - -const OutPutFormatMarkdown OutPutFormat = "markdown" -const OutPutFormatHtml OutPutFormat = "html" diff --git a/internal/entitys/recognize.go b/internal/entitys/recognize.go index accee4a..57a92e0 100644 --- a/internal/entitys/recognize.go +++ b/internal/entitys/recognize.go @@ -14,8 +14,14 @@ type Recognize struct { Ch chan Response Match *Match Ext []byte + OutPutScene OutPutScene } +type OutPutScene string + +const OutPutSceneDingTalk OutPutScene = "markdown" +const OutPutFormatHtml OutPutScene = "html" + type TaskExt struct { Auth string `json:"auth"` Session string `json:"session"` diff --git a/internal/tools/zltx/zltx_order_detail.go b/internal/tools/zltx/zltx_order_detail.go index 19b4452..7546149 100644 --- a/internal/tools/zltx/zltx_order_detail.go +++ b/internal/tools/zltx/zltx_order_detail.go @@ -11,6 +11,8 @@ import ( "context" "encoding/json" "fmt" + "strings" + "time" "gitea.cdlsxd.cn/self-tools/l_request" "github.com/ollama/ollama/api" @@ -77,14 +79,74 @@ type ZltxOrderDetailRequest struct { OrderNumber interface{} `json:"order_number"` } +//type ZltxOrderDetailResponse struct { +// Code int `json:"code"` +// Error string `json:"error"` +// Data ZltxOrderDetailData `json:"data"` +// Mes string `json:"mes"` +//} + // ZltxOrderDetailResponse 直连天下订单详情响应 type ZltxOrderDetailResponse struct { - Code int `json:"code"` - Error string `json:"error"` - Data ZltxOrderDetailData `json:"data"` - Mes string `json:"mes"` + Code int `json:"code"` + Data Data `json:"data"` + Error string `json:"error"` } +type Data struct { + Direct *Direct `json:"direct"` + Order *Order `json:"order"` +} + +type Direct struct { + SerialNumber string `json:"serialNumber"` + OrderOrderNumber string `json:"orderOrderNumber"` + TerminalAccount string `json:"terminalAccount"` + OursProductId int `json:"oursProductId"` + OursProductName string `json:"oursProductName"` + Status int `json:"status"` + TradePrice float64 `json:"tradePrice"` + PlatformProductId int `json:"platformProductId"` + PlatformProductName string `json:"platformProductName"` + PlatformId int `json:"platformId"` + PlatformName string `json:"platformName"` + PlatformPrice float64 `json:"platformPrice"` + CreateTime int `json:"createTime"` + ExecuteTime int `json:"executeTime"` + Type int `json:"type"` + Reason string `json:"reason"` + ResellerId int `json:"resellerId"` + ResellerName string `json:"resellerName"` + Aftermarket int `json:"aftermarket"` + PurchasePrice float64 `json:"purchasePrice"` + NeedAi bool `json:"needAi"` + AiReason string `json:"aiReason"` +} + +type Order struct { + Id string `json:"id"` + ResellerId int `json:"resellerId"` + ResellerName string `json:"resellerName"` + Status int `json:"status"` + PayStatus int `json:"payStatus"` + CreateTime int `json:"createTime"` + PayTime int `json:"payTime"` + Type int `json:"type"` + Account string `json:"account"` + Quantity int `json:"quantity"` + Amount float64 `json:"amount"` + PayAmount float64 `json:"payAmount"` + ResellerOrderNumber string `json:"resellerOrderNumber"` + Price int `json:"price"` + NotifyTime int `json:"notifyTime"` + FinishTime int `json:"finishTime"` + Aftermarket int `json:"aftermarket"` + Remark string `json:"remark"` + OursProductId int `json:"oursProductId"` + OursProductName string `json:"oursProductName"` + OursProductPrice int `json:"oursProductPrice"` + TradePrice float64 `json:"tradePrice"` +} type ZltxOrderLogResponse struct { Code int `json:"code"` Error string `json:"error"` @@ -171,12 +233,15 @@ func (w *ZltxOrderDetailTool) getZltxOrderDetail(ctx context.Context, rec *entit if err = json.Unmarshal(res.Content, &resData); err != nil { return } - entitys.ResJson(rec.Ch, w.Name(), res.Text) - - if resData.Data.Direct != nil { + if rec.OutPutScene == entitys.OutPutSceneDingTalk { + entitys.ResJson(rec.Ch, w.Name(), resData.ToForm()) + } else { + entitys.ResJson(rec.Ch, w.Name(), res.Text) entitys.ResLoading(rec.Ch, w.Name(), "正在分析订单日志") + } + if resData.Data.Direct != nil { req = l_request.Request{ - Url: fmt.Sprintf(w.config.Tools.ZltxOrderDetail.AddURL, resData.Data.Direct["orderOrderNumber"].(string), resData.Data.Direct["serialNumber"].(string)), + Url: fmt.Sprintf(w.config.Tools.ZltxOrderDetail.AddURL, resData.Data.Direct.OrderOrderNumber, resData.Data.Direct.SerialNumber), Headers: map[string]string{ "Authorization": fmt.Sprintf("Bearer %s", token), }, @@ -230,3 +295,95 @@ func (w *ZltxOrderDetailTool) getZltxOrderDetail(ctx context.Context, rec *entit } return } + +func (z *ZltxOrderDetailResponse) ToForm() string { + var res strings.Builder + res.WriteString("**普通订单** \n") + res.WriteString("\n## 订单号:" + z.Data.Order.Id) + res.WriteString("\n## 分销商订单号:" + z.Data.Order.ResellerOrderNumber) + res.WriteString("\n## 分销商:" + z.Data.Order.ResellerName) + res.WriteString("\n## 订单商品:" + z.Data.Order.OursProductName) + res.WriteString("\n## 充值账号:" + z.Data.Order.Account) + res.WriteString("\n## 折扣价/原价:" + fmt.Sprintf("%.2f", z.Data.Order.TradePrice)) + res.WriteString("\n## 数量:" + fmt.Sprintf("%d", z.Data.Order.Quantity)) + res.WriteString("\n## 订单总额:" + fmt.Sprintf("%.2f", z.Data.Order.Amount)) + res.WriteString("\n## 订单状态:" + orderStatusMap(z.Data.Order.Status)) + res.WriteString("\n## 支付状态:" + orderPayStatusMap(z.Data.Order.Status)) + res.WriteString("\n## 创建时间:" + unixToDateFormat(z.Data.Order.CreateTime)) + res.WriteString("\n## 完成时间:" + unixToDateFormat(z.Data.Order.FinishTime)) + res.WriteString("\n---\n") + + res.WriteString("\n**充值流水** \n") + res.WriteString("\n## 订单号:" + z.Data.Direct.OrderOrderNumber) + res.WriteString("\n## 流水号:" + z.Data.Direct.SerialNumber) + res.WriteString("\n## 商品:" + z.Data.Direct.OursProductName) + res.WriteString("\n## 使用接口:" + z.Data.Direct.PlatformName) + res.WriteString("\n## 接口商品名称:" + z.Data.Direct.PlatformProductName) + res.WriteString("\n## 上游价:" + fmt.Sprintf("%.2f", z.Data.Direct.PlatformPrice)) + res.WriteString("\n## 下游价:" + fmt.Sprintf("%.2f", z.Data.Direct.TradePrice)) + res.WriteString("\n## 上游采购价:" + fmt.Sprintf("%.2f", z.Data.Direct.PurchasePrice)) + res.WriteString("\n## 充值账号:" + z.Data.Direct.TerminalAccount) + res.WriteString("\n## 创建时间:" + unixToDateFormat(z.Data.Direct.CreateTime)) + res.WriteString("\n## 处理时间:" + unixToDateFormat(z.Data.Direct.ExecuteTime)) + res.WriteString("\n## 状态:" + directStatusMap(z.Data.Direct.Status)) + res.WriteString("\n") + res.WriteString("\n") + res.WriteString("\n") + return res.String() +} + +func orderStatusMap(status int) string { + var OrderStatus = map[int]string{ + 0: "下单中", + 1: "订单完成", + 2: "部分成功", + 3: "充值处理中", + 4: "已暂停", + -1: "关闭订单", + -2: "全部失败", + } + if _, ok := OrderStatus[status]; !ok { + return "未知" + } + return OrderStatus[status] +} + +func unixToDateFormat(unix int) string { + return time.Unix(int64(unix), 0).Format("2006-01-02 15:04:05") +} +func orderPayStatusMap(status int) string { + var OrderPayStatus = map[int]string{ + 0: "未支付", + 1: "支付中", + 2: "支付成功", + 3: "退款中", + 4: "全部退款", + 5: "部分退款", + -1: "支付失败", + -2: "退款失败", + } + if _, ok := OrderPayStatus[status]; !ok { + return "未知" + } + return OrderPayStatus[status] +} + +func directStatusMap(status int) string { + var DirectStatus = map[int]string{ + 0: "待充值", + 1: "充值成功", + 2: "充值中", + -1: "充值失败", + -2: "失败重试", + -98: "下单异常", + -99: "查询异常", + -6: "手动失败", + -5: "手动重试", + -4: "叠加卡单", + -3: "卡单", + } + if _, ok := DirectStatus[status]; !ok { + return "未知" + } + return DirectStatus[status] +}