package jx import ( "time" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" ) type Data4Neworder struct { model.GoodsOrder Skus []*model.OrderSku `json:"skus"` } func (c *PurchaseHandler) OnOrderMsg(msg *CallbackMsg) (retVal, errCode string, err error) { jxutils.CallMsgHandler(func() { retVal, errCode, err = c.onOrderMsg(msg) }, jxutils.ComposeUniversalOrderID(msg.ThingID, c.GetVendorID())) return retVal, errCode, err } func (c *PurchaseHandler) onOrderMsg(msg *CallbackMsg) (retVal, errCode string, err error) { subMsgType := int(utils.Str2Int64WithDefault(msg.SubMsgType, 0)) if subMsgType == model.OrderStatusNew || subMsgType == model.OrderStatusAdjust { var order *Data4Neworder if err = utils.UnmarshalUseNumber([]byte(msg.Data), &order); err == nil { if order.VendorStatus == "" { order.VendorStatus = utils.Int2Str(order.Status) } retVal, errCode, err = c.onOrderNew(msg, subMsgType, order) } } else { status := c.callbackMsg2Status(msg) err = partner.CurOrderManager.OnOrderStatusChanged(status) } return retVal, errCode, err } func (c *PurchaseHandler) callbackMsg2Status(msg *CallbackMsg) *model.OrderStatus { orderStatus := &model.OrderStatus{ VendorOrderID: msg.ThingID, VendorID: model.VendorIDJX, OrderType: model.OrderTypeOrder, RefVendorOrderID: msg.ThingID, RefVendorID: model.VendorIDJX, VendorStatus: msg.SubMsgType, Status: int(utils.Str2Int64WithDefault(msg.SubMsgType, 0)), StatusTime: utils.Timestamp2Time(msg.Timestamp), Remark: "", } return orderStatus } func (c *PurchaseHandler) onOrderNew(msg *CallbackMsg, subMsgType int, order *Data4Neworder) (retVal, errCode string, err error) { globals.SugarLogger.Debugf("onOrderNew orderID:%s", msg.ThingID) order.StoreID = int(utils.Str2Int64WithDefault(order.VendorStoreID, 0)) order.DeliveryType = model.OrderDeliveryTypeStoreSelf order.GoodsOrder.Skus = order.Skus order.VendorID = model.VendorIDJX order.Flag = model.OrderFlagMaskTempJX for _, v := range order.GoodsOrder.Skus { v.SkuID = int(utils.Str2Int64WithDefault(v.VendorSkuID, 0)) } jxutils.RefreshOrderSkuRelated(&order.GoodsOrder) orderStatus := model.Order2Status(&order.GoodsOrder) if subMsgType == model.OrderStatusNew { err = partner.CurOrderManager.OnOrderNew(&order.GoodsOrder, orderStatus) } else if subMsgType == model.OrderStatusAdjust { err = partner.CurOrderManager.OnOrderAdjust(&order.GoodsOrder, orderStatus) } return retVal, errCode, err } func (c *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) { return order } func (c *PurchaseHandler) GetOrder(orderID string) (order *model.GoodsOrder, err error) { return order, err } func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) { var status int if isAcceptIt { status = model.OrderStatusAccepted } else { status = model.OrderStatusCanceled } err = c.notifyOrderStatusChanged(order, status) return err } func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) { err = c.notifyOrderStatusChanged(order, model.OrderStatusFinishedPickup) return err } func (p *PurchaseHandler) AcceptOrRefuseFailedGetOrder(ctx *jxcontext.Context, order *model.GoodsOrder, isAcceptIt bool) (err error) { return err } func (p *PurchaseHandler) CallCourier(ctx *jxcontext.Context, order *model.GoodsOrder) (err error) { // 拣货失败后再次招唤平台配送 return err } func (p *PurchaseHandler) ConfirmReceiveGoods(ctx *jxcontext.Context, order *model.GoodsOrder) (err error) { // 投递失败后确认收到退货 return err } func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) { return err } func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) { return err } func (c *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userName string) (err error) { err = c.notifyOrderStatusChanged(order, model.OrderStatusDelivering) return err } // 京东送达接口都是一样的 func (c *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName string) (err error) { err = c.notifyOrderStatusChanged(order, model.OrderStatusFinished) return err } func (c *PurchaseHandler) GetOrderRealMobile(ctx *jxcontext.Context, order *model.GoodsOrder) (mobile string, err error) { return mobile, err } func (c *PurchaseHandler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *model.GoodsOrder, isAgree bool, reason string) (err error) { return err } func (c *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) { err = c.notifyOrderStatusChanged(order, model.OrderStatusCanceled) return err } func (c *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) { return err } func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, parentTask tasksch.ITask, queryDate time.Time, vendorStoreID string) (vendorOrderIDs []string, err error) { return vendorOrderIDs, err } func (c *PurchaseHandler) GetWaybillTip(ctx *jxcontext.Context, order *model.GoodsOrder) (tipFee int64, err error) { return tipFee, err } func (c *PurchaseHandler) AddWaybillTip(ctx *jxcontext.Context, order *model.GoodsOrder, tipFee2Add int64) (err error) { return err } func (c *PurchaseHandler) ConfirmSelfTake(ctx *jxcontext.Context, vendorOrderID, selfTakeCode string) (err error) { order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, model.VendorIDJX) if err == nil { err = c.notifyOrderStatusChanged(order, model.OrderStatusFinished) } return err } func (c *PurchaseHandler) notifyOrderStatusChanged(order *model.GoodsOrder, status int) (err error) { orderMsg := *order orderMsg.Status = status if err = jxAPI.NotifyOrderStatusChanged(&orderMsg); err == nil { c.postFakeMsg(orderMsg.VendorOrderID, orderMsg.Status) } return err }