123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- using Microsoft.Data.SqlClient;
- using Microsoft.Extensions.Logging;
- using PetroChinaOnlineWatchPlugin.MessageEntity.Outgoing;
- using System;
- using System.Collections.Generic;
- using System.Configuration;
- using System.Data;
- using System.IO;
- namespace PetroChinaOnlineWatchPlugin
- {
- internal class SqlClientHelper
- {
- public static List<IfsfMessageDataOut> ReadOnlineMonitorData(AppConfigV1 appConfig, ILogger logger, ref Dictionary<string, object> tempDic, DbAddressType dbAddressType)
- {
- List<IfsfMessageDataOut> dataList = null;
- try
- {
- var sqlSettings = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap()
- {
- ExeConfigFilename = Path.Combine(appConfig.MainAppDirectory, "SqlConnect.config")
- }, ConfigurationUserLevel.None).AppSettings.Settings;
- using (var connection = new SqlConnection(sqlSettings["SqlConn"].Value))
- {
- if (connection.State != ConnectionState.Open)
- connection.Open();
- string pressureDataTable = $"PressureDataNew_{ DateTime.Today.ToString("yyyyMM")}";
- string queryString = null;
- if (dbAddressType == DbAddressType.Configure)
- {
- queryString = "select top 1 StartDate, JYQS, PVZ, PVF from T_GasStationConfig";
- }
- else if (dbAddressType == DbAddressType.EnvironmentData)
- {
- queryString = "select top 1 A.Id as pdId, B.Id as alId, A.ReceiveTime, A.YGYL, A.YZYL, A.WQND, A.YGWD, B.AlrmType, B.IsAlarm " +
- $"from (select top 1 Id, ReceiveTime, YGYL, YZYL, WQND, YGWD, isupload_bd from {pressureDataTable} where isupload_bd=0) A " +
- "full outer join (select top 1 Id, AlrmType, IsAlarm, isupload from AlarmLog where isupload=0) B on A.isupload_bd=B.isupload";
- }
- else if (dbAddressType == DbAddressType.PumpData)
- {
- queryString = "select * from " +
- "(select * from (select top 1 Id as ogtId, ReceiveTime, MacCode, GunCode, TempRatio, MeanGasQ, TempGas, MeanOilQ, TempOil, isupload " +
- "from OilGunTemp_D where isupload=0) A full outer join " +
- "(select top 1 StartDate, JYQS, PVZ, PVF, isupload_bd from T_GasStationConfig) B on A.isupload=B.isupload_bd) D " +
- "full outer join (select top 1 Id as ogpId, opertime, macname, gunname, eventcode, operate, isupload " +
- "from OilGunOperLog where isupload=0) C on D.isupload=C.isupload";
- }
- else if (dbAddressType == DbAddressType.FaultData)
- {
- queryString = "select top 1 Id, repairTime, EquipmentType, EquipmentNumber, repairCode " +
- "from T_RepairRecord where isupload=0";
- }
- using (var command = new SqlCommand(queryString, connection))
- {
- using (var reader = command.ExecuteReader())
- {
- reader.Read();
- if (!reader.HasRows)
- return null;
- switch (dbAddressType)
- {
- case DbAddressType.Configure:
- var oilSettings = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap()
- {
- ExeConfigFilename = Path.Combine(appConfig.MainAppDirectory, "OilGun.config")
- }, ConfigurationUserLevel.None).AppSettings.Settings;
- var dataSettings = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap()
- {
- ExeConfigFilename = Path.Combine(appConfig.MainAppDirectory, "DataPressure.config")
- }, ConfigurationUserLevel.None).AppSettings.Settings;
- // CF_ID 01H, CF_Message - Data_Id 64H, Enable_Time - Data_Id 02H, Pump_Number - Data_Id 03H
- // Positive_Pressure_Value - Data_Id 04H, Negative_Pressure_Value - Data_Id 05H, Post_Treatmen_Pressuret - Data_Id 06H
- // Dispenser_Number - Data_Id 07H, 气液比预警下限值 - Data_Id 08H, 气液比预警上限值 - Data_Id 09H, 预警次数比例 - Data_Id 0AH
- // 气液比预警转换时间 - Data_Id 0BH, 环境数据采集间隔 - Data_Id 0CH, P/V 阀压力预报警转换时间 - Data_Id 0DH, 罐压预警上限值 - Data_Id 0EH
- // 罐压预警下限值 - Data_Id 0FH, 罐压预警时间 - Data_Id 10H, 罐压报警时间 - Data_Id 11H, 油气浓度报警阈值 - Data_Id 12H
- // new Bin8Message(0x07, 8),
- dataList = new List<IfsfMessageDataOut>() { new DateTimeMessage(0x02, reader["StartDate"]), new Bin8Message(0x03, reader["JYQS"]),
- new Bin8Bcd6Message(0x04, reader["PVZ"]), new Bin8Bcd6Message(0x05, reader["PVF"]), new Bin8Bcd6Message(0x06, oilSettings["CLZZQDYL"].Value),
- new Bin8Message(0x07, appConfig.DispenserNumber), new Bin8Bcd4Message(0x08, oilSettings["QYBMIN"].Value), new Bin8Bcd4Message(0x09, oilSettings["QYBMAX"].Value), new Bin8Bcd4Message(0x0A, oilSettings["QYBBL"].Value),
- new Bin8Message(0x0B, oilSettings["QYBBJ"].Value), new Bin8Message(0x0C, dataSettings["HCLDelay"].Value), new Bin8Message(0x0D, oilSettings["ZKFBJ"].Value), new Bin8Bcd6Message(0x0E, oilSettings["YGLYMAX"].Value),
- new Bin8Bcd6Message(0x0F, oilSettings["YGLYMIN"].Value), new Bin8Message(0x10, oilSettings["YGLYYJ"].Value), new Bin8Message(0x11, oilSettings["YGLYBJ"].Value), new Bcd4Message(0x12, oilSettings["XielouConcentration"].Value)
- };
- break;
- case DbAddressType.EnvironmentData:
- // EM_ID 11H, Monitor_Time - Data_Id 02H, Gas_Tank_Pressure - Data_Id 03H, Liquid_Resistance_Pressure - Data_Id 04H
- // Gas_Volume - Data_Id 05H, Concentration - Data_Id 06H, Tank_Temp - Data_Id 07H
- string alrmLogId = reader["alId"].ToString();
- updateString = $"update {pressureDataTable} set isupload_bd=1 where Id='{reader["pdId"]}';";
- updateString += alrmLogId == "" ? "" : $"update AlarmLog set isupload=1 where Id='{reader["alId"]}'";
- tempDic["LiquidResistance"] = reader["YZYL"];
- dataList = new List<IfsfMessageDataOut>() { new DateTimeMessage(0x02, reader["ReceiveTime"]), new Bin8Bcd6Message(0x03, reader["YGYL"]),
- new Bin8Bcd6Message(0x04, reader["YZYL"]), new Bin8Bcd8Message(0x05, 0m), new Bcd4Message(0x06, reader["WQND"]), new Bin8Bcd4Message(0x07, reader["YGWD"])
- };
- // EM_ID 11H, Zero_Ppressure_Alarm - Data_Id 10H, Tank_Pressure_Alarm - Data_Id 11H, Critical_Pressure_Alarm - Data_Id 12H
- // Post_Process_Alarm - Data_Id 13H, Airtight_Alarm - Data_Id 14H, Liquid_Resistance_Alarm - Data_Id 15H, 处理装置启动状态报警 - Data_Id 16H
- // 处理装置停止状态报警 - Data_Id 17H, 卸油回气管状态报警 - Data_Id 18H
- string alrmType = reader["AlrmType"].ToString();
- if (alrmTypeDataIdMap.ContainsKey(alrmType))
- {
- alrmTypeDataIdMap[alrmType][1] = 2; //2:报警
- }
- else if (alrmType == "1")
- {
- tempDic["GasLiquidRatioAlarm"] = 2; //2:报警
- }
- foreach (byte[] ar in alrmTypeDataIdMap.Values)
- {
- dataList.Add(new Bin8Message(ar[0], ar[1]));
- }
- break;
- case DbAddressType.PumpData:
- // DP_ID 21H, Monitor_Time - Data_Id 02H, Dispenser_ID - Data_Id 03H, Pump_ID - Data_Id 04H
- // Gas_Liquid_Ratio - Data_Id 05H, Gas_Current_Speed - Data_Id 06H, Gas_Flow - Data_Id 07H, Fueling_Speed - Data_Id 08H
- // Fueling_Volume - Data_Id 09H, Liquid_Resistance - Data_Id 0AH
- // DP_ID 21H, Monitor_Time - Data_Id 02H, Dispenser_ID - Data_Id 03H, Pump_ID - Data_Id 04H
- // DP_ID 21H, Gas_Liquid_Ratio_Alarm - Data_Id 14H
- // DP_ID 21H, Monitor_Time - Data_Id 02H, Dispenser_ID - Data_Id 03H, Pump_ID - Data_Id 04H
- // DP_ID 21H, Pump_Start_Stop_State - Data_Id 1EH, Operation_Type - Data_Id 1FH
- string ogpId = reader["ogpId"].ToString();
- updateString = $"update OilGunTemp_D set isupload=1 where Id='{reader["ogtId"]}';";
- updateString += ogpId == "" ? "" : $"update OilGunOperLog set isupload=1 where Id='{reader["ogpId"]}'";
- object liquidResistance = tempDic.ContainsKey("LiquidResistance") ? tempDic["LiquidResistance"] : "0";
- object gasLiquidRatioAlarm = tempDic.ContainsKey("GasLiquidRatioAlarm") ? tempDic["GasLiquidRatioAlarm"] : "0";
- dataList = new List<IfsfMessageDataOut>() { new DateTimeMessage(0x02, reader["ReceiveTime"]), new Bin8Message(0x03, reader["MacCode"]), new Bin8Message(0x04, reader["GunCode"]),
- new Bin8Bcd4Message(0x05, reader["TempRatio"]), new Bin8Bcd6Message(0x06, reader["MeanGasQ"]), new Bin8Bcd6Message(0x07, reader["TempGas"]),
- new Bin8Bcd6Message(0x08, reader["MeanOilQ"]), new Bin8Bcd8Message(0x09, reader["TempOil"]), new Bin8Bcd6Message(0x0A, liquidResistance),
- new Bin8Message(0x14, gasLiquidRatioAlarm),
- new Bin8Message(0x1E, reader["eventcode"]), new Bin8Message(0x1F, reader["operate"])
- };
- break;
- case DbAddressType.FaultData:
- // ER_ID 41H, Fault_Time - Data_Id 01H, Device_Type - Data_Id 02H, Device_ID - Data_Id 03H, Fault_ID - Data_Id 04H
- updateString = $"update T_RepairRecord set isupload=1 where Id='{reader["Id"]}'";
- int faultId = 5;
- //3.第3位故障码表示故障类型:1:通信故障,2:设备故障,3:软件故障,4:数据库故障,其它数字:其它故障
- int faultCode = int.Parse(reader["repairCode"].ToString().Substring(2, 1));
- if (faultCode > 0 && faultCode < 5)
- faultId = faultCode;
- dataList = new List<IfsfMessageDataOut>() { new DateTimeMessage(0x01, reader["repairTime"]), new Bin8Message(0x02, deviceTypeMap[reader["EquipmentType"].ToString()]),
- new Bin8Message(0x03, reader["EquipmentNumber"]), new Bin8Message(0x04, faultId)
- };
- break;
- default:
- break;
- }
- }
- }
- return dataList;
- }
- }
- catch (Exception ex)
- {
- logger.LogError($"ReadOnlineMonitorData error, exception detail: {ex}");
- return null;
- }
- }
- public static void UpdateOnlineMonitorData(AppConfigV1 appConfig, ILogger logger)
- {
- try
- {
- var sqlSettings = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap()
- {
- ExeConfigFilename = Path.Combine(appConfig.MainAppDirectory, "SqlConnect.config")
- }, ConfigurationUserLevel.None).AppSettings.Settings;
- using (var connection = new SqlConnection(sqlSettings["SqlConn"].Value))
- {
- if (connection.State != ConnectionState.Open)
- connection.Open();
- using (var command = new SqlCommand(updateString, connection))
- {
- command.ExecuteNonQuery();
- }
- }
- }
- catch (Exception ex)
- {
- logger.LogError($"updateString: {updateString}");
- logger.LogError($"UpdateOnlineMonitorData error, exception detail: {ex}");
- }
- }
- private static string updateString = null;
- // EM_ID 11H, Zero_Ppressure_Alarm - Data_Id 10H, Tank_Pressure_Alarm - Data_Id 11H, Critical_Pressure_Alarm - Data_Id 12H
- // Post_Process_Alarm - Data_Id 13H, Airtight_Alarm - Data_Id 14H, Liquid_Resistance_Alarm - Data_Id 15H, 处理装置启动状态报警 - Data_Id 16H
- // 处理装置停止状态报警 - Data_Id 17H, 卸油回气管状态报警 - Data_Id 18H
- private static Dictionary<string, byte[]> alrmTypeDataIdMap = new Dictionary<string, byte[]>() { { "11", new byte[] { 0x10, 0 } }, { "6", new byte[] { 0x11, 0 } },
- { "4", new byte[] { 0x12, 0 } }, { "5", new byte[] { 0x13, 0 } }, { "2", new byte[] { 0x14, 0 } }, { "3", new byte[] { 0x15, 0 } }, { "7", new byte[] { 0x16, 0 } },
- { "8", new byte[] { 0x17, 0 } }, { "9", new byte[] { 0x18, 0 } } };
- private static Dictionary<string, int> deviceTypeMap = new Dictionary<string, int>() { { "采集器", 1 }, { "油气流量传感器", 2 }, { "压力传感器", 3 },
- { "浓度传感器", 4 }, { "温度传感器", 5 }, { "控制台", 6 } };
- }
- }
|