- cancel waybill reason added.

- api operator added.
- token added.
This commit is contained in:
gazebo
2018-08-22 16:06:47 +08:00
parent 5afe95d422
commit 79ed0a7929
9 changed files with 122 additions and 93 deletions

View File

@@ -61,12 +61,12 @@ func (c *BaseScheduler) GetDeliveryPlatformFromVendorID(vendorID int) *scheduler
return c.DeliveryPlatformHandlers[vendorID]
}
func (c *BaseScheduler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
func (c *BaseScheduler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
globals.SugarLogger.Infof("AcceptOrRefuseOrder orderID:%s, isAcceptIt:%t", order.VendorOrderID, isAcceptIt)
if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusNew {
if c.IsReallyCallPlatformAPI {
err = utils.CallFuncLogErrorWithInfo(func() error {
return c.GetPurchasePlatformFromVendorID(order.VendorID).AcceptOrRefuseOrder(order, isAcceptIt)
return c.GetPurchasePlatformFromVendorID(order.VendorID).AcceptOrRefuseOrder(order, isAcceptIt, userName)
}, "AcceptOrRefuseOrder orderID:%s, isAcceptIt:%t", order.VendorOrderID, isAcceptIt)
}
} else {
@@ -75,12 +75,12 @@ func (c *BaseScheduler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt
return err
}
func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder) (err error) {
func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder, userName string) (err error) {
globals.SugarLogger.Infof("PickupGoods orderID:%s", order.VendorOrderID)
if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusAccepted {
if c.IsReallyCallPlatformAPI {
err = utils.CallFuncLogErrorWithInfo(func() error {
return c.GetPurchasePlatformFromVendorID(order.VendorID).PickupGoods(order)
return c.GetPurchasePlatformFromVendorID(order.VendorID).PickupGoods(order, userName)
}, "PickupGoods orderID:%s", order.VendorOrderID)
}
} else {
@@ -92,12 +92,12 @@ func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder) (err error) {
return err
}
func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) {
func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) {
globals.SugarLogger.Infof("Swtich2SelfDeliver orderID:%s", order.VendorOrderID)
if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusFinishedPickup {
if c.IsReallyCallPlatformAPI {
err = utils.CallFuncLogErrorWithInfo(func() error {
return c.GetPurchasePlatformFromVendorID(order.VendorID).Swtich2SelfDeliver(order)
return c.GetPurchasePlatformFromVendorID(order.VendorID).Swtich2SelfDeliver(order, userName)
}, "Swtich2SelfDeliver orderID:%s", order.VendorOrderID)
if err == nil { // 因为有些平台转自送后,不会再发送订单在配送中消息过来,所以成功后就强制设置状态为配送中
order.Status = model.OrderStatusDelivering
@@ -112,12 +112,12 @@ func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error)
return err
}
func (c *BaseScheduler) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) {
func (c *BaseScheduler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) {
globals.SugarLogger.Infof("Swtich2SelfDelivered orderID:%s", order.VendorOrderID)
if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusDelivering {
if c.IsReallyCallPlatformAPI {
err = utils.CallFuncLogError(func() error {
return c.GetPurchasePlatformFromVendorID(order.VendorID).Swtich2SelfDelivered(order)
return c.GetPurchasePlatformFromVendorID(order.VendorID).Swtich2SelfDelivered(order, userName)
}, "Swtich2SelfDelivered orderID:%s", order.VendorOrderID)
}
} else {
@@ -126,12 +126,12 @@ func (c *BaseScheduler) Swtich2SelfDelivered(order *model.GoodsOrder) (err error
return err
}
func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder) (err error) {
func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder, userName string) (err error) {
globals.SugarLogger.Infof("SelfDeliverDelievering orderID:%s", order.VendorOrderID)
if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusFinishedPickup {
if c.IsReallyCallPlatformAPI {
err = utils.CallFuncLogError(func() error {
return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievering(order)
return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievering(order, userName)
}, "SelfDeliverDelievering orderID:%s", order.VendorOrderID)
if err == nil { // 因为有些平台设置配送中后,不会发送订单在配送中消息过来,所以成功后就强制设置状态为配送中
order.Status = model.OrderStatusDelivering
@@ -145,12 +145,12 @@ func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder) (err err
return err
}
func (c *BaseScheduler) SelfDeliverDelievered(order *model.GoodsOrder) (err error) {
func (c *BaseScheduler) SelfDeliverDelievered(order *model.GoodsOrder, userName string) (err error) {
globals.SugarLogger.Infof("SelfDeliverDelievered orderID:%s", order.VendorOrderID)
if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusDelivering {
if c.IsReallyCallPlatformAPI {
err = utils.CallFuncLogError(func() error {
return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievered(order)
return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievered(order, userName)
}, "SelfDeliverDelievered orderID:%s", order.VendorOrderID)
}
} else {
@@ -179,12 +179,12 @@ func (c *BaseScheduler) CreateWaybill(platformVendorID int, order *model.GoodsOr
return bill, err
}
func (c *BaseScheduler) CancelWaybill(bill *model.Waybill) (err error) {
globals.SugarLogger.Infof("CancelWaybill bill:%v", bill)
func (c *BaseScheduler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
globals.SugarLogger.Infof("CancelWaybill bill:%v, cancelReasonID:%d cancelReason:%s", bill, cancelReasonID, cancelReason)
if c.IsReallyCallPlatformAPI && bill.OrderVendorID != bill.WaybillVendorID {
if handlerInfo := c.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID); handlerInfo != nil {
err = utils.CallFuncLogError(func() error {
return handlerInfo.Handler.CancelWaybill(bill)
return handlerInfo.Handler.CancelWaybill(bill, cancelReasonID, cancelReason)
}, "CancelWaybill bill:%v", bill)
globals.SugarLogger.Debugf("CancelWaybill bill:%v canceled by myself", bill)
}

View File

@@ -18,10 +18,10 @@ func (c *BaseScheduler) CreateWaybillOnProviders(vendorOrderID string, vendorID
return nil, err
}
func (c *BaseScheduler) Swtich2SelfDeliverAndUpdateStatus(vendorOrderID string, vendorID int) (err error) {
func (c *BaseScheduler) Swtich2SelfDeliverAndUpdateStatus(vendorOrderID string, vendorID int, userName string) (err error) {
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil {
err = c.Swtich2SelfDeliver(order)
err = c.Swtich2SelfDeliver(order, userName)
if err == nil {
order.Status = model.OrderStatusDelivering
err = partner.CurOrderManager.UpdateOrderStatusDirectly(order)
@@ -30,10 +30,10 @@ func (c *BaseScheduler) Swtich2SelfDeliverAndUpdateStatus(vendorOrderID string,
return err
}
func (c *BaseScheduler) PickupGoodsAndUpdateStatus(vendorOrderID string, vendorID int) (err error) {
func (c *BaseScheduler) PickupGoodsAndUpdateStatus(vendorOrderID string, vendorID int, userName string) (err error) {
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil {
err = c.PickupGoods(order)
err = c.PickupGoods(order, userName)
if err == nil {
order.Status = model.OrderStatusFinishedPickup
err = partner.CurOrderManager.UpdateOrderStatusDirectly(order)

View File

@@ -152,7 +152,7 @@ func init() {
TimeoutAction: func(savedOrderInfo *WatchOrderInfo) (err error) {
order := savedOrderInfo.order
_ = sch.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, order.ConsigneeMobile, jxutils.GetJxStoreIDFromOrder(order), nil, func(isAcceptIt bool) error {
if err = sch.AcceptOrRefuseOrder(order, isAcceptIt); err != nil {
if err = sch.AcceptOrRefuseOrder(order, isAcceptIt, ""); err != nil {
// 为了解决京东新消息与接单消息乱序的问题
if errWithCode, ok := err.(*utils.ErrorWithCode); ok && errWithCode.Level() == 1 && errWithCode.IntCode() == -1 {
if order2, err2 := sch.GetPurchasePlatformFromVendorID(order.VendorID).GetOrder(order.VendorOrderID); err2 == nil && order2.Status > order.Status {
@@ -238,7 +238,7 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus, isPending
globals.SugarLogger.Infof("OnOrderStatusChanged [运营2]订单orderID:%s可能被手动点击送达会对程序状态产生不利影响请通知门店不要这样操作", status.VendorOrderID)
}
}
s.cancelOtherWaybills(savedOrderInfo, curWaybill)
s.cancelOtherWaybills(savedOrderInfo, curWaybill, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrOrderAlreadyFinished)
s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(status))
}
} else if status.LockStatus != model.OrderStatusUnknown {
@@ -266,11 +266,11 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
s.addWaybill2Map(savedOrderInfo, bill)
if !isPending {
if order.Status > model.OrderStatusEndBegin {
s.CancelWaybill(bill)
s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
} else if order.WaybillVendorID != model.VendorIDUnknown {
globals.SugarLogger.Debugf("OnWaybillStatusChanged multiple waybill created, bill:%v", bill)
if !s.isBillCandidate(order, bill) && bill.WaybillVendorID != order.VendorID {
s.CancelWaybill(bill)
s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
} else if bill.WaybillVendorID == order.VendorID && order.WaybillVendorID != order.VendorID {
globals.SugarLogger.Warnf("OnWaybillStatusChanged bill:%v purchase platform bill came later than others, strange!!!", bill)
}
@@ -293,10 +293,10 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
globals.SugarLogger.Infof("OnWaybillStatusChanged orderID:%s purchase platform waybill arrvied later, may case problem", order.VendorOrderID)
}
s.updateOrderByBill(order, bill, false)
s.cancelOtherWaybills(savedOrderInfo, bill)
s.cancelOtherWaybills(savedOrderInfo, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
if bill.WaybillVendorID != bill.OrderVendorID {
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore {
s.SelfDeliverDelievering(savedOrderInfo.order)
s.SelfDeliverDelievering(savedOrderInfo.order, "")
} else {
s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, 2, 10*time.Second)
}
@@ -306,7 +306,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
}
} else if !s.isBillCandidate(order, bill) && bill.WaybillVendorID != order.VendorID {
// 发生这种情况的原因就是两个接单事件几乎同时到达(来不及取消),也算正常
s.CancelWaybill(bill)
s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
globals.SugarLogger.Infof("OnWaybillStatusChanged Accepted orderID:%s got multiple bill:%v", order.VendorOrderID, bill)
}
}
@@ -320,14 +320,14 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
s.createWaybillOn3rdProviders(savedOrderInfo, bill)
}
} else if order.WaybillVendorID != model.VendorIDUnknown {
s.CancelWaybill(bill)
s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
globals.SugarLogger.Warnf("OnWaybillStatusChanged AcceptCanceled orderID:%s got multiple bill:%v, order details:%v", order.VendorOrderID, bill, order)
}
case model.WaybillStatusCourierArrived: // do nothing
s.resetTimer(savedOrderInfo, bill, isPending)
if s.isBillCandidate(order, bill) {
} else {
// s.CancelWaybill(bill)
// s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
globals.SugarLogger.Infof("OnWaybillStatusChanged CourierArrived order(%d, %s) bill(%d, %s), bill:%v shouldn't get here", order.WaybillVendorID, order.VendorWaybillID, bill.WaybillVendorID, bill.VendorWaybillID, bill)
}
case model.WaybillStatusFailed: // todo WaybillStatusFailed理解成订单整个失败了不需要再尝试创建运单了注意这里应该加个zabbix日志的报警
@@ -362,7 +362,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
if s.isBillCandidate(order, bill) {
// do nothing
} else {
// s.CancelWaybill(bill)
// s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
globals.SugarLogger.Infof("OnWaybillStatusChanged Delivering order(%d, %s) bill(%d, %s), bill:%v shouldn't get here", order.WaybillVendorID, order.VendorWaybillID, bill.WaybillVendorID, bill.VendorWaybillID, bill)
}
case model.WaybillStatusDelivered:
@@ -370,9 +370,9 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
s.removeWaybillFromMap(savedOrderInfo, bill)
if order.VendorID != bill.WaybillVendorID && !isPending {
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore {
s.SelfDeliverDelievered(order)
s.SelfDeliverDelievered(order, "")
} else {
s.Swtich2SelfDelivered(order)
s.Swtich2SelfDelivered(order, "")
}
}
if !s.isBillCandidate(order, bill) {
@@ -464,11 +464,11 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
return err
}
func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill2Keep *model.Waybill) (err error) {
func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill2Keep *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
globals.SugarLogger.Debugf("cancelOtherWaybills, orderID:%s, bill:%v", savedOrderInfo.order.VendorOrderID, bill2Keep)
for _, v := range savedOrderInfo.waybills {
if (v.OrderVendorID != v.WaybillVendorID) && (bill2Keep == nil || !(v.WaybillVendorID == bill2Keep.WaybillVendorID && v.VendorWaybillID == bill2Keep.VendorWaybillID)) {
s.CancelWaybill(v)
s.CancelWaybill(v, cancelReasonID, cancelReason)
}
}
return nil
@@ -478,7 +478,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf
order := savedOrderInfo.order
globals.SugarLogger.Debugf("swtich2SelfDeliverWithRetry orderID:%s", order.VendorOrderID)
if order.WaybillVendorID != order.VendorID {
if err := s.Swtich2SelfDeliver(order); err != nil {
if err := s.Swtich2SelfDeliver(order, ""); err != nil {
globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry failed, bill:%v, err:%v", bill, err)
if retryCount > 0 {
time.AfterFunc(duration, func() {
@@ -497,7 +497,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf
db := orm.NewOrm()
db.Insert(tmpLog)
if s.CancelWaybill(bill) == nil {
if s.CancelWaybill(bill, partner.CancelWaybillReasonSwitch2SelfFailed, partner.CancelWaybillReasonStrSwitch2SelfFailed) == nil {
// 转自送失败的取消,要将订单中的运单状态更新
if s.isBillCandidate(order, bill) {
bill.WaybillVendorID = model.VendorIDUnknown
@@ -697,7 +697,7 @@ func (s *DefScheduler) updateOrderByBill(order *model.GoodsOrder, bill *model.Wa
}
func (s *DefScheduler) autoPickupGood(order *model.GoodsOrder) (err error) {
return s.PickupGoods(order)
return s.PickupGoods(order, "")
}
func (s *DefScheduler) isBillCandidate(order *model.GoodsOrder, bill *model.Waybill) bool {

View File

@@ -148,17 +148,16 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy func(del
return bill, err
}
func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill) (err error) {
reasonID := dadaapi.ReasonIDOther
reasonMsg := "send not in time"
if bill.Status < model.WaybillStatusAccepted {
reasonID = dadaapi.ReasonIDNobodyAccept
reasonMsg = "ReasonIDNobodyAccept"
} else if bill.Status < model.WaybillStatusCourierArrived {
reasonID = dadaapi.ReasonIDNobodyPickup
reasonMsg = "ReasonIDNobodyPickup"
func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
switch cancelReasonID {
case partner.CancelWaybillReasonNotAcceptIntime:
cancelReasonID = dadaapi.ReasonIDNobodyAccept
case partner.CancelWaybillReasonSwitch2SelfFailed:
cancelReasonID = dadaapi.ReasonIDClientDontWantItAnymore
default:
cancelReasonID = dadaapi.ReasonIDOther
}
_, err = api.DadaAPI.CancelOrder(bill.VendorOrderID, reasonID, reasonMsg)
_, err = api.DadaAPI.CancelOrder(bill.VendorOrderID, cancelReasonID, cancelReason)
return err
}

View File

@@ -245,17 +245,16 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy func(del
return bill, err
}
func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill) (err error) {
reasonID := mtpsapi.CancelReasonRidderSendNotIntime
reasonMsg := "CancelReasonRidderSendNotIntime"
if bill.Status < model.WaybillStatusAccepted {
reasonID = mtpsapi.CancelReasonMerchantOther
reasonMsg = "nobody accept order"
} else if bill.Status < model.WaybillStatusCourierArrived {
reasonID = mtpsapi.CancelReasonRideerGetGoodNotIntime
reasonMsg = "CancelReasonRideerGetGoodNotIntime"
func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
switch cancelReasonID {
case partner.CancelWaybillReasonNotAcceptIntime:
cancelReasonID = mtpsapi.CancelReasonRideerMtpsOther
case partner.CancelWaybillReasonSwitch2SelfFailed:
cancelReasonID = mtpsapi.CancelReasonMerchantOther
default:
cancelReasonID = mtpsapi.CancelReasonRideerOther
}
_, err = api.MtpsAPI.CancelOrder(utils.Str2Int64(bill.VendorWaybillID2), bill.VendorWaybillID, reasonID, reasonMsg)
_, err = api.MtpsAPI.CancelOrder(utils.Str2Int64(bill.VendorWaybillID2), bill.VendorWaybillID, cancelReasonID, cancelReason)
return nil
}

View File

@@ -6,6 +6,18 @@ import (
"git.rosy.net.cn/jx-callback/business/model"
)
const (
CancelWaybillReasonNotAcceptIntime = 1
CancelWaybillReasonSwitch2SelfFailed = 2
CancelWaybillReasonOther = 10
)
var (
CancelWaybillReasonStrNotAcceptIntime = "没有及时抢单"
CancelWaybillReasonStrSwitch2SelfFailed = "转自送失败"
CancelWaybillReasonStrOrderAlreadyFinished = "订单已经结束"
)
var (
CurOrderManager IOrderManager
)
@@ -27,25 +39,25 @@ type IPurchasePlatformHandler interface {
GetOrder(vendorOrderID string) (order *model.GoodsOrder, err error)
GetStatusActionTimeout(statusType, status int) time.Duration
AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error)
PickupGoods(order *model.GoodsOrder) (err error)
AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error)
PickupGoods(order *model.GoodsOrder, userName string) (err error)
// 将订单从购物平台配送转为自送
Swtich2SelfDeliver(order *model.GoodsOrder) (err error)
Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error)
// 将订单从购物平台配送转为自送后又送达
Swtich2SelfDelivered(order *model.GoodsOrder) (err error)
Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error)
// 完全自送的门店表示开始配送
SelfDeliverDelievering(order *model.GoodsOrder) (err error)
SelfDeliverDelievering(order *model.GoodsOrder, userName string) (err error)
// 完全自送的门店表示配送完成
SelfDeliverDelievered(order *model.GoodsOrder) (err error)
SelfDeliverDelievered(order *model.GoodsOrder, userName string) (err error)
}
type IDeliveryPlatformHandler interface {
CreateWaybill(order *model.GoodsOrder, policy func(deliveryFee, addFee int64) error) (bill *model.Waybill, err error)
CancelWaybill(bill *model.Waybill) (err error)
CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error)
}
func Init(curOrderManager IOrderManager) {

View File

@@ -264,7 +264,7 @@ func (c *PurchaseHandler) GetStatusFromVendorStatus(vendorStatus string) int {
return model.OrderStatusUnknown
}
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
if isAcceptIt {
err = api.ElmAPI.ConfirmOrder(order.VendorOrderID)
} else {
@@ -275,25 +275,25 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
// 饿了么没有拣货这个状态,直接返回成功
// 真实流程中也不会调用这个方法,因为接收订单后状态会直接转移到已拣货
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder) (err error) {
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) {
return nil
}
func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) {
func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) {
err = api.ElmAPI.DeliveryBySelfLite(order.VendorOrderID)
return err
}
// 饿了么转商家自送后,没有确认送达的概念,空操作
func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) {
func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) {
return nil
}
func (c *PurchaseHandler) SelfDeliverDelievering(order *model.GoodsOrder) (err error) {
func (c *PurchaseHandler) SelfDeliverDelievering(order *model.GoodsOrder, userName string) (err error) {
return api.ElmAPI.StartDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile)
}
func (c *PurchaseHandler) SelfDeliverDelievered(order *model.GoodsOrder) (err error) {
func (c *PurchaseHandler) SelfDeliverDelievered(order *model.GoodsOrder, userName string) (err error) {
return api.ElmAPI.CompleteDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile)
}

View File

@@ -184,18 +184,18 @@ func (c *PurchaseHandler) GetStatusFromVendorStatus(vendorStatus string) int {
return model.OrderStatusUnknown
}
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
_, err = api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt)
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
_, err = api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt, userName)
return err
}
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder) (err error) {
_, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID)
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) {
_, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID, userName)
return err
}
func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) {
_, err = api.JdAPI.ModifySellerDelivery(order.VendorOrderID)
func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) {
_, err = api.JdAPI.ModifySellerDelivery(order.VendorOrderID, userName)
if err != nil {
if errWithCode, ok := err.(*utils.ErrorWithCode); ok && errWithCode.Level() == 1 {
globals.SugarLogger.Infof("Swtich2SelfDeliver failed with error:%v try get current status", err)
@@ -212,17 +212,17 @@ func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error
return err
}
func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) {
_, err = api.JdAPI.DeliveryEndOrder(order.VendorOrderID)
func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) {
_, err = api.JdAPI.DeliveryEndOrder(order.VendorOrderID, userName)
return err
}
func (c *PurchaseHandler) SelfDeliverDelievering(order *model.GoodsOrder) (err error) {
_, err = api.JdAPI.OrderSerllerDelivery(order.VendorOrderID)
func (c *PurchaseHandler) SelfDeliverDelievering(order *model.GoodsOrder, userName string) (err error) {
_, err = api.JdAPI.OrderSerllerDelivery(order.VendorOrderID, userName)
return err
}
// 京东送达接口都是一样的
func (c *PurchaseHandler) SelfDeliverDelievered(order *model.GoodsOrder) (err error) {
return c.Swtich2SelfDelivered(order)
func (c *PurchaseHandler) SelfDeliverDelievered(order *model.GoodsOrder, userName string) (err error) {
return c.Swtich2SelfDelivered(order, userName)
}

View File

@@ -13,6 +13,14 @@ type OrderController struct {
beego.Controller
}
func GetUserNameFromToken(token string) string {
userName := token
if len(userName) > 10 {
userName = userName[:10]
}
return userName
}
func (c *OrderController) URLMapping() {
c.Mapping("FinishedPickup", c.FinishedPickup)
c.Mapping("GetStoreOrderInfo", c.GetStoreOrderInfo)
@@ -21,16 +29,17 @@ func (c *OrderController) URLMapping() {
c.Mapping("Swtich2SelfDeliver", c.Swtich2SelfDeliver)
}
func (c *OrderController) orderOperate(handler func(vendorOrderID string, vendorID int) (interface{}, error)) {
func (c *OrderController) orderOperate(handler func(vendorOrderID string, vendorID int, userName string) (interface{}, error)) {
var (
vendorOrderID string
vendorID int
err error
vendorOrderID, token string
vendorID int
err error
)
token = c.Ctx.Input.Header("token")
vendorOrderID = c.GetString("vendorOrderID")
vendorID, err1 := c.GetInt("vendorID", 0)
if vendorOrderID != "" && err1 == nil {
result, err2 := handler(vendorOrderID, vendorID)
if vendorOrderID != "" && token != "" && err1 == nil {
result, err2 := handler(vendorOrderID, vendorID, GetUserNameFromToken(token))
if err = err2; err == nil {
retObj := &model.CallResult{
Code: "0",
@@ -45,6 +54,9 @@ func (c *OrderController) orderOperate(handler func(vendorOrderID string, vendor
if vendorOrderID == "" {
errMsg += "vendorOrderID is empty\n"
}
if token == "" {
errMsg += "token is empty\n"
}
if errMsg != "" {
c.Data["json"] = &model.CallResult{
Code: "-1",
@@ -56,45 +68,49 @@ func (c *OrderController) orderOperate(handler func(vendorOrderID string, vendor
// @Title 完成拣货
// @Description 完成拣货
// @Param token header string true "认证toke"
// @Param vendorOrderID formData string true "订单ID"
// @Param vendorID formData int true "订单所属的厂商ID"
// @Success 200 {object} business.model.CallResult
// @Failure 200 {object} business.model.CallResult
// @router /FinishedPickup [post]
func (c *OrderController) FinishedPickup() {
c.orderOperate(func(vendorOrderID string, vendorID int) (interface{}, error) {
return nil, basesch.FixedBaseScheduler.PickupGoodsAndUpdateStatus(vendorOrderID, vendorID)
c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) {
return nil, basesch.FixedBaseScheduler.PickupGoodsAndUpdateStatus(vendorOrderID, vendorID, userName)
})
}
// @Title 转自送
// @Description 转自送
// @Param token header string true "认证toke"
// @Param vendorOrderID formData string true "订单ID"
// @Param vendorID formData int true "订单所属的厂商ID"
// @Success 200 {object} business.model.CallResult
// @Failure 200 {object} business.model.CallResult
// @router /Swtich2SelfDeliver [post]
func (c *OrderController) Swtich2SelfDeliver() {
c.orderOperate(func(vendorOrderID string, vendorID int) (interface{}, error) {
return nil, basesch.FixedBaseScheduler.Swtich2SelfDeliverAndUpdateStatus(vendorOrderID, vendorID)
c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) {
return nil, basesch.FixedBaseScheduler.Swtich2SelfDeliverAndUpdateStatus(vendorOrderID, vendorID, userName)
})
}
// @Title 创建三方运单
// @Description 创建三方运单
// @Param token header string true "认证toke"
// @Param vendorOrderID formData string true "订单ID"
// @Param vendorID formData int true "订单所属的厂商ID"
// @Success 200 {object} business.model.CallResult
// @Failure 200 {object} business.model.CallResult
// @router /CreateWaybillOnProviders [post]
func (c *OrderController) CreateWaybillOnProviders() {
c.orderOperate(func(vendorOrderID string, vendorID int) (interface{}, error) {
c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) {
return basesch.FixedBaseScheduler.CreateWaybillOnProviders(vendorOrderID, vendorID)
})
}
// @Title 得到门店订单信息
// @Description 得到门店订单信息
// @Param token header string true "认证toke"
// @Param storeID query string true "京西门店ID"
// @Param lastHours query int false "最近多少小时的信息(缺省为两天)"
// @Success 200 {object} business.model.CallResult
@@ -132,6 +148,7 @@ func (c *OrderController) GetStoreOrderCountInfo() {
// @Title 得到门店订单状态信息
// @Description 得到门店订单状态信息
// @Param token header string true "认证toke"
// @Param storeID query string true "京西门店ID"
// @Param lastHours query int false "最近多少小时的信息(缺省为两天)"
// @Param fromStatus query int true "起始状态(包括)"
@@ -178,13 +195,15 @@ func (c *OrderController) GetStoreOrderInfo() {
// @Title 得到订单SKU信息
// @Description 得到订单SKU信息
// @Param token header string true "认证toke"
// @Param vendorOrderID query string true "订单ID"
// @Param vendorID query int true "订单所属的厂商ID"
// @Success 200 {object} business.model.CallResult
// @Failure 200 {object} business.model.CallResult
// @router /GetOrderSkuInfo [get]
func (c *OrderController) GetOrderSkuInfo() {
c.orderOperate(func(vendorOrderID string, vendorID int) (interface{}, error) {
c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) {
// globals.SugarLogger.Debugf("userName:%s", userName)
return orderman.FixedOrderManager.GetOrderSkuInfo(vendorOrderID, vendorID)
})
}