Compare commits
4 Commits
d999a0b98a
...
1b72c00b1e
Author | SHA1 | Date | |
---|---|---|---|
1b72c00b1e | |||
6d6e91867c | |||
4bc663c2ab | |||
8a8fc397bf |
@ -25,7 +25,7 @@ public sealed class RhSolutionsAddIn : IExcelAddIn
|
|||||||
.AddSingleton<IAddInConfiguration, AddInConfiguration>()
|
.AddSingleton<IAddInConfiguration, AddInConfiguration>()
|
||||||
.AddSingleton<IDatabaseClient, DatabaseClient>()
|
.AddSingleton<IDatabaseClient, DatabaseClient>()
|
||||||
.AddSingleton<ICurrencyClient, CurrencyClient>()
|
.AddSingleton<ICurrencyClient, CurrencyClient>()
|
||||||
.AddSingleton<ISleevesCalculator, SleevesCalculator>()
|
.AddSingleton<IFittingsCalculator, SleevesCalculator>()
|
||||||
.AddTransient<IFileDialog, FileDialog>();
|
.AddTransient<IFileDialog, FileDialog>();
|
||||||
|
|
||||||
Services.AddSingleton<WriterFactory>();
|
Services.AddSingleton<WriterFactory>();
|
||||||
|
@ -1,32 +1,26 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<DnaLibrary Name="RhSolutions Add-In" RuntimeVersion="v4.0" xmlns="http://schemas.excel-dna.net/addin/2020/07/dnalibrary">
|
<DnaLibrary Name="RhSolutions Add-In" RuntimeVersion="v4.0" xmlns="http://schemas.excel-dna.net/addin/2020/07/dnalibrary">
|
||||||
<ExternalLibrary Path="RhSolutions.AddIn.dll" ExplicitExports="false" LoadFromBytes="true" Pack="true" IncludePdb="false" />
|
<ExternalLibrary Path="RhSolutions.AddIn.dll" ExplicitExports="false" LoadFromBytes="true" Pack="true" IncludePdb="false" />
|
||||||
<Reference Path="ExcelDna.IntelliSense.dll" Pack="true" />
|
|
||||||
<Reference Path="Microsoft.AspNetCore.Http.Abstractions.dll" Pack="true" />
|
|
||||||
<Reference Path="Microsoft.AspNetCore.Http.Extensions.dll" Pack="true" />
|
|
||||||
<Reference Path="Microsoft.AspNetCore.Http.Features.dll" Pack="true" />
|
|
||||||
<Reference Path="Microsoft.Bcl.AsyncInterfaces.dll" Pack="true" />
|
<Reference Path="Microsoft.Bcl.AsyncInterfaces.dll" Pack="true" />
|
||||||
<Reference Path="Microsoft.Bcl.HashCode.dll" Pack="true" />
|
<Reference Path="Microsoft.Bcl.HashCode.dll" Pack="true" />
|
||||||
<Reference Path="Microsoft.Extensions.Caching.Abstractions.dll" Pack="true" />
|
<Reference Path="Microsoft.Extensions.Caching.Abstractions.dll" Pack="true" />
|
||||||
<Reference Path="Microsoft.Extensions.Caching.Memory.dll" Pack="true" />
|
<Reference Path="Microsoft.Extensions.Caching.Memory.dll" Pack="true" />
|
||||||
<Reference Path="Microsoft.Extensions.DependencyInjection.Abstractions.dll" Pack="true" />
|
<Reference Path="Microsoft.Extensions.DependencyInjection.Abstractions.dll" Pack="true" />
|
||||||
<Reference Path="Microsoft.Extensions.DependencyInjection.dll" Pack="true" />
|
<Reference Path="Microsoft.Extensions.DependencyInjection.dll" Pack="true" />
|
||||||
<Reference Path="Microsoft.Extensions.FileProviders.Abstractions.dll" Pack="true" />
|
|
||||||
<Reference Path="Microsoft.Extensions.Http.dll" Pack="true" />
|
<Reference Path="Microsoft.Extensions.Http.dll" Pack="true" />
|
||||||
<Reference Path="Microsoft.Extensions.Logging.Abstractions.dll" Pack="true" />
|
<Reference Path="Microsoft.Extensions.Logging.Abstractions.dll" Pack="true" />
|
||||||
<Reference Path="Microsoft.Extensions.Logging.dll" Pack="true" />
|
<Reference Path="Microsoft.Extensions.Logging.dll" Pack="true" />
|
||||||
<Reference Path="Microsoft.Extensions.Options.dll" Pack="true" />
|
<Reference Path="Microsoft.Extensions.Options.dll" Pack="true" />
|
||||||
<Reference Path="Microsoft.Extensions.Primitives.dll" Pack="true" />
|
<Reference Path="Microsoft.Extensions.Primitives.dll" Pack="true" />
|
||||||
<Reference Path="Microsoft.Net.Http.Headers.dll" Pack="true" />
|
<Reference Path="ExcelDna.IntelliSense.dll" Pack="true" />
|
||||||
<Reference Path="netDxf.dll" Pack="true" />
|
|
||||||
<Reference Path="Newtonsoft.Json.dll" Pack="true" />
|
<Reference Path="Newtonsoft.Json.dll" Pack="true" />
|
||||||
|
<Reference Path="netDxf.dll" Pack="true" />
|
||||||
<Reference Path="RhSolutions.ProductSku.dll" Pack="true" />
|
<Reference Path="RhSolutions.ProductSku.dll" Pack="true" />
|
||||||
<Reference Path="System.Buffers.dll" Pack="true" />
|
<Reference Path="System.Buffers.dll" Pack="true" />
|
||||||
<Reference Path="System.Diagnostics.DiagnosticSource.dll" Pack="true" />
|
<Reference Path="System.Diagnostics.DiagnosticSource.dll" Pack="true" />
|
||||||
<Reference Path="System.Memory.dll" Pack="true" />
|
<Reference Path="System.Memory.dll" Pack="true" />
|
||||||
<Reference Path="System.Numerics.Vectors.dll" Pack="true" />
|
<Reference Path="System.Numerics.Vectors.dll" Pack="true" />
|
||||||
<Reference Path="System.Runtime.CompilerServices.Unsafe.dll" Pack="true" />
|
<Reference Path="System.Runtime.CompilerServices.Unsafe.dll" Pack="true" />
|
||||||
<Reference Path="System.Text.Encodings.Web.dll" Pack="true" />
|
|
||||||
<Reference Path="System.Threading.Tasks.Extensions.dll" Pack="true" />
|
<Reference Path="System.Threading.Tasks.Extensions.dll" Pack="true" />
|
||||||
<Reference Path="System.ValueTuple.dll" Pack="true" />
|
<Reference Path="System.ValueTuple.dll" Pack="true" />
|
||||||
</DnaLibrary>
|
</DnaLibrary>
|
||||||
|
@ -32,7 +32,6 @@
|
|||||||
<PackageReference Include="ExcelDna.Integration" Version="1.6.0" />
|
<PackageReference Include="ExcelDna.Integration" Version="1.6.0" />
|
||||||
<PackageReference Include="ExcelDna.IntelliSense" Version="1.6.0" />
|
<PackageReference Include="ExcelDna.IntelliSense" Version="1.6.0" />
|
||||||
<PackageReference Include="ExcelDna.Interop" Version="15.0.1" />
|
<PackageReference Include="ExcelDna.Interop" Version="15.0.1" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="2.2.0" />
|
|
||||||
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="7.0.0" />
|
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="7.0.0" />
|
||||||
<PackageReference Include="Microsoft.Bcl.HashCode" Version="1.1.1" />
|
<PackageReference Include="Microsoft.Bcl.HashCode" Version="1.1.1" />
|
||||||
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
||||||
|
9
RhSolutions.AddIn/Services/CouplingsCalculator.cs
Normal file
9
RhSolutions.AddIn/Services/CouplingsCalculator.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
namespace RhSolutions.Services;
|
||||||
|
|
||||||
|
public class CouplingsCalculator : IFittingsCalculator
|
||||||
|
{
|
||||||
|
public Dictionary<Product, double> Calculate(Dictionary<Product, double> products)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,8 @@
|
|||||||
using Microsoft.Extensions.Caching.Memory;
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System.Web;
|
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Http.Extensions;
|
|
||||||
|
|
||||||
namespace RhSolutions.Services;
|
namespace RhSolutions.Services;
|
||||||
|
|
||||||
@ -56,11 +54,11 @@ public class DatabaseClient : IDatabaseClient
|
|||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QueryBuilder qb = new()
|
UriBuilder builder = new(@"https://rh.cebotari.ru/api/search")
|
||||||
{
|
{
|
||||||
{"query", line}
|
Query = $"query={line.Replace("&", "%26")}"
|
||||||
};
|
};
|
||||||
string request = @"https://rh.cebotari.ru/api/search" + qb.ToQueryString();
|
string request = builder.Uri.AbsoluteUri;
|
||||||
|
|
||||||
if (!_memoryCache.TryGetValue(line, out IEnumerable<Product> products))
|
if (!_memoryCache.TryGetValue(line, out IEnumerable<Product> products))
|
||||||
{
|
{
|
||||||
|
6
RhSolutions.AddIn/Services/IFittingsCalculator.cs
Normal file
6
RhSolutions.AddIn/Services/IFittingsCalculator.cs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
namespace RhSolutions.Services;
|
||||||
|
|
||||||
|
public interface IFittingsCalculator
|
||||||
|
{
|
||||||
|
public Dictionary<Product, double> Calculate(Dictionary<Product, double> products);
|
||||||
|
}
|
@ -1,6 +0,0 @@
|
|||||||
namespace RhSolutions.Services;
|
|
||||||
|
|
||||||
public interface ISleevesCalculator
|
|
||||||
{
|
|
||||||
public Dictionary<Product, double> CalculateSleeves(Dictionary<Product, double> products);
|
|
||||||
}
|
|
@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
namespace RhSolutions.Services;
|
namespace RhSolutions.Services;
|
||||||
|
|
||||||
public class SleevesCalculator : ISleevesCalculator
|
public class SleevesCalculator : IFittingsCalculator
|
||||||
{
|
{
|
||||||
private const string doublePattern =
|
private const string doublePattern =
|
||||||
@"((?i)равнопроходная|угольник\s+90|угольник\s+45|Т-образная|Комплект\s+трубок(?i))(.+?\b(?<Sleeve>16|20|25|32|40|50|63)\b)+";
|
@"((?i)равнопроходная|угольник\s+90|угольник\s+45|Т-образная|Комплект\s+трубок(?i))(.+?\b(?<Sleeve>16|20|25|32|40|50|63)\b)+";
|
||||||
private const string singlePattern =
|
private const string singlePattern =
|
||||||
@"((?i)муфта|тройник|переходник|угольник|штуцер|Г-образная|заглушка(?i))(.+?\b(?<Sleeve>16|20|25|32|40|50|63)\b)+";
|
@"((?i)муфта|тройник|переходник|угольник|штуцер|Г-образная|заглушка(?i))(.+?\b(?<Sleeve>16|20|25|32|40|50|63)\b)+";
|
||||||
|
|
||||||
public Dictionary<Product, double> CalculateSleeves(Dictionary<Product, double> products)
|
public Dictionary<Product, double> Calculate(Dictionary<Product, double> products)
|
||||||
{
|
{
|
||||||
Dictionary<string, double> result = new()
|
Dictionary<string, double> result = new()
|
||||||
{
|
{
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
internal class SleevesTool : Tool
|
internal class SleevesTool : Tool
|
||||||
{
|
{
|
||||||
private readonly ISleevesCalculator _sleevesCaluculator;
|
private readonly IFittingsCalculator _sleevesCaluculator;
|
||||||
|
|
||||||
public SleevesTool(ReaderFactory readerFactory, WriterFactory writerFactory, ISleevesCalculator sleevesCaluculator) : base(readerFactory, writerFactory)
|
public SleevesTool(ReaderFactory readerFactory, WriterFactory writerFactory, IFittingsCalculator sleevesCaluculator) : base(readerFactory, writerFactory)
|
||||||
{
|
{
|
||||||
_sleevesCaluculator = sleevesCaluculator;
|
_sleevesCaluculator = sleevesCaluculator;
|
||||||
}
|
}
|
||||||
@ -15,7 +15,7 @@ internal class SleevesTool : Tool
|
|||||||
Worksheet worksheet = app.ActiveWorkbook.ActiveSheet;
|
Worksheet worksheet = app.ActiveWorkbook.ActiveSheet;
|
||||||
_reader = _readerFactory.GetReader("Excel");
|
_reader = _readerFactory.GetReader("Excel");
|
||||||
var products = _reader.ReadProducts(new[] { worksheet });
|
var products = _reader.ReadProducts(new[] { worksheet });
|
||||||
var sleeves = _sleevesCaluculator.CalculateSleeves(products.Select(p => p.Item2).First());
|
var sleeves = _sleevesCaluculator.Calculate(products.Select(p => p.Item2).First());
|
||||||
_writer = _writerFactory.GetWriter("CurrentPrice");
|
_writer = _writerFactory.GetWriter("CurrentPrice");
|
||||||
_writer.WriteProducts(sleeves);
|
_writer.WriteProducts(sleeves);
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ internal class ToolFactory
|
|||||||
{
|
{
|
||||||
static ReaderFactory readerFactory = RhSolutionsAddIn.ServiceProvider.GetService<ReaderFactory>();
|
static ReaderFactory readerFactory = RhSolutionsAddIn.ServiceProvider.GetService<ReaderFactory>();
|
||||||
static WriterFactory writerFactory = RhSolutionsAddIn.ServiceProvider.GetService<WriterFactory>();
|
static WriterFactory writerFactory = RhSolutionsAddIn.ServiceProvider.GetService<WriterFactory>();
|
||||||
static ISleevesCalculator sleevesCaluculator = RhSolutionsAddIn.ServiceProvider.GetService<ISleevesCalculator>();
|
static IFittingsCalculator sleevesCaluculator = RhSolutionsAddIn.ServiceProvider.GetService<IFittingsCalculator>();
|
||||||
|
|
||||||
public Tool GetTool(string toolName)
|
public Tool GetTool(string toolName)
|
||||||
{
|
{
|
||||||
|
@ -6,7 +6,7 @@ namespace RhSolutions.Tests;
|
|||||||
public class CanFillSleeves : IDisposable
|
public class CanFillSleeves : IDisposable
|
||||||
{
|
{
|
||||||
private RhSolutionsAddIn _addIn;
|
private RhSolutionsAddIn _addIn;
|
||||||
private ISleevesCalculator _calculator;
|
private IFittingsCalculator _calculator;
|
||||||
private IReader _reader;
|
private IReader _reader;
|
||||||
private IWriter _writer;
|
private IWriter _writer;
|
||||||
private Worksheet _worksheet;
|
private Worksheet _worksheet;
|
||||||
@ -25,7 +25,7 @@ public class CanFillSleeves : IDisposable
|
|||||||
public void CanCalculateSleeves()
|
public void CanCalculateSleeves()
|
||||||
{
|
{
|
||||||
var products = _reader.ReadProducts(new[] { _worksheet });
|
var products = _reader.ReadProducts(new[] { _worksheet });
|
||||||
var sleeves = _calculator.CalculateSleeves(products.First().Item2);
|
var sleeves = _calculator.Calculate(products.First().Item2);
|
||||||
_writer.WriteProducts(sleeves);
|
_writer.WriteProducts(sleeves);
|
||||||
|
|
||||||
Assert.Equal(25, _worksheet.Range["E2"].Value);
|
Assert.Equal(25, _worksheet.Range["E2"].Value);
|
||||||
|
Loading…
Reference in New Issue
Block a user