1
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user