diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index c11be43e6..f6f905365 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -1244,14 +1244,15 @@ func RefreshAllMatterOrderStatus() (err error) { err = dao.GetRows(db, &goodsList, sql, sqlParams) for _, v := range goodsList { var ( - goodsList2 []*model.GoodsOrder - finishedCount int + goodsList2 []*model.GoodsOrder + cancelCount int + deliveringCount int ) sql2 := "SELECT * FROM goods_order WHERE vendor_order_id LIKE ? OR vendor_order_id LIKE ? AND vendor_id = ? AND eclp_out_id <> '' AND LENGTH(vendor_order_id) = 16" sqlParams2 := []interface{}{v.VendorOrderID + "0%", v.VendorOrderID + "1%", model.VendorIDJX} err = dao.GetRows(db, &goodsList2, sql2, sqlParams2) for _, vv := range goodsList2 { - if vv.Status != model.OrderStatusFinished { + if vv.Status < model.OrderStatusFinished { queryOrderStatus, _ := api.JdEclpAPI.QueryOrderStatus(vv.EclpOutID) if len(queryOrderStatus.OrderStatusList) > 0 { if queryOrderStatus.OrderStatusList[len(queryOrderStatus.OrderStatusList)-1].SoStatusCode == jdeclpapi.SoStatusCode10034 { @@ -1264,26 +1265,31 @@ func RefreshAllMatterOrderStatus() (err error) { }() vv.Status = model.OrderStatusFinished dao.UpdateEntity(db, vv, "Status") - finishedCount++ dao.Commit(db) + } else { + deliveringCount++ } } - } else { - finishedCount++ + } else if vv.Status == model.OrderStatusCanceled { + cancelCount++ } } - if finishedCount == len(goodsList2) { - dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db) - panic(r) - } - }() + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + if deliveringCount == 0 { v.Status = model.OrderStatusFinished - dao.UpdateEntity(db, v, "Status") - dao.Commit(db) + } else { + if cancelCount == len(goodsList2) { + v.Status = model.OrderStatusCanceled + } } + dao.UpdateEntity(db, v, "Status") + dao.Commit(db) } return err }