using com.hnshituo.core.webapp.vo;
using Common;
using Common.DbOption.work;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.OracleClient;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
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 MeterBaseSpotInfoService meterBaseSpotInfoService = new MeterBaseSpotInfoService();
///
/// 获取轨道衡系统上传的原始数据文件保存路径
///
private void GetOrigDataPathInfo()
{
try
{
//doc:编辑TrainOrigData.txt时要用UTF-8格式保存
DateTime dateTime = DateTime.Now;
//string str = System.IO.File.ReadAllText(m_szRunPath + "\\TrainOrigData.txt", Encoding.Default);
m_szOrigDataPath = new string[] { string.Format("D:\\JISCO\\Project code\\JISCO-WINFROM\\jisco_winform_wzjl\\TrainVideoDataDispose\\bin\\Debug\\{0}\\{1}\\{2}\\txt", dateTime.ToString("yyyy"), dateTime.ToString("MM"), dateTime.ToString("dd")) };
}
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("POINTNO");//计量编号
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("WEIGHT");//重量
m_dtTrainWeightOrigData.Columns.Add(dc);
dc = new System.Data.DataColumn("SPEED");//速度
m_dtTrainWeightOrigData.Columns.Add(dc);
dc = new System.Data.DataColumn("POINTNO");//计量编号
m_dtTrainWeightOrigData.Columns.Add(dc);
dc = new System.Data.DataColumn("POINTNAME");//计量点
m_dtTrainWeightOrigData.Columns.Add(dc);
dc = new System.Data.DataColumn("WEIGHTTIME");//时间
m_dtTrainWeightOrigData.Columns.Add(dc);
dc = new System.Data.DataColumn("ISVALID");//是否有效
m_dtTrainWeightOrigData.Columns.Add(dc);
dc = new System.Data.DataColumn("RAILWAYWORKNO");//列车作业编号
m_dtTrainWeightOrigData.Columns.Add(dc);
dc = new System.Data.DataColumn("RAILWAYMODELNAME");//车型名称
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 Hashtable hashtable = new Hashtable();//存储称点信息
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, fi.FullName) == 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 strPointNo = "";
string strPointName = "";
string strVideoFileName = "";
DataRow dr = null;
//读取称点配置信息并存入hashtable
hashtable.Clear();
//读取配置
//拆分行
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[1];//车厢号
//dr["TRAINNO"] = strSequenceNo;
dr["TRAINNO"] = Fields[3];
dr["RAILWAYMODELNAME"] = Fields[2];//车型
dr["WEIGHT"] = Fields[4];//重量
dr["RAILWAYWORKNO"] = strSequenceNo;//列车作业编号
if (Fields[3] == "")
{//lck20150109静态过磅时车速处理
Fields[3] = "3";
}
dr["SPEED"] = Fields[5];//速度
RESTfulResult> rmX = meterBaseSpotInfoService.doQueryWf(new MeterBaseSpotInfo { baseSpotNo = Fields[8] });
strPointNo = rmX.Data[0].baseSpotNo;//称点信息
strPointName = rmX.Data[0].baseSpotName;//称点信息
dr["POINTNO"] = strPointNo;//称点信息
dr["POINTNAME"] = strPointName;//称点信息
string _path = strPath.Substring(2);//录像地址
string _strPath = "\\\\194.168.0.38" + _path;//194.168.0.38//录像地址dd
strVideoFileName = strPath.Replace("\\txt", "\\movie").Replace(".txt",".mp4");//录像地址
dr["WEIGHTTIME"] = Fields[6];//时间
strWeightTime = Fields[6];//时间
dr["ISVALID"] = "1";//是否有效
m_dtTrainWeightOrigData.Rows.Add(dr);
}
m_dtTrainWeightOrigDataMain.Clear();
DataRow newRow = m_dtTrainWeightOrigDataMain.NewRow();
newRow["SEQUENCENUMBER"] = strSequenceNo;
newRow["WEIGHTTIME"] = strWeightTime;
newRow["POINTNO"] = strPointNo;
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)
{
MeterWorkRailwayMotorialReceived meterWorkRailwayMotorialReceived = new MeterWorkRailwayMotorialReceived();
meterWorkRailwayMotorialReceived.actualFirstNo = dr["SEQUENCENUMBER"].ToString().Trim();//流水号
meterWorkRailwayMotorialReceived.baseSpotName = dr["POINTNAME"].ToString().Trim();//称点名称
meterWorkRailwayMotorialReceived.baseSpotNo = dr["POINTNO"].ToString().Trim();//称点编号
meterWorkRailwayMotorialReceived.railwayNo = dr["TRAINNO"].ToString().Trim();//车号
meterWorkRailwayMotorialReceived.railwaySpeed = double.Parse(dr["SPEED"].ToString().Trim());//速度
meterWorkRailwayMotorialReceived.valueFlag = dr["ISVALID"].ToString().Trim();//是否有效
meterWorkRailwayMotorialReceived.meterWeight = double.Parse(dr["WEIGHT"].ToString().Trim());//重量
meterWorkRailwayMotorialReceived.railwayModel = dr["RAILWAYMODELNAME"].ToString().Trim();//车型
meterWorkRailwayMotorialReceived.railwayWorkNo = dr["RAILWAYWORKNO"].ToString().Trim();//列车作业编号
meterWorkRailwayMotorialReceived.createTime = DateTime.Parse(dr["WEIGHTTIME"].ToString());//时间
meterWorkRailwayMotorialReceived.railwayCarriageNo = dr["INDEXNO"].ToString().Trim();//车厢号
RESTfulResult rm = MeterWorkRailwayReceivedService.doAdd(meterWorkRailwayMotorialReceived);
if (!rm.Succeed)
{
WriteLog("保存数据异常原因!:" + rm.Message);
return false;
}
}
//保存主表数据
foreach (DataRow dr in dtMain.Rows)
{
MeterWorkRailwayRecMain meterWorkRailwayRecMain = new MeterWorkRailwayRecMain();
meterWorkRailwayRecMain.actualNo = dr["SEQUENCENUMBER"].ToString().Trim();
meterWorkRailwayRecMain.baseSpotName = dr["POINTNAME"].ToString().Trim();
meterWorkRailwayRecMain.baseSpotNo = dr["POINTNO"].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; }
}
}