using DataEntity.Share; using DataRWDAL; using HandyControl.Data; using Microsoft.Win32; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.IO; using System.Linq; using System.Runtime.Remoting.Channels; using System.Text; using System.Text.RegularExpressions; 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.Log; using XCommon.Tip; using XCore; using XHandler.Class; using XHandler.Class.DataEx; using XImagingXhandler.XDAL; namespace XHandler.View.MethodProperty.ElectroPart { /// /// FileElectroProperty.xaml 的交互逻辑 /// public partial class FileElectroProperty : UserControl,IMethodProperty { TransferFileBll transferFileBll = new TransferFileBll(); public MethodElectroFile methodElectroFile { get; set; } public MethodElectroFile currmethodElectroFile = null; public MethodEx method = null; private Labware selectedLabware = null; private int curArmSelectedIndex = -1; #region 全局变量 string isrun = ""; string status = ""; string name = ""; string label = ""; string armText = ""; string armValue = ""; string labwaretipText = ""; string labwaretipValue = ""; int[] channels = new int[0] { }; string filePath = ""; int beginLine = 0; DataTable transferDataTable = new DataTable(); string sourceLabware = ""; string sourceWell = ""; string destinationLabware = ""; string destinationWell = ""; string destVolume = ""; string tipSet = ""; int changeTipsMode = 0; string changeToTipText = ""; int changeToTipValue = 0; string liquididText = ""; string liquididValue = ""; string liquidrangeidText = ""; string liquidrangeidValue = ""; string liquidpidText = ""; string liquidpidValue = ""; int mark = 0; #endregion public FileElectroProperty() { InitializeComponent(); } public FileElectroProperty(MethodEx method) { InitializeComponent(); mark = 0; methodElectroFile = new MethodElectroFile(); methodElectroFile.label = method.method_name; methodElectroFile.name = method.method_name; methodElectroFile.status = (method.isEnabled == true ? "enable" : "disable"); ObservableCollection liquidTypeList = DataModule.getInstance().GetLiquidTypes(); cbLiquidType.ItemsSource = liquidTypeList; cbLiquidType.SelectedIndex = 0; ObservableCollection tipsList = DataRWDAL.LabwareDB.GetTipLabwareFromdb(); cbTipsType.ItemsSource = tipsList; cbTipsType.SelectedIndex = 0; ObservableCollection liquidRangeList = DataModule.getInstance().GetLiquidRanges(); cbLiquidRange.ItemsSource = liquidRangeList; //cbTipsType.ItemsSource = liquidRangeList; cbLiquidRange.SelectedIndex = 0; List armList = DataModule.getInstance().GetDeviceArm(); cbArm.ItemsSource = armList; if (armList.Count == 2) //只有一个臂的情况下默认选中该臂 curArmSelectedIndex = 1; else curArmSelectedIndex = 0; tbxCommandLabel.Text = method.method_name; radioBtnNotChange.IsChecked = true; methodElectroFile.strIndex = method.strIndex; this.method = method; if (method.tag != null) { methodElectroFile = (MethodElectroFile)method.tag; currmethodElectroFile = methodElectroFile; isrun = methodElectroFile.isrun; status = methodElectroFile.status; name = methodElectroFile.name; label = methodElectroFile.label; armText = methodElectroFile.armText; armValue = methodElectroFile.armValue; labwaretipText = methodElectroFile.labwaretipText; labwaretipValue = methodElectroFile.labwaretipValue; channels = methodElectroFile.channels; filePath = methodElectroFile.filePath; beginLine = methodElectroFile.beginLine; transferDataTable = methodElectroFile.transferDataTable; sourceLabware = methodElectroFile.sourceLabware; sourceWell = methodElectroFile.sourceWell; destinationLabware = methodElectroFile.destinationLabware; destinationWell = methodElectroFile.destinationWell; destVolume = methodElectroFile.destVolume; tipSet = methodElectroFile.tipSet; changeTipsMode = methodElectroFile.changeTipsMode; changeToTipText = methodElectroFile.changeToTipText; changeToTipValue = methodElectroFile.changeToTipValue; liquididText = methodElectroFile.liquididText; liquididValue = methodElectroFile.liquididValue; liquidrangeidText = methodElectroFile.liquidrangeidText; liquidrangeidValue = methodElectroFile.liquidrangeidValue; liquidpidText = methodElectroFile.liquidpidText; liquidpidValue = methodElectroFile.liquidpidValue; } this.DataContext = methodElectroFile; } /// /// 页面加载完成后处理事件 /// /// /// private void UserControl_Loaded(object sender, RoutedEventArgs e) { mark += 1; try { if (mark > 1) { return; } int[] ichs = channels; if (!string.IsNullOrEmpty(armText)) { tbxCommandName.Text = name; cbArm.SelectedValue = armValue; DeviceArm arm = cbArm.SelectedItem as DeviceArm; tbxHeadType.Text = arm.head_type; //tbSelectTable.Tag = labwaretipValue; //tbSelectTable.Text = labwaretipText; tbxbeginLine.Text = beginLine.ToString(); cbTipsType.SelectedValue = labwaretipValue; cbLiquidType.SelectedValue = liquididValue; cbLiquidRange.SelectedValue = liquidrangeidValue; cbLiquid.SelectedValue = liquidpidValue; dgTransferFileData.ItemsSource = transferDataTable.DefaultView; tbExcelFile.Text = filePath; //更新所有下拉列表 List transferFileHeaders = transferFileBll.GetTransferFileHeaders(transferDataTable); cbSourceBoard.ItemsSource = transferFileHeaders; cbSourceWell.ItemsSource = transferFileHeaders; cbTargetBoard.ItemsSource = transferFileHeaders; cbTargetWell.ItemsSource = transferFileHeaders; cbVolumn.ItemsSource = transferFileHeaders; cbChangeTip.ItemsSource = transferFileHeaders; //cbVolumn.ItemsSource = transferFileHeaders; //if (methodTransferFile.transferDataTable.Columns.Count >= 5) //{ cbSourceBoard.Text = sourceLabware; cbSourceWell.Text = sourceWell; cbTargetBoard.SelectedValue = destinationLabware; cbTargetWell.Text = destinationWell; cbVolumn.Text = destVolume.ToString(); //cbTipsType.Text = tipSet; cbChangeTip.Text = tipSet; if (changeTipsMode == 0) { radioBtnNotChange.IsChecked = true; } else if (changeTipsMode == 1) { radioBtnChangeByFile.IsChecked = true; } else if (changeTipsMode == 2) { radioBtnOperation.IsChecked = true; } if (currmethodElectroFile != null) { methodElectroFile = currmethodElectroFile; } } else { cbArm.SelectedIndex = curArmSelectedIndex; if (cbArm.Items.Count > 1) { cbArm.SelectedIndex = 1; } DeviceArm arm = cbArm.SelectedItem as DeviceArm; tbxHeadType.Text = arm.head_type; cbLiquidType.SelectedIndex = 0; if (currmethodElectroFile != null) { methodElectroFile = currmethodElectroFile; } } //ReceiveAndUpdate(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } /// /// 实现设置台面选中的耗材 /// /// /// public void SetTableName(string tableName, Labware lb) { if (lb == null) return; if (string.IsNullOrEmpty(lb.labware_id)) return; if (string.IsNullOrEmpty(methodElectroFile.armValue)) { MessageBox.Show(Properties.Resources.msgPlsSelectArm, "Tips"); return; } selectedLabware = lb; List latticeList = DataRWDAL.LatticeDB.GetLatticeDataFromdb(Shared.SoftwareInformation.software_device_number, Convert.ToInt32(methodElectroFile.armValue)); Lattice lattice = latticeList.Find(s => s.lattice_num == tableName); if (lattice == null) { LoggerHelper.InfoLog("Error: Can't find lattice with lattice_num=" + tableName); return; } if (methodElectroFile != null) { methodElectroFile.labwaretipText = lb.labware_name; methodElectroFile.labwaretipValue = lb.labware_id; } //tbSelectTable.Tag = lb.labware_id; //tbSelectTable.Text = lb.labware_name; } private void tbxCommandName_TextChanged(object sender, TextChangedEventArgs e) { try { if (string.IsNullOrEmpty(tbxCommandName.Text)) { cnError.Text = "命令名称不能为空"; return; } if (methodElectroFile != null) { methodElectroFile.name = tbxCommandName.Text; } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void tbExcelFile_PreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) { if (!string.IsNullOrEmpty(tbExcelFile.Text.Trim())) { if (System.IO.Path.HasExtension(tbExcelFile.Text.Trim())) { if (System.IO.File.Exists(tbExcelFile.Text.Trim())) { SelectFile(tbExcelFile.Text.Trim()); } } } } } private void SelectFile(string file) { string ext = System.IO.Path.GetExtension(file); DataTable transferData = null; if (string.Compare(ext, ".csv", true) == 0) transferData = ExcelAndCsvHelper.GetDataTableFromCsvFile(file); else transferData = ExcelAndCsvHelper.GetDataTableFromExcelFile(file, true); if (transferData != null) { if (methodElectroFile != null) { methodElectroFile.transferDataTable = transferData; } dgTransferFileData.ItemsSource = transferData.DefaultView; List transferFileHeaders = transferFileBll.GetTransferFileHeaders(transferData); cbSourceBoard.ItemsSource = transferFileHeaders; cbSourceWell.ItemsSource = transferFileHeaders; cbTargetBoard.ItemsSource = transferFileHeaders; cbTargetWell.ItemsSource = transferFileHeaders; cbVolumn.ItemsSource = transferFileHeaders; cbChangeTip.ItemsSource = transferFileHeaders; cbSourceBoard.SelectedIndex = 1; cbSourceWell.SelectedIndex = 2; cbTargetBoard.SelectedIndex = 3; cbTargetWell.SelectedIndex = 4; cbVolumn.SelectedIndex = 5; cbChangeTip.SelectedIndex = 6; } } private void btnSelectFile_Click(object sender, RoutedEventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); dlg.Title = "请选择Excel文件"; dlg.FileName = string.Empty; dlg.FilterIndex = 1; dlg.Filter = "excel files(*.xls)|*.xls|csv files(*.csv)|*.csv|All files(*.*)|*.*"; dlg.Multiselect = false; if (!string.IsNullOrEmpty(tbExcelFile.Text.Trim())) { try { if (System.IO.Path.HasExtension(tbExcelFile.Text.Trim())) dlg.InitialDirectory = System.IO.Path.GetDirectoryName(tbExcelFile.Text.Trim()); else dlg.InitialDirectory = tbExcelFile.Text.Trim(); } catch (Exception ex) { } } if (dlg.ShowDialog() == true) { string fullPath = dlg.FileName; if (methodElectroFile != null) { methodElectroFile.filePath = fullPath; } tbExcelFile.Text = fullPath; SelectFile(fullPath); } ((MainWindow)Application.Current.MainWindow).testDesign.IsIgnore = true; //防止影响到主界面流程中已拖放的单命令顺序 } private void tbxbeginLine_TextChanged(object sender, TextChangedEventArgs e) { try { if (methodElectroFile != null) { methodElectroFile.beginLine = Convert.ToInt32(tbxbeginLine.Text); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void cbSourceBoard_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (cbSourceBoard.SelectedItem == null) return; TransferFileHeader transferFileHeader = cbSourceBoard.SelectedItem as TransferFileHeader; if (methodElectroFile != null) { methodElectroFile.sourceLabware = transferFileHeader.header_name.ToString(); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void cbSourceWell_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (cbSourceWell.SelectedItem == null) return; TransferFileHeader transferFileHeader = cbSourceWell.SelectedItem as TransferFileHeader; if (methodElectroFile != null) { methodElectroFile.sourceWell = transferFileHeader.header_name; } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void cbTargetBoard_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (cbTargetBoard.SelectedItem == null) return; TransferFileHeader transferFileHeader = cbTargetBoard.SelectedItem as TransferFileHeader; if (methodElectroFile != null) { methodElectroFile.destinationLabware = transferFileHeader.header_name; } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void cbTargetWell_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (cbTargetWell.SelectedItem == null) return; TransferFileHeader transferFileHeader = cbTargetWell.SelectedItem as TransferFileHeader; if (methodElectroFile != null) { methodElectroFile.destinationWell = transferFileHeader.header_name; } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void cbVolumn_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (cbVolumn.SelectedItem == null) return; TransferFileHeader transferFileHeader = cbVolumn.SelectedItem as TransferFileHeader; if (methodElectroFile != null) { methodElectroFile.destVolume = transferFileHeader.header_name; } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void btnNext_Click(object sender, RoutedEventArgs e) { stepBar.Next(); gridSelectFile.Visibility = Visibility.Collapsed; gridTipSetting.Visibility = Visibility.Visible; gridLiquidParam.Visibility = Visibility.Collapsed; scrollViewer.ScrollToTop(); } private void cbArm_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (cbArm.SelectedIndex < 0) { return; } curArmSelectedIndex = cbArm.SelectedIndex; string armName = ((DeviceArm)cbArm.SelectedItem).device_arm_name.ToString(); methodElectroFile.channels = Shared.ChannelsId; DeviceArm arm = cbArm.SelectedItem as DeviceArm; methodElectroFile.armText = arm.device_arm_name; methodElectroFile.armValue = arm.device_arm_id.ToString(); methodElectroFile.headType = arm.head_type; tbxHeadType.Text = arm.head_type.ToString(); if (arm.arm_type.Equals(0)) { gridTipSetting.RowDefinitions[1].Height = new GridLength(0); gridTipSetting.RowDefinitions[2].Height = new GridLength(0); return; } else { gridTipSetting.RowDefinitions[1].Height = new GridLength(40); gridTipSetting.RowDefinitions[2].Height = new GridLength(80); } if (cbArm.SelectedIndex != 1) { tipsChannel.Visibility = Visibility.Collapsed; } else { tipsChannel.SelectedChannels = Shared.ChannelsId.ToList(); tipsChannel.SetTotalChannelCount(Shared.ChannelCount); tipsChannel.SetSelectedChannels(); tipsChannel_SelectedChangedEvent(null, null); tipsChannel.Visibility = Visibility.Visible; } //ReceiveAndUpdate(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void tipsChannel_SelectedChangedEvent(object sender, EventArgs e) { methodElectroFile.channels = tipsChannel.SelectedChannels.ToArray(); } private void cbTipsType_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (methodElectroFile == null) return; if (cbTipsType.SelectedIndex < 0) return; //if (isConsumableUpdate) //{ // isConsumableUpdate = false; // return; //} Labware labware = cbTipsType.SelectedItem as Labware; methodElectroFile.labwaretipText = labware.labware_name; methodElectroFile.labwaretipValue = labware.labware_id.ToString(); } private void radioBtnNotChange_Checked(object sender, RoutedEventArgs e) { if (radioBtnNotChange.IsChecked == true) { if (methodElectroFile != null) { methodElectroFile.changeTipsMode = 0; } } } private void radioBtnChangeByFile_Checked(object sender, RoutedEventArgs e) { if (radioBtnChangeByFile.IsChecked == true) { if (methodElectroFile != null) { methodElectroFile.changeTipsMode = 1; } } } private void radioBtnOperation_Checked(object sender, RoutedEventArgs e) { if (radioBtnOperation.IsChecked == true) { if (methodElectroFile != null) { methodElectroFile.changeTipsMode = 2; } } } private void btnPrev_Click(object sender, RoutedEventArgs e) { stepBar.Prev(); gridSelectFile.Visibility = Visibility.Visible; gridTipSetting.Visibility = Visibility.Collapsed; gridLiquidParam.Visibility = Visibility.Collapsed; scrollViewer.ScrollToTop(); } private void btnNext1_Click(object sender, RoutedEventArgs e) { stepBar.Next(); gridSelectFile.Visibility = Visibility.Collapsed; gridTipSetting.Visibility = Visibility.Collapsed; gridLiquidParam.Visibility = Visibility.Visible; scrollViewer.ScrollToTop(); } private void cbLiquidType_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbLiquidType.SelectedIndex < 0) return; if (cbLiquidType.SelectedIndex == 0) { ObservableCollection liquids = new ObservableCollection(); Liquid liquid = new Liquid(); liquid.liquid_name = Properties.Resources.strPleaseSelect; liquids.Insert(0, liquid); cbLiquid.ItemsSource = liquids; cbLiquid.SelectedIndex = 0; return; } if (cbLiquidType.SelectedIndex != 0) { if (methodElectroFile != null) { methodElectroFile.liquididText = ((LiquidType)cbLiquidType.SelectedItem).liquid_type_name.ToString(); methodElectroFile.liquididValue = ((LiquidType)cbLiquidType.SelectedItem).liquid_type_id.ToString(); } } } private void cbLiquidRange_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbLiquidRange.SelectedIndex < 0) return; if (cbLiquidRange.SelectedIndex == 0) { ObservableCollection liquids = new ObservableCollection(); Liquid liquid = new Liquid(); liquid.liquid_name = Properties.Resources.strPleaseSelect; liquids.Insert(0, liquid); cbLiquid.ItemsSource = liquids; cbLiquid.SelectedIndex = 0; return; } if (cbLiquidType.SelectedIndex <= 0) return; string typeID = cbLiquidType.SelectedValue as string; string rangeID = cbLiquidRange.SelectedValue as string; string armID = cbArm.SelectedValue.ToString(); ObservableCollection liquidList = LiquidTypeRSRangeDB.GetLiquidFromdbByTypeAndRange(typeID, rangeID, armID); Liquid l = new Liquid(); l.liquid_name = Properties.Resources.strPleaseSelect; liquidList.Insert(0, l); if (cbLiquidRange.SelectedIndex != 0) { if (methodElectroFile != null) { methodElectroFile.liquidrangeidText = ((LiquidRange)cbLiquidRange.SelectedItem).liquid_range_name.ToString(); methodElectroFile.liquidrangeidValue = ((LiquidRange)cbLiquidRange.SelectedItem).liquid_range_id.ToString(); } } cbLiquid.ItemsSource = liquidList; cbLiquid.SelectedIndex = 0; } private void cbLiquid_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbLiquid.SelectedIndex <= 0) return; Liquid l = cbLiquid.SelectedItem as Liquid; if (methodElectroFile != null) { methodElectroFile.liquidpidText = l.liquid_name; methodElectroFile.liquidpidValue = l.liquid_id; } } private void btnPrev1_Click(object sender, RoutedEventArgs e) { if (stepBar.StepIndex > stepBar.Items.Count) { stepBar.Prev(); stepBar.Prev(); } else stepBar.Prev(); gridSelectFile.Visibility = Visibility.Collapsed; gridTipSetting.Visibility = Visibility.Visible; gridLiquidParam.Visibility = Visibility.Collapsed; scrollViewer.ScrollToTop(); } private void btnFinish_Click(object sender, RoutedEventArgs e) { stepBar.Next(); scrollViewer.ScrollToTop(); } private void btnDownloadTemplate_Click(object sender, RoutedEventArgs e) { //弹出保存对话框 try { string fileDir = string.Empty; SaveFileDialog dlg = new SaveFileDialog(); dlg.Title = "另存为"; dlg.FileName = $"{DateTime.Now.ToString("yyyyMMddHHmmss")}.csv"; // Default file name dlg.DefaultExt = ".xls"; // Default file extension dlg.Filter = "excel files(*.xls)|*.xls|csv files(*.csv)|*.csv";// Filter files by extension dlg.InitialDirectory = System.AppDomain.CurrentDomain.BaseDirectory; if (dlg.ShowDialog() == true) { string directoryBase = System.AppDomain.CurrentDomain.BaseDirectory; string sourceFilePath = directoryBase + "TempData\\movecutgumHX.csv"; File.Copy(sourceFilePath, dlg.FileName, true); ShowTip.ShowNotice(string.Format("{0}成功{1}{2}", "下载保存", Environment.NewLine, dlg.FileName), InfoType.Warning); } } catch (Exception ex) { ShowTip.ShowNotice(string.Format("{0}失败{1}{2}", "下载保存", Environment.NewLine, ""), InfoType.Warning); LoggerHelper.ErrorLog("btnDownloadTemplate_Click ERROR:", ex); } } private void cbChangeTip_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (cbChangeTip.SelectedIndex == -1) return; TransferFileHeader transferFileHeader = cbChangeTip.SelectedItem as TransferFileHeader; if (methodElectroFile != null) { methodElectroFile.tipSet = transferFileHeader.header_name.ToString(); } } catch (Exception ex) { LoggerHelper.ErrorLog("cbChangeTip_SelectionChanged ERROR:", ex); } } private void tbxCommandComment_TextChanged(object sender, TextChangedEventArgs e) { try { if (methodElectroFile != null) { if (this.method != null) { this.method.method_Tipcontent = tbxCommandComment.Text; } methodElectroFile.comment = tbxCommandComment.Text; } } catch (Exception ex) { LoggerHelper.ErrorLog("tbxCommandComment_TextChanged ERROR:", ex); } } } }