StableVersion4.3/HL_ChestPain_Statistics/Form_Report_Basic.cs

530 lines
24 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using DevExpress.XtraCharts;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using HL_FristAidPlatform_Public;
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace HL_FristAidPlatform_ChestPain_Statistics
{
/// <summary>
/// 胸痛中心指标分析--基层版
/// LYM 2020-06-24
/// </summary>
public partial class Form_Report_Basic : XtraForm
{
#region 全局变量
/// <summary>
/// 当前统计 院区编号
/// </summary>
private string Cur_HospitalGuid = string.Empty;
/// <summary>
/// 当前统计 开始时间
/// </summary>
private string Cur_StartDate = string.Empty;
/// <summary>
/// 当前统计 结束时间
/// </summary>
private string Cur_EndDate = string.Empty;
/// <summary>
/// 当前统计 数据类型 -1:全部 0:未上传;1:已上传
/// </summary>
private string Cur_DataType = string.Empty;
/// <summary>
/// 当前统计 报表类型 1:月报表
/// </summary>
private string Cur_ReportType = string.Empty;
/// <summary>
/// 当前统计 报表名称 与枚举 Enumerate.ChestPainStandardReport 对比
/// </summary>
private string Cur_ReportName = string.Empty;
/// <summary>
/// 报表标题
/// </summary>
private string Cur_ReportTitle = string.Empty;
/// <summary>
/// 等待窗体
/// </summary>
private Loading loading = new Loading();
/// <summary>
/// 报表头
/// </summary>
private ChartTitle chartTitle_Report = new ChartTitle();
/// <summary>
/// 当前报表数据源
/// </summary>
private DataSet Cur_DataSet = new DataSet();
#endregion
/// <summary>
/// 胸痛中心指标分析--基层版
/// </summary>
/// <param name="_hospitalGuid">医院编号</param>
/// <param name="_startDate">开始时间</param>
/// <param name="_endDate">结束时间</param>
/// <param name="_dataType">数据类型 0:全部 1:已上传</param>
/// <param name="_reportType">报表类型 1:月报表</param>
/// <param name="_reportName">报表名称 与枚举 Enumerate.ChestPainStandardReport 对比</param>
/// <param name="_reportTitle">报表标题</param>
public Form_Report_Basic(string _hospitalGuid, string _startDate, string _endDate, string _dataType, string _reportType, string _reportName, string _reportTitle)
{
Cur_HospitalGuid = _hospitalGuid;
Cur_StartDate = _startDate;
Cur_EndDate = _endDate;
Cur_DataType = _dataType;
Cur_ReportType = _reportType;
Cur_ReportName = _reportName;
Cur_ReportTitle = _reportTitle;
InitializeComponent();
}
/// <summary>
/// 窗体加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form_Report_Basic_Load(object sender, EventArgs e)
{
BindHospital();
date_Start.TimeValue = Cur_StartDate;
date_End.TimeValue = Cur_EndDate;
radioGroup_DataType.EditValue = Cur_DataType;
radioGroup_ReportType.EditValue = Cur_ReportType;
lookUp_Hospital.EditValue = Cur_HospitalGuid;
BindInfo();
this.Text += "(" + Cur_ReportName + ")";
}
/// <summary>
/// 绑定机构信息
/// </summary>
private void BindHospital()
{
try
{
//数据源
DataTable ResultDT = new DataTable();
//有所有院区权限
if (PublicHelp.IsHaveAllDistrictRight(Information.User.ID))
{
string Url = "api/base/T_Base_Hospital/GetList";
ResultDT = DBHelpClass.Get(Url);
}
//只获取当前院区数据
else
{
string Url = string.Format("api/base/T_Base_Hospital/{0}", Information.Hospital.GUID);
ResultDT = DBHelpClass.GetDataRow(Url);
}
PublicClass.SetLookUpList(lookUp_Hospital, ResultDT, "guid", "name", true);
}
catch (Exception ex)
{
PublicClass.WriteErrorLog(this.Text, "绑定机构信息:\r\n" + ex);
}
}
/// <summary>
/// 绑定数据
/// </summary>
private void BindInfo()
{
string HospitalGuid = PublicClass.ToString(lookUp_Hospital.EditValue, "");
string StartDate = PublicClass.ToDateTime(date_Start.TimeValue, PublicClass.DefaultTime).ToString(PublicClass.TimeToString);
string EndDate = PublicClass.ToDateTime(date_End.TimeValue, PublicClass.DefaultTime).ToString(PublicClass.TimeToString);
string DataType = PublicClass.ToString(radioGroup_DataType.EditValue, "");
string ReportType = PublicClass.ToString(radioGroup_ReportType.EditValue, "");
string StartTimeAxisID = string.Empty;
string EndTimeAxisID = string.Empty;
string DiffFlag = "2";//获取差异标记 0:天,1:时,2:分,3:秒
string ReportName = Cur_ReportName;
string SeriesName = string.Empty;//报表名称
//主报表标题
chart_Report1.Titles.Clear();
chartTitle_Report.Text = Cur_ReportName + "、" + Cur_ReportTitle; ;
chartTitle_Report.Font = new Font("Tahoma", 12, GraphicsUnit.Point);
chart_Report1.Titles.AddRange(new ChartTitle[] { chartTitle_Report });
ClientFactory<string> httpClient = new HttpClientFactory<string>();
Client<string> client = httpClient.VisitFactory();
#region 报表
//5.16、对于自行来院或经救护车入院的所有急性胸痛患者缩短了从首次医疗接触到完成首份心电图时间且要求月平均小于10分钟
if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.516))
{
SeriesName = "平均时间";
DrawLine(10, "分钟");
StartTimeAxisID = PublicClassForDataBase.Config1003;
EndTimeAxisID = PublicClassForDataBase.Config1004;
}
//5.17、对于STEMI患者缩短了从完成首份心电图至首份心电图确诊时间且要求月平均小于10分钟
if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.517))
{
SeriesName = "平均时间";
DrawLine(10, "分钟");
StartTimeAxisID = PublicClassForDataBase.Config1004;
EndTimeAxisID = PublicClassForDataBase.Config1006;
}
//5.18、经救护车入院的STEMI患者院前远程传输心电图至胸痛中心的比例不低于30%且在过去6个月内呈现增加趋势
if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.518))
{
SeriesName = "上传比例(%)";
DrawLine(30, "%");
StartTimeAxisID = "";
EndTimeAxisID = "";
}
//5.19、肌钙蛋白从抽血完成到获取报告时间20分钟
if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.519))
{
SeriesName = "平均时间";
DrawLine(20, "分钟");
StartTimeAxisID = PublicClassForDataBase.Config1009;
EndTimeAxisID = PublicClassForDataBase.Config1010;
}
//5.20、发病至首次医疗接触在12小时以内的STEMI患者早期再灌注治疗溶栓 + PPCI的比例不低于75%
else if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.520))
{
SeriesName = "再灌注治疗比例(%)";
DrawLine(75, "%");
DiffFlag = "1";
StartTimeAxisID = PublicClassForDataBase.Config1001;
EndTimeAxisID = PublicClassForDataBase.Config1003;
}
//5.21、适合溶栓的患者接受溶栓治疗的比例不低于50%且在过去6个月内呈现增加趋势
else if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.521))
{
SeriesName = "患者接受溶栓治疗的比例";
DrawLine(50, "%");
StartTimeAxisID = "";
EndTimeAxisID = "";
}
//5.22、经120入院的STEMI患者直达溶栓场所的比例大于50%或呈明显增加趋势
else if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.522))
{
SeriesName = "STEMI患者直达溶栓场所的比例";
DrawLine(50, "%");
StartTimeAxisID = "";
EndTimeAxisID = "";
}
//5.23、所有院内溶栓STEMI患者进门-溶栓时间已明显缩短平均时间应在30分钟以内且至少 75%的病例能达到此标准如果目前无法达到上述要求至少近6个月已经呈现出明显的缩短趋势 且至少50%的病例达30分钟以内且已制定合理计划以确保在通过认证后的第1年内达到平均30分 钟以内且75%的合格率;
else if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.523))
{
SeriesName = "平均时间";
DrawLine(30, "分钟");
StartTimeAxisID = PublicClassForDataBase.Config1007;
EndTimeAxisID = PublicClassForDataBase.Config1018;
}
//5.24、所有院前溶栓患者,首次医疗接触-溶栓时间呈现缩短趋势且小于30分钟的比例大于30%
else if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.524))
{
SeriesName = "平均时间";
DrawLine(30, "分钟");
StartTimeAxisID = PublicClassForDataBase.Config1003;
EndTimeAxisID = PublicClassForDataBase.Config1018;
}
//5.31、本院介入医生或转运介入医生实施PPCI月平均入门-导丝通过时间90分钟且达标率75%若当前无法达到则应呈现改进趋势且应制订措施促进改进确保在通过认证后1年逐步达到上述要求
else if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.531))
{
SeriesName = "平均时间";
DrawLine(90, "分钟");
StartTimeAxisID = PublicClassForDataBase.Config1007;
EndTimeAxisID = PublicClassForDataBase.Config1027;
}
//5.32、导管室激活时间小于30分钟
else if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.532))
{
SeriesName = "平均时间";
DrawLine(30, "分钟");
StartTimeAxisID = PublicClassForDataBase.Config1021;
EndTimeAxisID = PublicClassForDataBase.Config1022;
}
string Url = string.Format("api/service/T_Service_ChestPain_Statistics/GetReportBasic?hospitalGuid={0}&startDate={1}&endDate={2}&dataType={3}&reportType={4}&startTimeAxisID={5}&endTimeAxisID={6}&diffFlag={7}&reportName={8}", HospitalGuid, StartDate, EndDate, DataType, ReportType, StartTimeAxisID, EndTimeAxisID, DiffFlag, ReportName);
//执行
Cur_DataSet = client.GetDataSet(Url);
//绘制报表
DrawReport(Cur_DataSet, SeriesName);
#endregion
}
/// <summary>
/// 绘制参考线
/// </summary>
/// <param name="lineValue">参考线的值</param>
/// <param name="lineUnit">参考线的单位</param>
private void DrawLine(object lineValue, string lineUnit)
{
//绘制参考线
if (lineValue != null)
{
XYDiagram diagram1 = (XYDiagram)chart_Report1.Diagram;
if (diagram1 != null)
{
ConstantLine constantLine1 = new ConstantLine();
diagram1.AxisY.ConstantLines.Add(constantLine1);
constantLine1.AxisValue = lineValue;//线条的值
constantLine1.Visible = true;
constantLine1.ShowInLegend = false;
constantLine1.ShowBehind = false;
constantLine1.Title.Visible = true;
constantLine1.Title.Text = lineValue + lineUnit;//显示的文本
constantLine1.Title.TextColor = Color.Red;//文本颜色
constantLine1.Title.Font = new Font("宋体", 10, FontStyle.Regular);
constantLine1.Title.ShowBelowLine = false;//文本显示在线上面还是线下面
constantLine1.Title.Alignment = ConstantLineTitleAlignment.Far;//文本的位置
constantLine1.Color = Color.Red;//线条颜色
constantLine1.LineStyle.DashStyle = DashStyle.DashDot;//线条样式
constantLine1.LineStyle.Thickness = 1;
}
}
}
/// <summary>
/// 绘制报表
/// </summary>
/// <param name="dataSet">数据源</param>
/// <param name="seriesValue">统计图名称</param>
private void DrawReport(DataSet dataSet, string seriesName)
{
//图表
grid_Chart.DataSource = null;
//详细列表
grid_Detail.DataSource = null;
DataTable data = new DataTable();
data.Columns.Add("X轴", typeof(string));
data.Columns.Add("Y轴", typeof(decimal));
DateTime StartDate = PublicClass.ToDateTime(date_Start.TimeValue, PublicClass.DefaultTime);//统计开始时间
DateTime EndDate = PublicClass.ToDateTime(date_End.TimeValue, PublicClass.DefaultTime);//统计结束时间
//在统计区间内生成每个月份的数据列
for (DateTime dt = StartDate; dt <= EndDate; dt = dt.AddMonths(1))
{
DataRow newRow = data.NewRow();
string BindMonth = dt.ToString("yyyy-MM");
newRow["X轴"] = BindMonth; //格式2020-01
//原始数据不为空
if (dataSet != null)
{
if (dataSet.Tables.Count >= 1)
{
//图表
grid_Chart.DataSource = dataSet.Tables[0];
foreach (DataRow dataRow in dataSet.Tables[0].Rows)
{
string dataTime = PublicClass.ToDateTime(dataRow["年份"] + "-" + dataRow["月份"], PublicClass.DefaultTime).ToString("yyyy-MM");
if (BindMonth == dataTime)
{
#region Y轴数据
if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.516)
|| Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.517)
|| Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.519)
|| Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.523)
|| Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.524)
|| Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.532))
{
newRow["Y轴"] = dataRow["平均时间"];
}
else if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.518)
|| Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.520)
|| Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.521)
|| Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.522))
{
newRow["Y轴"] = dataRow["百分比"];
}
else if (Cur_ReportName == PublicClass.GetEnumDescription(Enumerate.ChestPainBasicReport.531))
{
newRow["Y轴"] = dataRow["达标率(%)"];
}
#endregion
break;
}
else
{
newRow["Y轴"] = "0";
}
}
}
else
{
newRow["Y轴"] = "0";
}
}
else
{
newRow["Y轴"] = "0";
}
data.Rows.Add(newRow);
//绘制图表
chart_Report1.Series.Clear();
ViewType viewType = new ViewType();
switch (PublicClass.ToString(radioGroup_ViewType.EditValue, ""))
{
case "1":
viewType = ViewType.Line;
break;
case "2":
viewType = ViewType.Bar;
break;
default:
break;
}
Series series = new Series(seriesName, viewType);
series.ArgumentDataMember = "X轴";
series.ValueDataMembers[0] = "Y轴";
series.DataSource = data;
chart_Report1.Series.Add(series);
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//显示标注标签
if (dataSet.Tables.Count >= 2)
{
//详细列表
grid_Detail.DataSource = dataSet.Tables[1];
gridView_Detail.Columns["GUID"].Visible = false;
}
}
}
/// <summary>
/// 统计
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Report_Click(object sender, EventArgs e)
{
BindInfo();
}
/// <summary>
/// 单击月份列显示每月详情
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void grid_Chart_MouseClick(object sender, MouseEventArgs e)
{
try
{
GridHitInfo hi = gridView_Chart.CalcHitInfo(new Point(e.X, e.Y));
//单击数据行
if (hi.InRow)//单击的是列头 hi.InColumn
{
//详细列表
grid_Detail.DataSource = null;
if (gridView_Chart.DataRowCount > 0)
{
if (Cur_DataSet.Tables.Count >= 2)
{
int selectRow = gridView_Chart.GetSelectedRows()[0];
string Year = gridView_Chart.GetRowCellValue(selectRow, "年份").ToString();
string Month = gridView_Chart.GetRowCellValue(selectRow, "月份").ToString();
DateTime SelectMonth = PublicClass.ToDateTime(Year + "-" + Month, PublicClass.DefaultTime);
string StartTime = PublicClass.FirstDayOfMonth(SelectMonth, 2).ToString(PublicClass.TimeToString);
string EndTime = PublicClass.LastDayOfMonth(SelectMonth, 2).ToString(PublicClass.TimeToString);
DataTable DataTable = Cur_DataSet.Tables[1].Clone();
string WhereStr = string.Format("建档时间>='{0}' And 建档时间<='{1}'", StartTime, EndTime);
DataRow[] dr = Cur_DataSet.Tables[1].Select(WhereStr);
for (int i = 0; i < dr.Length; i++)
{
DataTable.ImportRow((DataRow)dr[i]);
}
//详细列表
grid_Detail.DataSource = DataTable;
gridView_Detail.Columns["GUID"].Visible = false;
}
}
}
}
catch (Exception ex)
{
PublicClass.WriteErrorLog(this.Text, "单击月份列显示每月详情:\r\n" + ex);
}
}
/// <summary>
/// 双击患者跳转到详情
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void grid_Detail_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (gridView_Detail.DataRowCount > 0)
{
int selectRow = gridView_Detail.GetSelectedRows()[0];
string PatientGuid = PublicClass.ToString(gridView_Detail.GetRowCellValue(selectRow, "GUID"), "");
//反射
loading.ShowMessage();
Form form = PublicHelp.GetReflection("HL_FristAidPlatform_ChestPain", "Form_ChestPain_PatientMain", 0, PatientGuid, Cur_HospitalGuid, Enumerate.PatientMainState., false, "", "", "",0);
form.ShowDialog();
loading.HideMessage();
}
}
/// <summary>
/// 绘制行号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gridView_Chart_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
if (e.Info.IsRowIndicator && e.RowHandle > -1)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
}
/// <summary>
/// 绘制行号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gridView_Detail_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
if (e.Info.IsRowIndicator && e.RowHandle > -1)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
}
/// <summary>
/// 图表类型切换
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void radioGroup_ViewType_SelectedIndexChanged(object sender, EventArgs e)
{
BindInfo();
}
}
}