using AnalyticsDAL.DTO.OEE; using AnalyticsDAL.Query; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using static GB5Shared.GB5Constant.Constant; namespace AnalyticsDAL.CustomCode.OEE { public class OEEEngineDAL : IOEEEngineDAL { private readonly IQueryExecutor _qe; public OEEEngineDAL(IQueryExecutor qe) => _qe = qe; public IAsyncEnumerable StreamOEEInputData(DateTime fromDate, DateTime toDate, LoginDTO login, CancellationToken ct) { var sql = login.DatabaseType switch { DBType.SQL => OEEEngineQB.GET_OEE_INPUT_DATA_SQL, DBType.PostGre => OEEEngineQB.GET_OEE_INPUT_DATA_PG, _ => throw new NotSupportedException("Unsupported database type") }; return _qe.StreamAsync(login, sql, new { FromDate = fromDate, ToDate = toDate, TenantId = login.ClientId }); } public async Task UpsertOEEFact(OEEFactDTO fact, LoginDTO login, CancellationToken ct) { var sql = login.DatabaseType switch { DBType.SQL => OEEEngineQB.UPSERT_OEE_FACT_SQL, DBType.PostGre => OEEEngineQB.UPSERT_OEE_FACT_PG, _ => throw new NotSupportedException("Unsupported database type") }; await _qe.ExecuteAsync(login, sql, fact, cancellationToken: ct).ConfigureAwait(false); } public async Task> GetOEEReport(DateTime fromDate, DateTime toDate, int workCenterId, LoginDTO login, CancellationToken ct) { var sql = login.DatabaseType switch { DBType.SQL => OEEEngineQB.GET_OEE_REPORT_SQL, DBType.PostGre => OEEEngineQB.GET_OEE_REPORT_PG, _ => throw new NotSupportedException("Unsupported database type") }; return await _qe.QueryAsync(login, sql, new { TenantId = login.ClientId, FromDate = fromDate, ToDate = toDate, WorkCenterId = workCenterId }, cancellationToken: ct).ConfigureAwait(false); } public async Task> GetOEELiveStatus(LoginDTO login, CancellationToken ct) { var sql = login.DatabaseType switch { DBType.SQL => OEEEngineQB.GET_OEE_LIVE_SQL, DBType.PostGre => OEEEngineQB.GET_OEE_LIVE_PG, _ => throw new NotSupportedException("Unsupported database type") }; return await _qe.QueryAsync(login, sql, new { TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); } } }