- WaybillStatusFailed也会重新创建三方运单
- dadaapi.OrderStatusExpired映射为WaybillStatusCanceled(之前为WaybillStatusFailed) - 达达重新创建运单时,判断之前的运单状态,如果是WaybillStatusFailed,则为新增订单 - 去掉dao. WrapDB
This commit is contained in:
@@ -409,20 +409,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
|||||||
// s.ProxyCancelWaybill(order, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
|
// s.ProxyCancelWaybill(order, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
|
||||||
globals.SugarLogger.Infof("OnWaybillStatusChanged CourierArrived order(%d, %s) bill(%d, %s), bill:%v shouldn't get here", order.WaybillVendorID, order.VendorWaybillID, bill.WaybillVendorID, bill.VendorWaybillID, bill)
|
globals.SugarLogger.Infof("OnWaybillStatusChanged CourierArrived order(%d, %s) bill(%d, %s), bill:%v shouldn't get here", order.WaybillVendorID, order.VendorWaybillID, bill.WaybillVendorID, bill.VendorWaybillID, bill)
|
||||||
}
|
}
|
||||||
case model.WaybillStatusFailed: // todo WaybillStatusFailed理解成订单整个失败了,不需要再尝试创建运单了,注意这里应该加个zabbix日志的报警
|
case model.WaybillStatusCanceled, model.WaybillStatusFailed:
|
||||||
s.removeWaybillFromMap(savedOrderInfo, bill.WaybillVendorID)
|
|
||||||
if s.isBillCandidate(order, bill) {
|
|
||||||
s.resetTimer(savedOrderInfo, bill, isPending)
|
|
||||||
if !isPending {
|
|
||||||
globals.SugarLogger.Infof("OnWaybillStatusChanged WaybillStatusFailed, bill:%v", bill)
|
|
||||||
bill.WaybillVendorID = model.VendorIDUnknown
|
|
||||||
s.updateOrderByBill(order, bill, false)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 创建运单失败时,可能到这里来(比如:818874313000121)
|
|
||||||
globals.SugarLogger.Infof("OnWaybillStatusChanged Failed bill:%v shouldn't got here, order details:%v", bill, order)
|
|
||||||
}
|
|
||||||
case model.WaybillStatusCanceled:
|
|
||||||
s.removeWaybillFromMap(savedOrderInfo, bill.WaybillVendorID)
|
s.removeWaybillFromMap(savedOrderInfo, bill.WaybillVendorID)
|
||||||
if s.isBillCandidate(order, bill) || order.WaybillVendorID == model.VendorIDUnknown {
|
if s.isBillCandidate(order, bill) || order.WaybillVendorID == model.VendorIDUnknown {
|
||||||
s.resetTimer(savedOrderInfo, nil, isPending)
|
s.resetTimer(savedOrderInfo, nil, isPending)
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/partner/purchase/ebai"
|
"git.rosy.net.cn/jx-callback/business/partner/purchase/ebai"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
"github.com/astaxie/beego/orm"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var innerDataPat *regexp.Regexp
|
var innerDataPat *regexp.Regexp
|
||||||
@@ -605,8 +604,7 @@ func CreateOrderFromOriginal(ctx *jxcontext.Context, isAsync, isContinueWhenErro
|
|||||||
WHERE t2.id IS NULL
|
WHERE t2.id IS NULL
|
||||||
LIMIT ?;
|
LIMIT ?;
|
||||||
`
|
`
|
||||||
rawDB := orm.NewOrm()
|
db := dao.GetDB()
|
||||||
db := dao.WrapDB(rawDB)
|
|
||||||
var orderList []*GoodsOrderOriginalEx
|
var orderList []*GoodsOrderOriginalEx
|
||||||
if err = dao.GetRows(db, &orderList, sql, sqlBatchCount); err != nil {
|
if err = dao.GetRows(db, &orderList, sql, sqlBatchCount); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ const (
|
|||||||
WaybillStatusEndBegin = 100 // 以下的状态就是结束状态
|
WaybillStatusEndBegin = 100 // 以下的状态就是结束状态
|
||||||
WaybillStatusDelivered = 105 // todo 这个应该改为110,与订单对应
|
WaybillStatusDelivered = 105 // todo 这个应该改为110,与订单对应
|
||||||
WaybillStatusCanceled = 115
|
WaybillStatusCanceled = 115
|
||||||
WaybillStatusFailed = 120 // todo 这个应该要去掉
|
WaybillStatusFailed = 120 // 这个状态存在的意义是区分于WaybillStatusCanceled,比如达达平台在这种状态下再次创建运单的方式不一样
|
||||||
WaybillStatusNeverSend = 125 // 这个状态指的是平台方不愿意配送,门店自己想办法。与WaybillStatusAcceptCanceled不一样,WaybillStatusAcceptCanceled可能之后还会尝试配送
|
WaybillStatusNeverSend = 125 // 这个状态指的是平台方不愿意配送,门店自己想办法。与WaybillStatusAcceptCanceled不一样,WaybillStatusAcceptCanceled可能之后还会尝试配送
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -59,10 +59,6 @@ func GetDB() *DaoDB {
|
|||||||
return &DaoDB{Db: orm.NewOrm()}
|
return &DaoDB{Db: orm.NewOrm()}
|
||||||
}
|
}
|
||||||
|
|
||||||
func WrapDB(ormDb orm.Ormer) *DaoDB {
|
|
||||||
return &DaoDB{Db: ormDb}
|
|
||||||
}
|
|
||||||
|
|
||||||
func Begin(db *DaoDB) (err error) {
|
func Begin(db *DaoDB) (err error) {
|
||||||
if db.transactionLevel == 0 {
|
if db.transactionLevel == 0 {
|
||||||
err = db.Db.Begin()
|
err = db.Db.Begin()
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
"github.com/astaxie/beego"
|
"github.com/astaxie/beego"
|
||||||
"github.com/astaxie/beego/orm"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -70,9 +69,9 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap
|
|||||||
order.Status = model.WaybillStatusDelivering
|
order.Status = model.WaybillStatusDelivering
|
||||||
case dadaapi.OrderStatusFinished:
|
case dadaapi.OrderStatusFinished:
|
||||||
order.Status = model.WaybillStatusDelivered
|
order.Status = model.WaybillStatusDelivered
|
||||||
case dadaapi.OrderStatusCanceled:
|
case dadaapi.OrderStatusCanceled, dadaapi.OrderStatusExpired:
|
||||||
order.Status = model.WaybillStatusCanceled
|
order.Status = model.WaybillStatusCanceled
|
||||||
case dadaapi.OrderStatusExpired, dadaapi.OrderStatusAddOrderFailed:
|
case dadaapi.OrderStatusAddOrderFailed:
|
||||||
order.Status = model.WaybillStatusFailed
|
order.Status = model.WaybillStatusFailed
|
||||||
default:
|
default:
|
||||||
order.Status = model.WaybillStatusUnknown
|
order.Status = model.WaybillStatusUnknown
|
||||||
@@ -102,7 +101,7 @@ func (c *DeliveryHandler) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVal
|
|||||||
|
|
||||||
// IDeliveryPlatformHandler
|
// IDeliveryPlatformHandler
|
||||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner.CreateWaybillPolicy) (bill *model.Waybill, err error) {
|
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner.CreateWaybillPolicy) (bill *model.Waybill, err error) {
|
||||||
db := orm.NewOrm()
|
db := dao.GetDB()
|
||||||
deliveryFee, addFee, err := delivery.CalculateOrderDeliveryFee(order, time.Now(), db)
|
deliveryFee, addFee, err := delivery.CalculateOrderDeliveryFee(order, time.Now(), db)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -133,17 +132,18 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner.
|
|||||||
|
|
||||||
if globals.EnableStoreWrite {
|
if globals.EnableStoreWrite {
|
||||||
// 达达要求第二次创建运单,调用函数不同。所以查找两天内有无相同订单号的运单
|
// 达达要求第二次创建运单,调用函数不同。所以查找两天内有无相同订单号的运单
|
||||||
var lists []orm.ParamsList
|
var waybillList []*model.Waybill
|
||||||
num, err2 := db.Raw(`
|
err2 := dao.GetRows(db, &waybillList, `
|
||||||
SELECT vendor_waybill_id
|
SELECT *
|
||||||
FROM waybill
|
FROM waybill
|
||||||
WHERE waybill_created_at > DATE_ADD(NOW(), interval -2 day)
|
WHERE waybill_created_at > DATE_ADD(NOW(), interval -2 day)
|
||||||
AND vendor_order_id = ?
|
AND vendor_order_id = ?
|
||||||
AND waybill_vendor_id = ?
|
AND waybill_vendor_id = ?
|
||||||
`, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID), model.VendorIDDada).ValuesList(&lists)
|
ORDER BY id DESC
|
||||||
|
`, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID), model.VendorIDDada)
|
||||||
var result *dadaapi.CreateOrderResponse
|
var result *dadaapi.CreateOrderResponse
|
||||||
if err = err2; err == nil && num > 0 {
|
if err = err2; err == nil && len(waybillList) > 0 && waybillList[0].Status != model.WaybillStatusFailed {
|
||||||
globals.SugarLogger.Debugf("CreateWaybill orderID:%s num=%d use ReaddOrder", order.VendorOrderID, num)
|
globals.SugarLogger.Debugf("CreateWaybill orderID:%s len(waybillList)=%d use ReaddOrder", order.VendorOrderID, len(waybillList))
|
||||||
result, err = api.DadaAPI.ReaddOrder(billParams, addParams)
|
result, err = api.DadaAPI.ReaddOrder(billParams, addParams)
|
||||||
} else {
|
} else {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -192,7 +192,7 @@ func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int,
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *DeliveryHandler) getDataCityCodeFromOrder(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) {
|
func (c *DeliveryHandler) getDataCityCodeFromOrder(order *model.GoodsOrder, db *dao.DaoDB) (retVal string, err error) {
|
||||||
jxStoreID := jxutils.GetSaleStoreIDFromOrder(order)
|
jxStoreID := jxutils.GetSaleStoreIDFromOrder(order)
|
||||||
sql := `
|
sql := `
|
||||||
SELECT t2.tel_code
|
SELECT t2.tel_code
|
||||||
@@ -200,11 +200,10 @@ func (c *DeliveryHandler) getDataCityCodeFromOrder(order *model.GoodsOrder, db o
|
|||||||
JOIN place t2 on t1.city_code = t2.code
|
JOIN place t2 on t1.city_code = t2.code
|
||||||
WHERE t1.id = ?
|
WHERE t1.id = ?
|
||||||
`
|
`
|
||||||
db2 := dao.WrapDB(db)
|
|
||||||
codeInfo := &struct {
|
codeInfo := &struct {
|
||||||
TelCode string
|
TelCode string
|
||||||
}{}
|
}{}
|
||||||
if err = dao.GetRow(db2, codeInfo, sql, jxStoreID); err != nil {
|
if err = dao.GetRow(db, codeInfo, sql, jxStoreID); err != nil {
|
||||||
globals.SugarLogger.Errorf("GetDataCityCodeFromOrder can not find store info for vendorID:%d, store:%s, error:%v", order.VendorID, order.VendorStoreID, err)
|
globals.SugarLogger.Errorf("GetDataCityCodeFromOrder can not find store info for vendorID:%d, store:%s, error:%v", order.VendorID, order.VendorStoreID, err)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = ErrCanNotFindDadaCityCode
|
err = ErrCanNotFindDadaCityCode
|
||||||
@@ -214,11 +213,10 @@ func (c *DeliveryHandler) getDataCityCodeFromOrder(order *model.GoodsOrder, db o
|
|||||||
return codeInfo.TelCode, nil
|
return codeInfo.TelCode, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *DeliveryHandler) getDadaShopID(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) {
|
func (c *DeliveryHandler) getDadaShopID(order *model.GoodsOrder, db *dao.DaoDB) (retVal string, err error) {
|
||||||
saleStoreID := jxutils.GetSaleStoreIDFromOrder(order)
|
saleStoreID := jxutils.GetSaleStoreIDFromOrder(order)
|
||||||
db2 := dao.WrapDB(db)
|
storeCourierList, err2 := dao.GetOpenedStoreCouriersByStoreID(db, saleStoreID, model.VendorIDDada)
|
||||||
storeCourierList, err2 := dao.GetOpenedStoreCouriersByStoreID(db2, saleStoreID, model.VendorIDDada)
|
if err = err2; err != nil && !dao.IsNoRowsError(err) {
|
||||||
if err = err2; err != nil && err != orm.ErrNoRows {
|
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
if len(storeCourierList) == 0 {
|
if len(storeCourierList) == 0 {
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"github.com/astaxie/beego/orm"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -57,10 +56,10 @@ func CallCreateWaybillPolicy(policy partner.CreateWaybillPolicy, refDeliveryFee,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func CalculateOrderDeliveryFee(order *model.GoodsOrder, billTime time.Time, db orm.Ormer) (deliveryFee, addFee int64, err error) {
|
func CalculateOrderDeliveryFee(order *model.GoodsOrder, billTime time.Time, db *dao.DaoDB) (deliveryFee, addFee int64, err error) {
|
||||||
globals.SugarLogger.Debugf("CalculateOrderDeliveryFee orderID:%s", order.VendorOrderID)
|
globals.SugarLogger.Debugf("CalculateOrderDeliveryFee orderID:%s", order.VendorOrderID)
|
||||||
if db == nil {
|
if db == nil {
|
||||||
db = orm.NewOrm()
|
db = dao.GetDB()
|
||||||
}
|
}
|
||||||
jxStoreID := jxutils.GetSaleStoreIDFromOrder(order)
|
jxStoreID := jxutils.GetSaleStoreIDFromOrder(order)
|
||||||
var lng, lat float64
|
var lng, lat float64
|
||||||
@@ -69,8 +68,7 @@ func CalculateOrderDeliveryFee(order *model.GoodsOrder, billTime time.Time, db o
|
|||||||
Lng int
|
Lng int
|
||||||
Lat int
|
Lat int
|
||||||
}{}
|
}{}
|
||||||
db2 := dao.WrapDB(db)
|
if err = dao.GetRow(db, priceInfo, `
|
||||||
if err = dao.GetRow(db2, priceInfo, `
|
|
||||||
SELECT t2.mtps_price price, t1.lng, t1.lat
|
SELECT t2.mtps_price price, t1.lng, t1.lat
|
||||||
FROM store t1
|
FROM store t1
|
||||||
JOIN place t2 ON t1.city_code = t2.code
|
JOIN place t2 ON t1.city_code = t2.code
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ func (c *DeliveryHandler) callbackMsg2Waybill(msg *mtpsapi.CallbackOrderMsg) (re
|
|||||||
|
|
||||||
// IDeliveryPlatformHandler
|
// IDeliveryPlatformHandler
|
||||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner.CreateWaybillPolicy) (bill *model.Waybill, err error) {
|
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner.CreateWaybillPolicy) (bill *model.Waybill, err error) {
|
||||||
db := orm.NewOrm()
|
db := dao.GetDB()
|
||||||
deliveryFee, addFee, err := delivery.CalculateOrderDeliveryFee(order, time.Now(), db)
|
deliveryFee, addFee, err := delivery.CalculateOrderDeliveryFee(order, time.Now(), db)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if err = delivery.CallCreateWaybillPolicy(policy, deliveryFee, addFee, deliveryFee, order, model.VendorIDMTPS); err != nil {
|
if err = delivery.CallCreateWaybillPolicy(policy, deliveryFee, addFee, deliveryFee, order, model.VendorIDMTPS); err != nil {
|
||||||
@@ -201,16 +201,15 @@ func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *DeliveryHandler) getDeliveryID(order *model.GoodsOrder, db orm.Ormer) (retVal int64, err error) {
|
func (c *DeliveryHandler) getDeliveryID(order *model.GoodsOrder, db *dao.DaoDB) (retVal int64, err error) {
|
||||||
// jxorder表当前已经有50多万条记录了,加100万避免冲突
|
// jxorder表当前已经有50多万条记录了,加100万避免冲突
|
||||||
// 508505
|
// 508505
|
||||||
return order.ID + 1000000, nil
|
return order.ID + 1000000, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *DeliveryHandler) getMTPSShopID(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) {
|
func (c *DeliveryHandler) getMTPSShopID(order *model.GoodsOrder, db *dao.DaoDB) (retVal string, err error) {
|
||||||
saleStoreID := jxutils.GetSaleStoreIDFromOrder(order)
|
saleStoreID := jxutils.GetSaleStoreIDFromOrder(order)
|
||||||
db2 := dao.WrapDB(db)
|
storeCourierList, err2 := dao.GetOpenedStoreCouriersByStoreID(db, saleStoreID, model.VendorIDMTPS)
|
||||||
storeCourierList, err2 := dao.GetOpenedStoreCouriersByStoreID(db2, saleStoreID, model.VendorIDMTPS)
|
|
||||||
if err = err2; err != nil && err != orm.ErrNoRows {
|
if err = err2; err != nil && err != orm.ErrNoRows {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user