/// <summary> /// 支付成功后的处理,如果不是返回success,则表示处理失败,将记录在日志中 /// </summary> /// <param name="orderNum"></param> /// <param name="memberUserName"></param> /// <param name="moneyPayed"></param> /// <returns></returns> public static bool PaySuccessHandler(string orderNum, string memberUserName, decimal moneyPayed, out string msg) { //支付成功后的处理 //更改订单的已支付额 //更改订单的状态为完成 //增加用户的点数 //记录用户的消费记录 msg = ""; bool success = false; int points = Convert.ToInt32(moneyPayed); string orderSql = "Update TravelOrder Set OrderStatus='" + OrderStatus.Finished + "',MoneyPayed=" + moneyPayed + " Where OrderNum='" + orderNum + "' And AddMemberName='" + memberUserName + "'"; using (DbConnection conn = Db.Helper.CreateConnection()) { conn.ConnectionString = Db.Helper.ConnectionString; conn.Open(); using (DbTransaction tran = conn.BeginTransaction(System.Data.IsolationLevel.Serializable)) { try { SiteMemberInfo member = MemberBLL.Select(memberUserName, tran); if (member == null) { msg = "用户不存在!"; return(false); } decimal oldTotalCost = member.TotalCost; decimal newTotalCost = oldTotalCost + moneyPayed; int oldTotalPoints = member.TotalPoints; int newTotalPoints = oldTotalPoints + points; member.TotalCost = newTotalCost; member.TotalPoints = newTotalPoints; CostHistoryInfo model = new CostHistoryInfo(); model.AddTime = DateTime.Now; model.CostType = CostType.JoinGroup; model.GoodsID = 0; model.GoodsName = ""; model.GoodsNum = 0; model.MoneyCost = moneyPayed; model.OrderNum = orderNum; model.PointsAfter = newTotalPoints; model.PointsBefore = oldTotalPoints; model.MoneyBefore = oldTotalCost; model.MoneyAfter = newTotalCost; model.PointsCost = points; model.ExchangeStatus = ""; model.SendTime = GlobalSetting.MinTime; model.FinishTime = GlobalSetting.MinTime; model.ExpressName = ""; model.ExpressNum = ""; model.LinkAddress = ""; model.LinkMan = ""; model.LinkPhone = ""; model.Remarks = ""; model.UserName = memberUserName; Db.Helper.ExecuteNonQuery(tran, orderSql); MemberBLL.Update(member, tran); MemberBLL.AddCostHistory(model, tran); tran.Commit(); success = true; } catch (Exception ex) { msg = ex.Message; tran.Rollback(); } } } return(success); }
/// <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); }