Exemple #1
0
        private void Update(CustomerPaymentStatistics statistics)
        {
            try
            {
                using (var cmd = new SqlCommand())
                {
                    using (var conn = new SqlConnection(ConnectionString))
                    {
                        cmd.Connection = conn;
                        conn.Open();

                        cmd.CommandText = $@"
    MERGE INTO [dbo].[CustomerPaymentStatistics] WITH (HOLDLOCK) AS target
    USING (SELECT '{statistics.CustomerReference}', {statistics.DepositSuccessSum}, {statistics.DepositSuccessBaseSum}, {statistics.DepositSuccessCount}, {statistics.DepositTotalSum}, {statistics.DepositTotalBaseSum}, {statistics.DepositTotalCount}, 
				  {statistics.WithdrawalSuccessSum}, {statistics.WithdrawalSuccessBaseSum}, {statistics.WithdrawalSuccessCount}, {statistics.WithdrawalTotalSum}, {statistics.WithdrawalTotalBaseSum}, {statistics.WithdrawalTotalCount})
    AS source (customerReference, depositSuccessSum, depositSuccessBaseSum, depositSuccessCount, depositTotalSum, depositTotalBaseSum, depositTotalCount, 
			   withdrawalSuccessSum, withdrawalSuccessBaseSum, withdrawalSuccessCount, withdrawalTotalSum, withdrawalTotalBaseSum, withdrawalTotalCount)
    ON target.customerReference = source.customerReference
    WHEN MATCHED THEN
		   UPDATE
		   SET target.depositSuccessSum += {statistics.DepositSuccessSum},
			   target.depositSuccessBaseSum += {statistics.DepositSuccessBaseSum},
			   target.depositSuccessCount += {statistics.DepositSuccessCount},
			   target.depositTotalSum += {statistics.DepositTotalSum},
			   target.depositTotalBaseSum += {statistics.DepositTotalBaseSum},
			   target.depositTotalCount += {statistics.DepositTotalCount},

			   target.withdrawalSuccessSum += {statistics.WithdrawalSuccessSum},
			   target.withdrawalSuccessBaseSum += {statistics.WithdrawalSuccessBaseSum},
			   target.withdrawalSuccessCount += {statistics.WithdrawalSuccessCount},
			   target.withdrawalTotalSum += {statistics.WithdrawalTotalSum},
			   target.withdrawalTotalBaseSum += {statistics.WithdrawalTotalBaseSum},
			   target.withdrawalTotalCount += {statistics.WithdrawalTotalCount}
    WHEN NOT MATCHED THEN
          INSERT (customerReference, depositSuccessSum, depositSuccessBaseSum, depositSuccessCount, depositTotalSum, depositTotalBaseSum, depositTotalCount, 
			      withdrawalSuccessSum, withdrawalSuccessBaseSum, withdrawalSuccessCount, withdrawalTotalSum, withdrawalTotalBaseSum, withdrawalTotalCount)
          VALUES (source.customerReference, source.depositSuccessSum, source.depositSuccessBaseSum, source.depositSuccessCount, source.depositTotalSum, source.depositTotalBaseSum, source.depositTotalCount, 
			      source.withdrawalSuccessSum, source.withdrawalSuccessBaseSum, source.withdrawalSuccessCount, source.withdrawalTotalSum, source.withdrawalTotalBaseSum, source.withdrawalTotalCount);"            ;

                        cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Message: {ex.Message}\nStack trace: {ex.StackTrace}");
            }
        }
Exemple #2
0
        static void UpdateStatistics(EventEnvelope envelope)
        {
            try
            {
                var message    = (PaymentStatusChangedMessage)envelope.Event;
                var calculator = new CustomerPaymentCounterCalculator();
                var increment  = calculator.GetPaymentChanges(message);

                var statistics = new CustomerPaymentStatistics
                {
                    CustomerReference = message.Customer.CustomerReference
                };

                if (message.Payment.MethodActionId == 1)
                {
                    statistics.DepositSuccessSum     = increment.SuccessSum;
                    statistics.DepositSuccessBaseSum = increment.SuccessBaseSum;
                    statistics.DepositSuccessCount   = increment.SuccessCount;
                    statistics.DepositTotalSum       = increment.TotalSum;
                    statistics.DepositTotalBaseSum   = increment.TotalBaseSum;
                    statistics.DepositTotalCount     = increment.TotalCount;
                }
                else
                {
                    statistics.WithdrawalSuccessSum     = increment.SuccessSum;
                    statistics.WithdrawalSuccessBaseSum = increment.SuccessBaseSum;
                    statistics.WithdrawalSuccessCount   = increment.SuccessCount;
                    statistics.WithdrawalTotalSum       = increment.TotalSum;
                    statistics.WithdrawalTotalBaseSum   = increment.TotalBaseSum;
                    statistics.WithdrawalTotalCount     = increment.TotalCount;
                }

                _statisticsActor.Tell(statistics);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Message: {ex.Message}\nStack trace: {ex.StackTrace}");
            }
        }