using DataEntity.Share;
using DataRWDAL;
using DataRWDalDrive.DB;
using DriverLib.Engine;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using XCommon;
using XHandler.Class;
using XHandler.Class.DataEx;
using XHandler.View.Consumables;
using XHandler.View.Liquids;
using XHandler.View.MethodProperty;
using XImagingXhandler.XDAL;
using XCoreBLL;
using System.Collections;
using DataRWDalDrive.Model;
//using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace XHandler.View
{
///
/// LiquidManagement.xaml 的交互逻辑
///
public partial class LiquidManagement : UserControl
{
ObservableCollection liquidCollection = new ObservableCollection();
List armList;
ObservableCollection liquidTypes;
ObservableCollection liquidRanges;
public LiquidCaretaker liquidCaretaker = new LiquidCaretaker();
public OperateAuditLogBll operateAuditLogBll = new OperateAuditLogBll();
public LogAduitHelper logAduitHelper = new LogAduitHelper();
AspirateParam aspirateParam;
DispenseParam dispenseParam;
CalibrationParam calibrationParam;
TreeViewItem menuFocusItem;
LiquidItem copyLiquid;
List roleMenuAllList = null;
Liquid selectedLiquid { get; set; }
public delegate void LiquidsDelegate(string liquid_id, bool IsDelete);
public static event LiquidsDelegate loadLiquidsEvent;
public bool CanPaset { get; set; }
public LiquidManagement(List roleMenuAllList)
{
InitializeComponent();
GetLiquidTree();
armList = DataModule.getInstance().GetDeviceArm();
liquidTypes = DataModule.getInstance().GetLiquidTypes();
liquidRanges = DataModule.getInstance().GetLiquidRanges();
cbLiquidType.ItemsSource = liquidTypes;
cbLiquidRange.ItemsSource = liquidRanges;
cbLiquidArm.ItemsSource = armList;
this.roleMenuAllList = roleMenuAllList;
}
public void GetLiquidTree()
{
List liquidAlls = new List();
liquidCollection.Clear();
List deviceArms = DeviceArmDB.GetDeviceArmFromdb(Shared.SoftwareInformation.software_information_id);
ObservableCollection liquidTypeList = LiquidTypeDB.GetLiquidTypeFromdb(2);
ObservableCollection liquidRangeList = LiquidRangeDB.GetLiquidRangeFromdb();
foreach (var type in liquidTypeList)
{
LiquidItem typeItem = new LiquidItem(LiquidNodeType.Type, type.liquid_type_id, type.liquid_type_name, (object)type, null);
foreach (var arm in deviceArms)
{
if (arm.channels == 0)
continue;
LiquidItem headItem = new LiquidItem(LiquidNodeType.Head, arm.device_arm_id.ToString(), arm.head_type, (object)arm, typeItem);
foreach (var range in liquidRangeList)
{
LiquidItem rangeItem = new LiquidItem(LiquidNodeType.Range, range.liquid_range_id, range.liquid_range_name, (object)range, headItem);
ObservableCollection liquids = LiquidTypeRSRangeDB.GetLiquidFromdbByTypeAndRange(type.liquid_type_id, range.liquid_range_id, arm.device_arm_id.ToString());
liquidAlls.AddRange(liquids);
foreach (var liquid in liquids)
{
LiquidItem liquidItem = new LiquidItem(LiquidNodeType.Liquid, liquid.liquid_id, liquid.liquid_name, (object)liquid, rangeItem);
liquidItem.nDefault = liquid.is_default_type;
if (item != null)
{
if (item.ID.Equals(liquidItem.ID))
{
liquidItem.IsSelected = true;
if(liquidItem.Parent!=null)
{
liquidItem.Parent.IsExpanded = true;
if(liquidItem.Parent.Parent!=null)
{
liquidItem.Parent.Parent.IsExpanded = true;
}
}
}
}
rangeItem.Children.Add(liquidItem);
}
if (headItem.Children.Count == 0)
rangeItem.IsExpanded = true;
if (rangeItem.Children.Count > 0)
{
rangeItem.IsExpanded = true;
headItem.Children.Add(rangeItem);
}
}
if (typeItem.Children.Count == 0)
headItem.IsExpanded = true;
typeItem.Children.Add(headItem);
}
if (liquidCollection.Count == 0)
typeItem.IsExpanded = true;
liquidCollection.Add(typeItem);
}
treeviewLiquid.ItemsSource = liquidCollection;
//添加耗材集合进入备忘录
LiquidMemento liquidMemento = new LiquidMemento(new ObservableCollection(liquidAlls));
liquidCaretaker.LiquidMementoDic.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), liquidMemento);
}
#region 获取最新的一条液体集备份
///
/// 获取最新的一条液体集备份
///
///
public LiquidMemento GetMaxKeyLiquidMemento(out string maxKey)
{
LiquidMemento oldLabwares = new LiquidMemento(null);
List dateKeys = new List();
foreach (KeyValuePair d in liquidCaretaker.LiquidMementoDic)
{
dateKeys.Add(Convert.ToDateTime(d.Key.ToString()));
}
maxKey = dateKeys.Max().ToString("yyyy-MM-dd HH:mm:ss");
if (liquidCaretaker.LiquidMementoDic.TryGetValue(maxKey, out oldLabwares))
{
return oldLabwares;
}
return null;
}
#endregion
#region 观察者模式更新所有应用的液体参数
// 保存观察者液体参数列表
public List observers = new List();
public void AddObserver(ILiquidObserver ob)
{
observers.Add(ob);
}
public void RemoveObserver(ILiquidObserver ob)
{
observers.Remove(ob);
}
public void Update()
{
// 遍历订阅者列表进行通知
foreach (ILiquidObserver ob in observers)
{
if (ob != null)
{
ob.ReceiveAndUpdate(this);
}
}
}
#endregion
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
rbAspirateParam.IsChecked = true;
if (Shared.SoftwareInformation.software_device_number.Equals(DeviceCategory.DeviceHXELEC))
{
rbCelibrate.Visibility = Visibility.Hidden;
}
else
{
rbCelibrate.Visibility = Visibility.Visible;
}
string userid = UserDB.GetUserInfByUserName(Shared.User.username).id;
//所有菜单
List roleMenuAllList = UserDB.GetWholeRoleMenuByUserId(userid);
//权限控制
var MenuLiquidManage = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuLiquidManage));
if (MenuLiquidManage != null)
{
var MenuLiquidEdit = MenuLiquidManage.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuEdit));
if (MenuLiquidEdit != null)
{
gdBaseLiquid.IsEnabled = true;
}
else
{
gdBaseLiquid.IsEnabled = false;
}
}
}
#region 吸液参数
private void rbAspirateParam_Checked(object sender, RoutedEventArgs e)
{
gridParam.Children.Clear();
if (aspirateParam == null)
{
aspirateParam = new AspirateParam(selectedLiquid);
}
else
{
if (selectedLiquid == null)
{
gridParam.Children.Add(aspirateParam);
return;
}
aspirateParam.SetLiquid(selectedLiquid);
}
gridParam.Children.Add(aspirateParam);
}
#endregion
#region 加液参数
private void rbDispenseParam_Checked(object sender, RoutedEventArgs e)
{
gridParam.Children.Clear();
if (dispenseParam == null)
dispenseParam = new DispenseParam(selectedLiquid);
else
{
if (selectedLiquid == null)
{
gridParam.Children.Add(dispenseParam);
return;
}
dispenseParam.SetLiquid(selectedLiquid);
}
gridParam.Children.Add(dispenseParam);
}
#endregion
#region 校准
private void rbCelibrate_Checked(object sender, RoutedEventArgs e)
{
gridParam.Children.Clear();
if (calibrationParam == null)
calibrationParam = new CalibrationParam(selectedLiquid);
else
{
if (selectedLiquid == null)
{
gridParam.Children.Add(calibrationParam);
return;
}
calibrationParam.SetLiquid(selectedLiquid);
}
gridParam.Children.Add(calibrationParam);
}
#endregion
private void treeviewLiquid_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs