diff --git a/business/jxcallback/orderman/order_afs.go b/business/jxcallback/orderman/order_afs.go index 52f5fac72..ecc0cdcae 100644 --- a/business/jxcallback/orderman/order_afs.go +++ b/business/jxcallback/orderman/order_afs.go @@ -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), + }, "-") +} diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 9a3474d04..9d3855fc9 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -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 +} diff --git a/business/partner/purchase/mtwm/order_afs.go b/business/partner/purchase/mtwm/order_afs.go index 915a01622..501a0a195 100644 --- a/business/partner/purchase/mtwm/order_afs.go +++ b/business/partner/purchase/mtwm/order_afs.go @@ -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),