diff --git a/business/partner/delivery/sfps/waybill.go b/business/partner/delivery/sfps/waybill.go index 090afb0b9..e90594724 100644 --- a/business/partner/delivery/sfps/waybill.go +++ b/business/partner/delivery/sfps/waybill.go @@ -154,20 +154,25 @@ func (d DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee i } delivery.OnWaybillCreated(bill) //todo 模拟新运单回调 - OnWaybillMsg(sfps2.UrlIndexRiderStatus, sfps2.RiderStatus{ - ShopId: utils.Str2Float64(sfps2.SFShopStoreID), - SFOrderID: sfOrderID, - ShopOrderID: order.VendorOrderID, - UrlIndex: sfps2.UrlIndexRiderStatus, - OperatorName: "", - OperatorPhone: "", - RiderLng: 0, - RiderLat: 0, - OrderStatus: sfps2.OrderStatusNewOrder, - StatusDesc: sfps2.OrderStatusNewOrderDesc, - SFUCode: "", - PushTime: int(time.Now().Unix()), - }) + if _, err = partner.CurOrderManager.LoadWaybill(sfOrderID, model.VendorIDSFPS); fmt.Sprintf("%s", err) == "找不到相应运单" { + resp := OnWaybillMsg(sfps2.UrlIndexRiderStatus, sfps2.RiderStatus{ + ShopId: utils.Str2Float64(sfps2.SFShopStoreID), + SFOrderID: sfOrderID, + ShopOrderID: order.VendorOrderID, + UrlIndex: sfps2.UrlIndexRiderStatus, + OperatorName: "", + OperatorPhone: "", + RiderLng: 0, + RiderLat: 0, + OrderStatus: sfps2.OrderStatusNewOrder, + StatusDesc: sfps2.OrderStatusNewOrderDesc, + SFUCode: "", + PushTime: int(time.Now().Unix()), + }) + if resp.ErrorCode != sfps2.SuccessCode { + err = fmt.Errorf("%v,%s", err, resp.ErrorMsg) + } + } return bill, err } @@ -301,7 +306,17 @@ func (c *DeliveryHandler) UpdateWaybillTip(ctx *jxcontext.Context, vendorOrgCode // OnWaybillMsg 配送状态更改回调 func OnWaybillMsg(urlIndex string, msg interface{}) (resp *sfps2.CallbackResponse) { order := GetWaybillByStatus(urlIndex, msg) - + //多次取消回调只取第一次 + tempStatus := utils.Str2Int(order.VendorStatus) + if tempStatus == sfps2.OrderStatusOrderCancel || tempStatus == sfps2.OrderStatusRiderCancel { + bill, err := partner.CurOrderManager.LoadWaybill(order.VendorWaybillID, model.VendorIDSFPS) + if err != nil { + return sfps2.Err2CallbackResponse(err) + } + if bill.Status == model.OrderStatusCanceled { + return sfps2.Err2CallbackResponse(nil) + } + } //获取实时订单信息 sfOrder, err := api.SfPsAPI.GetOrderStatus(order.VendorWaybillID) if err != nil { @@ -424,7 +439,7 @@ func OnWaybillExceptSF(msg *sfps2.RiderException) (retVal *sfps2.CallbackRespons func GetWaybillByStatus(urlIndex string, msg interface{}) *model.Waybill { waybill := &model.Waybill{} switch urlIndex { - case sfps2.UrlIndexRiderStatus, sfps2.UrlIndexSFCancel: + case sfps2.UrlIndexRiderStatus: retVal := msg.(sfps2.RiderStatus) waybill = &model.Waybill{ VendorWaybillID: retVal.SFOrderID, @@ -466,6 +481,20 @@ func GetWaybillByStatus(urlIndex string, msg interface{}) *model.Waybill { if retVal.PushTime == 0 { waybill.StatusTime = time.Now() } + case sfps2.UrlIndexSFCancel: + retVal := msg.(sfps2.SFCancel) + waybill = &model.Waybill{ + VendorWaybillID: retVal.SFOrderID, + WaybillVendorID: model.VendorIDSFPS, + VendorOrderID: retVal.ShopOrderID, + CourierName: retVal.OperatorName, + VendorStatus: utils.Float64ToStr(retVal.OrderStatus), + StatusTime: utils.Timestamp2Time(int64(retVal.PushTime)), + Remark: retVal.StatusDesc, + } + if retVal.PushTime == 0 { + waybill.StatusTime = time.Now() + } default: return nil } diff --git a/controllers/sfps_callback.go b/controllers/sfps_callback.go index 5c1617256..232355efc 100644 --- a/controllers/sfps_callback.go +++ b/controllers/sfps_callback.go @@ -1,8 +1,11 @@ package controllers import ( + "fmt" "net/http" + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/partner/delivery/sfps" "git.rosy.net.cn/jx-callback/globals/api" @@ -17,15 +20,19 @@ func (c *SFPSController) SfOrder() { if c.Ctx.Input.Method() == http.MethodPost { msg, callbackResponse := api.SfPsAPI.GetCallbackUrlIndex(c.Ctx.Request) if callbackResponse.ErrorCode == -1 { - c.Data["error_code"] = -1 + c.Data["data"] = -1 c.ServeJSON() return } // 订单回调 for k, v := range msg { callbackResponse = sfps.OnWaybillMsg(k, v) - c.Data["error_code"] = callbackResponse - c.ServeJSON() + c.Data["data"] = callbackResponse + fmt.Printf("SfOrder callbackResponse=%s", utils.Format4Output(callbackResponse, false)) + err := c.ServeJSON() + if err != nil { + fmt.Printf("serveJSON err=%v", err) + } } } else { c.Abort("404")