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);
}
}
}