laatzen/Common/Service/MeterProcessState/Controllers/LUControler.cs
2025-09-15 16:16:07 +02:00

384 lines
14 KiB
C#

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.Hardware.WaterMeter.Genesis.Registers.Json;
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<String> connectionString = new Lazy<String>(()
=>
System.Configuration.ConfigurationManager.ConnectionStrings["default"].ConnectionString
);
}
[Route("GetNZDaten")]
public async Task<HttpResponseMessage> 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<Tuple<string, string>>();
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() + "<br >" + ex.InnerException.ToString());
}
}
[Route("SyncKitronData")]
public async Task<HttpResponseMessage> 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<HttpResponseMessage> GetProddate(string Seriennumer = "")
{
return Request.CreateResponse(HttpStatusCode.OK, await Task.Run(() => { return getLastProductionDateByPcb(Seriennumer); }));
}
public async Task<DateTime> 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<Q2 Then
// ' richtig herum
// rsSQL("Q1_SOLL") = Q1
// rsSQL("FEHLER_Q1") = F1
// rsSQL("Q2_SOLL") = Q2
// rsSQL("FEHLER_Q2") = F2
// Else
// ' Q2 < 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
}
}