public RedPocketReceiveListOM ReceiveList(Guid accountId, string fiatCurrency, int index, int size) { if (index < 0) { throw new CommonException(Argument_Error, MessageResources.InvalidDataFormat); } if (size > 20) { size = 20; } var om = new RedPocketReceiveListOM(); var redPocketReceiveDAC = new RedPocketReceiverDAC(); var list = redPocketReceiveDAC.GetList(accountId, index, size).Select(s => new ReceiveRedPockDetail { Amount = s.Amount.ToString(CultureInfo.InvariantCulture), CryptoCode = s.CryptoCode, RedPocketId = s.PocketId, Nickname = s.Nickname, Timestamp = s.Timestamp.ToUtcTimeTicks().ToString(), }); om.DetailList = list.ToList(); om.TotalFiatAmount = ConvertFiatAmount(redPocketReceiveDAC.AccountSum(accountId), fiatCurrency).ToString(); om.Total = redPocketReceiveDAC.ReceiveCount(accountId); return(om); }
public List <RedPocketListDetailOM> DetailList(long redPocketId, int index, int size) { if (index < 0) { throw new CommonException(Argument_Error, MessageResources.InvalidDataFormat); } if (size > 20) { size = 20; } var redPocketReceiveDAC = new RedPocketReceiverDAC(); var list = redPocketReceiveDAC.GetList(redPocketId, index, size).Select(s => new RedPocketListDetailOM { Amount = s.Amount.ToString(), CryptoCode = s.CryptoCode, IsBestLuck = s.IsBestLuck, Nickname = s.Nickname, Timestamp = s.Timestamp.ToUtcTimeTicks().ToString() }); var om = list.ToList(); return(om); }
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 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); }
public RedPocketDetailOM Receive(UserAccount userAccount, string passcode, bool isZH = false) { if (userAccount == null) { throw new SystemErrorException(); } if (string.IsNullOrWhiteSpace(passcode)) { throw new CommonException(Argument_Error, MessageResources.InvalidDataFormat); } if (userAccount.L1VerifyStatus != Entities.Enums.VerifyStatus.Certified) { throw new CommonException(ReasonCode.NOT_VERIFY_LV1, Resources.EMNeedLV1Verfied); } var count = RedisHelper.StringGet(LockDbIndex, string.Format(KeyFormat, userAccount.Id)); if (!string.IsNullOrWhiteSpace(count) && int.Parse(count) >= 10) { var ttl = RedisHelper.KeyTimeToLive(LockDbIndex, string.Format(KeyFormat, userAccount.Id)); if (ttl != null) { var message = ""; var t = ""; try { t = TimeConvert(ttl.Value, isZH); message = string.Format(MessageResources.RedPocket_PassCodeErrorMaxCount, t); } catch (Exception exception) { _log.Error(exception.Message + " " + MessageResources.RedPocket_PassCodeErrorMaxCount + " " + t); } throw new CommonException(MaxError, message); } } var redPocketDAC = new RedPocketDAC(); var redPocket = redPocketDAC.GetByPassCode(passcode); if (redPocket == null) { var errorCount = ErrorCount(userAccount.Id, count, isZH); throw new CommonException(PassCodeError, string.Format(MessageResources.RedPocket_PassCodeError, errorCount, 10 - errorCount)); } if (redPocket.ExpirationDate < DateTime.UtcNow) { var errorCount = ErrorCount(userAccount.Id, count, isZH); throw new CommonException(PassCodeExpired, MessageResources.RedPocket_ReceiveExpired + Environment.NewLine + string.Format(MessageResources.RedPocket_PassCodeError, errorCount, 10 - errorCount)); } var crypto = new CryptocurrencyDAC().GetByCode(redPocket.CryptoCode); if (!crypto.Status.HasFlag(Foundation.Entities.Enum.CryptoStatus.RedPocket) || crypto.Enable == 0) { throw new CommonException(ReasonCode.CURRENCY_FORBIDDEN, MessageResources.CurrencyForbidden); } var om = new RedPocketDetailOM(); var redPocketReceiveDAC = new RedPocketReceiverDAC(); var hasReceive = redPocketReceiveDAC.HasReceive(userAccount.Id, redPocket.Id); if (redPocket.Status == RedPocketStatus.Actived && hasReceive == null) { var userWalletDAC = new UserWalletDAC(); var userWalletStatementDAC = new UserWalletStatementDAC(); var uwComponent = new UserWalletComponent(); var userTransactionDAC = new UserTransactionDAC(); var wallet = userWalletDAC.GetByCryptoCode(userAccount.Id, redPocket.CryptoCode); if (wallet == null) { wallet = uwComponent.GenerateWallet(userAccount.Id, redPocket.CryptoCode); } var min = crypto.DecimalPlace == 8 ? 0.00000001M : crypto.DecimalPlace == 6 ? 0.000001M : 0.00000001M; var n = crypto.DecimalPlace == 8 ? 100000000 : crypto.DecimalPlace == 6 ? 1000000 : 100000000; var amount = GetRandomMoney(redPocket, min, n); var priceDAC = new PriceInfoDAC(); var price = priceDAC.GetPriceByName("USD", crypto.Code); var fiatAmount = price * amount; using (var scope = new TransactionScope()) { try { var redPocketReceiver = new RedPocketReceiver { PocketId = redPocket.Id, AccountId = userAccount.Id, SendAccountId = redPocket.AccountId, CryptoCode = redPocket.CryptoCode, Amount = amount, Timestamp = DateTime.UtcNow, IsBestLuck = redPocket.Count == 1, OrderNo = IdentityHelper.OrderNo(), FiatAmount = fiatAmount <= 0 ? 0M : Math.Round(fiatAmount, 8) }; var id = redPocketReceiveDAC.Insert(redPocketReceiver); userTransactionDAC.Insert(new UserTransaction { Id = Guid.NewGuid(), AccountId = redPocketReceiver.AccountId, CryptoId = redPocket.CryptoId, CryptoCode = redPocket.CryptoCode, Type = UserTransactionType.ReceiveRedPocket, DetailId = id.ToString(), Status = (byte)redPocket.Status, Timestamp = redPocketReceiver.Timestamp, Amount = redPocketReceiver.Amount, OrderNo = redPocketReceiver.OrderNo }); userWalletDAC.Increase(wallet.Id, amount); userWalletStatementDAC.Insert(new UserWalletStatement { WalletId = wallet.Id, Balance = wallet.Balance + amount, Amount = amount, FrozenAmount = 0, FrozenBalance = wallet.FrozenBalance, Action = "Receive Red Pocket", Timestamp = DateTime.UtcNow }); redPocketDAC.UpdateRemain(redPocket.Id, amount); if (redPocket.RemainCount == 0) { redPocketDAC.UpdateStatus(redPocket.Id, RedPocketStatus.Complate); userTransactionDAC.UpdateStatus(UserTransactionType.PushRedPocket, redPocket.Id.ToString(), redPocket.AccountId, (byte)RedPocketStatus.Complate); if (redPocket.Count > 1) { redPocketReceiveDAC.UpdateBestLuck(redPocket.Id); } } scope.Complete(); } catch (Exception ex) { _log.Error(ex); throw new CommonException(); } } om.SelfAmount = amount.ToString(); om.ReceiveStatus = ReceiveStatusEnum.Receive; om.HasExpried = false; redPocket.Balance -= amount; } else { if (hasReceive != null) { om.ReceiveStatus = ReceiveStatusEnum.HasReceive; om.SelfAmount = hasReceive.Amount.ToString(); } else { om.ReceiveStatus = ReceiveStatusEnum.None; om.SelfAmount = string.Empty; } } 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.CryptoCode = redPocket.CryptoCode; om.ReceiveAmount = (redPocket.Amount - redPocket.Balance).ToString(); om.ReceiveCount = redPocket.Count - redPocket.RemainCount; om.Id = redPocket.Id; om.HasExpried = redPocket.ExpirationDate < DateTime.UtcNow; om.HasSelfSned = redPocket.AccountId == userAccount.Id; return(om); }