- 美团外卖生成不同的售后单号,支持同一订单多个售后单

This commit is contained in:
gazebo
2019-05-27 17:44:29 +08:00
parent a999e5438a
commit 61c0d0e9e0
3 changed files with 55 additions and 2 deletions

View File

@@ -2,6 +2,7 @@ package orderman
import (
"fmt"
"strings"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler"
@@ -36,13 +37,17 @@ func (c *OrderManager) OnAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *mode
}
func (c *OrderManager) onAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *model.OrderStatus, isAdjust bool) (err error) {
db := dao.GetDB()
c.setAfsOrderID(db, orderStatus)
if afsOrder.AfsOrderID == "" {
afsOrder.AfsOrderID = orderStatus.VendorOrderID
}
if afsOrder.VendorStatus == "" {
afsOrder.VendorStatus = orderStatus.VendorStatus
}
if afsOrder.Status == model.OrderStatusUnknown {
afsOrder.Status = orderStatus.Status
}
db := dao.GetDB()
dao.Begin(db)
defer func() {
if r := recover(); r != nil || err != nil {
@@ -150,6 +155,7 @@ func (c *OrderManager) SaveAfsOrder(db *dao.DaoDB, afsOrder *model.AfsOrder, isD
func (c *OrderManager) OnAfsOrderStatusChanged(orderStatus *model.OrderStatus) (err error) {
db := dao.GetDB()
c.setAfsOrderID(db, orderStatus)
dao.Begin(db)
defer func() {
if r := recover(); r != nil || err != nil {
@@ -299,3 +305,28 @@ func (c *OrderManager) UpdateAfsOrderFields(afsOrder *model.AfsOrder, fieldList
}, "UpdateAfsOrderFields orderID:%s failed with error:%v", afsOrder.VendorOrderID, err)
return err
}
func (c *OrderManager) setAfsOrderID(db *dao.DaoDB, orderStatus *model.OrderStatus) {
if orderStatus.VendorOrderID == "" {
index := 1
if afsOrderList, err2 := dao.GetAfsOrders(db, orderStatus.RefVendorID, orderStatus.RefVendorOrderID, ""); err2 == nil {
if len(afsOrderList) > 0 {
list := strings.Split(afsOrderList[0].AfsOrderID, "-")
if len(list) > 1 {
index = int(utils.Str2Int64WithDefault(list[1], 0))
if afsOrderList[1].Status >= model.AfsOrderStatusFinished {
index++
}
}
}
}
orderStatus.VendorOrderID = composeAfsOrderID(orderStatus.RefVendorOrderID, index)
}
}
func composeAfsOrderID(vendorOrderID string, index int) (afsOrderID string) {
return strings.Join([]string{
vendorOrderID,
utils.Int2Str(index),
}, "-")
}

View File

@@ -60,3 +60,25 @@ func SetAfsOrderFlag(db *DaoDB, userName string, afsOrderID string, vendorID int
`, flag, afsOrderID, vendorID)
return err
}
func GetAfsOrders(db *DaoDB, vendorID int, vendorOrderID, afsOrderID string) (afsOrderList []*model.AfsOrder, err error) {
sql := `
SELECT *
FROM afs_order t1
WHERE t1.vendor_id = ?
`
sqlParams := []interface{}{
vendorID,
}
if vendorOrderID != "" {
sql += " AND t1.vendor_order_id = ?"
sqlParams = append(sqlParams, vendorOrderID)
}
if afsOrderID != "" {
sql += " AND t1.afs_order_id = ?"
sqlParams = append(sqlParams, afsOrderID)
}
sql += " ORDER BY t1.afs_order_id DESC"
err = GetRows(db, &afsOrderList, sql, sqlParams...)
return afsOrderList, err
}

View File

@@ -120,7 +120,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma
func (c *PurchaseHandler) callbackAfsMsg2Status(msg *mtwmapi.CallbackMsg) (orderStatus *model.OrderStatus) {
refundData := msg.Data.(*mtwmapi.CallbackRefundInfo)
orderStatus = &model.OrderStatus{
VendorOrderID: utils.Int64ToStr(refundData.OrderID),
// VendorOrderID: utils.Int64ToStr(refundData.OrderID),
VendorID: model.VendorIDMTWM,
OrderType: model.OrderTypeAfsOrder,
RefVendorOrderID: utils.Int64ToStr(refundData.OrderID),