public void Refund(long id) { var redPocket = _redPocketDac.GetById(id); if (redPocket == null) { _log.Error($"Red pocket is not found. {id}"); return; } if (redPocket.RemainCount > 0) { var userWalletDAC = new UserWalletDAC(); var userWalletStatementDAC = new UserWalletStatementDAC(); var userTransactionDAC = new UserTransactionDAC(); var wallet = userWalletDAC.GetByAccountId(redPocket.AccountId, redPocket.CryptoId); if (wallet == null) { _log.Error($"Wallet exception. {redPocket.AccountId} RedPocketId={id}"); return; } using (var scope = new TransactionScope()) { userWalletDAC.Increase(wallet.Id, redPocket.Balance); userWalletStatementDAC.Insert(new UserWalletStatement { WalletId = wallet.Id, Balance = wallet.Balance + redPocket.Balance, Amount = redPocket.Balance, FrozenAmount = 0, FrozenBalance = wallet.FrozenBalance, Action = "Refund Red Pocket", Timestamp = DateTime.UtcNow }); _refundDac.Insert(new RedPocketRefund { Id = redPocket.Id, Amount = redPocket.Balance, OrderNo = _identity.StringId(), Timestamp = DateTime.UtcNow }); _redPocketDac.UpdateStatus(redPocket.Id, redPocket.RemainCount == redPocket.Count ? RedPocketStatus.FullRefund : RedPocketStatus.Refund); userTransactionDAC.UpdateStatus(UserTransactionType.PushRedPocket, redPocket.Id.ToString(), redPocket.AccountId, (byte)RedPocketStatus.Refund); scope.Complete(); } } }
public RedPocketDetailOM Detail(Guid accountId, long pocketId) { var redPocketDAC = new RedPocketDAC(); var redPocket = redPocketDAC.GetById(pocketId); if (redPocket == null) { throw new SystemErrorException(); } var om = new RedPocketDetailOM(); //if (redPocket.ExpirationDate < DateTime.UtcNow) //{ // if (accountId != redPocket.AccountId) // { // throw new CommonException(Expired, MessageResources.系统错误); // } //} var account = new UserAccountComponent().GetById(redPocket.AccountId); om.Message = redPocket.Message; om.SnederNickname = account.Nickname; om.TotalAmount = redPocket.Amount.ToString(); om.TotalCount = redPocket.Count; om.ReceiveAmount = (redPocket.Amount - redPocket.Balance).ToString(); om.ReceiveCount = redPocket.Count - redPocket.RemainCount; om.HasSelfSned = redPocket.AccountId == accountId; om.CryptoCode = redPocket.CryptoCode; var redPocketReceiveDAC = new RedPocketReceiverDAC(); var hasReceive = redPocketReceiveDAC.HasReceive(accountId, redPocket.Id); om.ReceiveStatus = hasReceive != null ? ReceiveStatusEnum.HasReceive : ReceiveStatusEnum.None; om.SelfAmount = hasReceive != null?hasReceive.Amount.ToString() : ""; om.HasExpried = redPocket.Status == RedPocketStatus.Refund || redPocket.ExpirationDate < DateTime.UtcNow; if (redPocket.AccountId == accountId) { om.PassCode = redPocket.PassCode.ToUpper(); om.ExpirationDate = redPocket.ExpirationDate.ToUtcTimeTicks().ToString(); } if (hasReceive != null) { om.FiatAmount = ConvertFiatAmount(hasReceive.FiatAmount, account.FiatCurrency).ToString(); } return(om); }
public RedPocket RePush(Guid accountId, long pocketId) { var redPocketDAC = new RedPocketDAC(); var pocket = redPocketDAC.GetById(pocketId); if (pocket == null) { throw new SystemErrorException(); } var crypto = new CryptocurrencyDAC().GetById(pocket.CryptoId); if (!crypto.Status.HasFlag(Foundation.Entities.Enum.CryptoStatus.RedPocket) || crypto.Enable == 0) { throw new CommonException(ReasonCode.CURRENCY_FORBIDDEN, MessageResources.CurrencyForbidden); } if (pocket.ExpirationDate > DateTime.UtcNow && pocket.AccountId == accountId && pocket.Status == RedPocketStatus.Actived) { return(pocket); } throw new SystemErrorException(); }
public StatementDetailOM StatementDetail(Guid accountId, int type, long id) { if (type == 14) { var redPocketDAC = new RedPocketDAC(); var data = redPocketDAC.GetById(id); if (data == null) { throw new SystemErrorException(); } if (accountId != data.AccountId) { throw new SystemErrorException(); } var status = data.Status; if (status == RedPocketStatus.FullRefund) { status = RedPocketStatus.Refund; } var result = new StatementDetailOM { Status = (byte)status, Amount = data.Amount.ToString(), CryptoCode = data.CryptoCode, OrderNo = data.OrderNo, PocketId = data.Id, Timestamp = data.Timestamp.ToUtcTimeTicks().ToString(), Type = 14, HasRefund = false }; if (data.Status == RedPocketStatus.Refund) { var redPocketRefundDAC = new RedPocketRefundDAC(); var refund = redPocketRefundDAC.GetById(id); result.HasRefund = true; result.RefundAmount = refund.Amount.ToString(); result.RefundTimestamp = refund.Timestamp.ToUtcTimeTicks().ToString(); } return(result); } if (type == 15) { var redPocketReceiveDAC = new RedPocketReceiverDAC(); var data = redPocketReceiveDAC.GetById(accountId, id); if (data == null) { throw new SystemErrorException(); } return(new StatementDetailOM { Status = 2, Amount = data.Amount.ToString(), CryptoCode = data.CryptoCode, OrderNo = data.OrderNo, PocketId = data.PocketId, HasRefund = false, RefundAmount = "", RefundTimestamp = "", Timestamp = data.Timestamp.ToUtcTimeTicks().ToString(), Type = 15 }); } return(null); }