/// <summary>
 /// 修改VCU相关信息
 /// </summary>
 /// <param name="item"></param>
 public void UpdateVCUconfig(VCUconfig item)
 {
     try
     {
         string sql    = string.Format("Update \"GAC_New_VCU\".\"T_VCUConfig\"  set mtoc = '{0}' ,drivername= '{1}',driverpath= '{2}',binname= '{3}',binpath= '{4}',calname= '{5}',calpath= '{6}',softwareversion= '{7}',\"elementNum\"= '{8}',\"hardwarecode\"= '{9}' ,\"HW\"= '{10}',\"SW\"= '{11}' where id = {12};", item.MTOC, item.DriverName, item.DriverPath, item.BinName, item.BinPath, item.CalName, item.CalPath, item.SoftWareVersion, item.ElementNum, item.HardWareCode, item.HW, item.SW, item.Id);
         int    result = PostgresHelper.ExecuteNonQuery(this.connectionString, CommandType.Text, sql);
     }
     catch (Exception ex)
     {
         logger.Error(ex.Message + "***" + ex.StackTrace);
     }
 }
 /// <summary>
 /// 删除VCU配置信息
 /// </summary>
 /// <param name="item"></param>
 public void DeleteVCUconfig(VCUconfig item)
 {
     try
     {
         string sql    = string.Format("delete from \"GAC_New_VCU\".\"T_VCUConfig\" where id = {0}", item.Id);
         int    result = PostgresHelper.ExecuteNonQuery(this.connectionString, CommandType.Text, sql);
     }
     catch (Exception ex)
     {
         logger.Error(ex.Message + "***" + ex.StackTrace);
     }
 }
 /// <summary>
 /// 保存VCU相关信息
 /// </summary>
 /// <param name="item"></param>
 public void SaveVCUconfig(VCUconfig item)
 {
     try
     {
         string sql = string.Format("INSERT INTO  \"GAC_New_VCU\".\"T_VCUConfig\"(mtoc,drivername,driverpath,binname,binpath,calname,calpath,softwareversion,hardwarecode,\"elementNum\",\"HW\",\"SW\",\"sign\") VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}');",
                                    item.MTOC, item.DriverName, item.DriverPath, item.BinName, item.BinPath, item.CalName, item.CalPath, item.SoftWareVersion, item.HardWareCode, item.ElementNum, item.HW, item.SW, item.Sign);
         int result = PostgresHelper.ExecuteNonQuery(this.connectionString, CommandType.Text, sql);
     }
     catch (Exception ex)
     {
         logger.Error(ex.Message + "***" + ex.StackTrace);
     }
 }
        /// <summary>
        /// 数据上传
        /// </summary>
        /// <param name="obj"></param>
        public void Upload_Timer()
        {
            if (!canUse_Upload)
            {
                return;
            }
            else
            {
                lock (olock_Upload)
                {
                    if (canUse_Upload)
                    {
                        canUse_Upload = false;
                    }
                    else
                    {
                        return;
                    }
                }
            }

            try
            {
                string    localSql = "select * from T_Result where uploadsign=0";
                DataTable dt       = PostgresHelper.ExecuteDataTable(this.ConnectionString, CommandType.Text, localSql);

                foreach (DataRow item in dt.Rows)
                {
                    //上传数据
                    string sql = string.Format("INSERT INTO T_Upload_TcuData(cartype, conditioncode, crc1, crc2, softwareversion, softwarecode, testtime) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}');", item["CarType"].ToString(), item["ConditionCode"].ToString(), item["CRC1"].ToString(), item["CRC2"].ToString(), item["SoftWareVersion"].ToString(), item["SoftWareCode"].ToString(), item["testtime"].ToString());

                    int result = SQLServerHelper.ExecuteNonQuery(this.MESCnnStr, CommandType.Text, sql);

                    //把上传标识uploadsign改为1
                    if (result > 0)
                    {
                        string updateSql = string.Format("update T_Result set UploadSign = 1 where id ={0}", Convert.ToInt32(item["id"]));
                        PostgresHelper.ExecuteNonQuery(this.connectionString, CommandType.Text, updateSql);
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message + "***" + ex.StackTrace);
            }
        }
        /// <summary>
        /// 删除VIN_MTOC码
        /// </summary>
        public void DeleteVIN_MTOC()
        {
            OdbcConnection conn = PostgresHelper.GetOdbcConnection(this.connectionString);

            try
            {
                PostgresHelper.CheckConnection(conn);
                string sql = string.Format("DELETE FROM \"GAC_New_VCU\".\"VIN_MTOC\"");
                PostgresHelper.ExecuteNonQuery(conn, CommandType.Text, sql);
            }
            catch (Exception ex)
            {
                logger.Info(ex.Message + "***" + ex.StackTrace);
            }
            finally
            {
                PostgresHelper.CheckCloseConneciton(conn);
            }
        }
        /// <summary>
        /// 插入TPMSCode
        /// </summary>
        /// <returns></returns>
        public int InsertTPMSCode(string carType, string canind, string baud, string sendAddress, string responseAddress)
        {
            OdbcConnection conn   = PostgresHelper.GetOdbcConnection(this.connectionString);
            int            result = -1;

            try
            {
                string sql = string.Format("INSERT INTO \"GAC_New_VCU\".\"T_TPMSCodeList\"(\"CarType\", \"CANIND\", \"Baud\", \"SendAddress\",\"ResponseAddress\") VALUES ('{0}', '{1}', '{2}', '{3}', '{4}');", carType, canind, baud, sendAddress, responseAddress);
                result = PostgresHelper.ExecuteNonQuery(conn, CommandType.Text, sql);
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message + "***" + ex.StackTrace);
            }
            finally
            {
                PostgresHelper.CheckCloseConneciton(conn);
            }

            return(result);
        }
        /// <summary>
        /// 更新RunParam
        /// </summary>
        /// <param name="id"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public int UpdateRunParam(string id, string value)
        {
            OdbcConnection conn   = PostgresHelper.GetOdbcConnection(this.connectionString);
            int            result = -1;

            try
            {
                string sql = string.Format("UPDATE \"GAC_New_VCU\".\"T_RunParam\" SET \"keyvalue\"='{0}' WHERE ID = '{1}';", value, id);
                result = PostgresHelper.ExecuteNonQuery(conn, CommandType.Text, sql);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                PostgresHelper.CheckCloseConneciton(conn);
            }

            return(result);
        }
        /// <summary>
        /// 修改当前检测VCU的状态
        /// </summary>
        /// <param name="state"></param>
        public void ChangeState(bool result, string vin)
        {
            OdbcConnection conn = PostgresHelper.GetOdbcConnection(this.connectionString);

            try
            {
                string state = (result == true) ? "2" : "1";
                PostgresHelper.CheckConnection(conn);
                string sql = string.Format("update \"GAC_New_VCU\".\"T_MTOC\" set \"state\"='" + state + "' where \"vin\"='" + vin + "'");
                PostgresHelper.ExecuteNonQuery(conn, CommandType.Text, sql);
                logger.Info(vin + "更新写入状态" + state + "成功!");
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message);
            }
            finally
            {
                PostgresHelper.CheckCloseConneciton(conn);
            }
        }
        /// <summary>
        /// 更新流程
        /// </summary>
        /// <param name="flowName"></param>
        /// <param name="sendCmd"></param>
        /// <param name="receiveCmd"></param>
        /// <param name="enable"></param>
        /// <param name="carType"></param>
        /// <param name="sleepTime"></param>
        /// <param name="receiveNum"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public int UpdateDefineFlow(string flowName, string sendCmd, string receiveCmd, string enable, string sleepTime, string receiveNum, string id)
        {
            OdbcConnection conn   = PostgresHelper.GetOdbcConnection(this.connectionString);
            int            result = -1;

            try
            {
                PostgresHelper.CheckConnection(conn);
                string sql = string.Format("UPDATE \"GAC_New_VCU\".\"T_DefineFlow\" SET \"Flowname\"='{0}', \"SendCmd\"='{1}', \"ReceiveCmd\"='{2}', \"Enabled\"='{3}', \"CarType\"='{4}', \"SleepTime\"='{5}', \"ReceiveNum\"='{6}' WHERE \"ID\"='{7}'", flowName, sendCmd, receiveCmd, enable, sleepTime, receiveNum, id);

                result = PostgresHelper.ExecuteNonQuery(conn, CommandType.Text, sql);
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message + "***" + ex.StackTrace);
            }
            finally
            {
                PostgresHelper.CheckCloseConneciton(conn);
            }

            return(result);
        }
        /// <summary>
        /// 删除TPMS特制码
        /// </summary>
        /// <returns></returns>
        public int DeleteTPMSCode(string id)
        {
            OdbcConnection conn   = PostgresHelper.GetOdbcConnection(this.connectionString);
            int            result = -1;

            try
            {
                PostgresHelper.CheckConnection(conn);

                string sql = string.Format("DELETE FROM \"GAC_New_VCU\".\"T_TPMSCodeList\" WHERE \"ID\" = '{0}';", id);
                result = PostgresHelper.ExecuteNonQuery(conn, CommandType.Text, sql);
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message + "***" + ex.StackTrace);
            }
            finally
            {
                PostgresHelper.CheckCloseConneciton(conn);
            }

            return(result);
        }
        /// <summary>
        /// 保存到本地数据库
        /// </summary>
        /// <param name="car"></param>
        public int SaveLocalResult(string element, bool state, string vin, string driver, string write, string cal)
        {
            int    result = 0;
            string sql    = string.Empty;

            try
            {
                sql = string.Format("select * from \"GAC_New_VCU\".\"T_VCUConfig\" where \"mtoc\" in (select \"mtoc\" from \"GAC_New_VCU\".\"T_MTOC\" where \"vin\"='" + vin + "')");
                DataTable exist = PostgresHelper.ExecuteDataTable(this.connectionString, CommandType.Text, sql);
                if (exist.Rows.Count != 0)
                {
                    string mtoc         = exist.Rows[0]["mtoc"].ToString();
                    string flashBin     = exist.Rows[0]["drivername"].ToString();
                    string writeBin     = exist.Rows[0]["binname"].ToString();
                    string calBin       = exist.Rows[0]["calname"].ToString();
                    string elementCode  = exist.Rows[0]["elementNum"].ToString();
                    string softwareCode = exist.Rows[0]["softwareversion"].ToString();
                    string sign         = exist.Rows[0]["sign"].ToString();
                    int    teststate    = (state) ? 2 : 1;
                    int    isprint      = (state) ? 1 : 0;
                    sql = string.Format("INSERT INTO \"GAC_New_VCU\".\"T_Result\"(vin, mtoc, \"flashBin\", \"writeBin\", \"calBin\",softwareversion, testtime, teststate,isprint,\"tracyCode\",\"sign\") VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}');", vin, mtoc, flashBin, writeBin, calBin, softwareCode
                                        , DateTime.Now, teststate, isprint, element, sign);
                }

                else
                {
                    sql = string.Format("select * from \"GAC_New_VCU\".\"T_MTOC\" where \"vin\"= '" + vin + "'");
                    DataTable dtVIN = PostgresHelper.ExecuteDataTable(this.connectionString, CommandType.Text, sql);
                    if (dtVIN.Rows.Count != 0)
                    {
                        sql = string.Format("select * from \"GAC_New_VCU\".\"T_VCUConfig\" where \"mtoc\"='" + dtVIN.Rows[0]["mtoc"].ToString() + "'");
                        DataTable save = PostgresHelper.ExecuteDataTable(this.connectionString, CommandType.Text, sql);
                        if (save.Rows.Count != 0)
                        {
                            string mtoc         = save.Rows[0]["mtoc"].ToString();
                            string flashBin     = driver;
                            string writeBin     = write;
                            string calBin       = cal;
                            string elementCode  = save.Rows[0]["elementNum"].ToString();
                            string softwareCode = save.Rows[0]["softwareversion"].ToString();
                            string sign         = save.Rows[0]["sign"].ToString();
                            int    teststate    = (state) ? 2 : 1;
                            int    isprint      = (state) ? 1 : 0;
                            sql = string.Format("INSERT INTO \"GAC_New_VCU\".\"T_Result\"(vin, mtoc, \"flashBin\", \"writeBin\", \"calBin\",softwareversion, testtime, teststate,isprint,\"tracyCode\",\"sign\") VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}');", vin, mtoc, flashBin, writeBin, calBin, softwareCode
                                                , DateTime.Now, teststate, isprint, element, sign);
                        }
                    }
                    else
                    {
                        string flashBin  = driver;
                        string writeBin  = write;
                        string calBin    = cal;
                        int    teststate = (state) ? 2 : 1;
                        int    isprint   = (state) ? 1 : 0;
                        sql = string.Format("INSERT INTO \"GAC_New_VCU\".\"T_Result\"(vin,\"flashBin\", \"writeBin\", \"calBin\",testtime, teststate,isprint,\"tracyCode\") VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}');", vin, flashBin, writeBin, calBin, DateTime.Now, teststate, isprint, element);
                    }
                }
                result = PostgresHelper.ExecuteNonQuery(this.connectionString, CommandType.Text, sql);
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message + "***" + ex.StackTrace);
            }
            return(result);
        }
        /// <summary>
        /// 获取MTOC码和对应写入的bin文件
        /// </summary>
        /// <param name="element"></param>
        public string GetMTOC(string element, string vincode, VCUconfig config)
        {
            OdbcConnection conn = PostgresHelper.GetOdbcConnection(this.connectionString);
            string         res  = string.Empty;

            try
            {
                this.vin = vincode;
                PostgresHelper.CheckConnection(conn);
                //先查找第一个写入状态为-1的件,插入零件号并获取MTOC码和id
                string mtoc   = string.Empty;
                int    result = -1;
                string sql    = string.Empty;
                sql = string.Format("select * from \"GAC_New_VCU\".\"T_MTOC\" where \"vin\"='" + vincode + "'");
                DataTable dtExist = PostgresHelper.ExecuteDataTable(conn, CommandType.Text, sql);
                if (dtExist.Rows.Count != 0)
                {
                    mtoc = dtExist.Rows[0]["mtoc"].ToString();
                    id   = int.Parse(dtExist.Rows[0]["id"].ToString());
                    vin  = dtExist.Rows[0]["vin"].ToString();
                    //修改对应零件号以及写入状态为0(开始写入)
                    sql    = string.Format("update \"GAC_New_VCU\".\"T_MTOC\" set \"element\"='" + element + "',\"state\"='0' where \"vin\"='" + vin + "'");
                    result = PostgresHelper.ExecuteNonQuery(conn, CommandType.Text, sql);
                    logger.Info(vin + "更新零件号" + element + "成功,对应mtoc码为:" + mtoc);
                    //查找MTOC码对应的bin文件以及软、硬件版本号等信息
                    sql = string.Format("select * from \"GAC_New_VCU\".\"T_VCUConfig\" where \"mtoc\"='" + mtoc + "' ");
                    DataTable Exist = PostgresHelper.ExecuteDataTable(conn, CommandType.Text, sql);
                    if (Exist.Rows.Count != 0)
                    {
                        config.DriverName      = Exist.Rows[0]["drivername"] + "";
                        config.DriverPath      = Exist.Rows[0]["driverpath"] + "";
                        config.BinName         = Exist.Rows[0]["binname"] + "";
                        config.BinPath         = Exist.Rows[0]["binpath"] + "";
                        config.CalName         = Exist.Rows[0]["calname"] + "";
                        config.CalPath         = Exist.Rows[0]["calpath"] + "";
                        config.SoftWareVersion = Exist.Rows[0]["softwareversion"] + "";
                        config.HardWareCode    = Exist.Rows[0]["hardwarecode"] + "";
                        config.SW         = Exist.Rows[0]["SW"] + "";
                        config.HW         = Exist.Rows[0]["HW"] + "";
                        config.ElementNum = Exist.Rows[0]["elementNum"] + "";
                        logger.Info("下载MTOC码为" + mtoc + "对应相关信息成功!");
                    }
                    else
                    {
                        logger.Info("不存在MTOC码为" + mtoc + "对应的相关信息!");
                        res = "不存在MTOC码为" + mtoc + "对应的相关信息!";
                    }
                }
                else
                {
                    logger.Info("不存在未写入的VCU");
                    res = "不存在未写入的VCU";
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message);
                res = ex.Message;
            }
            finally
            {
                PostgresHelper.CheckCloseConneciton(conn);
            }
            return(res);
        }