Files
jx-callback/business/jxcallback/scheduler/basesch/basesch_ext.go

111 lines
4.5 KiB
Go

package basesch
import (
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/legacymodel"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego/orm"
)
func (c *BaseScheduler) CreateWaybillOnProviders(vendorOrderID string, vendorID int, userName string) (bills []*model.Waybill, err error) {
globals.SugarLogger.Infof("CreateWaybillOnProviders orderID:%s userName:%s", vendorOrderID, userName)
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil {
if order.LockStatus != model.OrderStatusLocked && order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin {
bill, err2 := c.CreateWaybill(model.VendorIDMTPS, order, nil)
if err = err2; err == nil {
globals.SugarLogger.Infof("CreateWaybillOnProviders orderID:%s userName:%s bill:%s", vendorOrderID, userName, bill.WaybillVendorID)
return []*model.Waybill{
bill,
}, nil
}
} else {
err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation
}
}
globals.SugarLogger.Infof("CreateWaybillOnProviders orderID:%s userName:%s error:%v", vendorOrderID, userName, err)
return nil, err
}
// todo 这里应该要考虑纯自送与转自送
func (c *BaseScheduler) SelfDeliveringAndUpdateStatus(vendorOrderID string, vendorID int, userName string) (err error) {
globals.SugarLogger.Infof("SelfDeliveringAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName)
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil {
if getStoreDeliveryType(order) == scheduler.StoreDeliveryTypeByStore {
err = c.SelfDeliverDelievering(order, userName)
} else {
err = c.Swtich2SelfDeliver(order, userName)
}
if err == nil {
order.Status = model.OrderStatusDelivering
if err = partner.CurOrderManager.UpdateOrderStatusDirectly(order); err == nil {
globals.SugarLogger.Infof("SelfDeliveringAndUpdateStatus orderID:%s userName:%s successfully", vendorOrderID, userName)
return err
}
}
}
globals.SugarLogger.Infof("SelfDeliveringAndUpdateStatus orderID:%s userName:%s error:%v", vendorOrderID, userName, err)
return err
}
// todo 这里应该要考虑纯自送与转自送
func (c *BaseScheduler) SelfDeliveredAndUpdateStatus(vendorOrderID string, vendorID int, userName string) (err error) {
globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName)
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil {
if getStoreDeliveryType(order) == scheduler.StoreDeliveryTypeByStore {
err = c.SelfDeliverDelievered(order, userName)
} else {
err = c.Swtich2SelfDelivered(order, userName)
}
if err == nil {
order.Status = model.OrderStatusDelivered
if err = partner.CurOrderManager.UpdateOrderStatusDirectly(order); err == nil {
globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s successfully", vendorOrderID, userName)
return err
}
}
}
globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s error:%v", vendorOrderID, userName, err)
return err
}
func (c *BaseScheduler) PickupGoodsAndUpdateStatus(vendorOrderID string, vendorID int, userName string) (err error) {
globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName)
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil {
err = c.PickupGoods(order, userName)
if err == nil {
order.Status = model.OrderStatusFinishedPickup
if err = partner.CurOrderManager.UpdateOrderStatusDirectly(order); err == nil {
globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s successfully", vendorOrderID, userName)
return err
}
}
}
globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s error:%v", vendorOrderID, userName, err)
return err
}
func getStoreDeliveryType(order *model.GoodsOrder) int {
storefeature := &legacymodel.Jxstorefeature{
Id: jxutils.GetJxStoreIDFromOrder(order),
}
if storefeature.Id != 0 {
db := orm.NewOrm()
err := db.Read(storefeature, "Id")
if err == nil {
if order.VendorID == model.VendorIDJD {
return int(storefeature.JdDeliveryType)
}
return int(storefeature.ElmDeliveryType)
}
globals.SugarLogger.Infof("getStoreDeliveryType read storefeature failed with error:%v", err)
}
return scheduler.StoreDeliveryTypeByPlatform
}