using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraGrid.Views.Grid.ViewInfo; using DevExpress.XtraPrinting.Native; using PEIS.Base; using PEIS.Entity; using PEIS.Event; using PEIS.Presenter; using PEIS.Utils; using System; using System.Collections.Generic; using System.Drawing; using System.Dynamic; using System.IO; using System.Linq; using System.Threading; using System.Windows.Forms; using System.Net; namespace PEIS.View.Enrollment { public partial class EnrollmentPersonForm : ViewBase, IEnrollmentPersonView { List _lstPack = null; List _lstRegItems = null, _lstRegItems2 = null; List _lstEFeeItem = null, _lstCopyFeeItem = null; List _lstCheckCost = null; List _lstFeeItem = null, _lstPackFeeItem = null; EnrollmentPatient _chooseRegItem = null; GridHitInfo pInfo = new GridHitInfo(); GridHitInfo fInfo = new GridHitInfo(); GridHitInfo eInfo = new GridHitInfo(); // 定义一个委托 public delegate void SelectedPatientDelegate(long? eid); // 声明一个事件,供父窗体订阅 public event SelectedPatientDelegate SelectedPatientEvent; // 指引单、报告单 private FastReport.Report pReport; public EnrollmentPersonForm() { InitializeComponent(); Shown += Reg4PersonForm_Shown; #region 登记列表 // 单击选中 DgvRegItem.SelectionChanged += DgvRegItem_SelectionChanged; // 最近一周 FastLastWeek.Click += FastLastWeek_Click; // 最近一个月 FastOneMonth.Click += FastLastOneMonth_Click; // 最近三个月 FastThreeMonth.Click += FastLastThreeMonth_Click; // 刷新登记列表 TsmiRegRefresh.Click += TsmiRegRefresh_Click; // 分组别名 DgvRegItem.CustomDrawGroupRow += DgvRegItem_CustomDrawGroupRow; // 导出Excel ExportExcel.Click += ExportExcel_Click; // BegDate.CloseUp += BegDate_CloseUp; BegDate.Leave += BegDate_CloseUp; EndDate.CloseUp += EndDate_CloseUp; EndDate.Leave += EndDate_CloseUp; NameSearch.KeyDown += NameSearch_KeyDown; #endregion #region 登记操作 // 新增登记 TsmiRegAdd.Click += TsmiRegAdd_Click; // 编辑登记 TsmiRegEdit.Click += TsmiRegEdit_Click; // 取消登记 TsmiRegCancel.Click += TsmiRegCancel_Click; #endregion #region 流程按钮 // 收费单 TsmiProjectPrintCost.Click += TsmiProjectPrintCost_Click; // 指引单 TsmiProjectPrintGuide.Click += TsmiProjectPrintGuide_Click; // 生成订单 TsmiPojectCreateOrder.Click += TsmiPojectCreateOrder_Click; // 发送到科室 TsmiProjectSendDept.Click += TsmiProjectSendDept_Click; // 打印申请单 TsmiProjectPrintApply.Click += TsmiProjectPrintApply_Click; #endregion // 记 账 FastCharge.Click += FastCharge_Click; // 全部记账 FastAllCharge.Click += FastAllCharge_Click; // 删除订单 FastDeleteCost.Click += FastDeleteCost_Click; // 取消记账 FastCancelCharge.Click += FastCancelCharge_Click; // 撤回发送 FastRecallDept.Click += FastRecallDept_Click; // 刷新订单状态 FastRefreshCost.Click += FastRefreshCost_Click; // 添加套餐 DgvPack.DoubleClick += DgvPack_DoubleClick; // 套餐、加项转换显示 DgvEFeeItem.CustomColumnDisplayText += DgvEFeeItem_CustomColumnDisplayText; // 添加收费项目 DgvFeeItem.DoubleClick += DgvFeeItem_DoubleClick; // 移除收费项目 DgvEFeeItem.DoubleClick += DgvEFeeItem_DoubleClick; // 改变体检项目行颜色 DgvEFeeItem.RowStyle += DgvEFeeItem_RowStyle; // 改变订单行颜色 DgvCheckCost.RowStyle += DgvCheckCost_RowStyle; // 打开/关闭收费项目 TsmiOpenFeeItem.Click += TsmiOpenFeeItem_Click; // 收费项目检索 FeeItemSearch.TextChanged += FeeItemSearch_TextChanged; // 复制项目 TsmiCopyFeeItem.Click += TsmiCopyFeeItem_Click; // 套餐、加项转换显示 DgvCopyItem.CustomColumnDisplayText += DgvCopyItem_CustomColumnDisplayText; DgvRegItem2.SelectionChanged += DgvRegItem2_SelectionChanged; NameSearch2.KeyDown += NameSearch2_KeyDown; #region 判断双击位置 DgvPack.MouseDown += DgvPack_MouseDown; DgvFeeItem.MouseDown += DgvFeeItem_MouseDown; DgvEFeeItem.MouseDown += DgvEFeeItem_MouseDown; #endregion } private void DgvEFeeItem_MouseDown(object sender, MouseEventArgs e) { eInfo = DgvEFeeItem.CalcHitInfo(e.X, e.Y); } private void DgvFeeItem_MouseDown(object sender, MouseEventArgs e) { fInfo = DgvFeeItem.CalcHitInfo(e.X, e.Y); } private void DgvPack_MouseDown(object sender, MouseEventArgs e) { pInfo = DgvPack.CalcHitInfo(e.X, e.Y); } private void DgvEFeeItem_RowStyle(object sender, RowStyleEventArgs e) { if (DgvEFeeItem.RowCount == 0) return; if (DgvEFeeItem.GetRowCellValue(e.RowHandle, "OrderNo") == null) e.Appearance.ForeColor = Color.Black; else e.Appearance.ForeColor = Color.DodgerBlue; } private void DgvCheckCost_RowStyle(object sender, RowStyleEventArgs e) { if (DgvCheckCost.RowCount == 0) return; if (DgvCheckCost.GetRowCellValue(e.RowHandle, "SendTime") != null) { e.Appearance.ForeColor = Color.FromArgb(103, 194, 58); } else if (DgvCheckCost.GetRowCellValue(e.RowHandle, "ChargeTime") != null) { e.Appearance.ForeColor = Color.DodgerBlue; } else if (DgvCheckCost.GetRowCellValue(e.RowHandle, "CostTime") != null) { e.Appearance.ForeColor = Color.FromArgb(234, 149, 24); } else { e.Appearance.ForeColor = Color.Black; } } private void DgvEFeeItem_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) { if (e.Column.FieldName == "PackName") // 替换"PackName" { if (e.Value == null || e.Value.ToString() == "") { e.DisplayText = "加项"; } } } private void DgvCopyItem_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) { if (e.Column.FieldName == "PackName") // 替换"PackName" { if (e.Value == null || e.Value.ToString() == "") { e.DisplayText = "加项"; } } } private void Reg4PersonForm_Shown(object sender, EventArgs e) { BegDate.Value = DateTime.Now; EndDate.Value = DateTime.Now; ThreadPool.QueueUserWorkItem(state => { OnGetRegItems(0); OnGetPackItem(); // 获取体检套餐 OnGetFeeItem(); // 获取收费项目 }); } #region 交互逻辑 #region 登记列表 private void NameSearch_KeyDown(object sender, KeyEventArgs e) // 模糊检索 { if (e.KeyCode == Keys.Enter) OnGetRegItems(0); } private void TsmiRegRefresh_Click(object sender, EventArgs e) // 刷新按钮 { // 使当前控件获得焦点,避免日期选择器修改后未生效 menuStrip1.Focus(); OnGetRegItems(0); } private void DgvRegItem_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e) // 登记列表切换 { Invoke(new Action(() => _chooseRegItem = null)); Invoke(new Action(() => _chooseRegItem = DgvRegItem.GetRow(DgvRegItem.GetSelectedRows()[0]) as EnrollmentPatient)); OnGetRegInfo(_chooseRegItem.ID); OnGetCheckCost(_chooseRegItem.ID); OnGetExamFeeItem(_chooseRegItem.ID, "0"); //调用 SelectedPatientEvent?.Invoke(_chooseRegItem.ID); } private void DgvRegItem_CustomDrawGroupRow(object sender, DevExpress.XtraGrid.Views.Base.RowObjectCustomDrawEventArgs e) // 分组别名 { GridGroupRowInfo grid = e.Info as GridGroupRowInfo; var index = DgvRegItem.GetDataRowHandleByGroupRowHandle(e.RowHandle); grid.GroupText = DgvRegItem.GetRowCellValue(index, "Signer").ToString() == "1" ? "未发送" : DgvRegItem.GetRowCellValue(index, "Signer").ToString() == "2" ? "已发送" : "已完结"; } private void ExportExcel_Click(object sender, EventArgs e) // 导出数据 { if (DgcRegItem != null) { try { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Title = "导出Excel"; saveFileDialog.FileName = "签到名单"; saveFileDialog.Filter = "Excel文件(*.xls)|*.xls"; DialogResult dialogResult = saveFileDialog.ShowDialog(this); if (dialogResult == DialogResult.OK) { DevExpress.XtraPrinting.XlsExportOptionsEx options = new DevExpress.XtraPrinting.XlsExportOptionsEx(); options.ShowGridLines = true; options.TextExportMode = DevExpress.XtraPrinting.TextExportMode.Value; options.ExportType = DevExpress.Export.ExportType.WYSIWYG; DgcRegItem.ExportToXls(saveFileDialog.FileName, options); } } catch (Exception a) { Console.WriteLine(a); } } } #endregion #region 登记操作 private void TsmiRegAdd_Click(object sender, EventArgs e) // 新增登记 { NewEnrollmentPersonForm enrollmentPersonForm = new NewEnrollmentPersonForm(null, false); enrollmentPersonForm.ShowDialog(); OnGetRegItems(0); } private void TsmiRegEdit_Click(object sender, EventArgs e) // 编辑登记信息 { if (_lstRegItems == null || _lstRegItems.Count() == 0) return; //if(_chooseRegItem.SignTime != null) //{ // Global.Msg("info", "当前体检者已发送不可编辑!"); // return; //} //if(_lstCheckCost.Count != 0) //{ // Global.Msg("info", "当前体检者下存在订单,请删除后再试!"); // return; //} NewEnrollmentPersonForm enrollmentPersonForm = new NewEnrollmentPersonForm(_chooseRegItem, true); enrollmentPersonForm.ShowDialog(); OnGetRegItems(0); } private void TsmiRegCancel_Click(object sender, EventArgs e) // 取消登记 { if (_chooseRegItem == null) { Global.Msg("info", "请先选中体检人员!"); return; } if (_lstEFeeItem != null && _lstEFeeItem.Where(w => w.OrderNo != null).ToList().Count != 0) { Global.Msg("info", "该体检登记下已有订单,请先取消记账订单后重试!"); return; } if (Global.Msg("warn", "确定取消登记该信息?") == DialogResult.No) return; OnCancelRegInfo(_chooseRegItem); OnGetRegItems(0); } #endregion #region 流程按钮 private void TsmiPojectCreateOrder_Click(object sender, EventArgs e) { if (_lstEFeeItem == null) { Global.Msg("info", "请先添加收费项目!"); return; } if (_lstEFeeItem.Where(w => w.OrderNo == null).ToList().Count == 0) { Global.Msg("info", "没有要处理的收费项目"); return; } if (Global.Msg("warn", "确定生成缴费订单吗?") == DialogResult.No) return; CheckCostForm checkCostForm = new CheckCostForm(0, _chooseRegItem.ID); checkCostForm.ShowDialog(); OnGetCheckCost(_chooseRegItem.ID); OnGetExamFeeItem(_chooseRegItem.ID, "0"); } // 生成订单 #endregion private void DgvRegItem2_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e) { Invoke(new Action(() => { OnGetExamFeeItem(Convert.ToInt64(DgvRegItem2.GetRowCellValue(DgvRegItem2.GetSelectedRows()[0], "ID").ToString()), "1"); })); } private void DgvPack_DoubleClick(object sender, EventArgs e) { if (DgvPack.FocusedRowHandle < 0) return; if (!pInfo.InRowCell) return; if (_chooseRegItem == null) { Global.Msg("info", "请先选中体检人员!"); return; } if (_lstEFeeItem?.Count != 0) { Global.Msg("info", "该登记已有收费项目,不能添加套餐,套餐只能最先添加,请核对后重试!"); return; } OnGetFeeItemByPack(Convert.ToInt64(DgvPack.GetRowCellValue(DgvPack.GetSelectedRows()[0], "ID").ToString())); if (_lstPackFeeItem?.Count != 0) { EnrollmentFeeItem item = new EnrollmentFeeItem(); Int32 index = 0; _lstPackFeeItem.ForEach(a => { index++; item.EID = _chooseRegItem.ID; item.PackId = Convert.ToInt64(DgvPack.GetRowCellValue(DgvPack.GetSelectedRows()[0], "ID").ToString()); item.PackName = DgvPack.GetRowCellValue(DgvPack.GetSelectedRows()[0], "Name").ToString(); item.FID = a.FID; item.FeeItemCode = a.FeeItemCode; item.FeeItemName = a.FeeItemName; item.Quantity = 1; item.Unit = a.Unit; item.Price = a.Price; item.SettlePrice = a.SettlePrice; item.ItemClass = a.ItemClass; item.CreateTime = DateTime.Now; item.CreatorCode = Global.currentUser.Code; item.Creator = Global.currentUser.Name; item.DeptCode = a.DeptCode; item.DeptName = a.DeptName; item.Seq = index; item.KeyNo = a.KeyNo; item.Save(); }); OnGetExamFeeItem(_chooseRegItem.ID, "0"); } } private void DgvFeeItem_DoubleClick(object sender, EventArgs e) { if (DgvFeeItem.FocusedRowHandle < 0) return; if (!fInfo.InRowCell) return; if (_chooseRegItem == null) { Global.Msg("info", "请先选中体检人员!"); return; } List items = _lstEFeeItem.Where(a => a?.KeyNo == DgvFeeItem.GetRowCellValue(DgvFeeItem.GetSelectedRows()[0], "KeyNo").ToString()).ToList(); if (items.Count != 0) { Global.Msg("info", "已存在该收费项目,请勿重复添加!"); return; } EnrollmentFeeItem item = new EnrollmentFeeItem() { EID = _chooseRegItem.ID, FID = Convert.ToInt64(DgvFeeItem.GetRowCellValue(DgvFeeItem.GetSelectedRows()[0], "ID").ToString()), FeeItemCode = DgvFeeItem.GetRowCellValue(DgvFeeItem.GetSelectedRows()[0], "FeeItemCode")?.ToString(), FeeItemName = DgvFeeItem.GetRowCellValue(DgvFeeItem.GetSelectedRows()[0], "FeeItemName")?.ToString(), Quantity = 1, Unit = DgvFeeItem.GetRowCellValue(DgvFeeItem.GetSelectedRows()[0], "Unit")?.ToString(), Price = Convert.ToDecimal(DgvFeeItem.GetRowCellValue(DgvFeeItem.GetSelectedRows()[0], "Price")?.ToString()), SettlePrice = Convert.ToDecimal(DgvFeeItem.GetRowCellValue(DgvFeeItem.GetSelectedRows()[0], "SettlePrice")?.ToString()), ItemClass = DgvFeeItem.GetRowCellValue(DgvFeeItem.GetSelectedRows()[0], "ItemClass")?.ToString(), CreateTime = DateTime.Now, CreatorCode = Global.currentUser.Code, Creator = Global.currentUser.Name, DeptCode = DgvFeeItem.GetRowCellValue(DgvFeeItem.GetSelectedRows()[0], "DeptCode")?.ToString(), DeptName = DgvFeeItem.GetRowCellValue(DgvFeeItem.GetSelectedRows()[0], "DeptName")?.ToString(), Seq = _lstEFeeItem.Count != 0 ? _lstEFeeItem[_lstEFeeItem.Count - 1].Seq + 1 : 1, KeyNo = DgvFeeItem.GetRowCellValue(DgvFeeItem.GetSelectedRows()[0], "KeyNo")?.ToString() }; item.Save(); OnGetExamFeeItem(_chooseRegItem.ID, "0"); } private void DgvEFeeItem_DoubleClick(object sender, EventArgs e) { if (DgvEFeeItem.FocusedRowHandle < 0) return; if (!eInfo.InRowCell) return; EnrollmentFeeItem item = DgvEFeeItem.GetRow(DgvEFeeItem.GetSelectedRows()[0]) as EnrollmentFeeItem; if (item.OrderNo != null) { Global.Msg("info", "已生成订单不可取消!"); return; } if (item.IsOccupational && _chooseRegItem.Type != null && _chooseRegItem.Type.Contains("职业")) { Global.Msg("info", "此为职业体检必检项目,不可改动!"); return; } if (DgvEFeeItem.FocusedColumn.ToString() == "套餐" && item.PackId != null) { if (Global.Msg("warn", "确定移除当前套餐吗?") == DialogResult.No) return; OnDelItemByPackId(Convert.ToInt64(item?.EID), Convert.ToInt64(item?.PackId)); OnGetExamFeeItem(_chooseRegItem.ID, "0"); return; } item.Delete(); OnGetExamFeeItem(_chooseRegItem.ID, "0"); } private void TsmiProjectPrintGuide_Click(object sender, EventArgs e) { if (_lstCheckCost == null || _lstCheckCost.Count == 0) { Global.Msg("info", "暂无订单!"); return; } if (_lstCheckCost.Where(w => w.SendTime == null).ToList().Count != 0) { Global.Msg("info", "订单未发送!"); return; } try { var items = new List(); _lstEFeeItem.Where(w => w.OrderNo != null && !w.IsHide ).GroupBy(g => g.DeptCode).ForEach(dept => { var item = new EnrollmentFeeItem() { DeptName = dept.FirstOrDefault()?.DeptName, FeeItemName = string.Join(@"、", dept.Select(s => s.FeeItemName).ToList()), Address = dept.FirstOrDefault()?.Address, DeptTips = dept.FirstOrDefault()?.DeptTips }; items.Add(item); }); pReport = ReportHelper.PrintGuide(items, _chooseRegItem); pReport.Show(); pReport.Dispose(); } catch (Exception ex) { Global.Msg("info", ex.Message); } } private void TsmiProjectPrintCost_Click(object sender, EventArgs e) { if (_lstCheckCost == null || _lstCheckCost.Count == 0) { Global.Msg("info", "暂无订单!"); return; } if (_lstCheckCost.Where(w => w.CostTime == null).ToList().Count == 0) { Global.Msg("info", "所有订单已收费!"); return; } try { var list = _lstCheckCost.Where(w => w.CostTime == null && w.CancelTime == null).ToList(); pReport = ReportHelper.PrintCheckCost(list, _chooseRegItem); pReport.Show(); pReport.Dispose(); } catch (Exception ex) { Global.Msg("info", ex.Message); } } private void TsmiProjectPrintApply_Click(object sender, EventArgs e) { if (_lstEFeeItem == null || _lstEFeeItem.Count == 0) { Global.Msg("info", "暂无收费项目!"); return; } try { pReport = ReportHelper.PrintApply(_lstEFeeItem, _chooseRegItem); pReport.Show(); pReport.Dispose(); } catch (Exception ex) { Global.Msg("info", ex.Message); } } private void TsmiProjectSendDept_Click(object sender, EventArgs e) { if (_lstCheckCost == null || _lstCheckCost.Count == 0) { Global.Msg("info", "暂无订单!"); return; } if (_lstCheckCost.Where(w => w.ChargeTime == null).ToList().Count != 0) { Global.Msg("info", "订单还未收费或未记账,不能操作,请核对后重试!"); return; } if (_lstCheckCost.Where(w => w.SendTime == null).ToList().Count == 0) { Global.Msg("info", "所有订单已发送!"); return; } if (Global.Msg("warn", "确定要发送吗?") == DialogResult.No) return; CostToHis(_chooseRegItem.ID); OnSendToDept(_chooseRegItem.ID); OnGetRegItems(0); OnGetCheckCost(_chooseRegItem.ID); } private void FastAllCharge_Click(object sender, EventArgs e) { if (DgvCheckCost.GetSelectedRows().Count() == 0) return; if (_lstCheckCost == null || _lstCheckCost.Count == 0) return; if (_lstCheckCost.Where(w => w.ChargeTime == null).ToList().Count == 0) { Global.Msg("info", "所有订单已记账!"); return; } if (Global.Msg("warn", "确定要记账吗?未发送前可以取消记账,发送后不能取消记账!") == DialogResult.No) return; OnChargeOrder(_chooseRegItem.ID, "0"); } private void FastCharge_Click(object sender, EventArgs e) { if (DgvCheckCost.GetSelectedRows().Count() == 0) return; EnrollmentCheckCost item = DgvCheckCost.GetRow(DgvCheckCost.GetSelectedRows()[0]) as EnrollmentCheckCost; if (item.SendTime != null || item.ChargeTime != null) return; if (Global.Msg("warn", "确定要记账吗?未发送前可以取消记账,发送后不能取消记账!") == DialogResult.No) return; OnChargeOrder(item.ID, "1"); } private void FastDeleteCost_Click(object sender, EventArgs e) { if (DgvCheckCost.GetSelectedRows().Count() == 0) return; EnrollmentCheckCost item = DgvCheckCost.GetRow(DgvCheckCost.GetSelectedRows()[0]) as EnrollmentCheckCost; if (item.Fee == 0 && item.SendTime == null) { OnDeleteOrder(item.ID); return; } if (item.ChargeTime != null || item.CostTime != null) { Global.Msg("info", "该订单已收费或已记账,不能删除!"); return; } if (item?.CancelTime != null) { Global.Msg("info", "该订单为退费订单留存记录,不能删除!"); return; } OnDeleteOrder(item.ID); } private void FastCancelCharge_Click(object sender, EventArgs e) { if (DgvCheckCost.GetSelectedRows().Count() == 0) return; EnrollmentCheckCost item = DgvCheckCost.GetRow(DgvCheckCost.GetSelectedRows()[0]) as EnrollmentCheckCost; if (item.SendTime != null) { Global.Msg("info", "该订单已发送不能取消!"); return; } if (item.ChargeTime == null) { Global.Msg("info", "该订单未记账!"); return; } OnCancelCharge(item); OnGetCheckCost(_chooseRegItem.ID); } private void FastRefreshCost_Click(object sender, EventArgs e) { OnGetCheckCost(_chooseRegItem.ID); } private void TsmiOpenFeeItem_Click(object sender, EventArgs e) { if (splitContainer2.Panel2Collapsed) { Invoke(new Action(() => { OnGetPackItem(); // 获取体检套餐 OnGetFeeItem(); // 获取收费项目 })); } splitContainer2.Panel2Collapsed = !splitContainer2.Panel2Collapsed; TsmiOpenFeeItem.Text = splitContainer2.Panel2Collapsed ? "打开收费项目" : "关闭收费项目"; } private void FeeItemSearch_TextChanged(object sender, EventArgs e) { DgcFeeItem.DataSource = _lstFeeItem.Where(a => a?.FeeItemName.Contains(FeeItemSearch.Text) == true || a?.SpellCode?.Contains(FeeItemSearch.Text) == true); } private void TsmiCopyFeeItem_Click(object sender, EventArgs e) { if (_lstCopyFeeItem == null || _lstCopyFeeItem.Count == 0) return; if (_chooseRegItem == null) { Global.Msg("info", "请先选中体检人员!"); return; } if (_lstEFeeItem?.Count != 0) { Global.Msg("info", "该登记已有收费项目,不能复制,请核对后重试!"); return; } EnrollmentFeeItem item = new EnrollmentFeeItem(); Int32 index = 0; _lstCopyFeeItem.ForEach(a => { index++; item.EID = _chooseRegItem.ID; item.PackId = a.PackId; item.PackName = a.PackName; item.FID = a.FID; item.FeeItemCode = a.FeeItemCode; item.FeeItemName = a.FeeItemName; item.Quantity = 1; item.Unit = a.Unit; item.Price = a.Price; item.SettlePrice = a.SettlePrice; item.ItemClass = a.ItemClass; item.CreateTime = DateTime.Now; item.CreatorCode = Global.currentUser.Code; item.Creator = Global.currentUser.Name; item.DeptCode = a.DeptCode; item.DeptName = a.DeptName; item.Seq = index; item.KeyNo = a.KeyNo; item.Save(); }); OnGetExamFeeItem(_chooseRegItem.ID, "0"); } private void FastRecallDept_Click(object sender, EventArgs e) { if (_chooseRegItem == null || _chooseRegItem.SignTime == null) return; OnRecallDept(_chooseRegItem); OnGetRegItems(0); } private void NameSearch2_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) OnGetRegItems(1); } #endregion #region 事件 // 获取登记列表 public event EventHandler> GetRegItems; public void ShowRegItems(List items, int code) { if (code == 0) { items.ForEach(a => a.Sex = a.Sex.Equals("1") ? "男" : a.Sex.Equals("2") ? "女" : ""); Invoke(new Action(() => _lstRegItems = items)); Invoke(new Action(() => DgcRegItem.DataSource = null)); Invoke(new Action(() => { DgcRegItem.DataSource = _lstRegItems.Where(a => a?.Name.Contains(NameSearch.Text) == true || a?.ID.ToString().Contains(NameSearch.Text) == true || a?.SpellCode?.Contains(NameSearch.Text) == true); })); if (_lstRegItems.Where(a => a?.Name.Contains(NameSearch.Text) == true || a?.ID.ToString().Contains(NameSearch.Text) == true).Count() != 0) { Invoke(new Action(() => _chooseRegItem = _lstRegItems.Where(a => a?.Name.Contains(NameSearch.Text) == true || a?.ID.ToString().Contains(NameSearch.Text) == true || a?.SpellCode?.Contains(NameSearch.Text) == true).ToList()[0])); Invoke(new Action(() => OnGetRegInfo(_chooseRegItem.ID))); Invoke(new Action(() => OnGetExamFeeItem(_chooseRegItem.ID, "0"))); Invoke(new Action(() => OnGetCheckCost(_chooseRegItem.ID))); } else { DgcEFeeItem.DataSource = _lstEFeeItem = null; DgcCheckCost.DataSource = _lstCheckCost = null; _chooseRegItem = null; RegDataBinds(_chooseRegItem); } } else { Invoke(new Action(() => _lstRegItems2 = items)); Invoke(new Action(() => DgcRegItem2.DataSource = null)); Invoke(new Action(() => { DgcRegItem2.DataSource = _lstRegItems2.Where(a => a?.Name.Contains(NameSearch2.Text) == true || a?.ID.ToString().Contains(NameSearch2.Text) == true || a?.SpellCode?.Contains(NameSearch2.Text) == true); })); if (_lstRegItems2.Where(a => a?.Name.Contains(NameSearch2.Text) == true || a?.ID.ToString().Contains(NameSearch2.Text) == true).Count() == 0) DgcCopyItem.DataSource = _lstCopyFeeItem = null; } DgvRegItem.ExpandAllGroups(); Invoke(new Action(() => { DgvRegItem.BestFitColumns(); DgvRegItem2.BestFitColumns(); })); } protected virtual void OnGetRegItems(int code) { dynamic searchData = new ExpandoObject(); searchData.begDate = BegDate.Value.ToShortDateString(); searchData.endDate = EndDate.Value.ToShortDateString(); searchData.name = code == 0 ? NameSearch.Text : NameSearch2.Text; searchData.code = code; GetRegItems?.Invoke(this, new Args() { Item = searchData }); } // 获取登记信息 public event EventHandler> GetRegInfo; public void ShowRegInfo(EnrollmentPatient item) { Invoke(new Action(() => _chooseRegItem = item)); Invoke(new Action(() => RegDataBinds(_chooseRegItem))); if (_lstPack != null) { Invoke(new Action(() => DgcPack.DataSource = _lstPack.Where(w => w.Sex.Equals("所有") || w.Sex.Equals(_chooseRegItem.Sex.Equals("1") ? "男" : "女")))); } } protected virtual void OnGetRegInfo(Int64 EID) { GetRegInfo?.Invoke(this, new Args { ID = EID }); } // 获取体检项目 public event EventHandler> GetExamFeeItem; public void ShowExamFeeItem(List items, String code) { if (code == "0") { Invoke(new Action(() => _lstEFeeItem = items)); Invoke(new Action(() => DgcEFeeItem.DataSource = null)); Invoke(new Action(() => DgcEFeeItem.DataSource = _lstEFeeItem)); Invoke(new Action(() => DgvEFeeItem.BestFitColumns())); } else { Invoke(new Action(() => _lstCopyFeeItem = items)); Invoke(new Action(() => DgcCopyItem.DataSource = null)); Invoke(new Action(() => DgcCopyItem.DataSource = _lstCopyFeeItem)); Invoke(new Action(() => DgvCopyItem.BestFitColumns())); } } protected virtual void OnGetExamFeeItem(Int64 EID, String code) { GetExamFeeItem?.Invoke(this, new Args { ID = EID, Code = code }); } // 获取收费项目 public event EventHandler> GetFeeItem; public void ShowFeeItem(List items) { Invoke(new Action(() => _lstFeeItem = items)); Invoke(new Action(() => DgcFeeItem.DataSource = null)); Invoke(new Action(() => DgcFeeItem.DataSource = _lstFeeItem)); //Invoke(new Action(() => DgvFeeItem.BestFitColumns())); } protected virtual void OnGetFeeItem() { GetFeeItem.Invoke(this, new Args { }); } // 获取套餐 public event EventHandler> GetPackItem; public void ShowPackItem(List items) { items.ForEach(a => a.Sex = a.Sex.Equals("1") ? "男" : a.Sex.Equals("2") ? "女" : "所有"); items.ForEach(a => a.Marriage = a.Marriage.Equals("1") ? "未婚" : a.Marriage.Equals("2") ? "已婚" : "所有"); Invoke(new Action(() => _lstPack = items)); Invoke(new Action(() => DgcPack.DataSource = null)); if (_chooseRegItem == null) return; Invoke(new Action(() => DgcPack.DataSource = _lstPack.Where(w => w.Sex.Equals("所有") || w.Sex.Equals(_chooseRegItem.Sex.Equals("1") ? "男" : "女")))); Invoke(new Action(() => DgvPack.BestFitColumns())); } protected virtual void OnGetPackItem() { GetPackItem?.Invoke(this, new Args { }); } // 获取套餐收费项目 public event EventHandler> GetFeeItemByPack; public void ShowFeeItemByPack(List items) { Invoke(new Action(() => _lstPackFeeItem = items)); } protected virtual void OnGetFeeItemByPack(Int64 packID) { GetFeeItemByPack?.Invoke(this, new Args { ID = packID }); } // 获取订单 public event EventHandler> GetCheckCost; public void ShowCheckCost(List items) { Invoke(new Action(() => _lstCheckCost = items)); Invoke(new Action(() => DgcCheckCost.DataSource = null)); Invoke(new Action(() => DgcCheckCost.DataSource = _lstCheckCost)); Invoke(new Action(() => DgvCheckCost.BestFitColumns())); } protected virtual void OnGetCheckCost(Int64 EID) { GetCheckCost?.Invoke(this, new Args { ID = EID }); } // 记 账 public event EventHandler> ChargeOrder; public void ShowChargeOrder(bool status) { if (status) { Invoke(new Action(() => { OnGetCheckCost(_chooseRegItem.ID); })); } } protected virtual void OnChargeOrder(Int64 ID, string Code) { ChargeOrder?.Invoke(this, new Args { ID = ID, Code = Code }); } // 发送到科室 public event EventHandler> SendToDept; public void ShowSendToDept(bool status) { } protected virtual void OnSendToDept(Int64 EID) { SendToDept?.Invoke(this, new Args { ID = EID }); } // 取消登记 public event EventHandler> CancelRegInfo; public void ShowCancelRegInfo(bool status) { } protected virtual void OnCancelRegInfo(EnrollmentPatient patient) { var oEid = patient.OEID == null ? 0 : (long)patient.OEID; var pid = patient.PID == null ? 0 : (long)patient.PID; var groupId = patient.GroupID == null ? 0 : (long)patient.GroupID; CancelRegInfo?.Invoke(this, new Args { ID = patient.ID, OEID = oEid, Name = patient.Name, Pid = pid, GroupID = groupId }); } // 删除订单 public event EventHandler> DeleteOrder; public void ShowDeleteOrder(bool status) { if (status) { Invoke(new Action(() => { OnGetCheckCost(_chooseRegItem.ID); OnGetExamFeeItem(_chooseRegItem.ID, "0"); })); } } protected virtual void OnDeleteOrder(Int64 id) { DeleteOrder?.Invoke(this, new Args { ID = id }); } // 取消记账 public event EventHandler> CancelCharge; public void ShowCancelCharge(bool status) { if (status) { Invoke(new Action(() => { OnGetCheckCost(_chooseRegItem.ID); })); } } protected virtual void OnCancelCharge(EnrollmentCheckCost cost) { var oEid = cost.OEID == null ? 0 : (long)cost.OEID; var eId = cost.EID == null ? 0 : (long)cost.EID; CancelCharge?.Invoke(this, new Args { ID = cost.ID, Name = cost.Name, Eid = eId, OEID = oEid }); } // 移除套餐 public event EventHandler> DelItemByPackId; protected virtual void OnDelItemByPackId(Int64 eId, Int64 packId) { DelItemByPackId?.Invoke(this, new Args { Eid = eId, PackID = packId }); } // 撤回发送 public event EventHandler> RecallDept; protected virtual void OnRecallDept(EnrollmentPatient patient) { RecallDept?.Invoke(this, new Args { ID = patient.ID, Name = patient.Name }); } #endregion #region hepler #region 照片处理 public Image Base64ToImage(string base64Str) { if (base64Str == null || base64Str == "") { return null; } byte[] imageBytes = Convert.FromBase64String(base64Str); using (MemoryStream ms = new MemoryStream(imageBytes)) { Image image = Image.FromStream(ms); return image; } } #endregion #region 日期快捷选项 private void FastLastThreeMonth_Click(object sender, EventArgs e) { DateTime currentDate = DateTime.Now; // 计算最近三个月的日期范围 Invoke(new Action(() => { this.BegDate.Value = currentDate.AddDays(-89); this.EndDate.Value = currentDate; })); } private void FastLastOneMonth_Click(object sender, EventArgs e) { DateTime currentDate = DateTime.Now; // 计算最近一个月的日期范围 Invoke(new Action(() => { this.BegDate.Value = currentDate.AddDays(-29); this.EndDate.Value = currentDate; })); } private void FastLastWeek_Click(object sender, EventArgs e) { DateTime currentDate = DateTime.Now; // 计算最近7天的日期范围 Invoke(new Action(() => { this.BegDate.Value = currentDate.AddDays(-6); this.EndDate.Value = currentDate; })); } private void EndDate_CloseUp(object sender, EventArgs e) { if (EndDate.Value < BegDate.Value) { var beg = EndDate.Value; Invoke(new Action(() => { EndDate.Value = BegDate.Value; BegDate.Value = beg; })); } } private void BegDate_CloseUp(object sender, EventArgs e) { if (BegDate.Value > EndDate.Value) { var end = BegDate.Value; Invoke(new Action(() => { BegDate.Value = EndDate.Value; EndDate.Value = end; })); } } #endregion #region 控件赋值 public void RegDataBinds(EnrollmentPatient item) { Invoke(new Action(() => { NameLabel.Text = item?.Name; SexLabel.Text = item?.Sex == "1" ? "男" : "女"; NationLabel.Text = string.IsNullOrEmpty(item?.Nation?.Trim()) ? "未知" : item?.Nation; BirthdayLabel.Text = item?.Birthday?.ToShortDateString(); AgeLabel.Text = item?.Age.ToString() + item?.AgeClass; ExamDateLabel.Text = item?.ExamDate?.ToShortDateString(); ExamTypeLabel.Text = item?.Type; OccupationLabel.Text = item?.Occupation; MaritalLabel.Text = item?.Marriage; EducationLabel.Text = item?.Education; ContractorLabel1.Text = item?.Contactor1; TelLabel1.Text = item?.Tel1; AddressLabel1.Text = item?.Address1; CardNoLabel.Text = item?.CardNo; CompanyLabel.Text = item?.Company; RegAvatar.Image = Base64ToImage(item?.Photo); })); } #endregion #region HIS同步记账 public void CostToHis(Int64 Eid) { // 设置请求的 URL string baseUrl = "http://200.200.200.71:5050/peisReserve/his/costToHis"; // 构建带参数的 URL string url = $"{baseUrl}?eid={Eid}&isGroup={false}"; // 创建 HttpWebRequest 对象 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; try { // 发送请求并获取响应 using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { // 检查响应是否成功 if (response.StatusCode == HttpStatusCode.OK) { // 读取响应流 using (Stream responseStream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(responseStream)) { string responseBody = reader.ReadToEnd(); Console.WriteLine("Response: " + responseBody); } } } else { Console.WriteLine("Failed to get data. Status code: " + response.StatusCode); } } } catch (WebException ex) { Console.WriteLine("Exception occurred: " + ex.Message); } } #endregion #endregion protected override object CreatePresenter() { return new EnrollmentPersonPresenter(this); } private void Reg4PersonForm_Load(object sender, EventArgs e) { } } }