using CnasSynchronousCommon; using CnasSynchronusDAL; using CnasSynchronusIDAL; using CnasSynchrousModel; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; namespace CnasSynchronusClient { internal class TXTInstrumentData : InstrumentData { public string StrLocalPath { get; set; } public string StrUser { get; set; } public string StrPwd { get; set; } public string strTableName { get; set; } public string strDateColumn { get; set; } public string strDate { get; set; } public ITXTService txtDatabaseService { get { return new TXTService(); } } public NormalFileFormatConfig normalFileFormat { get; set; } /// /// 如果配置读取的是文件夹,该属性用来记录需要读取所有文件的缓冲路径 /// public List LstFileFullName { get; set; } public TXTInstrumentData(InstrumentDataSourceInfo dataSourceInfo, object[] vs) { if (dataSourceInfo.Path == null) { return; } this.normalFileFormat = FileOperation.GetFormatConfigData("NormalFileFormatConfig.xml"); string strSuffix = normalFileFormat.NormalFileSuffix; try { LstFileFullName = new List(); if (normalFileFormat.ReadNormalFileMode == "0") { RemoteFileCopy remoteFileCopy = new RemoteFileCopy(dataSourceInfo); remoteFileCopy.CopyFileFromRemote(strSuffix); this.StrLocalPath = FileHelper.getBasePath() + "\\Cache\\" + System.Text.RegularExpressions.Regex.Replace(dataSourceInfo.Path, "[ \\[ \\] \\^ \\-_*×――(^)|'$%~!@#$…&%¥—+=<>《》!!???::•`·、。,;,.;\"‘’“”-]", "").Replace(@"\", "") + strSuffix; this.strTableName = vs[0].ToString(); this.strDateColumn = vs[1].ToString(); this.strDate = vs[2].ToString(); LstFileFullName.Add(StrLocalPath); } //此时为读取“文件夹”模式,指定要读取的具体文件 else { //遍历当前路径,找到所有“今天”的数据文件,复制形成缓冲文件 //string strYear = DateTime.Now.Year.ToString(); //string strMonth= DateTime.Now.Month.ToString(); //string strDay = DateTime.Now.Day.ToString(); //DirectoryInfo root = new DirectoryInfo($"{dataSourceInfo.Path}\\{strYear}\\{strMonth}\\{strDay}"); DirectoryInfo root = new DirectoryInfo($"{dataSourceInfo.Path}"); foreach (FileInfo f in root.GetFiles()) { string name = f.Name; string fullName = f.FullName; string type = f.Extension; if (type.ToLower() == strSuffix.ToLower() && name.StartsWith(DateTime.Now.ToString(normalFileFormat.NormalFileNameFormat))) //“今天”产生的数据,并且格式是txt { RemoteFileCopy remoteFileCopy = new RemoteFileCopy(dataSourceInfo); remoteFileCopy.CopyFileFromRemote(strSuffix, $"{name}"); LstFileFullName.Add(FileHelper.getBasePath() + "\\Cache\\" + System.Text.RegularExpressions.Regex.Replace(dataSourceInfo.Path + $"{name}", "[ \\[ \\] \\^ \\-_*×――(^)|'$%~!@#$…&%¥—+=<>《》!!???::•`·、。,;,.;\"‘’“”-]", "").Replace(@"\", "") + strSuffix); } } this.strTableName = vs[0].ToString(); this.strDateColumn = vs[1].ToString(); this.strDate = vs[2].ToString(); } } catch (Exception ex) { AppLog.Error(ex.Message); } } public override Dictionary GetInstrumentData() { //读取数据 List dataTables = new List(); foreach (var item in LstFileFullName) { DataTable dt = txtDatabaseService.GetInstrumentData( new TXTOpenParams { StrPath = item, TxtFileMode = normalFileFormat.NormalFileDataMode, SplitType = normalFileFormat.NormalFileSplitType, StartLineIndex = ChangeStringToInt(normalFileFormat.NormalFileStartLineIndex), Suffix = normalFileFormat.NormalFileSuffix, FileNameFormat = normalFileFormat.NormalFileNameFormat, IfCustomCreateDateColumn = normalFileFormat.IfCustomCreateDateColumn == "0" ? true : false })["txt"]; dataTables.Add(dt); } //合并数据 DataTable dtCompine = new DataTable(); if (dataTables.Count > 0) { dtCompine = dataTables[0].Clone(); foreach (DataTable dt1 in dataTables) { foreach (DataRow dr in dt1.Rows) { DataRow drNew = dtCompine.NewRow(); drNew.ItemArray = dr.ItemArray; dtCompine.Rows.Add(drNew); } } } return new Dictionary() { { "TXT", dtCompine } }; } public override DataTable GetInstrumentDataByDate() { DataTable dtCompine = new DataTable(); try { //读取数据 List dataTables = new List(); foreach (var item in LstFileFullName) { DataTable dt = txtDatabaseService.GetInstrumentDataByDate ( new TXTOpenParams { StrPath = item, TxtFileMode = normalFileFormat.NormalFileDataMode, SplitType = normalFileFormat.NormalFileSplitType, StartLineIndex = ChangeStringToInt(normalFileFormat.NormalFileStartLineIndex), Suffix = normalFileFormat.NormalFileSuffix, FileNameFormat = normalFileFormat.NormalFileNameFormat, IfCustomCreateDateColumn = normalFileFormat.IfCustomCreateDateColumn == "0" ? true : false }, new ConditionParams { } ); dataTables.Add(dt); } //合并数据 if (dataTables.Count > 0) { dtCompine = dataTables[0].Clone(); foreach (DataTable dt1 in dataTables) { foreach (DataRow dr in dt1.Rows) { DataRow drNew = dtCompine.NewRow(); foreach (DataColumn dc in dtCompine.Columns) { if (dc.ColumnName.ToString().ToLower() == strDateColumn.ToLower()) { DateTime dt = DateTime.Now; if (DateTime.TryParse(dr[dc.ColumnName].ToString(), out dt)) { drNew[dc.ColumnName] = dr[dc.ColumnName].ToString(); } else { DateTime dtTime = DateTime.ParseExact(dr[dc.ColumnName].ToString(), normalFileFormat.NormalFileDateColumnFormat, new System.Globalization.CultureInfo("zh-CN", true)); if (dtTime.ToString("HH:mm:ss") == "00:00:00") drNew[dc.ColumnName] = dtTime.ToString("yyyy-MM-dd"); else drNew[dc.ColumnName] = dtTime.ToString("yyyy-MM-dd HH:mm:ss"); } } else { drNew[dc.ColumnName] = dr[dc.ColumnName]; } } dtCompine.Rows.Add(drNew); } } } } catch (Exception ex) { AppLog.Info("读取数据时发生异常"); AppLog.Error(ex.Message); } AppLog.Info("读取数据完成,准备返回"); return dtCompine; } public override DataTable GetInstrumentDataStruct() { //读取数据 List dataTables = new List(); foreach (var item in LstFileFullName) { DataTable dt = txtDatabaseService.GetInstrumentData( new TXTOpenParams { StrPath = item, TxtFileMode = normalFileFormat.NormalFileDataMode, SplitType = normalFileFormat.NormalFileSplitType, StartLineIndex = ChangeStringToInt(normalFileFormat.NormalFileStartLineIndex), Suffix=normalFileFormat.NormalFileSuffix, FileNameFormat=normalFileFormat.NormalFileNameFormat, IfCustomCreateDateColumn = normalFileFormat.IfCustomCreateDateColumn == "0" ? true : false })["TXT"]; dataTables.Add(dt); } //合并数据 DataTable dtCompine = new DataTable(); try { if (dataTables.Count > 0) { dtCompine = dataTables[0].Clone(); foreach (DataTable dt1 in dataTables) { foreach (DataRow dr in dt1.Rows) { DataRow drNew = dtCompine.NewRow(); drNew.ItemArray = dr.ItemArray; dtCompine.Rows.Add(drNew); } } } } catch (Exception ex) { AppLog.Error(ex.Message); } return dtCompine; } private int ChangeStringToInt(string strValue) { int value = 0; Int32.TryParse(strValue, out value); return value; } } }