fix: 增加空值检查和优化订单查询逻辑

This commit is contained in:
renzhiyuan 2026-01-09 11:00:39 +08:00
parent cda8e1fc6e
commit 89323d3250
3 changed files with 46 additions and 7 deletions

View File

@ -17,6 +17,9 @@ func SetTaskRecExt(requireData *entitys.RequireData, rec *entitys.Recognize) {
}
func GetTaskRecExt(rec *entitys.Recognize) (ext entitys.TaskExt, err error) {
if rec == nil {
return
}
err = json.Unmarshal(rec.Ext, &ext)
return ext, err
}

View File

@ -4,16 +4,31 @@ import (
config2 "ai_scheduler/internal/config"
"ai_scheduler/internal/entitys"
"context"
"strings"
"testing"
)
func Test_task(t *testing.T) {
c := NewZltxOrderDetailTool(config2.ToolConfig{}, nil)
c := NewZltxOrderDetailTool(config2.ToolConfig{
BaseURL: "https://revcl.1688sup.com/api/admin/direct/ai/%s",
AddURL: "https://revcl.1688sup.com/api/admin/direct/log/%s/%s",
}, nil)
ch := make(chan entitys.Response, 10000)
err :=
c.Execute(context.Background(), &entitys.Recognize{
Match: &entitys.Match{
Parameters: `{"order_number": 859393216068067329}`,
Parameters: `{"order_number": 864086822064234497}`,
},
Ext: []byte(`{"auth":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ1c2VyQ2VudGVyIiwiZXhwIjoxNzY3OTM0MTg1LCJuYmYiOjE3Njc5MjMzODUsImp0aSI6IjE3OSIsIlBob25lIjoiMTUwMDA0NTAxNTUiLCJVc2VyTmFtZSI6IjE1MDAwNDUwMTU1IiwiUmVhbE5hbWUiOiLliJjlvanlhpsiLCJBY2NvdW50VHlwZSI6MSwiR3JvdXBDb2RlcyI6IlZDTF9BRE1JTixWQ0xfU1lTVEVNLENSTV9BRE1JTixMU1hERFNfQURNSU4sTFNYRERTX1NZU1RFTSxNQVJLRVRJTkdTQUFTX1NVUEVSQURNSU4sU1RBVElTVElDQUxTWVNURU1fQURNSU4sUEhZU0lDQUxHT09EU19BRE1JTixNQVJLRVRJTkdTWVNURU1fU1VQRVIsUkVQT1JUQ0VOVEVSX0FETUlOLE1PTklUT1JfTUFESU4sWkxUWF9BRE1JTixaTFRYX09QRVJBVEUiLCJEaW5nVXNlcklkIjoiMTcxMTkzNTg3NTAzMjk5MzUifQ.d9z0S1Ia-PFAxhGstT055Amt8PI09bUHxG0_lba4UwvSomiTNCD-5DFdMkbZHwiDTlhVdBjcd1mDYFRRZXWMPoSnanubMBnRnuvTi8csch5nz1L9oWNo-HFyBE3lMw9-UJ5j84gz228_kcBsvRATT1Ixs9bnuaN9CDNz20c524llDt10C3cc8wLGMin4jWEMF4RNrf2oBZOFAahRYSJNeBmutIwRSIP1pMIAaUy_IkMCyOwK8JzgMnHJGLwIH_nxR9XZXlAN0FmrmtWVkRA2YUKvoDX5a5BCYmDVNqUbi_ZNuRPJH87Ia7_-UoyJu8Yq79jX0Qgsm6qJ4rX2nauneg"}`),
UserContent: &entitys.RecognizeUserContent{Text: "订单查询864086822064234497\n"},
})
t.Log(err)
if err != nil {
t.Log(err)
}
var res strings.Builder
for v := range ch {
res.WriteString(v.Content)
}
t.Log(res)
}

View File

@ -84,8 +84,8 @@ type ZltxOrderDetailData struct {
// Execute 执行直连天下订单详情查询
func (w *ZltxOrderDetailTool) Execute(ctx context.Context, rec *entitys.Recognize) error {
var req ZltxOrderDetailRequest
if err := json.Unmarshal([]byte(rec.Match.Parameters), &req); err != nil {
var req = &ZltxOrderDetailRequest{}
if err := req.UnmarshalJSON([]byte(rec.Match.Parameters)); err != nil {
return fmt.Errorf("invalid zltxOrderDetail request: %w", err)
}
if req.OrderNumber == "" {
@ -96,6 +96,22 @@ func (w *ZltxOrderDetailTool) Execute(ctx context.Context, rec *entitys.Recogniz
return w.getZltxOrderDetail(rec, req.OrderNumber)
}
func (r *ZltxOrderDetailRequest) UnmarshalJSON(data []byte) error {
var tmp struct {
OrderNumber json.Number `json:"order_number"` // 使用 json.Number 保留原始格式
}
if err := json.Unmarshal(data, &tmp); err != nil {
return err
}
// 根据需要转换为 int64 或 string
if num, err := tmp.OrderNumber.Int64(); err == nil {
r.OrderNumber = num
} else {
r.OrderNumber = tmp.OrderNumber.String()
}
return nil
}
// getMockZltxOrderDetail 获取模拟直连天下订单详情数据
func (w *ZltxOrderDetailTool) getZltxOrderDetail(rec *entitys.Recognize, number interface{}) (err error) {
log.Infof("订单编号:%v,类型:%v")
@ -170,8 +186,13 @@ func (w *ZltxOrderDetailTool) getZltxOrderDetail(rec *entitys.Recognize, number
err = w.llm.ChatStream(context.TODO(), rec.Ch, []api.Message{
{
Role: "system",
Content: "你是一个订单日志助手。用户可能会提供订单日志,你需要分析订单日志,失败订单->分析失败原因,成功订单->找出整个日志的 Base64 编码的 JSON 数据的内容进行转换并反馈给我",
Role: "system",
Content: "你是一个订单日志助手。用户可能会提供订单日志,你需要按以下规则处理:\n" +
"1. **先输出结论**:用<conclusion></conclusion>标签包裹关键结论如失败原因或Base64解码内容\n" +
"2. **再输出分析过程**:详细解释如何得出结论;\n" +
"3. **订单类型处理**\n" +
" - 失败订单:分析失败原因(如支付超时、库存不足等);\n" +
" - 成功订单提取日志中的Base64编码JSON数据解码后转换为用户可读的格式如表格或JSON。",
},
{
Role: "assistant",