using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Data.OracleClient; using System.Collections; using System.Diagnostics; using Common; using Common.DbOption.work; using com.hnshituo.core.webapp.vo; namespace TrainVideoDataDispose { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private string m_szRunPath = ""; private bool m_bRun = true; //private bool newRow_Flag = false; private DataTable m_dtTrainWeightOrigDataMain;//轨道衡原始数据主表 private DataTable m_dtTrainWeightOrigData;//轨道衡原始数据表 private string[] m_szOrigDataPath;//轨道衡共享数据文件夹列表 private System.Threading.Thread m_hTrainOrigDataCollect;//轨道衡原始数据采集线程 private MeterWorkRailwayRecMainService meterWorkRailwayRecMainService = new MeterWorkRailwayRecMainService(); // 采集主表 private MeterWorkRailwayReceivedService MeterWorkRailwayReceivedService = new MeterWorkRailwayReceivedService(); // 采集从表 /// /// 获取轨道衡系统上传的原始数据文件保存路径 /// private void GetOrigDataPathInfo() { try { //doc:编辑TrainOrigData.txt时要用UTF-8格式保存 if (System.IO.File.Exists(m_szRunPath + "\\TrainOrigData.txt")) { string str = System.IO.File.ReadAllText(m_szRunPath + "\\TrainOrigData.txt", Encoding.Default); m_szOrigDataPath = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); } } catch (System.Exception error) { WriteLog("GetOrigDataPathInfo:" + error.Message); } } /// /// 构建轨道衡原始数据表,客户端获取该表得到最新数据 /// private void BuildOrigDataTable() { m_dtTrainWeightOrigDataMain = new DataTable("ORIGDATAMAIN"); DataColumn dc = new System.Data.DataColumn("SEQUENCENUMBER");//流水号 m_dtTrainWeightOrigDataMain.Columns.Add(dc); dc = new System.Data.DataColumn("WEIGHTTIME");//时间 m_dtTrainWeightOrigDataMain.Columns.Add(dc); dc = new System.Data.DataColumn("POINTNAME");//计量点 m_dtTrainWeightOrigDataMain.Columns.Add(dc); dc = new System.Data.DataColumn("TOTALCOUNT");//总节数 m_dtTrainWeightOrigDataMain.Columns.Add(dc); dc = new System.Data.DataColumn("VIDEOFILENAME");//录像文件名 m_dtTrainWeightOrigDataMain.Columns.Add(dc); m_dtTrainWeightOrigData = new System.Data.DataTable("ORIGDATADETAIL"); dc = new System.Data.DataColumn("SEQUENCENUMBER");//流水号 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("INDEXNO");//车厢序号 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("TRAINNO");//车号 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("FID");//FID m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("WEIGHT");//重量 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("SPEED");//速度 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("POINTNAME");//计量点 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("MATERIALNAME");//物料 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("SENDERID");//发送方 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("RECEIVERID");//接收方 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("WEIGHTTYPE");//计量类型 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("VIDEOFILENAME");//录像文件 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("WEIGHTTIME");//时间 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("OPERATER");//计量点 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("STOVENO");//炉号 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("STEELTYPE");//钢种 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("SPEC");//规格 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("BILLETCOUNTS");//根数 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("WASTEWEIGHT");//扣杂 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("ISVALID");//是否有效 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("ISMATCHED");//是否配车 m_dtTrainWeightOrigData.Columns.Add(dc); //==================eason add 2019-10-21=============== dc = new System.Data.DataColumn("POT");//罐号 m_dtTrainWeightOrigData.Columns.Add(dc); dc = new System.Data.DataColumn("TRAIN_NO");//车号 m_dtTrainWeightOrigData.Columns.Add(dc); //=================================================== } /// /// 写日志信息到日志文件 /// /// private void WriteLog(string str) { if (System.IO.Directory.Exists(m_szRunPath + "\\log") == false) { System.IO.Directory.CreateDirectory(m_szRunPath + "\\log"); } string strDate = System.DateTime.Now.ToString("yyyyMMdd"); System.IO.TextWriter tw = new System.IO.StreamWriter(m_szRunPath + "\\log\\TrainSceneLogic_" + strDate + ".log", true); tw.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); tw.WriteLine(str); tw.WriteLine("\r\n"); tw.Close(); } private string[] carHeadNo = null; private void Form1_Load(object sender, EventArgs e) { //ldb- 进程已存在,则不重复打开。 Process[] myProcess = Process.GetProcessesByName(Application.ProductName); if (myProcess.Length <= 1) { m_szRunPath = System.Environment.CurrentDirectory; //getBaseCarInfo(); GetOrigDataPathInfo(); BuildOrigDataTable(); //GetUnhandledHistoryData(); m_hTrainOrigDataCollect = new System.Threading.Thread(new System.Threading.ThreadStart(GetOrigDataFile)); m_hTrainOrigDataCollect.Start(); } else { MessageBox.Show("程序已经启动.", "提示"); Application.Exit(); } } /// /// 线程读取原始数据 /// private void GetOrigDataFile() { System.Threading.Thread.Sleep(1000); // int i = 0; string FileContent = ""; while (m_bRun) { System.Threading.Thread.Sleep(1000); // Create a reference to the current directory. foreach (string strPath in m_szOrigDataPath) { System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(strPath); FileInfo[] fis = null; System.IO.DirectoryInfo dicar = new System.IO.DirectoryInfo(strPath + "\\chehao"); FileInfo[] fiscar = null; try { FileContent = ""; // Create an array representing the files in the current directory. fis = di.GetFiles("*.txt"); foreach (FileInfo fi in fis) { //读文件 FileContent = System.IO.File.ReadAllText(fi.FullName, Encoding.Default); string strSequenceNumber = System.DateTime.Now.ToString("yyyyMMddHHmmss"); if (HandleOrigData(strSequenceNumber, FileContent, strPath) == true) { if (System.IO.Directory.Exists(strPath + "\\history") == false) { System.IO.Directory.CreateDirectory(strPath + "\\history"); } //移到历史文件夹 if (System.IO.File.Exists(strPath + "\\history\\" + fi.Name)) { //20181130 原来同名txt文档先备份 if (System.IO.Directory.Exists(strPath + "\\history\\existBak") == false) { System.IO.Directory.CreateDirectory(strPath + "\\history\\existBak"); } System.IO.File.Copy(strPath + "\\history\\" + fi.Name, strPath + "\\history\\existBak" + fi.Name, true); System.IO.File.Delete(strPath + "\\history\\" + fi.Name); fi.MoveTo(strPath + "\\history\\" + fi.Name); } else { fi.MoveTo(strPath + "\\history\\" + fi.Name); } //newRow_Flag = true; } System.Threading.Thread.Sleep(1000); } if (dicar.Exists) { fiscar = dicar.GetFiles("*.txt"); foreach (FileInfo fi in fiscar) { //读文件 FileContent = System.IO.File.ReadAllText(fi.FullName, Encoding.Default); string strSequenceNumber = System.DateTime.Now.ToString("yyyyMMddHHmmss"); if (HandleOrigDatas(strSequenceNumber, FileContent, strPath, fi.Name.Split('c')[0]) == true) { if (System.IO.Directory.Exists(strPath + "\\history\\chehao") == false) { System.IO.Directory.CreateDirectory(strPath + "\\history\\chehao"); } //移到历史文件夹 if (System.IO.File.Exists(strPath + "\\history\\chehao\\" + fi.Name)) { System.IO.File.Delete(strPath + "\\history\\chehao\\" + fi.Name); fi.MoveTo(strPath + "\\history\\chehao\\" + fi.Name); } else { fi.MoveTo(strPath + "\\history\\chehao\\" + fi.Name); } //newRow_Flag = true; } System.Threading.Thread.Sleep(1000); } } } catch (System.Exception error) { WriteLog("GetOrigDataFile:" + error.Message); } } } } connection con1 = new connection(); private bool HandleOrigDatas(string strSequenceNo, string strContent, string strPath, string fileTime) { string[] Lines = null; string[] Fields = null; //拆分行 Lines = strContent.Split(new string[] { "\r\n" }, StringSplitOptions.None); if (Lines == null || Lines.Length == 0) { return false; } try { List lss = new List(); if (lss.Count == 0) { // 默认把空文件处理掉 return true; } for (int i = 0; i < Lines.Length - 1; i++) { Fields = Lines[i].Split(','); //================eason update 2019-10-21,增加一个不为9的判断=============== if (Fields.Length != 4) { WriteLog("轨道衡车号数据格式不正确!" + Lines[i]); return false; } sModel sm = lm.Where(s => s.key == Fields[1].TrimStart('0').PadLeft(4, '0')).FirstOrDefault(); // 写入采集主表 // 写入采集从表 /* if (sm != null)//车头数据 { //若存在数据则将其写入 string strSql = "INSERT INTO JL_TRAINOINFO(SEQUENCENUMBER,INDEXNO,TRAINNO,WEIGHTTIME,POINTNAME,IS_HEAD)VALUES" + "('" + strSequenceNo + "','" + Fields[0] + "','" + sm.value + "',TO_DATE('" + fileTime + "', 'YYYYMMDDHH24MISS')," + "'" + Fields[3] + "','1')"; OracleCommand ERP_InsertDB = new OracleCommand(strSql, con1.GetDefaultDatabaseConnectionForMain()); int ERPint = ERP_InsertDB.ExecuteNonQuery(); if (ERPint < 0) { WriteLog("轨道衡车号数据添加失败!"); return false; } else { WriteLog(strSequenceNo + "轨道衡车号数据上传成功!"); } string strUpdate = "update jl_trainorigdatadetail set ENGINE_NO='" + sm.value + "' where POINTNAME='" + Fields[3] + "' and WEIGHTTIME=TO_DATE('" + fileTime + "', 'YYYYMMDDHH24MISS')"; ERP_InsertDB = new OracleCommand(strUpdate, con1.GetDefaultDatabaseConnectionForMain()); ERPint = ERP_InsertDB.ExecuteNonQuery(); if (ERPint < 0) { WriteLog("轨道衡车号数据更新失败!"); return false; } else { WriteLog(strSequenceNo + "轨道衡车号数据更新成功!"); } } else { //车厢数据 lss.Add(Fields); //若存在数据则将其写入 string strSql = "INSERT INTO JL_TRAINOINFO(SEQUENCENUMBER,INDEXNO,TRAINNO,WEIGHTTIME,POINTNAME,IS_HEAD)VALUES" + "('" + strSequenceNo + "','" + Fields[0] + "','" + Fields[1].TrimStart('0') + "',TO_DATE('" + Fields[2] + "', 'YYYYMMDDHH24MISS')," + "'" + Fields[3] + "','0')"; OracleCommand ERP_InsertDB = new OracleCommand(strSql, con1.GetDefaultDatabaseConnectionForMain()); int ERPint = ERP_InsertDB.ExecuteNonQuery(); if (ERPint < 0) { WriteLog("轨道衡车号数据添加失败!"); return false; } else { WriteLog(strSequenceNo + "轨道衡车号数据上传成功!"); } } */ } return true; } catch (Exception exp) { WriteLog("保存数据异常原因!:" + exp.Message); return false; } } /// /// 处理轨道衡上传的原始数据 /// /// 流水号,客户端回传应使用该流水号 /// 文件内容 private bool HandleOrigData(string strSequenceNo, string strContent, string strPath) { string[] Lines = null; string[] Fields = null; string strWeightTime = ""; string strPointName = ""; string strVideoFileName = ""; DataRow dr = null; //拆分行 Lines = strContent.Split(new string[] { "\r\n" }, StringSplitOptions.None); if (Lines == null || Lines.Length == 0) { return false; } m_dtTrainWeightOrigData.Clear(); //处理每行 for (int i = 0; i < Lines.Length - 1; i++) { Fields = Lines[i].Split(','); //================eason update 2019-10-21,增加一个不为9的判断=============== //if (Fields.Length != 8 && Fields.Length != 9) //{ // WriteLog("轨道衡数据格式不正确!" + Lines[i]); // return false; //} dr = m_dtTrainWeightOrigData.NewRow(); //strSequenceNo = Fields[6]; //20181130增加: 改取现场生成时间 //20181207 取此字段容易主键冲突 if (dtCarInfo != null && dtCarInfo.Rows.Count > 0) { foreach (DataRow drs in dtCarInfo.Rows) { if (drs["CARD_NO"].ToString().TrimStart('0') == Fields[1]) { Fields[1] = drs["CAR_NO"].ToString().Trim(); break; } } } if (lm.Where(s => s.value == Fields[1].TrimStart('0').PadLeft(s.value.Length, '0')).Count() > 0) { //说明是车头信息 continue; } dr["SEQUENCENUMBER"] = strSequenceNo; dr["INDEXNO"] = Fields[0].PadLeft(2, '0'); dr["TRAINNO"] = Fields[1].TrimStart('0'); dr["FID"] = ""; dr["WEIGHT"] = Fields[2]; if (Fields[3] == "") {//lck20150109静态过磅时车速处理 Fields[3] = "3"; } dr["SPEED"] = Fields[3]; dr["POINTNAME"] = Fields[4]; strPointName = Fields[4]; dr["MATERIALNAME"] = ""; dr["SENDERID"] = ""; dr["RECEIVERID"] = ""; dr["WEIGHTTYPE"] = ""; string _path = strPath.Substring(2); string _strPath = "\\\\194.168.0.38" + _path;//194.168.0.38 dr["VIDEOFILENAME"] = _strPath + "\\" + Fields[5]; strVideoFileName = _strPath + "\\" + Fields[5]; dr["WEIGHTTIME"] = Fields[6]; strWeightTime = Fields[6]; dr["OPERATER"] = Fields[7]; dr["WASTEWEIGHT"] = "0"; dr["ISVALID"] = "False"; dr["ISMATCHED"] = "False"; dr["TRAIN_NO"] = Fields[1];//eason add191106保留原始车号 //==============eason add 2019-10-21================== if (Fields.Length > 8) { dr["POT"] = Fields[8].TrimStart('0'); if (Fields[8].Trim() != "")//if (Fields[1].Trim() == "" && Fields[8].Trim() != "") { dr["TRAINNO"] = ""; //dr["TRAINNO"] = Fields[8]; //如果是铁水车则车号位置放置罐号 if (strPointName == "冶钢四炼东进" || strPointName == "冶钢106线" || strPointName == "84线铁水轨道衡") { if (Fields[8].TrimStart('0').Length > 2) { //if (Fields[8].TrimStart('0').IndexOf("65") == 0) //{ // string m = Fields[8].TrimStart('0').Replace("65", ""); // if (m == "10") // { // dr["TRAINNO"] = "010"; // } // else // { // dr["TRAINNO"] = m;//取最后2位数 // } // dr["TRAINNO"] = Fields[8].Trim().PadLeft(7, '0'); //} //else if (Fields[8].TrimStart('0').IndexOf("75") == 0) //{ // dr["TRAINNO"] = Fields[8].Replace("75", "").TrimStart('0');//取最后2位数 如果是09 则变为 9 // dr["TRAINNO"] = Fields[8].Trim().PadLeft(7, '0'); //} //else //if (Fields[8].TrimStart('0').IndexOf("120") == 0) // dr["TRAINNO"] = Fields[8]; // 20200430 zzq dr["TRAINNO"] = Fields[8].Trim().PadLeft(7, '0'); } else { dr["TRAINNO"] = ""; } } } else { dr["TRAINNO"] = ""; } } else { dr["POT"] = ""; if (Fields[1].Trim() != "") { dr["TRAINNO"] = Fields[1].Trim().PadLeft(7, '0'); } else { dr["TRAINNO"] = ""; } } if (strPointName == "冶钢新站7道" || strPointName == "冶钢新站8道") { dr["POT"] = Fields[1].TrimStart('0');//罐号 //车号另算 //dr["TRAINNO"] = Fields[1]; if (Fields[1].TrimStart('0').Length > 2) { //if (Fields[1].TrimStart('0').IndexOf("65") == 0) //{ // //string m = Fields[1].TrimStart('0').Replace("65", ""); // //if (m == "10") // //{ // // dr["TRAINNO"] = "010"; // //} // //else // //{ // // dr["TRAINNO"] = m;//取最后2位数 // //} // dr["TRAINNO"] = Fields[8].Trim().PadLeft(7, '0'); //} //else if (Fields[1].TrimStart('0').IndexOf("75") == 0) // // dr["TRAINNO"] = Fields[1].Replace("75", "").TrimStart('0');//取最后2位数 如果是09 则变为 9 // dr["TRAINNO"] = Fields[8].Trim().PadLeft(7, '0'); //else // dr["TRAINNO"] = Fields[1];//120则取车号信息 // 20200430 zzq dr["TRAINNO"] = Fields[1].Trim().PadLeft(7, '0'); } dr["TRAIN_NO"] = ""; } //================================================== m_dtTrainWeightOrigData.Rows.Add(dr); } m_dtTrainWeightOrigDataMain.Clear(); DataRow newRow = m_dtTrainWeightOrigDataMain.NewRow(); newRow["SEQUENCENUMBER"] = strSequenceNo; newRow["WEIGHTTIME"] = strWeightTime; newRow["POINTNAME"] = strPointName; newRow["TOTALCOUNT"] = (Lines.Length - 1).ToString(); newRow["VIDEOFILENAME"] = strVideoFileName; m_dtTrainWeightOrigDataMain.Rows.Add(newRow); return SaveOrigData2DB(m_dtTrainWeightOrigDataMain, m_dtTrainWeightOrigData); } /// /// 保存原始数据 /// /// /// /// private bool SaveOrigData2DB(DataTable dtMain, DataTable dtDetail) { //Guid trans = Guid.Empty; try { string strError = ""; //connection con1 = new connection(); //ArrayList list = new ArrayList(); //保存从表数据 foreach (DataRow dr in dtDetail.Rows) { //; //dr["FID"].ToString().Trim(); //dr["POINTNAME"].ToString().Trim(); //dr["TRAINNO"].ToString().Trim(); //dr["SPEED"].ToString().Trim(); //dr["MATERIALNAME"].ToString().Trim(); //dr["SENDERID"].ToString().Trim(); //dr["RECEIVERID"].ToString().Trim(); //dr["WEIGHT"].ToString().Trim(); //dr["WEIGHTTIME"].ToString().Trim(); //dr["OPERATER"].ToString().Trim(); //dr["WEIGHTTYPE"].ToString().Trim(); //dr["SEQUENCENUMBER"].ToString().Trim(); //"0"); //dr["INDEXNO"].ToString().Trim(); //dr["ISVALID"].ToString().Trim(); //dr["ISMATCHED"].ToString().Trim(); //"0"); //ClsServerCommon.setData("core.mcms.track.TrainDataDispose_Jiekou.AddTrainDataDetail_JieKou", new object[] { list }, ob, out strError); //if (!string.IsNullOrEmpty(strError)) //{ // WriteLog("从表数据异常原因:" + strError); // return false; //} //MeterWorkRailwayMotorialReceived meterWorkRailwayMotorialReceived = new MeterWorkRailwayMotorialReceived(); //meterWorkRailwayMotorialReceived.actualFirstNo = dr["SEQUENCENUMBER"].ToString().Trim(); //meterWorkRailwayMotorialReceived.baseSpotName = dr["POINTNAME"].ToString().Trim(); //meterWorkRailwayMotorialReceived.railwayNo = dr["TRAINNO"].ToString().Trim(); //meterWorkRailwayMotorialReceived.actualFirstNo = dr["SEQUENCENUMBER"].ToString().Trim(); //meterWorkRailwayMotorialReceived.actualFirstNo = dr["SEQUENCENUMBER"].ToString().Trim(); //meterWorkRailwayMotorialReceived.actualFirstNo = dr["SEQUENCENUMBER"].ToString().Trim(); //meterWorkRailwayMotorialReceived.actualFirstNo = dr["SEQUENCENUMBER"].ToString().Trim(); //meterWorkRailwayMotorialReceived.actualFirstNo = dr["SEQUENCENUMBER"].ToString().Trim(); } //保存主表数据 foreach (DataRow dr in dtMain.Rows) { MeterWorkRailwayRecMain meterWorkRailwayRecMain = new MeterWorkRailwayRecMain(); meterWorkRailwayRecMain.actualNo = dr["SEQUENCENUMBER"].ToString().Trim(); meterWorkRailwayRecMain.baseSpotName = dr["POINTNAME"].ToString().Trim(); meterWorkRailwayRecMain.createTime = DateTime.Now; meterWorkRailwayRecMain.videoName = dr["VIDEOFILENAME"].ToString().Trim(); meterWorkRailwayRecMain.carriageNum = int.Parse(dr["TOTALCOUNT"].ToString().Trim()); RESTfulResult rm = meterWorkRailwayRecMainService.doAdd(meterWorkRailwayRecMain); if (!rm.Succeed) { WriteLog("保存数据异常原因!:" + rm.Message); return false; } } return true; } catch (Exception exp) { WriteLog("保存数据异常原因!:" + exp.Message); return false; } } //每隔一分钟读取一次基础数据 DataTable dtCarInfo = null; private void timer1_Tick(object sender, EventArgs e) { getBaseCarInfo(); } List lm = new List(); private void getBaseCarInfo() { try { string sql = "SELECT CARD_NO,CAR_NO,CAR_TYPE FROM CMM_CARD_CAR"; OracleCommand ERP_InsertDB = new OracleCommand(sql, con1.GetDefaultDatabaseConnectionForMain()); OracleDataAdapter oda = new OracleDataAdapter(); oda.SelectCommand = ERP_InsertDB; DataSet ds = new DataSet(); oda.Fill(ds); if (ds != null && ds.Tables.Count > 0) { dtCarInfo = ds.Tables[0]; if (lm.Count == 0) { foreach (DataRow dr in dtCarInfo.Rows) { if (dr["CAR_TYPE"].ToString().Trim() == "1") { lm.Add(new sModel { key = dr["CARD_NO"].ToString(), value = dr["CAR_NO"].ToString() }); } } } } } catch (Exception ex) { WriteLog("读取车号匹配信息异常!:" + ex.Message); } } } public class sModel { public string key { get; set; } public string value { get; set; } } }