924 lines
33 KiB
C#
924 lines
33 KiB
C#
using Microsoft.Data.SqlClient;
|
|
using Microsoft.Extensions.Logging;
|
|
using ReportingServices.Shared.Models.PlanningReport;
|
|
using ReportingServices.Shared.Models.ProductionReport;
|
|
using System.Data;
|
|
|
|
namespace ReportingServices.Shared.Repositories;
|
|
|
|
public class ScrapeDatabaseRepository : IScrapeDatabaseRepository
|
|
{
|
|
private SqlConnection _connection;
|
|
private readonly string _connectionString;
|
|
|
|
public ScrapeDatabaseRepository(string connectionString) => _connectionString = connectionString;
|
|
|
|
public void OpenConnection()
|
|
{
|
|
_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 SUM(PCHANGE) " +
|
|
" 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";
|
|
|
|
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[..^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(CASE WHEN REACTOR_TYPE <> 'EPP' THEN TW_PROD ELSE 0 END) 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")
|
|
{
|
|
int twProd = string.IsNullOrEmpty(reader[3].ToString()) ? 0 : int.Parse(reader[3].ToString());
|
|
int custScrap = string.IsNullOrEmpty(reader[1].ToString()) ? 0 : int.Parse(reader[1].ToString());
|
|
int manuScrap = string.IsNullOrEmpty(reader[2].ToString()) ? 0 : int.Parse(reader[2].ToString());
|
|
int totScrap = custScrap + manuScrap;
|
|
|
|
scrap.Add(new ScrapByDay
|
|
{
|
|
StartDate = reader[0].ToString(),
|
|
TW_PROD = twProd,
|
|
TOT_REJ_CUST = custScrap,
|
|
TOT_REJ_MANU = manuScrap,
|
|
TOT_REJ_WFRS = totScrap
|
|
});
|
|
}
|
|
}
|
|
|
|
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, WO, COUNT(WO) FROM RDS " +
|
|
" WHERE DATE_OUT BETWEEN @startDate AND @endDate " +
|
|
"GROUP BY REACTOR, PROD_SPEC_ID, WO " +
|
|
"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
|
|
{
|
|
REACTOR = reader[0].ToString(),
|
|
PSN = reader[1].ToString(),
|
|
WO = reader[2].ToString(),
|
|
WO_COUNT = int.Parse(reader[3].ToString())
|
|
});
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return weeklyPartChanges;
|
|
}
|
|
|
|
public List<ReactorPSNWORuns> GetReactorPartChanges(string startDate, string endDate)
|
|
{
|
|
List<ReactorPSNWORuns> weeklyPartChanges = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT REACTOR, PROD_SPEC_ID, WO, COUNT(WO) AS WO_COUNT FROM RDS " +
|
|
" WHERE DATE_OUT BETWEEN @startDate AND @endDate " +
|
|
" AND REACTOR IN (SELECT REACTOR " +
|
|
" 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 l.PCHANGE > 0) " +
|
|
"GROUP BY REACTOR, PROD_SPEC_ID, WO " +
|
|
"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
|
|
{
|
|
REACTOR = "R" + reader[0].ToString(),
|
|
PSN = reader[1].ToString(),
|
|
WO = reader[2].ToString(),
|
|
WO_COUNT = int.Parse(reader[3].ToString())
|
|
});
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return weeklyPartChanges;
|
|
}
|
|
|
|
public QuarterlyTargets GetQuarterlyTargets(string startDate)
|
|
{
|
|
Dictionary<string, float> targets = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT THRU_TARGET, THRU_QTY, THRU_PCNT FROM FISCAL_QTR_TARGETS " +
|
|
" WHERE THRU_GROUP = 'TOT' " +
|
|
" AND FISCAL_YR = " +
|
|
" (SELECT FISCAL_YR FROM FISCAL_QTR " +
|
|
" WHERE '" + startDate + "' BETWEEN START_DT AND END_DT) " +
|
|
" AND FISCAL_QTR = " +
|
|
" (SELECT FISCAL_QTR FROM FISCAL_QTR " +
|
|
" WHERE '" + startDate + "' BETWEEN START_DT AND END_DT) " +
|
|
"UNION " +
|
|
"SELECT 'PlanWorkingDays' As THRU_TARGET," +
|
|
" PLAN_WORKING_DAYS AS THRU_QTY," +
|
|
" NULL AS THRU_PCNT" +
|
|
" FROM FISCAL_QTR " +
|
|
" WHERE '" + startDate + "' BETWEEN START_DT AND END_DT";
|
|
|
|
cmd.CommandText = query;
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
if (reader[0].ToString().ToUpper() == "YIELD")
|
|
targets.Add(reader[0].ToString(), float.Parse(reader[2].ToString()));
|
|
else if (!string.IsNullOrEmpty(reader[1].ToString()))
|
|
targets.Add(reader[0].ToString(), int.Parse(reader[1].ToString()));
|
|
}
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
QuarterlyTargets quarterlyTargets = new()
|
|
{
|
|
Reactor_Outs = (int)targets["Reactor_Outs"],
|
|
Yield_Outs = (int)targets["Yield_Outs"],
|
|
IFX_Scrap = (int)targets["IFX_Scrap"],
|
|
Yield = targets["Yield"],
|
|
PlanWorkingDays = (int)targets["PlanWorkingDays"]
|
|
};
|
|
|
|
return quarterlyTargets;
|
|
}
|
|
|
|
public QuarterlyTargets GetPreviousQuarterlyTargets()
|
|
{
|
|
Dictionary<string, float> targets = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT THRU_TARGET, THRU_QTY, THRU_PCNT FROM FISCAL_QTR_TARGETS " +
|
|
" WHERE THRU_GROUP = 'TOT' " +
|
|
" AND FISCAL_YR = " +
|
|
" (SELECT CASE WHEN ls.FISCAL_QTR - 1 = 0 THEN ls.FISCAL_YR - 1 ELSE ls.FISCAL_YR END " +
|
|
" FROM(SELECT * FROM FISCAL_QTR WHERE START_DT < SYSDATETIME() AND END_DT > SYSDATETIME()) AS ls) " +
|
|
" AND FISCAL_QTR = " +
|
|
" (SELECT CASE WHEN ls.FISCAL_QTR - 1 = 0 THEN 4 ELSE ls.FISCAL_QTR - 1 END " +
|
|
" FROM(SELECT * FROM FISCAL_QTR WHERE START_DT < SYSDATETIME() AND END_DT > SYSDATETIME()) AS ls) " +
|
|
"UNION " +
|
|
"SELECT 'PlanWorkingDays' As THRU_TARGET, " +
|
|
" PLAN_WORKING_DAYS AS THRU_QTY, " +
|
|
" NULL AS THRU_PCNT " +
|
|
" FROM FISCAL_QTR " +
|
|
" WHERE SYSDATETIME() BETWEEN START_DT AND END_DT";
|
|
|
|
cmd.CommandText = query;
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
if (reader[0].ToString().ToUpper() == "YIELD")
|
|
targets.Add(reader[0].ToString(), float.Parse(reader[2].ToString()));
|
|
else if (!string.IsNullOrEmpty(reader[1].ToString()))
|
|
targets.Add(reader[0].ToString(), int.Parse(reader[1].ToString()));
|
|
}
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
QuarterlyTargets quarterlyTargets = new()
|
|
{
|
|
Reactor_Outs = (int)targets["Reactor_Outs"],
|
|
Yield_Outs = (int)targets["Yield_Outs"],
|
|
IFX_Scrap = (int)targets["IFX_Scrap"],
|
|
Yield = targets["Yield"],
|
|
PlanWorkingDays = (int)targets["PlanWorkingDays"]
|
|
};
|
|
|
|
return quarterlyTargets;
|
|
}
|
|
|
|
public List<Reactor> GetReactors()
|
|
{
|
|
List<Reactor> reactors = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT " +
|
|
" REACT_NO, REACT_TYPE, SUSC_POCKET_SIZE, CASE WHEN ACTIVE_LL_DISABLED <> '' THEN 'TRUE' ELSE 'FALSE' END AS \"LL_DISABLED\" " +
|
|
" FROM REACTOR " +
|
|
" WHERE REACT_ASSIGNMENT IS NOT NULL " +
|
|
" AND REACT_ASSIGNMENT <> 'Out of Service' " +
|
|
" AND REACT_ASSIGNMENT <> '' " +
|
|
" AND CURR_MODE_KEY = ''";
|
|
|
|
cmd.CommandText = query;
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
reactors.Add(new Reactor
|
|
{
|
|
ReactorNumber = int.Parse(reader[0].ToString()),
|
|
Type = reader[1].ToString(),
|
|
PocketSize = reader[2].ToString(),
|
|
HasDisabledLoadlock = bool.Parse(reader[3].ToString())
|
|
});
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return reactors;
|
|
}
|
|
|
|
public List<RDS> GetRDSForLastDay(string date)
|
|
{
|
|
List<RDS> rdsList = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT rds.REACTOR, rds.REACTOR_TYPE, rds.DATE_OUT, " +
|
|
"CASE WHEN lay.UL_TEMP IS NULL THEN '1000' ELSE lay.UL_TEMP END, psn.LAYER_TYPE FROM RDS " +
|
|
"INNER JOIN RDS_LAYER lay ON lay.RDS_NO = SEQ " +
|
|
"INNER JOIN PROD_SPEC psn ON rds.PROD_SPEC_ID = psn.SEQ " +
|
|
"WHERE DATE_OUT >= @date";
|
|
|
|
cmd.CommandText = query;
|
|
_ = cmd.Parameters.AddWithValue("@date", date);
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
rdsList.Add(new RDS
|
|
{
|
|
Reactor = int.Parse(reader[0].ToString()),
|
|
ReactorType = reader[1].ToString(),
|
|
DateOut = DateTime.Parse(reader[2].ToString()),
|
|
UnloadTemp = int.Parse(reader[3].ToString()),
|
|
LayerType = reader[4].ToString()
|
|
});
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return rdsList;
|
|
}
|
|
|
|
public List<ReactorOutsByRDS> GetRDSRunBetweenDates(string startDate, string endDate)
|
|
{
|
|
List<ReactorOutsByRDS> outs = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT SEQ, WFRS_OUT, DATE_OUT " +
|
|
" FROM RDS " +
|
|
" WHERE DATE_OUT >= @startDate " +
|
|
" AND DATE_OUT < @endDate " +
|
|
"ORDER BY DATE_OUT ASC";
|
|
|
|
cmd.CommandText = query;
|
|
_ = cmd.Parameters.AddWithValue("@startDate", startDate);
|
|
_ = cmd.Parameters.AddWithValue("@endDate", endDate);
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
outs.Add(new ReactorOutsByRDS
|
|
{
|
|
RDS_NO = reader[0].ToString(),
|
|
Units = reader[1].ToString(),
|
|
EndProcessTime = reader[2].ToString()
|
|
});
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return outs;
|
|
}
|
|
|
|
public List<ReactorEvent> GetReactorEvents(string startDate, string endDate, string reactorNumber)
|
|
{
|
|
List<ReactorEvent> events = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT " +
|
|
" REACT_NO, " +
|
|
" START_DTM, " +
|
|
" START_NOTE AS REASON, " +
|
|
" MODE, " +
|
|
" (SELECT TOP 1 NOTES " +
|
|
" FROM REACTOR_LOG_NOTES rnote " +
|
|
" WHERE rmode.START_RL_ID = rnote.SEQ " +
|
|
" ORDER BY MV_NO DESC) AS COMMENT, " +
|
|
" (SELECT TOP 1 CONCAT(PROB_CAT_ID, ' - ', PROB_CAT_DESC) " +
|
|
" FROM REACT_MODE_SERV_INFO srv " +
|
|
" WHERE rmode.REACT_NO = srv.REACT_NO " +
|
|
" AND rmode.START_DTM = srv.START_DTM " +
|
|
" ORDER BY MV_NO DESC) AS CATEGORY " +
|
|
" FROM REACT_MODE rmode " +
|
|
" WHERE START_DTM > @startDate " +
|
|
" AND START_DTM < @endDate" +
|
|
" AND REACT_NO = @reactorNumber " +
|
|
"UNION ALL " +
|
|
"SELECT * " +
|
|
" FROM " +
|
|
" (SELECT TOP 1 " +
|
|
" REACT_NO, " +
|
|
" START_DTM, START_NOTE AS REASON, " +
|
|
" MODE, " +
|
|
" (SELECT TOP 1 NOTES " +
|
|
" FROM REACTOR_LOG_NOTES rnote " +
|
|
" WHERE rmode.START_RL_ID = rnote.SEQ " +
|
|
" ORDER BY MV_NO DESC) AS COMMENT, " +
|
|
" (SELECT TOP 1 CONCAT(PROB_CAT_ID, ' - ', PROB_CAT_DESC) " +
|
|
" FROM REACT_MODE_SERV_INFO srv " +
|
|
" WHERE rmode.REACT_NO = srv.REACT_NO " +
|
|
" AND rmode.START_DTM = srv.START_DTM " +
|
|
" ORDER BY MV_NO DESC) AS CATEGORY " +
|
|
" FROM REACT_MODE rmode " +
|
|
" WHERE START_DTM < @startDate" +
|
|
" AND REACT_NO = @reactorNumber " +
|
|
" ORDER BY START_DTM DESC) AS tbl1 " +
|
|
"ORDER BY START_DTM ASC";
|
|
|
|
cmd.CommandText = query;
|
|
_ = cmd.Parameters.AddWithValue("@startDate", startDate);
|
|
_ = cmd.Parameters.AddWithValue("@endDate", endDate);
|
|
_ = cmd.Parameters.AddWithValue("@reactorNumber", reactorNumber);
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
events.Add(new ReactorEvent
|
|
{
|
|
REACT_NO = reader[0].ToString(),
|
|
EVENT_DTM = reader[1].ToString(),
|
|
REASON = reader[2].ToString(),
|
|
REACT_MODE = reader[3].ToString(),
|
|
COMMENT = reader[4].ToString(),
|
|
CAT_PROB_DESC = reader[5].ToString()
|
|
});
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return events;
|
|
}
|
|
|
|
public ToolEvent GetLatestToolEvent(string toolID)
|
|
{
|
|
ToolEvent evnt = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT TOP 1 " +
|
|
" TOOL_ID, " +
|
|
" START_DTM, " +
|
|
" TOOL_MODE, " +
|
|
" TOOL_MODE_DESC " +
|
|
" FROM TOOL_LOG " +
|
|
" WHERE TOOL_ID = @toolID " +
|
|
"ORDER BY START_DTM DESC";
|
|
|
|
cmd.CommandText = query;
|
|
_ = cmd.Parameters.AddWithValue("@toolID", toolID);
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
evnt = new ToolEvent
|
|
{
|
|
TOOL_ID = reader[0].ToString(),
|
|
START_DTM = reader[1].ToString(),
|
|
TOOL_MODE = reader[2].ToString(),
|
|
TOOL_MODE_DESC = reader[3].ToString()
|
|
};
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return evnt;
|
|
}
|
|
|
|
public int GetLastUpTransaction(string reactorNumber)
|
|
{
|
|
int lastTransaction = 0;
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT TOP 1 DATEDIFF(MINUTE,STOP_DTM,SYSDATETIME()) " +
|
|
" FROM REACT_MODE " +
|
|
" WHERE REACT_NO = @reactorNumber " +
|
|
" AND (MODE = 'UP' OR MODE LIKE '%UP_WITH_INCREASED_SAMPLING%') " +
|
|
"ORDER BY START_DTM DESC";
|
|
|
|
cmd.CommandText = query;
|
|
_ = cmd.Parameters.AddWithValue("@reactorNumber", reactorNumber);
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
lastTransaction = int.Parse(reader[0].ToString());
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return lastTransaction;
|
|
}
|
|
|
|
public OutsAndScrapTotal GetOutsAndScrapTotals(string startDate, string endDate)
|
|
{
|
|
OutsAndScrapTotal totals = new()
|
|
{
|
|
Outs = 0,
|
|
CustomerScrap = 0,
|
|
ManufacturingScrap = 0,
|
|
ProductionScrap = 0
|
|
};
|
|
|
|
if (startDate == endDate)
|
|
return totals;
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
//string query = "SELECT SUM(WFRS_OUT) AS OUTS, " +
|
|
// " SUM(CUST_TOT_REJ) AS CUST, " +
|
|
// " SUM(LSL_TOT_REJ) AS MANU, " +
|
|
// " SUM(CASE WHEN REACTOR_TYPE <> 'EPP' THEN TW_PROD ELSE 0 END) AS PROD " +
|
|
// " FROM RDS " +
|
|
// " WHERE DATE_OUT >= @startDate " +
|
|
// " AND DATE_OUT < @endDate";
|
|
string query = "SELECT " +
|
|
"CASE " +
|
|
"WHEN SUM(WFRS_OUT) IS NULL THEN 0 " +
|
|
"WHEN SUM(WFRS_OUT) IS NOT NULL THEN SUM(WFRS_OUT) END " +
|
|
"AS OUTS, " +
|
|
"CASE " +
|
|
"WHEN SUM(CUST_TOT_REJ) IS NULL THEN 0 " +
|
|
"WHEN SUM(CUST_TOT_REJ) IS NOT NULL THEN SUM(CUST_TOT_REJ) END " +
|
|
"AS CUST, " +
|
|
"CASE " +
|
|
"WHEN SUM(LSL_TOT_REJ) IS NULL THEN 0 " +
|
|
"WHEN SUM(LSL_TOT_REJ) IS NOT NULL THEN SUM(LSL_TOT_REJ) END " +
|
|
"AS MANU, " +
|
|
"CASE WHEN( " +
|
|
"CASE " +
|
|
"WHEN SUM(CASE WHEN REACTOR_TYPE <> 'EPP' " +
|
|
"THEN TW_PROD ELSE 0 END) IS NULL THEN 0 " +
|
|
"WHEN " +
|
|
"SUM(CASE WHEN REACTOR_TYPE <> 'EPP' " +
|
|
"THEN TW_PROD ELSE 0 END) > 0 THEN SUM(CASE WHEN REACTOR_TYPE<> 'EPP' " +
|
|
"THEN TW_PROD ELSE 0 END) END " +
|
|
") IS NULL THEN 0 ELSE " +
|
|
"(" +
|
|
"CASE " +
|
|
"WHEN SUM(CASE WHEN REACTOR_TYPE<> 'EPP' " +
|
|
"THEN TW_PROD ELSE 0 END) IS NULL THEN 0 " +
|
|
"WHEN " +
|
|
"SUM(CASE WHEN REACTOR_TYPE <> 'EPP' " +
|
|
"THEN TW_PROD ELSE 0 END) > 0 THEN SUM(CASE WHEN REACTOR_TYPE<> 'EPP' " +
|
|
"THEN TW_PROD ELSE 0 END) END" +
|
|
")" +
|
|
"END " +
|
|
"AS PROD " +
|
|
"FROM RDS " +
|
|
"WHERE DATE_OUT >= @startDate " +
|
|
"AND DATE_OUT< @endDate";
|
|
|
|
cmd.CommandText = query;
|
|
_ = cmd.Parameters.AddWithValue("@startDate", startDate);
|
|
_ = cmd.Parameters.AddWithValue("@endDate", endDate);
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
totals = new()
|
|
{
|
|
Outs = int.Parse(reader[0].ToString()),
|
|
CustomerScrap = int.Parse(reader[1].ToString()),
|
|
ManufacturingScrap = int.Parse(reader[2].ToString()),
|
|
ProductionScrap = int.Parse(reader[3].ToString()),
|
|
};
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return totals;
|
|
}
|
|
|
|
public DateTime GetQuarterStartDate()
|
|
{
|
|
DateTime date = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT START_DT " +
|
|
" FROM FISCAL_QTR " +
|
|
" WHERE START_DT <= SYSDATETIME() " +
|
|
" AND END_DT >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))";
|
|
|
|
cmd.CommandText = query;
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
date = DateTime.Parse(reader[0].ToString());
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return date;
|
|
}
|
|
|
|
public DateTime GetPreviousQuarterStartDate()
|
|
{
|
|
DateTime date = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT START_DT FROM FISCAL_QTR " +
|
|
" WHERE FISCAL_QTR = " +
|
|
" (SELECT CASE WHEN ls.FISCAL_QTR - 1 = 0 THEN 4 ELSE ls.FISCAL_QTR - 1 END " +
|
|
" FROM (SELECT * FROM FISCAL_QTR WHERE START_DT <= SYSDATETIME() AND END_DT >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))) AS ls) " +
|
|
" AND FISCAL_YR = " +
|
|
" (SELECT CASE WHEN ls.FISCAL_QTR - 1 = 0 THEN ls.FISCAL_YR - 1 ELSE ls.FISCAL_YR END " +
|
|
" FROM (SELECT * FROM FISCAL_QTR WHERE START_DT <= SYSDATETIME() AND END_DT >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))) AS ls)";
|
|
|
|
cmd.CommandText = query;
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
date = DateTime.Parse(reader[0].ToString());
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return date;
|
|
}
|
|
|
|
public List<HoldLot> GetCurrentHoldLots()
|
|
{
|
|
List<HoldLot> lots = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT WO_NO, " +
|
|
" HOLD_START_DTM, " +
|
|
" HOLD_START_USER, " +
|
|
" HOLD_START_REASON, " +
|
|
" SEQ, " +
|
|
" REACTOR " +
|
|
" FROM WO_MAT_HOLD_HISTORY, RDS " +
|
|
" WHERE HOLD_STOP_DTM = '1/1/1900' " +
|
|
" AND HOLD_START_DTM > '1/1/2022' " +
|
|
" AND HOLD_ENTITY_ID = SEQ " +
|
|
" AND HOLD_ENTITY = 'RDS' " +
|
|
"ORDER BY HOLD_START_DTM ASC";
|
|
|
|
cmd.CommandText = query;
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
lots.Add(new HoldLot
|
|
{
|
|
WO_NO = reader[0].ToString(),
|
|
HOLD_DATE = DateTime.Parse(reader[1].ToString()),
|
|
HOLD_USER = reader[2].ToString(),
|
|
HOLD_REASON = reader[3].ToString(),
|
|
RDS_NO = reader[4].ToString(),
|
|
REACTOR = reader[5].ToString(),
|
|
|
|
});
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return lots;
|
|
}
|
|
|
|
public List<string> GetCurrentHotWORunning()
|
|
{
|
|
List<string> lots = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT DISTINCT(REACT_NO) " +
|
|
" FROM SCHED_DET_NG schd " +
|
|
"INNER JOIN WO_LOG wlog ON WO = WO_NO " +
|
|
" WHERE STOP_DTM > SYSDATETIME() " +
|
|
" AND START_DTM < SYSDATETIME() " +
|
|
" AND HOT_FLAG = 1 " +
|
|
"ORDER BY REACT_NO";
|
|
|
|
cmd.CommandText = query;
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
lots.Add("R" + reader[0].ToString());
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return lots;
|
|
}
|
|
|
|
public List<ScheduledEvent> GetScheduledEvents(string startDate, string endDate)
|
|
{
|
|
List<ScheduledEvent> events = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT REACT_NO, " +
|
|
" schd.WO_NO, " +
|
|
" PROC_SPEC_ID, " +
|
|
" START_DTM, " +
|
|
" STOP_DTM, " +
|
|
" BLOCKOUT, " +
|
|
" BLOCK_OUT_TYPE " +
|
|
" FROM SCHED_DET_NG schd " +
|
|
"FULL OUTER JOIN WO_STEP step " +
|
|
" ON step.WO_NO = schd.WO_NO " +
|
|
" WHERE ((STOP_DTM > @startDate AND STOP_DTM < @endDate) " +
|
|
" OR (START_DTM > @startDate AND START_DTM < @endDate)) " +
|
|
"ORDER BY REACT_NO, START_DTM ASC";
|
|
|
|
cmd.CommandText = query;
|
|
_ = cmd.Parameters.AddWithValue("@startDate", startDate);
|
|
_ = cmd.Parameters.AddWithValue("@endDate", endDate);
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
events.Add(new ScheduledEvent
|
|
{
|
|
REACT_NO = reader[0].ToString(),
|
|
WO_NO = reader[1].ToString(),
|
|
PROD_SPEC_ID = reader[2].ToString(),
|
|
START_DTM = DateTime.Parse(reader[3].ToString()),
|
|
STOP_DTM = DateTime.Parse(reader[4].ToString()),
|
|
BLOCKOUT = reader[5].ToString(),
|
|
BLOCKOUT_TYPE = reader[6].ToString()
|
|
});
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return events;
|
|
}
|
|
|
|
public List<ReactorPSNWORuns> GetProjectedPartChanges(string startDate, string endDate)
|
|
{
|
|
List<ReactorPSNWORuns> events = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT REACT_NO, " +
|
|
" PROC_SPEC_ID, " +
|
|
" schd.WO_NO " +
|
|
" FROM SCHED_DET_NG schd " +
|
|
"FULL OUTER JOIN WO_STEP step " +
|
|
" ON step.WO_NO = schd.WO_NO " +
|
|
" WHERE ((STOP_DTM > @startDate AND STOP_DTM < @endDate) " +
|
|
" OR (START_DTM > @startDate AND START_DTM < @endDate)) " +
|
|
" AND BLOCKOUT IS NULL " +
|
|
" AND REACT_NO IN (SELECT REACT_NO " +
|
|
" FROM (SELECT REACT_NO, " +
|
|
" COUNT(PROC_SPEC_ID) - 1 AS PCHANGE " +
|
|
" FROM (SELECT REACT_NO, " +
|
|
" PROC_SPEC_ID, " +
|
|
" COUNT(schd.WO_NO) AS WO_COUNT " +
|
|
" FROM SCHED_DET_NG schd " +
|
|
" FULL OUTER JOIN WO_STEP step " +
|
|
" ON step.WO_NO = schd.WO_NO " +
|
|
" WHERE ((STOP_DTM > @startDate AND STOP_DTM < @endDate) " +
|
|
" OR (START_DTM > @startDate AND START_DTM < @endDate)) " +
|
|
" AND BLOCKOUT IS NULL GROUP BY REACT_NO, PROC_SPEC_ID) AS l " +
|
|
" GROUP BY REACT_NO) AS p " +
|
|
" WHERE PCHANGE > 0) " +
|
|
"ORDER BY REACT_NO";
|
|
|
|
cmd.CommandText = query;
|
|
_ = cmd.Parameters.AddWithValue("@startDate", startDate);
|
|
_ = cmd.Parameters.AddWithValue("@endDate", endDate);
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
events.Add(new ReactorPSNWORuns
|
|
{
|
|
REACTOR = "R" + reader[0].ToString(),
|
|
PSN = reader[1].ToString(),
|
|
WO = reader[2].ToString(),
|
|
WO_COUNT = 0
|
|
});
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return events;
|
|
}
|
|
|
|
public List<NCR> GetCurrentNCRs()
|
|
{
|
|
List<NCR> ncrs = new();
|
|
|
|
OpenConnection();
|
|
|
|
SqlCommand cmd = _connection.CreateCommand();
|
|
|
|
string query = "SELECT l.ENTRY_DATE, " +
|
|
" l.SHIFT, " +
|
|
" l.REACTOR, " +
|
|
" r.RDS_ID AS RDS_NO, " +
|
|
" l.TOT_REJ, " +
|
|
" n.LOSS_COMMENTS " +
|
|
" FROM [NCR List] l, NCR n, NCR_RDS r " +
|
|
" WHERE l.STATUS = 'Open' " +
|
|
" AND n.SEQ = l.SEQ " +
|
|
" AND n.SEQ = r.SEQ";
|
|
|
|
cmd.CommandText = query;
|
|
|
|
using (SqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
ncrs.Add(new NCR
|
|
{
|
|
ENTRY_DATE = DateTime.Parse(reader[0].ToString()),
|
|
SHIFT = reader[1].ToString(),
|
|
REACTOR = reader[2].ToString(),
|
|
RDS_NO = reader[3].ToString(),
|
|
TOT_REJ = string.IsNullOrEmpty(reader[4].ToString()) ? 0 : int.Parse(reader[4].ToString()),
|
|
LOSS_COMMENTS = reader[5].ToString()
|
|
});
|
|
}
|
|
|
|
cmd.Dispose();
|
|
|
|
CloseConnection();
|
|
|
|
return ncrs;
|
|
}
|
|
} |