Merge branch 'jxstore'
This commit is contained in:
@@ -208,7 +208,7 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db orm.O
|
|||||||
if values, ok := skumapper[v.VendorSkuID]; ok {
|
if values, ok := skumapper[v.VendorSkuID]; ok {
|
||||||
v.JxSkuID = int(utils.Str2Int64(utils.Interface2String(values[1])))
|
v.JxSkuID = int(utils.Str2Int64(utils.Interface2String(values[1])))
|
||||||
v.ShopPrice = utils.Str2Int64WithDefault(utils.Interface2String(values[2]), 0)
|
v.ShopPrice = utils.Str2Int64WithDefault(utils.Interface2String(values[2]), 0)
|
||||||
order.ShopPrice += v.ShopPrice
|
order.ShopPrice += v.ShopPrice * int64(v.Count)
|
||||||
if v.ShopPrice == 0 {
|
if v.ShopPrice == 0 {
|
||||||
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营2]京东订单sku门店价格为零(一般原因为没有门店价格信息),orderID:%s, StoreID:%d, SkuID:%d, sku:%v", order.VendorOrderID, jxStoreID, v.JxSkuID, v)
|
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 v.SkuID != 0 {
|
||||||
if values, ok := skumapper[utils.Int2Str(v.SkuID)]; ok {
|
if values, ok := skumapper[utils.Int2Str(v.SkuID)]; ok {
|
||||||
v.ShopPrice = utils.Str2Int64WithDefault(utils.Interface2String(values[2]), 0)
|
v.ShopPrice = utils.Str2Int64WithDefault(utils.Interface2String(values[2]), 0)
|
||||||
order.ShopPrice += v.ShopPrice
|
order.ShopPrice += v.ShopPrice * int64(v.Count)
|
||||||
if v.ShopPrice == 0 {
|
if v.ShopPrice == 0 {
|
||||||
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营2]饿了么订单sku门店价格为零,orderID:%s, StoreID:%d, SkuID:%d, sku:%v", order.VendorOrderID, jxStoreID, v.SkuID, v)
|
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)
|
}, "LoadOrder orderID:%s", vendorOrderID)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if err == orm.ErrNoRows {
|
||||||
|
err = ErrCanNotFindOrder
|
||||||
|
}
|
||||||
globals.SugarLogger.Infof("LoadOrder orderID:%s failed with error:%v", vendorOrderID, err)
|
globals.SugarLogger.Infof("LoadOrder orderID:%s failed with error:%v", vendorOrderID, err)
|
||||||
}
|
}
|
||||||
return order, err
|
return order, err
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package orderman
|
package orderman
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"sort"
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -20,6 +21,10 @@ const (
|
|||||||
maxSleepGapHandlePendingOrder = 5 * time.Millisecond // 每个pending order的最长时间间隙
|
maxSleepGapHandlePendingOrder = 5 * time.Millisecond // 每个pending order的最长时间间隙
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrCanNotFindOrder = errors.New("找不到相应订单")
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
FixedOrderManager *OrderManager
|
FixedOrderManager *OrderManager
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package orderman
|
package orderman
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
@@ -16,11 +15,8 @@ const (
|
|||||||
defPageSize = 50
|
defPageSize = 50
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
ErrCanNotFindOrder = errors.New("找不到相应订单")
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *OrderManager) GetStoreOrderInfo(storeID string, lastHours int, fromStatus, toStatus, offset, pageSize int) (orders []*model.GoodsOrderExt, err error) {
|
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 {
|
if lastHours > maxLastHours {
|
||||||
lastHours = maxLastHours
|
lastHours = maxLastHours
|
||||||
} else if lastHours == 0 {
|
} 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) = ?
|
WHERE IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) = ?
|
||||||
AND t1.order_created_at >= ?
|
AND t1.order_created_at >= ?
|
||||||
AND t1.Status >= ? AND t1.Status <= ?
|
AND t1.Status >= ? AND t1.Status <= ?
|
||||||
|
ORDER BY t1.order_created_at
|
||||||
LIMIT ? OFFSET ?
|
LIMIT ? OFFSET ?
|
||||||
`, storeID, time.Now().Add(-time.Duration(lastHours)*time.Hour), fromStatus, toStatus, pageSize, offset).QueryRows(&orders)
|
`, storeID, time.Now().Add(-time.Duration(lastHours)*time.Hour), fromStatus, toStatus, pageSize, offset).QueryRows(&orders)
|
||||||
if err == nil {
|
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) {
|
func (c *OrderManager) GetStoreOrderCountInfo(storeID string, lastHours int) (countInfo []*model.GoodsOrderCountInfo, err error) {
|
||||||
|
globals.SugarLogger.Debugf("GetStoreOrderCountInfo storeID:%s", storeID)
|
||||||
if lastHours > maxLastHours {
|
if lastHours > maxLastHours {
|
||||||
lastHours = maxLastHours
|
lastHours = maxLastHours
|
||||||
} else if lastHours == 0 {
|
} 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) = ?
|
WHERE IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) = ?
|
||||||
AND t1.order_created_at >= ?
|
AND t1.order_created_at >= ?
|
||||||
GROUP BY 1
|
GROUP BY 1
|
||||||
|
ORDER BY 1
|
||||||
`, storeID, time.Now().Add(-time.Duration(lastHours)*time.Hour)).QueryRows(&countInfo)
|
`, storeID, time.Now().Add(-time.Duration(lastHours)*time.Hour)).QueryRows(&countInfo)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return countInfo, 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) {
|
func (c *OrderManager) GetOrderSkuInfo(vendorOrderID string, vendorID int) (skus []*model.OrderSkuExt, err error) {
|
||||||
|
globals.SugarLogger.Debugf("GetOrderSkuInfo orderID:%s", vendorOrderID)
|
||||||
db := orm.NewOrm()
|
db := orm.NewOrm()
|
||||||
num, err := db.Raw(`
|
num, err := db.Raw(`
|
||||||
SELECT t1.*, t3.img image
|
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 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
|
LEFT JOIN jx_sku_name t3 ON t2.nameid = t3.id
|
||||||
WHERE vendor_order_id = ? AND vendor_id = ?
|
WHERE vendor_order_id = ? AND vendor_id = ?
|
||||||
|
ORDER BY t1.sku_name
|
||||||
`, vendorOrderID, vendorID).QueryRows(&skus)
|
`, vendorOrderID, vendorID).QueryRows(&skus)
|
||||||
if err == nil && num > 0 {
|
if err == nil && num > 0 {
|
||||||
return skus, nil
|
return skus, nil
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package basesch
|
package basesch
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
@@ -21,10 +20,6 @@ var (
|
|||||||
FixedBaseScheduler *BaseScheduler
|
FixedBaseScheduler *BaseScheduler
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
ErrOrderStatusIsNotSuitable = errors.New("订单状态不适合当前操作")
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *BaseScheduler) Init() {
|
func (c *BaseScheduler) Init() {
|
||||||
c.PurchasePlatformHandlers = make(map[int]partner.IPurchasePlatformHandler)
|
c.PurchasePlatformHandlers = make(map[int]partner.IPurchasePlatformHandler)
|
||||||
c.DeliveryPlatformHandlers = make(map[int]*scheduler.DeliveryPlatformHandlerInfo)
|
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)
|
}, "AcceptOrRefuseOrder orderID:%s, isAcceptIt:%t", order.VendorOrderID, isAcceptIt)
|
||||||
}
|
}
|
||||||
} else {
|
} 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
|
return err
|
||||||
}
|
}
|
||||||
@@ -85,9 +81,12 @@ func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder, userName string) (e
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusAccepted {
|
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
|
return err
|
||||||
}
|
}
|
||||||
@@ -104,10 +103,13 @@ func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder, userName str
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusFinishedPickup {
|
if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusFinishedPickup || order.VendorID == order.WaybillVendorID {
|
||||||
err = ErrOrderStatusIsNotSuitable
|
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
|
return err
|
||||||
}
|
}
|
||||||
@@ -121,7 +123,13 @@ func (c *BaseScheduler) Swtich2SelfDelivered(order *model.GoodsOrder, userName s
|
|||||||
}, "Swtich2SelfDelivered orderID:%s", order.VendorOrderID)
|
}, "Swtich2SelfDelivered orderID:%s", order.VendorOrderID)
|
||||||
}
|
}
|
||||||
} else {
|
} 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
|
return err
|
||||||
}
|
}
|
||||||
@@ -137,10 +145,14 @@ func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder, userName
|
|||||||
order.Status = model.OrderStatusDelivering
|
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 {
|
} 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
|
return err
|
||||||
}
|
}
|
||||||
@@ -154,7 +166,13 @@ func (c *BaseScheduler) SelfDeliverDelievered(order *model.GoodsOrder, userName
|
|||||||
}, "SelfDeliverDelievered orderID:%s", order.VendorOrderID)
|
}, "SelfDeliverDelievered orderID:%s", order.VendorOrderID)
|
||||||
}
|
}
|
||||||
} else {
|
} 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
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,43 +1,110 @@
|
|||||||
package basesch
|
package basesch
|
||||||
|
|
||||||
import (
|
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/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
"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)
|
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
bill, err2 := c.CreateWaybill(model.VendorIDMTPS, order, nil)
|
if order.LockStatus != model.OrderStatusLocked && order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin {
|
||||||
if err = err2; err == nil {
|
bill, err2 := c.CreateWaybill(model.VendorIDMTPS, order, nil)
|
||||||
return []*model.Waybill{
|
if err = err2; err == nil {
|
||||||
bill,
|
globals.SugarLogger.Infof("CreateWaybillOnProviders orderID:%s userName:%s bill:%s", vendorOrderID, userName, bill.WaybillVendorID)
|
||||||
}, nil
|
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
|
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)
|
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
|
||||||
if err == nil {
|
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 {
|
if err == nil {
|
||||||
order.Status = model.OrderStatusDelivering
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *BaseScheduler) PickupGoodsAndUpdateStatus(vendorOrderID string, vendorID int, userName string) (err error) {
|
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)
|
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = c.PickupGoods(order, userName)
|
err = c.PickupGoods(order, userName)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
order.Status = model.OrderStatusFinishedPickup
|
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
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ func init() {
|
|||||||
TimeoutAction: func(savedOrderInfo *WatchOrderInfo) (err error) {
|
TimeoutAction: func(savedOrderInfo *WatchOrderInfo) (err error) {
|
||||||
order := savedOrderInfo.order
|
order := savedOrderInfo.order
|
||||||
_ = sch.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, order.ConsigneeMobile, jxutils.GetJxStoreIDFromOrder(order), nil, func(isAcceptIt bool) error {
|
_ = 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 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 {
|
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) {
|
func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInfo, bill *model.Waybill, retryCount int, duration time.Duration) {
|
||||||
order := savedOrderInfo.order
|
order := savedOrderInfo.order
|
||||||
globals.SugarLogger.Debugf("swtich2SelfDeliverWithRetry orderID:%s", order.VendorOrderID)
|
globals.SugarLogger.Debugf("swtich2SelfDeliverWithRetry orderID:%s", order.VendorOrderID)
|
||||||
if order.WaybillVendorID != order.VendorID {
|
if !savedOrderInfo.isSwitched2SelfDelivery {
|
||||||
if err := s.Swtich2SelfDeliver(order, ""); err != nil {
|
if order.WaybillVendorID != order.VendorID {
|
||||||
globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry failed, bill:%v, err:%v", bill, err)
|
if err := s.Swtich2SelfDeliver(order, ""); err != nil && err != scheduler.ErrOrderStatusAlreadySatisfyCurOperation {
|
||||||
if retryCount > 0 {
|
globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry failed, bill:%v, err:%v", bill, err)
|
||||||
time.AfterFunc(duration, func() {
|
if retryCount > 0 {
|
||||||
jxutils.CallMsgHandlerAsync(func() {
|
time.AfterFunc(duration, func() {
|
||||||
s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, retryCount-1, duration)
|
jxutils.CallMsgHandlerAsync(func() {
|
||||||
}, order.VendorOrderID)
|
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)
|
} else {
|
||||||
|
globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry finally failed, orderID:%s bill:%v, err:%v", order.VendorOrderID, bill, err)
|
||||||
|
|
||||||
tmpLog := &legacymodel.TempLog{
|
tmpLog := &legacymodel.TempLog{
|
||||||
VendorOrderID: bill.VendorWaybillID,
|
VendorOrderID: bill.VendorWaybillID,
|
||||||
RefVendorOrderID: order.VendorOrderID,
|
RefVendorOrderID: order.VendorOrderID,
|
||||||
Msg: fmt.Sprintf("swtich2SelfDeliverWithRetry finally failed, orderID:%s bill:%v, err:%v", order.VendorOrderID, bill, err),
|
Msg: fmt.Sprintf("swtich2SelfDeliverWithRetry finally failed, orderID:%s bill:%v, err:%v", order.VendorOrderID, bill, err),
|
||||||
}
|
}
|
||||||
db := orm.NewOrm()
|
db := orm.NewOrm()
|
||||||
db.Insert(tmpLog)
|
db.Insert(tmpLog)
|
||||||
|
|
||||||
if s.CancelWaybill(bill, partner.CancelWaybillReasonSwitch2SelfFailed, partner.CancelWaybillReasonStrSwitch2SelfFailed) == nil {
|
if s.CancelWaybill(bill, partner.CancelWaybillReasonSwitch2SelfFailed, partner.CancelWaybillReasonStrSwitch2SelfFailed) == nil {
|
||||||
// 转自送失败的取消,要将订单中的运单状态更新
|
// 转自送失败的取消,要将订单中的运单状态更新
|
||||||
if s.isBillCandidate(order, bill) {
|
if s.isBillCandidate(order, bill) {
|
||||||
bill.WaybillVendorID = model.VendorIDUnknown
|
bill.WaybillVendorID = model.VendorIDUnknown
|
||||||
s.updateOrderByBill(order, bill, false)
|
s.updateOrderByBill(order, bill, false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
savedOrderInfo.isSwitched2SelfDelivery = true
|
||||||
}
|
}
|
||||||
} else {
|
} 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) {
|
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 {
|
func (s *DefScheduler) isBillCandidate(order *model.GoodsOrder, bill *model.Waybill) bool {
|
||||||
|
|||||||
@@ -33,7 +33,9 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrStatusIsNotOKForOperation = errors.New("当前状态操作无效")
|
ErrOrderStatusIsNotSuitable4CurOperation = errors.New("订单状态不适合当前操作")
|
||||||
|
ErrOrderStatusAlreadySatisfyCurOperation = errors.New("订单当前状态已满足当前操作")
|
||||||
|
|
||||||
ErrCanNotCreateAtLeastOneWaybill = errors.New("一个运单都不能创建")
|
ErrCanNotCreateAtLeastOneWaybill = errors.New("一个运单都不能创建")
|
||||||
ErrCanNotFindOrder = errors.New("不能找到订单(一般是由于事件错序)")
|
ErrCanNotFindOrder = errors.New("不能找到订单(一般是由于事件错序)")
|
||||||
ErrCanNotFindWaybill = errors.New("不能找到运单(一般是由于事件错序)")
|
ErrCanNotFindWaybill = errors.New("不能找到运单(一般是由于事件错序)")
|
||||||
|
|||||||
33
business/jxstore/skuman/skuman.go
Normal file
33
business/jxstore/skuman/skuman.go
Normal file
@@ -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
|
||||||
|
}
|
||||||
20
business/model/dao/sku.go
Normal file
20
business/model/dao/sku.go
Normal file
@@ -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
|
||||||
|
}
|
||||||
20
business/model/dao/store.go
Normal file
20
business/model/dao/store.go
Normal file
@@ -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
|
||||||
|
}
|
||||||
@@ -8,13 +8,13 @@ type ModelTimeInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type GoodsOrder 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"`
|
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"`
|
||||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||||
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"`
|
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"`
|
||||||
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
|
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
|
||||||
JxStoreID int `orm:"column(jx_store_id)" json:"jxStoreID"` // 根据VendorStoreID在本地系统里查询出来的 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"` // 单位为分 门店标价
|
ShopPrice int64 `json:"shopPrice"` // 单位为分 门店标价
|
||||||
SalePrice int64 `json:"salePrice"` // 单位为分 售卖价
|
SalePrice int64 `json:"salePrice"` // 单位为分 售卖价
|
||||||
ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付
|
ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付
|
||||||
@@ -22,35 +22,35 @@ type GoodsOrder struct {
|
|||||||
ConsigneeName string `orm:"size(32)" json:"consigneeName"`
|
ConsigneeName string `orm:"size(32)" json:"consigneeName"`
|
||||||
ConsigneeMobile string `orm:"size(32)" json:"consigneeMobile"`
|
ConsigneeMobile string `orm:"size(32)" json:"consigneeMobile"`
|
||||||
ConsigneeAddress string `orm:"size(255)" json:"consigneeAddress"`
|
ConsigneeAddress string `orm:"size(255)" json:"consigneeAddress"`
|
||||||
CoordinateType int `json:"_"`
|
CoordinateType int `json:"-"`
|
||||||
ConsigneeLng int `json:"_"` // 坐标 * (10的六次方)
|
ConsigneeLng int `json:"-"` // 坐标 * (10的六次方)
|
||||||
ConsigneeLat int `json:"_"` // 坐标 * (10的六次方)
|
ConsigneeLat int `json:"-"` // 坐标 * (10的六次方)
|
||||||
SkuCount int `json:"skuCount"` // 商品类别数量,即有多少种商品(注意在某些情况下,相同SKU的商品由于售价不同,也会当成不同商品在这个值里)
|
SkuCount int `json:"skuCount"` // 商品类别数量,即有多少种商品(注意在某些情况下,相同SKU的商品由于售价不同,也会当成不同商品在这个值里)
|
||||||
GoodsCount int `json:"goodsCount"` // 商品个数
|
GoodsCount int `json:"goodsCount"` // 商品个数
|
||||||
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
|
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
|
||||||
VendorStatus string `orm:"size(255)" json:"_"`
|
VendorStatus string `orm:"size(255)" json:"-"`
|
||||||
LockStatus int `json:"lockStatus"`
|
LockStatus int `json:"lockStatus"`
|
||||||
OrderSeq int `json:"orderSeq"` // 门店订单序号
|
OrderSeq int `json:"orderSeq"` // 门店订单序号
|
||||||
BuyerComment string `orm:"size(255)" json:"buyerComment"`
|
BuyerComment string `orm:"size(255)" json:"buyerComment"`
|
||||||
BusinessType int `json:"businessType"`
|
BusinessType int `json:"businessType"`
|
||||||
ExpectedDeliveredTime time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间
|
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"`
|
VendorWaybillID string `orm:"column(vendor_waybill_id);size(48)" json:"vendorWaybillID"`
|
||||||
WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"` // 表示当前承运商,-1表示还没有安排
|
WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"` // 表示当前承运商,-1表示还没有安排
|
||||||
DuplicatedCount int // 重复新订单消息数,这个一般不是由于消息重发造成的(消息重发由OrderStatus过滤),一般是业务逻辑造成的
|
DuplicatedCount int // 重复新订单消息数,这个一般不是由于消息重发造成的(消息重发由OrderStatus过滤),一般是业务逻辑造成的
|
||||||
OrderCreatedAt time.Time `orm:"type(datetime);index" json:"orderCreatedAt"` // 这里记录的是订单生效时间,即用户支付完成(货到付款即为下单时间)
|
OrderCreatedAt time.Time `orm:"type(datetime);index" json:"orderCreatedAt"` // 这里记录的是订单生效时间,即用户支付完成(货到付款即为下单时间)
|
||||||
OrderFinishedAt time.Time `orm:"type(datetime)" json:"orderFinishedAt"`
|
OrderFinishedAt time.Time `orm:"type(datetime)" json:"orderFinishedAt"`
|
||||||
StatusTime time.Time `orm:"type(datetime)" json:"_"` // last status time
|
StatusTime time.Time `orm:"type(datetime)" json:"-"` // last status time
|
||||||
ModelTimeInfo `json:"_"`
|
ModelTimeInfo `json:"-"`
|
||||||
OriginalData string `orm:"type(text)" json:"_"`
|
OriginalData string `orm:"type(text)" json:"-"`
|
||||||
Skus []*OrderSku `orm:"-" json:"_"`
|
Skus []*OrderSku `orm:"-" json:"-"`
|
||||||
SkuPmFee int64 `json:"_"` //门店商品促销总支出
|
SkuPmFee int64 `json:"-"` //门店商品促销总支出
|
||||||
OrderPmFee int64 `json:"_"` //门店订单促销支出
|
OrderPmFee int64 `json:"-"` //门店订单促销支出
|
||||||
SkuPmSubsidy int64 `json:"_"` //平台商品促销总补贴
|
SkuPmSubsidy int64 `json:"-"` //平台商品促销总补贴
|
||||||
OrderPmSubsidy int64 `json:"_"` //平台订单促销补贴
|
OrderPmSubsidy int64 `json:"-"` //平台订单促销补贴
|
||||||
BoxFee int64 `json:"_"` //餐盒费
|
BoxFee int64 `json:"-"` //餐盒费
|
||||||
PlatformFeeRate int16 `json:"_"` //平台费
|
PlatformFeeRate int16 `json:"-"` //平台费
|
||||||
BillStoreFreightFee int64 `json:"_"` //需要回调,门店所承担的运费
|
BillStoreFreightFee int64 `json:"-"` //需要回调,门店所承担的运费
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *GoodsOrder) TableUnique() [][]string {
|
func (o *GoodsOrder) TableUnique() [][]string {
|
||||||
@@ -60,24 +60,24 @@ func (o *GoodsOrder) TableUnique() [][]string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type OrderSku struct {
|
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"`
|
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"`
|
||||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||||
StoreSubID int `orm:"column(store_sub_id)" json:"storeSubID"`
|
StoreSubID int `orm:"column(store_sub_id)" json:"storeSubID"`
|
||||||
StoreSubName string `orm:"size(64)" json:"storeSubName"`
|
StoreSubName string `orm:"size(64)" json:"storeSubName"`
|
||||||
Count int `json:"count"`
|
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
|
SkuID int `orm:"column(sku_id)" json:"skuID"` // 外部系统里记录的 jxskuid
|
||||||
JxSkuID int `orm:"column(jx_sku_id)" json:"jxSkuID"` // 根据VendorSkuID在本地系统里查询出来的 jxskuid
|
JxSkuID int `orm:"column(jx_sku_id)" json:"jxSkuID"` // 根据VendorSkuID在本地系统里查询出来的 jxskuid
|
||||||
SkuName string `orm:"size(255)" json:"skuName"`
|
SkuName string `orm:"size(255)" json:"skuName"`
|
||||||
ShopPrice int64 `json:"shopPrice"` // 门店标价
|
ShopPrice int64 `json:"shopPrice"` // 门店标价
|
||||||
SalePrice int64 `json:"salePrice"` // 售卖价
|
SalePrice int64 `json:"salePrice"` // 售卖价
|
||||||
Weight int `json:"_"` // 单位为克
|
Weight int `json:"-"` // 单位为克
|
||||||
SkuType int `json:"_"` // 当前如果为gift就为1,否则缺省为0
|
SkuType int `json:"-"` // 当前如果为gift就为1,否则缺省为0
|
||||||
PromotionType int `json:"_"` // todo 当前是用于记录京东的PromotionType(生成jxorder用),没有做转换
|
PromotionType int `json:"-"` // todo 当前是用于记录京东的PromotionType(生成jxorder用),没有做转换
|
||||||
OrderCreatedAt time.Time `orm:"type(datetime);index" json:"_"` // 分区考虑
|
OrderCreatedAt time.Time `orm:"type(datetime);index" json:"-"` // 分区考虑
|
||||||
SkuPmSubsidy int64 `json:"_"` //平台商品活动补贴
|
SkuPmSubsidy int64 `json:"-"` //平台商品活动补贴
|
||||||
SkuPmFee int64 `json:"_"` //门店商品促销支出
|
SkuPmFee int64 `json:"-"` //门店商品促销支出
|
||||||
}
|
}
|
||||||
|
|
||||||
// 同样商品在一个订单中可能重复出现(比如搞活动时,相同商品价格不一样,第一个有优惠)
|
// 同样商品在一个订单中可能重复出现(比如搞活动时,相同商品价格不一样,第一个有优惠)
|
||||||
@@ -99,10 +99,10 @@ type Waybill struct {
|
|||||||
CourierMobile string `orm:"size(32)" json:"-"`
|
CourierMobile string `orm:"size(32)" json:"-"`
|
||||||
Status int `json:"-"` // 参见WaybillStatus*相关的常量定义
|
Status int `json:"-"` // 参见WaybillStatus*相关的常量定义
|
||||||
VendorStatus string `orm:"size(255)" json:"-"`
|
VendorStatus string `orm:"size(255)" json:"-"`
|
||||||
ActualFee int64 `json:"actual_fee"` // 实际要支付给快递公司的费用
|
ActualFee int64 `json:"actualFee"` // 实际要支付给快递公司的费用
|
||||||
DesiredFee int64 `json:"desired_fee"` // 运单总费用
|
DesiredFee int64 `json:"desiredFee"` // 运单总费用
|
||||||
DuplicatedCount int `json:"-"` // 重复新订单消息数,这个一般不是由于消息重发造成的(消息重发由OrderStatus过滤),一般是业务逻辑造成的
|
DuplicatedCount int `json:"-"` // 重复新订单消息数,这个一般不是由于消息重发造成的(消息重发由OrderStatus过滤),一般是业务逻辑造成的
|
||||||
WaybillCreatedAt time.Time `orm:"type(datetime);index" json:"_"`
|
WaybillCreatedAt time.Time `orm:"type(datetime);index" json:"-"`
|
||||||
WaybillFinishedAt time.Time `orm:"type(datetime)" json:"-"`
|
WaybillFinishedAt time.Time `orm:"type(datetime)" json:"-"`
|
||||||
StatusTime time.Time `orm:"type(datetime)" json:"-"` // last status time
|
StatusTime time.Time `orm:"type(datetime)" json:"-"` // last status time
|
||||||
ModelTimeInfo `json:"-"`
|
ModelTimeInfo `json:"-"`
|
||||||
|
|||||||
@@ -50,10 +50,9 @@ var (
|
|||||||
// 这个指的是京东自已的商品分类,与商家自己的商品分类是两回事
|
// 这个指的是京东自已的商品分类,与商家自己的商品分类是两回事
|
||||||
type SkuJdCategory struct {
|
type SkuJdCategory struct {
|
||||||
ModelIDCUO
|
ModelIDCUO
|
||||||
Name string `gorm:"type:varchar(255);unique_index"`
|
Name string `gorm:"type:varchar(255);index"`
|
||||||
Status int
|
|
||||||
Level int
|
Level int
|
||||||
ParentID int64
|
ParentID int
|
||||||
}
|
}
|
||||||
|
|
||||||
type SkuCategory struct {
|
type SkuCategory struct {
|
||||||
@@ -64,8 +63,8 @@ type SkuCategory struct {
|
|||||||
Type int8 // 类别类型
|
Type int8 // 类别类型
|
||||||
Seq int
|
Seq int
|
||||||
|
|
||||||
JdID int64 `gorm:"index"` // 这个是指商家自己的商品类别在京东平台上的ID
|
JdID int `gorm:"index"` // 这个是指商家自己的商品类别在京东平台上的ID
|
||||||
JdCategoryID int64 // 这个是指对应的京东商品类别
|
JdCategoryID int // 这个是指对应的京东商品类别
|
||||||
ElmID string `gorm:"type:varchar(48);index"`
|
ElmID string `gorm:"type:varchar(48);index"`
|
||||||
MtID string `gorm:"type:varchar(48);index"`
|
MtID string `gorm:"type:varchar(48);index"`
|
||||||
DidiID string `gorm:"type:varchar(48);index"`
|
DidiID string `gorm:"type:varchar(48);index"`
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ func TestCreateWaybill(t *testing.T) {
|
|||||||
VendorOrderID: orderID,
|
VendorOrderID: orderID,
|
||||||
WaybillVendorID: model.VendorIDDada,
|
WaybillVendorID: model.VendorIDDada,
|
||||||
}
|
}
|
||||||
err = c.CancelWaybill(bill)
|
err = c.CancelWaybill(bill, partner.CancelWaybillReasonOther, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err.Error())
|
t.Fatal(err.Error())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ func TestCancelWaybill(t *testing.T) {
|
|||||||
VendorWaybillID2: "55",
|
VendorWaybillID2: "55",
|
||||||
}
|
}
|
||||||
c := new(DeliveryHandler)
|
c := new(DeliveryHandler)
|
||||||
if err := c.CancelWaybill(bill); err != nil {
|
if err := c.CancelWaybill(bill, partner.CancelWaybillReasonOther, ""); err != nil {
|
||||||
t.Fatal(err.Error())
|
t.Fatal(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ var (
|
|||||||
CancelWaybillReasonStrNotAcceptIntime = "没有及时抢单"
|
CancelWaybillReasonStrNotAcceptIntime = "没有及时抢单"
|
||||||
CancelWaybillReasonStrSwitch2SelfFailed = "转自送失败"
|
CancelWaybillReasonStrSwitch2SelfFailed = "转自送失败"
|
||||||
CancelWaybillReasonStrOrderAlreadyFinished = "订单已经结束"
|
CancelWaybillReasonStrOrderAlreadyFinished = "订单已经结束"
|
||||||
|
CancelWaybillReasonStrActive = "操作由人员主动发起"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ func TestSwitch2SelfDeliver(t *testing.T) {
|
|||||||
if order, err := partner.CurOrderManager.LoadOrder(orderID, model.VendorIDJD); err == nil {
|
if order, err := partner.CurOrderManager.LoadOrder(orderID, model.VendorIDJD); err == nil {
|
||||||
// globals.SugarLogger.Debug(order)
|
// globals.SugarLogger.Debug(order)
|
||||||
c := new(PurchaseHandler)
|
c := new(PurchaseHandler)
|
||||||
if err = c.Swtich2SelfDeliver(order); err == nil {
|
if err = c.Swtich2SelfDeliver(order, ""); err == nil {
|
||||||
} else {
|
} else {
|
||||||
t.Fatal(err.Error())
|
t.Fatal(err.Error())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import (
|
|||||||
|
|
||||||
func (p *PurchaseHandler) AddSku(sku *model.Sku) error {
|
func (p *PurchaseHandler) AddSku(sku *model.Sku) error {
|
||||||
// params := map[string]interface{}{
|
// params := map[string]interface{}{
|
||||||
// "outSkuId": utils.Int2Str(int(sku.ID)),
|
// "outSkuId": utils.Int2Str(int(sku.ID)),
|
||||||
// "categoryId":
|
// "categoryId": skuman.GetJdCategoryID(sku),
|
||||||
// }
|
// }
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,14 +31,14 @@ func (c *PurchaseHandler) onWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (re
|
|||||||
}
|
}
|
||||||
order.Status = model.WaybillStatusAccepted
|
order.Status = model.WaybillStatusAccepted
|
||||||
case jdapi.DeliveryStatusCourierCanceled:
|
case jdapi.DeliveryStatusCourierCanceled:
|
||||||
order.Status = model.WaybillStatusCanceled
|
order.Status = model.WaybillStatusAcceptCanceled
|
||||||
case jdapi.DeliveryStatusCourierArrived:
|
case jdapi.DeliveryStatusCourierArrived:
|
||||||
order.Status = model.WaybillStatusCourierArrived
|
order.Status = model.WaybillStatusCourierArrived
|
||||||
case jdapi.DeliveryStatusGotGoods:
|
case jdapi.DeliveryStatusGotGoods:
|
||||||
order.Status = model.WaybillStatusDelivering
|
order.Status = model.WaybillStatusDelivering
|
||||||
case jdapi.DeliveryStatusFinished:
|
case jdapi.DeliveryStatusFinished:
|
||||||
order.Status = model.WaybillStatusDelivered
|
order.Status = model.WaybillStatusDelivered
|
||||||
case jdapi.DeliveryStatusFailedDelivery, jdapi.DeliveryStatusFailedGetGoods:
|
case jdapi.DeliveryStatusFailedDelivery: //, jdapi.DeliveryStatusFailedGetGoods: todo 取货失败不当成投递失败
|
||||||
order.Status = model.WaybillStatusFailed
|
order.Status = model.WaybillStatusFailed
|
||||||
default:
|
default:
|
||||||
order.Status = model.WaybillStatusUnknown
|
order.Status = model.WaybillStatusUnknown
|
||||||
|
|||||||
@@ -22,11 +22,13 @@ func GetUserNameFromToken(token string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderController) URLMapping() {
|
func (c *OrderController) URLMapping() {
|
||||||
c.Mapping("FinishedPickup", c.FinishedPickup)
|
|
||||||
c.Mapping("GetStoreOrderInfo", c.GetStoreOrderInfo)
|
c.Mapping("GetStoreOrderInfo", c.GetStoreOrderInfo)
|
||||||
c.Mapping("GetOrderSkuInfo", c.GetOrderSkuInfo)
|
c.Mapping("GetOrderSkuInfo", c.GetOrderSkuInfo)
|
||||||
|
|
||||||
|
c.Mapping("FinishedPickup", c.FinishedPickup)
|
||||||
|
c.Mapping("SelfDelivering", c.SelfDelivering)
|
||||||
c.Mapping("CreateWaybillOnProviders", c.CreateWaybillOnProviders)
|
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)) {
|
func (c *OrderController) orderOperate(handler func(vendorOrderID string, vendorID int, userName string) (interface{}, error)) {
|
||||||
@@ -81,16 +83,30 @@ func (c *OrderController) FinishedPickup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// @Title 转自送
|
// @Title 转自送
|
||||||
// @Description 转自送
|
// @Description 转自送,对于配送类型为纯自送的,就是表示自送开始
|
||||||
// @Param token header string true "认证toke"
|
// @Param token header string true "认证toke"
|
||||||
// @Param vendorOrderID formData string true "订单ID"
|
// @Param vendorOrderID formData string true "订单ID"
|
||||||
// @Param vendorID formData int true "订单所属的厂商ID"
|
// @Param vendorID formData int true "订单所属的厂商ID"
|
||||||
// @Success 200 {object} business.model.CallResult
|
// @Success 200 {object} business.model.CallResult
|
||||||
// @Failure 200 {object} business.model.CallResult
|
// @Failure 200 {object} business.model.CallResult
|
||||||
// @router /Swtich2SelfDeliver [post]
|
// @router /SelfDelivering [post]
|
||||||
func (c *OrderController) Swtich2SelfDeliver() {
|
func (c *OrderController) SelfDelivering() {
|
||||||
c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) {
|
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]
|
// @router /CreateWaybillOnProviders [post]
|
||||||
func (c *OrderController) CreateWaybillOnProviders() {
|
func (c *OrderController) CreateWaybillOnProviders() {
|
||||||
c.orderOperate(func(vendorOrderID string, vendorID int, userName string) (interface{}, error) {
|
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]
|
// @router /GetStoreOrderCountInfo [get]
|
||||||
func (c *OrderController) GetStoreOrderCountInfo() {
|
func (c *OrderController) GetStoreOrderCountInfo() {
|
||||||
var (
|
var (
|
||||||
storeID string
|
storeID, token string
|
||||||
lastHours int
|
lastHours int
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
token = c.Ctx.Input.Header("token")
|
||||||
storeID = c.GetString("storeID")
|
storeID = c.GetString("storeID")
|
||||||
lastHours, err1 := c.GetInt("lastHours", 0)
|
lastHours, err1 := c.GetInt("lastHours", 0)
|
||||||
if storeID != "" && err1 == nil {
|
if token != "" && storeID != "" && err1 == nil {
|
||||||
result, err2 := orderman.FixedOrderManager.GetStoreOrderCountInfo(storeID, lastHours)
|
result, err2 := orderman.FixedOrderManager.GetStoreOrderCountInfo(storeID, lastHours)
|
||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
c.Data["json"] = &model.CallResult{
|
c.Data["json"] = &model.CallResult{
|
||||||
@@ -134,6 +151,9 @@ func (c *OrderController) GetStoreOrderCountInfo() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
errMsg := jxutils.Errs2Str("", err1, err)
|
errMsg := jxutils.Errs2Str("", err1, err)
|
||||||
|
if token == "" {
|
||||||
|
errMsg += "token is empty\n"
|
||||||
|
}
|
||||||
if storeID == "" {
|
if storeID == "" {
|
||||||
errMsg += "storeID is empty\n"
|
errMsg += "storeID is empty\n"
|
||||||
}
|
}
|
||||||
@@ -160,10 +180,11 @@ func (c *OrderController) GetStoreOrderCountInfo() {
|
|||||||
// @router /GetStoreOrderInfo [get]
|
// @router /GetStoreOrderInfo [get]
|
||||||
func (c *OrderController) GetStoreOrderInfo() {
|
func (c *OrderController) GetStoreOrderInfo() {
|
||||||
var (
|
var (
|
||||||
storeID string
|
storeID, token string
|
||||||
lastHours, fromStatus, toStatus, offset, pageSize int
|
lastHours, fromStatus, toStatus, offset, pageSize int
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
token = c.Ctx.Input.Header("token")
|
||||||
storeID = c.GetString("storeID")
|
storeID = c.GetString("storeID")
|
||||||
lastHours, err1 := c.GetInt("lastHours", 0)
|
lastHours, err1 := c.GetInt("lastHours", 0)
|
||||||
fromStatus, err2 := c.GetInt("fromStatus", 0)
|
fromStatus, err2 := c.GetInt("fromStatus", 0)
|
||||||
@@ -171,7 +192,7 @@ func (c *OrderController) GetStoreOrderInfo() {
|
|||||||
offset, err4 := c.GetInt("offset", 0)
|
offset, err4 := c.GetInt("offset", 0)
|
||||||
pageSize, err5 := c.GetInt("pageSize", 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)
|
result, err2 := orderman.FixedOrderManager.GetStoreOrderInfo(storeID, lastHours, fromStatus, toStatus, offset, pageSize)
|
||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
c.Data["json"] = &model.CallResult{
|
c.Data["json"] = &model.CallResult{
|
||||||
@@ -181,6 +202,9 @@ func (c *OrderController) GetStoreOrderInfo() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
errMsg := jxutils.Errs2Str("", err1, err2, err3, err)
|
errMsg := jxutils.Errs2Str("", err1, err2, err3, err)
|
||||||
|
if token == "" {
|
||||||
|
errMsg += "token is empty\n"
|
||||||
|
}
|
||||||
if storeID == "" {
|
if storeID == "" {
|
||||||
errMsg += "storeID is empty\n"
|
errMsg += "storeID is empty\n"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,10 +32,10 @@ func AutoMigrate() {
|
|||||||
|
|
||||||
// db.DropTableIfExists(&model.Place{})
|
// db.DropTableIfExists(&model.Place{})
|
||||||
// db.DropTableIfExists(&model.Store{}, &model.StoreSub{}, &model.StoreMap{})
|
// 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.Place{})
|
||||||
db.AutoMigrate(&model.Store{}, &model.StoreSub{}, &model.StoreMap{})
|
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{})
|
db.Set("gorm:table_options", "CHARSET=utf8mb4").AutoMigrate(&model.SkuCategory{})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "Swtich2SelfDeliver",
|
Method: "SelfDelivered",
|
||||||
Router: `/Swtich2SelfDeliver`,
|
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"},
|
AllowHTTPMethods: []string{"post"},
|
||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|||||||
Reference in New Issue
Block a user