代码是这样的, 是哪里出问题了吗?
client := goredislib.NewClient(&goredislib.Options{
Addr: fmt.Sprintf("%s:%d", global.ServerConfig.RedisInfo.Host, global.ServerConfig.RedisInfo.Port),
})
pool := goredis.NewPool(client)
rs := redsync.New(pool)
tx := global.DB.Begin()
sellDetail := model.StockSellDetail{
OrderSn: req.OrderSn,
Status: 1,
}
var details []model.GoodsDetail
for _, good := range req.GoodsInfo {
details = append(details, model.GoodsDetail{
Goods: good.GoodsId,
Num: good.Num,
})
mutex := rs.NewMutex(fmt.Sprintf("goods_%d", good.GoodsId))
if err := mutex.Lock(); err != nil {
return nil, status.Errorf(codes.Internal, "redis:分布式锁获取异常")
}
var i model.Inventory
if result := global.DB.Where(&model.Inventory{Goods: good.GoodsId}).First(&i); result.RowsAffected == 0 {
tx.Rollback()
return nil, status.Errorf(codes.InvalidArgument, "未找到此商品的库存信息")
}
if i.Stocks < good.Num {
tx.Rollback()
return nil, status.Errorf(codes.ResourceExhausted, "此商品的库存不足")
}
i.Stocks -= good.Num
tx.Save(&i)
if ok, err := mutex.Unlock(); !ok || err != nil {
return nil, status.Errorf(codes.Internal, "redis:分布式锁释放异常")
}
}
sellDetail.Detail = details
//写selldetail表
if result := tx.Create(&sellDetail); result.RowsAffected == 0 {
tx.Rollback()
return nil, status.Errorf(codes.Internal, "保存库存扣减历史失败")
}
tx.Commit()
return &emptypb.Empty{}, nil