diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index fc71e770f..a4a5fa57e 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -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 } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 3d5a61f63..fa9cd229b 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -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 diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 607735040..28cfc0755 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -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) diff --git a/business/model/dao/store.go b/business/model/dao/store.go index 2d2e65599..5d9754b8a 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -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 }