using DataRWDAL; using HxEnum; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using XCommon.Log; using XHandler.Class; using XHandler.Class.DataEx; using XHandler.View.Com; using XHandler.View.Consumables; using XHandler.View.MethodProperty; using XImagingXhandler.XDAL; using XCoreBLL; using System.Collections; using DataEntity.Share; namespace XHandler.View { /// /// ConsumableManagement.xaml 的交互逻辑 /// public partial class ConsumableManagement : UserControl { ObservableCollection labwareList; Labware selectLabware = null; Labware copyLabware = null; PlateSetting plateSetting = null; LatticeSetting latticeSetting = null; TipsSetting tipsSetting = null; ThroughSetting throughSetting = null; TipBoxSetting tipBoxSetting = null; LidSetting lidSetting = null; CircularDishSetting circularDishSetting = null; CentrifugalSetting centrifugalSetting = null; LabwareCaretaker labwareCaretaker = new LabwareCaretaker(); OperateAuditLogBll operateAuditLogBll = new OperateAuditLogBll(); LogAduitHelper logAduitHelper = new LogAduitHelper(); public ConsumableManagement() { InitializeComponent(); } #region 观察者模式更新所有应用的耗材 // 保存观察者耗材列表 public List observers = new List(); public void AddObserver(IConsumableObserver ob) { observers.Add(ob); } public void RemoveObserver(IConsumableObserver ob) { observers.Remove(ob); } public void Update() { // 遍历订阅者列表进行通知 foreach (IConsumableObserver ob in observers) { if (ob != null) { ob.ReceiveAndUpdate(this); } } } #endregion private void RadioButton_Checked(object sender, RoutedEventArgs e) { RadioButton btn = (RadioButton)sender; if (btn.Name == "rbBaseSetting") { gridBaseSetting.Visibility = Visibility.Visible; if (selectLabware != null) { if (selectLabware.labware_type_id == "10") { centrifugalOtherSetting.Visibility = Visibility.Collapsed; } else { otherSetting.Visibility = Visibility.Collapsed; } } else { otherSetting.Visibility = Visibility.Collapsed; } } else if (btn.Name == "rbOtherSetting") { gridBaseSetting.Visibility = Visibility.Collapsed; if (selectLabware != null) { if (selectLabware.labware_type_id == "10") { centrifugalOtherSetting.Visibility = Visibility.Visible; } else { otherSetting.Visibility = Visibility.Visible; } } else { otherSetting.Visibility = Visibility.Visible; } } } private void UserControl_Loaded(object sender, RoutedEventArgs e) { // 放这写:解决更新耗材信息后,再次打开画面没被刷新的问题 ObservableCollection labwareTypeList = DataModule.getInstance().GetLabwareTypes(); if (labwareTypeList.FirstOrDefault(x => x.labwaretype_name.Equals("请选择")) != null) { } else { labwareTypeList.Insert(0, new LabwareType { labwaretype_id = "-1", labwaretype_name = "请选择" }); } cbLabwareType.ItemsSource = labwareTypeList; labwareList = DataModule.getInstance().GetLabwares(); lvConsumable.ItemsSource = labwareList; //添加耗材集合进入备忘录 LabwareMemento labwareMemento = new LabwareMemento(labwareList); labwareCaretaker.LabwareMementoDic.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), labwareMemento); rbBaseSetting.IsChecked = true; if (gridBaseSetting.Children.Count == 0) { PlateSetting ps = new PlateSetting(); gridBaseSetting.Children.Add(ps); } cbLabwareType.SelectedIndex = 0; } private void lvConsumable_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (lvConsumable.SelectedIndex < 0) return; Labware labware = lvConsumable.SelectedItem as Labware; selectLabware = DeepCopyByReflection.Copy(labware); baseInfo.SetLabware(selectLabware); otherSetting.SetLabware(selectLabware); centrifugalOtherSetting.SetLabware(selectLabware); if (selectLabware.labware_type_id == "10") { if((bool)rbOtherSetting.IsChecked) { otherSetting.Visibility = Visibility.Collapsed; centrifugalOtherSetting.Visibility = Visibility.Visible; } else { } } else { if ((bool)rbOtherSetting.IsChecked) { otherSetting.Visibility = Visibility.Visible; centrifugalOtherSetting.Visibility = Visibility.Collapsed; } } rbOtherSetting.IsEnabled = true; if (labware.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Plate).ToString()) // 孔板 { gridBaseSetting.Children.Clear(); plateSetting = new PlateSetting(selectLabware); plateSetting.consumableManagement = this; gridBaseSetting.Children.Add(plateSetting); } else if (labware.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Tips).ToString()) // 吸头 { gridBaseSetting.Children.Clear(); tipsSetting = new TipsSetting(selectLabware); gridBaseSetting.Children.Add(tipsSetting); rbOtherSetting.IsEnabled = false; } else if (labware.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Through).ToString()) // 试剂槽 { gridBaseSetting.Children.Clear(); throughSetting = new ThroughSetting(selectLabware); gridBaseSetting.Children.Add(throughSetting); } else if (labware.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.CircularDish).ToString()) //圆形皿 { gridBaseSetting.Children.Clear(); circularDishSetting = new CircularDishSetting(selectLabware); gridBaseSetting.Children.Add(circularDishSetting); } else if (labware.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.TipsBox).ToString()) // 吸头盒 { gridBaseSetting.Children.Clear(); tipBoxSetting = new TipBoxSetting(selectLabware); gridBaseSetting.Children.Add(tipBoxSetting); } else if (labware.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Lid).ToString()) // 盖子 { gridBaseSetting.Children.Clear(); lidSetting = new LidSetting(selectLabware); lidSetting.consumableManagement = this; gridBaseSetting.Children.Add(lidSetting); } else if (labware.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Rounddishlid).ToString()) // 圆形皿盖子 { gridBaseSetting.Children.Clear(); lidSetting = new LidSetting(selectLabware); gridBaseSetting.Children.Add(lidSetting); } else if(labware.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Tube).ToString()) //管架 { gridBaseSetting.Children.Clear(); plateSetting = new PlateSetting(selectLabware); plateSetting.consumableManagement = this; gridBaseSetting.Children.Add(plateSetting); } else if(labware.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Shelf).ToString()) //板位 { gridBaseSetting.Children.Clear(); latticeSetting = new LatticeSetting(selectLabware); latticeSetting.consumableManagement = this; gridBaseSetting.Children.Add(latticeSetting); } else if (labware.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Centrifugal).ToString()) //离心管 { gridBaseSetting.Children.Clear(); centrifugalSetting = new CentrifugalSetting(selectLabware); centrifugalSetting.consumableManagement = this; gridBaseSetting.Children.Add(centrifugalSetting); } else if (labware.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Electrophoto).ToString()) //电泳槽 { gridBaseSetting.Children.Clear(); latticeSetting = new LatticeSetting(selectLabware); latticeSetting.consumableManagement = this; gridBaseSetting.Children.Add(latticeSetting); } rbBaseSetting.IsChecked = true; } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } public void AddNewLabware(Labware l) { Labware labware = new Labware(); labware.labware_id = Guid.NewGuid().ToString(); labware.labware_name = l.labware_name; labware.labware_type_id = l.labware_type_id; labware.labware_type = l.labware_type; labware.is_default_type = 0; labware.labware_color_top = l.labware_color_top; labware.labware_color_line = l.labware_color_line; int ret = LabwareDB.AddLabwareIntodb(labware); Hashtable hashtable = logAduitHelper.AddObj(labware); string operateContent = string.Empty; foreach (DictionaryEntry d in hashtable) { operateContent += d.Key.ToString() + ":" + d.Value.ToString() + "\r\n"; } if (ret > 0) { labwareList.Add(labware); PlsSetProperty plsSetProperty = new PlsSetProperty($"耗材:{labware.labware_name} 添加成功", false); plsSetProperty.closeEvent += PlsSetProperty_closeEvent; Window wnd = Application.Current.MainWindow; Grid parent = Utilities.FindVisualChild(wnd); parent.Children.Add(plsSetProperty); OperateAuditLogDB.AddOperateAuditLogIntodb(operateAuditLogBll.GenerateOperateAuditLog("添加",operateContent, Shared.User.username,"耗材管理","","","耗材[id:"+labware.labware_id+"]","成功")); } else { PlsSetProperty plsSetProperty = new PlsSetProperty($"耗材:{labware.labware_name} 添加失败", false); plsSetProperty.closeEvent += PlsSetProperty_closeEvent; Window wnd = Application.Current.MainWindow; Grid parent = Utilities.FindVisualChild(wnd); parent.Children.Add(plsSetProperty); OperateAuditLogDB.AddOperateAuditLogIntodb(operateAuditLogBll.GenerateOperateAuditLog("添加", operateContent, Shared.User.username,"耗材管理","", "", "耗材[id:" + labware.labware_id + "]", "失败")); } cbLabwareType_SelectionChanged(null, null);//更新 lvConsumable.SelectedItem = labware; } private void cbLabwareType_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbLabwareType.SelectedIndex < 0) return; lvConsumable.ItemsSource = null; if (cbLabwareType.SelectedValue.ToString() == "-1") lvConsumable.ItemsSource = labwareList; else { List list = labwareList.Where(s => s.labware_type_id == cbLabwareType.SelectedValue.ToString()).ToList(); lvConsumable.ItemsSource = list; } } #region 保存耗材(添加或修改进入数据库) public void SaveConsumable() { if (lvConsumable.SelectedIndex < 0) return; if (baseInfo.CheckData()) { Labware labware = lvConsumable.SelectedItem as Labware; //if(labware.labware_type_id.Equals("4")) //{ // if (selectLabware.labwareWellInfoList != null) // { // foreach (LabwareWellInfo labwareWellInfo in selectLabware.labwareWellInfoList) // { // if (labwareWellInfo.labware_well_shape.Equals(0)) // { // labwareWellInfo.labware_well_shape = 1; // } // else if (labwareWellInfo.labware_well_shape.Equals(1)) // { // labwareWellInfo.labware_well_shape = 2; // } // } // } //} labware.Copy(selectLabware); //查找到显示控件 List list = ViewCom.GetChildObjects((DependencyObject)lvConsumable, typeof(TextBlock)); for (int i = 0; i < list.Count; i++) { if (list.Count > 0) { if (list[i].Name == "idText" && list[i].Tag.ToString() == labware.labware_id.ToString()) { list[i].Text = labware.labware_name; } } } int flag = LabwareDB.UpdateLabwareIntodb(labware); if (labware.labware_type_id == "4") { if (labware.labwareWellInfoList != null&&labware.labwareWellInfoList.Count>0) { int sum = 0; LabwareDB.DeleteLabwareWellInfoByLabwareIddb(labware.labwareWellInfoList[0].labware_id); foreach (LabwareWellInfo labwareWell in labware.labwareWellInfoList) { //if (LabwareDB.GetSpecialLabwareWellInfoExistById(labwareWell.well_id)) //{ // int ret = LabwareDB.UpdateLabwareWellInfoIntodb(labwareWell); // if (ret > 0) // { // sum++; // } //} //else //{ int ret = LabwareDB.AddLabwareWellInfoIntodb(labwareWell); if (ret > 0) { sum++; } //} } if (sum == labware.labwareWellInfoList.Count) { //成功 } } } LabwareMemento oldLabwares = new LabwareMemento(null); string maxKey = ""; oldLabwares = GetMaxKeyLabwareMemento(out maxKey); string operateContent = string.Empty; if (oldLabwares!=null) { Labware oldLabware = oldLabwares.LabwareBack.SingleOrDefault(x => x.labware_id.Equals(labware.labware_id)); if (oldLabware != null) { Hashtable hashtable = logAduitHelper.diffObj(oldLabware, labware); foreach (DictionaryEntry d in hashtable) { operateContent += d.Key.ToString() + ":" + d.Value.ToString() + "\r\n"; } if (flag > 0) { oldLabwares.LabwareBack.Remove(oldLabware); Labware newlabware = new Labware(); newlabware.Copy(labware); oldLabwares.LabwareBack.Add(newlabware); } } } if (flag > 0) { PlsSetProperty plsSetProperty = new PlsSetProperty($"耗材:{labware.labware_name} 保存成功", false); plsSetProperty.closeEvent += PlsSetProperty_closeEvent; System.Windows.Window wnd = Application.Current.MainWindow; Grid parent = Utilities.FindVisualChild(wnd); parent.Children.Add(plsSetProperty); OperateAuditLogDB.AddOperateAuditLogIntodb(operateAuditLogBll.GenerateOperateAuditLog("修改", operateContent, Shared.User.username, "耗材管理", "", "", "耗材[id:" + labware.labware_id + "]", "成功")); } else { PlsSetProperty plsSetProperty = new PlsSetProperty($"耗材:{labware.labware_name} 保存失败", false); plsSetProperty.closeEvent += PlsSetProperty_closeEvent; System.Windows.Window wnd = Application.Current.MainWindow; Grid parent = Utilities.FindVisualChild(wnd); parent.Children.Add(plsSetProperty); OperateAuditLogDB.AddOperateAuditLogIntodb(operateAuditLogBll.GenerateOperateAuditLog("修改", operateContent, Shared.User.username, "耗材管理", "", "", "耗材[id:" + labware.labware_id + "]", "失败")); } lvConsumable.SelectedValue = labware; } } #endregion #region 获取最新的一条耗材集备份 /// /// 获取最新的一条耗材集备份 /// /// public LabwareMemento GetMaxKeyLabwareMemento(out string maxKey) { LabwareMemento oldLabwares = new LabwareMemento(null); List dateKeys = new List(); foreach (KeyValuePair d in labwareCaretaker.LabwareMementoDic) { dateKeys.Add(Convert.ToDateTime(d.Key.ToString())); } maxKey = dateKeys.Max().ToString("yyyy-MM-dd HH:mm:ss"); if (labwareCaretaker.LabwareMementoDic.TryGetValue(maxKey, out oldLabwares)) { return oldLabwares; } return null; } #endregion #region 另存为耗材(导出为文件) public void SaveAsConsumable() { if (lvConsumable.SelectedIndex < 0) return; Labware labware = lvConsumable.SelectedItem as Labware; labware.Copy(selectLabware); LabwareDB.UpdateLabwareIntodb(labware); if (labware.labware_type_id == "4") { if(labware.labwareWellInfoList!=null) { int sum = 0; foreach(LabwareWellInfo labwareWell in labware.labwareWellInfoList) { if(LabwareDB.GetSpecialLabwareWellInfoExistById(labwareWell.well_id)) { int ret=LabwareDB.AddLabwareWellInfoIntodb(labwareWell); if(ret>0) { sum++; } } else { int ret=LabwareDB.AddLabwareWellInfoIntodb(labwareWell); if (ret > 0) { sum++; } } } if(sum==labware.labwareWellInfoList.Count) { //成功 } } } } #endregion private void searchLabware_PreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) { string search = searchLabware.Text.Trim(); if (string.IsNullOrEmpty(search)) return; lvConsumable.ItemsSource = null; List list = labwareList.Where(s => (s.labware_name.Contains(search) || s.brand.Contains(search))).ToList(); lvConsumable.ItemsSource = list; } } private void searchLabware_clearEvent(object sender, EventArgs e) { lvConsumable.ItemsSource = null; //lvConsumable.ItemsSource = labwareList; if (cbLabwareType.SelectedIndex < 0) return; lvConsumable.ItemsSource = null; if (cbLabwareType.SelectedIndex == 0) lvConsumable.ItemsSource = labwareList; else { List list = labwareList.Where(s => s.labware_type_id == cbLabwareType.SelectedValue.ToString()).ToList(); lvConsumable.ItemsSource = list; } } private void menuCopy_Click(object sender, RoutedEventArgs e) { if (lvConsumable.SelectedItem == null) return; copyLabware = lvConsumable.SelectedItem as Labware; ContextMenu menu = FindResource("consumableMenu") as ContextMenu; MenuItem mi = menu.Items[1] as MenuItem; mi.IsEnabled = true; } private void menuPaste_Click(object sender, RoutedEventArgs e) { if (copyLabware == null) return; Labware newLabware = copyLabware.Clone() as Labware; newLabware.labware_name = copyLabware.labware_name + " " + Properties.Resources.strCopy; newLabware.is_default_type = 0; newLabware.labware_id = Guid.NewGuid().ToString(); labwareList.Add(newLabware); LabwareDB.AddLabwareIntodb(newLabware); cbLabwareType_SelectionChanged(null, null); } private void menuEdit_Click(object sender, RoutedEventArgs e) { } private void menuDelete_Click(object sender, RoutedEventArgs e) { if (lvConsumable.SelectedItem == null) return; PlsToolTipWin plsToolTipWin = new PlsToolTipWin("Do you want to delete this labware? "); plsToolTipWin.Height = ActualHeight; plsToolTipWin.Width = ActualWidth; plsToolTipWin.btnClearData.Visibility = Visibility.Hidden; plsToolTipWin.lauchView = null; SolidColorBrush mybtn1_Brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(0, 0, 0, 0)); plsToolTipWin.Background = (System.Windows.Media.Brush)mybtn1_Brush; plsToolTipWin.ShowDialog(); if (plsToolTipWin.DialogResult == true) { Labware lab = lvConsumable.SelectedItem as Labware; labwareList.Remove(lab); lab.labware_status = 0; int flag = LabwareDB.DeleteLabwareIntodb(lab); LabwareMemento oldLabwares = new LabwareMemento(null); string maxKey = ""; oldLabwares = GetMaxKeyLabwareMemento(out maxKey); string operateContent = string.Empty; if (oldLabwares != null) { Labware oldLabware = oldLabwares.LabwareBack.SingleOrDefault(x => x.labware_id.Equals(lab.labware_id)); Hashtable hashtable = logAduitHelper.LabwareDelObj(lab); foreach (DictionaryEntry d in hashtable) { operateContent += d.Key.ToString() + ":" + d.Value.ToString() + "\r\n"; } if (flag > 0) { oldLabwares.LabwareBack.Remove(oldLabware); } } if (flag > 0) { PlsSetProperty plsSetProperty = new PlsSetProperty($"耗材:{lab.labware_name} 删除成功", false); plsSetProperty.closeEvent += PlsSetProperty_closeEvent; Window wnd = Application.Current.MainWindow; Grid parent = Utilities.FindVisualChild(wnd); parent.Children.Add(plsSetProperty); OperateAuditLogDB.AddOperateAuditLogIntodb(operateAuditLogBll.GenerateOperateAuditLog("删除", operateContent, Shared.User.username, "耗材管理", "", "", "耗材[id:" + lab.labware_id + "]", "成功")); } else { PlsSetProperty plsSetProperty = new PlsSetProperty($"耗材:{lab.labware_name} 删除失败", false); plsSetProperty.closeEvent += PlsSetProperty_closeEvent; Window wnd = Application.Current.MainWindow; Grid parent = Utilities.FindVisualChild(wnd); parent.Children.Add(plsSetProperty); OperateAuditLogDB.AddOperateAuditLogIntodb(operateAuditLogBll.GenerateOperateAuditLog("删除", operateContent, Shared.User.username, "耗材管理", "", "", "耗材[id:" + lab.labware_id + "]", "失败")); } if (cbLabwareType.SelectedIndex == 0) { string search = searchLabware.Text.Trim(); List list = labwareList.Where(s => (s.labware_name.Contains(search) || s.brand.Contains(search))).ToList(); lvConsumable.ItemsSource = list; } else { string search = searchLabware.Text.Trim(); List list = labwareList.Where(s => (s.labware_name.Contains(search) || s.brand.Contains(search))).ToList(); list = list.Where(s => s.labware_type_id == cbLabwareType.SelectedValue.ToString()).ToList(); lvConsumable.ItemsSource = list; } } else { } } private void lvConsumable_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { ListViewItem listViewItem = Utilities.FindVisualParent(e.OriginalSource as DependencyObject) as ListViewItem; if (listViewItem != null) { listViewItem.Focus(); string userid = UserDB.GetUserInfByUserName(Shared.User.username).id; //所有菜单 List roleMenuAllList = UserDB.GetWholeRoleMenuByUserId(userid); var MenuLabwareManage = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuLabwareManage)); Labware labware = listViewItem.DataContext as Labware; lvConsumable.SelectedItem = labware; ContextMenu menu = FindResource("consumableMenu") as ContextMenu; MenuItem mi = menu.Items[2] as MenuItem; if (labware.is_default_type == 1) { mi.IsEnabled = false; } else { //权限控制 if (MenuLabwareManage != null) { var MenuLabwareDelete = MenuLabwareManage.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuDelete)); if (MenuLabwareDelete != null) { mi.IsEnabled = true; } else { mi.IsEnabled = false; } } } mi = menu.Items[0] as MenuItem; //权限控制 if (MenuLabwareManage != null) { var MenuLabwareCopy = MenuLabwareManage.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuCopy)); if (MenuLabwareCopy != null) { mi.IsEnabled = true; } else { mi.IsEnabled = false; } } e.Handled = true; } } private void PlsSetProperty_closeEvent(object sender, EventArgs e) { Window wnd = Application.Current.MainWindow; Grid grid = Utilities.FindVisualChild(wnd); UIElement element = sender as UIElement; grid.Children.Remove(element); } } }