diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/bin/BRServer.DALFactory.dll b/bin/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/bin/BRServer.DALFactory.dll +++ b/bin/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/bin/BRServer.DALFactory.dll b/bin/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/bin/BRServer.DALFactory.dll +++ b/bin/BRServer.DALFactory.dll Binary files differ diff --git a/bin/BRServer.DALFactory.pdb b/bin/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/bin/BRServer.DALFactory.pdb +++ b/bin/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/bin/BRServer.DALFactory.dll b/bin/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/bin/BRServer.DALFactory.dll +++ b/bin/BRServer.DALFactory.dll Binary files differ diff --git a/bin/BRServer.DALFactory.pdb b/bin/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/bin/BRServer.DALFactory.pdb +++ b/bin/BRServer.DALFactory.pdb Binary files differ diff --git a/bin/BRServer.IDAL.dll b/bin/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/bin/BRServer.IDAL.dll +++ b/bin/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/bin/BRServer.DALFactory.dll b/bin/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/bin/BRServer.DALFactory.dll +++ b/bin/BRServer.DALFactory.dll Binary files differ diff --git a/bin/BRServer.DALFactory.pdb b/bin/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/bin/BRServer.DALFactory.pdb +++ b/bin/BRServer.DALFactory.pdb Binary files differ diff --git a/bin/BRServer.IDAL.dll b/bin/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/bin/BRServer.IDAL.dll +++ b/bin/BRServer.IDAL.dll Binary files differ diff --git a/bin/BRServer.IDAL.pdb b/bin/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/bin/BRServer.IDAL.pdb +++ b/bin/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/bin/BRServer.DALFactory.dll b/bin/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/bin/BRServer.DALFactory.dll +++ b/bin/BRServer.DALFactory.dll Binary files differ diff --git a/bin/BRServer.DALFactory.pdb b/bin/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/bin/BRServer.DALFactory.pdb +++ b/bin/BRServer.DALFactory.pdb Binary files differ diff --git a/bin/BRServer.IDAL.dll b/bin/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/bin/BRServer.IDAL.dll +++ b/bin/BRServer.IDAL.dll Binary files differ diff --git a/bin/BRServer.IDAL.pdb b/bin/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/bin/BRServer.IDAL.pdb +++ b/bin/BRServer.IDAL.pdb Binary files differ diff --git a/bin/BRServer.Model.dll b/bin/BRServer.Model.dll index 468d516..9536917 100644 --- a/bin/BRServer.Model.dll +++ b/bin/BRServer.Model.dll Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/bin/BRServer.DALFactory.dll b/bin/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/bin/BRServer.DALFactory.dll +++ b/bin/BRServer.DALFactory.dll Binary files differ diff --git a/bin/BRServer.DALFactory.pdb b/bin/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/bin/BRServer.DALFactory.pdb +++ b/bin/BRServer.DALFactory.pdb Binary files differ diff --git a/bin/BRServer.IDAL.dll b/bin/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/bin/BRServer.IDAL.dll +++ b/bin/BRServer.IDAL.dll Binary files differ diff --git a/bin/BRServer.IDAL.pdb b/bin/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/bin/BRServer.IDAL.pdb +++ b/bin/BRServer.IDAL.pdb Binary files differ diff --git a/bin/BRServer.Model.dll b/bin/BRServer.Model.dll index 468d516..9536917 100644 --- a/bin/BRServer.Model.dll +++ b/bin/BRServer.Model.dll Binary files differ diff --git a/bin/BRServer.Model.pdb b/bin/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/bin/BRServer.Model.pdb +++ b/bin/BRServer.Model.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/bin/BRServer.DALFactory.dll b/bin/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/bin/BRServer.DALFactory.dll +++ b/bin/BRServer.DALFactory.dll Binary files differ diff --git a/bin/BRServer.DALFactory.pdb b/bin/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/bin/BRServer.DALFactory.pdb +++ b/bin/BRServer.DALFactory.pdb Binary files differ diff --git a/bin/BRServer.IDAL.dll b/bin/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/bin/BRServer.IDAL.dll +++ b/bin/BRServer.IDAL.dll Binary files differ diff --git a/bin/BRServer.IDAL.pdb b/bin/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/bin/BRServer.IDAL.pdb +++ b/bin/BRServer.IDAL.pdb Binary files differ diff --git a/bin/BRServer.Model.dll b/bin/BRServer.Model.dll index 468d516..9536917 100644 --- a/bin/BRServer.Model.dll +++ b/bin/BRServer.Model.dll Binary files differ diff --git a/bin/BRServer.Model.pdb b/bin/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/bin/BRServer.Model.pdb +++ b/bin/BRServer.Model.pdb Binary files differ diff --git a/bin/BRServer.dll b/bin/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/bin/BRServer.dll +++ b/bin/BRServer.dll Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/bin/BRServer.DALFactory.dll b/bin/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/bin/BRServer.DALFactory.dll +++ b/bin/BRServer.DALFactory.dll Binary files differ diff --git a/bin/BRServer.DALFactory.pdb b/bin/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/bin/BRServer.DALFactory.pdb +++ b/bin/BRServer.DALFactory.pdb Binary files differ diff --git a/bin/BRServer.IDAL.dll b/bin/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/bin/BRServer.IDAL.dll +++ b/bin/BRServer.IDAL.dll Binary files differ diff --git a/bin/BRServer.IDAL.pdb b/bin/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/bin/BRServer.IDAL.pdb +++ b/bin/BRServer.IDAL.pdb Binary files differ diff --git a/bin/BRServer.Model.dll b/bin/BRServer.Model.dll index 468d516..9536917 100644 --- a/bin/BRServer.Model.dll +++ b/bin/BRServer.Model.dll Binary files differ diff --git a/bin/BRServer.Model.pdb b/bin/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/bin/BRServer.Model.pdb +++ b/bin/BRServer.Model.pdb Binary files differ diff --git a/bin/BRServer.dll b/bin/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/bin/BRServer.dll +++ b/bin/BRServer.dll Binary files differ diff --git a/bin/BRServer.pdb b/bin/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/bin/BRServer.pdb +++ b/bin/BRServer.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/bin/BRServer.DALFactory.dll b/bin/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/bin/BRServer.DALFactory.dll +++ b/bin/BRServer.DALFactory.dll Binary files differ diff --git a/bin/BRServer.DALFactory.pdb b/bin/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/bin/BRServer.DALFactory.pdb +++ b/bin/BRServer.DALFactory.pdb Binary files differ diff --git a/bin/BRServer.IDAL.dll b/bin/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/bin/BRServer.IDAL.dll +++ b/bin/BRServer.IDAL.dll Binary files differ diff --git a/bin/BRServer.IDAL.pdb b/bin/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/bin/BRServer.IDAL.pdb +++ b/bin/BRServer.IDAL.pdb Binary files differ diff --git a/bin/BRServer.Model.dll b/bin/BRServer.Model.dll index 468d516..9536917 100644 --- a/bin/BRServer.Model.dll +++ b/bin/BRServer.Model.dll Binary files differ diff --git a/bin/BRServer.Model.pdb b/bin/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/bin/BRServer.Model.pdb +++ b/bin/BRServer.Model.pdb Binary files differ diff --git a/bin/BRServer.dll b/bin/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/bin/BRServer.dll +++ b/bin/BRServer.dll Binary files differ diff --git a/bin/BRServer.pdb b/bin/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/bin/BRServer.pdb +++ b/bin/BRServer.pdb Binary files differ diff --git a/bin/BRServerTest.exe b/bin/BRServerTest.exe index c969846..0c1f9de 100644 --- a/bin/BRServerTest.exe +++ b/bin/BRServerTest.exe Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/bin/BRServer.DALFactory.dll b/bin/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/bin/BRServer.DALFactory.dll +++ b/bin/BRServer.DALFactory.dll Binary files differ diff --git a/bin/BRServer.DALFactory.pdb b/bin/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/bin/BRServer.DALFactory.pdb +++ b/bin/BRServer.DALFactory.pdb Binary files differ diff --git a/bin/BRServer.IDAL.dll b/bin/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/bin/BRServer.IDAL.dll +++ b/bin/BRServer.IDAL.dll Binary files differ diff --git a/bin/BRServer.IDAL.pdb b/bin/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/bin/BRServer.IDAL.pdb +++ b/bin/BRServer.IDAL.pdb Binary files differ diff --git a/bin/BRServer.Model.dll b/bin/BRServer.Model.dll index 468d516..9536917 100644 --- a/bin/BRServer.Model.dll +++ b/bin/BRServer.Model.dll Binary files differ diff --git a/bin/BRServer.Model.pdb b/bin/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/bin/BRServer.Model.pdb +++ b/bin/BRServer.Model.pdb Binary files differ diff --git a/bin/BRServer.dll b/bin/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/bin/BRServer.dll +++ b/bin/BRServer.dll Binary files differ diff --git a/bin/BRServer.pdb b/bin/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/bin/BRServer.pdb +++ b/bin/BRServer.pdb Binary files differ diff --git a/bin/BRServerTest.exe b/bin/BRServerTest.exe index c969846..0c1f9de 100644 --- a/bin/BRServerTest.exe +++ b/bin/BRServerTest.exe Binary files differ diff --git a/bin/BRServerTest.exe.config b/bin/BRServerTest.exe.config index 915718e..c81d9f8 100644 --- a/bin/BRServerTest.exe.config +++ b/bin/BRServerTest.exe.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/bin/BRServer.DALFactory.dll b/bin/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/bin/BRServer.DALFactory.dll +++ b/bin/BRServer.DALFactory.dll Binary files differ diff --git a/bin/BRServer.DALFactory.pdb b/bin/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/bin/BRServer.DALFactory.pdb +++ b/bin/BRServer.DALFactory.pdb Binary files differ diff --git a/bin/BRServer.IDAL.dll b/bin/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/bin/BRServer.IDAL.dll +++ b/bin/BRServer.IDAL.dll Binary files differ diff --git a/bin/BRServer.IDAL.pdb b/bin/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/bin/BRServer.IDAL.pdb +++ b/bin/BRServer.IDAL.pdb Binary files differ diff --git a/bin/BRServer.Model.dll b/bin/BRServer.Model.dll index 468d516..9536917 100644 --- a/bin/BRServer.Model.dll +++ b/bin/BRServer.Model.dll Binary files differ diff --git a/bin/BRServer.Model.pdb b/bin/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/bin/BRServer.Model.pdb +++ b/bin/BRServer.Model.pdb Binary files differ diff --git a/bin/BRServer.dll b/bin/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/bin/BRServer.dll +++ b/bin/BRServer.dll Binary files differ diff --git a/bin/BRServer.pdb b/bin/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/bin/BRServer.pdb +++ b/bin/BRServer.pdb Binary files differ diff --git a/bin/BRServerTest.exe b/bin/BRServerTest.exe index c969846..0c1f9de 100644 --- a/bin/BRServerTest.exe +++ b/bin/BRServerTest.exe Binary files differ diff --git a/bin/BRServerTest.exe.config b/bin/BRServerTest.exe.config index 915718e..c81d9f8 100644 --- a/bin/BRServerTest.exe.config +++ b/bin/BRServerTest.exe.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/bin/BRServerTest.pdb b/bin/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/bin/BRServerTest.pdb +++ b/bin/BRServerTest.pdb Binary files differ diff --git a/BRServer.BLL/BR.cs b/BRServer.BLL/BR.cs index 918913b..b4af783 100644 --- a/BRServer.BLL/BR.cs +++ b/BRServer.BLL/BR.cs @@ -27,28 +27,29 @@ /// A method to insert a new Adapter /// /// An adapter entity with information about the new adapter - public void insert(List djs) + public void insert(Model.BR br) { - if (djs.Count <= 0) - { - return; - } - IBR dal = DALFactory.BR.Create(); - dal.insert(djs); + dal.insert(br); - } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) + public void insertAlarm(Model.Alarm alarm) { IBR dal = DALFactory.BR.Create(); - dal.updateSequence(sequeceName); + dal.insertAlarm(alarm); + } + + public Model.Config selectConfig(String devcode) + { + IBR dal = DALFactory.BR.Create(); + return dal.selectConfig(devcode); + } + + public void updateConfigStatus(String devcode) + { + IBR dal = DALFactory.BR.Create(); + dal.updateConfigStatus(devcode); } } diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache index 7331402..8936e6f 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.dll b/BRServer.BLL/obj/Debug/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.dll +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.dll Binary files differ diff --git a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/BRServer.BLL/obj/Debug/BRServer.BLL.pdb +++ b/BRServer.BLL/obj/Debug/BRServer.BLL.pdb Binary files differ diff --git a/BRServer.DAL/BR.cs b/BRServer.DAL/BR.cs index f424477..2cd50ab 100644 --- a/BRServer.DAL/BR.cs +++ b/BRServer.DAL/BR.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using MySql.Data.MySqlClient; +using System.Data; namespace BRServer.DAL { @@ -11,36 +12,16 @@ public static readonly string ConnectionStringOrderDistributedTransaction = System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"]; - // Static constants - private const string TABLE_NAME = "BRGDF_DATA"; + private const string SQL_INSERT_ELEC = "insert into data_elec (devcode,voltage1,voltage2,voltage3,voltage4," + +"electricity1,electricity2,electricity3,electricity4,electricity5,electricity6,electricity7,electricity8," + +"electricity9,electricity10,electricity11,electricity12,temperature,humidity,windspeed,uptime)" + +" values (@devcode,@voltage1,@voltage2,@voltage3,@voltage4," + +"@electricity1,@electricity2,@electricity3,@electricity4,@electricity5,@electricity6,@electricity7,@electricity8," + +"@electricity9,@electricity10,@electricity11,@electricity12,@temperature,@humidity,@windspeed,@uptime)"; - private const string COLUMN_DEVCODE = "DEVCODE"; - private const string COLUMN_LOGTIME = "LOGTIME"; - private const string COLUMN_CELL = "CELL"; - private const string COLUMN_VALUE = "OPENING"; - private const string COLUMN_UPTIME = "UPTIME"; - - private const string PARM_DEVCODE = "@DEVCODE"; - private const string PARM_LOGTIME = "@LOGTIME"; - private const string PARM_CELL = "@CELL"; - private const string PARM_VALUE = "@OPENING"; - private const string PARM_UPTIME = "@UPTIME"; - - private const string SQL_INSERT_CJ = "INSERT INTO " + TABLE_NAME - + " (" + COLUMN_DEVCODE + "," - + " " + COLUMN_LOGTIME + "," - + " " + COLUMN_CELL + "," - + " " + COLUMN_VALUE + "," - + " " + COLUMN_UPTIME + ")" - + " VALUES " - + " (" + PARM_DEVCODE + "," - + " " + PARM_LOGTIME + "," - + " " + PARM_CELL + "," - + " " + PARM_VALUE + "," - + " " + PARM_UPTIME + ")"; - - - public void insert(List brs) + private const string SQL_INSERT_ALARM = "insert into alarm_elec (devcode,alarm) values (@devcode,@alarm)"; + + public void insert(Model.BR br) { MySqlTransaction tran = null; using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) @@ -50,22 +31,20 @@ conn.Open(); tran = conn.BeginTransaction(); - foreach (Model.BR br in brs) + if (string.IsNullOrEmpty(br.DEVCODE)) { - if (string.IsNullOrEmpty(br.DEVCODE)) - { - throw new Exception("设备ID为空!"); - } - - MySqlParameter[] parms = GetAdapterParameters(); - SetAdapterParameters(parms, br); - - MySqlCommand cmd = new MySqlCommand(SQL_INSERT_CJ, conn); - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); + throw new Exception("设备ID为空!"); } + MySqlParameter[] parms = GetAdapterParameters(); + SetAdapterParameters(parms, br); + + MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ELEC, conn); + foreach (MySqlParameter pram in parms) + cmd.Parameters.Add(pram); + cmd.ExecuteNonQuery(); + + tran.Commit(); } catch (Exception e) @@ -79,47 +58,6 @@ } } - /** - *sequeceName:需要更新的序列名称 - *key:主键字段名称 - *tableName:表名称 - */ - public void updateSequence(String sequeceName) - { - MySqlTransaction tran = null; - using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) - { - try - { - conn.Open(); - tran = conn.BeginTransaction(); - - String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName; - MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn); - cmd1.ExecuteNonQuery(); - - String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName + - " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")"; - - MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn); - cmd2.ExecuteNonQuery(); - - tran.Commit(); - } - catch (Exception e) - { - if (null != tran) - { - tran.Rollback(); - } - throw (e); - } - } - } - - - - /// /// An internal function to get the database parameters /// @@ -131,11 +69,27 @@ if (parms == null) { parms = new MySqlParameter[]{ - new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255), - new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime), - new MySqlParameter(PARM_CELL, MySqlDbType.VarChar,255), - new MySqlParameter(PARM_VALUE, MySqlDbType.Float,20), - new MySqlParameter(PARM_UPTIME, MySqlDbType.DateTime) + new MySqlParameter("@devcode", MySqlDbType.VarChar, 20), + new MySqlParameter("@voltage1", MySqlDbType.Float), + new MySqlParameter("@voltage2", MySqlDbType.Float), + new MySqlParameter("@voltage3", MySqlDbType.Float), + new MySqlParameter("@voltage4", MySqlDbType.Float), + new MySqlParameter("@electricity1", MySqlDbType.Float), + new MySqlParameter("@electricity2", MySqlDbType.Float), + new MySqlParameter("@electricity3", MySqlDbType.Float), + new MySqlParameter("@electricity4", MySqlDbType.Float), + new MySqlParameter("@electricity5", MySqlDbType.Float), + new MySqlParameter("@electricity6", MySqlDbType.Float), + new MySqlParameter("@electricity7", MySqlDbType.Float), + new MySqlParameter("@electricity8", MySqlDbType.Float), + new MySqlParameter("@electricity9", MySqlDbType.Float), + new MySqlParameter("@electricity10", MySqlDbType.Float), + new MySqlParameter("@electricity11", MySqlDbType.Float), + new MySqlParameter("@electricity12", MySqlDbType.Float), + new MySqlParameter("@temperature", MySqlDbType.Float), + new MySqlParameter("@humidity", MySqlDbType.Float), + new MySqlParameter("@windspeed", MySqlDbType.Float), + new MySqlParameter("@uptime", MySqlDbType.DateTime) }; } @@ -152,41 +106,138 @@ { parms[0].Value = br.DEVCODE; - if (null != br.LOGTIME) + int i = 1; + foreach(float voltage in br.VOLTAGES) { - parms[1].Value = br.LOGTIME; - } - else - { - parms[1].Value = DBNull.Value; + parms[i++].Value = voltage; } - if (null != br.CELL) + int j = 5; + foreach (float electricity in br.ELECTRICITYS) { - parms[2].Value = br.CELL; - } - else - { - parms[2].Value = DBNull.Value; + parms[j++].Value = electricity; } - if (null != br.OPENING) - { - parms[3].Value = br.OPENING; - } - else - { - parms[3].Value = DBNull.Value; - } + parms[17].Value = br.TEMPERATURE; + parms[18].Value = br.HUMIDITY; + parms[19].Value = br.WINDSPEED; + parms[20].Value = br.UPTIME; + } - if (null != br.UPTIME) + + public void insertAlarm(Model.Alarm alarm) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) { - parms[4].Value = br.UPTIME; - } - else - { - parms[4].Value = DBNull.Value; + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(alarm.DEVCODE)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "insert into alarm_elec (devcode,alarm) values (" + + alarm.DEVCODE + ",'" + alarm.ALARM + "')"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } } } + + + public Model.Config selectConfig(String devcode) + { + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + MySqlDataReader reader = null; + + try + { + conn.Open(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "select * from config_elec where status = '0' and devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + reader = cmd.ExecuteReader(); + + Model.Config config = new Model.Config(); + while (reader.Read()) + { + if (reader.HasRows) + { + config.DEVCODE = reader.GetString(1); + config.IP = reader.IsDBNull(2) ? null : reader.GetString(2); + config.PORT = reader.IsDBNull(3) ? (UInt16)0 : reader.GetUInt16(3); + config.INTERVAL = reader.IsDBNull(4) ? (UInt16)0 : reader.GetUInt16(4); + } + } + return config; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + finally + { + reader.Close(); + conn.Close(); + } + } + } + + + public void updateConfigStatus(String devcode) + { + MySqlTransaction tran = null; + using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction)) + { + try + { + conn.Open(); + tran = conn.BeginTransaction(); + + if (string.IsNullOrEmpty(devcode)) + { + throw new Exception("设备ID为空!"); + } + + string sql = "update config_elec set status = '1' where devcode='" + devcode + "'"; + + MySqlCommand cmd = new MySqlCommand(sql, conn); + cmd.ExecuteNonQuery(); + + tran.Commit(); + } + catch (Exception e) + { + if (null != tran) + { + tran.Rollback(); + } + throw (e); + } + } + } + } } diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache index 063f696..6acaddd 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.dll b/BRServer.DAL/obj/Debug/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.dll +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.dll Binary files differ diff --git a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/BRServer.DAL/obj/Debug/BRServer.DAL.pdb +++ b/BRServer.DAL/obj/Debug/BRServer.DAL.pdb Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache index 04b4f9b..ca08218 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.dll Binary files differ diff --git a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb +++ b/BRServer.DALFactory/obj/Debug/BRServer.DALFactory.pdb Binary files differ diff --git a/BRServer.IDAL/IBR.cs b/BRServer.IDAL/IBR.cs index 9f8cf44..92c42d7 100644 --- a/BRServer.IDAL/IBR.cs +++ b/BRServer.IDAL/IBR.cs @@ -5,8 +5,9 @@ { public interface IBR { - void insert(List djs); - void updateSequence(String sequeceName); - //int queryCountByDevAndUpTime(String devCode, DateTime upTime); + void insert(Model.BR br); + void insertAlarm(Model.Alarm alarm); + Model.Config selectConfig(String devcode); + void updateConfigStatus(String devcode); } } diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache index 930f397..de25524 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.dll Binary files differ diff --git a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb +++ b/BRServer.IDAL/obj/Debug/BRServer.IDAL.pdb Binary files differ diff --git a/BRServer.Model/Alarm.cs b/BRServer.Model/Alarm.cs new file mode 100644 index 0000000..82862c2 --- /dev/null +++ b/BRServer.Model/Alarm.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Alarm + { + private string devCode; + private string alarm; + + public string DEVCODE + { + get { return devCode; } + set { devCode = value; } + } + + public string ALARM + { + get { return alarm; } + set { alarm = value; } + } + + } +} diff --git a/BRServer.Model/BR.cs b/BRServer.Model/BR.cs index 9ba29ae..8942e92 100644 --- a/BRServer.Model/BR.cs +++ b/BRServer.Model/BR.cs @@ -7,18 +7,14 @@ { public class BR { - private long dbId; private string devCode; - private DateTime logTime; - private string cell; - private float opening; + private List voltages = new List(); + private List electricitys = new List(); + private float? temperature; + private float? humidity; + private float? windspeed; private DateTime upTime; - public long DBID - { - get { return dbId; } - set { dbId = value; } - } public string DEVCODE { @@ -26,22 +22,34 @@ set { devCode = value; } } - public DateTime LOGTIME + public List VOLTAGES { - get { return logTime; } - set { logTime = value; } + get { return voltages; } + set { voltages = value; } } - public string CELL + public List ELECTRICITYS { - get { return cell; } - set { cell = value; } + get { return electricitys; } + set { electricitys = value; } } - public float OPENING + public float? TEMPERATURE { - get { return opening; } - set { opening = value; } + get { return temperature; } + set { temperature = value; } + } + + public float? HUMIDITY + { + get { return humidity; } + set { humidity = value; } + } + + public float? WINDSPEED + { + get { return windspeed; } + set { windspeed = value; } } public DateTime UPTIME diff --git a/BRServer.Model/BRServer.Model.csproj b/BRServer.Model/BRServer.Model.csproj index 282cd2c..8cc23af 100644 --- a/BRServer.Model/BRServer.Model.csproj +++ b/BRServer.Model/BRServer.Model.csproj @@ -40,7 +40,9 @@ + + diff --git a/BRServer.Model/Config.cs b/BRServer.Model/Config.cs new file mode 100644 index 0000000..2b7de93 --- /dev/null +++ b/BRServer.Model/Config.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer.Model +{ + public class Config + { + private string devcode; + private string ip; + private UInt16 port; + private UInt16 interval; + private bool status; + + public string DEVCODE + { + get { return devcode; } + set { devcode = value; } + } + + public string IP + { + get { return ip; } + set { ip = value; } + } + + public UInt16 PORT + { + get { return port; } + set { port = value; } + } + + public UInt16 INTERVAL + { + get { return interval; } + set { interval = value; } + } + + public bool STATUS + { + get { return status; } + set { status = value; } + } + } +} diff --git a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt index 28abe26..7803ceb 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt +++ b/BRServer.Model/obj/Debug/BRServer.Model.csproj.FileListAbsolute.txt @@ -2,4 +2,3 @@ E:\gwq\BRServer\bin\BRServer.Model.pdb E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.dll E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.pdb -E:\gwq\BRServer\BRServer.Model\obj\Debug\BRServer.Model.csprojResolveAssemblyReference.cache diff --git a/BRServer.Model/obj/Debug/BRServer.Model.dll b/BRServer.Model/obj/Debug/BRServer.Model.dll index 468d516..9536917 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.dll +++ b/BRServer.Model/obj/Debug/BRServer.Model.dll Binary files differ diff --git a/BRServer.Model/obj/Debug/BRServer.Model.pdb b/BRServer.Model/obj/Debug/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/BRServer.Model/obj/Debug/BRServer.Model.pdb +++ b/BRServer.Model/obj/Debug/BRServer.Model.pdb Binary files differ diff --git a/BRServer.suo b/BRServer.suo index 0f63b41..5ae485c 100644 --- a/BRServer.suo +++ b/BRServer.suo Binary files differ diff --git a/BRServer.v12.suo b/BRServer.v12.suo new file mode 100644 index 0000000..5a6d2aa --- /dev/null +++ b/BRServer.v12.suo Binary files differ diff --git a/BRServer/BRServer.csproj b/BRServer/BRServer.csproj index cbdd2ae..f2f5253 100644 --- a/BRServer/BRServer.csproj +++ b/BRServer/BRServer.csproj @@ -61,20 +61,27 @@ - - - + + + + + + + + + + @@ -84,9 +91,12 @@ - - + + + + + diff --git a/BRServer/CasicCmd.cs b/BRServer/CasicCmd.cs index cb72b09..54fe3d3 100644 --- a/BRServer/CasicCmd.cs +++ b/BRServer/CasicCmd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; +using BRServer.Model; namespace BRServer { @@ -26,12 +27,9 @@ case 0: devType = "未知设备"; break; - case 21: - devType = "北燃沉降监测仪"; - break; - case 22: - devType = "北燃轨道阀回讯装置"; - break; + case 27: + devType = "电缆护套接地电流在线监测装置"; + break; default: devType = "undefiend"; break; @@ -119,18 +117,6 @@ return tags; } - private CellTag getCellTag(List tags, CasicSession session) - { - foreach (Tag tag in tags) - { - if (tag != null && tag is CellTag) - { - return (CellTag)tag; - } - } - return null; - } - private SystemDateTag getSystemDateTag(List tags) { foreach (Tag tag in tags) @@ -145,16 +131,6 @@ public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { - //电信平台需返回200响应码 - session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); - session.Close(); - - if (requestInfo.Parameters[0] == "CRCERROR") - { - session.Logger.Error("CRC校验不通过,上传的数据为:" + requestInfo.Parameters[1]); - return; - } - //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; @@ -165,7 +141,6 @@ String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; - String deviceId_Telecom = requestInfo.Parameters[9]; //print the receving data String devType = getDeviceTypeByPdu(pduType); @@ -179,30 +154,57 @@ session.Logger.Info("操作类型:" + operType); session.Logger.Info("序列seq:" + seq); + //判断是返回的设置确认数据帧 + if (operType == "SetResponse") + { + BLL.BR br = BLL.BR.getInstance(); + br.updateConfigStatus(deviceId); + return; + } + + + BR elec = new BR();//设备数据表 + elec.DEVCODE = deviceId; + List tags = this.getTags(settings, session); - CellTag cellTag = this.getCellTag(tags, session); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); try { - //TODO LIST:处理主动上报的数据、参数查、询参数设置 + //TODO LIST:处理主动上报的数据、参数查询、参数设置 TagHandler systemDateHandler = new SystemDateTagHandler(); - TagHandler cellTagHandler = new CellTagHandler(); - TagHandler BRTagHandler = new BRTagHandler(); + TagHandler voltageTagHandler = new VoltageTagHandler(); + TagHandler electricityTagHandler = new ElectricityTagHandler(); + TagHandler tempTagHandler = new TempTagHandler(); + TagHandler humiTagHandler = new HumiTagHandler(); + TagHandler windspeedTagHandler = new WindSpeedTagHandler(); + TagHandler sensorException0TagHandler = new SensorException0TagHandler(); + TagHandler sensorException1TagHandler = new SensorException1TagHandler(); + TagHandler sensorException2TagHandler = new SensorException2TagHandler(); + TagHandler sensorException3TagHandler = new SensorException3TagHandler(); - systemDateHandler.NextHandler = cellTagHandler; - cellTagHandler.NextHandler = BRTagHandler; + systemDateHandler.NextHandler = voltageTagHandler; + voltageTagHandler.NextHandler = electricityTagHandler; + electricityTagHandler.NextHandler = tempTagHandler; + tempTagHandler.NextHandler = humiTagHandler; + humiTagHandler.NextHandler = windspeedTagHandler; + windspeedTagHandler.NextHandler = sensorException0TagHandler; + sensorException0TagHandler.NextHandler = sensorException1TagHandler; + sensorException1TagHandler.NextHandler = sensorException2TagHandler; + sensorException2TagHandler.NextHandler = sensorException3TagHandler; foreach (Tag tag in tags) { //采用责任链的方式来处理各个tag - systemDateHandler.handleTag(tag, deviceId, cellTag, - systemDateTag, session); + systemDateHandler.handleTag(session, tag, elec); } - //回复校时信息 + BLL.BR br = BLL.BR.getInstance(); + br.insert(elec); + + + //回复校时、配置信息 CasicSender sender = new CasicSender(null); - sender.doSendTimeConfig(deviceId, version, devType, session, "3", deviceId_Telecom); + sender.doSendTimeConfig(session, deviceId); } catch (Exception e) { diff --git a/BRServer/CasicReceiveFilter.cs b/BRServer/CasicReceiveFilter.cs new file mode 100644 index 0000000..91a44dd --- /dev/null +++ b/BRServer/CasicReceiveFilter.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SuperSocket.Facility.Protocol; +using SuperSocket.SocketBase.Protocol; +using SuperSocket.Common; + +namespace BRServer +{ + + public class CasicReceiveFilter : FixedHeaderReceiveFilter + { + public CasicReceiveFilter() + : base(4) + { + + } + + protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) + { + int tagLength = (int)header[offset + 2] * 256 + (int)header[offset + 3] - 12; + return tagLength + 14 + (tagLength % 8 == 0 ? 0 : (8 - tagLength % 8)); + } + + + protected override StringRequestInfo ResolveRequestInfo(ArraySegment header, byte[] bodyBuffer, int offset, int length) + { + byte[] tmpHead = header.Array; + byte[] tmpBody = bodyBuffer.CloneRange(offset, length); + + byte[] src = new byte[tmpHead.Length + tmpBody.Length]; + + tmpHead.CopyTo(src, 0); + tmpBody.CopyTo(src, tmpHead.Length); + + String data = BitConverter.ToString(src, 0, src.Length).Replace("-", ""); + //TODO: construct the receving casic data + String preamble = data.Substring(0, 2); + String version = data.Substring(2, 2); + String leng = data.Substring(4, 4); + String deviceId = data.Substring(8, 12); + + String routeFlag = data.Substring(20, 2); + String dstNodeAddr = data.Substring(22, 4); + String pduType = data.Substring(26, 4); + String seq = data.Substring(30, 2); + + //对tag进行TEA解密 + Byte[] dat = new Byte[data.Length / 2 - 18]; + Array.Copy(src, 16, dat, 0, data.Length / 2 - 18); + + TEA.decrypt(ref dat, dat.Length); + String settings = BitConverter.ToString(dat, 0, dat.Length).Replace("-", "").Substring(0, Convert.ToInt32(leng, 16) * 2 - 12 * 2); + + String result = "Casic:" + preamble + "," + version + "," + + leng + "," + deviceId + "," + routeFlag + "," + dstNodeAddr + "," + pduType + "," + + seq + "," + settings; + + BasicRequestInfoParser m_Parser = new BasicRequestInfoParser(":", ","); + return m_Parser.ParseRequestInfo(result); + } + } + +} diff --git a/BRServer/CasicSender.cs b/BRServer/CasicSender.cs index 381267e..d0030d0 100644 --- a/BRServer/CasicSender.cs +++ b/BRServer/CasicSender.cs @@ -11,22 +11,22 @@ /* * 航天二院最新服务器协议 */ - public class CasicSender + public class CasicSender { - private TelecomServer server; + private CasicServer server; - public CasicSender(TelecomServer server) + public CasicSender(CasicServer server) { this.server = server; } - public bool doSendTimeConfig(String devCode, String ver, String typeName, CasicSession session, String flag, String deviceId_Telecom) + public void doSendTimeConfig(CasicSession session, String devCode) { //TODO: construct the receving casic data String preamble = "A3"; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); - String version = ver; + String version = "20"; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = devCode;//6个字节 @@ -38,7 +38,7 @@ btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); - String routeFlag = flag; + String routeFlag = "03"; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = devCode.Substring(8);//2个字节 ** ****** **** @@ -50,24 +50,41 @@ byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2]; //2个字节 - byte[] tag = null; + btPdu[0] = 0x03; + btPdu[1] = 0x9B; - switch (typeName) + + byte[] tempTag = new byte[256];//为了组tag的临时变量 + int flag = 0;//tag中有效字节标识位 + + byte[] timeTag = this.getTimeTag(); + timeTag.CopyTo(tempTag, flag); + flag += timeTag.Length; + + BLL.BR br = BLL.BR.getInstance(); + Model.Config config = br.selectConfig(devCode); + + if (config != null) { - case "北燃沉降监测仪": - btPdu[0] = 0x05; - btPdu[1] = 0x95; - tag = this.getTimeTag(); - break; - case "北燃轨道阀回讯装置": - btPdu[0] = 0x03; - btPdu[1] = 0x96; - tag = this.getTimeTag(); - break; - default: - break; + byte[] ipportTag = this.getIpPortTag(config.IP, config.PORT); + if (ipportTag != null) + { + ipportTag.CopyTo(tempTag, flag); + flag += ipportTag.Length; + } + + byte[] intervalTag = this.getIntervalTag(config.INTERVAL); + if (intervalTag != null) + { + intervalTag.CopyTo(tempTag, flag); + flag += intervalTag.Length; + } } + byte[] tag = new byte[flag]; + Array.Copy(tempTag, 0, tag, 0, flag); + + int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); @@ -105,7 +122,6 @@ result[15] = btSeq; enTag.CopyTo(result, 16); - //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; @@ -113,17 +129,8 @@ result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); - String strBase64Value = Convert.ToBase64String(afcrc); - //TODO:发送数据 - int ret = SendNACommand(deviceId_Telecom, strBase64Value, session); - if (ret != 201) - { - session.Logger.Info("回复校时信息失败,返回的Http状态码:" + ret); - return false; - } - - session.Logger.Info("回复校时信息成功 设备类型:" + typeName + " 设备编号:" + devCode + " 回复校时信息:" + strBase64Value); - return true; + session.Send(afcrc, 0, afcrc.Length); + session.Logger.Info("回复校时信息:" + BitConverter.ToString(afcrc).Replace("-", "")); } @@ -139,44 +146,55 @@ return result; } - private int SendNACommand(String deviceId_Telecom, String strValue, CasicSession session) + private byte[] getIpPortTag(String ip, int port) { - NASDK currsdk = new NASDK(ConfigurationManager.AppSettings["TelecomIP"], - Convert.ToInt32(ConfigurationManager.AppSettings["TelecomPORT"]), - ConfigurationManager.AppSettings["AppID"], - ConfigurationManager.AppSettings["AppKey"], - GetWindowsServiceInstallPath(ConfigurationManager.AppSettings["ServiceName"]) + "\\outgoing.CertwithKey.pkcs12", - "IoM@1234"); - TokenResult token = currsdk.getToken(); - if (token == null) + if (!string.IsNullOrEmpty(ip) && port != 0) { - session.Logger.Error("获取Token失败!"); - return 0; + //修改ip 0x10000022 + byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 }; + byte[] ipValue = System.Text.Encoding.Default.GetBytes(ip); + byte[] ipLen = BitConverter.GetBytes((short)ipValue.Length); + Array.Reverse(ipLen); + + //修改port 0x10000023 + byte[] portOid = { 0x10, 0x00, 0x00, 0x23 }; + byte[] portValue = System.Text.Encoding.Default.GetBytes(port.ToString()); + byte[] portLen = BitConverter.GetBytes((short)portValue.Length); + Array.Reverse(portLen); + + byte[] tag = new byte[4 + 2 + ipValue.Length + 4 + 2 + portValue.Length]; + + ipOid.CopyTo(tag, 0); + ipLen.CopyTo(tag, 4); + ipValue.CopyTo(tag, 6); + + portOid.CopyTo(tag, 6 + ipValue.Length); + portLen.CopyTo(tag, 10 + ipValue.Length); + portValue.CopyTo(tag, 12 + ipValue.Length); + + return tag; } - string strToken = token.accessToken; - CommandPara cp = new CommandPara(); - cp.paraName = "Value"; - cp.paraValue = strValue; - - int result = currsdk.sendCommand(strToken, deviceId_Telecom, null, "Config", "Config", cp,session); - return result; + return null; } - /// - /// 获取服务安装路径 - /// - /// - /// - public static string GetWindowsServiceInstallPath(string ServiceName) + private byte[] getIntervalTag(int interval) { - string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName; - string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString(); - //替换掉双引号 - path = path.Replace("\"", string.Empty); + if (interval != 0) + { + //上传周期 + byte[] tag = { 0x10, 0x00, 0x00, 0x62, + 0x00, 0x02, + 0x00, 0x00 }; - FileInfo fi = new FileInfo(path); - return fi.Directory.ToString(); + byte[] value = BitConverter.GetBytes(interval); + tag[6] = value[1]; + tag[7] = value[0]; + + return tag; + } + + return null; } } diff --git a/BRServer/CasicServer.cs b/BRServer/CasicServer.cs new file mode 100644 index 0000000..a17fe12 --- /dev/null +++ b/BRServer/CasicServer.cs @@ -0,0 +1,14 @@ +using SuperSocket.SocketBase; +using SuperSocket.SocketBase.Protocol; +using System.Text; + +namespace BRServer +{ + public class CasicServer : AppServer + { + public CasicServer() + : base(new DefaultReceiveFilterFactory()) + { + } + } +} diff --git a/BRServer/DefaultTagHandler.cs b/BRServer/DefaultTagHandler.cs index be13008..650a86f 100644 --- a/BRServer/DefaultTagHandler.cs +++ b/BRServer/DefaultTagHandler.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Collections; +using BRServer.Model; namespace BRServer { @@ -13,38 +15,9 @@ } //TODO LIST:默认打印出来未处理的tag信息 - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session) + public override void execute(CasicSession session, Tag tag, BR br) { - switch(tag.Oid) - { - case "10000022": - //TODO LIST:处理ip的逻辑 - String ad_ip = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); - break; - case "10000023": - //TODO LIST:处理端口的逻 - String ad_port = getInfoFromStrEncoding(tag); - session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); - break; - default: - session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); - break; - } - - } - - //字符串最后结尾追加了一个 - private String getInfoFromStrEncoding(Tag tag) - { - byte[] src = new byte[tag.Len-1]; - for (int j = 0; j < tag.Len-1; ) - { - src[j] = byte.Parse(tag.DataValue.Substring(j, 2), System.Globalization.NumberStyles.HexNumber); - j = j + 2; - } - return Encoding.ASCII.GetString(src, 0, src.Length); + session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); } } } diff --git a/BRServer/ElectricityTagHandler.cs b/BRServer/ElectricityTagHandler.cs new file mode 100644 index 0000000..b3fc390 --- /dev/null +++ b/BRServer/ElectricityTagHandler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + + +namespace BRServer +{ + public class ElectricityTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 14 ? true : false; + } + + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float elec = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(elec)) + { + br.ELECTRICITYS.Add(null); + } + else + { + br.ELECTRICITYS.Add(elec); + } + + session.Logger.Info("电流数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + elec); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/HumiTagHandler.cs b/BRServer/HumiTagHandler.cs new file mode 100644 index 0000000..f0e686b --- /dev/null +++ b/BRServer/HumiTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class HumiTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 17 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float humi = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(humi)) + { + br.HUMIDITY = null; + } + else + { + br.HUMIDITY = humi; + } + + session.Logger.Info("湿度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + humi); + + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/SensorException0Tag.cs b/BRServer/SensorException0Tag.cs new file mode 100644 index 0000000..e20dd39 --- /dev/null +++ b/BRServer/SensorException0Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException0Tag:Tag + { + public static String SENSOR_EXCEP0_TAG_OID = "60000009"; + + public int state; + + public SensorException0Tag() + { + + } + + public SensorException0Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException0TagHandler.cs b/BRServer/SensorException0TagHandler.cs new file mode 100644 index 0000000..cb9d5e9 --- /dev/null +++ b/BRServer/SensorException0TagHandler.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using log4net.Filter; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException0TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException0Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br) + { + SensorException0Tag sensorException0 = tag as SensorException0Tag; + int state = sensorException0.state; + + session.Logger.Info("传感器1上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器1故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器1未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException1Tag.cs b/BRServer/SensorException1Tag.cs new file mode 100644 index 0000000..a45918c --- /dev/null +++ b/BRServer/SensorException1Tag.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException1Tag:Tag + { + public static String SENSOR_EXCEP1_TAG_OID = "6000000A"; + + public int state; + + public SensorException1Tag() + { + + } + + public SensorException1Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } +} diff --git a/BRServer/SensorException1TagHandler.cs b/BRServer/SensorException1TagHandler.cs new file mode 100644 index 0000000..e57c4d4 --- /dev/null +++ b/BRServer/SensorException1TagHandler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + class SensorException1TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException1Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException1Tag sensorException1 = tag as SensorException1Tag; + int state = sensorException1.state; + + session.Logger.Info("传感器2上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器2故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器2未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + + } +} diff --git a/BRServer/SensorException2Tag.cs b/BRServer/SensorException2Tag.cs new file mode 100644 index 0000000..275fd54 --- /dev/null +++ b/BRServer/SensorException2Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException2Tag:Tag + { + public static String SENSOR_EXCEP2_TAG_OID = "6000000B"; + + public int state; + + public SensorException2Tag() + { + + } + + public SensorException2Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException2TagHandler.cs b/BRServer/SensorException2TagHandler.cs new file mode 100644 index 0000000..b60d74e --- /dev/null +++ b/BRServer/SensorException2TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException2TagHandler:TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException2Tag ? true : false; + } + + public override void execute(CasicSession session,Tag tag, BR br ) + { + SensorException2Tag sensorException2 = tag as SensorException2Tag; + int state = sensorException2.state; + + session.Logger.Info("传感器3上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器3故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器3未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SensorException3Tag.cs b/BRServer/SensorException3Tag.cs new file mode 100644 index 0000000..8b50b44 --- /dev/null +++ b/BRServer/SensorException3Tag.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BRServer +{ + public class SensorException3Tag:Tag + { + public static String SENSOR_EXCEP3_TAG_OID = "6000000C"; + + public int state; + + public SensorException3Tag() + { + + } + + public SensorException3Tag(String oid, int len, String dataValue) + : base(oid, len, dataValue) + { + state = Int32.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); + } + } + +} diff --git a/BRServer/SensorException3TagHandler.cs b/BRServer/SensorException3TagHandler.cs new file mode 100644 index 0000000..b5ac55a --- /dev/null +++ b/BRServer/SensorException3TagHandler.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class SensorException3TagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + return tag is SensorException3Tag ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + SensorException3Tag sensorException3 = tag as SensorException3Tag; + int state = sensorException3.state; + + session.Logger.Info("传感器4上传容错信息:oid:" + tag.Oid + ";value:" + state); + + Alarm alarm = new Alarm(); + alarm.DEVCODE = br.DEVCODE; + if (state == 1) + { + alarm.ALARM = "传感器4故障"; + } + else if (state == 0)//正常 + { + return; + } + else + { + alarm.ALARM = "传感器4未知异常"; + } + + BLL.BR b = BLL.BR.getInstance(); + b.insertAlarm(alarm); + + } + } +} diff --git a/BRServer/SystemDateTagHandler.cs b/BRServer/SystemDateTagHandler.cs index 9e87ad3..187b9e4 100644 --- a/BRServer/SystemDateTagHandler.cs +++ b/BRServer/SystemDateTagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -12,15 +13,15 @@ return tag is SystemDateTag ? true : false; } - public override void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag0,CasicSession session) + public override void execute(CasicSession session,Tag tag, BR br) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; - //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + " 系统日期:" + systemDateTag.CollectDate); + + br.UPTIME = Convert.ToDateTime(systemDateTag.CollectDate); } } } diff --git a/BRServer/TagFactory.cs b/BRServer/TagFactory.cs index 56fed87..ae926ad 100644 --- a/BRServer/TagFactory.cs +++ b/BRServer/TagFactory.cs @@ -17,10 +17,22 @@ else if (oid == SystemDateTag.SYSTEM_DATE_OID) { tag = new SystemDateTag(oid, len, value); - } - else if (oid == CellTag.CELL_TAG_OID) + } + else if (oid == SensorException0Tag.SENSOR_EXCEP0_TAG_OID) { - tag = new CellTag(oid, len, value); + tag = new SensorException0Tag(oid, len, value); + } + else if (oid == SensorException1Tag.SENSOR_EXCEP1_TAG_OID) + { + tag = new SensorException1Tag(oid, len, value); + } + else if (oid == SensorException2Tag.SENSOR_EXCEP2_TAG_OID) + { + tag = new SensorException2Tag(oid, len, value); + } + else if (oid == SensorException3Tag.SENSOR_EXCEP3_TAG_OID) + { + tag = new SensorException3Tag(oid, len, value); } else { diff --git a/BRServer/TagHandler.cs b/BRServer/TagHandler.cs index 87b0090..b9b523a 100644 --- a/BRServer/TagHandler.cs +++ b/BRServer/TagHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using BRServer.Model; namespace BRServer { @@ -15,34 +16,30 @@ set { nextHandler = value; } } - public void handleTag(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag,CasicSession session) + public void handleTag(CasicSession session, Tag tag, BR br) { if (this.isThisTag(tag)) { //处理当前逻辑 - this.execute(tag, devCode, cellTag, systemDateTag, session); + this.execute(session, tag, br); } else { if (nextHandler != null) { - nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.handleTag(session, tag, br); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); - nextHandler.execute(tag, devCode, cellTag, systemDateTag, - session); + nextHandler.execute(session, tag, br); } } } public abstract bool isThisTag(Tag tag); - public abstract void execute(Tag tag, String devCode, CellTag cellTag, - SystemDateTag systemDateTag, CasicSession session); + public abstract void execute(CasicSession session, Tag tag, BR br); } } diff --git a/BRServer/TempTagHandler.cs b/BRServer/TempTagHandler.cs new file mode 100644 index 0000000..672e572 --- /dev/null +++ b/BRServer/TempTagHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class TempTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 8 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float temp = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(temp)) + { + br.TEMPERATURE = null; + } + else + { + br.TEMPERATURE = temp; + } + + session.Logger.Info("温度数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + temp); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/VoltageTagHandler.cs b/BRServer/VoltageTagHandler.cs new file mode 100644 index 0000000..da632e6 --- /dev/null +++ b/BRServer/VoltageTagHandler.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class VoltageTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 15 ? true : false; + } + + public override void execute(CasicSession session,Tag tag,BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float voltage = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(voltage)) + { + br.VOLTAGES.Add(null); + } + else + { + br.VOLTAGES.Add(voltage); + } + + session.Logger.Info("电压数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + voltage); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + } +} diff --git a/BRServer/WindSpeedTagHandler.cs b/BRServer/WindSpeedTagHandler.cs new file mode 100644 index 0000000..d305b3a --- /dev/null +++ b/BRServer/WindSpeedTagHandler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using BRServer.Model; + +namespace BRServer +{ + public class WindSpeedTagHandler : TagHandler + { + public override bool isThisTag(Tag tag) + { + if (!(tag is UploadTag)) + { + return false; + } + + UploadTag uploadTag = tag as UploadTag; + + return uploadTag.BizType == 20 ? true : false; + } + + public override void execute(CasicSession session, Tag tag, BR br) + { + //TODO LIST:解析数据,保存数据 + UploadTag BRTag = tag as UploadTag; + int itv = BRTag.CollectInter; + String collecTime = BRTag.CollectTime; + int len = BRTag.Len; + String dataValue = BRTag.DataValue; + + float windspeed = strHexToFloat(dataValue.Substring(0, 8)); + if (float.IsNaN(windspeed)) + { + br.WINDSPEED = null; + } + else + { + br.WINDSPEED = windspeed; + } + + session.Logger.Info("风速数据上传TAG:oid:" + BRTag.Oid + " 采集间隔: " + + itv + " 采集时间:" + collecTime + " 上传数值:" + windspeed); + } + + //网络序列转float + private float strHexToFloat(String src) + { + if (src.Length != 8) + return 0; + + byte[] lBt ={ + byte.Parse(src.Substring(0,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(2,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(4,2),System.Globalization.NumberStyles.HexNumber), + byte.Parse(src.Substring(6,2),System.Globalization.NumberStyles.HexNumber) + }; + float ss = BitConverter.ToSingle(lBt, 0); + return ss; + + } + + } +} diff --git a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache index 6731e8d..163ea86 100644 --- a/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache +++ b/BRServer/obj/Debug/BRServer.csprojResolveAssemblyReference.cache Binary files differ diff --git a/BRServer/obj/Debug/BRServer.dll b/BRServer/obj/Debug/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/BRServer/obj/Debug/BRServer.dll +++ b/BRServer/obj/Debug/BRServer.dll Binary files differ diff --git a/BRServer/obj/Debug/BRServer.pdb b/BRServer/obj/Debug/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/BRServer/obj/Debug/BRServer.pdb +++ b/BRServer/obj/Debug/BRServer.pdb Binary files differ diff --git a/BRServerTest/App.config b/BRServerTest/App.config index 915718e..c81d9f8 100644 --- a/BRServerTest/App.config +++ b/BRServerTest/App.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt index e6df40c..1a3137f 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt +++ b/BRServerTest/obj/x86/Debug/BRServerTest.csproj.FileListAbsolute.txt @@ -1,6 +1,6 @@ -E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache E:\gwq\BRServer\bin\BRServerTest.exe.config E:\gwq\BRServer\bin\BRServerTest.exe E:\gwq\BRServer\bin\BRServerTest.pdb E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.exe E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.pdb +E:\gwq\BRServer\BRServerTest\obj\x86\Debug\BRServerTest.csprojResolveAssemblyReference.cache diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.exe b/BRServerTest/obj/x86/Debug/BRServerTest.exe index c969846..0c1f9de 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.exe +++ b/BRServerTest/obj/x86/Debug/BRServerTest.exe Binary files differ diff --git a/BRServerTest/obj/x86/Debug/BRServerTest.pdb b/BRServerTest/obj/x86/Debug/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/BRServerTest/obj/x86/Debug/BRServerTest.pdb +++ b/BRServerTest/obj/x86/Debug/BRServerTest.pdb Binary files differ diff --git a/bin/BRServer.BLL.dll b/bin/BRServer.BLL.dll index ef3bd34..beb763b 100644 --- a/bin/BRServer.BLL.dll +++ b/bin/BRServer.BLL.dll Binary files differ diff --git a/bin/BRServer.BLL.pdb b/bin/BRServer.BLL.pdb index 5a110ce..2294208 100644 --- a/bin/BRServer.BLL.pdb +++ b/bin/BRServer.BLL.pdb Binary files differ diff --git a/bin/BRServer.DAL.dll b/bin/BRServer.DAL.dll index 2dda937..c0c01f2 100644 --- a/bin/BRServer.DAL.dll +++ b/bin/BRServer.DAL.dll Binary files differ diff --git a/bin/BRServer.DAL.pdb b/bin/BRServer.DAL.pdb index 93e1467..d0cda71 100644 --- a/bin/BRServer.DAL.pdb +++ b/bin/BRServer.DAL.pdb Binary files differ diff --git a/bin/BRServer.DALFactory.dll b/bin/BRServer.DALFactory.dll index a4b423a..887458a 100644 --- a/bin/BRServer.DALFactory.dll +++ b/bin/BRServer.DALFactory.dll Binary files differ diff --git a/bin/BRServer.DALFactory.pdb b/bin/BRServer.DALFactory.pdb index a32c409..cc2e47d 100644 --- a/bin/BRServer.DALFactory.pdb +++ b/bin/BRServer.DALFactory.pdb Binary files differ diff --git a/bin/BRServer.IDAL.dll b/bin/BRServer.IDAL.dll index f2a3bd7..284341e 100644 --- a/bin/BRServer.IDAL.dll +++ b/bin/BRServer.IDAL.dll Binary files differ diff --git a/bin/BRServer.IDAL.pdb b/bin/BRServer.IDAL.pdb index b0efdbc..8bd983a 100644 --- a/bin/BRServer.IDAL.pdb +++ b/bin/BRServer.IDAL.pdb Binary files differ diff --git a/bin/BRServer.Model.dll b/bin/BRServer.Model.dll index 468d516..9536917 100644 --- a/bin/BRServer.Model.dll +++ b/bin/BRServer.Model.dll Binary files differ diff --git a/bin/BRServer.Model.pdb b/bin/BRServer.Model.pdb index 3ba05f3..4475a72 100644 --- a/bin/BRServer.Model.pdb +++ b/bin/BRServer.Model.pdb Binary files differ diff --git a/bin/BRServer.dll b/bin/BRServer.dll index 13bc7bd..ceb528b 100644 --- a/bin/BRServer.dll +++ b/bin/BRServer.dll Binary files differ diff --git a/bin/BRServer.pdb b/bin/BRServer.pdb index 619b4d5..f3df4ac 100644 --- a/bin/BRServer.pdb +++ b/bin/BRServer.pdb Binary files differ diff --git a/bin/BRServerTest.exe b/bin/BRServerTest.exe index c969846..0c1f9de 100644 --- a/bin/BRServerTest.exe +++ b/bin/BRServerTest.exe Binary files differ diff --git a/bin/BRServerTest.exe.config b/bin/BRServerTest.exe.config index 915718e..c81d9f8 100644 --- a/bin/BRServerTest.exe.config +++ b/bin/BRServerTest.exe.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file diff --git a/bin/BRServerTest.pdb b/bin/BRServerTest.pdb index 3e417af..5e229ec 100644 --- a/bin/BRServerTest.pdb +++ b/bin/BRServerTest.pdb Binary files differ diff --git a/bin/BRServerTest.vshost.exe.config b/bin/BRServerTest.vshost.exe.config index 915718e..c81d9f8 100644 --- a/bin/BRServerTest.vshost.exe.config +++ b/bin/BRServerTest.vshost.exe.config @@ -5,11 +5,11 @@ - + - + @@ -17,10 +17,6 @@ - - - - - + \ No newline at end of file