From beb6482a1aa19bcda93d6e41c7e975980d6cf929 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sat, 27 Apr 2019 10:58:19 +0800 Subject: [PATCH] =?UTF-8?q?-=20WaybillStatusFailed=E4=B9=9F=E4=BC=9A?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E5=88=9B=E5=BB=BA=E4=B8=89=E6=96=B9=E8=BF=90?= =?UTF-8?q?=E5=8D=95=20-=20dadaapi.OrderStatusExpired=E6=98=A0=E5=B0=84?= =?UTF-8?q?=E4=B8=BAWaybillStatusCanceled=EF=BC=88=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E4=B8=BAWaybillStatusFailed=EF=BC=89=20-=20=E8=BE=BE=E8=BE=BE?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E5=88=9B=E5=BB=BA=E8=BF=90=E5=8D=95=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E5=88=A4=E6=96=AD=E4=B9=8B=E5=89=8D=E7=9A=84=E8=BF=90?= =?UTF-8?q?=E5=8D=95=E7=8A=B6=E6=80=81=EF=BC=8C=E5=A6=82=E6=9E=9C=E6=98=AF?= =?UTF-8?q?WaybillStatusFailed=EF=BC=8C=E5=88=99=E4=B8=BA=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=AE=A2=E5=8D=95=20-=20=E5=8E=BB=E6=8E=89dao.=20Wrap?= =?UTF-8?q?DB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jxcallback/scheduler/defsch/defsch.go | 15 +------ business/jxstore/tempop/tempop.go | 4 +- business/model/const.go | 2 +- business/model/dao/dao.go | 4 -- business/partner/delivery/dada/waybill.go | 40 +++++++++---------- business/partner/delivery/delivery.go | 8 ++-- business/partner/delivery/mtps/waybill.go | 9 ++--- 7 files changed, 29 insertions(+), 53 deletions(-) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 5db3e672e..9b160bfcc 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -409,20 +409,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo // 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) } - case model.WaybillStatusFailed: // todo WaybillStatusFailed理解成订单整个失败了,不需要再尝试创建运单了,注意这里应该加个zabbix日志的报警 - 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: + case model.WaybillStatusCanceled, model.WaybillStatusFailed: s.removeWaybillFromMap(savedOrderInfo, bill.WaybillVendorID) if s.isBillCandidate(order, bill) || order.WaybillVendorID == model.VendorIDUnknown { s.resetTimer(savedOrderInfo, nil, isPending) diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index 1074ce8ee..cb4ffdcc8 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -23,7 +23,6 @@ import ( "git.rosy.net.cn/jx-callback/business/partner/purchase/ebai" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" - "github.com/astaxie/beego/orm" ) var innerDataPat *regexp.Regexp @@ -605,8 +604,7 @@ func CreateOrderFromOriginal(ctx *jxcontext.Context, isAsync, isContinueWhenErro WHERE t2.id IS NULL LIMIT ?; ` - rawDB := orm.NewOrm() - db := dao.WrapDB(rawDB) + db := dao.GetDB() var orderList []*GoodsOrderOriginalEx if err = dao.GetRows(db, &orderList, sql, sqlBatchCount); err != nil { return nil, err diff --git a/business/model/const.go b/business/model/const.go index 6a61674f7..e24837af5 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -215,7 +215,7 @@ const ( WaybillStatusEndBegin = 100 // 以下的状态就是结束状态 WaybillStatusDelivered = 105 // todo 这个应该改为110,与订单对应 WaybillStatusCanceled = 115 - WaybillStatusFailed = 120 // todo 这个应该要去掉 + WaybillStatusFailed = 120 // 这个状态存在的意义是区分于WaybillStatusCanceled,比如达达平台在这种状态下再次创建运单的方式不一样 WaybillStatusNeverSend = 125 // 这个状态指的是平台方不愿意配送,门店自己想办法。与WaybillStatusAcceptCanceled不一样,WaybillStatusAcceptCanceled可能之后还会尝试配送 ) diff --git a/business/model/dao/dao.go b/business/model/dao/dao.go index 994f42748..257b5c067 100644 --- a/business/model/dao/dao.go +++ b/business/model/dao/dao.go @@ -59,10 +59,6 @@ func GetDB() *DaoDB { return &DaoDB{Db: orm.NewOrm()} } -func WrapDB(ormDb orm.Ormer) *DaoDB { - return &DaoDB{Db: ormDb} -} - func Begin(db *DaoDB) (err error) { if db.transactionLevel == 0 { err = db.Db.Begin() diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index 685c1425b..1061337b8 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -15,7 +15,6 @@ import ( "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" "github.com/astaxie/beego" - "github.com/astaxie/beego/orm" ) const ( @@ -70,9 +69,9 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap order.Status = model.WaybillStatusDelivering case dadaapi.OrderStatusFinished: order.Status = model.WaybillStatusDelivered - case dadaapi.OrderStatusCanceled: + case dadaapi.OrderStatusCanceled, dadaapi.OrderStatusExpired: order.Status = model.WaybillStatusCanceled - case dadaapi.OrderStatusExpired, dadaapi.OrderStatusAddOrderFailed: + case dadaapi.OrderStatusAddOrderFailed: order.Status = model.WaybillStatusFailed default: order.Status = model.WaybillStatusUnknown @@ -102,7 +101,7 @@ func (c *DeliveryHandler) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVal // IDeliveryPlatformHandler 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) if err != nil { return nil, err @@ -133,17 +132,18 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy partner. if globals.EnableStoreWrite { // 达达要求第二次创建运单,调用函数不同。所以查找两天内有无相同订单号的运单 - var lists []orm.ParamsList - num, err2 := db.Raw(` - SELECT vendor_waybill_id - FROM waybill - WHERE waybill_created_at > DATE_ADD(NOW(), interval -2 day) - AND vendor_order_id = ? - AND waybill_vendor_id = ? - `, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID), model.VendorIDDada).ValuesList(&lists) + var waybillList []*model.Waybill + err2 := dao.GetRows(db, &waybillList, ` + SELECT * + FROM waybill + WHERE waybill_created_at > DATE_ADD(NOW(), interval -2 day) + AND vendor_order_id = ? + AND waybill_vendor_id = ? + ORDER BY id DESC + `, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID), model.VendorIDDada) var result *dadaapi.CreateOrderResponse - if err = err2; err == nil && num > 0 { - globals.SugarLogger.Debugf("CreateWaybill orderID:%s num=%d use ReaddOrder", order.VendorOrderID, num) + if err = err2; err == nil && len(waybillList) > 0 && waybillList[0].Status != model.WaybillStatusFailed { + globals.SugarLogger.Debugf("CreateWaybill orderID:%s len(waybillList)=%d use ReaddOrder", order.VendorOrderID, len(waybillList)) result, err = api.DadaAPI.ReaddOrder(billParams, addParams) } else { if err != nil { @@ -192,7 +192,7 @@ func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, 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) sql := ` 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 WHERE t1.id = ? ` - db2 := dao.WrapDB(db) codeInfo := &struct { 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) if err == nil { err = ErrCanNotFindDadaCityCode @@ -214,11 +213,10 @@ func (c *DeliveryHandler) getDataCityCodeFromOrder(order *model.GoodsOrder, db o 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) - db2 := dao.WrapDB(db) - storeCourierList, err2 := dao.GetOpenedStoreCouriersByStoreID(db2, saleStoreID, model.VendorIDDada) - if err = err2; err != nil && err != orm.ErrNoRows { + storeCourierList, err2 := dao.GetOpenedStoreCouriersByStoreID(db, saleStoreID, model.VendorIDDada) + if err = err2; err != nil && !dao.IsNoRowsError(err) { return "", err } if len(storeCourierList) == 0 { diff --git a/business/partner/delivery/delivery.go b/business/partner/delivery/delivery.go index 225f68456..9fb2e5492 100644 --- a/business/partner/delivery/delivery.go +++ b/business/partner/delivery/delivery.go @@ -12,7 +12,6 @@ import ( "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" - "github.com/astaxie/beego/orm" ) const ( @@ -57,10 +56,10 @@ func CallCreateWaybillPolicy(policy partner.CreateWaybillPolicy, refDeliveryFee, 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) if db == nil { - db = orm.NewOrm() + db = dao.GetDB() } jxStoreID := jxutils.GetSaleStoreIDFromOrder(order) var lng, lat float64 @@ -69,8 +68,7 @@ func CalculateOrderDeliveryFee(order *model.GoodsOrder, billTime time.Time, db o Lng int Lat int }{} - db2 := dao.WrapDB(db) - if err = dao.GetRow(db2, priceInfo, ` + if err = dao.GetRow(db, priceInfo, ` SELECT t2.mtps_price price, t1.lng, t1.lat FROM store t1 JOIN place t2 ON t1.city_code = t2.code diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index afd92c1dc..41a78e228 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -115,7 +115,7 @@ func (c *DeliveryHandler) callbackMsg2Waybill(msg *mtpsapi.CallbackOrderMsg) (re // IDeliveryPlatformHandler 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) if 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 } -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万避免冲突 // 508505 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) - db2 := dao.WrapDB(db) - storeCourierList, err2 := dao.GetOpenedStoreCouriersByStoreID(db2, saleStoreID, model.VendorIDMTPS) + storeCourierList, err2 := dao.GetOpenedStoreCouriersByStoreID(db, saleStoreID, model.VendorIDMTPS) if err = err2; err != nil && err != orm.ErrNoRows { return "", err }