/// <summary> /// 兑换商品 /// </summary> /// <param name="userName"></param> /// <param name="goodsID"></param> /// <param name="goodsNum"></param> /// <returns></returns> public static bool ExchangeGoods(string userName, int goodsID, int goodsNum, string address, string realName, string phone, out string msg) { msg = ""; bool success = false; //判断点数是否足够 //判断商品数量是否足够 //商品数量减去购买数量 //用户已使用点数增加 //写入消费记录 using (DbConnection conn = Db.Helper.CreateConnection()) { conn.ConnectionString = Db.Helper.ConnectionString; conn.Open(); DbTransaction tran = conn.BeginTransaction(System.Data.IsolationLevel.Serializable); try { var user = Select(userName, tran); if (user == null) { msg = "用户不存在!"; return(false); } var goods = GoodsBLL.SelectGoods(goodsID, tran); if (goods == null) { msg = "商品不存在!"; return(false); } if (goods.Num <= 0) { msg = "商品已被兑换完!"; return(false); } if (goods.Num < goodsNum) { msg = "商品库存不足!"; return(false); } int remainPoints = user.TotalPoints - user.UsedPoints; int pointsCost = goods.Points * goodsNum; if (remainPoints < pointsCost) { msg = "点数不足!"; return(false); } goods.Num = goods.Num - goodsNum; user.UsedPoints = user.UsedPoints + pointsCost; CostHistoryInfo model = new CostHistoryInfo(); model.AddTime = DateTime.Now; model.CostType = CostType.Exchange; model.GoodsID = goodsID; model.GoodsName = goods.Name; model.GoodsNum = goodsNum; model.MoneyAfter = user.TotalCost; model.MoneyBefore = user.TotalCost; model.OrderNum = ""; model.MoneyCost = 0M; model.PointsAfter = user.TotalPoints - user.UsedPoints; model.PointsBefore = remainPoints; model.PointsCost = pointsCost; model.ExchangeStatus = ExchangeStatus.WaitingSend; model.SendTime = GlobalSetting.MinTime; model.FinishTime = GlobalSetting.MinTime; model.ExpressName = ""; model.ExpressNum = ""; model.LinkAddress = address; model.LinkMan = realName; model.LinkPhone = phone; model.Remarks = ""; model.UserName = userName; GoodsBLL.UpdateGoods(goods, tran); MemberBLL.Update(user, tran); MemberBLL.AddCostHistory(model, tran); tran.Commit(); msg = "操作成功!"; success = true; } catch (Exception ex) { tran.Rollback(); msg = ex.Message; success = false; } } return(success); }