diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 0f5e51f1a..0ff296309 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -208,7 +208,7 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db orm.O if values, ok := skumapper[v.VendorSkuID]; ok { v.JxSkuID = int(utils.Str2Int64(utils.Interface2String(values[1]))) v.ShopPrice = utils.Str2Int64WithDefault(utils.Interface2String(values[2]), 0) - order.ShopPrice += v.ShopPrice + order.ShopPrice += v.ShopPrice * int64(v.Count) if v.ShopPrice == 0 { globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营2]京东订单sku门店价格为零(一般原因为没有门店价格信息),orderID:%s, StoreID:%d, SkuID:%d, sku:%v", order.VendorOrderID, jxStoreID, v.JxSkuID, v) } @@ -219,7 +219,7 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db orm.O if v.SkuID != 0 { if values, ok := skumapper[utils.Int2Str(v.SkuID)]; ok { v.ShopPrice = utils.Str2Int64WithDefault(utils.Interface2String(values[2]), 0) - order.ShopPrice += v.ShopPrice + order.ShopPrice += v.ShopPrice * int64(v.Count) if v.ShopPrice == 0 { globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营2]饿了么订单sku门店价格为零,orderID:%s, StoreID:%d, SkuID:%d, sku:%v", order.VendorOrderID, jxStoreID, v.SkuID, v) } @@ -334,6 +334,9 @@ func (c *OrderManager) LoadOrder(vendorOrderID string, vendorID int) (order *mod }, "LoadOrder orderID:%s", vendorOrderID) } if err != nil { + if err == orm.ErrNoRows { + err = ErrCanNotFindOrder + } globals.SugarLogger.Infof("LoadOrder orderID:%s failed with error:%v", vendorOrderID, err) } return order, err diff --git a/business/jxcallback/orderman/orderman.go b/business/jxcallback/orderman/orderman.go index e07ed3879..8c9e2176b 100644 --- a/business/jxcallback/orderman/orderman.go +++ b/business/jxcallback/orderman/orderman.go @@ -1,6 +1,7 @@ package orderman import ( + "errors" "sort" "time" @@ -20,6 +21,10 @@ const ( maxSleepGapHandlePendingOrder = 5 * time.Millisecond // 每个pending order的最长时间间隙 ) +var ( + ErrCanNotFindOrder = errors.New("找不到相应订单") +) + var ( FixedOrderManager *OrderManager ) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 6889dbe76..666bb7255 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -1,7 +1,6 @@ package orderman import ( - "errors" "time" "git.rosy.net.cn/jx-callback/business/model" @@ -16,11 +15,8 @@ const ( defPageSize = 50 ) -var ( - ErrCanNotFindOrder = errors.New("找不到相应订单") -) - func (c *OrderManager) GetStoreOrderInfo(storeID string, lastHours int, fromStatus, toStatus, offset, pageSize int) (orders []*model.GoodsOrderExt, err error) { + globals.SugarLogger.Debugf("GetStoreOrderInfo storeID:%s", storeID) if lastHours > maxLastHours { lastHours = maxLastHours } else if lastHours == 0 { @@ -44,6 +40,7 @@ func (c *OrderManager) GetStoreOrderInfo(storeID string, lastHours int, fromStat WHERE IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) = ? AND t1.order_created_at >= ? AND t1.Status >= ? AND t1.Status <= ? + ORDER BY t1.order_created_at LIMIT ? OFFSET ? `, storeID, time.Now().Add(-time.Duration(lastHours)*time.Hour), fromStatus, toStatus, pageSize, offset).QueryRows(&orders) if err == nil { @@ -54,6 +51,7 @@ func (c *OrderManager) GetStoreOrderInfo(storeID string, lastHours int, fromStat } func (c *OrderManager) GetStoreOrderCountInfo(storeID string, lastHours int) (countInfo []*model.GoodsOrderCountInfo, err error) { + globals.SugarLogger.Debugf("GetStoreOrderCountInfo storeID:%s", storeID) if lastHours > maxLastHours { lastHours = maxLastHours } else if lastHours == 0 { @@ -67,6 +65,7 @@ func (c *OrderManager) GetStoreOrderCountInfo(storeID string, lastHours int) (co WHERE IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) = ? AND t1.order_created_at >= ? GROUP BY 1 + ORDER BY 1 `, storeID, time.Now().Add(-time.Duration(lastHours)*time.Hour)).QueryRows(&countInfo) if err == nil { return countInfo, nil @@ -76,6 +75,7 @@ func (c *OrderManager) GetStoreOrderCountInfo(storeID string, lastHours int) (co } func (c *OrderManager) GetOrderSkuInfo(vendorOrderID string, vendorID int) (skus []*model.OrderSkuExt, err error) { + globals.SugarLogger.Debugf("GetOrderSkuInfo orderID:%s", vendorOrderID) db := orm.NewOrm() num, err := db.Raw(` SELECT t1.*, t3.img image @@ -83,6 +83,7 @@ func (c *OrderManager) GetOrderSkuInfo(vendorOrderID string, vendorID int) (skus LEFT JOIN jx_sku t2 ON IF(t1.jx_sku_id != 0, t1.jx_sku_id, t1.sku_id) = t2.id LEFT JOIN jx_sku_name t3 ON t2.nameid = t3.id WHERE vendor_order_id = ? AND vendor_id = ? + ORDER BY t1.sku_name `, vendorOrderID, vendorID).QueryRows(&skus) if err == nil && num > 0 { return skus, nil diff --git a/business/jxcallback/scheduler/basesch/basesch.go b/business/jxcallback/scheduler/basesch/basesch.go index fe7271167..5f8154bf5 100644 --- a/business/jxcallback/scheduler/basesch/basesch.go +++ b/business/jxcallback/scheduler/basesch/basesch.go @@ -1,7 +1,6 @@ package basesch import ( - "errors" "fmt" "git.rosy.net.cn/baseapi/utils" @@ -21,10 +20,6 @@ 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) @@ -70,7 +65,8 @@ func (c *BaseScheduler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt }, "AcceptOrRefuseOrder orderID:%s, isAcceptIt:%t", order.VendorOrderID, isAcceptIt) } } else { - globals.SugarLogger.Infof("AcceptOrRefuseOrder orderID:%s, status:%d is not suitable, isAcceptIt:%t", order.VendorOrderID, order.Status, isAcceptIt) + return scheduler.ErrOrderStatusAlreadySatisfyCurOperation + globals.SugarLogger.Debugf("AcceptOrRefuseOrder orderID:%s, status:%d is not suitable, isAcceptIt:%t", order.VendorOrderID, order.Status, isAcceptIt) } return err } @@ -85,9 +81,12 @@ func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder, userName string) (e } } else { if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusAccepted { - err = ErrOrderStatusIsNotSuitable + err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation + globals.SugarLogger.Infof("PickupGoods orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) + } else { + err = scheduler.ErrOrderStatusAlreadySatisfyCurOperation + globals.SugarLogger.Debugf("PickupGoods orderID:%s status:%d already ok", order.VendorOrderID, order.Status) } - globals.SugarLogger.Infof("PickupGoods orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) } return err } @@ -104,10 +103,13 @@ func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder, userName str } } } else { - if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusFinishedPickup { - err = ErrOrderStatusIsNotSuitable + if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusFinishedPickup || order.VendorID == order.WaybillVendorID { + err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation + globals.SugarLogger.Infof("Swtich2SelfDeliver orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) + } else { + err = scheduler.ErrOrderStatusAlreadySatisfyCurOperation + globals.SugarLogger.Debugf("Swtich2SelfDeliver orderID:%s status:%d already ok", order.VendorOrderID, order.Status) } - globals.SugarLogger.Infof("Swtich2SelfDeliver orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) } return err } @@ -121,7 +123,13 @@ func (c *BaseScheduler) Swtich2SelfDelivered(order *model.GoodsOrder, userName s }, "Swtich2SelfDelivered orderID:%s", order.VendorOrderID) } } else { - globals.SugarLogger.Infof("Swtich2SelfDelivered orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) + if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusDelivering { + err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation + globals.SugarLogger.Infof("Swtich2SelfDelivered orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) + } else { + err = scheduler.ErrOrderStatusAlreadySatisfyCurOperation + globals.SugarLogger.Debugf("Swtich2SelfDelivered orderID:%s status:%d already ok", order.VendorOrderID, order.Status) + } } return err } @@ -137,10 +145,14 @@ func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder, userName order.Status = model.OrderStatusDelivering } } - } else if order.Status == model.OrderStatusDelivering { - globals.SugarLogger.Debugf("SelfDeliverDelievering orderID:%s, status:%d already ok", order.VendorOrderID, order.Status) } else { - globals.SugarLogger.Infof("SelfDeliverDelievering orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) + if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusFinishedPickup { + err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation + globals.SugarLogger.Infof("SelfDeliverDelievering orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) + } else { + err = scheduler.ErrOrderStatusAlreadySatisfyCurOperation + globals.SugarLogger.Debugf("SelfDeliverDelievering orderID:%s, status:%d already ok", order.VendorOrderID, order.Status) + } } return err } @@ -154,7 +166,13 @@ func (c *BaseScheduler) SelfDeliverDelievered(order *model.GoodsOrder, userName }, "SelfDeliverDelievered orderID:%s", order.VendorOrderID) } } else { - globals.SugarLogger.Infof("SelfDeliverDelievered orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) + if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusDelivering { + err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation + globals.SugarLogger.Infof("SelfDeliverDelievered orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) + } else { + err = scheduler.ErrOrderStatusAlreadySatisfyCurOperation + globals.SugarLogger.Debugf("SelfDeliverDelievered orderID:%s, status:%d already ok", order.VendorOrderID, order.Status) + } } return err } diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index ccc7371c0..35f611725 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -1,43 +1,110 @@ 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) (bills []*model.Waybill, err error) { +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 { - bill, err2 := c.CreateWaybill(model.VendorIDMTPS, order, nil) - if err = err2; err == nil { - return []*model.Waybill{ - bill, - }, 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 } -func (c *BaseScheduler) Swtich2SelfDeliverAndUpdateStatus(vendorOrderID string, vendorID int, userName string) (err error) { +// 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 { - err = c.Swtich2SelfDeliver(order, userName) + if getStoreDeliveryType(order) == scheduler.StoreDeliveryTypeByStore { + err = c.SelfDeliverDelievering(order, userName) + } else { + err = c.Swtich2SelfDeliver(order, userName) + } if err == nil { order.Status = model.OrderStatusDelivering - err = partner.CurOrderManager.UpdateOrderStatusDirectly(order) + 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 - err = partner.CurOrderManager.UpdateOrderStatusDirectly(order) + 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 +} diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 5ec3e05a6..cc3816f28 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -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 && err != scheduler.ErrOrderStatusAlreadySatisfyCurOperation { // 为了解决京东新消息与接单消息乱序的问题 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 { @@ -477,41 +477,43 @@ func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill2 func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInfo, bill *model.Waybill, retryCount int, duration time.Duration) { order := savedOrderInfo.order globals.SugarLogger.Debugf("swtich2SelfDeliverWithRetry orderID:%s", order.VendorOrderID) - if order.WaybillVendorID != order.VendorID { - 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() { - jxutils.CallMsgHandlerAsync(func() { - s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, retryCount-1, duration) - }, order.VendorOrderID) - }) - } else { - globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry finally failed, orderID:%s bill:%v, err:%v", order.VendorOrderID, bill, err) + if !savedOrderInfo.isSwitched2SelfDelivery { + if order.WaybillVendorID != order.VendorID { + if err := s.Swtich2SelfDeliver(order, ""); err != nil && err != scheduler.ErrOrderStatusAlreadySatisfyCurOperation { + globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry failed, bill:%v, err:%v", bill, err) + if retryCount > 0 { + time.AfterFunc(duration, func() { + jxutils.CallMsgHandlerAsync(func() { + s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, retryCount-1, duration) + }, order.VendorOrderID) + }) + } else { + globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry finally failed, orderID:%s bill:%v, err:%v", order.VendorOrderID, bill, err) - tmpLog := &legacymodel.TempLog{ - VendorOrderID: bill.VendorWaybillID, - RefVendorOrderID: order.VendorOrderID, - Msg: fmt.Sprintf("swtich2SelfDeliverWithRetry finally failed, orderID:%s bill:%v, err:%v", order.VendorOrderID, bill, err), - } - db := orm.NewOrm() - db.Insert(tmpLog) + tmpLog := &legacymodel.TempLog{ + VendorOrderID: bill.VendorWaybillID, + RefVendorOrderID: order.VendorOrderID, + Msg: fmt.Sprintf("swtich2SelfDeliverWithRetry finally failed, orderID:%s bill:%v, err:%v", order.VendorOrderID, bill, err), + } + db := orm.NewOrm() + db.Insert(tmpLog) - if s.CancelWaybill(bill, partner.CancelWaybillReasonSwitch2SelfFailed, partner.CancelWaybillReasonStrSwitch2SelfFailed) == nil { - // 转自送失败的取消,要将订单中的运单状态更新 - if s.isBillCandidate(order, bill) { - bill.WaybillVendorID = model.VendorIDUnknown - s.updateOrderByBill(order, bill, false) + if s.CancelWaybill(bill, partner.CancelWaybillReasonSwitch2SelfFailed, partner.CancelWaybillReasonStrSwitch2SelfFailed) == nil { + // 转自送失败的取消,要将订单中的运单状态更新 + if s.isBillCandidate(order, bill) { + bill.WaybillVendorID = model.VendorIDUnknown + s.updateOrderByBill(order, bill, false) + } } } + } else { + savedOrderInfo.isSwitched2SelfDelivery = true } } else { - savedOrderInfo.isSwitched2SelfDelivery = true + // 进到这里的原因是,在这个时间点,购物平台物流已经抢单(但抢单消息还没有被收到),所以转自送会失败 (比如:818810379000941),更好的做法应该是判断Swtich2SelfDeliver的返回值,这种情况下就不得试了 + globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry orderID:%s status is wrong(maybe purchase platform accepted waybill)", order.VendorOrderID) + // globals.SugarLogger.Warnf("swtich2SelfDeliverWithRetry orderID:%s status is wrong, order details:%v", order.VendorOrderID, order) } - } else { - // 进到这里的原因是,在这个时间点,购物平台物流已经抢单(但抢单消息还没有被收到),所以转自送会失败 (比如:818810379000941),更好的做法应该是判断Swtich2SelfDeliver的返回值,这种情况下就不得试了 - globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry orderID:%s status is wrong(maybe purchase platform accepted waybill)", order.VendorOrderID) - // globals.SugarLogger.Warnf("swtich2SelfDeliverWithRetry orderID:%s status is wrong, order details:%v", order.VendorOrderID, order) } } @@ -697,7 +699,11 @@ func (s *DefScheduler) updateOrderByBill(order *model.GoodsOrder, bill *model.Wa } func (s *DefScheduler) autoPickupGood(order *model.GoodsOrder) (err error) { - return s.PickupGoods(order, "") + err = s.PickupGoods(order, "") + if err == scheduler.ErrOrderStatusAlreadySatisfyCurOperation { + err = nil + } + return err } func (s *DefScheduler) isBillCandidate(order *model.GoodsOrder, bill *model.Waybill) bool { diff --git a/business/jxcallback/scheduler/scheduler.go b/business/jxcallback/scheduler/scheduler.go index b76c402e0..4669975e5 100644 --- a/business/jxcallback/scheduler/scheduler.go +++ b/business/jxcallback/scheduler/scheduler.go @@ -33,7 +33,9 @@ var ( ) var ( - ErrStatusIsNotOKForOperation = errors.New("当前状态操作无效") + ErrOrderStatusIsNotSuitable4CurOperation = errors.New("订单状态不适合当前操作") + ErrOrderStatusAlreadySatisfyCurOperation = errors.New("订单当前状态已满足当前操作") + ErrCanNotCreateAtLeastOneWaybill = errors.New("一个运单都不能创建") ErrCanNotFindOrder = errors.New("不能找到订单(一般是由于事件错序)") ErrCanNotFindWaybill = errors.New("不能找到运单(一般是由于事件错序)") diff --git a/business/jxstore/skuman/skuman.go b/business/jxstore/skuman/skuman.go new file mode 100644 index 000000000..8dd693da4 --- /dev/null +++ b/business/jxstore/skuman/skuman.go @@ -0,0 +1,33 @@ +package skuman + +import ( + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" +) + +const ( + defJdCategoryID = 20462 +) + +type Sku struct { + *model.Sku +} + +func New(sku *model.Sku) *Sku { + return &Sku{ + Sku: sku, + } +} + +func GetJdCategoryID(sku *model.Sku) int { + cat, _ := dao.GetCategory(sku.CategoryID, nil) + jdCategoryID := defJdCategoryID + if cat != nil && cat.JdCategoryID != 0 { + jdCategoryID = cat.JdCategoryID + } + return jdCategoryID +} + +func GetCategories(sku *model.Sku) []int { + return nil +} diff --git a/business/model/dao/sku.go b/business/model/dao/sku.go new file mode 100644 index 000000000..9a2615c1c --- /dev/null +++ b/business/model/dao/sku.go @@ -0,0 +1,20 @@ +package dao + +import ( + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/globals/gormdb" + "github.com/jinzhu/gorm" +) + +func GetCategory(ID int, db *gorm.DB) (*model.SkuCategory, error) { + if db == nil { + db = gormdb.GetDB() + } + item := &model.SkuCategory{} + item.ID = ID + err := utils.CallFuncLogError(func() error { + return db.First(item).Error + }, "GetCategory") + return item, err +} diff --git a/business/model/dao/store.go b/business/model/dao/store.go new file mode 100644 index 000000000..9c8650b61 --- /dev/null +++ b/business/model/dao/store.go @@ -0,0 +1,20 @@ +package dao + +import ( + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/globals/gormdb" + "github.com/jinzhu/gorm" +) + +func GetStore(ID int, db *gorm.DB) (*model.Store, error) { + if db == nil { + db = gormdb.GetDB() + } + item := &model.Store{} + item.ID = ID + err := utils.CallFuncLogError(func() error { + return db.First(item).Error + }, "GetStore") + return item, err +} diff --git a/business/model/order.go b/business/model/order.go index 096d192e6..1ed109328 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -8,13 +8,13 @@ type ModelTimeInfo struct { } type GoodsOrder struct { - ID int64 `orm:"column(id)" json:"_"` + ID int64 `orm:"column(id)" json:"-"` VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` VendorID int `orm:"column(vendor_id)" json:"vendorID"` VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"` StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid JxStoreID int `orm:"column(jx_store_id)" json:"jxStoreID"` // 根据VendorStoreID在本地系统里查询出来的 jxstoreid - StoreName string `orm:"size(64)" json:"_"` + StoreName string `orm:"size(64)" json:"-"` ShopPrice int64 `json:"shopPrice"` // 单位为分 门店标价 SalePrice int64 `json:"salePrice"` // 单位为分 售卖价 ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付 @@ -22,35 +22,35 @@ type GoodsOrder struct { ConsigneeName string `orm:"size(32)" json:"consigneeName"` ConsigneeMobile string `orm:"size(32)" json:"consigneeMobile"` ConsigneeAddress string `orm:"size(255)" json:"consigneeAddress"` - CoordinateType int `json:"_"` - ConsigneeLng int `json:"_"` // 坐标 * (10的六次方) - ConsigneeLat int `json:"_"` // 坐标 * (10的六次方) + CoordinateType int `json:"-"` + ConsigneeLng int `json:"-"` // 坐标 * (10的六次方) + ConsigneeLat int `json:"-"` // 坐标 * (10的六次方) SkuCount int `json:"skuCount"` // 商品类别数量,即有多少种商品(注意在某些情况下,相同SKU的商品由于售价不同,也会当成不同商品在这个值里) GoodsCount int `json:"goodsCount"` // 商品个数 Status int `json:"status"` // 参见OrderStatus*相关的常量定义 - VendorStatus string `orm:"size(255)" json:"_"` + VendorStatus string `orm:"size(255)" json:"-"` LockStatus int `json:"lockStatus"` OrderSeq int `json:"orderSeq"` // 门店订单序号 BuyerComment string `orm:"size(255)" json:"buyerComment"` BusinessType int `json:"businessType"` ExpectedDeliveredTime time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间 - CancelApplyReason string `orm:"size(255)" json:"_"` // ""表示没有申请,不为null表示用户正在取消申请 + CancelApplyReason string `orm:"size(255)" json:"-"` // ""表示没有申请,不为null表示用户正在取消申请 VendorWaybillID string `orm:"column(vendor_waybill_id);size(48)" json:"vendorWaybillID"` WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"` // 表示当前承运商,-1表示还没有安排 DuplicatedCount int // 重复新订单消息数,这个一般不是由于消息重发造成的(消息重发由OrderStatus过滤),一般是业务逻辑造成的 OrderCreatedAt time.Time `orm:"type(datetime);index" json:"orderCreatedAt"` // 这里记录的是订单生效时间,即用户支付完成(货到付款即为下单时间) OrderFinishedAt time.Time `orm:"type(datetime)" json:"orderFinishedAt"` - StatusTime time.Time `orm:"type(datetime)" json:"_"` // last status time - ModelTimeInfo `json:"_"` - OriginalData string `orm:"type(text)" json:"_"` - Skus []*OrderSku `orm:"-" json:"_"` - SkuPmFee int64 `json:"_"` //门店商品促销总支出 - OrderPmFee int64 `json:"_"` //门店订单促销支出 - SkuPmSubsidy int64 `json:"_"` //平台商品促销总补贴 - OrderPmSubsidy int64 `json:"_"` //平台订单促销补贴 - BoxFee int64 `json:"_"` //餐盒费 - PlatformFeeRate int16 `json:"_"` //平台费 - BillStoreFreightFee int64 `json:"_"` //需要回调,门店所承担的运费 + StatusTime time.Time `orm:"type(datetime)" json:"-"` // last status time + ModelTimeInfo `json:"-"` + OriginalData string `orm:"type(text)" json:"-"` + Skus []*OrderSku `orm:"-" json:"-"` + SkuPmFee int64 `json:"-"` //门店商品促销总支出 + OrderPmFee int64 `json:"-"` //门店订单促销支出 + SkuPmSubsidy int64 `json:"-"` //平台商品促销总补贴 + OrderPmSubsidy int64 `json:"-"` //平台订单促销补贴 + BoxFee int64 `json:"-"` //餐盒费 + PlatformFeeRate int16 `json:"-"` //平台费 + BillStoreFreightFee int64 `json:"-"` //需要回调,门店所承担的运费 } func (o *GoodsOrder) TableUnique() [][]string { @@ -60,24 +60,24 @@ func (o *GoodsOrder) TableUnique() [][]string { } type OrderSku struct { - ID int64 `orm:"column(id)" json:"_"` + ID int64 `orm:"column(id)" json:"-"` VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` VendorID int `orm:"column(vendor_id)" json:"vendorID"` StoreSubID int `orm:"column(store_sub_id)" json:"storeSubID"` StoreSubName string `orm:"size(64)" json:"storeSubName"` Count int `json:"count"` - VendorSkuID string `orm:"column(vendor_sku_id);size(48)" json:"_"` + VendorSkuID string `orm:"column(vendor_sku_id);size(48)" json:"-"` SkuID int `orm:"column(sku_id)" json:"skuID"` // 外部系统里记录的 jxskuid JxSkuID int `orm:"column(jx_sku_id)" json:"jxSkuID"` // 根据VendorSkuID在本地系统里查询出来的 jxskuid SkuName string `orm:"size(255)" json:"skuName"` ShopPrice int64 `json:"shopPrice"` // 门店标价 SalePrice int64 `json:"salePrice"` // 售卖价 - Weight int `json:"_"` // 单位为克 - SkuType int `json:"_"` // 当前如果为gift就为1,否则缺省为0 - PromotionType int `json:"_"` // todo 当前是用于记录京东的PromotionType(生成jxorder用),没有做转换 - OrderCreatedAt time.Time `orm:"type(datetime);index" json:"_"` // 分区考虑 - SkuPmSubsidy int64 `json:"_"` //平台商品活动补贴 - SkuPmFee int64 `json:"_"` //门店商品促销支出 + Weight int `json:"-"` // 单位为克 + SkuType int `json:"-"` // 当前如果为gift就为1,否则缺省为0 + PromotionType int `json:"-"` // todo 当前是用于记录京东的PromotionType(生成jxorder用),没有做转换 + OrderCreatedAt time.Time `orm:"type(datetime);index" json:"-"` // 分区考虑 + SkuPmSubsidy int64 `json:"-"` //平台商品活动补贴 + SkuPmFee int64 `json:"-"` //门店商品促销支出 } // 同样商品在一个订单中可能重复出现(比如搞活动时,相同商品价格不一样,第一个有优惠) @@ -99,10 +99,10 @@ type Waybill struct { CourierMobile string `orm:"size(32)" json:"-"` Status int `json:"-"` // 参见WaybillStatus*相关的常量定义 VendorStatus string `orm:"size(255)" json:"-"` - ActualFee int64 `json:"actual_fee"` // 实际要支付给快递公司的费用 - DesiredFee int64 `json:"desired_fee"` // 运单总费用 - DuplicatedCount int `json:"-"` // 重复新订单消息数,这个一般不是由于消息重发造成的(消息重发由OrderStatus过滤),一般是业务逻辑造成的 - WaybillCreatedAt time.Time `orm:"type(datetime);index" json:"_"` + ActualFee int64 `json:"actualFee"` // 实际要支付给快递公司的费用 + DesiredFee int64 `json:"desiredFee"` // 运单总费用 + DuplicatedCount int `json:"-"` // 重复新订单消息数,这个一般不是由于消息重发造成的(消息重发由OrderStatus过滤),一般是业务逻辑造成的 + WaybillCreatedAt time.Time `orm:"type(datetime);index" json:"-"` WaybillFinishedAt time.Time `orm:"type(datetime)" json:"-"` StatusTime time.Time `orm:"type(datetime)" json:"-"` // last status time ModelTimeInfo `json:"-"` diff --git a/business/model/product.go b/business/model/product.go index bba0d315c..c5479d562 100644 --- a/business/model/product.go +++ b/business/model/product.go @@ -50,10 +50,9 @@ var ( // 这个指的是京东自已的商品分类,与商家自己的商品分类是两回事 type SkuJdCategory struct { ModelIDCUO - Name string `gorm:"type:varchar(255);unique_index"` - Status int + Name string `gorm:"type:varchar(255);index"` Level int - ParentID int64 + ParentID int } type SkuCategory struct { @@ -64,8 +63,8 @@ type SkuCategory struct { Type int8 // 类别类型 Seq int - JdID int64 `gorm:"index"` // 这个是指商家自己的商品类别在京东平台上的ID - JdCategoryID int64 // 这个是指对应的京东商品类别 + JdID int `gorm:"index"` // 这个是指商家自己的商品类别在京东平台上的ID + JdCategoryID int // 这个是指对应的京东商品类别 ElmID string `gorm:"type:varchar(48);index"` MtID string `gorm:"type:varchar(48);index"` DidiID string `gorm:"type:varchar(48);index"` diff --git a/business/partner/delivery/dada/waybill_test.go b/business/partner/delivery/dada/waybill_test.go index 2bd0031aa..2ec620af0 100644 --- a/business/partner/delivery/dada/waybill_test.go +++ b/business/partner/delivery/dada/waybill_test.go @@ -34,7 +34,7 @@ func TestCreateWaybill(t *testing.T) { VendorOrderID: orderID, WaybillVendorID: model.VendorIDDada, } - err = c.CancelWaybill(bill) + err = c.CancelWaybill(bill, partner.CancelWaybillReasonOther, "") if err != nil { t.Fatal(err.Error()) } diff --git a/business/partner/delivery/mtps/waybill_test.go b/business/partner/delivery/mtps/waybill_test.go index 64a12d88d..284065337 100644 --- a/business/partner/delivery/mtps/waybill_test.go +++ b/business/partner/delivery/mtps/waybill_test.go @@ -38,7 +38,7 @@ func TestCancelWaybill(t *testing.T) { VendorWaybillID2: "55", } c := new(DeliveryHandler) - if err := c.CancelWaybill(bill); err != nil { + if err := c.CancelWaybill(bill, partner.CancelWaybillReasonOther, ""); err != nil { t.Fatal(err.Error()) } } diff --git a/business/partner/partner.go b/business/partner/partner.go index b7448ae1e..29226f021 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -16,6 +16,7 @@ var ( CancelWaybillReasonStrNotAcceptIntime = "没有及时抢单" CancelWaybillReasonStrSwitch2SelfFailed = "转自送失败" CancelWaybillReasonStrOrderAlreadyFinished = "订单已经结束" + CancelWaybillReasonStrActive = "操作由人员主动发起" ) var ( diff --git a/business/partner/purchase/jd/order_test.go b/business/partner/purchase/jd/order_test.go index 05890349e..b5e906203 100644 --- a/business/partner/purchase/jd/order_test.go +++ b/business/partner/purchase/jd/order_test.go @@ -26,7 +26,7 @@ func TestSwitch2SelfDeliver(t *testing.T) { if order, err := partner.CurOrderManager.LoadOrder(orderID, model.VendorIDJD); err == nil { // globals.SugarLogger.Debug(order) c := new(PurchaseHandler) - if err = c.Swtich2SelfDeliver(order); err == nil { + if err = c.Swtich2SelfDeliver(order, ""); err == nil { } else { t.Fatal(err.Error()) } diff --git a/business/partner/purchase/jd/sku.go b/business/partner/purchase/jd/sku.go index bcaaa7726..aad9a4ccc 100644 --- a/business/partner/purchase/jd/sku.go +++ b/business/partner/purchase/jd/sku.go @@ -6,8 +6,8 @@ import ( func (p *PurchaseHandler) AddSku(sku *model.Sku) error { // params := map[string]interface{}{ - // "outSkuId": utils.Int2Str(int(sku.ID)), - // "categoryId": + // "outSkuId": utils.Int2Str(int(sku.ID)), + // "categoryId": skuman.GetJdCategoryID(sku), // } return nil } diff --git a/business/partner/purchase/jd/waybill.go b/business/partner/purchase/jd/waybill.go index b2237bd6f..c8409be8b 100644 --- a/business/partner/purchase/jd/waybill.go +++ b/business/partner/purchase/jd/waybill.go @@ -31,14 +31,14 @@ func (c *PurchaseHandler) onWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (re } order.Status = model.WaybillStatusAccepted case jdapi.DeliveryStatusCourierCanceled: - order.Status = model.WaybillStatusCanceled + order.Status = model.WaybillStatusAcceptCanceled case jdapi.DeliveryStatusCourierArrived: order.Status = model.WaybillStatusCourierArrived case jdapi.DeliveryStatusGotGoods: order.Status = model.WaybillStatusDelivering case jdapi.DeliveryStatusFinished: order.Status = model.WaybillStatusDelivered - case jdapi.DeliveryStatusFailedDelivery, jdapi.DeliveryStatusFailedGetGoods: + case jdapi.DeliveryStatusFailedDelivery: //, jdapi.DeliveryStatusFailedGetGoods: todo 取货失败不当成投递失败 order.Status = model.WaybillStatusFailed default: order.Status = model.WaybillStatusUnknown diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 274ca5224..e830fbddb 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -22,11 +22,13 @@ func GetUserNameFromToken(token string) string { } func (c *OrderController) URLMapping() { - c.Mapping("FinishedPickup", c.FinishedPickup) c.Mapping("GetStoreOrderInfo", c.GetStoreOrderInfo) c.Mapping("GetOrderSkuInfo", c.GetOrderSkuInfo) + + c.Mapping("FinishedPickup", c.FinishedPickup) + c.Mapping("SelfDelivering", c.SelfDelivering) c.Mapping("CreateWaybillOnProviders", c.CreateWaybillOnProviders) - c.Mapping("Swtich2SelfDeliver", c.Swtich2SelfDeliver) + c.Mapping("SelfDelivered", c.SelfDelivered) } func (c *OrderController) orderOperate(handler func(vendorOrderID string, vendorID int, userName string) (interface{}, error)) { @@ -81,16 +83,30 @@ func (c *OrderController) FinishedPickup() { } // @Title 转自送 -// @Description 转自送 +// @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() { +// @router /SelfDelivering [post] +func (c *OrderController) SelfDelivering() { c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) { - return nil, basesch.FixedBaseScheduler.Swtich2SelfDeliverAndUpdateStatus(vendorOrderID, vendorID, userName) + return nil, basesch.FixedBaseScheduler.SelfDeliveringAndUpdateStatus(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 /SelfDelivered [post] +func (c *OrderController) SelfDelivered() { + c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) { + return nil, basesch.FixedBaseScheduler.SelfDeliveredAndUpdateStatus(vendorOrderID, vendorID, userName) }) } @@ -104,7 +120,7 @@ func (c *OrderController) Swtich2SelfDeliver() { // @router /CreateWaybillOnProviders [post] func (c *OrderController) CreateWaybillOnProviders() { c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) { - return basesch.FixedBaseScheduler.CreateWaybillOnProviders(vendorOrderID, vendorID) + return basesch.FixedBaseScheduler.CreateWaybillOnProviders(vendorOrderID, vendorID, userName) }) } @@ -118,13 +134,14 @@ func (c *OrderController) CreateWaybillOnProviders() { // @router /GetStoreOrderCountInfo [get] func (c *OrderController) GetStoreOrderCountInfo() { var ( - storeID string - lastHours int - err error + storeID, token string + lastHours int + err error ) + token = c.Ctx.Input.Header("token") storeID = c.GetString("storeID") lastHours, err1 := c.GetInt("lastHours", 0) - if storeID != "" && err1 == nil { + if token != "" && storeID != "" && err1 == nil { result, err2 := orderman.FixedOrderManager.GetStoreOrderCountInfo(storeID, lastHours) if err = err2; err == nil { c.Data["json"] = &model.CallResult{ @@ -134,6 +151,9 @@ func (c *OrderController) GetStoreOrderCountInfo() { } } errMsg := jxutils.Errs2Str("", err1, err) + if token == "" { + errMsg += "token is empty\n" + } if storeID == "" { errMsg += "storeID is empty\n" } @@ -160,10 +180,11 @@ func (c *OrderController) GetStoreOrderCountInfo() { // @router /GetStoreOrderInfo [get] func (c *OrderController) GetStoreOrderInfo() { var ( - storeID string + storeID, token string lastHours, fromStatus, toStatus, offset, pageSize int err error ) + token = c.Ctx.Input.Header("token") storeID = c.GetString("storeID") lastHours, err1 := c.GetInt("lastHours", 0) fromStatus, err2 := c.GetInt("fromStatus", 0) @@ -171,7 +192,7 @@ func (c *OrderController) GetStoreOrderInfo() { offset, err4 := c.GetInt("offset", 0) pageSize, err5 := c.GetInt("pageSize", 0) - if storeID != "" && err1 == nil && err2 == nil && err3 == nil && err4 == nil && err5 == nil { + if token != "" && storeID != "" && err1 == nil && err2 == nil && err3 == nil && err4 == nil && err5 == nil { result, err2 := orderman.FixedOrderManager.GetStoreOrderInfo(storeID, lastHours, fromStatus, toStatus, offset, pageSize) if err = err2; err == nil { c.Data["json"] = &model.CallResult{ @@ -181,6 +202,9 @@ func (c *OrderController) GetStoreOrderInfo() { } } errMsg := jxutils.Errs2Str("", err1, err2, err3, err) + if token == "" { + errMsg += "token is empty\n" + } if storeID == "" { errMsg += "storeID is empty\n" } diff --git a/globals/gormdb/gormdb.go b/globals/gormdb/gormdb.go index eb5075b86..f03e292be 100644 --- a/globals/gormdb/gormdb.go +++ b/globals/gormdb/gormdb.go @@ -32,10 +32,10 @@ func AutoMigrate() { // db.DropTableIfExists(&model.Place{}) // db.DropTableIfExists(&model.Store{}, &model.StoreSub{}, &model.StoreMap{}) - // db.DropTableIfExists(&model.SkuCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{}) + // db.DropTableIfExists(&model.SkuCategory{}, &model.SkuJdCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{}) db.AutoMigrate(&model.Place{}) db.AutoMigrate(&model.Store{}, &model.StoreSub{}, &model.StoreMap{}) - db.AutoMigrate(&model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{}) + db.AutoMigrate(&model.SkuJdCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{}) db.Set("gorm:table_options", "CHARSET=utf8mb4").AutoMigrate(&model.SkuCategory{}) } diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 1a30ac29c..1c5ee2fdd 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -49,8 +49,16 @@ func init() { beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"], beego.ControllerComments{ - Method: "Swtich2SelfDeliver", - Router: `/Swtich2SelfDeliver`, + Method: "SelfDelivered", + Router: `/SelfDelivered`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Params: nil}) + + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"], + beego.ControllerComments{ + Method: "SelfDelivering", + Router: `/SelfDelivering`, AllowHTTPMethods: []string{"post"}, MethodParams: param.Make(), Params: nil})