laatzen/Common/Service/MeterProcessState/Controllers/TestBenchController.cs
2024-05-07 10:06:11 +02:00

263 lines
13 KiB
C#

namespace Xylem.Common.Service.MeterProcessState.Controllers
{
using LaaProductionSQL;
using System;
using System.Configuration;
using System.Linq;
using System.Net;
using System.Web.Http;
[RoutePrefix("api/TestBench")]
public class TestBenchController : ApiController
{
public static readonly Lazy<String> ConnectionString = new Lazy<String>(()
=> ConfigurationManager.ConnectionStrings["default"].ConnectionString);
/// <summary>
/// SetMeterLogPathInfo
/// </summary>
/// <param name="SerialNumber">PcbID from Meter</param>
///
/// <returns></returns>
[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.");
}
/// <summary>
/// Get SerialNumber from PcbID
/// </summary>
/// <param name="PcbID">PcbID from Meter</param>
/// <returns></returns>
[Route("GetMeterInfoForTestBench"), HttpGet]
public IHttpActionResult GetMeterInfoForTestBench(String PcbID)
{
var str = $@"
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)} ";
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]
, fw.Version as FWVersion
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
left outer join Cordonel_CurrentFw AS fw
ON [fw].Metersize = (SELECT TOP 1 [Dn_InternalId]
FROM [CordonelMeterSizes]
WHERE [Dn_VakoID] = SUBSTRING([Identnr].[VakoCode], 4, 2))
AND [fw].CurrentForProd = 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.GetValue<int?>()}", // CustomerSerialNr,
$"{x.GetString()}", // CalibrationRunID,
$"{x.GetValue<byte>()}", // LastProcessState,
$"{x.GetInt()}", // Dn,
$"{x.GetInt()}", // NewNennweiteID,
$"{x.GetValue<int?>()}", // LutCrc
$"{x.GetValue<int?>()}", // Fwversion
});
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<double>()
});
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; }
}
}
}