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
}

View File

@@ -612,6 +612,7 @@ func (v *VendorSync) SyncStoresSkus(ctx *jxcontext.Context, parentTask tasksch.I
setSyncStatus = model.SyncFlagStoreSkuModifiedMask
}
//权限
globals.SugarLogger.Debugf("---------permission.IsRoled(ctx) : %s", utils.Format4Output(permission.IsRoled(ctx), false))
if permission.IsRoled(ctx) {
if storeIDsMap, err := permission.GetUserStoresResultMap(ctx.GetUserID()); err == nil {
var storeIDs2 []int

View File

@@ -521,6 +521,7 @@ func isSkuLockTimeValid(sku *dao.StoreSkuSyncInfo) bool {
}
func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag int, isFull bool, vendorID, storeID int, vendorOrgCode string, nameIDs, skuIDs, excludeSkuIDs []int, useVendorPriceDirectly, isContinueWhenError bool) (err error) {
globals.SugarLogger.Debugf("---------------111111")
db := dao.GetDB()
storeDetail, err := dao.GetStoreDetail(db, storeID, vendorID, vendorOrgCode)
if err != nil {
@@ -533,6 +534,8 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
} else {
skus, err = dao.GetStoreSkus(db, vendorID, storeID, skuIDs)
}
globals.SugarLogger.Debugf("---------------skus := %s", utils.Format4Output(skus, false))
if err != nil || len(skus) == 0 {
return err
}
@@ -752,6 +755,10 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
}
globals.SugarLogger.Debugf("---------create:= %s", utils.Format4Output(createList, false))
globals.SugarLogger.Debugf("---------update:= %s", utils.Format4Output(updateList, false))
globals.SugarLogger.Debugf("---------stock:= %s", utils.Format4Output(stockList, false))
globals.SugarLogger.Debugf("---------online:= %s", utils.Format4Output(onlineList, false))
task := tasksch.NewParallelTask("syncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError2), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
step := batchItemList[0].(int)

View File

@@ -511,6 +511,8 @@ func GetStoreList(db *DaoDB, idList, cityCodes, statuss, brandIDs []int, mobileL
sql += " AND (t1.market_man_role = ? OR t1.operator_role = ? OR t1.operator_role2 = ? OR t1.operator_role3 = ?)"
sqlParams = append(sqlParams, shortRoleName, shortRoleName, shortRoleName, shortRoleName)
}
sql += ` ORDER BY id `
err = GetRows(db, &storeList, sql, sqlParams...)
return storeList, err
}