- 处理美团外卖售后多次时,得到的SKU信息重复的情况
This commit is contained in:
@@ -21,6 +21,8 @@ type tStoreSkuBindAndVendorSkuID struct {
|
|||||||
SkuID int `orm:"column(sku_id)"`
|
SkuID int `orm:"column(sku_id)"`
|
||||||
Weight int
|
Weight int
|
||||||
Price int
|
Price int
|
||||||
|
|
||||||
|
JoinID int `orm:"column(join_id)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|||||||
@@ -243,13 +243,14 @@ func (c *OrderManager) updateAfsOrderSkuOtherInfo(db *dao.DaoDB, order *model.Af
|
|||||||
}
|
}
|
||||||
fieldPrefix := dao.ConvertDBFieldPrefix(model.VendorNames[order.VendorID])
|
fieldPrefix := dao.ConvertDBFieldPrefix(model.VendorNames[order.VendorID])
|
||||||
sql := `
|
sql := `
|
||||||
SELECT %s.%s_id vendor_sku_id, t1.id sku_id, t2.price, t1.weight
|
SELECT %s.%s_id vendor_sku_id, t1.id sku_id, t2.price, t1.weight, t3.id join_id
|
||||||
FROM sku t1
|
FROM sku t1
|
||||||
LEFT JOIN store_sku_bind t2 ON t1.id = t2.sku_id AND t2.deleted_at = ? AND t2.store_id = ?
|
LEFT JOIN store_sku_bind t2 ON t1.id = t2.sku_id AND t2.deleted_at = ? AND t2.store_id = ?
|
||||||
|
LEFT JOIN order_sku_financial t3 ON t3.is_afs_order = 1 AND t3.store_id = t2.store_id AND t3.sku_id = t2.sku_id AND t3.vendor_order_id = ? AND t3.vendor_id = ?
|
||||||
WHERE t1.deleted_at = ? AND %s.%s_id IN (-1, ` + dao.GenQuestionMarks(len(vendorSkuIDs)) + ")"
|
WHERE t1.deleted_at = ? AND %s.%s_id IN (-1, ` + dao.GenQuestionMarks(len(vendorSkuIDs)) + ")"
|
||||||
sql = fmt.Sprintf(sql, tableName, fieldPrefix, tableName, fieldPrefix)
|
sql = fmt.Sprintf(sql, tableName, fieldPrefix, tableName, fieldPrefix)
|
||||||
var skuInfos []*tStoreSkuBindAndVendorSkuID
|
var skuInfos []*tStoreSkuBindAndVendorSkuID
|
||||||
if err = dao.GetRows(db, &skuInfos, sql, utils.DefaultTimeValue, jxStoreID, utils.DefaultTimeValue, vendorSkuIDs); err != nil {
|
if err = dao.GetRows(db, &skuInfos, sql, utils.DefaultTimeValue, jxStoreID, utils.DefaultTimeValue, vendorSkuIDs, order.VendorOrderID, order.VendorID); err != nil {
|
||||||
globals.SugarLogger.Errorf("updateAfsOrderSkuOtherInfo can not get sku info for orderID:%s, error:%v", order.VendorOrderID, err)
|
globals.SugarLogger.Errorf("updateAfsOrderSkuOtherInfo can not get sku info for orderID:%s, error:%v", order.VendorOrderID, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -257,19 +258,24 @@ func (c *OrderManager) updateAfsOrderSkuOtherInfo(db *dao.DaoDB, order *model.Af
|
|||||||
for _, v := range skuInfos {
|
for _, v := range skuInfos {
|
||||||
skumapper[v.VendorSkuID] = v
|
skumapper[v.VendorSkuID] = v
|
||||||
}
|
}
|
||||||
|
var newSkus []*model.OrderSkuFinancial
|
||||||
for _, v := range orderSkus {
|
for _, v := range orderSkus {
|
||||||
v.AfsOrderID = order.AfsOrderID
|
v.AfsOrderID = order.AfsOrderID
|
||||||
v.JxStoreID = jxStoreID
|
v.JxStoreID = jxStoreID
|
||||||
intVendorSkuID := utils.Str2Int64WithDefault(v.VendorSkuID, 0)
|
intVendorSkuID := utils.Str2Int64WithDefault(v.VendorSkuID, 0)
|
||||||
if intVendorSkuID != 0 && v.VendorSkuID != "-70000" { // todo hard code
|
if intVendorSkuID != 0 && v.VendorSkuID != "-70000" { // todo hard code
|
||||||
skuBindInfo := skumapper[intVendorSkuID]
|
skuBindInfo := skumapper[intVendorSkuID]
|
||||||
if skuBindInfo == nil {
|
if skuBindInfo.JoinID == 0 {
|
||||||
globals.SugarLogger.Infof("updateAfsOrderSkuOtherInfo [运营%s]%s订单sku找不到门店价格(或商品映射),orderID:%s, StoreID:%d, VendorSkuID:%s, sku:%v", opNumStr, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.VendorSkuID, v)
|
newSkus = append(newSkus, v)
|
||||||
} else {
|
if skuBindInfo == nil {
|
||||||
v.JxSkuID = skuBindInfo.SkuID
|
globals.SugarLogger.Infof("updateAfsOrderSkuOtherInfo [运营%s]%s订单sku找不到门店价格(或商品映射),orderID:%s, StoreID:%d, VendorSkuID:%s, sku:%v", opNumStr, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.VendorSkuID, v)
|
||||||
|
} else {
|
||||||
|
v.JxSkuID = skuBindInfo.SkuID
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
order.Skus = newSkus
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -294,7 +300,7 @@ func (c *OrderManager) updateAfsOrderOtherInfo(db *dao.DaoDB, afsOrder *model.Af
|
|||||||
}
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if err = c.updateAfsOrderSkuOtherInfo(db, afsOrder); err == nil {
|
if err = c.updateAfsOrderSkuOtherInfo(db, afsOrder); err == nil {
|
||||||
|
jxutils.RefreshAfsOrderSkuRelated(afsOrder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -453,6 +453,16 @@ func RefreshOrderSkuRelated(order *model.GoodsOrder) *model.GoodsOrder {
|
|||||||
return order
|
return order
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RefreshAfsOrderSkuRelated(afsOrder *model.AfsOrder) *model.AfsOrder {
|
||||||
|
afsOrder.SkuUserMoney = 0
|
||||||
|
afsOrder.PmSkuSubsidyMoney = 0
|
||||||
|
for _, orderSku := range afsOrder.Skus {
|
||||||
|
afsOrder.SkuUserMoney += orderSku.UserMoney
|
||||||
|
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
|
||||||
|
}
|
||||||
|
return afsOrder
|
||||||
|
}
|
||||||
|
|
||||||
func RemoveSkuFromOrder(order *model.GoodsOrder, removedSkuList []*model.OrderSku) *model.GoodsOrder {
|
func RemoveSkuFromOrder(order *model.GoodsOrder, removedSkuList []*model.OrderSku) *model.GoodsOrder {
|
||||||
removedSkuMap := make(map[int]*model.OrderSku)
|
removedSkuMap := make(map[int]*model.OrderSku)
|
||||||
removedSkuMap2 := make(map[string]*model.OrderSku)
|
removedSkuMap2 := make(map[string]*model.OrderSku)
|
||||||
|
|||||||
Reference in New Issue
Block a user