using DevExpress.Utils; using DevExpress.XtraGrid.Views.Grid; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace JJMediSys { public partial class STATS : Form { public DataSet dataSet; public List rules; public List Inrules; public List DefaultCount=new List(); public STATS() { InitializeComponent(); } private void groupBox1_Enter(object sender, EventArgs e) { } private void STATS_Load(object sender, EventArgs e) { gridView1.OptionsBehavior.Editable = false; gridView1.OptionsView.ShowIndicator = false;// 显示最左边空白列 dateStart.DateTime = DateTime.Now; dateEnd.DateTime = DateTime.Now; RadioZX.Checked = true; } private void BSearch_Click(object sender, EventArgs e) { DoSearch(); } public void DoSearch() { try { string sql = "select * from trans_history where DBExcTime >'" + dateStart.DateTime.Date.ToString("yyyy-MM-dd") + "' and DBExcTime <='" + dateEnd.DateTime.Date.AddDays(1).ToString("yyyy-MM-dd") + "' and ItemStatus ='1'"; MainForm.logger.Info("Mysql sql=" + sql); dataSet = DoDBMySql.Query(sql); BindingSource bindingSource = new BindingSource(); bindingSource.DataSource = dataSet; bindingSource.DataMember = "ds"; gridControl1.DataSource = bindingSource; gridControl1.RefreshDataSource(); gridView1.RefreshData(); LabNote.Text = $"共检索到: {gridView1.DataRowCount} 条记录"; } catch(Exception e) { MessageBox.Show(e.Message); } } private void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e) { if (e.Column.Name == "Tuble") { var v = e.CellValue; if (v != null) { e.Appearance.BackColor = Color.FromName(MZCY.GetColorInfo(v.ToString(), false)); } } if (e.Column.Name == "ItemDetails1") { var v = e.CellValue; } } private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e) { if (e.Column != null && e.Column.FieldName == "ItemName") { string detailes = gridView1.GetRowCellValue(e.RowHandle, "ItemsDetails").ToString(); ItemsShowBox itemsShowBox = new ItemsShowBox(detailes); itemsShowBox.Show(); } } private void gridView1_CustomFilterDisplayText(object sender, DevExpress.XtraEditors.Controls.ConvertEditValueEventArgs e) { } private void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) { if (e.Column.FieldName == "ItemStatus") { if (e.Value != null) { string zsStatus = MZCY.TransItemStatus(e.Value.ToString()); e.DisplayText = zsStatus; } } } public struct PersonInfo { public string CardNo { get; set; } public string Name { get; set; } public List items { get; set; } // public List Counts { get; set; } //各个统计项数量 } public struct Item { public string BarCode { get; set; } //条码号 public string ItemName { get; set; } //项目名称 public string Tuble { get; set; } //项目名称 public List ItemDetails { get; set; } //项目明细 } public List personInfos; private void BSTATS_Click(object sender, EventArgs e) { if (dataSet==null||dataSet.Tables.Count <= 0 || dataSet.Tables[0].Rows.Count <= 0) { MessageBox.Show("没有有效的数据"); return; } rules = STATSRules.LoadRule(); Inrules = new List(); DefaultCount = new List(); foreach (STATSRules.Rule rule in rules) { if (rule.INUSE == "1") { DefaultCount.Add(0); Inrules.Add(rule); } } DefaultCount.Add(0); //加一项送检验科统计 personInfos = new List(); foreach (DataRow dataRow in dataSet.Tables[0].Rows) { PersonInfo foundPerson = personInfos.FirstOrDefault(p => p.CardNo == dataRow["PatID"].ToString()); if (foundPerson.CardNo != null) { Item item = new Item(); item.Tuble = dataRow["Tuble"] == null ? "" : dataRow["Tuble"].ToString(); item.BarCode = dataRow["Barcode"] == null ? "" : dataRow["Barcode"].ToString(); item.ItemName = dataRow["ItemName"] == null ? "" : dataRow["ItemName"].ToString(); item.ItemDetails = dataRow["ItemsDetails"] == null ? null : dataRow["ItemsDetails"].ToString().Split(';').ToList().Where(item1 => !string.IsNullOrWhiteSpace(item1)).ToList(); foundPerson.items.Add(item); } else { PersonInfo personInfo = new PersonInfo(); personInfo.CardNo = dataRow["PatID"] == null ? "" : dataRow["PatID"].ToString(); personInfo.Name = dataRow["PatName"] == null ? "" : dataRow["PatName"].ToString(); List items = new List(); List Counts = new List(DefaultCount); personInfo.items = items; personInfo.Counts = Counts; Item item = new Item(); item.Tuble = dataRow["Tuble"] == null ? "" : dataRow["Tuble"].ToString(); item.BarCode = dataRow["Barcode"] == null ? "" : dataRow["Barcode"].ToString(); item.ItemName = dataRow["ItemName"] == null ? "" : dataRow["ItemName"].ToString(); item.ItemDetails = dataRow["ItemsDetails"] == null ? null : dataRow["ItemsDetails"].ToString().Split(';').ToList().Where(item1 => !string.IsNullOrWhiteSpace(item1)).ToList(); personInfo.items.Add(item); personInfos.Add(personInfo); } } foreach(PersonInfo personInfo in personInfos) { foreach(Item item in personInfo.items) { int ruleindex = 0; bool isSendtoJYK = true;//是否送检验科 如果是符合统计规则则不算在检验科里 foreach (STATSRules.Rule rule in Inrules) { if(rule.Type=="XM") { var intersection = item.ItemDetails.Intersect(rule.DetailItem).ToList(); if (intersection.Any()) { personInfo.Counts[ruleindex]++; if(!rule.SendKS.Equals("检验科")) isSendtoJYK = false; } } else //按试管排 { var intersection = item.Tuble.Split('|').Intersect(rule.DetailItem).ToList(); if (intersection.Any()) { personInfo.Counts[ruleindex]++; } } ruleindex++; } if (isSendtoJYK) { personInfo.Counts[personInfo.Counts.Count-1]++; } } } Report report = new Report(personInfos, Inrules); report.Show(); } private void button1_Click(object sender, EventArgs e) { STATSRules sTATSRules = new STATSRules(); sTATSRules.Show(); } private void gridView1_DoubleClick(object sender, EventArgs e) { if (gridView1.RowCount > 0 && gridView1.FocusedColumn != null && gridView1.FocusedRowHandle >= 0) { string data = gridView1.GetFocusedRowCellDisplayText(gridView1.FocusedColumn); if (!String.IsNullOrEmpty(data)) Clipboard.SetText(data, TextDataFormat.Text); } } } }