using IStation.CalcModel; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; namespace IStation.WinFrmUI.CalcErQu { internal class HistoryAnaPrjFileHelper { //保存 internal static bool SaveXml(DateTime day,AnaPrj prj) { if(prj == null ||prj.BlockTimes == null || prj.BlockTimes.Count == 0) return false; var root_folder = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(), "History"); if(!System.IO.Directory.Exists(root_folder)) { System.IO.Directory.CreateDirectory(root_folder); } var month_folder = System.IO.Path.Combine(root_folder, day.ToString("yyyy-MM")); if (!System.IO.Directory.Exists(month_folder)) { System.IO.Directory.CreateDirectory(month_folder); } string filePath = System.IO.Path.Combine(month_folder, string.Format("{0}.xml", day.ToString("yyyy-MM-dd"))); if (File.Exists(filePath)) { File.Delete(filePath); } XmlDocument xmlDoc = new XmlDocument(); // 一些声明信息 XmlDeclaration xmlDecl = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null); xmlDoc.AppendChild(xmlDecl); // 新建根节点 XmlElement rootNode = xmlDoc.CreateElement("root"); xmlDoc.AppendChild(rootNode); // root 下的子节点 //XmlElement toTalTick = xmlDoc.CreateElement("TotalTick"); //toTalTick.InnerText = "10"; //rootNode.AppendChild(toTalTick); //注意这里是 root.AppendChild #region 版本信息 XmlNode nodeVersionInfo = rootNode.SelectSingleNode("VersionInfo"); if (nodeVersionInfo == null) { //创建VersionInfo子节点 XmlNode VersionInfoNode = xmlDoc.CreateElement("VersionInfo"); XmlAttribute VersionInfoNodeAttribute = xmlDoc.CreateAttribute("Description"); VersionInfoNodeAttribute.Value = "XML_Version"; VersionInfoNode.InnerText = "V1"; VersionInfoNode.Attributes.Append(VersionInfoNodeAttribute); rootNode.AppendChild(VersionInfoNode); } else { if (nodeVersionInfo.InnerText != "V1") nodeVersionInfo.InnerText = "V1"; } #endregion var nodeProject = xmlDoc.CreateElement("ProjectInfo"); rootNode.AppendChild(nodeProject); var nodeID = xmlDoc.CreateElement("ID"); nodeID.InnerText = prj.ID; nodeProject.AppendChild(nodeID); var nodeStartTime = xmlDoc.CreateElement("StartTime"); nodeStartTime.InnerText = prj.StartTime.ToString(); nodeProject.AppendChild(nodeStartTime); var nodeEndTime = xmlDoc.CreateElement("EndTime"); nodeEndTime.InnerText = prj.EndTime.ToString(); nodeProject.AppendChild(nodeEndTime); var nodeName = xmlDoc.CreateElement("Name"); nodeName.InnerText = prj.Name.ToString(); nodeProject.AppendChild(nodeName); var nodeWaterLevelInfo = xmlDoc.CreateElement("WaterLevelInfo"); nodeWaterLevelInfo.InnerText = prj.WaterLevelInfo.ToString(); nodeProject.AppendChild(nodeWaterLevelInfo); var nodeSumPower = xmlDoc.CreateElement("SumPower"); nodeSumPower.InnerText = prj.SumPower.ToString(); nodeProject.AppendChild(nodeSumPower); var nodeSumFlow = xmlDoc.CreateElement("SumFlow"); nodeSumFlow.InnerText = prj.SumFlow.ToString(); nodeProject.AppendChild(nodeSumFlow); var nodeSumMoney = xmlDoc.CreateElement("SumMoney"); nodeSumMoney.InnerText = prj.SumMoney.ToString(); nodeProject.AppendChild(nodeSumMoney); var nodeCalcSpaceMinute = xmlDoc.CreateElement("CalcSpaceMinute"); nodeCalcSpaceMinute.InnerText = prj.CalcSpaceMinute.ToString(); nodeProject.AppendChild(nodeCalcSpaceMinute); var last_bt = prj.BlockTimes.Last(); if (last_bt.EndTime.Hour == 0) { var node_LastTime_OpenPumpCount = xmlDoc.CreateElement("LastTime_OpenPumpCount"); node_LastTime_OpenPumpCount.InnerText = last_bt.OpenPumpCount.ToString(); nodeProject.AppendChild(node_LastTime_OpenPumpCount); } else {//表示全部关机 var node_LastTime_OpenPumpCount = xmlDoc.CreateElement("LastTime_OpenPumpCount"); node_LastTime_OpenPumpCount.InnerText = "0"; nodeProject.AppendChild(node_LastTime_OpenPumpCount); } #region BlockTimes var nodeBlockTimes = xmlDoc.CreateElement("BlockTimes"); nodeProject.AppendChild(nodeBlockTimes); foreach (var bt in prj.BlockTimes) { var nodeBlockTime = xmlDoc.CreateElement("BlockTime"); nodeBlockTimes.AppendChild(nodeBlockTime); XmlNode node_StartTime = xmlDoc.CreateElement("StartTime"); node_StartTime.InnerText = bt.StartTime.ToString(); nodeBlockTime.AppendChild(node_StartTime); XmlNode node_EndTime = xmlDoc.CreateElement("EndTime"); node_EndTime.InnerText = bt.EndTime.ToString(); nodeBlockTime.AppendChild(node_EndTime); XmlNode node_OpenPumpCount = xmlDoc.CreateElement("OpenPumpCount"); node_OpenPumpCount.InnerText = bt.OpenPumpCount.ToString(); nodeBlockTime.AppendChild(node_OpenPumpCount); XmlNode node_SumFlow = xmlDoc.CreateElement("SumFlow"); node_SumFlow.InnerText = bt.SumFlow.ToString(); nodeBlockTime.AppendChild(node_SumFlow); XmlNode node_SumPower = xmlDoc.CreateElement("SumPower"); node_SumPower.InnerText = bt.SumPower.ToString(); nodeBlockTime.AppendChild(node_SumPower); XmlNode node_SumMoney = xmlDoc.CreateElement("SumMoney"); node_SumMoney.InnerText = bt.SumMoney.ToString(); nodeBlockTime.AppendChild(node_SumMoney); } #endregion #region PointTimes var nodePointTimes = xmlDoc.CreateElement("PointTimes"); nodeProject.AppendChild(nodePointTimes); foreach (var pt in prj.PointTimes) { var nodePointTime = xmlDoc.CreateElement("PointTime"); nodePointTimes.AppendChild(nodePointTime); XmlNode node_Time = xmlDoc.CreateElement("Time"); node_Time.InnerText = pt.Time.ToString(); nodePointTime.AppendChild(node_Time); XmlNode node_OpenPumpCount = xmlDoc.CreateElement("OpenPumpCount"); node_OpenPumpCount.InnerText = pt.OpenPumpCount.ToString(); nodePointTime.AppendChild(node_OpenPumpCount); XmlNode node_RealHead = xmlDoc.CreateElement("RealHead"); node_RealHead.InnerText = pt.RealHead.ToString(); nodePointTime.AppendChild(node_RealHead); XmlNode node_RealFlow = xmlDoc.CreateElement("RealFlow"); node_RealFlow.InnerText = pt.RealFlow.ToString(); nodePointTime.AppendChild(node_RealFlow); XmlNode node_RealPower = xmlDoc.CreateElement("RealPower"); node_RealPower.InnerText = pt.RealPower.ToString(); nodePointTime.AppendChild(node_RealPower); XmlNode node_SumFlow = xmlDoc.CreateElement("SumFlow"); node_SumFlow.InnerText = pt.SumFlow.ToString(); nodePointTime.AppendChild(node_SumFlow); XmlNode node_SumPower = xmlDoc.CreateElement("SumPower"); node_SumPower.InnerText = pt.SumPower.ToString(); nodePointTime.AppendChild(node_SumPower); XmlNode node_SumMoney = xmlDoc.CreateElement("SumMoney"); node_SumMoney.InnerText = pt.SumMoney.ToString(); nodePointTime.AppendChild(node_SumMoney); XmlNode node_WaterLevelQ = xmlDoc.CreateElement("WaterLevelQ"); node_WaterLevelQ.InnerText = pt.WaterLevelQ.ToString(); nodePointTime.AppendChild(node_WaterLevelQ); XmlNode node_WaterLevelH = xmlDoc.CreateElement("WaterLevelH"); node_WaterLevelH.InnerText = pt.WaterLevelH.ToString(); nodePointTime.AppendChild(node_WaterLevelH); XmlNode node_WaterLevelC = xmlDoc.CreateElement("WaterLevelC"); node_WaterLevelC.InnerText = pt.WaterLevelC.ToString(); nodePointTime.AppendChild(node_WaterLevelC); XmlNode node_ReservoirDropFlowTotal = xmlDoc.CreateElement("ReservoirDropFlowTotal"); node_ReservoirDropFlowTotal.InnerText = pt.ReservoirDropFlowTotal.ToString(); nodePointTime.AppendChild(node_ReservoirDropFlowTotal); } #endregion xmlDoc.Save(filePath); return true; } internal static int GetLastTime_OpenPumpCount(DateTime day ) { var root_folder = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(), "History"); if (!System.IO.Directory.Exists(root_folder)) { return -1; } var month_folder = System.IO.Path.Combine(root_folder, day.ToString("yyyy-MM")); if (!System.IO.Directory.Exists(month_folder)) { return -1; } string filePath = System.IO.Path.Combine(month_folder, string.Format("{0}.xml", day.ToString("yyyy-MM-dd"))); if (!File.Exists(filePath)) { return -1; } System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.Load(filePath); System.Xml.XmlElement rootNode = xmlDoc.DocumentElement;//根节点 if (rootNode == null) return -1; var nodeProjectInfo = rootNode.SelectSingleNode("ProjectInfo"); if (nodeProjectInfo == null) return -1; var nodeLastBlockTimeOpenPumpCount = nodeProjectInfo.SelectSingleNode("LastTime_OpenPumpCount"); if (nodeLastBlockTimeOpenPumpCount == null) return -1; return Convert.ToInt32(nodeLastBlockTimeOpenPumpCount.InnerText); } internal static AnaPrj GetAnaPrj(DateTime day) { var root_folder = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(), "History"); if (!System.IO.Directory.Exists(root_folder)) { return null; } var month_folder = System.IO.Path.Combine(root_folder, day.ToString("yyyy-MM")); if (!System.IO.Directory.Exists(month_folder)) { return null; } string filePath = System.IO.Path.Combine(month_folder, string.Format("{0}.xml", day.ToString("yyyy-MM-dd"))); if (!File.Exists(filePath)) { return null; } System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.Load(filePath); System.Xml.XmlElement rootNode = xmlDoc.DocumentElement;//根节点 if (rootNode == null) return null; var nodeProjectInfo = rootNode.SelectSingleNode("ProjectInfo"); if (nodeProjectInfo == null) return null; AnaPrj prj = new AnaPrj(); var nodeID = nodeProjectInfo.SelectSingleNode("ID"); if (nodeID == null) return null; prj.ID = nodeID.InnerText ; var nodeStartTime = nodeProjectInfo.SelectSingleNode("StartTime"); if (nodeStartTime == null) return null; prj.StartTime = Convert.ToDateTime(nodeStartTime.InnerText); var nodeEndTime = nodeProjectInfo.SelectSingleNode("EndTime"); if (nodeEndTime == null) return null; prj.EndTime = Convert.ToDateTime(nodeEndTime.InnerText); var nodeWaterLevelInfo = nodeProjectInfo.SelectSingleNode("WaterLevelInfo"); if (nodeWaterLevelInfo == null) return null; prj.WaterLevelInfo = nodeWaterLevelInfo.InnerText ; var nodeSumFlow = nodeProjectInfo.SelectSingleNode("SumFlow"); if (nodeSumFlow == null) return null; prj.SumFlow = Convert.ToDouble(nodeSumFlow.InnerText); var nodeSumPower = nodeProjectInfo.SelectSingleNode("SumPower"); if (nodeSumPower == null) return null; prj.SumPower = Convert.ToDouble(nodeSumPower.InnerText); var nodeSumMoney = nodeProjectInfo.SelectSingleNode("SumMoney"); if (nodeSumMoney == null) return null; prj.SumMoney = Convert.ToDouble(nodeSumMoney.InnerText); var nodeCalcSpaceMinute = nodeProjectInfo.SelectSingleNode("CalcSpaceMinute"); if (nodeCalcSpaceMinute == null) return null; prj.CalcSpaceMinute = Convert.ToInt32(nodeCalcSpaceMinute.InnerText); var nodeBlockTimes = nodeProjectInfo.SelectSingleNode("BlockTimes"); if (nodeBlockTimes == null) return null; var list_nodeBlockTimes = nodeBlockTimes.SelectNodes("BlockTime"); prj.BlockTimes = new List(); foreach (XmlNode nodeBlockTime in list_nodeBlockTimes) { AnaPrjBlockTime abt = new AnaPrjBlockTime(); abt.StartTime = DateTime.Parse( nodeBlockTime.SelectSingleNode("StartTime").InnerText); abt.EndTime = DateTime.Parse(nodeBlockTime.SelectSingleNode("EndTime").InnerText); abt.OpenPumpCount = int.Parse(nodeBlockTime.SelectSingleNode("OpenPumpCount").InnerText); abt.SumFlow = double.Parse(nodeBlockTime.SelectSingleNode("SumFlow").InnerText); abt.SumPower = double.Parse(nodeBlockTime.SelectSingleNode("SumPower").InnerText); abt.SumMoney = double.Parse(nodeBlockTime.SelectSingleNode("SumMoney").InnerText); prj.BlockTimes.Add(abt); } var nodePointTimes = nodeProjectInfo.SelectSingleNode("PointTimes"); if (nodePointTimes == null) return null; var list_PointTimes = nodePointTimes.SelectNodes("PointTime"); prj.PointTimes = new List(); foreach (XmlNode nodePointTime in list_PointTimes) { AnaPrjPointTime abt = new AnaPrjPointTime(); abt.Time = DateTime.Parse(nodePointTime.SelectSingleNode("Time").InnerText); abt.OpenPumpCount = int.Parse(nodePointTime.SelectSingleNode("OpenPumpCount").InnerText); abt.RealHead = double.Parse(nodePointTime.SelectSingleNode("RealHead").InnerText); abt.RealFlow = double.Parse(nodePointTime.SelectSingleNode("RealFlow").InnerText); abt.RealPower = double.Parse(nodePointTime.SelectSingleNode("RealPower").InnerText); abt.SumFlow = double.Parse(nodePointTime.SelectSingleNode("SumFlow").InnerText); abt.SumPower = double.Parse(nodePointTime.SelectSingleNode("SumPower").InnerText); abt.SumMoney = double.Parse(nodePointTime.SelectSingleNode("SumMoney").InnerText); abt.WaterLevelQ = double.Parse(nodePointTime.SelectSingleNode("WaterLevelQ").InnerText); abt.WaterLevelH = double.Parse(nodePointTime.SelectSingleNode("WaterLevelH").InnerText); abt.WaterLevelC = double.Parse(nodePointTime.SelectSingleNode("WaterLevelC").InnerText); abt.ReservoirDropFlowTotal = double.Parse(nodePointTime.SelectSingleNode("ReservoirDropFlowTotal").InnerText); prj.PointTimes.Add(abt); } return prj; } internal static Dictionary GetFileExistStatus(int year,int month ) { int day_count = DateTime.DaysInMonth(year, month); Dictionary dict = new Dictionary(); var root_folder = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(), "History"); if (!System.IO.Directory.Exists(root_folder)) { for (int i = 1; i <= day_count; i++) { dict[i] = false; } } DateTime startDay = new DateTime(year, month, 1); var month_folder = System.IO.Path.Combine(root_folder, startDay.ToString("yyyy-MM")); if (!System.IO.Directory.Exists(month_folder)) { for (int i = 1; i <= day_count; i++) { dict[i] = false; } } for (int i = 1; i <= day_count; i++) { var day = new DateTime(year, month, i); string filePath = System.IO.Path.Combine(month_folder, string.Format("{0}.xml", day.ToString("yyyy-MM-dd"))); if (!File.Exists(filePath)) { dict[i] = false; } else { dict[i] = true ; } } return dict; } internal static bool Delete(DateTime day) { var root_folder = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(), "History"); if (!System.IO.Directory.Exists(root_folder)) { return false ; } var month_folder = System.IO.Path.Combine(root_folder, day.ToString("yyyy-MM")); if (!System.IO.Directory.Exists(month_folder)) { return false; } string filePath = System.IO.Path.Combine(month_folder, string.Format("{0}.xml", day.ToString("yyyy-MM-dd"))); if (!File.Exists(filePath)) { return false; } System.IO.File.Delete(filePath); return true ; } } }