private MerchantWithdrawal WithdrawalToOutside(MerchantWallet fromWallet, MerchantWithdrawal fromWithdraw, Cryptocurrency cryptocurrency, MerchantAccount account, decimal amount, decimal fee, string address, string tag, string clientIP) { var actualAmount = amount - fee; ILog _logger = LogManager.GetLogger("LogicError"); using (var scope = new TransactionScope()) { try { fromWithdraw.Status = TransactionStatus.UnSubmit; fromWithdraw = new MerchantWithdrawalDAC().Create(fromWithdraw); var fromWithdrawFee = new MerchantWithdrawalFee { Amount = amount, Fee = fee, Timestamp = DateTime.UtcNow, WithdrawalId = fromWithdraw.Id }; new MerchantWithdrawalFeeDAC().Create(fromWithdrawFee); new MerchantWalletDAC().Freeze(fromWallet.Id, amount); //var requestInfo = new FiiiFinanceAgent().TryCreateWithdraw(requestModel); //new MerchantWithdrawalDAC().UpdateTransactionId(fromWithdraw.Id, requestInfo.RequestID, // requestInfo.TransactionId); scope.Complete(); } catch (CommonException) { throw; } catch (Exception ex) { _logger.Info($"Withdraw ApplyWithdrawal faild.WithdrawID:{fromWithdraw.Id},OrderNo:{fromWithdraw.OrderNo}.request Parameter - . Error message:{ex.Message}"); throw; } } var requestModel = new CreateWithdrawModel { AccountID = account.Id, AccountType = AccountTypeEnum.Merchant, CryptoName = cryptocurrency.Code, ReceivingAddress = address, DestinationTag = tag, Amount = actualAmount, IPAddress = clientIP, TransactionFee = fee, WithdrawalId = fromWithdraw.Id }; RabbitMQSender.SendMessage("WithdrawSubmit", requestModel); return(fromWithdraw); }
public MerchantWallet Insert(MerchantWallet wallet) { const string sql = @"INSERT INTO [dbo].[MerchantWallets]([MerchantAccountId],[CryptoId],[CryptoCode],[Status],[Balance],[FrozenBalance],[Address],[SupportReceipt],[Sequence]) VALUES (@MerchantAccountId, @CryptoId,@CryptoCode, @Status, @Balance, @FrozenBalance, @Address,@SupportReceipt,@Sequence); SELECT SCOPE_IDENTITY()"; using (var con = WriteConnection()) { wallet.Id = con.ExecuteScalar <long>(sql, wallet); return(wallet); } }
public override Wallet Insert(Wallet wallet) { var merchantWallet = new MerchantWallet { MerchantAccountId = wallet.AccountId, CryptoId = wallet.CryptoId, Status = MerchantWalletStatus.Displayed, Balance = wallet.Balance, FrozenBalance = wallet.FrozenBalance, Address = wallet.Address, SupportReceipt = false, }; merchantWallet = new MerchantWalletDAC().Insert(merchantWallet); wallet.Id = merchantWallet.Id; return(wallet); }
public MerchantWallet GenerateWallet(Guid accountId, int cryptoId, string cryptoCode, int sequence = 10000, bool supportReceipt = false) { var merchantWallet = new MerchantWallet { MerchantAccountId = accountId, CryptoId = cryptoId, CryptoCode = cryptoCode, Status = MerchantWalletStatus.Displayed, Balance = 0, FrozenBalance = 0, SupportReceipt = supportReceipt, Sequence = sequence }; merchantWallet = new MerchantWalletDAC().Insert(merchantWallet); return(merchantWallet); }
//private MerchantWithdrawal WithdrawalToMerchantAccount(MerchantWallet fromWallet, MerchantWithdrawal fromWithdraw, MerchantWallet toWallet) //{ // MerchantDeposit deposit = null; // using (var scope = new TransactionScope()) // { // //提币 // fromWithdraw.Status = TransactionStatus.Confirmed; // fromWithdraw.TransactionId = toWallet.MerchantAccountId.ToString("N"); // fromWithdraw.SelfPlatform = true;//平台内提币 // fromWithdraw = new MerchantWithdrawalDAC().Create(fromWithdraw); // var fromWithdrawFee = new MerchantWithdrawalFee // { // Amount = fromWithdraw.Amount, // Timestamp = DateTime.UtcNow, // Fee = fromWithdraw.Amount * WithdrawalMasterSetting.ToMerchantHandleFeeTier, // WithdrawalId = fromWithdraw.Id // }; // new MerchantWithdrawalFeeDAC().Create(fromWithdrawFee); // new MerchantWalletDAC().Decrease(fromWallet.Id, fromWithdraw.Amount); // new MerchantWalletStatementDAC().Insert(new MerchantWalletStatement // { // WalletId = fromWallet.Id, // Action = MerchantWalletStatementAction.Withdrawal, // Amount = -fromWithdraw.Amount, // Balance = fromWallet.Balance - fromWithdraw.Amount, // Timestamp = DateTime.UtcNow // }); // //充币 // var amount = fromWithdraw.Amount - fromWithdrawFee.Fee; // if (amount <= 0) // { // throw new CommonException(ReasonCode.GENERAL_ERROR, Resources.到账数量不能为零或者负数); // } // deposit = new MerchantDepositDAC().Insert(new MerchantDeposit // { // MerchantAccountId = toWallet.MerchantAccountId, // MerchantWalletId = toWallet.Id, // FromAddress = fromWallet.Address, // ToAddress = toWallet.Address, // Amount = fromWithdraw.Amount - fromWithdrawFee.Fee, // Status = TransactionStatus.Confirmed, // Timestamp = DateTime.UtcNow, // OrderNo = CreateOrderno(), // TransactionId = fromWallet.MerchantAccountId.ToString("N"), // SelfPlatform = true // }); // new MerchantWalletDAC().Increase(toWallet.Id, amount); // new MerchantWalletStatementDAC().Insert(new MerchantWalletStatement // { // WalletId = toWallet.Id, // Action = MerchantWalletStatementAction.Deposit, // Amount = amount, // Balance = toWallet.Balance + amount, // Timestamp = DateTime.UtcNow // }); // scope.Complete(); // } // var withdrawId = fromWithdraw.Id; // var depositId = deposit.Id; // var t1 = Task.Run(() => new FiiiPOSPushComponent().PushWithdrawCompleted(withdrawId)); // var t2 = Task.Run(() => new FiiiPOSPushComponent().PushDeposit(depositId)); // Task.WaitAll(t1, t2); // return fromWithdraw; //} private MerchantWithdrawal WithdrawalToUserAccount(MerchantWallet fromWallet, MerchantWithdrawal fromWithdraw, UserWallet toWallet, decimal fee) { UserDeposit deposit; using (var scope = new TransactionScope()) { //提币 fromWithdraw.Status = TransactionStatus.Confirmed; fromWithdraw.TransactionId = toWallet.UserAccountId.ToString("N"); fromWithdraw.SelfPlatform = true;//平台内提币 fromWithdraw = new MerchantWithdrawalDAC().Create(fromWithdraw); var fromWithdrawFee = new MerchantWithdrawalFee { Amount = fromWithdraw.Amount, Timestamp = DateTime.UtcNow, Fee = fee, WithdrawalId = fromWithdraw.Id }; new MerchantWithdrawalFeeDAC().Create(fromWithdrawFee); new MerchantWalletDAC().Decrease(fromWallet.Id, fromWithdraw.Amount); new MerchantWalletStatementDAC().Insert(new MerchantWalletStatement { WalletId = fromWallet.Id, Action = MerchantWalletStatementAction.Withdrawal, Amount = -fromWithdraw.Amount, Balance = fromWallet.Balance - fromWithdraw.Amount, Timestamp = DateTime.UtcNow }); //充币 var amount = fromWithdraw.Amount - fromWithdrawFee.Fee; new UserWalletDAC().Increase(toWallet.Id, amount); new UserWalletStatementDAC().Insert(new UserWalletStatement { WalletId = toWallet.Id, Action = UserWalletStatementAction.Deposit, Amount = amount, Balance = toWallet.Balance + amount, FrozenAmount = 0, FrozenBalance = toWallet.FrozenBalance, Timestamp = DateTime.UtcNow }); deposit = new UserDepositDAC().Insert(new UserDeposit { UserAccountId = toWallet.UserAccountId, UserWalletId = toWallet.Id, FromAddress = fromWallet.Address, FromTag = fromWallet.Tag, ToAddress = toWallet.Address, ToTag = toWallet.Tag, Amount = amount, Status = TransactionStatus.Confirmed, Timestamp = DateTime.UtcNow, OrderNo = NumberGenerator.GenerateUnixOrderNo(), TransactionId = fromWallet.MerchantAccountId.ToString("N"), SelfPlatform = true, CryptoCode = toWallet.CryptoCode }); new UserTransactionDAC().Insert(new UserTransaction { Id = Guid.NewGuid(), AccountId = toWallet.UserAccountId, CryptoId = toWallet.CryptoId, CryptoCode = toWallet.CryptoCode, Type = UserTransactionType.Deposit, DetailId = deposit.Id.ToString(), Status = (byte)deposit.Status, Timestamp = deposit.Timestamp, Amount = amount, OrderNo = deposit.OrderNo }); scope.Complete(); } var withdrawId = fromWithdraw.Id; var depositId = deposit.Id; MerchantMSMQ.PubMerchantWithdrawCompleted(withdrawId, 0); MerchantMSMQ.PubUserDeposit(depositId, 0); return(fromWithdraw); }