56 lines
1.9 KiB
C#
56 lines
1.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using ELT.Client.Models.Insurance;
|
|
using ELT.Client.Models.Insurance.Request;
|
|
using ELTOsago;
|
|
|
|
namespace ELT.Client.Managers.Insurance
|
|
{
|
|
public class OsagoManager : InsuranceManager<CalculateOsagoRequest, OSAGOFullCalculationResponse>
|
|
{
|
|
private readonly EltSoap _eltOsagoSoap;
|
|
|
|
public OsagoManager()
|
|
{
|
|
_eltOsagoSoap = new EltSoapClient();
|
|
}
|
|
|
|
public override Dictionary<string, OSAGOFullCalculationResponse> Calculate(
|
|
CalculateOsagoRequest calculateOsagoRequest, ELTPreData preRequestData)
|
|
{
|
|
var result = new Dictionary<string, OSAGOFullCalculationResponse>();
|
|
|
|
var osagoParams = calculateOsagoRequest.ELTParams;
|
|
osagoParams.UsagePlace = preRequestData.Kladr;
|
|
osagoParams.CarInfo.Mark = preRequestData.Brand;
|
|
osagoParams.CarInfo.Model = preRequestData.Model;
|
|
osagoParams.AuthInfo = new ELTOsago.AuthInfo
|
|
{
|
|
Login = AuthInfo.Login,
|
|
Password = AuthInfo.Password
|
|
};
|
|
|
|
var tasks = calculateOsagoRequest.CompanyIds.Distinct().Select(companyId => new Task(() =>
|
|
{
|
|
try
|
|
{
|
|
osagoParams.InsuranceCompany = companyId;
|
|
var res = _eltOsagoSoap.OSAGOFullCalculation(osagoParams);
|
|
if (string.IsNullOrEmpty(res.Error))
|
|
result.Add(companyId, res);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
}));
|
|
|
|
var tasksArray = tasks as Task[] ?? tasks.ToArray();
|
|
Parallel.ForEach(tasksArray, (t) => t.Start());
|
|
Task.WaitAll(tasksArray.ToArray());
|
|
|
|
return result;
|
|
}
|
|
}
|
|
} |