From 0cb34fe0893f19531a92e77386126c5104d01323 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sun, 22 Jul 2018 13:45:16 +0800 Subject: [PATCH] - all call CallFuncLogError add order info - callLegacyMsgHandler, callNewMsgHandler and generateLegacyJxOrder config - call legacy lefted msg handler in new process(elm urge order and bad comment on jd) --- business/controller/controller.go | 2 +- business/controller/elm/order.go | 27 +++------- business/controller/jd/order.go | 39 ++++++-------- business/controller/order.go | 12 ++--- business/controller/waybill.go | 4 +- business/scheduler/defsch/defsch.go | 52 ++++++++++-------- business/scheduler/scheduler.go | 82 +++++++++++++++++++++++++++-- conf/app.conf | 8 +-- controllers/dada_order.go | 16 +++--- controllers/elm_order.go | 16 +++--- controllers/jd_order.go | 32 ++++++----- controllers/mtps_order.go | 32 ++++++----- globals/db/db.go | 2 +- globals/globals.go | 16 +++--- 14 files changed, 213 insertions(+), 127 deletions(-) diff --git a/business/controller/controller.go b/business/controller/controller.go index c7533a790..bc25ba1a8 100644 --- a/business/controller/controller.go +++ b/business/controller/controller.go @@ -41,7 +41,7 @@ func addOrderOrWaybillStatus(status *model.OrderStatus, db orm.Ormer) (isDuplica utils.CallFuncLogError(func() error { _, err = db.Update(status, "DuplicatedCount") return err - }, "addOrderOrWaybillStatus update DuplicatedCount") + }, "addOrderOrWaybillStatus update DuplicatedCount, status:%v", status) } } if err != nil { diff --git a/business/controller/elm/order.go b/business/controller/elm/order.go index ee2f377ab..b5cb2add9 100644 --- a/business/controller/elm/order.go +++ b/business/controller/elm/order.go @@ -15,6 +15,7 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/scheduler" + "git.rosy.net.cn/jx-callback/legacy/freshfood" ) const ( @@ -117,7 +118,7 @@ func (c *OrderController) onOrderCancelRefundMsg(msg *elmapi.CallbackOrderCancel return elmapi.Err2CallbackResponse(controller.OrderManager.OnOrderStatusChanged(status), status.VendorStatus) } -func (c *OrderController) getOrderInfo(orderID string) (order *model.GoodsOrder, err error) { +func (c *OrderController) GetOrder(orderID string) (order *model.GoodsOrder, err error) { result, err := api.ElmAPI.GetOrder(orderID) if err == nil { phoneList := result["phoneList"].([]interface{}) @@ -180,7 +181,7 @@ func (c *OrderController) getOrderInfo(orderID string) (order *model.GoodsOrder, // func (c *OrderController) onOrderNew(msg map[string]interface{}) (response *elmapi.CallbackResponse) { // todo 这里应该可以直接用msg里的内容,而不用再次去查 - order, err := c.getOrderInfo(msg["orderId"].(string)) + order, err := c.GetOrder(msg["orderId"].(string)) if err == nil { order.VendorStatus = c.stateAndType2Str(msg["status"].(string), elmapi.MsgTypeOrderValid) order.Status = model.OrderStatusNew @@ -203,6 +204,9 @@ func (c *OrderController) onOrderUserUrgeOrder(msg *elmapi.CallbackOrderUrgeMsg) VendorStatus: utils.Int2Str(msg.MsgType), StatusTime: utils.Timestamp2Time(msg.UpdateTime), } + if globals.ReallyCallPlatformAPI { + freshfood.FreshFoodAPI.ELMClientUrgeOrder(msg.OrderID) + } return elmapi.Err2CallbackResponse(controller.OrderManager.OnOrderStatusChanged(status), status.VendorStatus) } @@ -224,9 +228,6 @@ func (c *OrderController) spliltCompositeState(compositeState string) (state str // PurchasePlatformHandler func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) { - globals.SugarLogger.Infof("AcceptOrRefuseOrder order:%v", order) - return nil - if isAcceptIt { err = api.ElmAPI.ConfirmOrder(order.VendorOrderID) } else { @@ -238,30 +239,18 @@ func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI // 饿了么没有拣货这个状态,直接返回成功 // 真实流程中也不会调用这个方法,因为接收订单后状态会直接转移到已拣货 func (c *OrderController) PickedUpGoods(order *model.GoodsOrder) (err error) { - globals.SugarLogger.Infof("PickedUpGoods order:%v", order) - return nil - return nil } -func (c *OrderController) Swtich2SelfDeliver(vendorOrderID string) (err error) { - globals.SugarLogger.Infof("Swtich2SelfDeliver order:%v", vendorOrderID) - return nil - - return api.ElmAPI.DeliveryBySelfLite(vendorOrderID) +func (c *OrderController) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) { + return api.ElmAPI.DeliveryBySelfLite(order.VendorOrderID) } func (c *OrderController) SelfDeliverDelievering(order *model.GoodsOrder) (err error) { - globals.SugarLogger.Infof("SelfDeliverDelievering order:%v", order) - return nil - return api.ElmAPI.StartDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile) } func (c *OrderController) SelfDeliverDelievered(order *model.GoodsOrder) (err error) { - globals.SugarLogger.Infof("SelfDeliverDelievered order:%v", order) - return nil - return api.ElmAPI.CompleteDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile) } diff --git a/business/controller/jd/order.go b/business/controller/jd/order.go index 1b037f745..fa99f28f0 100644 --- a/business/controller/jd/order.go +++ b/business/controller/jd/order.go @@ -12,6 +12,7 @@ import ( "git.rosy.net.cn/jx-callback/business/scheduler" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" + "git.rosy.net.cn/jx-callback/legacy/freshfood" ) type OrderController struct { @@ -49,6 +50,11 @@ func (c *OrderController) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi status.Status = model.OrderStatusCanceled case jdapi.OrderStatusUserApplyCancel: status.Status = model.OrderStatusApplyCancel + case jdapi.OrderStatusAddComment, jdapi.OrderStatusModifyComment: + status.Status = model.OrderStatusUnknown + if globals.ReallyCallPlatformAPI { + freshfood.FreshFoodAPI.JDOrderComment(msg) + } default: status.Status = model.OrderStatusUnknown } @@ -61,12 +67,12 @@ func (c *OrderController) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi return retVal } -func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *model.GoodsOrder, err error) { - result, err := api.JdAPI.QuerySingleOrder(msg.BillID) +func (c *OrderController) GetOrder(orderID string) (order *model.GoodsOrder, err error) { + result, err := api.JdAPI.QuerySingleOrder(orderID) // globals.SugarLogger.Info(result) if err == nil { order = &model.GoodsOrder{ - VendorOrderID: msg.BillID, + VendorOrderID: orderID, VendorID: model.VendorIDJD, VendorStoreID: result["produceStationNo"].(string), StoreID: int(utils.Str2Int64WithDefault(utils.Interface2String(result["produceStationNoIsv"]), 0)), @@ -77,7 +83,7 @@ func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *mode CoordinateType: model.CoordinateTypeMars, BuyerComment: utils.FilterMb4(strings.Trim(utils.Interface2String(result["orderBuyerRemark"]), "\n\r\t ")), ExpectedDeliveredTime: utils.Str2TimeWithDefault(utils.Interface2String(result["orderPreEndDeliveryTime"]), utils.DefaultTimeValue), - VendorStatus: msg.StatusID, + VendorStatus: utils.Int64ToStr(utils.MustInterface2Int64(result["orderStatus"])), OrderSeq: int(utils.MustInterface2Int64(result["orderNum"])), StatusTime: utils.Str2Time(result["orderPurchaseTime"].(string)), OriginalData: utils.FilterMb4(string(utils.MustMarshal(result))), @@ -103,7 +109,7 @@ func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *mode for _, product2 := range result["product"].([]interface{}) { product := product2.(map[string]interface{}) sku := &model.OrderSku{ - VendorOrderID: msg.BillID, + VendorOrderID: orderID, VendorID: model.VendorIDJD, Count: int(utils.MustInterface2Int64(product["skuCount"])), SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(product["skuIdIsv"]), 0)), @@ -128,7 +134,7 @@ func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *mode // func (c *OrderController) onOrderNew(msg *jdapi.CallbackOrderMsg) (response *jdapi.CallbackResponse) { - order, err := c.getOrderInfo(msg) + order, err := c.GetOrder(msg.BillID) if err == nil { order.Status = model.OrderStatusNew err = controller.OrderManager.OnOrderNew(order) @@ -140,7 +146,7 @@ func (c *OrderController) onOrderNew(msg *jdapi.CallbackOrderMsg) (response *jda } func (c *OrderController) onOrderAdjust(msg *jdapi.CallbackOrderMsg) *jdapi.CallbackResponse { - order, err := c.getOrderInfo(msg) + order, err := c.GetOrder(msg.BillID) if err == nil { order.Status = model.OrderStatusAdjust err = controller.OrderManager.OnOrderAdjust(order) @@ -166,41 +172,26 @@ func (c *OrderController) callbackMsg2Status(msg *jdapi.CallbackOrderMsg) *model // PurchasePlatformHandler func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) { - globals.SugarLogger.Infof("AcceptOrRefuseOrder order:%v", order.VendorOrderID) - return nil - _, err = api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt) return err } func (c *OrderController) PickedUpGoods(order *model.GoodsOrder) (err error) { - globals.SugarLogger.Infof("PickedUpGoods order:%v", order) - return nil - _, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID) return c.translateOrderRelatedErr(err) } -func (c *OrderController) Swtich2SelfDeliver(vendorOrderID string) (err error) { - globals.SugarLogger.Infof("Swtich2SelfDeliver order:%v", vendorOrderID) - return nil - - _, err = api.JdAPI.ModifySellerDelivery(vendorOrderID) +func (c *OrderController) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) { + _, err = api.JdAPI.ModifySellerDelivery(order.VendorOrderID) return c.translateOrderRelatedErr(err) } func (c *OrderController) SelfDeliverDelievering(order *model.GoodsOrder) (err error) { - globals.SugarLogger.Infof("SelfDeliverDelievering order:%v", order) - return nil - _, err = api.JdAPI.OrderSerllerDelivery(order.VendorOrderID) return c.translateOrderRelatedErr(err) } func (c *OrderController) SelfDeliverDelievered(order *model.GoodsOrder) (err error) { - globals.SugarLogger.Infof("SelfDeliverDelievered order:%v", order) - return nil - _, err = api.JdAPI.DeliveryEndOrder(order.VendorOrderID) return err } diff --git a/business/controller/order.go b/business/controller/order.go index a90da385e..2cc9cf72f 100644 --- a/business/controller/order.go +++ b/business/controller/order.go @@ -60,14 +60,14 @@ func (c *OrderController) OnOrderAdjust(order *model.GoodsOrder) (err error) { err = utils.CallFuncLogError(func() error { _, err = db.Raw("DELETE FROM order_sku WHERE vendor_order_id = ? AND vendor_id = ?", order.VendorOrderID, order.VendorID).Exec() return err - }, "OnAdjustOrder delete order") + }, "OnAdjustOrder delete order, orderID:%s", order.VendorOrderID) if err != nil { return err } err = utils.CallFuncLogError(func() error { _, err = db.Raw("DELETE FROM goods_order WHERE vendor_order_id = ? AND vendor_id = ?", order.VendorOrderID, order.VendorID).Exec() return err - }, "OnAdjustOrder delete order_sku") + }, "OnAdjustOrder delete order_sku, orderID:%s", order.VendorOrderID) if err != nil { return err } @@ -82,7 +82,7 @@ func (c *OrderController) OnOrderStatusChanged(orderStatus *model.OrderStatus) ( isDuplicated, err := c.addOrderStatus(orderStatus, nil) if err == nil && !isDuplicated { err = scheduler.CurrentScheduler.OnOrderStatusChanged(orderStatus) - if globals.HandleLegacyJxOrder { + if globals.GenerateLegacyJxOrder { c.legacyJxOrderStatusChanged(orderStatus, nil) } } @@ -116,7 +116,7 @@ func (c *OrderController) saveOrder(order *model.GoodsOrder, isAdjust bool, db o baseapi.SugarLogger.Infof("insert order_sku error:%v", err) } else { db.Commit() - if globals.HandleLegacyJxOrder { + if globals.GenerateLegacyJxOrder { c.legacyWriteJxOrder(order, db, isAdjust) } } @@ -221,7 +221,7 @@ func (c *OrderController) addOrderStatus(orderStatus *model.OrderStatus, db orm. utils.CallFuncLogError(func() error { _, err = db.QueryTable("goods_order").Filter("vendor_order_id", orderStatus.VendorOrderID).Filter("vendor_id", orderStatus.VendorID).Update(params) return err - }, "update order") + }, "update order, status:%v", orderStatus) } return isDuplicated, err } @@ -249,6 +249,6 @@ func (c *OrderController) UpdateWaybillVendorID(bill *model.Waybill) (err error) utils.CallFuncLogError(func() error { _, err = db.QueryTable("goods_order").Filter("vendor_order_id", bill.VendorOrderID).Filter("vendor_id", bill.OrderVendorID).Update(params) return err - }, "update order") + }, "update order, bill%v", bill) return err } diff --git a/business/controller/waybill.go b/business/controller/waybill.go index cc1056d99..73ba80c78 100644 --- a/business/controller/waybill.go +++ b/business/controller/waybill.go @@ -84,7 +84,7 @@ func (w *WaybillController) OnWaybillStatusChanged(bill *model.Waybill) (err err weixinmsg.NotifyWaybillStatus(bill, order) } } - if globals.HandleLegacyJxOrder { + if globals.GenerateLegacyJxOrder { w.legacyWaybillStatusChanged(bill, db) } } @@ -106,7 +106,7 @@ func (w *WaybillController) addWaybillStatus(bill *model.Waybill, db orm.Ormer, utils.CallFuncLogError(func() error { _, err = db.QueryTable("waybill").Filter("vendor_waybill_id", bill.VendorWaybillID).Filter("waybill_vendor_id", bill.WaybillVendorID).Update(params) return err - }, "update waybill status") + }, "update waybill status, bill:%v", bill) } return isDuplicated, err } diff --git a/business/scheduler/defsch/defsch.go b/business/scheduler/defsch/defsch.go index 0cc8026e9..b7de32a6b 100644 --- a/business/scheduler/defsch/defsch.go +++ b/business/scheduler/defsch/defsch.go @@ -40,6 +40,7 @@ type DefScheduler struct { func init() { sch := &DefScheduler{} + sch.IsReallyCallPlatformAPI = globals.ReallyCallPlatformAPI sch.Init() scheduler.CurrentScheduler = sch sch.defWorkflowConfig = map[int]*scheduler.StatusActionConfig{ @@ -47,7 +48,7 @@ func init() { Timeout: 1 * time.Second, TimeoutAction: func(order *model.GoodsOrder) (err error) { _ = sch.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, order.ConsigneeMobile, jxutils.GetJxStoreIDFromOrder(order), nil, func(isAcceptIt bool) error { - return sch.GetPurchasePlatformFromVendorID(order.VendorID).AcceptOrRefuseOrder(order, isAcceptIt) + return sch.AcceptOrRefuseOrder(order, isAcceptIt) }) return nil }, @@ -55,7 +56,7 @@ func init() { model.OrderStatusAccepted: &scheduler.StatusActionConfig{ // 自动拣货 Timeout: time2AutoPickupMin, TimeoutAction: func(order *model.GoodsOrder) (err error) { - return sch.GetPurchasePlatformFromVendorID(order.VendorID).PickedUpGoods(order) + return sch.PickedUpGoods(order) }, }, model.OrderStatusFinishedPickup: &scheduler.StatusActionConfig{ // 尝试召唤更多物流 @@ -128,7 +129,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) { if savedOrderInfo.order.WaybillVendorID != model.VendorIDUnknown { globals.SugarLogger.Infof("OnWaybillStatusChanged multiple waybill created, bill:%v", bill) if bill.WaybillVendorID != bill.WaybillVendorID { - s.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID).CancelWaybill(bill) + s.CancelWaybill(bill) } } } else { @@ -161,12 +162,12 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) { } case model.WaybillStatusDelivering: if savedOrderInfo.order.VendorID != bill.WaybillVendorID { - s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).SelfDeliverDelievering(savedOrderInfo.order) + s.SelfDeliverDelievering(savedOrderInfo.order) } case model.WaybillStatusDelivered: s.removeWaybillFromMap(savedOrderInfo, bill) if savedOrderInfo.order.VendorID != bill.WaybillVendorID { - s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).SelfDeliverDelievered(savedOrderInfo.order) + s.SelfDeliverDelievered(savedOrderInfo.order) } } } @@ -198,11 +199,11 @@ func (s *DefScheduler) removeWaybillFromMap(savedOrderInfo *WatchOrderInfo, bill } func (s *DefScheduler) createWaybillOn3rdProviders(order *model.GoodsOrder, excludeBill *model.Waybill) (err error) { - globals.SugarLogger.Debugf("createWaybillOn3rdProviders, order:%v", order) + globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, excludeBill:%v", order.VendorOrderID, excludeBill) successCount := 0 - for k, v := range s.DeliveryPlatformHandlers { - if excludeBill == nil || k != excludeBill.WaybillVendorID { - if err = v.CreateWaybill(order); err == nil { + for vendorID := range s.DeliveryPlatformHandlers { + if excludeBill == nil || vendorID != excludeBill.WaybillVendorID { + if err = s.CreateWaybill(vendorID, order); err == nil { successCount++ } } @@ -210,28 +211,35 @@ func (s *DefScheduler) createWaybillOn3rdProviders(order *model.GoodsOrder, excl if successCount != 0 { return nil } + globals.SugarLogger.Warnf("createWaybillOn3rdProviders, orderID:%s all failed", order.VendorOrderID) return scheduler.ErrCanNotCreateAtLeastOneWaybill } func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) { - globals.SugarLogger.Debugf("cancelOtherWaybills, order:%v, bill:%v", savedOrderInfo.order, bill) + globals.SugarLogger.Debugf("cancelOtherWaybills, orderID:%s, bill:%v", savedOrderInfo.order.VendorOrderID, bill) for _, v := range savedOrderInfo.waybills { if (v.OrderVendorID != v.WaybillVendorID) && (bill == nil || !(v.WaybillVendorID == bill.WaybillVendorID && v.VendorWaybillID == bill.VendorWaybillID)) { - _ = s.GetDeliveryPlatformFromVendorID(v.WaybillVendorID).CancelWaybill(v) + s.CancelWaybill(v) } } if bill != nil && bill.WaybillVendorID != bill.OrderVendorID { - s.swtich2SelfDeliverWithRetry(bill, 2, 10*time.Second) + s.swtich2SelfDeliverWithRetry(savedOrderInfo.order, bill, 2, 10*time.Second) } return nil } -func (s *DefScheduler) swtich2SelfDeliverWithRetry(bill *model.Waybill, retryCount int, duration time.Duration) { +// todo 这个函数也可能有线程安全问题 +func (s *DefScheduler) swtich2SelfDeliverWithRetry(order *model.GoodsOrder, bill *model.Waybill, retryCount int, duration time.Duration) { + globals.SugarLogger.Debugf("Swtich2SelfDeliver orderID:%s", order.VendorOrderID) utils.CallFuncRetryAsync(func(index int) error { - err := s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).Swtich2SelfDeliver(bill.VendorOrderID) - if err != nil && index == 0 { - // 如果购买平台转商家自送失败,最终还是要取消3方物流 - s.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID).CancelWaybill(bill) + err := s.Swtich2SelfDeliver(order) + if err != nil { + globals.SugarLogger.Infof("Swtich2SelfDeliver failed, orderID:%s, error:%v", order.VendorOrderID, err) + if err != nil && index == 0 { + globals.SugarLogger.Warnf("Swtich2SelfDeliver finally failed, orderID:%s, error:%v, have to cancel bill:%v", order.VendorOrderID, err, bill) + // 如果购买平台转商家自送失败,最终还是要取消3方物流 + s.CancelWaybill(bill) + } } return err }, duration, retryCount) @@ -250,7 +258,7 @@ func (s *DefScheduler) loadSavedOrderFromMap(status *model.OrderStatus) *WatchOr s.orderMap.Store(universalOrderID, realSavedInfo) } else { realSavedInfo.dirty = 0 - globals.SugarLogger.Infof("order is dirty, vendorOrderID:%s, vendorID:%d, load it", status.VendorOrderID, status.VendorID) + globals.SugarLogger.Infof("order is dirty, orderID:%s, load it", status.VendorOrderID) } if order, err := s.CurOrderManager.LoadOrder(status.VendorOrderID, status.VendorID); err == nil { realSavedInfo.order = order @@ -264,7 +272,7 @@ func (s *DefScheduler) loadSavedOrderFromMap(status *model.OrderStatus) *WatchOr WaybillVendorID: model.VendorIDUnknown, } realSavedInfo.dirty = 1 - globals.SugarLogger.Infof("can not load order vendorOrderID:%s, vendorID:%d", status.VendorOrderID, status.VendorID) + globals.SugarLogger.Infof("can not load order orderID:%s", status.VendorOrderID) } } return realSavedInfo @@ -285,13 +293,13 @@ func (s *DefScheduler) stopTimer(savedOrderInfo *WatchOrderInfo) { } func (s *DefScheduler) resetTimer(savedOrderInfo *WatchOrderInfo, status int, beginTime time.Time, gap time.Duration) { - globals.SugarLogger.Debugf("resetTimer status:%v, orderid:%v", status, savedOrderInfo.order.VendorOrderID) + globals.SugarLogger.Debugf("resetTimer status:%v, orderID:%s", status, savedOrderInfo.order.VendorOrderID) if status >= savedOrderInfo.timerStatus { // 新设置的TIMER不能覆盖状态在其后的TIMER s.stopTimer(savedOrderInfo) config := s.mergeOrderStatusConfig(status, s.GetPurchasePlatformFromVendorID(savedOrderInfo.order.VendorID).GetStatusActionConfig(status)) if config != nil && config.TimeoutAction != nil { timeout := jxutils.GetRealTimeout(beginTime, config.Timeout, minTimeout) + gap - globals.SugarLogger.Debugf("resetTimer timeout:%v, orderid:%v", timeout, savedOrderInfo.order.VendorOrderID) + globals.SugarLogger.Debugf("resetTimer timeout:%v, orderID:%s", timeout, savedOrderInfo.order.VendorOrderID) savedOrderInfo.timerStatus = status savedOrderInfo.timer = time.AfterFunc(timeout, func() { config.TimeoutAction(savedOrderInfo.order) @@ -299,7 +307,7 @@ func (s *DefScheduler) resetTimer(savedOrderInfo *WatchOrderInfo, status int, be }) } } else { - globals.SugarLogger.Infof("resetTimer status revert, orderid:%s, current timer status:%d, status:%d", savedOrderInfo.order.VendorOrderID, savedOrderInfo.timerStatus, status) + globals.SugarLogger.Infof("resetTimer status revert, orderID:%s, current timer status:%d, status:%d", savedOrderInfo.order.VendorOrderID, savedOrderInfo.timerStatus, status) } } diff --git a/business/scheduler/scheduler.go b/business/scheduler/scheduler.go index 449a90029..9ec53d819 100644 --- a/business/scheduler/scheduler.go +++ b/business/scheduler/scheduler.go @@ -5,7 +5,9 @@ import ( "fmt" "time" + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/globals" ) var ( @@ -25,15 +27,15 @@ type StatusActionConfig struct { } type PurchasePlatformHandler interface { + GetOrder(vendorOrderID string) (order *model.GoodsOrder, err error) + GetStatusActionConfig(status int) *StatusActionConfig + AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) PickedUpGoods(order *model.GoodsOrder) (err error) - Swtich2SelfDeliver(vendorOrderID string) (err error) - + Swtich2SelfDeliver(order *model.GoodsOrder) (err error) SelfDeliverDelievering(order *model.GoodsOrder) (err error) SelfDeliverDelievered(order *model.GoodsOrder) (err error) - - GetStatusActionConfig(status int) *StatusActionConfig } type DeliveryPlatformHandler interface { @@ -43,7 +45,7 @@ type DeliveryPlatformHandler interface { type OrderManager interface { LoadOrder(vendorOrderID string, vendorID int) (order *model.GoodsOrder, err error) - OnOrderStatusChanged(status *model.OrderStatus) (err error) // 此消息是否使用还不确定 + // OnOrderStatusChanged(status *model.OrderStatus) (err error) // 此消息是否使用还不确定 UpdateWaybillVendorID(bill *model.Waybill) (err error) } @@ -64,6 +66,7 @@ type BaseScheduler struct { CurOrderManager OrderManager PurchasePlatformHandlers map[int]PurchasePlatformHandler DeliveryPlatformHandlers map[int]DeliveryPlatformHandler + IsReallyCallPlatformAPI bool } func (c *BaseScheduler) Init() { @@ -103,6 +106,75 @@ func (c *BaseScheduler) GetDeliveryPlatformFromVendorID(vendorID int) DeliveryPl return c.DeliveryPlatformHandlers[vendorID] } +func (c *BaseScheduler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) { + globals.SugarLogger.Infof("AcceptOrRefuseOrder orderID:%s, isAcceptIt:%t", order.VendorOrderID, isAcceptIt) + if c.IsReallyCallPlatformAPI { + err = utils.CallFuncLogError(func() error { + return c.GetPurchasePlatformFromVendorID(order.VendorID).AcceptOrRefuseOrder(order, isAcceptIt) + }, "AcceptOrRefuseOrder orderID:%s, isAcceptIt:%t", order.VendorOrderID, isAcceptIt) + } + return err +} +func (c *BaseScheduler) PickedUpGoods(order *model.GoodsOrder) (err error) { + globals.SugarLogger.Infof("PickedUpGoods orderID:%s", order.VendorOrderID) + if c.IsReallyCallPlatformAPI { + err = utils.CallFuncLogError(func() error { + return c.GetPurchasePlatformFromVendorID(order.VendorID).PickedUpGoods(order) + }, "PickedUpGoods orderID:%s", order.VendorOrderID) + } + return err +} + +func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) { + globals.SugarLogger.Infof("Swtich2SelfDeliver orderID:%s", order.VendorOrderID) + if c.IsReallyCallPlatformAPI { + err = utils.CallFuncLogError(func() error { + return c.GetPurchasePlatformFromVendorID(order.VendorID).Swtich2SelfDeliver(order) + }, "Swtich2SelfDeliver orderID:%s", order.VendorOrderID) + } + return err +} + +func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder) (err error) { + globals.SugarLogger.Infof("SelfDeliverDelievering orderID:%s", order.VendorOrderID) + if c.IsReallyCallPlatformAPI { + err = utils.CallFuncLogError(func() error { + return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievering(order) + }, "SelfDeliverDelievering orderID:%s", order.VendorOrderID) + } + return err +} + +func (c *BaseScheduler) SelfDeliverDelievered(order *model.GoodsOrder) (err error) { + globals.SugarLogger.Infof("SelfDeliverDelievered orderID:%s", order.VendorOrderID) + if c.IsReallyCallPlatformAPI { + err = utils.CallFuncLogError(func() error { + return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievered(order) + }, "SelfDeliverDelievered orderID:%s", order.VendorOrderID) + } + return err +} + +func (c *BaseScheduler) CreateWaybill(platformVendorID int, order *model.GoodsOrder) (err error) { + globals.SugarLogger.Infof("CreateWaybill orderID:%s, vendorID:%d", order.VendorOrderID, platformVendorID) + if c.IsReallyCallPlatformAPI { + err = utils.CallFuncLogError(func() error { + return c.GetDeliveryPlatformFromVendorID(platformVendorID).CreateWaybill(order) + }, "CreateWaybill orderID:%s, vendorID:%d", order.VendorOrderID, platformVendorID) + } + return err +} + +func (c *BaseScheduler) CancelWaybill(bill *model.Waybill) (err error) { + globals.SugarLogger.Infof("CancelWaybill bill:%v", bill) + if c.IsReallyCallPlatformAPI { + err = utils.CallFuncLogError(func() error { + return c.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID).CancelWaybill(bill) + }, "CancelWaybill bill:%v", bill) + } + return err +} + type BasePurchasePlatform struct { } diff --git a/conf/app.conf b/conf/app.conf index c5478143e..ac490f64f 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -14,9 +14,9 @@ dadaAppSecret = "30c2abbfe8a8780ad5aace46300c64b9" autonaviKey = "4427170f870af2110becb8852d36ab08" -callLegacy = true -callNew = true -handleLegacyJxOrder = true +callLegacyMsgHandler = true +callNewMsgHandler = true +generateLegacyJxOrder = true [dev] freshFoodServerURL = "http://portal.beta.jxc4.com" @@ -90,4 +90,4 @@ weixinSecret = "6bbbed1443cc062c20a015a64c07a531" dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8&loc=Local" -callLegacy = false +callLegacyMsgHandler = false diff --git a/controllers/dada_order.go b/controllers/dada_order.go index 47560f56b..0984b6e78 100644 --- a/controllers/dada_order.go +++ b/controllers/dada_order.go @@ -26,15 +26,19 @@ func (c *DadaOrderController) URLMapping() { func (c *DadaOrderController) OrderStatusChanged() { obj, callbackResponse := api.DadaAPI.GetOrderCallbackMsg(c.Ctx.Input.RequestBody) if callbackResponse == nil { - if globals.CallLegacy { + if globals.CallLegacyMsgHandler { cc := &controller.OrderController{} callbackResponse = cc.OrderStatusChanged(obj) } - if globals.CallNew { - utils.CallFuncAsync(func() { - cc2 := &dada.WaybillController{} - cc2.OnWaybillMsg(obj) - }) + if globals.CallNewMsgHandler { + cc2 := &dada.WaybillController{} + if globals.CallLegacyMsgHandler { + utils.CallFuncAsync(func() { + cc2.OnWaybillMsg(obj) + }) + } else { + callbackResponse = cc2.OnWaybillMsg(obj) + } } } if callbackResponse != nil && callbackResponse.Code != 200 { diff --git a/controllers/elm_order.go b/controllers/elm_order.go index 7ac416331..e33df6d00 100644 --- a/controllers/elm_order.go +++ b/controllers/elm_order.go @@ -28,15 +28,19 @@ func (c *ELMOrderController) URLMapping() { func (c *ELMOrderController) MsgPost() { obj, callbackResponse := api.ElmAPI.GetCallbackMsg(c.Ctx.Input.RequestBody) if callbackResponse == nil { - if globals.CallLegacy { + if globals.CallLegacyMsgHandler { cc := &controller.OrderController{} callbackResponse = cc.OrderMessage(obj) } - if globals.CallNew { - utils.CallFuncAsync(func() { - cc2 := &elm.Controller{} - cc2.OnCallbackMsg(obj) - }) + if globals.CallNewMsgHandler { + cc2 := &elm.Controller{} + if globals.CallLegacyMsgHandler { + utils.CallFuncAsync(func() { + cc2.OnCallbackMsg(obj) + }) + } else { + callbackResponse = cc2.OnCallbackMsg(obj) + } } } c.Data["json"] = callbackResponse diff --git a/controllers/jd_order.go b/controllers/jd_order.go index 159b85f6a..99955466c 100644 --- a/controllers/jd_order.go +++ b/controllers/jd_order.go @@ -37,15 +37,19 @@ func (c *JDOrderController) orderStatus(isCancelOrder bool) { obj, callbackResponse = api.JdAPI.GetOrderCallbackMsg(c.Ctx.Input.RequestBody) } if callbackResponse == nil { - if globals.CallLegacy { + if globals.CallLegacyMsgHandler { cc := controller.OrderController{} callbackResponse = cc.OrderStatus(obj) } - if globals.CallNew { - utils.CallFuncAsync(func() { - cc2 := &jd.OrderController{} - cc2.OnOrderMsg(obj) - }) + if globals.CallNewMsgHandler { + cc2 := &jd.OrderController{} + if globals.CallLegacyMsgHandler { + utils.CallFuncAsync(func() { + cc2.OnOrderMsg(obj) + }) + } else { + callbackResponse = cc2.OnOrderMsg(obj) + } } } c.Data["json"] = callbackResponse @@ -151,15 +155,19 @@ func (c *JDOrderController) ApplyCancelOrder() { func (c *JDOrderController) PushDeliveryStatus() { obj, callbackResponse := api.JdAPI.GetOrderDeliveryCallbackMsg(c.Ctx.Input.RequestBody) if callbackResponse == nil { - if globals.CallLegacy { + if globals.CallLegacyMsgHandler { cc := controller.OrderController{} callbackResponse = cc.OrderDeliveryStatus(obj) } - if globals.CallNew { - utils.CallFuncAsync(func() { - cc2 := &jd.WaybillController{} - cc2.OnWaybillMsg(obj) - }) + if globals.CallNewMsgHandler { + cc2 := &jd.WaybillController{} + if globals.CallLegacyMsgHandler { + utils.CallFuncAsync(func() { + cc2.OnWaybillMsg(obj) + }) + } else { + callbackResponse = cc2.OnWaybillMsg(obj) + } } } c.Data["json"] = callbackResponse diff --git a/controllers/mtps_order.go b/controllers/mtps_order.go index a5929264a..b8ce08002 100644 --- a/controllers/mtps_order.go +++ b/controllers/mtps_order.go @@ -27,15 +27,19 @@ func (c *MTPSOrderController) URLMapping() { func (c *MTPSOrderController) Status() { obj, callbackResponse := api.MtpsAPI.GetOrderCallbackMsg(c.Ctx.Request) if callbackResponse == nil { - if globals.CallLegacy { + if globals.CallLegacyMsgHandler { cc := &controller.OrderController{} callbackResponse = cc.OrderStatusChanged(obj) } - if globals.CallNew { - utils.CallFuncAsync(func() { - cc2 := &mtps.WaybillController{} - cc2.OnWaybillMsg(obj) - }) + if globals.CallNewMsgHandler { + cc2 := &mtps.WaybillController{} + if globals.CallLegacyMsgHandler { + utils.CallFuncAsync(func() { + cc2.OnWaybillMsg(obj) + }) + } else { + callbackResponse = cc2.OnWaybillMsg(obj) + } } } c.Data["json"] = callbackResponse @@ -50,15 +54,19 @@ func (c *MTPSOrderController) Status() { func (c *MTPSOrderController) Except() { obj, callbackResponse := api.MtpsAPI.GetOrderExceptionCallbackMsg(c.Ctx.Request) if callbackResponse == nil { - if globals.CallLegacy { + if globals.CallLegacyMsgHandler { cc := &controller.OrderController{} callbackResponse = cc.OrderException(obj) } - if globals.CallNew { - utils.CallFuncAsync(func() { - cc2 := &mtps.WaybillController{} - cc2.OnWaybillExcept(obj) - }) + if globals.CallNewMsgHandler { + cc2 := &mtps.WaybillController{} + if globals.CallLegacyMsgHandler { + utils.CallFuncAsync(func() { + cc2.OnWaybillExcept(obj) + }) + } else { + callbackResponse = cc2.OnWaybillExcept(obj) + } } } c.Data["json"] = callbackResponse diff --git a/globals/db/db.go b/globals/db/db.go index 7ab7efdbc..655a0b24e 100644 --- a/globals/db/db.go +++ b/globals/db/db.go @@ -14,7 +14,7 @@ func init() { // set default database orm.RegisterDataBase("default", "mysql", beego.AppConfig.String("dbConnectStr"), 30) models.RegisterModels() - if globals.CallNew { + if globals.CallNewMsgHandler { orm.RegisterModel(new(model.GoodsOrder)) orm.RegisterModel(new(model.OrderSku)) orm.RegisterModel(new(model.Waybill)) diff --git a/globals/globals.go b/globals/globals.go index b343ca1e0..27fd9195f 100644 --- a/globals/globals.go +++ b/globals/globals.go @@ -12,21 +12,23 @@ const ( ) var ( - CallLegacy bool - CallNew bool - HandleLegacyJxOrder bool + CallLegacyMsgHandler bool + CallNewMsgHandler bool + GenerateLegacyJxOrder bool + ReallyCallPlatformAPI bool SugarLogger *zap.SugaredLogger ) func init() { - CallLegacy = beego.AppConfig.DefaultBool("callLegacy", true) - CallNew = beego.AppConfig.DefaultBool("callNew", false) - HandleLegacyJxOrder = beego.AppConfig.DefaultBool("handleLegacyJxOrder", false) - logs.SetLogFuncCallDepth(3) beego.BConfig.Log.AccessLogs = true + CallLegacyMsgHandler = beego.AppConfig.DefaultBool("callLegacyMsgHandler", true) + CallNewMsgHandler = beego.AppConfig.DefaultBool("callNewMsgHandler", false) + GenerateLegacyJxOrder = beego.AppConfig.DefaultBool("generateLegacyJxOrder", false) + ReallyCallPlatformAPI = !CallLegacyMsgHandler + logger, _ := zap.NewDevelopment() SugarLogger = logger.Sugar() baseapi.Init(SugarLogger)