using System; using System.Collections.Generic; using System.Text; using CRVM.Utility; using System.Xml; using System.IO; using System.Data; using CRVM.Entity; using System.Linq; namespace CRVM.CIDExcuter { public class DbHelper { private string _path; private LogicConnect DBlogicConn; private LogicConnect l2Connect; private LogicConnect localConnect; private EDBItem soudb; private EDBItem desdb; private int freq = 5;//频率(秒) private static DbHelper _instance = null; private string coldid_before = ""; public EDBItem SouDB { get { return soudb; } set { soudb = value; } } public EDBItem DesDB { get { return desdb; } set { desdb = value; } } public int Freq { get { return freq; } set { freq = value; } } public DbHelper(string path) { _path = path; } public static DbHelper GetInstance(string path) { if (_instance == null) { _instance = new DbHelper(path); _instance.DesDB = new EDBItem(); _instance.SouDB = new EDBItem(); } return _instance; } public bool isStart { get; set; } public bool LoadConfigData(DbHelper dbhelper) { XmlDocument xmldoc = new XmlDocument(); try { string ipath = _path + "\\dbaccess.conf"; if (File.Exists(ipath)) { xmldoc.Load(ipath); string systemName = ""; if (xmldoc.DocumentElement.Attributes.Count > 0) systemName = xmldoc.DocumentElement.Attributes[0].InnerText; XmlNodeList nodes = xmldoc.SelectNodes("Schm/DB"); int count = nodes.Count; string DbName = nodes[0].Attributes[0].InnerText; soudb.DataType = nodes[0].ChildNodes[0].Attributes[0].InnerText; soudb.Database = nodes[0].ChildNodes[0].Attributes[1].InnerText; soudb.Userid = nodes[0].ChildNodes[0].Attributes[2].InnerText; soudb.Password = nodes[0].ChildNodes[0].Attributes[3].InnerText; soudb.Ipaddress = nodes[0].ChildNodes[0].Attributes[4].InnerText; string DestDbName = nodes[1].Attributes[0].InnerText; desdb.DataType = nodes[1].ChildNodes[0].Attributes[0].InnerText; desdb.Database = nodes[1].ChildNodes[0].Attributes[1].InnerText; desdb.Userid = nodes[1].ChildNodes[0].Attributes[2].InnerText; desdb.Password = nodes[1].ChildNodes[0].Attributes[3].InnerText; desdb.Ipaddress = nodes[1].ChildNodes[0].Attributes[4].InnerText; return true; } else { return false; } } catch (XmlException) { return false; } } /// /// 重设L2数据库操作对象 /// /// public bool SetL2Connect() { try { l2Connect = new LogicConnect(soudb, soudb.Userid); return true; } catch (Exception) { return false; } } /// /// 重设本地数据库操作对象 /// /// public bool SetLocalConnect() { try { localConnect = new LogicConnect(desdb, desdb.Userid); return true; } catch (Exception) { return false; } } /// /// 剪切时向t_coil_info_client表中插入一条新纪录 /// /// /// /// /// /// public void AddNewCoilInfo(int alarmFlag, int endFlag, string OrigPath, string EnergyPath, string disLength, int defectflag) { try { //将本次记录之前的当前卷标记全部置为0,保证当前卷标记唯一性 string update_sql = "update t_coil_info_client set nowflag = 0 where nowflag = 1"; localConnect.DataBase(update_sql); //插入新纪录,并将当前卷标记置为1 string insert_sql = string.Format("insert into t_coil_info_client (createdate,endflag,origPath,energyPath,alarmflag,nowflag,defectflag,disLength) values('{0}',{1},'{2}','{3}',{4},1,{5},{6})", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), endFlag, OrigPath, EnergyPath, alarmFlag, defectflag, disLength); localConnect.DataBase(insert_sql); DevelopLog.DeBug.WriteLogFile("AddNewCoilInfo", insert_sql.ToString()); } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("AddNewCoilInfo", ex.ToString()); DevelopLog.DeBug.WriteLogFile("AddNewCoilInfo", String.Format("|OrigPath:{0},EnergyPath:{1}|" + ex.ToString(), OrigPath, EnergyPath)); } } /// /// 从L2数据库获取钢卷信息,补充到本地t_coil_info_client表,并将冷卷号更新到t_alarm_info_client表中 /// 梅钢项目不使用 /// public void UpdateLocalCoilInfo() { try { //获取L2钢卷信息表中最新的一条记录 string sql_l2 = "select excoilid,entcoilid,length,innerdiam,outdiam,alloycode,extthick,extwidth,hentry from app.fv_vibration_proddata where rownum = 1"; DataTable l2data = l2Connect.DataBase(sql_l2); if (l2data != null) { if (l2data.Rows.Count != 0) { //若本次从L2获取的最新第一条记录的卷号与上次记录的卷号一致,则表示L2新卷号还没有生成 if (l2data.Rows[0]["excoilid"].ToString().Trim() == coldid_before) { return; } //根据L2信息更新本地t_coil_info_client表中热卷号、冷卷号、钢种牌号、宽度、入口厚度、出口厚度、钢种等级信息 string coilinfo_update_sql = string.Format("update t_coil_info_client set hotcoilid='{0}',coldcoilid='{1}',alloycode='{2}',width={3},entrythick={4},exitthick={5} where nowflag = 1 and endflag = 1", l2data.Rows[0]["entcoilid"], l2data.Rows[0]["excoilid"], l2data.Rows[0]["alloycode"], Convert.ToDouble(l2data.Rows[0]["extwidth"]), Convert.ToDouble(l2data.Rows[0]["hentry"]), Convert.ToDouble(l2data.Rows[0]["extthick"])); localConnect.DataBase(coilinfo_update_sql); //更新t_alarm_info_client中的冷卷号信息 string alarm_update_sql = string.Format("update t_alarm_info_client set coldcoilid= '{0}' where nowflag= 1", l2data.Rows[0]["excoilid"]); localConnect.DataBase(alarm_update_sql); coldid_before = l2data.Rows[0]["excoilid"].ToString().Trim();//记录上一卷的冷卷号 //更新缺陷表中的钢卷号 updateLocalDefectCoilNo(l2data.Rows[0]["excoilid"].ToString().Trim()); } } } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("UpdateLocalCoilInfo", ex.ToString()); throw ex; } } /// /// 保存数据库配置 /// /// public bool SaveConfigData() { StreamWriter write = new StreamWriter(_path + "\\dbaccess.conf", false, Encoding.GetEncoding("gb2312")); StringBuilder str = new StringBuilder(); str = str.AppendLine(" "); str = str.AppendLine(""); str = str.AppendLine(" "); if (soudb != null) { str = str.AppendLine(" "); } str = str.AppendLine(" "); str = str.AppendLine(" "); if (desdb != null) { str = str.AppendLine(" "); } str = str.AppendLine(" "); str = str.AppendLine(""); write.WriteLine(str.ToString()); write.Close(); return true; } /// /// 测试数据库是否连接成功 /// /// /// public bool IsConnected(EDBItem item) { DBlogicConn = new LogicConnect(item, item.Userid); DataTable dt = new DataTable(); if (item.DataType == "oracle") { try { dt = DBlogicConn.DataBase("select * from all_tables"); return true; } catch (Exception) { return false; } } else if (item.DataType == "postgres") { try { dt = DBlogicConn.DataBase("select * from pg_am"); return true; } catch (Exception) { return false; } } else if (item.DataType == "db2") { try { dt = DBlogicConn.DataBase("select tabname from syscat.tables where tabschema = current schema"); return true; } catch (Exception) { return false; } } return false; } /// /// 当前文件结束后在t_alarm_info_client表中插入本文件对应的报警信息 /// /// /// /// /// /// /// public void InsertAlarmInfo(int[] start, int[] end, int[] standNo, int[] alarmType, double[] energy) { try { //将t_alarm_info_client表中当前卷标志全部置为0 string update_sql = "update t_alarm_info_client set nowflag = 0 where nowflag = 1"; localConnect.DataBase(update_sql); //插入新纪录,并将新纪录的当前卷标志置为1 DateTime nowtime = DateTime.Now; for (int i = 0; i < start.Length; i++) { string time = nowtime.AddMilliseconds(-i).ToString("yyyy-MM-dd HH:mm:ss.fff"); string insert_sql = string.Format("insert into t_alarm_info_client (createdate,startpos,endpos,standno,alarmtype,energy,nowflag) values('{0}',{1},{2},{3},{4},{5},1)", time, start[i], end[i], standNo[i] + 1, alarmType[i], energy[i]); localConnect.DataBase(insert_sql); } } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("InsertAlarmInfo", ex.ToString()); } } /// /// /// /// /// public void RollDataInfo(Machine mac, DataTable rolldata) { if (mac == null) { return; } for (int i = 0; i < SysParam.Instance.SpeedChannelCount; i++) { mac.Stand[i].rollDiameterBL = 10000.0; mac.Stand[i].rollDiameterBU = 10000.0; mac.Stand[i].rollDiameterML = 10000.0; mac.Stand[i].rollDiameterMU = 10000.0; mac.Stand[i].rollDiameterWL = 10000.0; mac.Stand[i].rollDiameterWU = 10000.0; } try { if (rolldata != null) { if (rolldata.Rows.Count == 1) { for (int i = 0; i < SysParam.Instance.SpeedChannelCount; i++) { mac.Stand[i].rollDiameterWU = Convert.ToDouble(rolldata.Rows[0][i * 6 + 0]); mac.Stand[i].rollDiameterWL = Convert.ToDouble(rolldata.Rows[0][i * 6 + 1]); //中间辊 c102机组轧机无中间辊 mac.Stand[i].rollDiameterMU = Convert.ToDouble(rolldata.Rows[0][i * 6 + 2]); mac.Stand[i].rollDiameterML = Convert.ToDouble(rolldata.Rows[0][i * 6 + 3]); mac.Stand[i].rollDiameterBU = Convert.ToDouble(rolldata.Rows[0][i * 6 + 4]); mac.Stand[i].rollDiameterBL = Convert.ToDouble(rolldata.Rows[0][i * 6 + 5]); } } } } catch (Exception) { for (int i = 0; i < SysParam.Instance.SpeedChannelCount; i++) { mac.Stand[i].rollDiameterBL = 10000.0; mac.Stand[i].rollDiameterBU = 10000.0; mac.Stand[i].rollDiameterML = 10000.0; mac.Stand[i].rollDiameterMU = 10000.0; mac.Stand[i].rollDiameterWL = 10000.0; mac.Stand[i].rollDiameterWU = 10000.0; } } finally { } } /// /// 根据L2轧辊信息更新本地轧辊表 /// 梅钢项目不使用 /// /// public void UpdateLocalRollData(DataTable data) { try { string nowtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); for (int i = 0; i < data.Rows.Count; i++) { string update_sql = string.Format("insert into T_ROLL_DATA (createdate,rollno,standno,rolltype,rollposition,DiameterMiddle) values('{0}','{1}',{2},'{3}','{4}',{5})", nowtime, data.Rows[i]["rollno"], data.Rows[i]["standno"], data.Rows[i]["rolltype"].ToString(), data.Rows[i]["rollposition"], data.Rows[i]["diametermiddle"]); localConnect.DataBase(update_sql); } } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("UpdateLocalRollData", ex.ToString()); } } /// /// 获取t_roll_data表中所有的时刻点 /// /// 梅钢项目不使用 /// /// public DataTable SelCreateTimeRolData() { try { string select_sql = "select distinct createdate from t_roll_data"; return localConnect.DataBase(select_sql); } catch (Exception ex) { throw ex; } } /// /// 获取t_roll_data表中某个时刻点的轧辊数据 /// 梅钢项目不使用 /// /// /// public DataTable SelRollDataByCreateDate(string createdate) { try { string select_sql = string.Format("select rollno,diametermiddle,standno,rollposition,rolltype from t_roll_data where createdate='{0}'", createdate); return localConnect.DataBase(select_sql); } catch (Exception ex) { throw ex; } } /// /// 获取L2在线轧辊信息 /// /// public DataTable GetL2OnlineRollInfo() { string std_sql = "select "; for (int i = 0; i < SysParam.Instance.SpeedChannelCount - 1; i++) { std_sql += string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", (i + 1).ToString()); } std_sql += string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0}", (SysParam.Instance.SpeedChannelCount).ToString()); std_sql += " from t_roll_online where seqno=1"; try { //string select_sql = "select standno,rollposition,to_char(diametermiddle/1000,'9999.99') as diametermiddle,rolltype,rollno from app.fv_vibration_rolldata where rollstatus='I'"; //string stand1_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "1"); //string stand2_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "2"); //string stand3_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "3"); //string stand4_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "4"); //string stand5_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "5"); //string stand6_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0}", "6"); //string select_sql = "select " + stand1_sql + stand2_sql + stand3_sql + stand4_sql + stand5_sql + stand6_sql + " from t_roll_online where seqno=1"; //return localConnect.DataBase(select_sql); return localConnect.DataBase(std_sql); } catch (Exception ex) { throw ex; } } /// /// 验证用户输入的密码是否正确 /// /// /// public bool IsUser(string password) { try { string select_sql = string.Format("select * from t_users where pswd='{0}' and name = 'tcm'", password); DataTable dt = localConnect.DataBase(select_sql); if (dt.Rows.Count > 0) { return true; } return false; } catch (Exception ex) { throw ex; } } /// /// 获取t_coil_info_client表中所有的冷卷号 /// /// public List SelAllCoilIDs() { List coillist = new List(); string select_sql = "select coldcoilno from t_coil_info_client"; try { DataTable data = localConnect.DataBase(select_sql); if (data != null) { for (int i = 0; i < data.Rows.Count; i++) { coillist.Add(data.Rows[i]["coldcoilno"].ToString()); } } return coillist; } catch (Exception ex) { throw ex; } } /// /// 修改用户密码 /// /// public void ChangePassWord(string newpswd) { try { string update_sql = string.Format("update t_users set pswd='{0}' where name='tcm'", newpswd); localConnect.DataBase(update_sql); } catch (Exception ex) { throw ex; } } /// /// 在t_alarm_info_client表中根据冷卷号搜索钢卷报警信息 /// /// /// public DataTable SelAlarmInfoByColdId(string coldcoilid) { try { string select_sql = string.Format("select startpos,endpos,standno,alarmtype,energy from t_alarm_info_client where coldcoilid='{0}'", coldcoilid); return localConnect.DataBase(select_sql); } catch (Exception ex) { throw ex; } } /// /// 在t_coil_info_client表中搜索时间范围内的钢卷信息 /// /// /// /// /// public DataTable GetCoilInfoByDate(bool isAlarm, DateTime startTime, DateTime endTime) { try { string select_sql = string.Format("select to_char(createdate,'YYYY-MM-DD HH24:MI:SS'),alarmflag,coldcoilno_hotcoild,coldcoilno,coldcoil_steegrade,coldcoil_alloycode, coldcoil_extwidth,coldcoil_entthick,coldcoil_extthick,dislength,coldcoil_len,endflag,origpath,energypath from t_coil_info_client where createdate<='{0}'and createdate>='{1}'", endTime, startTime); if (isAlarm) { select_sql += " and alarmflag = 1"; } select_sql += " order by createdate desc"; return localConnect.DataBase(select_sql); } catch (Exception ex) { throw ex; } } /// /// 在t_coil_info_client表中根据冷卷号搜索钢卷信息 /// /// /// public DataTable GetCoilInfoByColdId(string coldcoilno) { try { string select_sql = ""; if (coldcoilno.Trim() == "") { select_sql = string.Format("select to_char(createdate,'YYYY-MM-DD HH24:MI:SS'),alarmflag,coldcoilno_hotcoild,coldcoilno,coldcoil_steegrade,coldcoil_alloycode, coldcoil_extwidth,coldcoil_entthick,coldcoil_extthick,dislength,coldcoil_len,endflag,origpath,energypath from t_coil_info_client where coldcoilno = 'xxxxxxxxxx'", coldcoilno); } else { select_sql = string.Format("select to_char(createdate,'YYYY-MM-DD HH24:MI:SS'),alarmflag,coldcoilno_hotcoild,coldcoilno,coldcoil_steegrade,coldcoil_alloycode, coldcoil_extwidth,coldcoil_entthick,coldcoil_extthick,dislength,coldcoil_len,endflag,origpath,energypath from t_coil_info_client where coldcoilno like '%{0}%' ", coldcoilno); } return localConnect.DataBase(select_sql); } catch (Exception ex) { throw ex; } } /// /// 在t_coil_info_client表中根据原始数据路径搜索钢卷信息 /// /// /// public DataTable GetCoilInfoByOriginPath(string originPath, Machine macReview) { string select_sql = "select coldcoilno,coldcoil_steegrade,coldcoil_extwidth,coldcoil_extthick,coldcoil_alloycode,"; for (int i = 0; i < SysParam.Instance.SpeedChannelCount - 1; i++) { select_sql += string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", (i + 1).ToString()); } select_sql += string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0}", SysParam.Instance.SpeedChannelCount.ToString()); select_sql += string.Format(" from t_coil_info_client where origpath='{0}'", originPath); try { //string coil_sql = "select coldcoilno,coldcoil_steegrade,coldcoil_extwidth,coldcoil_extthick,coldcoil_alloycode,"; //string stand1_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "1"); //string stand2_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "2"); //string stand3_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "3"); //string stand4_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "4"); //string stand5_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0}", "5"); //string where_sql = string.Format(" from t_coil_info_client where origpath='{0}'", originPath); //string sql = coil_sql + stand1_sql + stand2_sql + stand3_sql + stand4_sql + stand5_sql + where_sql; //DataTable dt = localConnect.DataBase(sql); DataTable dt = localConnect.DataBase(select_sql); if (dt.Rows.Count == 1) { macReview.review_coldcoilno = dt.Rows[0]["coldcoilno"].ToString(); macReview.review_extThick = dt.Rows[0]["coldcoil_extthick"].ToString(); macReview.review_alloyCode = dt.Rows[0]["coldcoil_alloycode"].ToString(); macReview.review_steelGrade = dt.Rows[0]["coldcoil_steegrade"].ToString(); macReview.review_width = dt.Rows[0]["coldcoil_extwidth"].ToString(); for (int i = 0; i < SysParam.Instance.SpeedChannelCount; i++) { macReview.Stand[i].rollDiameterWU = Convert.ToDouble(dt.Rows[0]["wrdiaup" + (i + 1).ToString()]); macReview.Stand[i].rollDiameterWL = Convert.ToDouble(dt.Rows[0]["wrdialow" + (i + 1).ToString()]); macReview.Stand[i].rollDiameterMU = Convert.ToDouble(dt.Rows[0]["imrdiaup" + (i + 1).ToString()]); macReview.Stand[i].rollDiameterML = Convert.ToDouble(dt.Rows[0]["imrdialow" + (i + 1).ToString()]); macReview.Stand[i].rollDiameterBU = Convert.ToDouble(dt.Rows[0]["burdiaup" + (i + 1).ToString()]); macReview.Stand[i].rollDiameterBL = Convert.ToDouble(dt.Rows[0]["burdialow" + (i + 1).ToString()]); } } return dt; } catch (Exception ex) { DataTable errordt = new DataTable(); for (int i = 0; i < SysParam.Instance.SpeedChannelCount; i++) { macReview.Stand[i].rollDiameterWU = 0; macReview.Stand[i].rollDiameterWL = 0; macReview.Stand[i].rollDiameterMU = 0; macReview.Stand[i].rollDiameterML = 0; macReview.Stand[i].rollDiameterBU = 0; macReview.Stand[i].rollDiameterBL = 0; } DevelopLog.DeBug.WriteLogFile("GetCoilInfoByOriginPath", ex.ToString()); return errordt; } } /// /// 在t_coil_info_client表中根据能量数据路径搜索钢卷信息 /// /// /// public DataTable GetCoilInfoByEnergyPath(string energyPath, Machine macReview) { string select_sql = "select coldcoilno,coldcoil_steegrade,coldcoil_extwidth,coldcoil_extthick,coldcoil_alloycode,"; for (int i = 0; i < SysParam.Instance.SpeedChannelCount - 1; i++) { select_sql += string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", (i + 1).ToString()); } select_sql += string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0}", SysParam.Instance.SpeedChannelCount.ToString()); select_sql += string.Format(" from t_coil_info_client where energypath='{0}'", energyPath); try { //string coil_sql = "select coldcoilno,coldcoil_steegrade,coldcoil_extwidth,coldcoil_extthick,coldcoil_alloycode,"; //string stand1_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "1"); //string stand2_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "2"); //string stand3_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "3"); //string stand4_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0},", "4"); //string stand5_sql = string.Format("wrdiaup{0},wrdialow{0},imrdiaup{0},imrdialow{0},burdiaup{0},burdialow{0}", "5"); //string where_sql = string.Format(" from t_coil_info_client where energypath='{0}'", energyPath); //string sql = coil_sql + stand1_sql + stand2_sql + stand3_sql + stand4_sql + stand5_sql + where_sql; //DataTable dt = localConnect.DataBase(sql); DataTable dt = localConnect.DataBase(select_sql); if (dt.Rows.Count == 1) { macReview.review_coldcoilno = dt.Rows[0]["coldcoilno"].ToString(); macReview.review_extThick = dt.Rows[0]["coldcoil_extthick"].ToString(); macReview.review_alloyCode = dt.Rows[0]["coldcoil_alloycode"].ToString(); macReview.review_steelGrade = dt.Rows[0]["coldcoil_steegrade"].ToString(); macReview.review_width = dt.Rows[0]["coldcoil_extwidth"].ToString(); for (int i = 0; i < SysParam.Instance.SpeedChannelCount; i++) { macReview.Stand[i].rollDiameterWU = Convert.ToDouble(dt.Rows[0]["wrdiaup" + (i + 1).ToString()]); macReview.Stand[i].rollDiameterWL = Convert.ToDouble(dt.Rows[0]["wrdialow" + (i + 1).ToString()]); macReview.Stand[i].rollDiameterMU = Convert.ToDouble(dt.Rows[0]["imrdiaup" + (i + 1).ToString()]); macReview.Stand[i].rollDiameterML = Convert.ToDouble(dt.Rows[0]["imrdialow" + (i + 1).ToString()]); macReview.Stand[i].rollDiameterBU = Convert.ToDouble(dt.Rows[0]["burdiaup" + (i + 1).ToString()]); macReview.Stand[i].rollDiameterBL = Convert.ToDouble(dt.Rows[0]["burdialow" + (i + 1).ToString()]); } } return dt; } catch (Exception ex) { DataTable errordt = new DataTable(); for (int i = 0; i < SysParam.Instance.SpeedChannelCount; i++) { macReview.Stand[i].rollDiameterWU = 0; macReview.Stand[i].rollDiameterWL = 0; macReview.Stand[i].rollDiameterMU = 0; macReview.Stand[i].rollDiameterML = 0; macReview.Stand[i].rollDiameterBU = 0; macReview.Stand[i].rollDiameterBL = 0; } DevelopLog.DeBug.WriteLogFile("GetCoilInfoByEnergyPath", ex.ToString()); return errordt; } } public bool recordLocalDefectData(Dictionary defectList, Dictionary defectMaxEnergyValue)//剪切时插入本地数据库缺陷表 { return true; if (defectList.Count >= 1) { string coil_sql = "select coldcoilno,coldcoil_muid from t_coil_online where seqno=1 "; DataTable coil_dt = localConnect.DataBase(coil_sql); if (coil_dt.Rows.Count == 1) { string coldcoilno = coil_dt.Rows[0]["coldcoilno"].ToString(); string coldcoil_muid = coil_dt.Rows[0]["coldcoil_muid"].ToString(); if (coldcoilno.Trim() != "") { string update_sql = "update t_defect_data set "; int count = 0; foreach (KeyValuePair item in defectList) { count++; if (count == 21) { break; } string tmp = " defectstart" + count.ToString() + "=" + item.Key.ToString() + ","; tmp += "defectend" + count.ToString() + "=" + item.Value.ToString() + ","; if (defectMaxEnergyValue.ContainsKey(item.Key)) { tmp += "maxenergy" + count.ToString() + "=" + defectMaxEnergyValue[item.Key] + ","; } else { tmp += "maxenergy" + count.ToString() + "=" + "0.0" + ","; } update_sql = update_sql + tmp; } for (int i = count; i <= 20; i++) { string tmp = " defectstart" + count.ToString() + "=0,"; tmp += "defectend" + count.ToString() + "=0,"; tmp += "maxenergy" + count.ToString() + "=0.0,"; update_sql = update_sql + tmp; } update_sql += "coldcoilid='" + coldcoilno + "', muid=" + coldcoil_muid + ",sndflag=0"; DevelopLog.DeBug.WriteLogFile("update t_defect_data:", update_sql); localConnect.DataBase(update_sql); return true; } return true; } else { DevelopLog.DeBug.WriteLogFile("read online table failed, info recordocalDefectData:", coil_sql); return false; } } else { return true; } //string sql = "update t_defect_data set ";//将表内当前所有的当前卷标记都置为0 //try //{ // localConnect.DataBase(sql); // sql = ""; // DateTime nowtime = DateTime.Now; // int index = 1; // foreach (KeyValuePair item in defectList) // { // string time = nowtime.AddMilliseconds(-index).ToString("yyyy/MM/dd HH:mm:ss.fff"); // string maxEnergyValue = "0.0"; // //if (defectMaxEnergyValue.ContainsKey(item.Key)) // //{ // // maxEnergyValue = defectMaxEnergyValue[item.Key].ToString(); // //} // sql += string.Format("insert into t_defect_data (defectstart,defectend,nowFlag,inserttime,defectindex,maxenergy) values ('{0}','{1}','1','{2}','{3}','{4}');", item.Key, item.Value, time, index, maxEnergyValue); // index++; // } // DevelopLog.DeBug.WriteLogFile("info recordocalDefectData:", sql); // localConnect.DataBase(sql); //} //catch (Exception ex) //{ // DevelopLog.DeBug.WriteLogFile("error recordocalDefectData:", sql); // return false; //} //return true; } public bool updateLocalDefectCoilNo(string coldcoilId)//获取钢卷号时,更新缺陷表中的钢卷号 { DevelopLog.DeBug.WriteLogFile("updateLocalDefectCoilNo:", coldcoilId); string sql = string.Format("update t_defect_data set coldcoilid = '{0}' where nowFlag = '1';", coldcoilId);//将表内当前卷标记的钢卷号更新 try { localConnect.DataBase(sql); //if (GetDefectSndStatus() == 1) //{ // return updateL2DefectData(coldcoilId); //} } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("updateLocalDefectCoilNo:", sql); return false; } return true; } public bool updateL2DefectData(string coldcoilId)//根据卷号更新L2缺陷表 { /*DataTable dt = new DataTable(); dt = getLoaclDefectData(coldcoilId);//获取本地缺陷数据包括卷号 if (dt == null || dt.Rows.Count == 0) { return false; } string updatesql = ""; string MECREATOR = "PC"; string MESID = "2"; string SOURCE = "1"; string ACTION = "1"; string DEFCREATOR = "C502"; string DEFSIDE = "2"; string DEFTYPE = "51B1"; string DEFECTTEXT = "zhendong"; string INTENSITY = "1"; string TURNFLAG = "1"; try { if (dt.Rows.Count > 0) { LogicConnect con = new LogicConnect(soudb, soudb.Userid); for (int i = 0; i < dt.Rows.Count; i++) { string MEID = dt.Rows[i][3].ToString(); string SID = dt.Rows[i][2].ToString(); string DEFEND = dt.Rows[i][1].ToString(); string DEFSTART = dt.Rows[i][0].ToString(); string INTENSITYVAL = dt.Rows[i][4].ToString(); updatesql = string.Format("insert into DEFECT (MEID,MECREATOR,MESID,SID,SOURCE,ACTION,DEFCREATOR,DEFEND,DEFSIDE,DEFSTART,DEFTYPE,DEFECTTEXT,INTENSITY,INTENSITYVAL,TURNFLAG) values ({0},'{1}',{2},{3},'{4}',{5},'{6}',{7},'{8}',{9},'{10}','{11}','{12}',{13},{14})", MEID, MECREATOR, MESID, SID, SOURCE, ACTION, DEFCREATOR, DEFEND, DEFSIDE, DEFSTART, DEFTYPE, DEFECTTEXT, INTENSITY, INTENSITYVAL, TURNFLAG); con.DataBase(updatesql); DevelopLog.DeBug.WriteLogFile("infoupdateL2DefectData:", updatesql); } } } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("error:updateL2DefectData:", updatesql); return false; }*/ return true; } public DataTable getLoaclDefectData(string coldcoilid)//根据卷号获取本地缺陷数据 { /*DataTable dt = new DataTable(); string muidSql = ""; string maxSidSql = ""; string localDefectSql = ""; try { //查询muid LogicConnect con = new LogicConnect(soudb, soudb.Userid); muidSql = string.Format("select MEID2PH from SV_MEID where coldcoilid='{0}'", coldcoilid); DevelopLog.DeBug.WriteLogFile("infomuidSql:", muidSql); string muid = ""; dt = con.SelTableData("SV_MEID", muidSql); if (dt.Rows.Count != 1) { return null; } else { muid = dt.Rows[0][0].ToString(); } DevelopLog.DeBug.WriteLogFile("getLoaclDefectData muid:", muid); //查询最大SID maxSidSql = string.Format("select max(SID) from DEFECT where meid='{0}'", muid); DevelopLog.DeBug.WriteLogFile("infomaxSidSql:", maxSidSql); int maxSID = 0; dt = con.SelTableData("DEFECT", maxSidSql); if (dt.Rows.Count == 1) { if (dt.Rows[0][0].ToString().Trim() != "") { maxSID = Convert.ToInt32(dt.Rows[0][0]); } } DevelopLog.DeBug.WriteLogFile("getLoaclDefectData muid:", maxSID.ToString()); con = new LogicConnect(desdb, desdb.Userid); dt = new DataTable(); localDefectSql = string.Format("select defectstart,defectend,defectindex,muid,maxEnergy from t_defect_data where coldcoilid='{0}'", coldcoilid); DevelopLog.DeBug.WriteLogFile("infolocalDefectSql:", localDefectSql); dt = con.SelTableData("t_defect_data", localDefectSql); if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { dt.Rows[i][3] = muid; dt.Rows[i][2] = Convert.ToInt32(dt.Rows[i][2]) + maxSID; } } else { return null; } } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("getLoaclDefectData:", localDefectSql); DevelopLog.DeBug.WriteLogFile("muidSql:", muidSql); DevelopLog.DeBug.WriteLogFile("maxSidSql:", maxSidSql); return null; } return dt;*/ return null; } public void recordLogInfo(string userName, string logInfo) { try { string insert_sql = string.Format("insert into t_log_info (seqno,username,loginfo) values((select max(seqno) + 1 from t_log_info),'{0}','{1}')", userName, logInfo); localConnect.DataBase(insert_sql); } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("recordLogInfo", ex.ToString()); recordLogInfoFirst(userName, logInfo); } } public void recordLogInfoFirst(string userName, string logInfo) { try { string insert_sql = string.Format("insert into t_log_info (seqno,username,loginfo) values(1,'{0}','{1}')", userName, logInfo); localConnect.DataBase(insert_sql); } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("recordLogInfoFirst", ex.ToString()); } } public DataTable GetLogInfoByDate(DateTime startTime, DateTime endTime) { try { string select_sql = string.Format("select seqno,to_char(toc,'YYYY-MM-DD HH24:MI:SS'),loginfo,username from t_log_info where toc<='{0}'and toc>='{1}' and seqno >0", endTime, startTime); select_sql += " order by seqno desc"; return localConnect.DataBase(select_sql); } catch (Exception ex) { throw ex; } } /// /// 获取基本配置参数,包括报警次数,采样点数等 /// /// public DataTable GetBaseConfig() { string sql_str = "select key,value from t_dict_data;"; try { DataTable dt = localConnect.DataBase(sql_str); return dt; } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("GetBaseConfig()", ex.ToString()); DataTable errdt = new DataTable(); return errdt; } } /// /// 获取报警参数 /// /// public DataTable GetAlarmParam() { string sql_str = "select standno,alarmspeed,lowpassl,lowpassu,lowalarmvalue,lowdefectvalue,midpassl," + "midpassu,midalarmvalue,middefectvalue,highpassl,highpassu,highalarmvalue,highdefectvalue," + "alarmtimes_l,alarmtimes_m,alarmtimes_h from t_alarm_param order by standno ,alarmspeed ;"; try { DataTable dt = localConnect.DataBase(sql_str); return dt; } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("GetBaseConfig()", ex.ToString()); DataTable errdt = new DataTable(); return errdt; } } /// /// 获取指定机架的报警参数 /// /// /// public DataTable GetAlarmParamByStanNo(int standNo) { string sql_str = "select alarmspeed,lowpassl,lowpassu,lowalarmvalue,lowdefectvalue,midpassl," + "midpassu,midalarmvalue,middefectvalue,highpassl,highpassu,highalarmvalue,higdefectvalue from t_alarm_param" + String.Format(" where standno={};", standNo); try { DataTable dt = localConnect.DataBase(sql_str); return dt; } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("GetBaseConfig()", ex.ToString()); DataTable errdt = new DataTable(); return errdt; } } /// /// 新增报警参数记录 /// /// /// public void AddAlarmParamByStandNo(EntityAlarmSpeed data, int standNo) { try { string insert_sql = "insert into t_alarm_param (standno,alarmspeed,lowpassl," + "lowpassu,lowalarmvalue,lowdefectvalue,midpassl,midpassu,midalarmvalue,middefectvalue,highpassl," + String.Format("highpassu,highalarmvalue,highdefectvalue) values({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13})", standNo, data.alarmSpeed, data.lowPassL, data.lowPassU, data.lowAlarmValue, data.lowDefectValue, data.midPassL, data.midPassU, data.midAlarmValue, data.midDefectValue, data.highPassL, data.highPassU, data.highAlarmValue, data.highDefectValue); ; localConnect.DataBase(insert_sql); } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("AddAlarmParamByStandNo", ex.ToString()); } } /// /// 单个机架报警参数更新 /// /// /// public void UpdateAlarmParamByStandNo(IList data, int standNo) { if (data == null || data.Count == 0) { return; } if (standNo > 0 && standNo < SysParam.Instance.SpeedChannelCount + 1) { //报警参数 DeleteAlarmParamByStandNo(standNo); try { foreach (EntityAlarmSpeed item in data) { AddAlarmParamByStandNo(item, standNo); } } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("SaveAlarmParam", String.Format("standno:{0},Error:", standNo) + ex.ToString()); } //报警次数 UpdateAlarmTimes(standNo, SysParam.Instance.channel[standNo - 1].alarmTimes_l, SysParam.Instance.channel[standNo - 1].alarmTimes_m, SysParam.Instance.channel[standNo - 1].alarmTimes_h); } } /// /// 删除指定机架的报警参数 /// /// public void DeleteAlarmParamByStandNo(int standNo) { string delete_sql = String.Format("delete from t_alarm_param where standno = {0};", standNo); try { localConnect.DataBase(delete_sql); } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("GetBaseConfig()", ex.ToString()); } } /// /// 保存有速度机架的整个报警参数 /// /// /// public bool SaveAlarmParam(Dictionary> datas) { //报警参数 foreach (KeyValuePair> items in datas) { if (items.Value != null && items.Value.Count > 0) { int standNoi = items.Key + 1; if (standNoi > 0 && standNoi < SysParam.Instance.SpeedChannelCount + 1) { DeleteAlarmParamByStandNo(standNoi); try { foreach (EntityAlarmSpeed item in items.Value) { AddAlarmParamByStandNo(item, standNoi); } } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("SaveAlarmParam", String.Format("standno:{0},Error:", standNoi) + ex.ToString()); return false; } } } } //报警次数 for (int i = 0; i < SysParam.Instance.SpeedChannelCount; i++) { UpdateAlarmTimes(i + 1, SysParam.Instance.channel[i].alarmTimes_l, SysParam.Instance.channel[i].alarmTimes_m, SysParam.Instance.channel[i].alarmTimes_h); } return true; } /// /// 将数据库报警参数更新到系统 /// public void autoUpdateAlarmParam() { //报警参数 DataTable eas = GetAlarmParam(); if (eas == null) { return; } try { Dictionary> config_base = new Dictionary>(); for (int i = 0; i < eas.Rows.Count; i++) { DataRow row = eas.Rows[i]; EntityAlarmSpeed itemdata = new EntityAlarmSpeed(); int standNo = Convert.ToInt32(row["standno"]); itemdata.alarmSpeed = Convert.ToInt32(row["alarmspeed"]); itemdata.lowPassL = Convert.ToInt32(row["lowpassl"]); itemdata.lowPassU = Convert.ToInt32(row["lowpassu"]); itemdata.lowAlarmValue = Convert.ToSingle(row["lowalarmvalue"]); itemdata.lowDefectValue = Convert.ToSingle(row["lowdefectvalue"]); itemdata.midPassL = Convert.ToInt32(row["midpassl"]); itemdata.midPassU = Convert.ToInt32(row["midpassu"]); itemdata.midAlarmValue = Convert.ToSingle(row["midalarmvalue"]); itemdata.midDefectValue = Convert.ToSingle(row["middefectvalue"]); itemdata.highPassL = Convert.ToInt32(row["highpassl"]); itemdata.highPassU = Convert.ToInt32(row["highpassu"]); itemdata.highAlarmValue = Convert.ToSingle(row["highalarmvalue"]); itemdata.highDefectValue = Convert.ToSingle(row["highdefectvalue"]); if (!config_base.ContainsKey(standNo - 1)) { IList itemlist = new List(); config_base.Add(standNo - 1, itemlist); } config_base[standNo - 1].Add(itemdata); } for (int j = 0; j < config_base.Keys.Count; j++) { SysParam.Instance.channel[j].alarmConfig = config_base[j].ToArray();//报警参数 //eas.Select(String.Format("standno={0}", j + 1)); DataRow dr = eas.Select(String.Format("standno={0}", j + 1))[0]; SysParam.Instance.channel[j].alarmTimes_l = Convert.ToInt32(dr["alarmtimes_l"]);//报警次数 SysParam.Instance.channel[j].alarmTimes_m = Convert.ToInt32(dr["alarmtimes_m"]);//报警次数 SysParam.Instance.channel[j].alarmTimes_h = Convert.ToInt32(dr["alarmtimes_h"]);//报警次数 } Console.WriteLine("test"); } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("autoUpdateAlarmParam", ex.Message); } //报警次数 //DataTable kv = GetBaseConfig(); //if (kv == null) //{ // return; //} //else //{ // try // { // for (int i = 0; i < kv.Rows.Count; i++) // { // string keyi = Convert.ToString(kv.Rows[i]["key"]); // if (keyi == "alarmTimes_l" || keyi == "alarmTimes_m" || keyi == "alarmTimes_h") // { // for (int j = 0; j < SysParam.Instance.SpeedChannelCount; j++) // { // if (keyi == "alarmTimes_l") // { // SysParam.Instance.channel[j].alarmTimes_l = Convert.ToInt32(kv.Rows[i]["value"]); // } // else if (keyi == "alarmTimes_m") // { // SysParam.Instance.channel[j].alarmTimes_m = Convert.ToInt32(kv.Rows[i]["value"]); // } // else // { // SysParam.Instance.channel[j].alarmTimes_h = Convert.ToInt32(kv.Rows[i]["value"]); // } // //else if(keyi == "vibSens") // //{ // // SysParam.Instance.channel[j].vibSens = Convert.ToInt32(kv.Rows[i]["value"]); // //} // //else // //{ // // SysParam.Instance.channel[j].speedSens = Convert.ToInt32(kv.Rows[i]["value"]); // //} // //else // //{ // // DevelopLog.DeBug.WriteLogFile("autoUpdateAlarmParam-BaseConfig", "Error:参数异常,key="+keyi); // //} // } // } // //else if (keyi == "samplePoint") // //{ // // SysParam.Instance.samplePoint = Convert.ToInt32(kv.Rows[i]["value"]); // //} // //else if (keyi == "sampleFre") // //{ // // SysParam.Instance.sampleFre = Convert.ToInt32(kv.Rows[i]["value"]); // //} // } // } // catch (Exception ex) // { // DevelopLog.DeBug.WriteLogFile("autoUpdateAlarmParam-BaseConfig", ex.Message); // } //} } public void UpdateAlarmTimes(int standNo, int l, int m, int h) { if (l < 0 || m < 0 || h < 0 || standNo < 0 || standNo > SysParam.Instance.SpeedChannelCount) { DevelopLog.DeBug.WriteLogFile("UpdateAlarmTimes", String.Format("参数异常:standNo={0},l={1},m={2},h={3}", standNo, l, m, h)); return; } try { string update_sql = String.Format("update t_alarm_param set alarmtimes_l={0},alarmtimes_m={1},alarmtimes_h={2} where standno={3};", l, m, h, standNo); localConnect.DataBase(update_sql); } catch (Exception ex) { DevelopLog.DeBug.WriteLogFile("UpdateAlarmTimes", ex.ToString()); } } } }