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<AnaPrjBlockTime>();
|
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<AnaPrjPointTime>();
|
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<int, bool> GetFileExistStatus(int year,int month )
|
{
|
int day_count = DateTime.DaysInMonth(year, month);
|
Dictionary<int, bool> dict = new Dictionary<int, bool>();
|
|
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 ;
|
}
|
}
|
}
|