165 lines
5.4 KiB
C#

using Microsoft.Data.SqlClient;
using ReportingServices.Models.PlanningReport;
using ReportingServices.ReportingObjects;
using System.Data;
namespace ReportingServices.Dependency_Injections
{
public class ScrapeDatabaseRepository : IScrapeDatabaseRepository
{
private SqlConnection _connection;
private string _connectionString = "Server=Messv01ec.ec.local\\PROD1,53959;Database=LSL2SQL;User Id=srpadmin;Password=0okm9ijn;TrustServerCertificate=true";
public void OpenConnection()
{
if (_connection == null)
_connection = new SqlConnection(_connectionString);
if (_connection.State != ConnectionState.Open)
_connection.Open();
}
public void CloseConnection()
{
if (_connection.State != ConnectionState.Closed)
_connection.Close();
}
public int GetNumberOfPartChanges(string startDate, string endDate)
{
int result = 0;
OpenConnection();
SqlCommand cmd = _connection.CreateCommand();
string query = "SELECT COUNT(*) FROM " +
"(SELECT REACTOR, COUNT(PROD_SPEC_ID) - 1 AS PCHANGE FROM " +
"(SELECT REACTOR, PROD_SPEC_ID, COUNT(WO) AS PSN_COUNT FROM RDS WHERE DATE_OUT BETWEEN @startDate AND @endDate GROUP BY REACTOR, PROD_SPEC_ID) AS t " +
"GROUP BY REACTOR) AS l WHERE PCHANGE > 0";
cmd.CommandText = query;
cmd.Parameters.AddWithValue("@startDate", startDate);
cmd.Parameters.AddWithValue("@endDate", endDate);
using (SqlDataReader reader = cmd.ExecuteReader())
{
reader.Read();
result = int.Parse(reader[0].ToString());
}
cmd.Dispose();
CloseConnection();
return result;
}
public List<ScrapByDay> GetScrapByDay(List<ReactorOutsByRDS> outs)
{
List<ScrapByDay> scrap = new();
string rdsNumbers = "";
foreach (ReactorOutsByRDS rout in outs)
rdsNumbers = rdsNumbers + "'" + rout.RDS_NO + "', ";
rdsNumbers = rdsNumbers.Substring(0, rdsNumbers.Length - 2);
OpenConnection();
SqlCommand cmd = _connection.CreateCommand();
string query = "SELECT " +
" DATE_OUT," +
" SUM(CUST_TOT_REJ) AS TOT_REJ_CUST," +
" SUM(LSL_TOT_REJ) AS TOT_REJ_MANU," +
" SUM(TW_PROD) AS TW_PROD " +
"FROM RDS " +
"WHERE SEQ IN (" + rdsNumbers + ") " +
"GROUP BY DATE_OUT " +
"ORDER BY 1 DESC";
cmd.CommandText = query;
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read() && reader[0].ToString() != "1/1/1900 12:00:00 AM")
scrap.Add(new ScrapByDay(reader[0].ToString(), reader[3].ToString(), reader[1].ToString(), reader[2].ToString()));
}
cmd.Dispose();
CloseConnection();
return scrap;
}
public List<ReactorPSNWORuns> GetReactorPSNWORuns(string startDate, string endDate)
{
List<ReactorPSNWORuns> weeklyPartChanges = new();
OpenConnection();
SqlCommand cmd = _connection.CreateCommand();
string query = "SELECT REACTOR, PROD_SPEC_ID, COUNT(WO) FROM RDS " +
"WHERE DATE_OUT BETWEEN @startDate AND @endDate " +
"GROUP BY REACTOR, PROD_SPEC_ID " +
"ORDER BY 1";
cmd.CommandText = query;
cmd.Parameters.AddWithValue("@startDate", startDate);
cmd.Parameters.AddWithValue("@endDate", endDate);
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
weeklyPartChanges.Add(new ReactorPSNWORuns(reader[0].ToString(), reader[1].ToString(), int.Parse(reader[2].ToString())));
}
cmd.Dispose();
CloseConnection();
return weeklyPartChanges;
}
public int[] GetNumberOfSingleLoadLocks()
{
int[] singleLoadLocks = new int[2];
OpenConnection();
SqlCommand cmd = _connection.CreateCommand();
string query = "SELECT REACT_TYPE, COUNT(ACTIVE_LL_DISABLED) AS SLL" +
" FROM REACTOR " +
" WHERE REACT_ASSIGNMENT IS NOT NULL " +
" AND REACT_ASSIGNMENT <> 'Out of Service' " +
" AND REACT_ASSIGNMENT<> '' " +
" AND REACT_TYPE IN('ASM', 'HTR') " +
"GROUP BY REACT_TYPE";
cmd.CommandText = query;
using (SqlDataReader reader = cmd.ExecuteReader())
{
reader.Read();
singleLoadLocks[0] = int.Parse(reader[1].ToString());
reader.Read();
singleLoadLocks[1] = int.Parse(reader[1].ToString());
}
cmd.Dispose();
CloseConnection();
return singleLoadLocks;
}
}
}