< Summary

Class:SVETA.Api.Services.Implements.MovementPayer
Assembly:SVETA.Api
File(s):/opt/dev/sveta_api_build/SVETA.Api/Services/Implements/MovementPayer.cs
Covered lines:0
Uncovered lines:120
Coverable lines:120
Total lines:172
Line coverage:0% (0 of 120)
Covered branches:0
Total branches:73
Branch coverage:0% (0 of 73)

Metrics

MethodLine coverage Branch coverage
.ctor(...)0%100%
DoWork()0%0%
ExecuteAsync()0%0%
StopAsync()0%100%

File(s)

/opt/dev/sveta_api_build/SVETA.Api/Services/Implements/MovementPayer.cs

#LineLine coverage
 1using System;
 2using System.Threading;
 3using System.Threading.Tasks;
 4using Microsoft.Extensions.DependencyInjection;
 5using Microsoft.Extensions.Hosting;
 6using Microsoft.Extensions.Logging;
 7using SVETA.Api.Helpers;
 8using SVETA.Api.Services.Interfaces;
 9using WinSolutions.Sveta.Common;
 10using WinSolutions.Sveta.Server.Data.DataModel.Entities;
 11using WinSolutions.Sveta.Server.Data.DataModel.Kinds;
 12using WinSolutions.Sveta.Server.Services.Interfaces;
 13
 14namespace SVETA.Api.Services.Implements
 15{
 16    public class MovementPayer: BackgroundService
 17    {
 18        private readonly IServiceProvider _service;
 19        private readonly ILogger<MovementPayer> _logger;
 20
 021        public MovementPayer(IServiceProvider service, ILogger<MovementPayer> logger)
 022        {
 023            _service = service;
 024            _logger = logger;
 025        }
 26
 27        private async Task DoWork()
 028        {
 029            using (var scope = _service.CreateScope())
 030            {
 031                var authUserService = scope.ServiceProvider.GetRequiredService<IAuthenticationService>();
 032                authUserService.SwitchToServiceUser();
 033                var journalService = scope.ServiceProvider.GetRequiredService<IMovementStatusJournalService>();
 034                var movementWorker = scope.ServiceProvider.GetRequiredService<IMovementWorker>();
 035                var walletPaymentService = scope.ServiceProvider.GetRequiredService<IWalletPaymentService>();
 036                var activeJournals = await journalService.GetAllActive();
 037                var jobLogger = scope.ServiceProvider.GetRequiredService<IJobService>();
 038                await jobLogger.Create(new JobLogger
 039                {
 040                    JobName = nameof(MovementPayer), LogLevel = JobLogLevel.info,
 041                    Log = $"Старт работы джоба. Количество записей для обработки: {activeJournals.Count}"
 042                });
 043                if (activeJournals != null && activeJournals.Count > 0)
 044                {
 045                    for (int i = 0; i < activeJournals.Count; i++)
 046                    {
 047                        var record = activeJournals[i];
 048                        switch (record.Movement.MovementType.Id)
 49                        {
 50                            case (long) MovementKind.Shipment:
 051                            {
 052                                switch (record.StatusCurrent.Id)
 53                                {
 54                                    case (long) MovementsStatus.ReadyForShipment:
 055                                    {
 56                                        try
 057                                        {
 058                                            var transaction = await walletPaymentService.GetTransaction(record.Movement.
 059                                                TransactionStatusKind.Holded);
 060                                            if (transaction != null && Math.Ceiling(record.Movement.PrepaimentSum) !=
 061                                                Math.Ceiling(transaction.Sum))
 062                                            {
 063                                                await walletPaymentService.ChangeDealTransaction(record.Movement.Id);
 064                                            }
 065                                            await journalService.SetRecordInactive(record);
 066                                        }
 067                                        catch (Exception e)
 068                                        {
 069                                            _logger.LogError($"Ошибка изменения суммы транзакции документа {record.Movem
 070                                            await jobLogger.Create(new JobLogger
 071                                            {
 072                                                JobName = nameof(MovementPayer), LogLevel = JobLogLevel.error,
 073                                                Log = $"Ошибка изменения суммы транзакции документа {record.Movement.Id}
 074                                            });
 075                                            _logger.LogError(e.Message);
 076                                        }
 077                                        break;
 78                                    }
 79                                    case (long)MovementsStatus.SupplierReject:
 80                                    case (long)MovementsStatus.ClaimAccepted:
 081                                    {
 82                                        try
 083                                        {
 084                                            if (await walletPaymentService.CheckNeedFallbackMoney(record.Movement.Id))
 085                                            {
 086                                                await walletPaymentService.CancelTransaction(record.Movement.Id);
 087                                                var transaction =
 088                                                    await walletPaymentService.GetTransaction(record.Movement.Id,
 089                                                        TransactionStatusKind.Canceled);
 090                                                if (transaction == null)
 091                                                    throw new Exception($"После оплаты не найдена транзакция в статусе О
 092                                            }
 93
 094                                            await journalService.SetRecordInactive(record);
 095                                        }
 096                                        catch (Exception e)
 097                                        {
 098                                            _logger.LogError($"Ошибка возврата денежных средств покупателю в документе {
 099                                            await jobLogger.Create(new JobLogger
 0100                                            {
 0101                                                JobName = nameof(MovementPayer), LogLevel = JobLogLevel.error,
 0102                                                Log = $"Ошибка возврата денежных средств покупателю в документе {record.
 0103                                            });
 0104                                            _logger.LogError(e.Message);
 0105                                        }
 106
 0107                                        break;
 108                                    }
 109                                    case (long)MovementsStatus.Received:
 110                                    case (long)MovementsStatus.ClaimDeclined:
 0111                                    {
 112                                        try
 0113                                        {
 0114                                            if (await walletPaymentService.CheckNeedFallbackMoney(record.Movement.Id))
 0115                                            {
 0116                                                await walletPaymentService.ConfirmTransaction(record.Movement.Id);
 117
 0118                                                var transaction =
 0119                                                    await walletPaymentService.GetTransaction(record.Movement.Id,
 0120                                                        TransactionStatusKind.Confirmed);
 0121                                                if (transaction == null)
 0122                                                    throw new Exception($"После оплаты не найдена транзакция в статусе П
 0123                                            }
 124
 0125                                            await journalService.SetRecordInactive(record);
 0126                                        }
 0127                                        catch (Exception e)
 0128                                        {
 0129                                            _logger.LogError($"Ошибка отправки денежных средств продавцу в документе {re
 0130                                            await jobLogger.Create(new JobLogger
 0131                                            {
 0132                                                JobName = nameof(MovementPayer), LogLevel = JobLogLevel.error,
 0133                                                Log = $"Ошибка отправки денежных средств продавцу в документе {record.Mo
 0134                                            });
 0135                                            _logger.LogError(e.Message);
 0136                                        }
 0137                                        break;
 138                                    }
 139                                }
 0140                                break;
 141                            }
 142                        }
 0143                    }
 0144                }
 0145            }
 146
 0147        }
 148        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
 0149        {
 0150            _logger.LogDebug($"Movement  payer is starting.");
 151
 0152            stoppingToken.Register(() =>
 0153                _logger.LogDebug($"Movement  payer  background task is stopping."));
 154
 0155            while (!stoppingToken.IsCancellationRequested)
 0156            {
 0157                _logger.LogDebug($"Movement  payer  task doing background work.");
 0158                await DoWork();
 0159                await Task.Delay(60_000, stoppingToken);
 0160            }
 161
 0162            _logger.LogDebug($"Movement  payer  background task is stopping.");
 0163        }
 164        public override async Task StopAsync(CancellationToken stoppingToken)
 0165        {
 0166            _logger.LogInformation(
 0167                "Movement  payer Service is stopping.");
 168
 0169            await Task.CompletedTask;
 0170        }
 171    }
 172}