This commit is contained in:
邹宗楠
2024-11-29 09:39:06 +08:00
parent 19adb91298
commit b99d8c309f
4 changed files with 78 additions and 10 deletions

View File

@@ -311,7 +311,15 @@ func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *m
}
// 商品库存修改
ModifyOrderSkusStock(db, order2, true)
switch beego.BConfig.RunMode {
case model.ServerTypeFruits, model.ServerTypeVegetable:
ModifyOrderSkusStock(db, order2, true)
case model.ServerTypePet:
// 宠物会出现美团多门店对应京西一个门店的库存数,即同一老板开多家店,单只有一个库存门店,
// 所以不同门店同一品牌,最终商品库存只扣除门店ID最小的商品库存(最早创建门店,主店)
// 最好商品由主店创建,复制到分店,分店本地同步状态不在打开
ModifyPetOrderSkusStock(db, order2, true)
}
}
if !isDuplicated {
@@ -441,7 +449,15 @@ func (c *OrderManager) SaveOrder(order *model.GoodsOrder, isAdjust bool, db *dao
}
//修改商品库存
if err == nil {
err = ModifyOrderSkusStock(db, order, false)
switch beego.BConfig.RunMode {
case model.ServerTypeFruits, model.ServerTypeVegetable:
err = ModifyOrderSkusStock(db, order, false)
case model.ServerTypePet:
// 宠物会出现美团多门店对应京西一个门店的库存数,即同一老板开多家店,单只有一个库存门店,
// 所以不同门店同一品牌,最终商品库存只扣除门店ID最小的商品库存(最早创建门店,主店)
// 最好商品由主店创建,复制到分店,分店本地同步状态不在打开
err = ModifyOrderSkusStock(db, order, false)
}
}
if err == nil {
dao.Commit(db, txDB)
@@ -449,6 +465,7 @@ func (c *OrderManager) SaveOrder(order *model.GoodsOrder, isAdjust bool, db *dao
return isDuplicated, err
}
// ModifyOrderSkusStock 果园和菜市同步库存
func ModifyOrderSkusStock(db *dao.DaoDB, order *model.GoodsOrder, isAdd bool) (err error) {
store, err := dao.GetStoreDetail(db, order.JxStoreID, order.VendorID, order.VendorOrgCode)
if err != nil || store.IsSync != model.YES {
@@ -458,16 +475,10 @@ func ModifyOrderSkusStock(db *dao.DaoDB, order *model.GoodsOrder, isAdd bool) (e
for _, sku := range skus {
storeSkus, _ := dao.GetStoresSkusInfo(db, []int{jxutils.GetSaleStoreIDFromOrder(order)}, []int{sku.SkuID})
if len(storeSkus) == 0 {
// if !isAdd {
// globals.SugarLogger.Warnf("此订单商品没得storsku%v,%v", order.VendorOrderID, sku.SkuID)
// }
continue
}
storeSku, stock := storeSkus[0], 0
if storeSku.Stock == 0 {
if !isAdd {
// globals.SugarLogger.Warnf("此订单商品库存为0%v,%v", order.VendorOrderID, sku.SkuID)
}
continue
}
if isAdd {
@@ -490,9 +501,56 @@ func ModifyOrderSkusStock(db *dao.DaoDB, order *model.GoodsOrder, isAdd bool) (e
}
storeSku.Stock = stock
db.Db.Update(storeSku, "Stock")
if order.VendorID != model.VendorIDJX {
// dao.SetStoreSkuSyncStatus(db, order.VendorID, []int{jxutils.GetSaleStoreIDFromOrder(order)}, []int{sku.SkuID}, model.SyncFlagStockMask)
}
return err
}
// ModifyPetOrderSkusStock 宠物同步库存
func ModifyPetOrderSkusStock(db *dao.DaoDB, order *model.GoodsOrder, isAdd bool) (err error) {
store, err := dao.GetStoreDetail(db, order.JxStoreID, order.VendorID, order.VendorOrgCode)
if err != nil {
return err // 门店未打开同步不修改库存
}
storeList, err := dao.GetStoreList(db, nil, nil, nil, []int{store.BrandID}, nil, "")
if err != nil {
return err
}
if len(storeList) == 0 {
globals.SugarLogger.Errorf("根据品牌获取门店信息异常,未获取到门店列表[storeID:%d,brandID:%d]", store.ID, store.BrandID)
return nil
}
skus := order.Skus
for _, sku := range skus {
storeSkus, _ := dao.GetStoresSkusInfo(db, []int{storeList[0].ID}, []int{sku.SkuID})
if len(storeSkus) == 0 {
continue
}
storeSku, stock := storeSkus[0], 0
if storeSku.Stock == 0 {
continue
}
if isAdd {
stock = storeSku.Stock + sku.Count
} else {
stock = storeSku.Stock - sku.Count
//如果是进货的订单,进货方门店对应商品要加上这么多库存
if order.OrderType == model.OrderTypeSupplyGoods {
storeSkus2, _ := dao.GetStoresSkusInfo(db, []int{order.FromStoreID}, []int{sku.SkuID})
if len(storeSkus2) > 0 {
storeSku3 := storeSkus2[0]
storeSku3.Stock = storeSku3.Stock + sku.Count
db.Db.Update(storeSku3, "Stock")
}
}
realStock := checkPriceDefendOrderByStock(db, jxutils.GetSaleStoreIDFromOrder(order), sku.SkuID, stock, storeSku.JxPrice)
if realStock != -1 {
stock = realStock
}
}
storeSku.Stock = stock
db.Db.Update(storeSku, "Stock")
}
return err
}