This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1,203 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Data.OleDb;
namespace DatabaseExport
{
public class MMEPositions : AbstractOLEDbWrapper
{
public string S_GUID { get; }
public string Position { get; }
public string Text_L1 { get; }
public string Text_L2 { get; }
public long Version { get; }
public DateTime Date { get; }
public string Remarks { get; }
public bool Expired { get; }
public string SortKey { get; }
public DateTime Last_Change { get; }
public string Last_Change_Text { get; }
public string History { get; }
public MMEPossibleChannels.MMEChannelTypes RecordType { get; } = MMEPossibleChannels.MMEChannelTypes.ISO13499_106;
public MMEPositions(string sGuid, string position, string textL1, string textL2, long version,
DateTime date, string remarks, bool expired, string sortKey, DateTime lastChange, string lastChangeText,
string history, MMEPossibleChannels.MMEChannelTypes type)
{
RecordType = type;
S_GUID = sGuid;
Position = position;
Text_L1 = textL1;
Text_L2 = textL2;
Version = version;
Date = date;
Remarks = remarks;
Expired = expired;
SortKey = sortKey;
Last_Change = lastChange;
Last_Change_Text = lastChangeText;
History = history;
}
public static MMEPositions[] GetPositions()
{
var positions = new List<MMEPositions>();
try
{
using (var cmd = DbOperations.GetISOCommand())
{
cmd.CommandText = "SELECT * FROM MMEPositions";
cmd.CommandType = CommandType.Text;
try
{
using (var ISOReader = cmd.ExecuteReader())
{
while (ISOReader.Read())
{
try
{
string sGuid = ISOReader["s_GUID"].ToString();
string position = ISOReader["POSITION"].ToString();
string textL1 = ISOReader["TEXT_L1"].ToString();
string textL2 = ISOReader["TEXT_L2"].ToString();
long version = GetLong(ISOReader, "VERSION");
DateTime date = (DateTime)ISOReader["DATE"];
string remarks = ISOReader["REMARKS"].ToString();
bool expired = (bool)ISOReader["EXPIRED"];
string sortkey = ISOReader["SORTKEY"].ToString();
DateTime lastChange = GetDate(ISOReader, "LAST_CHANGE");
string lastChangeText = ISOReader["LAST_CHANGE_TEXT"].ToString();
string history = ISOReader["HISTORY"].ToString();
positions.Add(new MMEPositions(sGuid, position, textL1, textL2, version, date, remarks, expired, sortkey, lastChange, lastChangeText, history, MMEPossibleChannels.MMEChannelTypes.ISO13499_106));
}
catch (Exception)
{
//ignore
}
}
}
}
finally
{
cmd.Connection.Dispose();
}
}
try
{
using (var cmd = DbOperations.GetCommand())
{
try
{
cmd.CommandText = string.Format("SELECT * FROM {0}", DbOperations.MMETables.MMEPositionsTable);
using (var ds = DbOperations.Connection.QueryDataSet(cmd))
{
if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
var fields = Enum.GetValues(typeof(DbOperations.MMETables.MMEPositionsFields))
.Cast<DbOperations.MMETables.MMEPositionsFields>().ToArray();
foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
{
var version = 0;
var text2 = "";
var text1 = "";
var sortKey = "";
var sGuid = "";
var remarks = "";
var position = "?";
var lastChangeText = "";
var lastChange = DateTime.Now;
var history = "";
var expired = false;
var date = DateTime.Now;
foreach (var field in fields)
{
try
{
if (DBNull.Value.Equals(dr[field.ToString()])) { continue; }
var o = dr[field.ToString()];
switch (field)
{
case DbOperations.MMETables.MMEPositionsFields.DATE:
date = Convert.ToDateTime(o);
break;
case DbOperations.MMETables.MMEPositionsFields.EXPIRED:
expired = Convert.ToBoolean(o);
break;
case DbOperations.MMETables.MMEPositionsFields.HISTORY:
history = Convert.ToString(o);
break;
case DbOperations.MMETables.MMEPositionsFields.LAST_CHANGE:
lastChange = Convert.ToDateTime(o);
break;
case DbOperations.MMETables.MMEPositionsFields.LAST_CHANGE_TEXT:
lastChangeText = Convert.ToString(o);
break;
case DbOperations.MMETables.MMEPositionsFields.POSITION:
position = Convert.ToString(o);
break;
case DbOperations.MMETables.MMEPositionsFields.REMARKS:
remarks = Convert.ToString(o);
break;
case DbOperations.MMETables.MMEPositionsFields.s_GUID:
sGuid = Convert.ToString(o);
break;
case DbOperations.MMETables.MMEPositionsFields.SORTKEY:
sortKey = Convert.ToString(o);
break;
case DbOperations.MMETables.MMEPositionsFields.TEXT_L1:
text1 = Convert.ToString(o);
break;
case DbOperations.MMETables.MMEPositionsFields.TEXT_L2:
text2 = Convert.ToString(o);
break;
case DbOperations.MMETables.MMEPositionsFields.VERSION:
version = Convert.ToInt32(o);
break;
}
}
catch (Exception)
{
//ignore
}
}
positions.Add(new MMEPositions(sGuid.ToString(), position, text1, text2, Convert.ToInt64(version), date, remarks, expired,
sortKey, lastChange, lastChangeText, history, MMEPossibleChannels.MMEChannelTypes.SQL));
}
}
}
}
finally
{
cmd.Connection.Dispose();
}
}
}
catch (Exception)
{
//ignore
}
}
catch (Exception)
{
//ignore
}
return positions.ToArray();
}
}
}

View File

@@ -0,0 +1,276 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace DatabaseExport
{
public class SensorsCollection //: INotifyPropertyChanged
{
private static object _lock = new object();
private static SensorsCollection _sensorCollection = null;
public static SensorsCollection SensorsList
{
get
{
lock (_lock)
{
return _sensorCollection ?? (_sensorCollection = new SensorsCollection());
}
}
}
private Dictionary<string, SensorData> _sensorDictionary;
/// <summary>
/// we keep two dictionaries for sensor ids
/// 1) we want efficient look up for existing ids
/// 2) we need to clean out the lookup. if someone commits an existing sensor that had an id with a different id or no id, we have to clean up
/// </summary>
private Dictionary<string, List<SensorData>> _sensorIDToSensors;
private Dictionary<string, string> _serialNumberToStoredSensorId;
public SensorsCollection()
{
LoadAllSensors();
}
private void LoadAllSensors()
{
lock (_lock)
{
_sensorDictionary = new Dictionary<string, SensorData>();
_serialNumberToStoredSensorId = new Dictionary<string, string>();
_sensorIDToSensors = new Dictionary<string, List<SensorData>>();
try
{
using (var cmd = DbOperations.GetCommand())
{
//sp_GetSensors
cmd.CommandText = @"SELECT [SerialNumber],[UserSerialNumber],[Model],[Manufacturer],[Status],[MeasurementUnit],[OffsetToleranceLow],[OffsetToleranceHigh],[Id],[Capacity],[Comment],[BridgeType],[BridgeLegMode],[Shunt],[Invert],[UserValue1],[UserValue2],[UserValue3],[FilterClass],[BridgeResistance],[IsoCode],[CheckOffset],[SupportedExcitation],[InitialEU],[CalInterval],[CalibrationSignal],[InternalShuntResistance],[ExternalShuntResistance],[UniPolar],[RangeLow],[RangeAve],[RangeHigh],[Created],[TimesUsed],[SensorCategory],[BypassFilter],[CouplingMode],[Version],[LastModified],[ModifiedBy],[LocalOnly],[AxisNumber],[NumberOfAxes],[DbTimeStamp],[UserTags],[DoNotUse],[Broken] FROM [tblSensors]";
using (var ds = DbOperations.Connection.QueryDataSet(cmd))
{
if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
{
try
{
var sd = new SensorData(dr);
if (!_sensorDictionary.ContainsKey(sd.SerialNumber))
{
_sensorDictionary.Add(sd.SerialNumber, sd);
if (string.IsNullOrEmpty(sd.Id)) continue;
if (!_sensorIDToSensors.ContainsKey(sd.Id))
{
_sensorIDToSensors.Add(sd.Id, new List<SensorData>());
}
_sensorIDToSensors[sd.Id].Add(sd);
_serialNumberToStoredSensorId[sd.SerialNumber] = sd.Id;
}
else
{
//well we are in effect ignoring previous ones here, so lets clean up
//the sensor id association information ...
if (_serialNumberToStoredSensorId.ContainsKey(sd.SerialNumber))
{
//its gots it so we've gots to clean up
var oldId = _serialNumberToStoredSensorId[sd.SerialNumber];
var list = _sensorIDToSensors[oldId];
for (var i = list.Count - 1; i >= 0; i--)
{
if (list[i].SerialNumber == sd.SerialNumber)
{
list.RemoveAt(i);
}
}
if (list.Count > 0) { _sensorIDToSensors[oldId] = list; }
else { _sensorIDToSensors.Remove(oldId); }
_serialNumberToStoredSensorId.Remove(sd.SerialNumber);
}
_sensorDictionary[sd.SerialNumber] = sd;
}
}
catch (Exception) { /*Utilities.Logging.APILogger.Log("Failed to load sensor: ", ex2);*/ }
}
}
}
}
}
catch (Exception) { /*Utilities.Logging.APILogger.Log("Failed to load Sensors: ", ex); */}
try
{
var settings = new List<DigitalInputSetting>();
using (var cmd = DbOperations.GetCommand())
{
cmd.CommandText = @"SELECT * FROM tblDigitalInputSetting";
using (var ds = DbOperations.Connection.QueryDataSet(cmd))
{
var fields = Enum.GetValues(typeof(DbOperations.DigitalInputSettings.Fields)).Cast<DbOperations.DigitalInputSettings.Fields>().ToArray();
foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
{
var s = new DigitalInputSetting();
foreach (var field in fields)
{
try
{
var o = dr[field.ToString()];
if (null == o || DBNull.Value.Equals(o)) { continue; }
switch (field)
{
case DbOperations.DigitalInputSettings.Fields.LastModified: s.LastModified = Convert.ToDateTime(o); break;
case DbOperations.DigitalInputSettings.Fields.LastModifiedBy: s.LastUpdatedBy = Convert.ToString(o); break;
case DbOperations.DigitalInputSettings.Fields.ScaleMultiplier: s.ScaleMultiplier.FromDbSerializeString(Convert.ToString(o)); break;
case DbOperations.DigitalInputSettings.Fields.SettingMode: s.InputMode = (DigitalInputScaleMultiplier.InputModes)Convert.ToInt32(o); break;
case DbOperations.DigitalInputSettings.Fields.SettingName: s.SettingName = Convert.ToString(o); break;
case DbOperations.DigitalInputSettings.Fields.SensorId: s.Id = Convert.ToString(o); break;
case DbOperations.DigitalInputSettings.Fields.UserValue1:
s.UserValue1 = Convert.ToString(o);
s.Comment = s.UserValue1;
break;
case DbOperations.DigitalInputSettings.Fields.UserValue2:
s.UserValue2 = Convert.ToString(o);
break;
case DbOperations.DigitalInputSettings.Fields.UserValue3:
s.UserValue3 = Convert.ToString(o);
break;
case DbOperations.DigitalInputSettings.Fields.UserTags:
s.TagsBlobBytes = (byte[])o;
break;
default: throw new NotSupportedException("DigitalInputSettingsList::DigitalInputSettingsList unsupported column: " + field.ToString());
}
}
catch (Exception) {/* Utilities.Logging.APILogger.Log(ex); */}
}
settings.Add(s);
}
}
}
foreach (var s in settings)
{
if (_sensorDictionary.ContainsKey(s.SerialNumber))
{
//don't load it, just ignore the setting
}
else
{
_sensorDictionary[s.SerialNumber] = s;
if (string.IsNullOrWhiteSpace(s.Id)) continue;
if (!_sensorIDToSensors.ContainsKey(s.Id)) { _sensorIDToSensors.Add(s.Id, new List<SensorData>()); }
_sensorIDToSensors[s.Id].Add(s);
_serialNumberToStoredSensorId[s.SerialNumber] = s.Id;
}
}
}
catch (Exception) {/* Utilities.Logging.APILogger.Log(ex);*/ }
try
{
var settings = new List<SquibSetting>();
using (var cmd = DbOperations.GetCommand())
{
cmd.CommandText = @"SELECT * FROM tblTOMSquibChannels";
using (var ds = DbOperations.Connection.QueryDataSet(cmd))
{
foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
{
try { settings.Add(new SquibSetting(dr)); }
catch (Exception) {/* Utilities.Logging.APILogger.Log(ex);*/ }
}
}
}
foreach (var s in settings)
{
if (_sensorDictionary.ContainsKey(s.SerialNumber))
{
//serial number already exists as something else, ignore this one!
}
else
{
_sensorDictionary[s.SerialNumber] = s;
if (!string.IsNullOrWhiteSpace(s.Id))
{
if (!_sensorIDToSensors.ContainsKey(s.Id))
{
_sensorIDToSensors.Add(s.Id, new List<SensorData>());
}
_sensorIDToSensors[s.Id].Add(s);
_serialNumberToStoredSensorId[s.SerialNumber] = s.Id;
}
}
}
}
catch (Exception) { /*Utilities.Logging.APILogger.Log(ex);*/ }
try
{
var lDOS = new List<DigitalOutputSetting>();
using (var cmd = DbOperations.GetCommand())
{
cmd.CommandText = @"SELECT * FROM tblTOMDigitalChannels";
using (var ds = DbOperations.Connection.QueryDataSet(cmd))
{
foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
{
try { lDOS.Add(new DigitalOutputSetting(dr)); }
catch (Exception) { /*Utilities.Logging.APILogger.Log(ex);*/ }
}
}
}
foreach (var s in lDOS)
{
if (!_sensorDictionary.ContainsKey(s.SerialNumber))
{
_sensorDictionary[s.SerialNumber] = s;
}
}
}
catch (Exception) { /*Utilities.Logging.APILogger.Log(ex);*/ }
}
}
//TODO: fix broken
public SensorData GetSensorBySerialNumber(string serialNumber, bool excludeBroken = true)
{
lock (_lock)
{
if (!_sensorDictionary.ContainsKey(serialNumber))
{
if (!SensorData.IsTestSpecificDigitalOutSN(serialNumber)) return null;
var sd = new DigitalOutputSetting { SerialNumber = serialNumber };
return sd;
}
else
{
var sd = _sensorDictionary[serialNumber];
if (excludeBroken) { if (sd.Broken || sd.DoNotUse) { return null; } }
if (sd.NumberOfAxes > 1 || sd.AxisNumber > 0) { return null; }
//for now eliminate multiple axes sensors
//per 6093 Disable 6-axis sensor capability
// "Prefiltered > CFC 1000" (Unfiltered)
if (sd.FilterClassIso == "?") { sd.FilterClassIso = "P"; }
return sd;
}
}
}
/// <summary>
/// Return a list of all sensors, even those marked Broken or Do Not Use
/// </summary>
public SensorData[] AllSensorsDb
{
get
{
lock (_lock)
{
var l = new List<SensorData>(_sensorDictionary.Values.ToArray());
//for now eliminate multiple axes sensors per 6093 Disable 6-axis sensor capability
for (var i = l.Count - 1; i >= 0; i--)
{
if (l[i].NumberOfAxes > 1 || l[i].AxisNumber > 0) { l.RemoveAt(i); }
}
l.Sort();
return l.ToArray();
}
}
}
}
}