/// <summary> /// User nạp tiền vào hệ thống /// </summary> /// <param name="request"></param> /// <returns></returns> public BaseResponse DepositBTC(DepositBTCRequest request) { var response = new BaseResponse(); try { _dataContext.Connection.Open(); System.Data.Common.DbTransaction transaction = _dataContext.Connection.BeginTransaction(); _dataContext.Transaction = transaction; try { // 1. Lấy địa chỉ ví của hệ thống để nhận tiền từ user //BTCStore store = _btcStoreRepository.GetAddressForReceive(); string addressForReceive = request.AddressForReceive; //store.Address; // 2.Lấy User BTC UserBTC userBTC = _dataContext.UserBTCs.Single(x => x.Username == request.Username); // 3. Lấy UserInfo UserInfo userInfo = _dataContext.UserInfos.Single(x => x.Username == request.Username); // check valid BTCStore btcStoreForReceiveInfo = _btcStoreRepository.GetAddressForReceive(addressForReceive); if (btcStoreForReceiveInfo == null || userBTC == null || userInfo == null || request.Amount <= 0) { throw new ArgumentNullException("Invalid request parameter"); } // 4 tạo transaction BTCStoreTransaction storeTransaction = new BTCStoreTransaction(); storeTransaction.Type = (int)BTCStoreTransactionTypeEnum.DEPOSIT; storeTransaction.StoreBitAddress = addressForReceive; storeTransaction.UserBitAddress = userBTC.WalletID; storeTransaction.TransactionHash = SaltHelper.GetUniqueKey(); storeTransaction.Amount = request.Amount; storeTransaction.Amount = CommonUtils.FoatBTCAmount(storeTransaction.Amount); storeTransaction.UserId = userInfo.Id; storeTransaction.Username = userInfo.Username; storeTransaction.Fee = 0; storeTransaction.CreatedDate = DateTime.Now; storeTransaction.ModifiedDate = storeTransaction.CreatedDate; storeTransaction.Status = (int)BTCStoreTransactionStatusEnum.NOT_CONFIRMED; storeTransaction.Rate = 0; storeTransaction.GUID = System.Guid.NewGuid(); storeTransaction.Note = null; _dataContext.BTCStoreTransactions.InsertOnSubmit(storeTransaction); _dataContext.SubmitChanges(); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); response.IsSuccess = false; } finally { try { if (null != _dataContext.Connection) { _dataContext.Connection.Close(); } } catch { } } } catch (Exception ex) { response.IsSuccess = false; } return(response); }
/// <summary> /// Set trạng thái cho loại giao dịch là Receive (User Deposit) /// </summary> /// <param name="guid"></param> /// <param name="status"></param> /// <returns></returns> public BaseResponse SetBTCStoreTransactionForReceive(string guid, BTCStoreTransactionStatusEnum status) { var response = new BaseResponse(); try { var transGUID = new Guid(guid); _dataContext.Connection.Open(); System.Data.Common.DbTransaction transaction = _dataContext.Connection.BeginTransaction(); _dataContext.Transaction = transaction; try { BTCStoreTransaction btcTransaction = _dataContext.BTCStoreTransactions.Single(x => x.GUID == transGUID); BTCStore btcStore = _dataContext.BTCStores.Single(x => x.Address == btcTransaction.StoreBitAddress); if (btcTransaction.Type == (int)BTCStoreTransactionTypeEnum.DEPOSIT) { if (BTCStoreTransactionStatusEnum.CONFIRMED == status) { if (btcTransaction.Status == (int)BTCStoreTransactionStatusEnum.NOT_CONFIRMED) { btcTransaction.Status = (int)BTCStoreTransactionStatusEnum.CONFIRMED; btcStore.Amount = btcStore.Amount + btcTransaction.Amount; btcStore.ModifiedDate = DateTime.Now; // lấy ví UserBTC UserBTC userBTC = _dataContext.UserBTCs.Single(x => x.Username == btcTransaction.Username); userBTC.Amount += btcTransaction.Amount; userBTC.Amount = CommonUtils.FoatBTCAmount(userBTC.Amount); } } else if (BTCStoreTransactionStatusEnum.REJECTED == status) { if (btcTransaction.Status == (int)BTCStoreTransactionStatusEnum.NOT_CONFIRMED) { btcTransaction.Status = (int)BTCStoreTransactionStatusEnum.REJECTED; btcTransaction.ModifiedDate = DateTime.Now; } } } _dataContext.SubmitChanges(); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); response.IsSuccess = false; } finally { try { if (null != _dataContext.Connection) { _dataContext.Connection.Close(); } } catch { } } } catch (Exception ex) { response.IsSuccess = false; } return(response); }