Пример #1
0
        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();
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
        }
Пример #4
0
        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);
        }