Example #1
0
    /// <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);
    }