using LaaPackages.Features.Cordonel.Models; using Newtonsoft.Json.Linq; using Oracle.ManagedDataAccess.Client; using Service.MeterProcessState; using Service.MeterProcessState.Data; using System; using System.Collections.Generic; using System.Data; using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder; using System.Globalization; using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Web.Helpers; using System.Web.Http; using Xylem.Common.Logic.ServiceCore; namespace Xylem.Common.Service.MeterProcessState.Controllers { [RoutePrefix("api/LuController")] public class LuController : ApiController { public static class GlobalConfig { public static Lazy connectionString = new Lazy(() => System.Configuration.ConfigurationManager.ConnectionStrings["default"].ConnectionString ); } [Route("GetNZDaten")] public async Task GetNZDaten(string Seriennumer = "") { try { using (var dataAccess = new SqlDataAccess(GlobalConfig.connectionString.Value)) { StringBuilder query = new StringBuilder(); query.AppendLine("SELECT TOP 1 * from Verbundzaehler where (Q1_SOLL is NULL) and (SerienNrNebenzaehler > 0 or KundeneigeneSerNrNbZ <> '') and (Herkunft is null or Herkunft <> 'M') and AnlageDatum > getdate() - 7 order by Datum desc "); var retDic = new List>(); var dt = dataAccess.ExecuteQuery(query.ToString()); foreach (var item in dt.Select()) { string strSQLOra; int lngSerial; string strSerial; double Q1; double Q2; double F1; double F2; lngSerial = (int)item["SerienNrNebenzaehler"]; strSerial = item["KundeneigeneSerNrNbZ"].ToString().Trim(); if (strSerial == "" && lngSerial > 0) { strSQLOra = "SELECT * FROM PRIMA_RO.DT01_LAATZEN WHERE ZAEHLERNUMMER ='" + lngSerial.ToString("00000000") + "'"; } else { if (strSerial != "") { //kundeneigenen NZ SerienNr ist bekannt strSQLOra = "SELECT * FROM PRIMA_RO.DT01_LAATZEN WHERE ZAEHLERNUMMER='" + strSerial.Replace(" ", "") + "' or ZAEHLERNUMMER='" + strSerial + "'"; } else { return Request.CreateResponse(HttpStatusCode.OK, await Task.Run(() => { return "ERROR 1#"; })); // ' weder kundeneigenen SerienNr noch numerische NZ SerienNr bekannt } } // create connection OracleConnection con = new OracleConnection(); // create connection string using builder OracleConnectionStringBuilder ocsb = new OracleConnectionStringBuilder(); ocsb.Password = "senspi2012"; ocsb.UserID = "prima_ro"; ocsb.DataSource = "//SLUORADB:1521/DT01"; // connect con.ConnectionString = ocsb.ConnectionString; con.Open(); OracleCommand command = con.CreateCommand(); command.CommandText = strSQLOra; OracleDataReader reader = command.ExecuteReader(); while (reader.Read()) { Q1 = ((double)reader["Q1_SOLL"]) / 1000; Q2 = ((double)reader["Q2_SOLL"]) / 1000; F1 = (double)reader["FEHLER_Q1"]; F2 = (double)reader["FEHLER_Q2"]; } } return Request.CreateResponse(HttpStatusCode.OK, await Task.Run(() => { return "store"; })); } } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.ToString() + "
" + ex.InnerException.ToString()); } } [Route("SyncKitronData")] public async Task SyncKitronData() { StringBuilder query = new StringBuilder(); query.AppendLine("SELECT TOP (1) ID, Jobname, ActionDate, DoneDate, LastID, DataCount FROM KitronSync where DoneDate is null order by ID "); using (var dataAccess = new SqlDataAccess(GlobalConfig.connectionString.Value)) { var dt = dataAccess.ExecuteQuery(query.ToString()); foreach (DataRow item in dt.Rows) { var LastID = (int)item["LastID"]; var DataCount = (int)item["DataCount"]; var UpdateTillLasID = LastID + DataCount; var kitronFinals = dataAccess.ExecuteQuery($" sELECT * FROM OPENQUERY (MyOraDB, ' SELECT DS_ID,ID_PCB,ID_TEST,JSON FROM DELTACHEF.GENESIS_PCBFUNCTIONALTEST_PD WHERE DS_ID >= {LastID + 1} and DS_ID <= {LastID+ 1 + DataCount} order by DS_ID asc ');"); foreach (DataRow kitronItem in kitronFinals.Rows) { try { var DS_ID = (double)kitronItem["DS_ID"]; var ID_PCB = kitronItem["ID_PCB"].ToString(); var ID_TEST = (double)kitronItem["ID_TEST"]; var JSON = kitronItem["JSON"].ToString(); var oo = JObject.Parse(JSON); UpdateTillLasID = (int)DS_ID; var TestResultPass = false; var IrDALogonSkeleton = ""; var FWVersion = ""; var MaterialNumber = ""; var StartDT = DateTime.MinValue; foreach (var oItem in oo.Children().Values()) { foreach (JProperty ChildValues in oItem.Children()) { switch (ChildValues.Name) { case "TestResult": TestResultPass = (ChildValues.Value.ToString().ToUpper() == "PASS"); break; case "IrDA Logon Skeleton": IrDALogonSkeleton = ChildValues.Value.ToString(); break; case "FW Version": FWVersion = ChildValues.Value.ToString(); break; case "MaterialNumber": MaterialNumber = ChildValues.Value.ToString(); break; case "StartDT": DateTime.TryParseExact(ChildValues.Value.ToString(), "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out StartDT); break; default: break; } } } if (TestResultPass) { int matr = -1; string remark = ""; if (!int.TryParse(MaterialNumber, out matr)) { matr = -1; remark = MaterialNumber; } dataAccess.ExecuteQuery($"" + $" IF not EXISTS (SELECT 1 FROM dbo.[Cordonel_KitronData] WHERE KitronDSId = {DS_ID}) " + $" Begin" + $" INSERT INTO [dbo].[Cordonel_KitronData] ([PcbId] ,[KitronDSId] ,[Skeleton] ,[FW] ,[MaterialNumber] ,[ProdDate], [Remark]) " + $" VALUES ( {ID_PCB},{DS_ID}, '{IrDALogonSkeleton}','{FWVersion}', {matr} , '{StartDT.ToString("yyyyMMdd HH:mm:ss")}', '{remark}')" + $" end"); } } catch (Exception ex) { throw; } } dataAccess.ExecuteQuery($"Update [dbo].KitronSync set LastID = {UpdateTillLasID} "); } } return Request.CreateResponse(HttpStatusCode.OK, await Task.Run(() => { return true; })); } [Route("GetProddate")] public async Task GetProddate(string Seriennumer = "") { return Request.CreateResponse(HttpStatusCode.OK, await Task.Run(() => { return getLastProductionDateByPcb(Seriennumer); })); } public async Task getLastProductionDateByPcb(string Seriennumer = "") { DateTime lastProdDate = DateTime.MinValue; try { var sb = new StringBuilder(); sb.AppendLine(" SELECT top 1 [DS_ID] ,[ID_PCB] ,[ID_TEST] ,[JSON] FROM [DELTACHEF].[GENESIS_PCBFUNCTIONALTEST_PD] "); sb.AppendLine($" where [ID_PCB] = '{Seriennumer}' "); sb.AppendLine(" order by ID_TEST desc "); // create connection using (OracleConnection con = new OracleConnection()) { // create connection string using builder OracleConnectionStringBuilder ocsb = new OracleConnectionStringBuilder(); ocsb.Password = "senspi2012"; ocsb.UserID = "prima_ro"; ocsb.DataSource = "//SLUORADB:1521/DT01"; // connect con.ConnectionString = ocsb.ConnectionString; con.Open(); OracleCommand command = con.CreateCommand(); command.CommandText = sb.ToString(); OracleDataReader reader = command.ExecuteReader(); while (reader.Read()) { var St = ((string)reader["JSON"]); var startInex = St.IndexOf("\"StartDT\":\"") + "\"StartDT\":\"".Length; var datestring = St.Substring(startInex, "29.07.2022 06:47:27".Length); DateTime.ParseExact(datestring, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture); } } } catch (Exception ex) { throw ex; } return lastProdDate; } //connect //If Not rs.EOF Then // If lngSerial = 0 Then // StatusBar1.SimpleText = "LU: " & lngCount & "/" & ProgressBar1.Max & " " & strSerial & " " & Q1 & "=" & F1 & ", " & Q2 & " =" & F2 & " " & rsSQL("AnlageDatum") // Else // StatusBar1.SimpleText = "LU: " & lngCount & "/" & ProgressBar1.Max & " " & Format(lngSerial, "00000000") & " " & Q1 & "=" & F1 & ", " & Q2 & " =" & F2 & " " & rsSQL("AnlageDatum") // End If // 'Debug.Print Format(lngSerial, "00000000") & " " & Q1 & "=" & F1 & ", " & Q2 & " =" & F2 // DoEvents // If Not rsSQL Is Nothing Then // ' Reihenfolge wieder zurückgesetzt Q1 < Q2 2018-04-19 // If Q1 Tauschen // rsSQL("Q1_SOLL") = Q2 // rsSQL("FEHLER_Q1") = F2 // rsSQL("Q2_SOLL") = Q1 // rsSQL("FEHLER_Q2") = F1 // End If // Debug.Print rs("ZAEHLERNUMMER") // If Val(rsSQL("SerienNrNebenzaehlerLU") &"") = 0 And lngSerial > 0 Then // rsSQL("SerienNrNebenzaehlerLU") = lngSerial // End If // rsSQL("Herkunft") = "L" // rsSQL("ErgaenzungDatum") = Now // rsSQL.Update // Debug.Print lngCount &"/" & ProgressBar1.Max & " OK " & lngSerial & " / " & strSerial // End If //Else // StatusBar1.SimpleText = lngCount & "/" & ProgressBar1.Max & " unbekannte SNr: " & lngSerial & " / " & strSerial // Debug.Print StatusBar1.SimpleText & " " & Now // 'Debug.Print lngCount & "/" & ProgressBar1.Max & " unbekannt " & Format(lngSerial, "00000000") & " / " & strSerial // DoEvents // 'rsSQL("Q1_SOLL") = 0 // 'rsSQL("Herkunft") = "u" // 'rsSQL("Info") = "unbekannt in LU" // 'rsSQL.Update //End If //Exit Sub //Errorhandler: // Dim errnum As Long // Dim errdesc As String // errnum = Err.Number // errdesc = Err.Description // PrintStatus "Fehler " & errnum & " in Ergaenze(): " & errdesc & " SQL=" & strSQL //End Sub } }