2025-03-17 15:03:24 +00:00
using Newtonsoft.Json ;
2021-10-01 09:09:20 +00:00
using Newtonsoft.Json.Linq ;
using System ;
using System.Collections.Generic ;
using System.Data ;
using System.Data.SqlClient ;
using System.Linq ;
using System.Net ;
using System.Net.Http ;
using System.Text ;
using System.Threading.Tasks ;
using System.Web ;
using System.Web.Http ;
using System.Web.Http.Results ;
namespace Xylem.Common.Service.MeterProcessState.Controllers
{
[RoutePrefix("api/RadioCheck")]
public class RadioCheckController : ApiController
{
SqlConnection connection ;
public static class GlobalConfig
{
2022-10-19 10:58:08 +00:00
public static Lazy < String > connectionString = new Lazy < String > ( ( )
2021-10-01 09:09:20 +00:00
= >
System . Configuration . ConfigurationManager . ConnectionStrings [ "default" ] . ConnectionString
) ;
}
/// <summary>
/// Contructor that initiates SQL Connection
/// </summary>
public RadioCheckController ( )
{
connection = new SqlConnection ( "Data Source=slasql01; Initial Catalog = Auftrag; User ID = sa; Password=sqlserver" ) ;
connection . Open ( ) ;
}
/// <summary>
/// Function that gets all key-value pairs from Table Vako_Merkmale for this vakocode
/// </summary>
/// <param name="VakoCode"></param>
/// <returns>Dictinary with key-value pairs</returns>
2022-10-19 10:58:08 +00:00
private Dictionary < String , String > GetVakoMerkmale ( String VakoCode )
2021-10-01 09:09:20 +00:00
{
2022-10-19 10:58:08 +00:00
String sql = string . Format ( "SELECT distinct * FROM Vako_Merkmale WHERE Basis = SUBSTRING('{0}',1,len(Basis)) AND (Charcode = SUBSTRING('{0}', Stelle, Laenge))" , VakoCode ) ;
2021-10-01 09:09:20 +00:00
2022-10-19 10:58:08 +00:00
Dictionary < String , String > VakoMerkmale = new Dictionary < String , String > ( ) ;
2021-10-01 09:09:20 +00:00
using ( SqlCommand sqlcommand = new SqlCommand ( sql , connection ) )
{
using ( SqlDataReader reader = sqlcommand . ExecuteReader ( ) )
{
DataTable dataTable = new DataTable ( ) ;
dataTable . Load ( reader ) ;
foreach ( DataRow row in dataTable . Rows )
{
try
{
if ( row [ "Schluessel" ] . ToString ( ) . Length > 0 )
{
VakoMerkmale . Add ( row [ "Schluessel" ] . ToString ( ) , row [ "Wert" ] . ToString ( ) ) ;
}
}
//catch (Exception ex)
//{
// // VakoMerkmal unter diesem Schlüssel wurde schon gesetzt, ignorieren
//}
finally
{
}
}
}
return VakoMerkmale ;
}
}
/// <summary>
/// GetLimitsFromDB
/// Ermittelt aus der Tabelle [Cordonel_Radio_RSSI_Limits] die Min/Max RSSI Limits
/// </summary>
/// <param name="Frequenz"></param>
/// <param name="Nennweite"></param>
/// <param name="Baulaenge"></param>
/// <param name="BoxHead"></param>
/// <param name="Variant_o"></param>
/// <param name="Variant_p"></param>
/// <param name="RSSI_Pam_Min"></param>
/// <param name="RSSI_Pam_Max"></param>
/// <param name="RSSI_SEMI_Min"></param>
/// <param name="RSSI_SEMI_Max"></param>
/// <returns></returns>
2022-10-19 10:58:08 +00:00
private Boolean GetLimitsFromDB ( Int16 Frequenz , Int16 Nennweite , Int16 Baulaenge , Int16 BoxHead , Int32 Variant_o , Int32 Variant_p , out Byte RSSI_Pam_Min , out Byte RSSI_Pam_Max , out Byte RSSI_SEMI_Min , out Byte RSSI_SEMI_Max , out UInt32 LimitId )
2021-10-01 09:09:20 +00:00
{
2022-10-19 10:58:08 +00:00
String sql = $"SELECT top 1 * FROM [Cordonel_Radio_RSSI_Limits] WHERE [Box_Head]={BoxHead} and [Frequency] = {Frequenz} and [Nennweite] = {Nennweite} and ([Baulaenge] = {Baulaenge} or [Baulaenge] = 0) order by id desc " ; //and [Variant_o] = {Variant_o} and [Variant_p] = {Variant_p} ";
2021-10-01 09:09:20 +00:00
using ( SqlCommand sqlcommand = new SqlCommand ( sql , connection ) )
{
using ( SqlDataReader reader = sqlcommand . ExecuteReader ( ) )
{
DataTable dataTable = new DataTable ( ) ;
dataTable . Load ( reader ) ;
if ( dataTable . Rows . Count = = 1 )
{
DataRow row = dataTable . Rows [ 0 ] ;
RSSI_Pam_Max = Convert . ToByte ( row [ "RSSI_Pam_Max" ] . ToString ( ) ) ;
RSSI_Pam_Min = Convert . ToByte ( row [ "RSSI_Pam_Min" ] . ToString ( ) ) ;
RSSI_SEMI_Min = Convert . ToByte ( row [ "RSSI_SEMI_Min" ] . ToString ( ) ) ;
RSSI_SEMI_Max = Convert . ToByte ( row [ "RSSI_SEMI_Max" ] . ToString ( ) ) ;
LimitId = Convert . ToUInt32 ( row [ "Id" ] . ToString ( ) ) ;
return true ;
}
else
{
throw new Exception ( $"Kein passender Datensatz für SQL-Abfrage {sql}" ) ;
}
}
}
}
/// <summary>
/// Erzeugt JSON mit RSSI Linits
/// </summary>
/// <param name="BoxHead">Nummer der SIRT-BOX-Kopf-Kombination </param>
/// <param name="OrderNr">FertigungausftragNr</param>
/// <returns></returns>
[Route("GetLimits/{BoxHead}/{OrderNr}")]
2022-10-19 10:58:08 +00:00
public JsonResult < JObject > GetLimits ( Int16 BoxHead , Int32 OrderNr )
2021-10-01 09:09:20 +00:00
{
JObject jsonData = new JObject ( ) ;
//try
//{
2022-10-19 10:58:08 +00:00
String sql = $"SELECT * from AlleAuftragPositionen INNER JOIN IdentNr on AlleAuftragPositionen.IdentNr = IdentNr.IdentNr " +
$"WHERE FertigungsauftragNr = {OrderNr.ToString()}" ;
2021-10-01 09:09:20 +00:00
using ( SqlCommand sqlcommand = new SqlCommand ( sql , connection ) )
{
using ( SqlDataReader reader = sqlcommand . ExecuteReader ( ) )
{
DataTable dataTable = new DataTable ( ) ;
dataTable . Load ( reader ) ;
if ( dataTable . Rows . Count = = 0 )
{
throw new Exception ( $"Es wurde kein Datensatz zur AuftragPosition {OrderNr.ToString()} gefunden!" ) ;
}
// Get the first row
DataRow row = dataTable . Rows [ 0 ] ;
2022-10-19 10:58:08 +00:00
String VakoCode = row [ "VakoCode" ] . ToString ( ) ;
2021-10-01 09:09:20 +00:00
2022-10-19 10:58:08 +00:00
Dictionary < String , String > VakoMerkmale = GetVakoMerkmale ( VakoCode ) ;
2021-10-01 09:09:20 +00:00
2022-10-19 10:58:08 +00:00
String mf ;
2021-10-01 09:09:20 +00:00
mf = row [ "IdentNr" ] . ToString ( ) ;
Int16 Baulaenge = Convert . ToInt16 ( VakoMerkmale [ "Baulaenge" ] ) ;
Int16 Nennweite = Convert . ToInt16 ( VakoMerkmale [ "Nennweite" ] ) ;
Int16 Frequenz = Convert . ToInt16 ( VakoMerkmale [ "RADIO" ] ) ;
2022-10-19 10:58:08 +00:00
String RadiokeyArt ;
2021-10-01 09:09:20 +00:00
RadiokeyArt = VakoMerkmale [ "RADIO" ] ;
jsonData . Add ( "Vako" , JsonConvert . SerializeObject ( VakoMerkmale , Formatting . None ) ) ;
2022-10-19 10:58:08 +00:00
Byte RSSI_Pam_Min ;
Byte RSSI_Pam_Max ;
Byte RSSI_SEMI_Min ;
Byte RSSI_SEMI_Max ;
2021-10-01 09:09:20 +00:00
UInt32 LimitId ;
if ( GetLimitsFromDB ( Convert . ToInt16 ( Frequenz ) , Nennweite , Baulaenge , BoxHead , true ? 1 : 0 , false ? 1 : 0 , out RSSI_Pam_Min , out RSSI_Pam_Max , out RSSI_SEMI_Min , out RSSI_SEMI_Max , out LimitId ) )
{
jsonData . Add ( "LimitId" , LimitId ) ;
jsonData . Add ( "RSSI_PAM_Min" , RSSI_Pam_Min ) ;
jsonData . Add ( "RSSI_PAM_Max" , RSSI_Pam_Max ) ;
jsonData . Add ( "RSSI_SEMI_Min" , RSSI_SEMI_Min ) ;
jsonData . Add ( "RSSI_SEMI_Max" , RSSI_SEMI_Max ) ;
}
return Json ( JObject . FromObject ( jsonData ) ) ;
}
}
}
public class SaveDataClass
{
public UInt32 RadioAdress { get ; set ; }
2022-10-19 10:58:08 +00:00
public Byte RSSI_PAM { get ; set ; }
public Byte RSSI_SEMI { get ; set ; }
public Int32 LimitId { get ; set ; }
public Byte Result { get ; set ; }
2021-10-01 09:09:20 +00:00
}
[Route("SaveRSSI"), HttpPost]
public JsonResult < JObject > SaveRSSI ( [ FromBody ] SaveDataClass SaveData )
{
JObject jsonData = new JObject ( ) ;
saveRssiToDb ( SaveData ) ;
jsonData . Add ( "message" , "ok" ) ;
2024-09-10 14:50:38 +00:00
jsonData . Add ( "radiocheckid" , saveRssiToDb ( SaveData ) ) ;
2021-10-01 09:09:20 +00:00
return Json ( JObject . FromObject ( jsonData ) ) ;
}
/// <summary>
/// Speichert das SaveData Object
/// </summary>
/// <param name="SaveData"></param>
2024-09-10 14:50:38 +00:00
private Int64 saveRssiToDb ( SaveDataClass SaveData )
2021-10-01 09:09:20 +00:00
{
2025-03-17 15:03:24 +00:00
var sqlConnection = LaaPackages . SqlClient . SqlConnection . CreateSqlConnection ( GlobalConfig . connectionString . Value ) ;
2024-09-10 14:50:38 +00:00
sqlConnection
. CreateCommand ( $ @ "
UPDATE Cordonel_Radio_RSSI_History
SET IsLast = 0
WHERE RadioAdress = @ { nameof ( SaveData . RadioAdress ) } ")
. SetParameter ( nameof ( SaveData . RadioAdress ) , ( Int64 ) SaveData . RadioAdress )
. ExecuteNonQuery ( ) ;
return sqlConnection
. CreateCommand ( $ @ "
INSERT INTO Cordonel_Radio_RSSI_History
( RadioAdress
, RSSI_PAM
, RSSI_SEMI
, Datum
, LimitId
, Result )
OUTPUT inserted . id
VALUES ( @ { nameof ( SaveData . RadioAdress ) }
, @ { nameof ( SaveData . RSSI_PAM ) }
, @ { nameof ( SaveData . RSSI_SEMI ) }
, CURRENT_TIMESTAMP
, @ { nameof ( SaveData . LimitId ) }
, @ { nameof ( SaveData . Result ) } ) ")
. SetParameter ( nameof ( SaveData . RadioAdress ) , ( Int64 ) SaveData . RadioAdress )
. SetParameter ( nameof ( SaveData . RSSI_PAM ) , SaveData . RSSI_PAM )
. SetParameter ( nameof ( SaveData . RSSI_SEMI ) , SaveData . RSSI_SEMI )
. SetParameter ( nameof ( SaveData . LimitId ) , SaveData . LimitId )
. SetParameter ( nameof ( SaveData . Result ) , SaveData . Result )
. ExecuteScalar ( x = > x . GetValue < Int64 > ( 0 ) ) ;
2021-10-01 09:09:20 +00:00
}
}
}