diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 4aab40394..a9583766d 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -1234,3 +1234,13 @@ func GetOrdersForJxPay(db *DaoDB, finishTimeBegin, finishTimeEnd time.Time) (goo err = GetRows(db, &goods, sql, sqlParams...) return goods, err } + +func GetWaybills(db *DaoDB, vendorOrderID string) (waybills []*model.Waybill, err error) { + sql := `SELECT * + FROM waybill + WHERE vendor_order_id = ? + ` + sqlParams := []interface{}{vendorOrderID} + err = GetRows(db, &waybills, sql, sqlParams) + return waybills, err +} diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index b739e88c0..df3aeff44 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -1238,60 +1238,92 @@ func RefreshAllMatterOrderStatus() (err error) { goodsList []*model.GoodsOrder realTime time.Time ) - realTime = time.Now().AddDate(0, 0, -3) + realTime = time.Now().AddDate(0, 0, -7) + //有分包的主订单 sql := ` - SELECT * FROM goods_order WHERE store_id = 666666 AND order_created_at >= ? AND status <> ? AND vendor_id = ? AND eclp_out_id = '' AND LENGTH(vendor_order_id) = 14 + SELECT * FROM goods_order WHERE store_id = 666666 AND order_created_at >= ? AND status <> ? AND vendor_id = ? AND LENGTH(vendor_order_id) = 14 ` sqlParams := []interface{}{realTime, model.OrderStatusFinished, model.VendorIDJX} err = dao.GetRows(db, &goodsList, sql, sqlParams) for _, v := range goodsList { - var ( - 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 { - queryOrderStatus, _ := api.JdEclpAPI.QueryOrderStatus(vv.EclpOutID) - if len(queryOrderStatus.OrderStatusList) > 0 { - if queryOrderStatus.OrderStatusList[len(queryOrderStatus.OrderStatusList)-1].SoStatusCode == jdeclpapi.SoStatusCode10034 { - dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db) - panic(r) + if v.EclpOutID == "" { + var ( + 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 { + queryOrderStatus, _ := api.JdEclpAPI.QueryOrderStatus(vv.EclpOutID) + if len(queryOrderStatus.OrderStatusList) > 0 { + if queryOrderStatus.OrderStatusList[len(queryOrderStatus.OrderStatusList)-1].SoStatusCode == jdeclpapi.SoStatusCode10034 { + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + vv.Status = model.OrderStatusFinished + dao.UpdateEntity(db, vv, "Status") + waybills, err := dao.GetWaybills(db, vv.VendorOrderID) + if err == nil && len(waybills) > 0 { + waybills[0].Status = model.WaybillStatusDelivered + dao.UpdateEntity(db, waybills[0], "Status") } - }() - vv.Status = model.OrderStatusFinished - dao.UpdateEntity(db, vv, "Status") - dao.Commit(db) - } else { - deliveringCount++ + dao.Commit(db) + changeOrderStatus(vv.VendorOrderID, model.OrderStatusFinished, "") + } else { + deliveringCount++ + } } + } else if vv.Status == model.OrderStatusCanceled { + cancelCount++ } - } else if vv.Status == model.OrderStatusCanceled { - cancelCount++ } - } - 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 + } else { + if cancelCount == len(goodsList2) { + v.Status = model.OrderStatusCanceled + } } - }() - if deliveringCount == 0 { - v.Status = model.OrderStatusFinished + dao.UpdateEntity(db, v, "Status") + dao.Commit(db) + changeOrderStatus(v.VendorOrderID, v.Status, "") } else { - if cancelCount == len(goodsList2) { - v.Status = model.OrderStatusCanceled + queryOrderStatus, _ := api.JdEclpAPI.QueryOrderStatus(v.EclpOutID) + if len(queryOrderStatus.OrderStatusList) > 0 { + if queryOrderStatus.OrderStatusList[len(queryOrderStatus.OrderStatusList)-1].SoStatusCode == jdeclpapi.SoStatusCode10034 { + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + v.Status = model.OrderStatusFinished + dao.UpdateEntity(db, v, "Status") + waybills, err := dao.GetWaybills(db, v.VendorOrderID) + if err == nil && len(waybills) > 0 { + waybills[0].Status = model.WaybillStatusDelivered + dao.UpdateEntity(db, waybills[0], "Status") + } + dao.Commit(db) + changeOrderStatus(v.VendorOrderID, model.OrderStatusFinished, "") + } } } - dao.UpdateEntity(db, v, "Status") - dao.Commit(db) } return err } @@ -1350,7 +1382,13 @@ func GetMatterOrderStatus(ctx *jxcontext.Context, vendorOrderID string) (result }() order.Status = model.OrderStatusFinished dao.UpdateEntity(db, order, "Status") + waybills, err := dao.GetWaybills(db, vendorOrderID) + if err == nil && len(waybills) > 0 { + waybills[0].Status = model.WaybillStatusDelivered + dao.UpdateEntity(db, waybills[0], "Status") + } dao.Commit(db) + changeOrderStatus(vendorOrderID, model.OrderStatusFinished, "") } } if len(getTrackMessagePlusByOrderResult.ResultData) > 0 { @@ -1368,9 +1406,7 @@ func GetMatterOrderStatus(ctx *jxcontext.Context, vendorOrderID string) (result break } } - sql := "SELECT * FROM waybill WHERE vendor_order_id = ?" - sqlParams := []interface{}{vendorOrderID} - err = dao.GetRows(db, &waybills, sql, sqlParams) + waybills, err = dao.GetWaybills(db, vendorOrderID) if len(waybills) > 0 { waybills[0].VendorWaybillID = waybillCode waybills[0].CourierName = cName