diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs index 6bdf24f1..922a33e4 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs @@ -95,7 +95,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore private static readonly List _excludedFromCompareParameters = new List { "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 }; diff --git a/Common/Hardware/WaterMeter/Genesis/Registers/Registers.cs b/Common/Hardware/WaterMeter/Genesis/Registers/Registers.cs index 4ffd03ee..41799755 100644 --- a/Common/Hardware/WaterMeter/Genesis/Registers/Registers.cs +++ b/Common/Hardware/WaterMeter/Genesis/Registers/Registers.cs @@ -142,7 +142,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Registers Configexchange.SetFilePointerOffset, Configexchange.FileRemove, - Sensusradio.EncryptionKey + //Sensusradio.EncryptionKey }; } public static List GetMinRequiredRegisters() diff --git a/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache b/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache index 4163759b..39b3fdf8 100644 --- a/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache +++ b/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -8cb55c312de586b683d72cf58c13e2801d10e14b767777d98338d3e1473a1213 +b03dfbada453427a2bb1275645a5f1b525f29900 diff --git a/Common/Service/MeterProcessState/Controllers/FinalCheckController.cs b/Common/Service/MeterProcessState/Controllers/FinalCheckController.cs index d036cde9..bb3d2c99 100644 --- a/Common/Service/MeterProcessState/Controllers/FinalCheckController.cs +++ b/Common/Service/MeterProcessState/Controllers/FinalCheckController.cs @@ -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 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(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(0), - PcbId = x.GetValue(1), - CalFactor1 = x.GetValue(2), - CalFactor2 = x.GetValue(3), - CalFactor3 = x.GetValue(4), - ZeroOffset1 = x.GetValue(5), - ZeroOffset2 = x.GetValue(6), - ZeroOffset3 = x.GetValue(7), - FirstHitUpdatePeriod = x.GetValue(8), - FirstHitShift = x.GetValue(9), - FirstHitPercent1 = x.GetValue(10), - FirstHitPercent2 = x.GetValue(11), - FirstHitPercent3 = x.GetValue(12), - ToFTempOffset1 = x.GetValue(13), - ToFTempOffset2 = x.GetValue(14), - ToFTempOffset3 = x.GetValue(15), - MeterSize = x.GetValue(16), + Id = x.GetValue(0), + PcbId = x.GetValue(1), + CalFactor1 = x.GetValue(2), + CalFactor2 = x.GetValue(3), + CalFactor3 = x.GetValue(4), + ZeroOffset1 = x.GetValue(5), + ZeroOffset2 = x.GetValue(6), + ZeroOffset3 = x.GetValue(7), + FirstHitUpdatePeriod = x.GetValue(8), + FirstHitShift = x.GetValue(9), + FirstHitPercent1 = x.GetValue(10), + FirstHitPercent2 = x.GetValue(11), + FirstHitPercent3 = x.GetValue(12), + ToFTempOffset1 = x.GetValue(13), + ToFTempOffset2 = x.GetValue(14), + ToFTempOffset3 = x.GetValue(15), + MeterSize = x.GetValue(16), Date = x.GetValue(17), - Succeeded = x.GetValue(18), + Succeeded = x.GetValue(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(1)); - result.CalFactor2 = CalFactorOrDefault(x.GetValue(2)); - result.CalFactor3 = CalFactorOrDefault(x.GetValue(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); -// } -// } } } diff --git a/Common/Service/MeterProcessState/Controllers/HeliumControler.cs b/Common/Service/MeterProcessState/Controllers/HeliumControler.cs index 531e2723..a908d5b7 100644 --- a/Common/Service/MeterProcessState/Controllers/HeliumControler.cs +++ b/Common/Service/MeterProcessState/Controllers/HeliumControler.cs @@ -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, "); diff --git a/Common/Service/MeterProcessState/Controllers/PasswordController.cs b/Common/Service/MeterProcessState/Controllers/PasswordController.cs index cefa5e4f..a3eef053 100644 --- a/Common/Service/MeterProcessState/Controllers/PasswordController.cs +++ b/Common/Service/MeterProcessState/Controllers/PasswordController.cs @@ -240,6 +240,65 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers } + [Route("GetExportData")] + public async Task GetExportData(String PcbId) + { + + try + { + var sbQuery = new StringBuilder(); + var ret = new List(); + + 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() + "
" + ex.InnerException.ToString()); + } + } + + + [Route("RunExportData")] + public async Task RunExportData(String PcbId) + { + + try + { + var sbQuery = new StringBuilder(); + var ret = new List(); + + 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() + "
" + ex.InnerException.ToString()); + } + } + [Route("GetPassword")] public async Task 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; + } + } } } \ No newline at end of file