using LaaProductionSQL; using System; using System.Configuration; using System.Linq; using System.Net; using System.Web.Http; namespace Xylem.Common.Service.MeterProcessState.Controllers { [RoutePrefix("api/TestBench")] public class TestBenchController : ApiController { public static Lazy ConnectionString = new Lazy(() => ConfigurationManager.ConnectionStrings["default"].ConnectionString); /// /// SetMeterLogPathInfo /// /// PcbID from Meter /// /// [Route("SetMeterLogPathInfo"), HttpGet] public IHttpActionResult SetMeterLogPathInfo(Int32 SerialNumber, Int32? TestRunId = null, Int32? CalibrationRunId = null, String BasePath = "", String MainLogName = "", String LEDName = "") { var rowsAffected = SQLConnection .CreateSQLConnection(ConnectionString.Value) .CreateCommand($@" INSERT INTO [CordonelLogFiles] ( [SerialNumber] , [TestRunId] , [CalibrationRunId] , [BasePath] , [MainLog] , [LED]) VALUES (@{nameof(SerialNumber)} , @{nameof(TestRunId)} , @{nameof(CalibrationRunId)} , @{nameof(BasePath)} , @{nameof(MainLogName)} , @{nameof(LEDName)})") .SetParameter(nameof(SerialNumber), SerialNumber) .SetParameter(nameof(TestRunId), TestRunId) .SetParameter(nameof(CalibrationRunId), CalibrationRunId) .SetParameter(nameof(BasePath), BasePath) .SetParameter(nameof(MainLogName), MainLogName) .SetParameter(nameof(LEDName), LEDName) .ExecuteNonQuery(); if (rowsAffected == 1) { return this.Ok(); } return this.BadRequest("Invalid data."); } /// /// Get SerialNumber from PcbID /// /// PcbID from Meter /// [Route("GetMeterInfoForTestBench"), HttpGet] public IHttpActionResult GetMeterInfoForTestBench(String PcbID) { var results = SQLConnection .CreateSQLConnection(ConnectionString.Value) .CreateCommand($@" SELECT DISTINCT [MapPcbIdToSerialNumber_SerialNumber] AS [SerialNr] , [MapOrder].[CordonelAssignedPicking_FertigungsAuftragsNr] AS [FertigungsNr] , [Meter].[Adresse] AS [RadioAddress] , [KundeneigeneSerienNr] AS [CustomerSerialNr] , (SELECT TOP 1 [ID] FROM [CordonelMeterCalibrationResults] WHERE [PcbId] = @{nameof(PcbID)} ORDER BY [Date] DESC) AS [CalibrationRunID] , (SELECT TOP 1 [StatusFertigung] FROM [AuftragPositionSerienNr] WHERE [SerienNr] = [MapPcbIdToSerialNumber_SerialNumber] ORDER BY [AnlageDatum] DESC) AS [LastProcessState] , [Nennweite] AS [Dn] , (SELECT TOP 1 [Dn_InternalId] FROM [CordonelMeterSizes] WHERE [Dn_VakoID] = SUBSTRING([Identnr].[VakoCode], 4, 2)) AS [NewNennweiteID] , [lut].[FileCrc] AS [LutCrc] FROM [Cordonel_AssignedPicking] AS [MapOrder] LEFT OUTER JOIN [MapPcbIdToSerialNumber] AS [map] ON [MapOrder].[CordonelAssignedPicking_PcbId] = [map].[MapPcbIdToSerialNumber_PcbId] AND [map].[MapPcbIdToSerialNumber_Deleted] = 0 LEFT OUTER JOIN [AuftragPositionSerienNr] AS [mapSrn] ON [map].[MapPcbIdToSerialNumber_SerialNumber] = [mapSrn].[SerienNr] AND [mapSrn].[Pruefgangnr] = 0 LEFT OUTER JOIN [AuftragPosition_gesamt] AS [auftraginfo] ON [auftraginfo].[AuftragNr] = [mapSrn].[AuftragNr] AND [auftraginfo].[PositionNr] = [mapSrn].[PositionNr] LEFT OUTER JOIN [Genesis_Meter] AS [Meter] ON [Meter].[Seriennummer] = [map].[MapPcbIdToSerialNumber_SerialNumber] LEFT OUTER JOIN [Identnr] ON [auftraginfo].[Identnr] = [Identnr].[IdentNr] LEFT OUTER JOIN [Cordonel_Lut] AS [lut] ON [lut].[MeterSize] = (SELECT TOP 1 [Dn_InternalId] FROM [CordonelMeterSizes] WHERE [Dn_VakoID] = SUBSTRING([Identnr].[VakoCode], 4, 2)) AND [lut].[CurrentVersionForProd] = 1 WHERE [MapOrder].[CordonelAssignedPicking_IsDeleted] = 0 AND [MapOrder].[CordonelAssignedPicking_PcbId] = @{nameof(PcbID)} ") .SetParameter(nameof(PcbID), PcbID) .ExecuteReader(x => new string[] { $"{x.GetInt()}", // SerialNr, $"{x.GetInt()}", // FertigungsNr, $"{x.GetLong()}", // RadioAddress, $"{x.GetString()}", // CustomerSerialNr, $"{x.GetInt()}", // CalibrationRunID, $"{x.GetValue()}", // LastProcessState, $"{x.GetInt()}", // Dn, $"{x.GetInt()}", // NewNennweiteID, $"{x.GetInt()}", // LutCrc }); if (results.Count() == 1) { return this.Ok(results.FirstOrDefault()); } return this.Content(HttpStatusCode.BadRequest, new string[] { string.Empty, string.Empty, string.Empty }); } [HttpGet] [Route("GetOffsetCalibration/{pcbId}")] public IHttpActionResult GetOffsetCalibration(int pcbId) { var offset = SQLConnection .CreateSQLConnection(ConnectionString.Value) .CreateCommand($@" SELECT [PcbId] , [TestRunNr] , [Offset] FROM [Cordonel_Calibrations] WHERE [PcbId] = @{nameof(pcbId)}") .SetParameter(nameof(pcbId), pcbId) .FirstOrDefault(x => new CordonelCalibration { PcbId = x.GetInt(), TestRunNr = x.GetInt(), Offset = x.GetValue() }); return this.Json(offset); } [HttpPost] public IHttpActionResult AddOffsetCalibration([FromBody] CordonelCalibration model) { var rowsAffected = SQLConnection .CreateSQLConnection(ConnectionString.Value) .CreateCommand($@" INSERT INTO [Cordonel_Calibrations] ( [PcbId] , [TestRunNr] , [Offset]) VALUES (@{nameof(CordonelCalibration.PcbId)} , @{nameof(CordonelCalibration.TestRunNr)} , @{nameof(CordonelCalibration.Offset)})") .SetParameter(nameof(CordonelCalibration.PcbId), model.PcbId) .SetParameter(nameof(CordonelCalibration.TestRunNr), model.TestRunNr) .SetParameter(nameof(CordonelCalibration.Offset), model.Offset) .ExecuteNonQuery(); if (rowsAffected == 1) { return this.Ok(); } return this.BadRequest("Invalid data."); } [HttpPost] public IHttpActionResult SetOffsetCalibration([FromBody] CordonelCalibration model) { var rowsAffected = SQLConnection .CreateSQLConnection(ConnectionString.Value) .CreateCommand($@" UPDATE [Cordonel_Calibrations] SET [TestRunNr] = @{nameof(CordonelCalibration.TestRunNr)} , [Offset] = @{nameof(CordonelCalibration.Offset)} WHERE [PcbId] = @{nameof(CordonelCalibration.PcbId)}") .SetParameter(nameof(CordonelCalibration.TestRunNr), model.TestRunNr) .SetParameter(nameof(CordonelCalibration.Offset), model.Offset) .SetParameter(nameof(CordonelCalibration.PcbId), model.PcbId) .ExecuteNonQuery(); if (rowsAffected == 1) { return this.Ok(); } return this.BadRequest("Invalid data."); } public class CordonelCalibration { public int PcbId { get; set; } public int TestRunNr { get; set; } public double Offset { get; set; } } } }