Newer
Older
BRServer / BRServer.DAL / BR.cs
root on 30 Mar 2020 9 KB elec first commit
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.Data;

namespace BRServer.DAL
{
    public class BR : IDAL.IBR
    {
        public static readonly string ConnectionStringOrderDistributedTransaction =
            System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"];

        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 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))
            {
                try
                {
                    conn.Open();
                    tran = conn.BeginTransaction();

                    if (string.IsNullOrEmpty(br.DEVCODE))
                    {
                        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)
                {
                    if (null != tran)
                    {
                        tran.Rollback();
                    }
                    throw (e);
                }
            }
        }

        /// <summary>
        /// An internal function to get the database parameters
        /// </summary>
        /// <returns>Parameter array</returns>
        private static MySqlParameter[] GetAdapterParameters()
        {
            MySqlParameter[] parms = null;//OracleHelperParameterCache.GetCachedParameterSet(SQL_INSERT_WS, "INSERT:UPDATE");

            if (parms == null)
            {
                parms = new MySqlParameter[]{					                            
                                        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)
                };
            }

            return parms;
        }


        /// <summary>
        /// An internal function to bind values parameters for insert
        /// </summary>
        /// <param name="parms">Database parameters</param>
        /// <param name="RQ">Values to bind to parameters</param>
        private void SetAdapterParameters(MySqlParameter[] parms, Model.BR br)
        {
            parms[0].Value = br.DEVCODE;

            int i = 1;
            foreach(float voltage in br.VOLTAGES)
            {
                parms[i++].Value = voltage;
            }

            int j = 5;
            foreach (float electricity in br.ELECTRICITYS)
            {
                parms[j++].Value = electricity;
            }

            parms[17].Value = br.TEMPERATURE;
            parms[18].Value = br.HUMIDITY;
            parms[19].Value = br.WINDSPEED;
            parms[20].Value = br.UPTIME;
        }


        public void insertAlarm(Model.Alarm alarm)
        {
            MySqlTransaction tran = null;
            using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction))
            {
                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);
                }
            }
        }

    }
}