Enrcxption key not hiding

This commit is contained in:
Roland Drabesch 2025-07-15 16:25:38 +02:00
parent 265c534d2b
commit d124d084fb
6 changed files with 224 additions and 195 deletions

View File

@ -95,7 +95,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
private static readonly List<String> _excludedFromCompareParameters = new List<String>
{
"CUSTOMER_AlarmVisualMask", // Fully hard coded, cannot be overwritten
"CUSTOMER_AlarmEnableMask", // Will be overwritten by SENSUSRADIO if set System state to 0xFF
//"CUSTOMER_AlarmEnableMask", // Will be overwritten by SENSUSRADIO if set System state to 0xFF
"CUSTOMER_AppArrangement", // Is read only, makes no sense to compare anything
"SENSUSRADIO_UpgFWVersion" // After a FW-Update the FW version has changed
};

View File

@ -142,7 +142,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Registers
Configexchange.SetFilePointerOffset,
Configexchange.FileRemove,
Sensusradio.EncryptionKey
//Sensusradio.EncryptionKey
};
}
public static List<String> GetMinRequiredRegisters()

View File

@ -1 +1 @@
8cb55c312de586b683d72cf58c13e2801d10e14b767777d98338d3e1473a1213
b03dfbada453427a2bb1275645a5f1b525f29900

View File

@ -2,6 +2,7 @@
using Logic.ProductionToProductMapper.Cordonel;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Service.MeterProcessState.Data;
using System;
using System.Collections.Generic;
using System.Data;
@ -294,7 +295,7 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
[Route("GetOrderOverview"), HttpGet]
public async Task<HttpResponseMessage> GetOrderOverview(Int32 ProductionOrderNumber, Int32? CheckPcbId = null)
{
try // 3243648 251919004
try
{
return await Task.Run(async () =>
{
@ -726,7 +727,8 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
dt = dataacces.ExecuteQuery(sb.ToString());
@ -1272,38 +1274,52 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
}
}
[HttpGet]
[Route("CalibrationResultsFromRun/{CalibrationResultId}")]
public IHttpActionResult CalibrationResultsFromRun(int CalibrationResultId)
[Route("CalibrationResults/{pcbId}")]
public IHttpActionResult CalibrationResults(String pcbId)
{
var result = SqlConnection
.CreateSqlConnection(GlobalConfig.ConnectionString.Value)
.CreateCommand($@"
SELECT TOP 1
ID
, PcbId
, CalFactor1
, CalFactor2
, CalFactor3
, ZeroOffset1
, ZeroOffset2
, ZeroOffset3
, FirstHitUpdatePeriod
, FirstHitShift
, FirstHitPercent1
, FirstHitPercent2
, FirstHitPercent3
, ToFTempOffset1
, ToFTempOffset2
, ToFTempOffset3
, MeterSize
, date
, successful
FROM CordonelMeterCalibrationResults
WHERE successful = 1
AND ID = @{nameof(CalibrationResultId)}
ORDER BY date DESC")
.SetParameter(nameof(CalibrationResultId), CalibrationResultId)
SELECT TOP 1
cr.ID
, cr.PcbId
, CASE WHEN q3.P1Cal is null THEN cr.CalFactor1 ELSE q3.P1Cal END as CalFactor1
, CASE WHEN q3.P2Cal is null THEN cr.CalFactor2 ELSE q3.P2Cal END as CalFactor2
, CASE WHEN q3.P3Cal is null THEN cr.CalFactor3 ELSE q3.P3Cal END as CalFactor3
, cr.ZeroOffset1
, cr.ZeroOffset2
, cr.ZeroOffset3
, cr.FirstHitUpdatePeriod
, cr.FirstHitShift
, cr.FirstHitPercent1
, cr.FirstHitPercent2
, cr.FirstHitPercent3
, cr.ToFTempOffset1
, cr.ToFTempOffset2
, cr.ToFTempOffset3
, cr.MeterSize
, cr.date
, cr.successful
FROM CordonelMeterCalibrationResults cr
left outer join[Auftrag].[dbo].[Cordonel_Q3Calibration] q3 on cr.PcbId = q3.PcbId and q3.Id in
(select MAX(ID) from[Auftrag].[dbo].[Cordonel_Q3Calibration] q3max
where q3max.pcbid = @{nameof(pcbId)})
WHERE successful = 1
AND cr.PcbId = @{nameof(pcbId)}
ORDER BY date DESC")
.SetParameter(nameof(pcbId), pcbId)
.FirstOrDefault(x => new CalibrationResults
{
Id = x.GetValue<Int32>(0),
@ -1332,63 +1348,121 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
return this.NotFound();
}
if (result.CalFactor1 == 15625 && result.CalFactor2 == 15625 && result.CalFactor3 == 15625)
{
using (var dataacces = new SqlDataAccess(GlobalConfig.ConnectionString.Value))
{
var sbCal = new StringBuilder();
sbCal.AppendLine(" select map.MapPcbIdToSerialNumber_PcbId, v1.Value as Cal1, v2.Value as Cal2, v3.Value as Cal3 from MapPcbIdToSerialNumber map ");
sbCal.AppendLine(" ");
sbCal.AppendLine(" inner join ");
sbCal.AppendLine(" ( ");
sbCal.AppendLine(" select map.MapPcbIdToSerialNumber_PcbId as mPcbid, max(c1.ID)as M1,max(c2.ID) as M2, max(c3.ID) as m3 from MapPcbIdToSerialNumber map ");
sbCal.AppendLine(" left outer join GenesisMeterRegisterHistory c1 on c1.Address = '0F-0D' and map.MapPcbIdToSerialNumber_PcbId =c1.PcbId and c1.Value <> 'NULL' ");
sbCal.AppendLine(" left outer join GenesisMeterRegisterHistory c2 on c2.Address = '0F-0E' and map.MapPcbIdToSerialNumber_PcbId =c2.PcbId and c2.Value <> 'NULL' ");
sbCal.AppendLine(" left outer join GenesisMeterRegisterHistory c3 on c3.Address = '0F-0F' and map.MapPcbIdToSerialNumber_PcbId =c3.PcbId and c3.Value <> 'NULL' ");
sbCal.AppendLine($" where map.MapPcbIdToSerialNumber_PcbId = '{pcbId}' ");
sbCal.AppendLine(" group by MapPcbIdToSerialNumber_PcbId ) as maxT ");
sbCal.AppendLine(" on mPcbid = map.MapPcbIdToSerialNumber_PcbId ");
sbCal.AppendLine(" ");
sbCal.AppendLine(" inner join GenesisMeterRegisterHistory v1 on v1.ID = M1 ");
sbCal.AppendLine(" inner join GenesisMeterRegisterHistory v2 on v2.ID = M2 ");
sbCal.AppendLine(" inner join GenesisMeterRegisterHistory v3 on v3.ID = M3 ");
var dt = dataacces.ExecuteQuery(sbCal.ToString());
foreach (var item in dt.Select())
{
var strC1 = item["Cal1"].ToString();
string strc1Coor = "";
foreach (String hex in strC1.Split('-').Reverse().ToArray())
{
strc1Coor += hex;
}
result.CalFactor1 = Convert.ToUInt16(strc1Coor, 16);
var strC2 = item["Cal2"].ToString();
string strc2Coor = "";
foreach (String hex in strC2.Split('-').Reverse().ToArray())
{
strc2Coor += hex;
}
result.CalFactor2 = Convert.ToUInt16(strc2Coor, 16);
var strC3 = item["Cal3"].ToString();
string strc3Coor = "";
foreach (String hex in strC3.Split('-').Reverse().ToArray())
{
strc3Coor += hex;
}
result.CalFactor3 = Convert.ToUInt16(strc3Coor, 16);
}
}
}
return this.Json(result);
}
[HttpGet]
[Route("CalibrationResults/{pcbId}")]
public IHttpActionResult CalibrationResults(string pcbId)
[Route("CalibrationResultRun/{RunId}")]
public IHttpActionResult CalibrationResultRun(int RunId)
{
var result = SqlConnection
.CreateSqlConnection(GlobalConfig.ConnectionString.Value)
.CreateCommand($@"
SELECT res.ID
, res.PcbId
, ISNULL(resQ3.P1Cal, res.CalFactor1)
, ISNULL(resQ3.P2Cal, res.CalFactor2)
, ISNULL(resQ3.P3Cal, res.CalFactor3)
, res.ZeroOffset1
, res.ZeroOffset2
, res.ZeroOffset3
, res.FirstHitUpdatePeriod
, res.FirstHitShift
, res.FirstHitPercent1
, res.FirstHitPercent2
, res.FirstHitPercent3
, res.ToFTempOffset1
, res.ToFTempOffset2
, res.ToFTempOffset3
, res.MeterSize
, res.date
, res.successful
FROM CordonelMeterCalibrationResults AS res
LEFT JOIN Cordonel_Q3Calibration AS resQ3
ON res.PcbId = resQ3.PcbId
WHERE res.successful = 1
AND res.PcbId = @{nameof(pcbId)}
ORDER BY res.date DESC, resQ3.Date DESC")
.SetParameter(nameof(pcbId), pcbId)
SELECT TOP 1
ID
, PcbId
, CalFactor1
, CalFactor2
, CalFactor3
, ZeroOffset1
, ZeroOffset2
, ZeroOffset3
, FirstHitUpdatePeriod
, FirstHitShift
, FirstHitPercent1
, FirstHitPercent2
, FirstHitPercent3
, ToFTempOffset1
, ToFTempOffset2
, ToFTempOffset3
, MeterSize
, date
, successful
FROM CordonelMeterCalibrationResults
WHERE ID = @{nameof(RunId)}
ORDER BY date DESC")
.SetParameter(nameof(RunId), RunId)
.FirstOrDefault(x => new CalibrationResults
{
Id = x.GetValue<int>(0),
PcbId = x.GetValue<string>(1),
CalFactor1 = x.GetValue<ushort>(2),
CalFactor2 = x.GetValue<ushort>(3),
CalFactor3 = x.GetValue<ushort>(4),
ZeroOffset1 = x.GetValue<int>(5),
ZeroOffset2 = x.GetValue<int>(6),
ZeroOffset3 = x.GetValue<int>(7),
FirstHitUpdatePeriod = x.GetValue<byte>(8),
FirstHitShift = x.GetValue<byte>(9),
FirstHitPercent1 = x.GetValue<byte>(10),
FirstHitPercent2 = x.GetValue<byte>(11),
FirstHitPercent3 = x.GetValue<byte>(12),
ToFTempOffset1 = x.GetValue<int>(13),
ToFTempOffset2 = x.GetValue<int>(14),
ToFTempOffset3 = x.GetValue<int>(15),
MeterSize = x.GetValue<byte>(16),
Id = x.GetValue<Int32>(0),
PcbId = x.GetValue<String>(1),
CalFactor1 = x.GetValue<UInt16>(2),
CalFactor2 = x.GetValue<UInt16>(3),
CalFactor3 = x.GetValue<UInt16>(4),
ZeroOffset1 = x.GetValue<Int32>(5),
ZeroOffset2 = x.GetValue<Int32>(6),
ZeroOffset3 = x.GetValue<Int32>(7),
FirstHitUpdatePeriod = x.GetValue<Byte>(8),
FirstHitShift = x.GetValue<Byte>(9),
FirstHitPercent1 = x.GetValue<Byte>(10),
FirstHitPercent2 = x.GetValue<Byte>(11),
FirstHitPercent3 = x.GetValue<Byte>(12),
ToFTempOffset1 = x.GetValue<Int32>(13),
ToFTempOffset2 = x.GetValue<Int32>(14),
ToFTempOffset3 = x.GetValue<Int32>(15),
MeterSize = x.GetValue<Byte>(16),
Date = x.GetValue<DateTime>(17),
Succeeded = x.GetValue<bool>(18),
Succeeded = x.GetValue<Boolean>(18),
});
if (result is null)
@ -1396,124 +1470,9 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
return this.NotFound();
}
const ushort DEFAULT_CAL_FACTOR = 15625;
if (result.CalFactor1 == DEFAULT_CAL_FACTOR && result.CalFactor2 == DEFAULT_CAL_FACTOR && result.CalFactor3 == DEFAULT_CAL_FACTOR)
{
ushort CalFactorOrDefault(string hexString)
{
ushort calFactor;
try
{
var hexBytes = hexString.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
Array.Resize(ref hexBytes, 2);
Array.Reverse(hexBytes);
hexString = string.Join(string.Empty, hexBytes);
calFactor = Convert.ToUInt16(hexString, 16);
}
catch
{
calFactor = DEFAULT_CAL_FACTOR;
}
return calFactor;
}
SqlConnection
.CreateSqlConnection(GlobalConfig.ConnectionString.Value)
.CreateCommand($@"
SELECT gmrh.PcbId
, gmrh1.Value AS Cal1
, gmrh2.Value AS Cal2
, gmrh3.Value AS Cal3
FROM MapPcbIdToSerialNumber AS map
JOIN (SELECT _map.MapPcbIdToSerialNumber_PcbId AS PcbId
, MAX(c1.ID) AS CalId1
, MAX(c2.ID) AS CalId2
, MAX(c3.ID) AS CalId3
FROM MapPcbIdToSerialNumber AS _map
LEFT JOIN GenesisMeterRegisterHistory AS c1
ON c1.Address = '0F-0D'
AND c1.Value IS NOT NULL
AND c1.Value <> 'NULL'
AND _map.MapPcbIdToSerialNumber_PcbId = c1.PcbId
LEFT JOIN GenesisMeterRegisterHistory AS c2
ON c2.Address = '0F-0E'
AND c2.Value IS NOT NULL
AND c2.Value <> 'NULL'
AND _map.MapPcbIdToSerialNumber_PcbId = c2.PcbId
LEFT JOIN GenesisMeterRegisterHistory AS c3
ON c3.Address = '0F-0F'
AND c3.Value IS NOT NULL
AND c3.Value <> 'NULL'
AND _map.MapPcbIdToSerialNumber_PcbId = c3.PcbId
WHERE _map.MapPcbIdToSerialNumber_PcbId = @{nameof(pcbId)}
GROUP BY _map.MapPcbIdToSerialNumber_PcbId)
AS gmrh
ON gmrh.PcbId = map.MapPcbIdToSerialNumber_PcbId
JOIN GenesisMeterRegisterHistory AS gmrh1 ON gmrh1.ID = gmrh.CalId1
JOIN GenesisMeterRegisterHistory AS gmrh2 ON gmrh2.ID = gmrh.CalId2
JOIN GenesisMeterRegisterHistory AS gmrh3 ON gmrh3.ID = gmrh.CalId3")
.SetParameter(nameof(pcbId), pcbId)
.FirstOrDefault(x =>
{
result.CalFactor1 = CalFactorOrDefault(x.GetValue<string>(1));
result.CalFactor2 = CalFactorOrDefault(x.GetValue<string>(2));
result.CalFactor3 = CalFactorOrDefault(x.GetValue<string>(3));
});
}
return this.Json(result);
}
// using (var dataacces = new SqlDataAccess(GlobalConfig.ConnectionString.Value))
// {
// var sbCal = new StringBuilder();
// sbCal.AppendLine(" select map.MapPcbIdToSerialNumber_PcbId, v1.Value as Cal1, v2.Value as Cal2, v3.Value as Cal3 from MapPcbIdToSerialNumber map ");
// sbCal.AppendLine(" ");
// sbCal.AppendLine(" inner join ");
// sbCal.AppendLine(" ( ");
// sbCal.AppendLine(" select map.MapPcbIdToSerialNumber_PcbId as mPcbid, max(c1.ID)as M1,max(c2.ID) as M2, max(c3.ID) as m3 from MapPcbIdToSerialNumber map ");
// sbCal.AppendLine(" left outer join GenesisMeterRegisterHistory c1 on c1.Address = '0F-0D' and map.MapPcbIdToSerialNumber_PcbId =c1.PcbId ");
// sbCal.AppendLine(" left outer join GenesisMeterRegisterHistory c2 on c2.Address = '0F-0E' and map.MapPcbIdToSerialNumber_PcbId =c2.PcbId ");
// sbCal.AppendLine(" left outer join GenesisMeterRegisterHistory c3 on c3.Address = '0F-0F' and map.MapPcbIdToSerialNumber_PcbId =c3.PcbId ");
// sbCal.AppendLine($" where map.MapPcbIdToSerialNumber_PcbId = '{pcbId}' ");
// sbCal.AppendLine(" group by MapPcbIdToSerialNumber_PcbId ) as maxT ");
// sbCal.AppendLine(" on mPcbid = map.MapPcbIdToSerialNumber_PcbId ");
// sbCal.AppendLine(" ");
// sbCal.AppendLine(" inner join GenesisMeterRegisterHistory v1 on v1.ID = M1 ");
// sbCal.AppendLine(" inner join GenesisMeterRegisterHistory v2 on v2.ID = M2 ");
// sbCal.AppendLine(" inner join GenesisMeterRegisterHistory v3 on v3.ID = M3
// var dt = dataacces.ExecuteQuery(sbCal.ToString());
// foreach (var item in dt.Select())
// {
// var strC1 = item["Cal1"].ToString();
// string strc1Coor = "";
// foreach (String hex in strC1.Split('-').Reverse().ToArray())
// {
// strc1Coor += hex;
// }
//result.CalFactor1 = Convert.ToUInt16(strc1Coor, 16);
// var strC2 = item["Cal2"].ToString();
//string strc2Coor = "";
// foreach (String hex in strC2.Split('-').Reverse().ToArray())
// {
// strc2Coor += hex;
// }
// result.CalFactor2 = Convert.ToUInt16(strc2Coor, 16);
// var strC3 = item["Cal3"].ToString();
//string strc3Coor = "";
// foreach (String hex in strC3.Split('-').Reverse().ToArray())
// {
// strc3Coor += hex;
// }
// result.CalFactor3 = Convert.ToUInt16(strc3Coor, 16);
// }
// }
}
}

View File

@ -100,7 +100,7 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
if (ret == null)
{
query = new StringBuilder();
query.AppendLine(" select 0 as [Source] , ");
query.AppendLine(" select distinct 0 as [Source] , ");
query.AppendLine(" pick.CordonelAssignedPicking_PcbId, pick.CordonelAssignedPicking_FertigungsAuftragsNr,pick.CordonelAssignedPicking_Date, ");
query.AppendLine(" ap.AuftragNr,ap.PositionNr, ");
query.AppendLine(" ap.Identnr, ");

View File

@ -240,6 +240,65 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
}
[Route("GetExportData")]
public async Task<HttpResponseMessage> GetExportData(String PcbId)
{
try
{
var sbQuery = new StringBuilder();
var ret = new List<PwdExport>();
sbQuery.AppendLine($" SELECT TOP(1000) [Id] ,[OrderNumber] ,[LineNumer] ,[ManufactureDate] " +
$" ,[SerialNumber] ,[PcbId] ,[Password] ,[Low] ,[Mid] ,[High] ,[ShipDate] " +
$" ,[ExportDate] ,[PartNumber] ,[MeterSize] ,[MeterLength] " +
$" FROM [PushExt].[dbo].[CordonelExport] " +
$" where [PcbId] = '{PcbId}'");
using (var dataAccess = new SqlDataAccess(GlobalConfig.connectionString.Value))
{
var dt = dataAccess.ExecuteQuery(sbQuery.ToString());
foreach (var item in dt.Select())
{
ret.Add(new PwdExport((Int32)item["Id"], (String)item["Password"], ((DateTimeOffset)item["ExportDate"]).DateTime));
}
}
return Request.CreateResponse(HttpStatusCode.OK, await Task.Run(() => { return ret; }));
}
catch (Exception ex)
{
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.ToString() + "<br >" + ex.InnerException.ToString());
}
}
[Route("RunExportData")]
public async Task<HttpResponseMessage> RunExportData(String PcbId)
{
try
{
var sbQuery = new StringBuilder();
var ret = new List<PwdExport>();
sbQuery.AppendLine($"exec [PushExportRepair] " + PcbId + ";");
using (var dataAccess = new SqlDataAccess(GlobalConfig.connectionString.Value))
{
var dt = dataAccess.ExecuteQuery(sbQuery.ToString());
foreach (var item in dt.Select())
{
ret.Add(new PwdExport((Int32)item["Id"], (String)item["Password"], ((DateTime)item["ExportDate"])));
}
}
return Request.CreateResponse(HttpStatusCode.OK, await Task.Run(() => { return ret; }));
}
catch (Exception ex)
{
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.ToString() + "<br >" + ex.InnerException.ToString());
}
}
[Route("GetPassword")]
public async Task<HttpResponseMessage> GetPassword(String PcbId, Int32 Llv = 8)
@ -1058,7 +1117,18 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
}
}
public class PwdExport
{
public int ID;
public String PWD;
public DateTime ExportDate;
public PwdExport(int id, string pwd, DateTime exportDate)
{
this.ID = id;
this.PWD = pwd;
this.ExportDate = exportDate;
}
}
}
}