Exemplo n.º 1
0
        public void Create(MallPaymentOrder model)
        {
            const string sql =
                "INSERT INTO MallPaymentOrder(Id, OrderId, TradeNo, UserAccountId, CryptoAmount, Status, ExpiredTime,Timestamp, Remark) VALUES(@Id, @OrderId, @TradeNo, @UserAccountId, @CryptoAmount, @Status,@ExpiredTime, @Timestamp, @Remark);";

            using (var con = WriteConnection())
            {
                con.Execute(sql, model);
            }
        }
Exemplo n.º 2
0
        public ResultDto Payment(PaymentVo model)
        {
            var result = new ResultDto();

            var userAccountId = model.UserId;

            var userAccountDac = new UserAccountDAC();
            var userWalletDac  = new UserWalletDAC();
            var mallDac        = new MallPaymentOrderDAC();

            var account = userAccountDac.GetById(userAccountId);

            if (account == null)
            {
                result.Code    = AccountNotFound;
                result.Message = Resource.AccountNotFound;

                return(result);
            }

            if (!PasswordHasher.VerifyHashedPassword(account.Pin, model.PIN))
            {
                result.Code    = PINError;
                result.Message = Resource.PINError;

                return(result);
            }

            var wallet = userWalletDac.GetByCryptoCode(userAccountId, "FIII");

            if (wallet == null)
            {
                result.Code    = WalletNotFound;
                result.Message = Resource.WalletNotFound;

                return(result);
            }

            if (wallet.Balance < model.CryptoAmount)
            {
                result.Code    = InsufficientBalance;
                result.Message = Resource.InsufficientBalance;

                return(result);
            }

            var extisorder = mallDac.GetByOrderId(model.OrderId);

            if (extisorder != null && extisorder.Status == OrderStatus.Completed)
            {
                result.Code    = OrderExist;
                result.Message = Resource.OrderExist;

                return(result);
            }

            try
            {
                if (extisorder == null)
                {
                    var order = new MallPaymentOrder
                    {
                        Id            = Guid.NewGuid(),
                        CryptoAmount  = model.CryptoAmount,
                        ExpiredTime   = DateTime.UtcNow.AddMinutes(30),
                        OrderId       = model.OrderId,
                        Remark        = "",
                        Status        = OrderStatus.Pending,
                        Timestamp     = DateTime.UtcNow,
                        UserAccountId = userAccountId,
                        RefundTradeNo = string.Empty,
                        TradeNo       = string.Empty
                    };
                    mallDac.Create(order);
                    RabbitMQSender.SendMessage("PaymentGatewayPayOrder", order);
                }
                else
                {
                    RabbitMQSender.SendMessage("PaymentGatewayPayOrder", extisorder);
                }

                result.Message = Resource.Success;
                return(result);
            }
            catch (Exception exception)
            {
                _log.Error(exception);

                result.Code    = PaymentError;
                result.Message = Resource.PaymentError;

                return(result);
            }
        }