385 lines
17 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|