StableVersion4.3/HL_ChestPain_Statistics/Form_ChestPain_Statistics_L...

385 lines
17 KiB
C#

using DevExpress.XtraCharts;
using DevExpress.XtraEditors;
using HL_FristAidPlatform_DTO;
using HL_FristAidPlatform_Public;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
namespace HL_FristAidPlatform_ChestPain_Statistics
{
public partial class Form_ChestPain_Statistics_Line : XtraForm
{
public Form_ChestPain_Statistics_Line()
{
InitializeComponent();
}
/// <summary>
/// 窗体加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form_ChestPain_Statistics_Line_Load(object sender, EventArgs e)
{
dateEdit_Start.TimeValue = DateTime.Now.AddDays(1 - DateTime.Now.Day).Date.ToShortDateString() + " 00:00:00";
dateEdit_End.TimeValue = DateTime.Now.AddDays(1 - DateTime.Now.Day).Date.AddMonths(3).AddDays(-1).ToShortDateString() + " 23:59:59";
Statistics();
}
#region 报表绘制
private DataTable CreateChartData(string denominatorName, string moleculeName, int denominator, int molecule)
{
DataTable data = new DataTable("table1");
data.Columns.Add("Name", typeof(string));
data.Columns.Add("Value", typeof(int));
data.Rows.Add(denominatorName, denominator - molecule);
data.Rows.Add(moleculeName, molecule);
return data;
}
private SecondaryAxisY CreateAxisX(Series series, ChartControl chartControl)
{
// Create secondary axes, and add them to the chart's Diagram.
SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
((XYDiagram)chartControl.Diagram).SecondaryAxesY.Add(myAxis);
// Assign the series2 to the created axes.
((PointSeriesView)series.View).AxisY = myAxis;//为当前系列指定Y轴
myAxis.Title.Text = "A Secondary Y-Axis";
myAxis.Title.Alignment = StringAlignment.Far; //顶部对齐
myAxis.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;
myAxis.Title.Font = new Font("宋体", 9.0f);
series.View.Color = Color.Green;
Color color = series.View.Color;//设置坐标的颜色和图表线条颜色一致
myAxis.Title.TextColor = color;
myAxis.Label.TextColor = color;
myAxis.Color = color;
return myAxis;
}
/// <summary>
/// 报表绘制
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void chartControl_Bar_CustomDrawSeriesPoint(object sender, CustomDrawSeriesPointEventArgs e)
{
BarDrawOptions bo = e.SeriesDrawOptions as BarDrawOptions;
if (bo != null)
{
string name = e.Series.ToString();
if (name == "急诊中")
bo.Color = Color.Red;
else if (name == "STEMI")
bo.Color = Color.Yellow;
else if (name == "NSTEMI")
bo.Color = Color.Blue;
else if (name == "UA")
bo.Color = Color.Brown;
else if (name == "主动脉夹层")
bo.Color = Color.Pink;
else if (name == "肺动脉栓塞")
bo.Color = Color.Purple;
else if (name == "非ACS心源性胸痛")
bo.Color = Color.Green;
else if (name == "其它非心源性胸痛")
bo.Color = Color.Orange;
else if (name == "放弃治疗,病因未明")
bo.Color = Color.Gray;
else if (name == "其他")
bo.Color = Color.Cyan;
}
}
#endregion
/// <summary>
/// 统计按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void simpleButton_Report_Click(object sender, EventArgs e)
{
Statistics();
}
/// <summary>
/// 统计
/// </summary>
private void Statistics()
{
try
{
if (!string.IsNullOrEmpty(dateEdit_Start.TimeValue + "") && !string.IsNullOrEmpty(dateEdit_End.TimeValue + ""))
{
GetChestPainPatientHistogram();
}
else
{
XtraMessageBox.Show("时间区间不能为空!");
return;
}
}
catch (Exception ex)
{
PublicClass.WriteErrorLog("加载统计数据", "\r\n" + ex);
}
////chartControl_Bar.Series.Clear();
//string Url = string.Format("api/service/T_Service_ChestPain_Prehospital/GetWhere?startTime={0}&endTime={1}", dateEdit_Start.TimeValue, dateEdit_End.TimeValue);
//DataTable dataTable = DBHelpClass.Get(Url);
//if (dataTable != null)
//{
// DataTable dataTableCopy = new DataTable();
// dataTableCopy = dataTable.Clone();
// DataTable dataLine = new DataTable("table1");
// dataLine.Columns.Add("Name", typeof(string));
// dataLine.Columns.Add("Value", typeof(int));
// DataTable data = new DataTable("table1");
// data.Columns.Add("Year", typeof(string));
// data.Columns.Add("Name", typeof(string));
// data.Columns.Add("Value", typeof(int));
// var date = from t in dataTable.AsEnumerable()
// group t by new { t1 = t.Field<string>("CreationDate") } into m
// select new
// {
// month = m.Key
// };
// foreach (var month in date)
// {
// int monthCount = 0;
// var query = from t in dataTable.AsEnumerable()
// where t.Field<string>("CreationDate") == month.month.t1.ToString()
// group t by new { t1 = t.Field<string>("Content") } into m
// select new
// {
// name = m.Key.t1==""?"未知": m.Key.t1,
// count = m.Count()
// };
// foreach (var item in query.ToList())
// {
// monthCount += item.count;
// //Series seriesBar1 = new Series(item.name, ViewType.Bar);
// //seriesBar1.ArgumentScaleType = ScaleType.Qualitative;
// //seriesBar1.ValueScaleType = ScaleType.Numerical;
// //seriesBar1.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; //是否显示系列点标签
// //seriesBar1.LegendText = item.name;//设置标志系列的图例文本
// //seriesBar1.Points.Add(new SeriesPoint(month.month.t1.ToString(), item.count));
// ////chartControl_Bar.Series.AddRange(new Series[] { seriesBar1 });
// //chartControl2.Series.AddRange(new Series[] { seriesBar1 });
// data.Rows.Add(month.month.t1.ToString(), item.name, item.count);
// }
// dataLine.Rows.Add(month.month.t1.ToString(), monthCount);
// }
// //Series seriesLine = new Series("总人数", ViewType.Line);
// //seriesLine.ArgumentScaleType = ScaleType.Qualitative;
// //seriesLine.ValueScaleType = ScaleType.Numerical;
// //seriesLine.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; //是否显示系列点标签
// //seriesLine.ValueDataMembers[0] = "Value";
// //seriesLine.ArgumentDataMember = "Name";
// //seriesLine.DataSource = dataLine;
// //chartControl_Bar.Series.Add(seriesLine);
// //seriesLine.LegendTextPattern = "{A}:{V}";
// //seriesLine.Points.Add(new SeriesPoint(month.month.t1.ToString(), monthCount));
// //chartControl_line.Series.AddRange(new Series[] { seriesLine });
// chartControl1.Series["每月总数"].ValueDataMembers[0] = "Value";
// chartControl1.Series["每月总数"].ArgumentDataMember = "Name";
// chartControl1.Series["每月总数"].DataSource = dataLine;
// chartControl1.SeriesDataMember = "Name";
// chartControl1.SeriesTemplate.ArgumentDataMember = "Year";
// chartControl1.SeriesTemplate.ValueDataMembers.AddRange(new string[] { "Value" });
// chartControl1.DataSource = data;
// chartControl1.Legend.Direction = LegendDirection.LeftToRight;
// chartControl1.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.Center;
// chartControl1.Legend.AlignmentVertical = LegendAlignmentVertical.BottomOutside;
//}
}
/// <summary>
/// 柱状图数据渲染
/// </summary>
private void GetChestPainPatientHistogram()
{
List<MonthKeyValueDTO> listModel = DBHelpClass.GetList<MonthKeyValueDTO>(string.Format("api/service/T_Service_ChestPain_Statistics/GetChestPainPatientDistributionHistogram?hospitalGuid={0}&startTime={1}&endTime={2}", Information.Hospital.GUID, dateEdit_Start.TimeValue + "", dateEdit_End.TimeValue + ""));
chartControl1.Series.Clear();
chartControl1.Titles.Clear();
Series series1 = new Series("STEMI", ViewType.Bar);
Series series2 = new Series("NSTEMI", ViewType.Bar);
Series series3 = new Series("UA", ViewType.Bar);
Series series4 = new Series("主动脉夹层", ViewType.Bar);
Series series5 = new Series("肺动脉栓塞", ViewType.Bar);
Series series6 = new Series("非ACS心源性胸痛", ViewType.Bar);
Series series7 = new Series("其它非心源性胸痛", ViewType.Bar);
Series series8 = new Series("待查", ViewType.Bar);
Series series9 = new Series("未诊断", ViewType.Bar);
Series series10 = new Series("总数", ViewType.Line);
ChartTitle chartTitle1 = new ChartTitle();
chartTitle1.Text = "近六月胸痛患者趋势图";
chartControl1.Titles.Add(chartTitle1);
int max = 0;
if (listModel != null && listModel.Count > 0)
{
int sum = 0;
for (int i = 0; i < listModel.Count(); i++)
{
sum = 0;
for (int j = 0; j < listModel[i].list.Count(); j++)
{
sum += listModel[i].list[j].Value;
}
if (sum > max)
max = sum;
series1.Points.Add(new SeriesPoint(listModel[i].Month, listModel[i].list[0].Value));
series2.Points.Add(new SeriesPoint(listModel[i].Month, listModel[i].list[1].Value));
series3.Points.Add(new SeriesPoint(listModel[i].Month, listModel[i].list[2].Value));
series4.Points.Add(new SeriesPoint(listModel[i].Month, listModel[i].list[3].Value));
series5.Points.Add(new SeriesPoint(listModel[i].Month, listModel[i].list[4].Value));
series6.Points.Add(new SeriesPoint(listModel[i].Month, listModel[i].list[5].Value));
series7.Points.Add(new SeriesPoint(listModel[i].Month, listModel[i].list[6].Value));
series8.Points.Add(new SeriesPoint(listModel[i].Month, listModel[i].list[7].Value));
series9.Points.Add(new SeriesPoint(listModel[i].Month, listModel[i].list[8].Value));
series10.Points.Add(new SeriesPoint(listModel[i].Month, sum));
}
}
BarSeriesView bsv = (BarSeriesView)series1.View;
bsv.BarWidth = 0.25;
BarSeriesView bsv1 = (BarSeriesView)series2.View;
bsv1.BarWidth = 0.25;
BarSeriesView bsv2 = (BarSeriesView)series3.View;
bsv2.BarWidth = 0.25;
BarSeriesView bsv3 = (BarSeriesView)series4.View;
bsv3.BarWidth = 0.25;
BarSeriesView bsv4 = (BarSeriesView)series5.View;
bsv4.BarWidth = 0.25;
BarSeriesView bsv5 = (BarSeriesView)series6.View;
bsv5.BarWidth = 0.25;
BarSeriesView bsv6 = (BarSeriesView)series7.View;
bsv6.BarWidth = 0.25;
BarSeriesView bsv7 = (BarSeriesView)series8.View;
bsv7.BarWidth = 0.25;
BarSeriesView bsv8 = (BarSeriesView)series9.View;
bsv8.BarWidth = 0.25;
series10.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;
chartControl1.Series.AddRange(new Series[] { series1, series2, series3, series4, series5, series6, series7, series8, series9, series10 });
XYDiagram xyDia = chartControl1.Diagram as XYDiagram;
xyDia.AxisX.DateTimeScaleOptions.ScaleMode = ScaleMode.Manual;
xyDia.AxisX.DateTimeScaleOptions.MeasureUnit = DateTimeMeasureUnit.Month;
int tempone = max / 5;
int temptwo = max % 5;
if (temptwo == 0)
{
max = tempone * 5;
}
else
{
max = (tempone + 1) * 5;
}
if (max == 0)
max = 10;
xyDia.AxisY.WholeRange.MaxValue = max;
xyDia.AxisY.NumericScaleOptions.GridOffset = 0;
xyDia.AxisY.NumericScaleOptions.GridSpacing = max / 5;
((XYDiagram)(chartControl1.Diagram)).EnableAxisXScrolling = true;//启用横轴滚动条
}
/// <summary>
/// 本年度
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void simpleButton_ThisYear_Click(object sender, EventArgs e)
{
dateEdit_Start.TimeValue = new DateTime(DateTime.Now.Year, 1, 1).ToShortDateString() + " 00:00:00";
dateEdit_End.TimeValue = new DateTime(DateTime.Now.Year, 12, 31).ToShortDateString() + " 23:59:59";
Statistics();
}
/// <summary>
/// 上半年
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void simpleButton_UpHalfYear_Click(object sender, EventArgs e)
{
dateEdit_Start.TimeValue = new DateTime(DateTime.Now.Year, 1, 1).ToShortDateString() + " 00:00:00";
dateEdit_End.TimeValue = new DateTime(DateTime.Now.Year, 6, 30).ToShortDateString() + " 23:59:59";
Statistics();
}
/// <summary>
/// 下半年
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void simpleButton_DownHalfYear_Click(object sender, EventArgs e)
{
dateEdit_Start.TimeValue = new DateTime(DateTime.Now.Year, 7, 1).ToShortDateString() + " 00:00:00";
dateEdit_End.TimeValue = new DateTime(DateTime.Now.Year, 12, 31).ToShortDateString() + " 23:59:59";
Statistics();
}
/// <summary>
/// 本月度
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void simpleButton_ThisMonth_Click(object sender, EventArgs e)
{
dateEdit_Start.TimeValue = DateTime.Now.AddDays(1 - DateTime.Now.Day).Date.ToShortDateString() + " 00:00:00";
dateEdit_End.TimeValue = DateTime.Now.AddDays(1 - DateTime.Now.Day).Date.AddMonths(1).AddDays(-1).ToShortDateString() + " 23:59:59";
Statistics();
}
/// <summary>
/// 本季度
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void simpleButton_ThisQuarter_Click(object sender, EventArgs e)
{
dateEdit_Start.TimeValue = DateTime.Now.AddMonths(0 - (DateTime.Now.Month - 1) % 3).AddDays(1 - DateTime.Now.Day).ToShortDateString() + " 00:00:00";
dateEdit_End.TimeValue = DateTime.Now.AddMonths(0 - (DateTime.Now.Month - 1) % 3).AddDays(1 - DateTime.Now.Day).AddMonths(3).AddDays(-1).ToShortDateString() + " 23:59:59";
Statistics();
}
/// <summary>
/// 本周
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void simpleButton_ThisWeek_Click(object sender, EventArgs e)
{
dateEdit_Start.TimeValue = DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString() + " 00:00:00";
dateEdit_End.TimeValue = DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString() + " 23:59:59";
Statistics();
}
}
}