예제 #1
0
        public static bool SyncPayOrder(this MyDbContext db, PayOrderBag payOrderBag)
        {
            System.Object locker = new System.Object();

            lock (locker)
            {   // 同步代码块
                var old = ("SELECT  PayStateID FROM pay_order where PO_ID='" + payOrderBag.PayOrder.PO_ID + "'").ExecuteReader(Setting.ConnectionString);
                if (old.Any() &&
                    (old[0][0] == PayStateEnum.Failed.ToString() ||
                     old[0][0] == PayStateEnum.Finished.ToString()))
                {//同步检查是否 已完成
                    return(false);
                }


                if (payOrderBag.IsSuccessful)
                {
                    //写记录
                    var payerLog = new account_record()
                    {
                        AccountRecordID   = payOrderBag.PayOrder.PO_ID + "-" + payOrderBag.Payer.Account.AccountID,
                        AccountID         = payOrderBag.Payer.Account.AccountID,
                        Amount            = payOrderBag.PayOrder.PayNum,
                        Type              = "支出",
                        Time              = DateTime.Now,
                        AfterPayedBalance = payOrderBag.Payer.Account.Balance,
                        ServiceCharge     = 0,
                        Reason            = "订单[" + payOrderBag.PayOrder.PO_ID + "]产生的支出" + payOrderBag.PayOrder.PayNum / 100.0 + "元",
                        PO_ID             = payOrderBag.PayOrder.PO_ID
                    };
                    var receiverLog = new account_record()
                    {
                        AccountRecordID   = payOrderBag.PayOrder.PO_ID + "-" + payOrderBag.Receiver.Account.AccountID,
                        AccountID         = payOrderBag.Receiver.Account.AccountID,
                        Amount            = payOrderBag.PayOrder.PayNum,
                        Type              = "收入",
                        Time              = DateTime.Now,
                        AfterPayedBalance = payOrderBag.Receiver.Account.Balance,
                        ServiceCharge     = 0,
                        Reason            = "订单[" + payOrderBag.PayOrder.PO_ID + "]产生的收入" + payOrderBag.PayOrder.PayNum / 100.0 + "元",
                        PO_ID             = payOrderBag.PayOrder.PO_ID
                    };

                    //改为已完成
                    payOrderBag.PayOrder.PayStateID = PayStateEnum.Finished.ToString();
                    db.account_record.Add(payerLog);
                    db.account_record.Add(receiverLog);
                    db.account.AddOrUpdate(payOrderBag.Payer.Account);
                    db.account.AddOrUpdate(payOrderBag.Receiver.Account);
                    db.pay_order.AddOrUpdate(payOrderBag.PayOrder);
                    return(db.SaveChanges() > 0);
                }
                db.account.AddOrUpdate(payOrderBag.Payer.Account);
                db.account.AddOrUpdate(payOrderBag.Receiver.Account);
                db.pay_order.AddOrUpdate(payOrderBag.PayOrder);
                return(db.SaveChanges() > 0);
            }
        }
예제 #2
0
 public bool SyncPayOrder(PayOrderBag payOrderBag)
 {
     return(Db.SyncPayOrder(payOrderBag));
 }