- order manager added.

This commit is contained in:
gazebo
2018-08-21 17:18:08 +08:00
parent c29bcea27c
commit 643bcac0f8
18 changed files with 463 additions and 165 deletions

View File

@@ -1,6 +1,7 @@
package basesch
import (
"errors"
"fmt"
"git.rosy.net.cn/baseapi/utils"
@@ -16,6 +17,14 @@ type BaseScheduler struct {
IsReallyCallPlatformAPI bool
}
var (
FixedBaseScheduler *BaseScheduler
)
var (
ErrOrderStatusIsNotSuitable = errors.New("订单状态不适合当前操作")
)
func (c *BaseScheduler) Init() {
c.PurchasePlatformHandlers = make(map[int]partner.IPurchasePlatformHandler)
c.DeliveryPlatformHandlers = make(map[int]*scheduler.DeliveryPlatformHandlerInfo)
@@ -75,25 +84,12 @@ func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder) (err error) {
}, "PickupGoods orderID:%s", order.VendorOrderID)
}
} else {
err = ErrOrderStatusIsNotSuitable
globals.SugarLogger.Infof("PickupGoods orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status)
}
return err
}
func (c *BaseScheduler) PickupGoodsExternal(vendorOrderID string, vendorID int) (err error) {
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil {
err = c.PickupGoods(order)
if err == nil {
order.Status = model.OrderStatusFinishedPickup
err = utils.CallFuncLogErrorWithInfo(func() error {
return partner.CurOrderManager.UpdateOrderStatusDirectly(order)
}, "PickupGoodsExternal orderID:%s", order.VendorOrderID)
}
}
return err
}
func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) {
globals.SugarLogger.Infof("Swtich2SelfDeliver orderID:%s", order.VendorOrderID)
if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusFinishedPickup {
@@ -106,25 +102,12 @@ func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error)
}
}
} else {
err = ErrOrderStatusIsNotSuitable
globals.SugarLogger.Infof("Swtich2SelfDeliver orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status)
}
return err
}
func (c *BaseScheduler) Swtich2SelfDeliverExternal(vendorOrderID string, vendorID int) (err error) {
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil {
err = c.Swtich2SelfDeliver(order)
if err == nil {
order.Status = model.OrderStatusDelivering
err = utils.CallFuncLogErrorWithInfo(func() error {
return partner.CurOrderManager.UpdateOrderStatusDirectly(order)
}, "Swtich2SelfDeliverExternal orderID:%s", order.VendorOrderID)
}
}
return err
}
func (c *BaseScheduler) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) {
globals.SugarLogger.Infof("Swtich2SelfDelivered orderID:%s", order.VendorOrderID)
if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusDelivering {
@@ -172,21 +155,24 @@ func (c *BaseScheduler) SelfDeliverDelievered(order *model.GoodsOrder) (err erro
return err
}
func (c *BaseScheduler) CreateWaybill(platformVendorID int, order *model.GoodsOrder) (err error) {
func (c *BaseScheduler) CreateWaybill(platformVendorID int, order *model.GoodsOrder, policy func(deliveryFee, addFee int64) error) (bill *model.Waybill, err error) {
globals.SugarLogger.Infof("CreateWaybill orderID:%s, vendorID:%d", order.VendorOrderID, platformVendorID)
if !model.IsOrderSolid(order) { // 如果订单是不完整的
globals.SugarLogger.Warnf("CreateWaybill orderID:%s, vendorID:%d is not solid!!!", order.VendorOrderID, platformVendorID)
return scheduler.ErrOrderIsNotSolid
return nil, scheduler.ErrOrderIsNotSolid
}
if c.IsReallyCallPlatformAPI {
handlerInfo := c.GetDeliveryPlatformFromVendorID(platformVendorID)
if handlerInfo.Use4CreateWaybill {
if err = handlerInfo.Handler.CreateWaybill(order); err != nil {
if handlerInfo != nil && handlerInfo.Use4CreateWaybill {
bill, err = handlerInfo.Handler.CreateWaybill(order, policy)
if err != nil {
globals.SugarLogger.Infof("CreateWaybill failed orderID:%s vendorID:%d with error:%v", order.VendorOrderID, platformVendorID, err)
}
} else {
err = scheduler.ErrDeliverProviderWrong
}
}
return err
return bill, err
}
func (c *BaseScheduler) CancelWaybill(bill *model.Waybill) (err error) {

View File

@@ -0,0 +1,43 @@
package basesch
import (
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/partner"
)
func (c *BaseScheduler) CreateWaybillOnProviders(vendorOrderID string, vendorID int) (bills []*model.Waybill, err error) {
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil {
bill, err2 := c.CreateWaybill(model.VendorIDMTPS, order, nil)
if err = err2; err == nil {
return []*model.Waybill{
bill,
}, nil
}
}
return nil, err
}
func (c *BaseScheduler) Swtich2SelfDeliverAndUpdateStatus(vendorOrderID string, vendorID int) (err error) {
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil {
err = c.Swtich2SelfDeliver(order)
if err == nil {
order.Status = model.OrderStatusDelivering
err = partner.CurOrderManager.UpdateOrderStatusDirectly(order)
}
}
return err
}
func (c *BaseScheduler) PickupGoodsAndUpdateStatus(vendorOrderID string, vendorID int) (err error) {
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil {
err = c.PickupGoods(order)
if err == nil {
order.Status = model.OrderStatusFinishedPickup
err = partner.CurOrderManager.UpdateOrderStatusDirectly(order)
}
}
return err
}