using DataEntity.Rack; using DataEntity.Share; using DataRWDAL.Rack; using DriverLib.Engine; using HandyControl.Data; using HxEnum; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows; using System.Windows.Input; using System.Windows.Media; using System.Windows.Threading; using System.Xml; using XCommon.Log; using XCommon.Tip; using XHandler.View.MethodProperty; using XImagingXhandler.XDAL; using ResultType = DriverLib.Engine.ResultType; using DataRWDAL; using XHandler.View.Liquids; using XHandler.Class; using XCoreBLL; using XImaging.Automation.Service.Interface; using MySqlX.XDevAPI.Common; using System.Reflection; using System.Threading.Tasks; using System.Configuration; using DataEntity; using System.Windows.Controls; using XCommon; using XHandler.Class.DataEx; using XHandler.Controls.Run.Com; using XHandler.Controls; namespace XHandler.View { /// /// 设置页面 /// public partial class SystemSettings : Window { private System.Threading.Timer heartConnectTimer = null; private List softwareInformationDevices = new List(); private DispatcherTimer checkAndSetTimer;//用于检查更新已使用时长 #region 选项卡选中Flg private bool currentChannelIsChecked = false; private bool currentLedIsChecked = false; private bool currentLatticeIsChecked = false; private bool currentRackIsChecked = false; private bool currentOtherIsChecked = false; #endregion private bool isInit = false; public MainWindow mainWindow = null; #region 构造函数 public SystemSettings() { InitializeComponent(); btnSetLed_Click(null, null); this.Owner = (Window)Shared.Main; } #endregion #region 初期表示 private void SytemSettings_Loaded(object sender, RoutedEventArgs e) { try { isInit = true; // 获取软件信息 softwareInformationDevices = SoftwareInnerDeviceDB.GetSoftDeviceData(Shared.SoftwareInformation.software_information_id); #region 状态同步 if (MethodAction.Instance == null) { return; } LoggerHelper.DebugLog($"[SytemSettings_Loaded]: FloodlightStatus(LED) = {MethodAction.Instance.FloodlightStatus}," + $" SterilizingLampStatus(UV) = {MethodAction.Instance.SterilizingLampStatus}, FFUStatus(FFU) = {MethodAction.Instance.FFUStatus},"); #region LED if (MethodAction.Instance.FloodlightStatus) { radioBtnLedStart.IsChecked = true; } else { radioBtnLedEnd.IsChecked = true; } #endregion #region UV if (MethodAction.Instance.SterilizingLampStatus) { radioBtnUVStart.IsChecked = true; } else { radioBtnUVEnd.IsChecked = true; } #endregion #region FFU if (MethodAction.Instance.FFUStatus) { radioBtnHEPAStart.IsChecked = true; } else { radioBtnHEPAEnd.IsChecked = true; } #endregion #region 暂存架 bool isEnableRack = Shared.SoftwareInformation.is_enable_rack == EnumManagement.GetEnumValue(isEnableRackEnum.Yes) ? true : false; cBoxEnableRack.IsChecked = isEnableRack; var rackConfigModel = RackConfigDB.GetInfo(Shared.SoftwareInformation.software_information_id); if (rackConfigModel != null) { numRackNum.Value = rackConfigModel.rack_num; numLayerNum.Value = rackConfigModel.rack_layer; } cBoxEnableRack_Click(null, null); // 加载暂存架 LoadStack(); #endregion #region 全局速度 sldSystemTuneVal.Value = Shared.SoftwareInformation.global_speed; #endregion #region 通道 var queryResult = Shared.DeviceArmList.Where(x => x.software_information_id.Equals(Shared.SoftwareInformation.software_information_id) && x.arm_type.Equals(1)); List deviceArmList = queryResult.ToList();//(List)Shared.DeviceArmList.SelectMany(x => x.software_information_id.Equals(Shared.SoftwareInformation.software_information_id) && x.arm_type.Equals(1)); int countOfArm = 0;//arm计数 foreach (DeviceArm deviceArm in deviceArmList) { if (countOfArm == 0) { tbkChannelOne.Text = deviceArm.device_arm_name + "通道设置"; spChannelOne.Visibility = Visibility.Visible; tipsChannelDisOne.TotalChannels = deviceArm.channels; tipsChannelDisOne.SetTotalChannelCount(deviceArm.channels); tipsChannelDisOne.Tag = deviceArm; if (deviceArm.device_arm_property == "") { tipsChannelDisOne.SelectedChannels = new List { }; tipsChannelDisOne.SetSelectedChannels(); //Shared.ChannelsId = new int[]; return; } string[] strChannels = deviceArm.device_arm_property.Trim().Split(','); int[] iChannels = new int[strChannels.Length]; for (int j = 0; j < strChannels.Length; j++) { if (strChannels[j].Contains("泵")) { iChannels[j] = Convert.ToInt32(strChannels[j].Substring(1)); } else { iChannels[j] = Convert.ToInt32(strChannels[j]); } } if (iChannels.Length > 0) { tipsChannelDisOne.SelectedChannels = iChannels.ToList(); tipsChannelDisOne.SetSelectedChannels(); } } else if (countOfArm == 1) { tbkChannelTwo.Text = deviceArm.device_arm_name + "通道设置"; spChannelTwo.Visibility = Visibility.Visible; tipsChannelDisTwo.TotalChannels = deviceArm.channels; tipsChannelDisTwo.SetTotalChannelCount(deviceArm.channels); tipsChannelDisTwo.Tag = deviceArm; if (deviceArm.device_arm_property == "") { tipsChannelDisTwo.SelectedChannels = new List { }; tipsChannelDisTwo.SetSelectedChannels(); //Shared.ChannelsId = new int[]; return; } string[] strChannels = deviceArm.device_arm_property.Trim().Split(','); int[] iChannels = new int[strChannels.Length]; for (int j = 0; j < strChannels.Length; j++) { if (strChannels[j].Contains("泵")) { iChannels[j] = Convert.ToInt32(strChannels[j].Substring(1)); } else { iChannels[j] = Convert.ToInt32(strChannels[j]); } } if (iChannels.Length > 0) { tipsChannelDisTwo.SelectedChannels = iChannels.ToList(); tipsChannelDisTwo.SetSelectedChannels(); } } else if (countOfArm == 2) { tbkChannelThree.Text = deviceArm.device_arm_name + "通道设置"; spChannelThree.Visibility = Visibility.Visible; tipsChannelDisThree.TotalChannels = deviceArm.channels; tipsChannelDisThree.SetTotalChannelCount(deviceArm.channels); tipsChannelDisThree.Tag = deviceArm; if (deviceArm.device_arm_property == "") { tipsChannelDisThree.SelectedChannels = new List { }; tipsChannelDisThree.SetSelectedChannels(); return; } string[] strChannels = deviceArm.device_arm_property.Trim().Split(','); int[] iChannels = new int[strChannels.Length]; for (int j = 0; j < strChannels.Length; j++) { if (strChannels[j].Contains("泵")) { iChannels[j] = Convert.ToInt32(strChannels[j].Substring(1)); } else { iChannels[j] = Convert.ToInt32(strChannels[j]); } } if (iChannels.Length > 0) { tipsChannelDisThree.SelectedChannels = iChannels.ToList(); tipsChannelDisThree.SetSelectedChannels(); } } countOfArm++; } #endregion #endregion #region 权限控制 string userid = UserDB.GetUserInfByUserName(Shared.User.username).id; //所有菜单 List roleMenuAllList = UserDB.GetWholeRoleMenuByUserId(userid); //权限控制 var MenuSystemSetting = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuSystemSetting)); if (MenuSystemSetting != null) { var SubMenuLightSetting = MenuSystemSetting.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuLightSetting)); if (SubMenuLightSetting != null) { btnSetLed.Visibility = Visibility.Visible; ClearIsCheckeFlg(); currentLedIsChecked = true; // 切换选项卡 SwitchTab(); gdSetLedContent.Visibility = System.Windows.Visibility.Visible; gdTabButtons.ColumnDefinitions[0].Width = new GridLength(137.5); } else { btnSetLed.Visibility = Visibility.Collapsed; gdSetLedContent.Visibility = System.Windows.Visibility.Collapsed; gdTabButtons.ColumnDefinitions[0].Width = new GridLength(0); } var SubMenuSetRack = MenuSystemSetting.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuSetRack)); if (SubMenuSetRack != null) { btnSetRack.Visibility = Visibility.Visible; ClearIsCheckeFlg(); currentRackIsChecked = true; // 切换选项卡 SwitchTab(); gdSetRackContent.Visibility = System.Windows.Visibility.Visible; gdTabButtons.ColumnDefinitions[1].Width = new GridLength(137.5); } else { btnSetRack.Visibility = Visibility.Collapsed; gdSetRackContent.Visibility = System.Windows.Visibility.Collapsed; gdTabButtons.ColumnDefinitions[1].Width = new GridLength(0); } var MenuChannelSetting = MenuSystemSetting.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuChannelSetting)); if (MenuChannelSetting != null) { btnSetChannel.Visibility = Visibility.Visible; ClearIsCheckeFlg(); currentChannelIsChecked = true; // 切换选项卡 SwitchTab(); gdSetChannelContent.Visibility = System.Windows.Visibility.Visible; gdTabButtons.ColumnDefinitions[2].Width = new GridLength(137.5); if (Shared.SoftwareInformation.software_device_number == DeviceCategory.DeviceHXFX) { spChannelPump.Visibility = Visibility.Visible; spChannelPumpDispens.Visibility = Visibility.Visible; btnDispense.Visibility = Visibility.Visible; } } else { btnSetChannel.Visibility = Visibility.Collapsed; gdSetChannelContent.Visibility = System.Windows.Visibility.Collapsed; gdTabButtons.ColumnDefinitions[2].Width = new GridLength(0); if (Shared.SoftwareInformation.software_device_number == DeviceCategory.DeviceHXFX) { spChannelPump.Visibility = Visibility.Collapsed; spChannelPumpDispens.Visibility = Visibility.Collapsed; btnDispense.Visibility = Visibility.Collapsed; } } var SubMenuSetOthers = MenuSystemSetting.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuSetOthers)); if (SubMenuSetOthers != null) { btnSetOther.Visibility = Visibility.Visible; ClearIsCheckeFlg(); currentOtherIsChecked = true; // 切换选项卡 SwitchTab(); gdSetOtherContent.Visibility = System.Windows.Visibility.Visible; gdTabButtons.ColumnDefinitions[3].Width = new GridLength(137.5); } else { btnSetOther.Visibility = Visibility.Collapsed; gdSetOtherContent.Visibility = System.Windows.Visibility.Collapsed; gdTabButtons.ColumnDefinitions[3].Width = new GridLength(0); } } #endregion VolumeVal volumeVal = new VolumeVal(); volumeVal.Volume1 = 0; volumeVal.Volume2 = 0; volumeVal.Volume3 = 0; volumeVal.Volume4 = 0; this.DataContext = volumeVal; } catch(Exception ex) { LoggerHelper.ErrorLog("ERROR SytemSettings_Loaded:", ex); } } #endregion #region 设置通道 private void btnSetChannel_Click(object sender, RoutedEventArgs e) { if (!currentChannelIsChecked) { // 清除选项卡选中状态 ClearIsCheckeFlg(); currentChannelIsChecked = true; // 切换选项卡 SwitchTab(); } } #endregion #region 台面示教 private void btnSetLattice_Click(object sender, RoutedEventArgs e) { if (!currentLatticeIsChecked) { // 清除选项卡选中状态 ClearIsCheckeFlg(); currentLatticeIsChecked = true; // 切换选项卡 SwitchTab(); } } #endregion #region 灯光设置 private void btnSetLed_Click(object sender, RoutedEventArgs e) { if (!currentLedIsChecked) { // 清除选项卡选中状态 ClearIsCheckeFlg(); currentLedIsChecked = true; // 切换选项卡 SwitchTab(); } } #region UV /// /// 开启UV /// /// /// private void radioBtnUVStart_Checked(object sender, RoutedEventArgs e) { try { // 开启UV DoUV(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } /// /// 关闭UV /// /// /// private void radioBtnUVEnd_Checked(object sender, RoutedEventArgs e) { try { // 关闭UV DoUV(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } /// /// 开启、关闭UV /// private void DoUV() { if (!isInit) { return; } int onOffStatus = radioBtnUVStart.IsChecked == true ? EnumManagement.GetEnumValue(DeviceStateModeEnum.TurnOn) : EnumManagement.GetEnumValue(DeviceStateModeEnum.TurnOff); HxResult ret = MethodAction.Instance.SterilizingLamp(onOffStatus); if (ret.Result == ResultType.Success) { LoggerHelper.InfoLog("[DoUV]:操作UV成功"); // 紫外灯与LED灯互斥 if (onOffStatus == EnumManagement.GetEnumValue(DeviceStateModeEnum.TurnOn)) { ret = MethodAction.Instance.Floodlight(EnumManagement.GetEnumValue(DeviceStateModeEnum.TurnOff)); LoggerHelper.InfoLog(string.Format("[DoUV]:UV打开,LED关闭 status = {0}", ret.Result.ToString())); // LED if (ret.Result == ResultType.Success) { radioBtnLedEnd.IsChecked = true; } } } else { LoggerHelper.ErrorLog("[DoUV]:操作UV失败,信息:" + ret.AlarmInfo.ToString()); } } #endregion #region HEPA /// /// 开启HEPA /// /// /// private void radioBtnHEPAStart_Checked(object sender, RoutedEventArgs e) { try { // 开启HEPA DoHEPA(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } /// /// 关闭HEPA /// /// /// private void radioBtnHEPAEnd_Checked(object sender, RoutedEventArgs e) { try { // 关闭HEPA DoHEPA(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } /// /// 开启、关闭HEPA /// private void DoHEPA() { if (!isInit) { return; } int onOffStatus = radioBtnHEPAStart.IsChecked == true ? EnumManagement.GetEnumValue(DeviceStateModeEnum.TurnOn) : EnumManagement.GetEnumValue(DeviceStateModeEnum.TurnOff); HxResult ret = MethodAction.Instance.FFU(onOffStatus); if (ret.Result == ResultType.Success) { LoggerHelper.InfoLog("[DoHEPA]:操作HEPA成功"); } else { LoggerHelper.ErrorLog("[DoHEPA]:操作HEPA失败,信息:" + ret.AlarmInfo.ToString()); } } #endregion #region LED /// /// 开启LED /// /// /// private void radioBtnLedStart_Checked(object sender, RoutedEventArgs e) { try { // 开启LED DoLed(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } /// /// 关闭LED /// /// /// private void radioBtnLedEnd_Checked(object sender, RoutedEventArgs e) { try { // 关闭LED DoLed(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } /// /// 开启、关闭LED /// private void DoLed() { if (!isInit) { return; } int onOffStatus = radioBtnLedStart.IsChecked == true ? EnumManagement.GetEnumValue(DeviceStateModeEnum.TurnOn) : EnumManagement.GetEnumValue(DeviceStateModeEnum.TurnOff); HxResult ret = MethodAction.Instance.Floodlight(onOffStatus); if (ret.Result == ResultType.Success) { LoggerHelper.InfoLog("[DoLed]:操作LED成功"); // 紫外灯与LED灯互斥 if (onOffStatus == EnumManagement.GetEnumValue(DeviceStateModeEnum.TurnOn)) { ret = MethodAction.Instance.SterilizingLamp(EnumManagement.GetEnumValue(DeviceStateModeEnum.TurnOff)); LoggerHelper.InfoLog(string.Format("[DoLed]:LED打开,UV关闭 status = {0}", ret.Result.ToString())); // UV if (ret.Result == ResultType.Success) { radioBtnUVEnd.IsChecked = true; } } } else { LoggerHelper.ErrorLog("[DoLed]:操作LED失败,信息:" + ret.AlarmInfo.ToString()); } } #endregion #endregion #region 板架设置 #region 板架选项卡点击事件 /// /// 板架选项卡点击事件 /// private void btnSetRack_Click(object sender, RoutedEventArgs e) { if (!currentRackIsChecked) { // 清除选项卡选中状态 ClearIsCheckeFlg(); currentRackIsChecked = true; // 切换选项卡 SwitchTab(); } } #endregion #region 加载暂存架 /// /// 加载暂存架 /// private void LoadStack() { // 根据项目ID,获取暂存架详细List var racksetLayerList = RacksetLayerDB.GetList(Shared.SoftwareInformation.software_information_id); var rackConfigModel = RackConfigDB.GetInfo(Shared.SoftwareInformation.software_information_id); stackStackPanel.Children.Clear(); if (rackConfigModel != null) { for (int rackNumIndex = 1; rackNumIndex <= rackConfigModel.rack_num; rackNumIndex++) { var sel = racksetLayerList.Where(it => it.rack_num == rackNumIndex); if (sel.Any()) { List racksetLayerListByRackNum = sel.Reverse().ToList(); RackColumnItem stackColumnItem = new RackColumnItem(racksetLayerListByRackNum); stackColumnItem.RackNum = rackNumIndex; stackColumnItem.Margin = new Thickness(0, 10, 10, 0); stackColumnItem.ReLoadRackEventForColumnItem -= ReLoadRackInfoEvent; stackColumnItem.ReLoadRackEventForColumnItem += ReLoadRackInfoEvent; stackStackPanel.Children.Add(stackColumnItem); } } } } #endregion #region 启用暂存架 /// /// 启用暂存架 /// /// /// private void cBoxEnableRack_Click(object sender, RoutedEventArgs e) { try { bool isEnable = (bool)cBoxEnableRack.IsChecked; numRackNum.IsEnabled = isEnable; numLayerNum.IsEnabled = isEnable; } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } #endregion #region 确定 /// /// 确定 /// /// /// private void btnSetRackOk_Click(object sender, RoutedEventArgs e) { try { PlsToolTipWin plsToolTipWin = new PlsToolTipWin("继续操作会清除暂存架的相关信息,确定要更新吗?"); plsToolTipWin.ShowDialog(); if (plsToolTipWin.DialogResult != true) { return; } bool isChecked = (bool)cBoxEnableRack.IsChecked; // 更新系统配置表 Shared.SoftwareInformation.is_enable_rack = isChecked ? EnumManagement.GetEnumValue(isEnableRackEnum.Yes) : EnumManagement.GetEnumValue(isEnableRackEnum.No); SoftwareInformationDB.Update(Shared.SoftwareInformation); // 删除本项目的所有暂存架信息 RacksetLayerDB.DelBySoftwareInformationId(Shared.SoftwareInformation.software_information_id); PositionDB.DelBySoftwareInformationId(Shared.SoftwareInformation.software_information_id, EnumManagement.GetEnumValue(PositonTypeEnum.Rack)); #region 更新暂存架配置信息 int rackNum = int.Parse(numRackNum.Value.ToString()); int layerNum = int.Parse(numLayerNum.Value.ToString()); var rackConfigModel = RackConfigDB.GetInfo(Shared.SoftwareInformation.software_information_id); if (rackConfigModel != null) { rackConfigModel.rack_num = rackNum; rackConfigModel.rack_layer = layerNum; rackConfigModel.modify_name = Shared.User.username; rackConfigModel.modify_time = DateTime.Now; RackConfigDB.Update(rackConfigModel); } else { rackConfigModel = new RackConfigModel(); rackConfigModel.id = Guid.NewGuid().ToString(); rackConfigModel.rack_num = rackNum; rackConfigModel.rack_layer = layerNum; rackConfigModel.software_information_id = Shared.SoftwareInformation.software_information_id; rackConfigModel.creat_name = Shared.User.username; rackConfigModel.create_time = DateTime.Now; RackConfigDB.Add(rackConfigModel); } #endregion #region 生成暂存架详细 List lstRacksetLayer = new List(); List lstPosition = new List(); for (int rackNumIndex = 1; rackNumIndex <= rackNum; rackNumIndex++) { for (int layerNumIndex = 1; layerNumIndex <= layerNum; layerNumIndex++) { RacksetLayerModel racksetLayer = new RacksetLayerModel(); racksetLayer.id = Guid.NewGuid().ToString(); racksetLayer.labware_id = string.Empty; racksetLayer.is_has_labware = EnumManagement.GetEnumValue(IsHasLabwareEnum.No); racksetLayer.rack_name = racksetLayer.point_name = string.Format("R{0}-{1}", rackNumIndex, layerNumIndex); racksetLayer.rack_num = rackNumIndex; racksetLayer.rack_layer = layerNumIndex; racksetLayer.creat_name = Shared.User.username; racksetLayer.create_time = DateTime.Now; racksetLayer.software_information_id = Shared.SoftwareInformation.software_information_id; lstRacksetLayer.Add(racksetLayer); #region 点位 { PositionModel positionModel = new PositionModel(); positionModel.id = Guid.NewGuid().ToString(); positionModel.type = EnumManagement.GetEnumValue(PositonTypeEnum.Rack); positionModel.name = racksetLayer.point_name; positionModel.relation_Id = racksetLayer.id; positionModel.software_information_id = Shared.SoftwareInformation.software_information_id; positionModel.creat_name = Shared.User.username; positionModel.create_time = DateTime.Now; lstPosition.Add(positionModel); } #endregion } } RacksetLayerDB.AddList(lstRacksetLayer); PositionDB.AddList(lstPosition); #endregion // 加载暂存架 LoadStack(); ShowTip.ShowNotice("保存成功", InfoType.Success); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } #endregion #region 重新加载暂存架板位信息事件 /// /// 重新加载暂存架板位信息事件 /// /// /// private void ReLoadRackInfoEvent(object sender, EventArgs e) { try { // 加载暂存架 LoadStack(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } #endregion #endregion #region 其他设置 /// /// 其他设置 /// /// /// private void btnSetOther_Click(object sender, RoutedEventArgs e) { if (!currentOtherIsChecked) { // 清除选项卡选中状态 ClearIsCheckeFlg(); currentOtherIsChecked = true; // 切换选项卡 SwitchTab(); } } /// /// 速度滑块滑动事件 /// /// /// private void sldSystemTuneVal_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { try { if (txtSystemSpeedVal != null) { txtSystemSpeedVal.Text = sldSystemTuneVal.Value.ToString(); if (MethodAction.Instance != null) { Shared.SoftwareInformation.global_speed = MethodAction.Instance.GlobalSpeed = (float)Convert.ToDouble(txtSystemSpeedVal.Text); SoftwareInformationDB.UpdateSpeed(Shared.SoftwareInformation); } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } /// /// 速度滑块MouseUp事件 /// /// /// private void sldSystemTuneVal_MouseUp(object sender, MouseButtonEventArgs e) { if (txtSystemSpeedVal != null) { //txtSystemSpeedVal.Text = sldSystemTuneVal.Value.ToString(); if (MethodAction.Instance != null) { MethodAction.Instance.GlobalSpeed = (float)Convert.ToDouble(txtSystemSpeedVal.Text); } } } #endregion #region 关闭窗口 private void btnClose_Click(object sender, RoutedEventArgs e) { if (heartConnectTimer != null) { heartConnectTimer.Dispose(); } this.Close(); } #endregion #region 操作选项卡 /// /// 清除选项卡选中状态 /// private void ClearIsCheckeFlg() { currentChannelIsChecked = false; currentLedIsChecked = false; currentLatticeIsChecked = false; currentRackIsChecked = false; currentOtherIsChecked = false; } /// /// 切换选项卡 /// private void SwitchTab() { SolidColorBrush activeBrush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(255, 74, 186, 249)); SolidColorBrush noActiveBrush = Brushes.Black; gdSetChannelContent.Visibility = System.Windows.Visibility.Hidden; gdSetLatticeContent.Visibility = System.Windows.Visibility.Hidden; gdSetLedContent.Visibility = System.Windows.Visibility.Hidden; gdSetRackContent.Visibility = System.Windows.Visibility.Hidden; gdSetOtherContent.Visibility = System.Windows.Visibility.Hidden; btnSetLed.Foreground = noActiveBrush; btnSetLed.BorderThickness = new Thickness(0, 0, 0, 0); btnSetRack.Foreground = noActiveBrush; btnSetRack.BorderThickness = new Thickness(0, 0, 0, 0); btnSetChannel.Foreground = noActiveBrush; btnSetChannel.BorderThickness = new Thickness(0, 0, 0, 0); btnSetOther.Foreground = noActiveBrush; btnSetOther.BorderThickness = new Thickness(0, 0, 0, 0); if (currentLedIsChecked) { btnSetLed.Foreground = (Brush)activeBrush; btnSetLed.BorderThickness = new Thickness(0, 0, 0, 3); gdSetLedContent.Visibility = Visibility.Visible; } else if (currentRackIsChecked) { btnSetRack.Foreground = (Brush)activeBrush; btnSetRack.BorderThickness = new Thickness(0, 0, 0, 3); gdSetRackContent.Visibility = Visibility.Visible; } else if(currentChannelIsChecked) { btnSetChannel.Foreground = (Brush)activeBrush; btnSetChannel.BorderThickness = new Thickness(0, 0, 0, 3); gdSetChannelContent.Visibility = Visibility.Visible; } else if (currentOtherIsChecked) { btnSetOther.Foreground = (Brush)activeBrush; btnSetOther.BorderThickness = new Thickness(0, 0, 0, 3); gdSetOtherContent.Visibility = Visibility.Visible; } } #endregion #region 拖动窗体 /// /// 拖动窗体 /// /// /// private void Grid_MouseDown(object sender, MouseButtonEventArgs e) { try { if (e.ChangedButton == MouseButton.Left) { this.DragMove(); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } #endregion #region ESC关闭画面 /// /// ESC关闭画面 /// /// /// private void Window_PreviewKeyDown(object sender, KeyEventArgs e) { try { if (e.Key == Key.Escape) { this.Close(); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } #endregion private void btnLoadImage_Click(object sender, RoutedEventArgs e) { try { RunWnd.currentIsUsedWellLattice.Clear(); string directoryBase = System.AppDomain.CurrentDomain.BaseDirectory; string xmlFilePath = directoryBase + "Config\\" + "CurrentUsedTips.xml"; if (File.Exists(xmlFilePath)) { File.Delete(xmlFilePath); } //循环所有现有方法下的Tip头,然后回复原状 string shortDir = "method"; string fullName = ConfigurationManager.AppSettings["MethodFileBasePath"].ToString();//AppDomain.CurrentDomain.BaseDirectory + shortDir; if (Directory.Exists(fullName)) { string[] fileNameList = Directory.GetFiles(fullName); foreach (string fileName in fileNameList) { string suffix = fileName.Substring(fileName.LastIndexOf('.') + 1, (fileName.Length - fileName.LastIndexOf('.') - 1)); if (suffix == "xmed") { XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(fileName); //XmlNodeList xnlist = xmldoc.SelectNodes("root/env/platform"); //if (xnlist != null) //{ // foreach (XmlNode xn in xnlist) // { // var n = xn.SelectSingleNode("labware_id").InnerText; // //查询出是Tip头类型,则重置 // Labware labware = LabwareDB.GetLabware(n); // if (labware.labware_type_id == "6") // { // xn.SelectSingleNode("allValidWells").InnerText = "A1,B1,C1,D1,E1,F1,G1,H1,A2,B2,C2,D2,E2,F2,G2,H2,A3,B3,C3,D3,E3,F3,G3,H3,A4,B4,C4,D4,E4,F4,G4,H4,A5,B5,C5,D5,E5,F5,G5,H5,A6,B6,C6,D6,E6,F6,G6,H6,A7,B7,C7,D7,E7,F7,G7,H7,A8,B8,C8,D8,E8,F8,G8,H8,A9,B9,C9,D9,E9,F9,G9,H9,A10,B10,C10,D10,E10,F10,G10,H10,A11,B11,C11,D11,E11,F11,G11,H11,A12,B12,C12,D12,E12,F12,G12,H12"; // } // } //} var platformNodeList = xmldoc.SelectSingleNode("root/env").SelectNodes("platform"); // wellstip恢复, 本方法重新执行 foreach (XmlNode platformNodeItem in platformNodeList) { string latticeId = platformNodeItem.SelectSingleNode("lattice_id").InnerText; XmlNodeList labwareNode = platformNodeItem.SelectNodes("labware"); int countOfLabware = labwareNode.Count; if (countOfLabware == 0) { continue; } string labwareId = string.Empty; string latticeNum = string.Empty; var labwareXml = platformNodeItem.SelectSingleNode("labware[@id=" + (countOfLabware).ToString() + "]"); if (labwareXml != null) { labwareId = labwareXml.SelectSingleNode("labware_id").InnerText; latticeNum = labwareXml.SelectSingleNode("labware_sname").InnerText; if (labwareId == null || labwareId.Equals("")) { continue; } } else { continue; } Labware labWare = LabwareDB.GetLabware(labwareId); // 全清除 { if (labWare.labware_type_id != EnumManagement.GetEnumValue(ConsumableTypeEnum.TipsBox).ToString()) // 吸头盒 { continue; } latticeId = ControlCom.GetLatticeId(Convert.ToInt32(latticeId)).ToString(); //查找出此设备所有枪对应的板位id int armCount = Shared.DeviceArmList.Where(x => x.arm_type.Equals(1)).ToList().Count; List deviceArms = Shared.DeviceArmList.Where(x => x.arm_type.Equals(1)).ToList(); string[] strPos = new string[armCount]; string baseLatticeId = latticeId; for (int i = 0; i < armCount; i++) { TabletopTemplate tabletopTemplate = TabletopTemplateDB.GetCurrentAppTabletopTemplateCollectionFromdb(); //增加台面模板判断 if (tabletopTemplate == null) { latticeId = ControlCom.GetLatticeId(Convert.ToInt32(baseLatticeId)).ToString(); } else { string latticeNumber = "P" + baseLatticeId; latticeId = LatticeDB.GetLatticeDataByLatticeNumAndTempIdFromdb(latticeNumber, Convert.ToInt32(deviceArms[i].device_arm_id), Shared.SoftwareInformation.software_device_number, tabletopTemplate.tabletopid).lattice_id; } var selUsedWellLattice = RunWnd.currentIsUsedWellLattice.Where(x => x.dropdown_id.Equals(latticeId)); if (selUsedWellLattice.Any()) { List usedWellLatticeList = selUsedWellLattice.ToList(); // 清除当前被使用过的板位和孔对象 foreach (var selUsedWellLatticeItem in usedWellLatticeList) { RunWnd.currentIsUsedWellLattice.Remove(selUsedWellLatticeItem); } } } // 设置有效孔位 string validWells = ComUtility.GetValidWells((int)labWare.number_row, (int)labWare.number_column); labwareXml.SelectSingleNode("allValidWells").InnerText = labwareXml.SelectSingleNode("residueValidWells").InnerText = validWells; } } xmldoc.Save(fileName); } } } PlsToolTipWin plsToolTipWin = new PlsToolTipWin("清除成功!"); plsToolTipWin.WindowStartupLocation = WindowStartupLocation.CenterScreen; plsToolTipWin.Height = 450; plsToolTipWin.Width = 600; plsToolTipWin.btnCancel.Visibility = Visibility.Hidden; SolidColorBrush mybtn1_Brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(0, 0, 0, 0)); plsToolTipWin.Background = (System.Windows.Media.Brush)mybtn1_Brush; plsToolTipWin.ShowDialog(); } catch (Exception ex) { LoggerHelper.ErrorLog("错误:" + ex.Message.ToString()); } } #region 设置可用通道 private void tipsChannel_SelectedChangedEvent(object sender, EventArgs e) { } #endregion #region 观察者模式更新所有应用的通道设置 // 观察者模式更新所有应用的通道设置 public List observers = new List(); public void AddObserver(IDeviceArmObserver ob) { observers.Add(ob); } public void RemoveObserver(IDeviceArmObserver ob) { observers.Remove(ob); } public void Update() { // 遍历订阅者列表进行通知 foreach (IDeviceArmObserver ob in observers) { if (ob != null) { ob.ReceiveAndUpdate(); } } } #endregion private void tipsChannelDisOne_SelectedChangedEvent(object sender, EventArgs e) { //跟新通道进入数据库 int[] Channels = tipsChannelDisOne.SelectedChannels.ToArray(); string strChannel = String.Empty; for (int i = 0; i < Channels.Length; i++) { strChannel += Channels[i].ToString() + ","; } if (strChannel != String.Empty) { strChannel = strChannel.Substring(0, strChannel.Length - 1); } DeviceArm deviceArm = (DeviceArm)tipsChannelDisOne.Tag;//Shared.DeviceArmList.SingleOrDefault(x => x.software_information_id.Equals(Shared.SoftwareInformation.software_information_id) && x.arm_type.Equals(1)); deviceArm.device_arm_property = strChannel; DeviceArmDB.UpdateDeviceIntodb(deviceArm); //跟新已经编辑的流程命令方法中的通道 Update(); } private void tipsChannelDisTwo_SelectedChangedEvent(object sender, EventArgs e) { //跟新通道进入数据库 int[] Channels = tipsChannelDisTwo.SelectedChannels.ToArray(); string strChannel = String.Empty; for (int i = 0; i < Channels.Length; i++) { strChannel += Channels[i].ToString() + ","; } if (strChannel != String.Empty) { strChannel = strChannel.Substring(0, strChannel.Length - 1); } DeviceArm deviceArm = (DeviceArm)tipsChannelDisTwo.Tag;//= Shared.DeviceArmList.SingleOrDefault(x => x.software_information_id.Equals(Shared.SoftwareInformation.software_information_id) && x.arm_type.Equals(1)); deviceArm.device_arm_property = strChannel; DeviceArmDB.UpdateDeviceIntodb(deviceArm); //跟新已经编辑的流程命令方法中的通道 Update(); } private void tipsChannelDisThree_SelectedChangedEvent(object sender, EventArgs e) { //跟新通道进入数据库 int[] Channels = tipsChannelDisThree.SelectedChannels.ToArray(); string strChannel = String.Empty; for (int i = 0; i < Channels.Length; i++) { strChannel += Channels[i].ToString() + ","; } if (strChannel != String.Empty) { strChannel = strChannel.Substring(0, strChannel.Length - 1); } DeviceArm deviceArm=(DeviceArm)tipsChannelDisTwo.Tag;//= Shared.DeviceArmList.SingleOrDefault(x => x.software_information_id.Equals(Shared.SoftwareInformation.software_information_id) && x.arm_type.Equals(1)); deviceArm.device_arm_property = strChannel; DeviceArmDB.UpdateDeviceIntodb(deviceArm); //跟新已经编辑的流程命令方法中的通道 Update(); } #region 泵排液 bool isStartExecuteDispense = false; private async void btnDispense_Click(object sender, RoutedEventArgs e) { try { if (isStartExecuteDispense) { return; } AddLiquidMParamSH addLiquidMParamSH = new AddLiquidMParamSH(); addLiquidMParamSH.armId = Convert.ToInt32(Shared.DeviceArmList.FirstOrDefault(x => x.arm_type.Equals(2)).device_arm_id); List channelList = new List(); List channelVolumes = new List(); if ((bool)cbxPumpNumber1.IsChecked) { channelList.Add(1); channelVolumes.Add((float)Convert.ToDouble(txtVolume1.Text)); } if ((bool)cbxPumpNumber2.IsChecked) { channelList.Add(2); channelVolumes.Add((float)Convert.ToDouble(txtVolume2.Text)); } if ((bool)cbxPumpNumber3.IsChecked) { channelList.Add(3); channelVolumes.Add((float)Convert.ToDouble(txtVolume3.Text)); } if ((bool)cbxPumpNumber4.IsChecked) { channelList.Add(4); channelVolumes.Add((float)Convert.ToDouble(txtVolume4.Text)); } int[] channels = new int[channelList.Count]; float[] fVolumes = new float[channelList.Count]; float[] xVals = new float[channelList.Count]; float[] yVals = new float[channelList.Count]; addLiquidMParamSH.channelId = channels; addLiquidMParamSH.channelCount = channelList.Count; //查询当前的垃圾桶 List lattice = LatticeDB.GetTrashLatticeDataByIdFromdb(addLiquidMParamSH.armId.ToString(), Shared.SoftwareInformation.software_device_number); // 获取当前垃圾桶台面板位信息 for (int i = 0; i < channelList.Count; i++) { channels[i] = channelList[i]; fVolumes[i] = channelVolumes[i]; xVals[i] = (float)lattice[0].lattice_X + 60f; yVals[i] = (float)lattice[0].lattice_Y + 60f; } addLiquidMParamSH.volume = fVolumes; addLiquidMParamSH.xAxisVal = xVals; addLiquidMParamSH.yAxisVal = yVals; addLiquidMParamSH.zAxisVal = (float)lattice[0].lattice_Z - 50f; addLiquidMParamSH.speed = 1000; addLiquidMParamSH.addLiquidAfterDelay = 500; addLiquidMParamSH.basezAxisVal = 0; PumpDispenseBll pumpDispenseBll = new PumpDispenseBll(); HxResult ret = new HxResult(); PlsToolTipWin plsToolTipWin = null; if (MethodAction.Instance!=null&&!MethodAction.Instance.IsHome) { plsToolTipWin = new PlsToolTipWin(Properties.SettingsTextResource.strSystemHomeTipInfo); plsToolTipWin.btnCancel.Visibility = Visibility.Hidden; plsToolTipWin.ShowDialog(); return; } Mouse.OverrideCursor = Cursors.Wait; Task task = new Task(() => { ret = pumpDispenseBll.ExecutePumpDispense(addLiquidMParamSH, false); }); task.Start(); task.Wait(); string strMsg = string.Empty; if (ret.Result != ResultType.Success) { if (Shared.SoftwareInformation.currentculture.Equals("zh-CN")) { LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【泵排出空气】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunDispenseResource.strDispenseFail.ToString() + ret.AlarmInfo + " 在垃圾桶板位"); strMsg = "【泵排出空气】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunDispenseResource.strDispenseFail.ToString() + ret.AlarmInfo + " 在垃圾桶板位"; } else { LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【泵排出空气】progress: dispense of pump was failed on trash bin lattice! Error info:" + ret.AlarmInfo); strMsg = "【泵排出空气】progress: dispense of pump was failed on trash bin lattice! Error info:" + ret.AlarmInfo; } } else { if (Shared.SoftwareInformation.currentculture.Equals("zh-CN")) { LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【泵排出空气】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunDispenseResource.strDispenseSuccess.ToString() + "在垃圾桶板位"); strMsg = "【泵排出空气】" + Properties.MachineRunResource.strProgress.ToString() + Properties.RunDispenseResource.strDispenseSuccess.ToString() + "在垃圾桶板位"; } else { LoggerRunHelper.InfoLog("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【泵排出空气】progress:dispense of pump was successful on trash bin lattice!"); strMsg = "【泵排出空气】progress:dispense of pump was successful on trash bin lattice!"; } } Mouse.OverrideCursor = Cursors.Arrow; //System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => //{ plsToolTipWin = new PlsToolTipWin(strMsg); plsToolTipWin.btnCancel.Visibility = Visibility.Hidden; isStartExecuteDispense = true; plsToolTipWin.ShowDialog(); //})); Mouse.OverrideCursor = Cursors.Arrow; } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } finally { isStartExecuteDispense = false; Mouse.OverrideCursor = Cursors.Arrow; } } #endregion private void txtVolume1_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) { } private void txtVolume2_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) { } private void txtVolume3_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) { } private void txtVolume4_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) { } } public class VolumeVal { public float Volume1 { get; set; } public float Volume2 { get; set; } public float Volume3 { get; set; } public float Volume4 { get; set; } } }