85 lines
3.7 KiB
C#
85 lines
3.7 KiB
C#
using OI.Metrology.Server.Models;
|
|
using OI.Metrology.Shared.Models.Stateless;
|
|
using OI.Metrology.Shared.Repositories;
|
|
using System.Data;
|
|
using System.Data.Common;
|
|
using System.Text;
|
|
|
|
#pragma warning disable CS8600, CS8602, CS8603, CS8604, CS8625
|
|
|
|
namespace OI.Metrology.Server.Repositories;
|
|
|
|
public class OpenInsightV1Repository : IOpenInsightV1Repository
|
|
{
|
|
private readonly string _MockRoot;
|
|
private readonly string _RepositoryName;
|
|
private readonly IDbConnectionFactory _DBConnectionFactory;
|
|
|
|
public OpenInsightV1Repository(AppSettings appSettings, IDbConnectionFactory dbConnectionFactory)
|
|
{
|
|
_MockRoot = appSettings.MockRoot;
|
|
_DBConnectionFactory = dbConnectionFactory;
|
|
_RepositoryName = nameof(OpenInsightV1Repository)[..^10];
|
|
}
|
|
|
|
string IOpenInsightV1Repository.GetCommandText(string rds, string? insertDate, string? recipe)
|
|
{
|
|
StringBuilder result = new();
|
|
if (string.IsNullOrEmpty(rds))
|
|
throw new ArgumentException(null, nameof(rds));
|
|
if (string.IsNullOrEmpty(insertDate))
|
|
throw new ArgumentException(null, nameof(insertDate));
|
|
if (string.IsNullOrEmpty(recipe))
|
|
throw new ArgumentException(null, nameof(recipe));
|
|
_ = result
|
|
.AppendLine(" select header.RDS, ")
|
|
.AppendLine(" child.AttachmentId, ")
|
|
.AppendLine(" child.Slot, ")
|
|
.AppendLine(" child.SumOfDefects, ")
|
|
.AppendLine(" child.Sort, ")
|
|
.AppendLine(" child.InsertDate ")
|
|
.AppendLine(" from metrology.dbo.tencorRunHeader header ")
|
|
.AppendLine(" inner join metrology.dbo.TencorRunData child ")
|
|
.AppendLine(" on header.id = child.headerId ")
|
|
.Append(" where header.rds = '").Append(rds).AppendLine("' ")
|
|
.Append(" and header.recipe like '").Append(recipe).AppendLine("%' ")
|
|
.Append(" and child.insertdate between (select(dateadd(minute, -5, '").Append(insertDate).AppendLine("'))) ")
|
|
.Append(" and (select(dateadd(minute, 5, '").Append(insertDate).AppendLine("'))) ")
|
|
.AppendLine(" order by header.insertdate desc, ")
|
|
.AppendLine(" child.slot asc ")
|
|
.AppendLine(" for json path; ");
|
|
return result.ToString();
|
|
}
|
|
|
|
private static StringBuilder GetForJsonPath(IDbConnectionFactory dbConnectionFactory, string commandText)
|
|
{
|
|
StringBuilder stringBuilder = new();
|
|
using DbConnection dbConnection = dbConnectionFactory.GetDbConnection();
|
|
DbCommand dbCommand = dbConnection.CreateCommand();
|
|
dbCommand.CommandText = commandText;
|
|
DbDataReader dbDataReader = dbCommand.ExecuteReader(CommandBehavior.SequentialAccess);
|
|
while (dbDataReader.Read())
|
|
_ = stringBuilder.Append(dbDataReader.GetString(0));
|
|
return stringBuilder;
|
|
}
|
|
|
|
string IOpenInsightV1Repository.GetTencorRun(string rds, string? insertDate, string? recipe)
|
|
{
|
|
StringBuilder result;
|
|
if (!string.IsNullOrEmpty(_MockRoot))
|
|
{
|
|
string json = File.ReadAllText(Path.Combine(string.Concat(AppContext.BaseDirectory, _MockRoot), $"{_RepositoryName}-{nameof(IOpenInsightV1Repository.GetTencorRun)}.json"));
|
|
result = new(json);
|
|
}
|
|
else
|
|
{
|
|
IOpenInsightV1Repository openInsightRepository = this;
|
|
string commandText = openInsightRepository.GetCommandText(rds, insertDate, recipe);
|
|
result = GetForJsonPath(_DBConnectionFactory, commandText);
|
|
if (result.Length == 0)
|
|
result = new("{}");
|
|
}
|
|
return result.ToString();
|
|
}
|
|
|
|
} |