init
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user