From 54d4ad2fb0729aac552381edbf9e9b49d0dd4eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Wed, 30 Mar 2022 18:41:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=9C=82=E9=B8=9F=E5=9B=9E=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/delivery/fn/waybill.go | 42 ++++---- controllers/fn_callback.go | 136 ++++++++++++++++++------ routers/router.go | 2 +- 3 files changed, 129 insertions(+), 51 deletions(-) diff --git a/business/partner/delivery/fn/waybill.go b/business/partner/delivery/fn/waybill.go index a949dd6a9..ffd26e9f0 100644 --- a/business/partner/delivery/fn/waybill.go +++ b/business/partner/delivery/fn/waybill.go @@ -3,8 +3,6 @@ package fn import ( "fmt" "git.rosy.net.cn/baseapi/utils" - "github.com/astaxie/beego/client/orm" - beego "github.com/astaxie/beego/server/web" "strconv" "strings" @@ -154,22 +152,6 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee return bill, err } -func (c *DeliveryHandler) getMTPSShopID(order *model.GoodsOrder, db *dao.DaoDB) (retVal string, err error) { - saleStoreID := jxutils.GetSaleStoreIDFromOrder(order) - storeCourierList, err2 := dao.GetOpenedStoreCouriersByStoreID(db, saleStoreID, model.VendorIDFengNiao) - if err = err2; err != nil && err != orm.ErrNoRows { - return "", err - } - if len(storeCourierList) == 0 { - return "", partner.ErrStoreHaveNoCourier - } - retVal = storeCourierList[0].VendorStoreID - if beego.BConfig.RunMode == "dev" { - retVal = "test_0001" - } - return retVal, nil -} - // 预下单获取配送费 func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInfo *partner.WaybillFeeInfo, err error) { preCreateOrder := &fnpsapi.PreCreateOrder{ @@ -204,6 +186,7 @@ func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInf return deliveryFeeInfo, err } +// 订单状态 func OnWaybillMsg(msg map[string]interface{}) (resp *fnpsapi.CallbackResponse) { order := &model.Waybill{ VendorWaybillID: utils.Interface2String(msg["open_order_code"]), @@ -253,6 +236,29 @@ func OnWaybillMsg(msg map[string]interface{}) (resp *fnpsapi.CallbackResponse) { return fnpsapi.Err2CallbackResponse(nil, "") } +// 异常报备 +func OnWaybillExceptFn(msg *fnpsapi.AbnormalReportNotify) (retVal *fnpsapi.CallbackResponse) { + return curDeliveryHandler.OnWaybillExcept(msg) +} + +func (c *DeliveryHandler) OnWaybillExcept(msg *fnpsapi.AbnormalReportNotify) (retVal *fnpsapi.CallbackResponse) { + jxutils.CallMsgHandler(func() { + order := &model.Waybill{ + VendorWaybillID: msg.PartnerOrderCode, + VendorWaybillID2: utils.Int64ToStr(msg.OrderId), + WaybillVendorID: model.VendorIDFengNiao, + CourierName: string(msg.CarrierDriverId), + CourierMobile: "", + Status: model.WaybillStatusUnknown, // todo 这里要再确定一下是否只要收到订单异常消息就只简单当成一个消息 + VendorStatus: msg.AbnormalCode, + StatusTime: utils.Timestamp2Time(msg.AbnormalReportTime), + } + order.VendorOrderID, order.OrderVendorID = jxutils.SplitUniversalOrderID(msg.PartnerOrderCode) + retVal = fnpsapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), "fn OnWaybillExcept") + }, jxutils.ComposeUniversalOrderID(msg.PartnerOrderCode, model.VendorIDFengNiao)) + return retVal +} + // 查询订单配送费 func GetDesiredFee(vendorOrderID string) (desiredFee int64) { if result, err := api.FnAPI.QueryOrder(vendorOrderID); err == nil { diff --git a/controllers/fn_callback.go b/controllers/fn_callback.go index 3fef7c05b..d666acf5a 100644 --- a/controllers/fn_callback.go +++ b/controllers/fn_callback.go @@ -3,48 +3,120 @@ package controllers import ( "fmt" "git.rosy.net.cn/baseapi/platformapi/fnpsapi" + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/partner/delivery/fn" "git.rosy.net.cn/jx-callback/globals/api" "github.com/astaxie/beego/server/web" + "net/http" ) type FnController struct { web.Controller } -func (c *FnController) Msg() { - //if c.Ctx.Input.Method() == http.MethodPost { - fmt.Println("开始回调==========================") - msg, callbackResponse := api.FnAPI.GetChainstoreStatusNotify(c.Ctx.Request) - fmt.Println("开始回调==========================msg", msg) - fmt.Println("开始回调==========================callbackResponse", callbackResponse) - if callbackResponse.Code != 1 { +// 订单状态 +func (c *FnController) FnOrderStatus() { + if c.Ctx.Input.Method() == http.MethodPost { + fmt.Println("开始回调订单状态==========================") + msg, callbackResponse := api.FnAPI.GetChainstoreStatusNotify(c.Ctx.Request) + fmt.Println("开始回调订单状态==========================msg", msg) + fmt.Println("开始回调订单状态==========================callbackResponse", callbackResponse) + if callbackResponse.Code != 1 { + c.Data["json"] = callbackResponse + c.ServeJSON() + return + } + + // 订单回调 + if msg["callback_business_type"] != nil { + callbackResponse = fn.OnWaybillMsg(msg) + } + c.Data["json"] = callbackResponse c.ServeJSON() - return + } else { + c.Abort("404") } - - switch msg["callback_business_type"] { - case fnpsapi.ChainstoreStatus: // 门店状态变更回调 - callbackResponse = fn.OnStoreStatus(msg) - break - case fnpsapi.AbnormalStatus: // 异常报备回调 - case fnpsapi.CookingFinishStatus: // 商户出餐回调 - break - case fnpsapi.ChainstoreServiceStatus: // 门店采购服务变更回调 - break - case fnpsapi.NoServiceStatus: // 城市屏蔽区域调整回调通知 - break - case fnpsapi.OrderStatus: // 订单状态回调 - fn.OnWaybillMsg(msg) - break - default: - break - } - - c.Data["json"] = callbackResponse - c.ServeJSON() - //} else { - c.Abort("404") - //} } + +// 异常回调 +func (c *FnController) FnAbnormal() { + if c.Ctx.Input.Method() == http.MethodPost { + fmt.Println("开始回调异常回调==========================") + msg, callbackResponse := api.FnAPI.GetChainstoreStatusNotify(c.Ctx.Request) + fmt.Println("开始回调异常回调==========================msg", msg) + fmt.Println("开始回调异常回调==========================callbackResponse", callbackResponse) + if callbackResponse.Code != 1 { + c.Data["json"] = callbackResponse + c.ServeJSON() + return + } + + // 订单回调 + if msg["callback_business_type"] != nil { + data := &fnpsapi.AbnormalReportNotify{} + if err := utils.Map2StructByJson(msg, data, true); err != nil { + callbackResponse = &fnpsapi.CallbackResponse{Code: -1} + c.Data["json"] = callbackResponse + c.ServeJSON() + return + } + callbackResponse = fn.OnWaybillExceptFn(data) + } + + c.Data["json"] = callbackResponse + c.ServeJSON() + } else { + c.Abort("404") + } +} + +// 门店回掉 +func (c *FnController) FnStoreStatus() { + if c.Ctx.Input.Method() == http.MethodPost { + fmt.Println("开始回调门店回掉==========================") + msg, callbackResponse := api.FnAPI.GetChainstoreStatusNotify(c.Ctx.Request) + fmt.Println("开始回调门店回掉==========================msg", msg) + fmt.Println("开始回调门店回掉==========================callbackResponse", callbackResponse) + if callbackResponse.Code != 1 { + c.Data["json"] = callbackResponse + c.ServeJSON() + return + } + + if msg["callback_business_type"] != nil { + callbackResponse = fn.OnStoreStatus(msg) + } + + c.Data["json"] = callbackResponse + c.ServeJSON() + } else { + c.Abort("404") + } +} + +// +//switch msg["callback_business_type"] { +//case fnpsapi.ChainstoreStatus: // 门店状态变更回调 +//callbackResponse = fn.OnStoreStatus(msg) +//break +//case fnpsapi.AbnormalStatus: // 异常报备回调 +//data := &fnpsapi.AbnormalReportNotify{} +//if err := utils.Map2StructByJson(msg, data, true); err != nil { +//callbackResponse = &fnpsapi.CallbackResponse{Code: -1} +//break +//} +//callbackResponse = fn.OnWaybillExceptFn(data) +//break +//case fnpsapi.CookingFinishStatus: // 商户出餐回调 +//break +//case fnpsapi.ChainstoreServiceStatus: // 门店采购服务变更回调 +//break +//case fnpsapi.NoServiceStatus: // 城市屏蔽区域调整回调通知 +//break +//case fnpsapi.OrderStatus: // 订单状态回调 +//callbackResponse = fn.OnWaybillMsg(msg) +//break +//default: +//break +//} diff --git a/routers/router.go b/routers/router.go index 0aa9229e1..0fb7583e2 100644 --- a/routers/router.go +++ b/routers/router.go @@ -176,7 +176,7 @@ func init() { web.AutoRouter(&controllers.FnController{}) web.AutoRouter(&controllers.KnowUploadController{}) web.AutoRouter(&controllers.AliApiController{}) - web.AutoRouter(&controllers.BiddingController{}) + //web.AutoRouter(&controllers.BiddingController{}) // 如下都是用于检测存活的空接口 web.Any("/", func(ctx *beecontext.Context) {