using DataEntity.Event;
using DataEntity.Share;
using DataEntity.Sockets.Base;
using DataRWDAL;
using DataRWDAL.Device;
using DriverLib.Engine;
using DriverLibrary;
using HandyControl.Data;
using HxEnum;
using HxSocket;
using HxSocketImplement.Sockets;
//using HxUserManagement;
using Microsoft.Win32;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Threading;
using System.Xml;
using XCommon;
using XCommon.Event;
using XCommon.Log;
using XCommon.Tip;
using XCommon.Xml;
using XCore;
using XHandler.Class;
using XHandler.Class.DataEx;
using XHandler.Controls;
using XHandler.Controls.Run.Com;
using XHandler.View;
using XHandler.View.BacteriaPickResult;
using XHandler.View.BacteriaProperty;
using XHandler.View.Com;
using XHandler.View.Consumables;
using XHandler.View.Device;
using XHandler.View.Dialog;
using XHandler.View.Liquids;
using XHandler.View.Login;
using XHandler.View.MethodProperty;
using XHandler.View.DataLog;
using XHandler.View.OperateAudit;
using XHandler.View.TestList;
using XHandler.View.MoveLiquidReport;
using XHandler.View.Tabletop;
using XImagingXhandler.XDAL;
using static DataEntity.Event.EventExArgs;
using ResultType = DriverLib.Engine.ResultType;
using SystemInformation = XHandler.View.About.SystemInformation;
using XCoreBLL;
using Sodao.FastSocket.Server;
using BiosenSocketService;
using System.Windows.Controls.Primitives;
using DataEntity;
using MySqlX.XDevAPI.Common;
namespace XHandler
{
///
/// MainWindow.xaml 的交互逻辑
///
public partial class MainWindow : Window
{
#region 变量
private DeviceStatus deviceStatus = null;
public ConsumableManagement consumableManagement = null;
private DeveiceManagement deveiceManagement = null;
private BacteriaManagement bacteriaManagement = null;
private BacteriaPickResult bacteriaPickResult = null;
private DataLogList dataLogList = null;
private OperateAuditList operateAuditList = null;
private ExperimentFolder experimentFolder = null;
private MoveLiquidResult moveLiquidResult = null;
private TabletopManagement tabletopManagement = null;
private UIElement uIElement = null;
private DispatcherTimer lockScreenTimer; //界面锁屏检测定时器
private DispatcherTimer checkConnectTimer; //设备连接状态检测定时器
private Timer heartConnectTimer; //成像设备连接心跳包发送定时器
public bool isAuthorEnable = false;//本次加密狗是否启动
public bool isAuthorPreviewEnable = false;//前一次加密狗是否启动
#region BLL
private ChoiceBll choiceBll = new ChoiceBll();
private CoatingBll coatingBll = new CoatingBll();
private HoldingLabwareBll holdingLabwareBll = new HoldingLabwareBll();
public OperateAuditLogBll operateAuditLogBll = new OperateAuditLogBll();
#endregion
public static int tickcount = 30;//30分钟,锁屏控制
public string CurWorkFlowName = "";
public TestDesign testDesign = null;
public LiquidManagement liquidManagement = null;
public bool EnableSimulator = false; //false:不启动;ture:启动
public bool IsOpenDoor = false; //false:门已关;ture:门已开
public bool wasLoadedTip = false; //false:抢上无头;true抢上有头
public bool connectedEquip = false; //true:已连接上设备;false:未连接上设备;
public bool firstConnectedEquip = false; //初次连接上驱动
public bool[] enableManualSetDevice; //保存是否已使用过手动设置设备的开关
// 拍照通讯类
public HxSocketClient socketTcpListener = new HxSocketClient(ConfigurationManager.AppSettings["socketClientIP"].ToString(), Convert.ToInt32(ConfigurationManager.AppSettings["socketClientPort"]));
public List methodMsgs = new List();//用于存放各种异常错误待处理消息
public Stack stackOperateDialog = new Stack();
public int remoteMark = 0;//远程控制信号,控制窗口开关;1:跳过;2重试;3取消;4确认继续
public RunWnd runWnd = null; //运行界面对象
public bool wasExecuteInitial = false;
// 挑菌位数字ID
public int ChoiceLatticeId = 0;
//角色控制菜单
List roleMenuAllList = null;
#endregion
#region 界面类构造函数
public MainWindow()
{
EventBind.MainEvent -= MainEvent;
EventBind.MainEvent += MainEvent;
string choiceLatticeId = ConfigurationManager.AppSettings["choiceLatticeId"].ToString();
if (choiceLatticeId.Length >= 1)
{
ChoiceLatticeId = Convert.ToInt32(choiceLatticeId.Substring(1));
}
InitializeComponent();
this.Width = Shared.Config.DisplaySizeW;
this.Height = Shared.Config.DisplaySizeH;
this.Top = Shared.Config.DisplayMarginTop;
this.Left = 0;
Shared.Main = this;
}
#endregion
#region 界面加载完成事件
private void Window_Loaded(object sender, RoutedEventArgs e)
{
try
{
if (Shared.SoftwareInformation.category.Equals(1))//区分设备类型,加载登录界面
{
xHandlerLogin xhandlerlogin = new xHandlerLogin();
xhandlerlogin.mainWindow = this;
xhandlerlogin.okEvent += Xhandlerlogin_okEvent;
xhandlerlogin.closeEvent += login_closeEvent;
loginGrid.Children.Add(xhandlerlogin);
}
else
{
BacteriaLogin bacterialogin = new BacteriaLogin();
bacterialogin.mainWindow = this;
bacterialogin.okEvent += Xhandlerlogin_okEvent;
bacterialogin.closeEvent += login_closeEvent;
loginGrid.Children.Add(bacterialogin);
}
rootGrid.Visibility = Visibility.Hidden;
ComponentDispatcher.ThreadFilterMessage -= ComponentDispatcher_ThreadFilterMessage;
ComponentDispatcher.ThreadFilterMessage += ComponentDispatcher_ThreadFilterMessage;
// 开关门信号检测
MethodAction.Instance.SignalChanged -= this.SignalChangedEvent;
MethodAction.Instance.SignalChanged += this.SignalChangedEvent;
#region 检查加密狗是否正确安装定时器
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Interval = TimeSpan.FromMilliseconds(Convert.ToInt32(ConfigurationManager.AppSettings["dogCheckTime"].ToString()));
dispatcherTimer.Tick += DispatcherTimer_Tick;
dispatcherTimer.Start();
#endregion
#region 界面锁屏检测定时器
lockScreenTimer = new DispatcherTimer();
lockScreenTimer.Interval = TimeSpan.FromMilliseconds(Convert.ToInt32(ConfigurationManager.AppSettings["mouseMoveCheckTime"].ToString())); // 1分钟
lockScreenTimer.Tick += timer_Tick;
lockScreenTimer.Start();
#endregion
#region 驱动连接状态检测定时器
checkConnectTimer = new DispatcherTimer();
checkConnectTimer.Interval = TimeSpan.FromMilliseconds(1000);
checkConnectTimer.Tick += checkConnectTimer_Tick;
#endregion
#region 开启工作站服务、作为客户端连接外部服务
if ("true" == ConfigurationManager.AppSettings.Get("AutoService"))
{
// 开启服务端监听
//SocketInteriorService.OpenService();
InitService();
}
new Thread(() =>
{
// 连接设备
ConnectService();
}).Start();
#endregion
//btnStartFirstPage_Click(null, null);
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#region 连接设备
///
/// 连接设备
///
///
public bool ConnectService()
{
bool IsOk = false;
var deviceConfigResult = DeviceConfigDB.GetDeviceConfigListByProjectId(Shared.SoftwareInformation.software_information_id);
if (deviceConfigResult == null || deviceConfigResult.Count == 0)
{
return IsOk;
}
// 作为客户端连接设备的服务端
var result = EquConnect.ConnectService();
var resultList = JsonConvert.DeserializeObject>(result.msg);
StringBuilder sb = new StringBuilder();
StringBuilder sbByTemp = new StringBuilder();
foreach (var item in resultList)
{
if (item.Contains("失败"))
{
sbByTemp.Append(item + Environment.NewLine);
}
sb.Append(item + Environment.NewLine);
}
if (sbByTemp.ToString().Contains("失败"))
{
ShowTip.ShowNotice(sbByTemp.ToString(), InfoType.Error);
IsOk = false;
}
else
{
ShowTip.ShowNotice("外部设备【连接成功】", InfoType.Success);
IsOk = true; ;
}
return IsOk;
}
#endregion
#endregion
#region 开关门信号检测
///
/// 开关门信号检测
///
///
///
private void SignalChangedEvent(object sender, SignalChangedEventArgs e)
{
LoggerHelper.InfoLog(string.Format("[SignalChangedEvent]: Name = {0}, Value = {1}", e.Name, e.Value));
if (e.Name.Equals("FrontDoor"))
{
IsOpenDoor = e.Value;
if (runWnd != null && IsOpenDoor)
{
// 操作流程
runWnd.OperateExpFolw(true);
}
}
}
#endregion
#region 定时器事件——检测是否在30分钟内持续操作了本软件,否则锁屏
private void timer_Tick(object sender, EventArgs e)
{
//Console.WriteLine("次数:" + tickcount.ToString());
//tickcount--;
//if (tickcount == 0)
//{
// if (rootGrid.Visibility == Visibility.Hidden || loginGrid.Visibility == Visibility.Visible)
// {
// return;
// }
// //timer.Stop();
// //锁屏
// PlsLookWin plsToolTipWin = new PlsLookWin(Properties.Resources.strLockInfo, usernamestr, passwordstr);
// plsToolTipWin.WindowStartupLocation = WindowStartupLocation.CenterScreen;
// plsToolTipWin.Height = this.ActualHeight;
// plsToolTipWin.Width = this.ActualWidth;
// SolidColorBrush mybtn1_Brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(130, 0, 0, 0));
// plsToolTipWin.Background = (System.Windows.Media.Brush)mybtn1_Brush;
// if (!wasEnableOverTimePopWin)
// {
// wasEnableOverTimePopWin = true;
// plsToolTipWin.ShowDialog();
// wasEnableOverTimePopWin = false;
// }
// //tickcount = 30;
// //timer.Start();
//}
}
#endregion
#region 定时器事件——检测设备是否连接
private void checkConnectTimer_Tick(object sender, EventArgs e)
{
if (MethodAction.Instance != null && !MethodAction.Instance.Connected && connectedEquip)
{
// 状态0 未链接 黄闪
CommonBll.StatusLamp(0, false);
EnableSimulator = true;
connectedEquip = false;
string TargetPath = "Assets/disconnect.png";
imgDeviceStatus.Source = new BitmapImage(new Uri(TargetPath, UriKind.Relative));
}
else if (MethodAction.Instance != null && MethodAction.Instance.Connected && !connectedEquip)
{
// 状态1 链接成功 蓝亮
CommonBll.StatusLamp(1, false);
connectedEquip = true;
string TargetPath = "Assets/connect.png";
imgDeviceStatus.Source = new BitmapImage(new Uri(TargetPath, UriKind.Relative));
}
}
#endregion
#region 定时器时间——定时向成像设备发送心跳数据
private void heartConnectTimer_Tick(object sender)
{
try
{
if (socketTcpListener.IsConnect())
{
socketTcpListener.SendMessage(GenerateHeatCommand(), false);
}
else
{
//LoggerHelper.DebugLog("[heartConnectTimer_Tick]: socketTcpListener.IsConnect = false");
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("[heartConnectTimer_Tick]:ERROR:", ex);
}
}
///
/// 获取向成像设备发送心跳数据
///
///
public string GenerateHeatCommand()
{
string strResult = string.Empty;
strResult = "{" + "message_id:\"" + Guid.NewGuid().ToString() +
"\",message_type:0" +
",equipment_id:\"ID2023\"" +
",workflow_id:\"\"" +
",experiment_id:\"" + "\"" +
",experiment_status:0" +
",actual_device_status:0" +
",connected:1" +
",timestamp:\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\"}";
return strResult;
}
#endregion
#region 本装软件界面状态消息检测事件
private void ComponentDispatcher_ThreadFilterMessage(ref MSG m, ref bool handled)
{
//如果检测到有鼠标或则键盘的消息,则使计数为初始值0.....
if (m.message == 0x0200 || m.message == 0x0201 || m.message == 0x0204 || m.message == 0x0207)
{
tickcount = 30;
//Console.WriteLine("统计:" + tickcount.ToString());
}
}
#endregion
#region 定时器事件--检测加密狗状态
private void DispatcherTimer_Tick(object sender, EventArgs e)
{
bool isAuthor = true;// IsAuthority.IsAuthorityDog();
if (isAuthor)
{
isAuthorEnable = true;
if (isAuthorPreviewEnable == isAuthorEnable)
{
}
else
{
isAuthorPreviewEnable = true;
if (runWnd != null)
{
if (RunWnd.IsRunning && rootGrid.Visibility.Equals(Visibility.Visible))
{
runWnd.btnPause_Click(sender, null);
}
}
}
}
else
{
isAuthorEnable = false;
rootGrid.Visibility = Visibility.Collapsed;
loginGrid.Visibility = Visibility.Visible;
if (isAuthorPreviewEnable == isAuthorEnable)
{
}
else
{
if (runWnd != null)
{
if (RunWnd.IsRunning)
{
runWnd.btnPause_Click(sender, null);
}
}
}
}
}
#endregion
#region 登录确认按钮事件
private void Xhandlerlogin_okEvent(object sender, CustomRoutedEventArgs e)
{
SetMenusFromRole();
string name = e.param as string;
textBlockLoginUser.Text = Properties.Resources.strUserName1 + name;
rootGrid.Visibility = Visibility.Visible;
rootGridTitle.RowDefinitions[1].Height = new GridLength(0);
loginGrid.Visibility = Visibility.Collapsed;
// 连接设备硬件初始化
Thread deviceTD = new Thread(InitializeDevice);
deviceTD.Start();
// 建立成像的通信连接
connectToCaptureAndCControl();
InitService();
btnTestDesign.IsChecked = true;
isAuthorPreviewEnable = true;
}
#endregion
#region 通过角色权限设置界面
///
/// 通过角色权限设置界面
///
private void SetMenusFromRole()
{
string userid = UserDB.GetUserInfByUserName(Shared.User.username).id;
//所有菜单
roleMenuAllList = UserDB.GetWholeRoleMenuByUserId(userid);
SolidColorBrush mybtn2_Brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(117, 123, 123, 125));//禁用颜色
//左侧主菜单权限控制
//首页
var firstPage = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuFirstPage));
if (firstPage != null)
{
btnStartFirstPage.IsEnabled = true;
btnStartFirstPage.Background = Brushes.Transparent;
}
else
{
btnStartFirstPage.IsEnabled = false;
btnStartFirstPage.Background = mybtn2_Brush;
}
//液体管理
var LiquidManager = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuLiquidManage));
if (LiquidManager != null)
{
btnLiquidManager.IsEnabled = true;
btnLiquidManager.Background = Brushes.Transparent;
btnLiquidManager.Visibility = Visibility.Visible;
if (Shared.SoftwareInformation.software_device_number.Equals(DeviceCategory.DeviceHXELEC))
{
btnLiquidManager.Content = Properties.Resources.strColloid;
}
}
else
{
btnLiquidManager.IsEnabled = false;
btnLiquidManager.Background = mybtn2_Brush;
btnLiquidManager.Visibility = Visibility.Collapsed;
gdLeftImageList.RowDefinitions[1].Height = new GridLength(0);
}
//耗材管理
var LabwareManager = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuLabwareManage));
if (LabwareManager != null)
{
btnConsumableManager.IsEnabled = true;
btnConsumableManager.Background = Brushes.Transparent;
btnConsumableManager.Visibility = Visibility.Visible;
}
else
{
btnConsumableManager.IsEnabled = false;
btnConsumableManager.Background = mybtn2_Brush;
btnConsumableManager.Visibility = Visibility.Collapsed;
gdLeftImageList.RowDefinitions[2].Height = new GridLength(0);
}
//设备管理
var DeviceManager = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuDeviceManage));
if (DeviceManager != null)
{
btnDeviceManager.IsEnabled = true;
btnDeviceManager.Background = Brushes.Transparent;
btnDeviceManager.Visibility = Visibility.Visible;
}
else
{
btnDeviceManager.IsEnabled = false;
btnDeviceManager.Background = mybtn2_Brush;
btnDeviceManager.Visibility = Visibility.Collapsed;
gdLeftImageList.RowDefinitions[4].Height = new GridLength(0);
}
//实验设计
var TestDesignMenu = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuTestDesign));
if (TestDesignMenu != null)
{
btnTestDesign.IsEnabled = true;
btnTestDesign.Background = Brushes.Transparent;
btnTestDesign.Visibility = Visibility.Visible;
}
else
{
btnTestDesign.IsEnabled = false;
btnTestDesign.Background = mybtn2_Brush;
btnTestDesign.Visibility = Visibility.Collapsed;
gdLeftImageList.RowDefinitions[0].Height = new GridLength(0);
}
//菌落管理
var BacteriaMenu = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuBacteriaManage));
if (BacteriaMenu != null)
{
btnBacteriaManager.IsEnabled = true;
btnBacteriaManager.Background = Brushes.Transparent;
btnBacteriaManager.Visibility = Visibility.Visible;
}
else
{
btnBacteriaManager.IsEnabled = false;
btnBacteriaManager.Background = mybtn2_Brush;
btnBacteriaManager.Visibility = Visibility.Collapsed;
gdLeftImageList.RowDefinitions[3].Height = new GridLength(0);
}
//菌落挑选
var BacteriaChoiceMenu = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuBacteriaChoice));
if (BacteriaChoiceMenu != null)
{
btnBacteriaPick.IsEnabled = true;
btnBacteriaPick.Background = Brushes.Transparent;
btnBacteriaPick.Visibility = Visibility.Visible;
}
else
{
btnBacteriaPick.IsEnabled = false;
btnBacteriaPick.Background = mybtn2_Brush;
btnBacteriaPick.Visibility = Visibility.Collapsed;
gdLeftImageList.RowDefinitions[5].Height = new GridLength(0);
}
//实验列表
var TestListMenu = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuTestList));
if (TestListMenu != null)
{
btnTestList.IsEnabled = true;
btnTestList.Background = Brushes.Transparent;
btnTestList.Visibility = Visibility.Visible;
}
else
{
btnTestList.IsEnabled = false;
btnTestList.Background = mybtn2_Brush;
btnTestList.Visibility = Visibility.Collapsed;
gdLeftImageList.RowDefinitions[8].Height = new GridLength(0);
}
//API对接
//var APIMenu = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuAPI));
//if (APIMenu != null)
//{
// btnLims.IsEnabled = true;
// btnLims.Background = Brushes.Transparent;
//}
//else
//{
// btnLims.IsEnabled = false;
// btnLims.Background = mybtn2_Brush;
//}
//数据管理
var DataMenu = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuDataManage));
if (DataMenu != null)
{
btnDataManager.IsEnabled = true;
btnDataManager.Background = Brushes.Transparent;
btnDataManager.Visibility = Visibility.Visible;
}
else
{
btnDataManager.IsEnabled = false;
btnDataManager.Background = mybtn2_Brush;
btnDataManager.Visibility = Visibility.Collapsed;
gdLeftImageList.RowDefinitions[6].Height = new GridLength(0);
}
//审计追踪
var CheckTrackMenu = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuCheckTrack));
if (CheckTrackMenu != null)
{
btnAuditTrail.IsEnabled = true;
btnAuditTrail.Background = Brushes.Transparent;
btnAuditTrail.Visibility = Visibility.Visible;
}
else
{
btnAuditTrail.IsEnabled = false;
btnAuditTrail.Background = mybtn2_Brush;
btnAuditTrail.Visibility = Visibility.Collapsed;
gdLeftImageList.RowDefinitions[7].Height = new GridLength(0);
}
//移液报告
var MoveLiquidMenu = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuMoveLiquid));
if (MoveLiquidMenu != null)
{
btnMoveLiquid.IsEnabled = true;
btnMoveLiquid.Background = Brushes.Transparent;
btnMoveLiquid.Visibility = Visibility.Visible;
if (Shared.SoftwareInformation.software_device_number.Equals(DeviceCategory.DeviceHXELEC))
{
btnMoveLiquid.Content = Properties.Resources.strMoveColloid;
}
}
else
{
btnMoveLiquid.IsEnabled = false;
btnMoveLiquid.Background = mybtn2_Brush;
btnMoveLiquid.Visibility = Visibility.Collapsed;
gdLeftImageList.RowDefinitions[9].Height = new GridLength(0);
}
//台面管理
var TabletopManageMenu = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuTabletopManage));
if (TabletopManageMenu != null)
{
btnTabletop.IsEnabled = true;
btnTabletop.Background = Brushes.Transparent;
btnTabletop.Visibility = Visibility.Visible;
}
else
{
btnTabletop.IsEnabled = false;
btnTabletop.Background = mybtn2_Brush;
btnTabletop.Visibility = Visibility.Collapsed;
gdLeftImageList.RowDefinitions[10].Height = new GridLength(0);
}
//上部主菜单权限控制
//权限控制
var MenuUserManage = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuUserManage));
if (MenuUserManage != null)
{
btnUserManager.IsEnabled = true;
btnUserManager.Visibility = Visibility.Visible;
}
else
{
btnUserManager.IsEnabled = false;
btnUserManager.Visibility = Visibility.Collapsed;
gridMenu.ColumnDefinitions[3].Width = new GridLength(0);
}
//系统设置
var MenuSystemSettingManage = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuSystemSetting));
if (MenuSystemSettingManage != null)
{
btnSettings.IsEnabled = true;
btnSettings.Visibility = Visibility.Visible;
}
else
{
btnSettings.IsEnabled = false;
btnSettings.Visibility = Visibility.Collapsed;
gridMenu.ColumnDefinitions[4].Width = new GridLength(0);
}
}
#endregion
#region 启动BiosenSocketService
///
/// 启动BiosenSocketService
///
private void InitService()
{
try
{
string value = ConfigurationManager.AppSettings.Get("AutoService");
if (value == "true")
{
SocketServerManager.Init();
SocketServerManager.Start();
BiosenHttpServer.Init();
HttpServer.Init(HttpServer.GetLocalIP(), ConfigurationManager.AppSettings["socketURLPort"].ToString(), "test1.json", "启动项目是要初始化这行,才能启动访问查看WEB页面地址,这行代码不要删。" + DateTime.Now);
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("System error:" + ex.Source + ":" + ex.Message.ToString());
}
}
#endregion
#region 建立成像的通信连接
public void connectToCaptureAndCControl()
{
try
{
if (ConfigurationManager.AppSettings["openTakePhoto"].ToString() == "true")
{
Task.Run(() =>
{
bool bResult = socketTcpListener.connectServer(ConfigurationManager.AppSettings["socketClientIP"].ToString(), Convert.ToInt32(ConfigurationManager.AppSettings["socketClientPort"]));//启动成像系统通信服务
if (bResult)
{
LoggerHelper.InfoLog("Capture system was successfully connected!");
}
else
{
System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
{
PlsToolTipWin plsToolTipWin = new PlsToolTipWin("相机系统设备通信失败!");
plsToolTipWin.Height = this.ActualHeight;
plsToolTipWin.Width = this.ActualWidth;
SolidColorBrush mybtn1_Brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(70, 0, 0, 0));
plsToolTipWin.Background = (System.Windows.Media.Brush)mybtn1_Brush;
plsToolTipWin.btnCancel.Visibility = Visibility.Hidden;
plsToolTipWin.ShowDialog();
}));
LoggerHelper.InfoLog("Capture system was failed connected!");
}
});
heartConnectTimer = new System.Threading.Timer(heartConnectTimer_Tick, null, 0, 1000);
}
checkConnectTimer.Start();
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#endregion
#region 初始化链接设备
public void InitializeDevice()
{
try
{
HxResult ret = MethodAction.Instance.Initialize();
wasExecuteInitial = true;
this.Dispatcher.Invoke(new Action(() =>
{
if (ret.Result != ResultType.Success)
{
// 状态0 未链接 黄闪
ret = CommonBll.StatusLamp(0, false);
EnableSimulator = true;
connectedEquip = false;
}
else
{
// 状态1 链接成功 蓝亮
ret = CommonBll.StatusLamp(1, false);
string TargetPath = "Assets/connect.png";
imgDeviceStatus.Source = new BitmapImage(new Uri(TargetPath, UriKind.Relative));
connectedEquip = true;
// 连接设备初始化后
DoAfterInitDevice();
}
}));
//checkConnectTimer.Start();
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
///
/// 连接设备初始化后
///
private void DoAfterInitDevice()
{
#region 自动打开FFU、LED、UV等模块
// 软件启动自动打开FFU
HxResult ret = MethodAction.Instance.FFU(EnumManagement.GetEnumValue(DeviceStateModeEnum.TurnOn));
#endregion
#region 设置全局速度
MethodAction.Instance.GlobalSpeed = Shared.SoftwareInformation.global_speed;
#endregion
}
#endregion
#region 取消登录事件
private void login_closeEvent(object sender, EventArgs e)
{
this.Close();
}
#endregion
#region 右上角退出重新登录按钮
private void btnRelogin_Click(object sender, RoutedEventArgs e)
{
PlsToolTipWin plsToolTipWin = new PlsToolTipWin("确定要注销登录吗?");
plsToolTipWin.ShowDialog();
if (plsToolTipWin.DialogResult != true)
{
return;
}
rootGrid.Visibility = Visibility.Collapsed;
loginGrid.Visibility = Visibility.Visible;
OperateAuditLogDB.AddOperateAuditLogIntodb(operateAuditLogBll.GenerateOperateAuditLog("注销退出", "用户:" + Shared.User.username + "注销退出系统", Shared.User.username, "登录模块", "", "", "用户[id:" + Shared.User.username + "]", "成功"));
if (runWnd != null)
{
if (RunWnd.IsRunning)
{
runWnd.btnPause_Click(sender, null);
}
}
}
#endregion
#region 右上角最小化窗口按钮事件
private void btnMinimize_Click(object sender, RoutedEventArgs e)
{
WindowState = WindowState.Minimized;
}
#endregion
#region 右上角关闭软件按钮事件
private void btnQuit_Click(object sender, RoutedEventArgs e)
{
try
{
PlsToolTipWin plsToolTipWin = new PlsToolTipWin("确定要退出系统吗?");
plsToolTipWin.ShowDialog();
if (plsToolTipWin.DialogResult != true)
{
OperateAuditLogDB.AddOperateAuditLogIntodb(operateAuditLogBll.GenerateOperateAuditLog("退出", "用户:" + Shared.User.username + "退出系统", Shared.User.username, "登录模块", "", "", "用户[id:" + Shared.User.username + "]", "成功"));
return;
}
this.Close();
Application.Current.Shutdown();
Environment.Exit(0);
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
OperateAuditLogDB.AddOperateAuditLogIntodb(operateAuditLogBll.GenerateOperateAuditLog("退出", "用户:" + Shared.User.username + "退出系统", Shared.User.username, "登录模块", "", "", "用户[id:" + Shared.User.username + "]", "异常失败"));
}
}
#endregion
#region 切换左侧主菜单按钮事件
public void radioButton_Checked(object sender, RoutedEventArgs e)
{
firstPagePressed = false;
btnStartFirstPage.IsChecked = false;
btnFirst.Visibility = Visibility.Hidden;
btnUserManager.IsChecked = false;
btnUser.Visibility = Visibility.Hidden;
RadioButton btn = (RadioButton)sender;
switch (btn.Name)
{
case "btnTestDesign": // 实验设计
btnOpen.IsEnabled = true;
ShowTestDesign();
SetTopMenuByRole(btnTestDesign);
break;
case "btnConsumableManager": // 耗材管理
ShowConsumableManagement();
SetTopMenuByRole(btnConsumableManager);
break;
case "btnLiquidManager": // 液体管理
ShowLiquidManagement();
SetTopMenuByRole(btnLiquidManager);
break;
case "btnBacteriaManager": // 菌落管理
ShowBacteriaManagement();
SetTopMenuByRole(btnBacteriaManager);
break;
case "btnBacteriaPick": // 菌落挑选
ShowBacteriaPickResult();
SetTopMenuByRole(btnBacteriaPick);
break;
case "btnDeviceManager": // 设备管理
ShowDeviceManagement();
SetTopMenuByRole(btnDeviceManager);
break;
case "btnDataManager":
ShowDataLogList();
SetTopMenuByRole(btnDataManager);
break;
case "btnAuditTrail":
ShowOperateAuditList();
SetTopMenuByRole(btnAuditTrail);
break;
case "btnTestList":
ShowTestList(); //实验列表
SetTopMenuByRole(btnTestList);
break;
case "btnMoveLiquid":
ShowMoveLiquidReport(); //移液报告
SetTopMenuByRole(btnMoveLiquid);
break;
case "btnTabletop":
ShowTabletopTemplate(); //台面模板
SetTopMenuByRole(btnTabletop);
break;
default:
break;
}
}
#endregion
#region 根据用户角色权限设置顶部菜单
public void SetTopMenuByRole(ImageRadioButton imageRadioButton)
{
try
{
string userid = UserDB.GetUserInfByUserName(Shared.User.username).id;
//所有菜单
List roleMenuAllList = UserDB.GetWholeRoleMenuByUserId(userid);
//权限控制
var MenuSystemSetting = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(imageRadioButton.Content.ToString()));
if (MenuSystemSetting != null)
{
if (MenuSystemSetting.rolemenuchildren != null)
{
var SubMenuNew = MenuSystemSetting.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuNew));
if (SubMenuNew != null)
{
btnNew.Visibility = Visibility.Visible;
btnNew.IsEnabled = true;
//gridOperMenu.ColumnDefinitions[0].Width = new GridLength(80);
}
else
{
btnNew.Visibility = Visibility.Collapsed;
//gridOperMenu.ColumnDefinitions[0].Width = new GridLength(0);
}
var SubMenuOpen = MenuSystemSetting.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuOpen));
if (SubMenuOpen != null)
{
btnOpen.Visibility = Visibility.Visible;
//gridOperMenu.ColumnDefinitions[1].Width = new GridLength(80);
}
else
{
btnOpen.Visibility = Visibility.Collapsed;
//gridOperMenu.ColumnDefinitions[1].Width = new GridLength(0);
}
var SubMenuSave = MenuSystemSetting.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuSave));
if (SubMenuSave != null)
{
btnSave.Visibility = Visibility.Visible;
//gridOperMenu.ColumnDefinitions[2].Width = new GridLength(80);
}
else
{
btnSave.Visibility = Visibility.Collapsed;
//gridOperMenu.ColumnDefinitions[2].Width = new GridLength(0);
}
var SubMenuAsSave = MenuSystemSetting.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuAsSave));
if (SubMenuAsSave != null)
{
btnSaveAs.Visibility = Visibility.Visible;
//gridOperMenu.ColumnDefinitions[3].Width = new GridLength(80);
}
else
{
btnSaveAs.Visibility = Visibility.Collapsed;
//gridOperMenu.ColumnDefinitions[3].Width = new GridLength(0);
}
}
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("Error", ex);
}
}
#endregion
#region 主内容区域显示--台面模板
private void ShowTabletopTemplate()
{
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (tabletopManagement == null)
{
tabletopManagement = new TabletopManagement();
tabletopManagement.mainWindow = this;
gridContent.Children.Add(tabletopManagement);
}
else
{
gridContent.Children.Add(tabletopManagement);
}
gridControl.IsEnabled = false;
gridOperMenu.IsEnabled = true;
}
#endregion
#region 主内容区域显示——审计界面
private void ShowOperateAuditList()
{
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (operateAuditList == null)
{
operateAuditList = new OperateAuditList();
gridContent.Children.Add(operateAuditList);
}
else
{
gridContent.Children.Add(operateAuditList);
}
gridControl.IsEnabled = false;
gridOperMenu.IsEnabled = false;
}
#endregion
#region 主内容区域显示——数据界面
private void ShowDataLogList()
{
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (dataLogList == null)
{
dataLogList = new DataLogList();
gridContent.Children.Add(dataLogList);
}
else
{
gridContent.Children.Add(dataLogList);
}
gridControl.IsEnabled = false;
gridOperMenu.IsEnabled = false;
}
#endregion
#region 主内容区域显示——实验列表界面
private void ShowTestList()
{
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (experimentFolder == null)
{
experimentFolder = new ExperimentFolder();
experimentFolder.mainWindow = this;
gridContent.Children.Add(experimentFolder);
}
else
{
gridContent.Children.Add(experimentFolder);
}
gridControl.IsEnabled = false;
gridOperMenu.IsEnabled = false;
}
#endregion
#region 主内容区域显示——移液报告界面
private void ShowMoveLiquidReport()
{
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (moveLiquidResult == null)
{
moveLiquidResult = new MoveLiquidResult();
moveLiquidResult.mainWindow = this;
gridContent.Children.Add(moveLiquidResult);
}
else
{
gridContent.Children.Add(moveLiquidResult);
}
gridControl.IsEnabled = false;
gridOperMenu.IsEnabled = false;
}
#endregion
#region 主内容区域显示——菌落挑选结果界面
private void ShowBacteriaPickResult()
{
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (bacteriaPickResult == null)
{
bacteriaPickResult = new BacteriaPickResult();
gridContent.Children.Add(bacteriaPickResult);
}
else
{
gridContent.Children.Add(bacteriaPickResult);
}
gridControl.IsEnabled = false;
gridOperMenu.IsEnabled = false;
}
#endregion
#region 主内容区域显示——菌落管理界面
private void ShowBacteriaManagement()
{
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (bacteriaManagement == null)
{
bacteriaManagement = new BacteriaManagement();
gridContent.Children.Add(bacteriaManagement);
}
else
{
gridContent.Children.Add(bacteriaManagement);
}
gridControl.IsEnabled = false;
gridOperMenu.IsEnabled = true;
}
#endregion
#region 主内容区域显示——台面模板管理界面
private void ShowTabletopTemplateManagement()
{
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (tabletopManagement == null)
{
tabletopManagement = new TabletopManagement();
gridContent.Children.Add(tabletopManagement);
}
else
{
gridContent.Children.Add(tabletopManagement);
}
gridControl.IsEnabled = false;
gridOperMenu.IsEnabled = true;
}
#endregion
#region 主内容区域显示——实验设计界面
public void ShowTestDesign()
{
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (testDesign == null)
{
testDesign = new TestDesign();
gridContent.Children.Add(testDesign);
}
else
{
gridContent.Children.Add(testDesign);
}
gridControl.IsEnabled = true;
gridOperMenu.IsEnabled = true;
}
#endregion
#region 主内容区域显示——耗材管理界面
private void ShowConsumableManagement()
{
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (consumableManagement == null)
{
consumableManagement = new ConsumableManagement();
gridContent.Children.Add(consumableManagement);
}
else
{
gridContent.Children.Add(consumableManagement);
}
gridControl.IsEnabled = false;
gridOperMenu.IsEnabled = true;
//权限控制
var MenuLabwareManage = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuLabwareManage));
if (MenuLabwareManage != null)
{
var MenuLabwareNew = MenuLabwareManage.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuNew));
if (MenuLabwareNew != null)
{
btnNew.IsEnabled = true;
}
else
{
btnNew.IsEnabled = false;
}
var MenuLabwareOpen = MenuLabwareManage.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuOpen));
if (MenuLabwareOpen != null)
{
btnOpen.IsEnabled = true;
}
else
{
btnOpen.IsEnabled = false;
}
var MenuLabwareSave = MenuLabwareManage.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuSave));
if (MenuLabwareSave != null)
{
btnSave.IsEnabled = true;
}
else
{
btnSave.IsEnabled = false;
}
var MenuLabwareAsSave = MenuLabwareManage.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuAsSave));
if (MenuLabwareAsSave != null)
{
btnSaveAs.IsEnabled = true;
}
else
{
btnSaveAs.IsEnabled = false;
}
}
}
#endregion
#region 主内容区域显示——设备管理界面
private void ShowDeviceManagement()
{
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (deveiceManagement == null)
{
deveiceManagement = new DeveiceManagement();
gridContent.Children.Add(deveiceManagement);
}
else
{
gridContent.Children.Add(deveiceManagement);
}
gridControl.IsEnabled = false;
gridOperMenu.IsEnabled = false;
}
#endregion
#region 主内容区域显示——液体管理界面
private void ShowLiquidManagement()
{
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (liquidManagement == null)
{
liquidManagement = new LiquidManagement(roleMenuAllList);
gridContent.Children.Add(liquidManagement);
}
else
{
gridContent.Children.Add(liquidManagement);
}
gridControl.IsEnabled = false;
gridOperMenu.IsEnabled = true;
//权限控制
var MenuLiquidManage = roleMenuAllList.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.MenuLiquidManage));
if (MenuLiquidManage != null)
{
var MenuLiquidNew = MenuLiquidManage.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuNew));
if (MenuLiquidNew != null)
{
btnNew.IsEnabled = true;
}
else
{
btnNew.IsEnabled = false;
}
var MenuLiquidOpen = MenuLiquidManage.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuOpen));
if (MenuLiquidOpen != null)
{
btnOpen.IsEnabled = true;
}
else
{
btnOpen.IsEnabled = false;
}
var MenuLiquidSave = MenuLiquidManage.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuSave));
if (MenuLiquidSave != null)
{
btnSave.IsEnabled = true;
}
else
{
btnSave.IsEnabled = false;
}
var MenuLiquidAsSave = MenuLiquidManage.rolemenuchildren.FirstOrDefault(x => x.rolemenuname.Equals(MenuName.SubMenuAsSave));
if (MenuLiquidAsSave != null)
{
btnSaveAs.IsEnabled = true;
}
else
{
btnSaveAs.IsEnabled = false;
}
}
}
#endregion
#region 主菜单——用户管理按钮事件
private void btnUserManager_Click(object sender, RoutedEventArgs e)
{
firstPagePressed = false;
btnStartFirstPage.IsChecked = false;
btnUser.Visibility = Visibility.Visible;
btnFirst.Visibility = Visibility.Hidden;
if (gridContent.Children.Count > 0)
{
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
}
List listBtn = ViewCom.GetChildObjects((DependencyObject)gdLeftImageList, typeof(ImageRadioButton));
if (listBtn.Count > 0)
{
foreach (ImageRadioButton i in listBtn)
{
if (i.IsChecked == true)
{
i.IsChecked = false;
}
}
}
UserManagerment um = new UserManagerment(Shared.User.id);
um.closeEvent += SubContent_closeEvent;
gridContent.Children.Add(um);
gridControl.IsEnabled = false;
gridOperMenu.IsEnabled = false;
}
#endregion
#region 主菜单——用户管理关闭按钮事件
private void UC_closeEvent(object sender, EventArgs e)
{
Window wnd = Application.Current.MainWindow;
Grid grid = Utilities.FindVisualChild(wnd);
UIElement element = sender as UIElement;
grid.Children.Remove(element);
}
#endregion
#region 主界面保存按钮事件
///
/// 主界面保存按钮事件
/// 判断当前选中的是哪个主菜单
/// 由主菜单,判断保存的对象是耗材、液体、还是流程方法
///
///
///
private void btnSave_Click(object sender, RoutedEventArgs e)
{
try
{
if (btnTestDesign.IsChecked == true)
{
// 实验设计
SaveTest();
}
else if (btnConsumableManager.IsChecked == true)
{
// 耗材管理
consumableManagement.SaveConsumable();
SetObserverNode(testDesign.rootMethod);
if (!consumableManagement.observers.Contains(testDesign))
{
consumableManagement.AddObserver(testDesign);
}
consumableManagement.Update();
}
else if (btnLiquidManager.IsChecked == true)
{
// 液体管理
liquidManagement.SaveLiquid();
SetObserverNode(testDesign.rootMethod);
liquidManagement.Update();
}
else if (btnBacteriaManager.IsChecked == true)
{
// 菌落管理
bacteriaManagement.SaveBacteria();
}
else if (btnTabletop.IsChecked == true)
{
// 台面模板保存
tabletopManagement.SaveTabletopTemplate();
}
}
catch (Exception ex)
{
ShowTip.ShowNotice(string.Format("{0}失败{1}{2}", "保存", Environment.NewLine, ex.Message.ToString()), InfoType.Warning);
}
}
///
/// 设置耗材观察者对象的进入被观察者数据集
///
/// 实验设计现有的方法节点树对象
public void SetObserverNode(MethodEx method)
{
int iNum = new MethodListBll().getNumByMethodName(method.method_name);
switch (iNum)
{
case (int)MethodNameEnum.griptransport: // 抓板转移
{
var obj = method.control as GripTransportProperty;
if (obj != null)
{
if (consumableManagement != null)
{
if (!consumableManagement.observers.Contains(obj))
{
consumableManagement.AddObserver(obj);
}
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.holdingLabware: // 夹爪保持开始
{
var obj = method.control as BeginHoldingLabwareProperty;
if (obj != null)
{
if (consumableManagement != null)
{
if (!consumableManagement.observers.Contains(obj))
{
consumableManagement.AddObserver(obj);
}
}
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.endHoldingLabware: // 夹爪保持结束
{
var obj = method.control as EndHoldingLabwareProperty;
if (obj != null)
{
if (consumableManagement != null)
{
if (!consumableManagement.observers.Contains(obj))
{
consumableManagement.AddObserver(obj);
}
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.loadtips: // 安装吸头
{
var obj = method.control as LoadTipsProperty;
if (obj != null)
{
if (consumableManagement != null)
{
if (!consumableManagement.observers.Contains(obj))
{
consumableManagement.AddObserver(obj);
}
}
if (systemSettings != null)
{
if (!systemSettings.observers.Contains(obj))
{
systemSettings.AddObserver(obj);
}
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.unloadtips: //卸载吸头
{
var obj = method.control as LoadTipsProperty;
if (obj != null)
{
if (systemSettings != null)
{
if (!systemSettings.observers.Contains(obj))
{
systemSettings.AddObserver(obj);
}
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.transferfile: // 文件
{
var obj = method.control as FileProperty;
if (obj != null)
{
if (consumableManagement != null)
{
if (!consumableManagement.observers.Contains(obj))
{
consumableManagement.AddObserver(obj);
}
}
if (systemSettings != null)
{
if (!systemSettings.observers.Contains(obj))
{
systemSettings.AddObserver(obj);
}
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.aspirate: // 吸液
{
var obj = method.control as AspirateProperty;
if (obj != null)
{
if (liquidManagement != null)
{
if (!liquidManagement.observers.Contains(obj))
{
liquidManagement.AddObserver(obj);
}
}
if (!testDesign.observers.Contains(obj))
{
testDesign.AddObserver(obj);
}
if (systemSettings != null)
{
if (!systemSettings.observers.Contains(obj))
{
systemSettings.AddObserver(obj);
}
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.dispense: // 排液
{
var obj = method.control as DispenseProperty;
if (obj != null)
{
if (liquidManagement != null)
{
if (!liquidManagement.observers.Contains(obj))
{
liquidManagement.AddObserver(obj);
}
}
if (!testDesign.observers.Contains(obj))
{
testDesign.AddObserver(obj);
}
if (systemSettings != null)
{
if (!systemSettings.observers.Contains(obj))
{
systemSettings.AddObserver(obj);
}
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.mixing: // 混合
{
var obj = method.control as MixProperty;
if (obj != null)
{
if (liquidManagement != null)
{
if (!liquidManagement.observers.Contains(obj))
{
liquidManagement.AddObserver(obj);
}
}
if (!testDesign.observers.Contains(obj))
{
testDesign.AddObserver(obj);
}
if (systemSettings != null)
{
if (!systemSettings.observers.Contains(obj))
{
systemSettings.AddObserver(obj);
}
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.dilution: // 梯度稀释
{
var obj = method.control as DilutionProperty;
if (obj != null)
{
if (liquidManagement != null)
{
if (!liquidManagement.observers.Contains(obj))
{
liquidManagement.AddObserver(obj);
}
}
if (!testDesign.observers.Contains(obj))
{
testDesign.AddObserver(obj);
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.waitFor: // 等待
{
var obj = method.control as WaitforProperty;
if (obj != null)
{
if (!testDesign.observerTimers.Contains(obj))
{
testDesign.AddObserver(obj);
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
default:
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
break;
}
}
///
/// 耗材观察者对象的移除出被观察者数据集
///
/// 实验设计现有的方法节点树对象
public void RemoveObserverNode(MethodEx method)
{
int iNum = new MethodListBll().getNumByMethodName(method.method_name);
switch (iNum)
{
case (int)MethodNameEnum.griptransport: // 抓板转移
{
var obj = method.control as GripTransportProperty;
if (obj != null)
{
if (consumableManagement.observers.Contains(obj))
{
consumableManagement.RemoveObserver(obj);
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.holdingLabware: // 夹爪保持开始
{
var obj = method.control as BeginHoldingLabwareProperty;
if (obj != null)
{
if (consumableManagement.observers.Contains(obj))
{
consumableManagement.RemoveObserver(obj);
}
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.endHoldingLabware: // 夹爪保持结束
{
var obj = method.control as EndHoldingLabwareProperty;
if (obj != null)
{
if (consumableManagement.observers.Contains(obj))
{
consumableManagement.RemoveObserver(obj);
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.loadtips: // 安装吸头
{
var obj = method.control as LoadTipsProperty;
if (obj != null)
{
if (consumableManagement.observers.Contains(obj))
{
consumableManagement.RemoveObserver(obj);
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.transferfile: // 文件
{
var obj = method.control as FileProperty;
if (obj != null)
{
if (consumableManagement.observers.Contains(obj))
{
consumableManagement.RemoveObserver(obj);
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.aspirate: // 吸液
{
var obj = method.control as AspirateProperty;
if (obj != null)
{
if (liquidManagement != null)
{
if (liquidManagement.observers.Contains(obj))
{
liquidManagement.RemoveObserver(obj);
}
}
if (testDesign.observers.Contains(obj))
{
testDesign.RemoveObserver(obj);
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.dispense: // 排液
{
var obj = method.control as DispenseProperty;
if (obj != null)
{
if (liquidManagement != null)
{
if (liquidManagement.observers.Contains(obj))
{
liquidManagement.RemoveObserver(obj);
}
}
if (testDesign.observers.Contains(obj))
{
testDesign.RemoveObserver(obj);
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.mixing: // 混合
{
var obj = method.control as MixProperty;
if (obj != null)
{
if (liquidManagement != null)
{
if (liquidManagement.observers.Contains(obj))
{
liquidManagement.RemoveObserver(obj);
}
}
if (testDesign.observers.Contains(obj))
{
testDesign.RemoveObserver(obj);
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.dilution: // 梯度稀释
{
var obj = method.control as DilutionProperty;
if (obj != null)
{
if (liquidManagement != null)
{
if (liquidManagement.observers.Contains(obj))
{
liquidManagement.RemoveObserver(obj);
}
}
if (testDesign.observers.Contains(obj))
{
testDesign.RemoveObserver(obj);
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
case (int)MethodNameEnum.waitFor: // 梯度稀释
{
var obj = method.control as WaitforProperty;
if (obj != null)
{
if (testDesign.observerTimers.Contains(obj))
{
testDesign.RemoveObserver(obj);
}
}
else
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
}
break;
default:
{
if (method.Children.Count > 0)
{
foreach (var m in method.Children)
{
SetObserverNode(m);
}
}
}
break;
}
}
#region 保存实验
///
/// 保存实验
///
private void SaveTest()
{
if (string.IsNullOrEmpty(CurWorkFlowName))
{
Window wnd = Application.Current.MainWindow;
Grid grid = Utilities.FindVisualChild(wnd);
SaveMethodDlg saveDlg = new SaveMethodDlg();
saveDlg.closeEvent += SubWnd_closeEvent;
saveDlg.saveEvent += SaveDlg_saveEvent;
grid.Children.Add(saveDlg);
}
else
{
//PlsToolTipWin plsToolTipWin = new PlsToolTipWin("Do you want to cover this workflow?");
PlsToolTipWin plsToolTipWin = new PlsToolTipWin("保存当前实验流程?");
plsToolTipWin.Height = this.ActualHeight;
plsToolTipWin.Width = this.ActualWidth;
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)
{
SaveWorkflow(CurWorkFlowName);
}
}
}
#endregion
#endregion
#region 主菜单——保存事件
private void SaveDlg_saveEvent(object sender, EventArgs e)
{
SaveMethodDlg saveDlg = (SaveMethodDlg)sender;
CurWorkFlowName = saveDlg.methodFullPath;
SaveWorkflow(CurWorkFlowName);
Window wnd = Application.Current.MainWindow;
Grid grid = Utilities.FindVisualChild(wnd);
UIElement element = sender as UIElement;
grid.Children.Remove(element);
}
#endregion
#region 主菜单——保存实验流程方法
///
/// 主菜单——保存实验流程方法
///
/// 保存的全路径
/// 是否另存
private void SaveWorkflow(string name, bool isSaveAs = false)
{
// 构建xml信息
XmlHelper xmlHelper = new XmlHelper();
xmlHelper.xmlDoc = testDesign.GenerateLaunchXmlDocument();
//// 流程运行前备份env数据
//xmlEnvBak = xmlHelper.xmlDoc.SelectSingleNode("root/env").Clone();
// 保存方法xml对象
bool bIsOk = xmlHelper.SaveXml(name);
if (bIsOk)
{
ShowTip.ShowNotice(string.Format("{0}成功{1}{2}", isSaveAs ? "另存" : "保存", Environment.NewLine, name), InfoType.Success);
CurWorkFlowName = name;
tbCaption.Text = Properties.Resources.strXHandler + " - " + CurWorkFlowName;
Experiment experimentList = new Experiment();
experimentList.experimentid = DateTime.Now.ToString("yyyyMMddHHmmss");
string strNameOfFile = CurWorkFlowName.Substring(CurWorkFlowName.LastIndexOf('\\') + 1, CurWorkFlowName.Length - CurWorkFlowName.LastIndexOf('\\') - 1);
experimentList.experimentname = strNameOfFile.Substring(0, strNameOfFile.LastIndexOf("."));
experimentList.experimentxmlcontent = xmlHelper.xmlDoc.InnerXml.ToString();
experimentList.experimentfile = name;
experimentList.createtime = DateTime.Now;
experimentList.status = 1;
experimentList.updatetime = DateTime.Now;
ExperimentListDB.AddExperiment(experimentList);
}
else
{
ShowTip.ShowNotice(string.Format("{0}失败{1}{2}", isSaveAs ? "另存" : "保存", Environment.NewLine, name), InfoType.Warning);
}
}
#endregion
#region 主菜单——新建事件
private void btnNew_Click(object sender, RoutedEventArgs e)
{
if (btnLiquidManager.IsChecked == true)
{
Window wnd = Application.Current.MainWindow;
Grid parent = Utilities.FindVisualChild(wnd);
NewLiquid newLiquid = new NewLiquid();
newLiquid.closeEvent += SubWnd_closeEvent;
newLiquid.mainWindow = this;
//newLiquid.OKEvent += NewLiquidType_OKEvent;
parent.Children.Add(newLiquid);
}
else if (btnConsumableManager.IsChecked == true)
{
Window wnd = Application.Current.MainWindow;
Grid parent = Utilities.FindVisualChild(wnd);
NewConsumable newConsumable = new NewConsumable();
newConsumable.closeEvent += SubWnd_closeEvent;
newConsumable.OKEvent += NewConsumable_OKEvent;
parent.Children.Add(newConsumable);
}
else if (btnBacteriaManager.IsChecked == true)
{
Window wnd = Application.Current.MainWindow;
Grid parent = Utilities.FindVisualChild(wnd);
NewBacteria newBacteria = new NewBacteria();
newBacteria.closeEvent += SubWnd_closeEvent;
newBacteria.OKEvent += NewBacteria_OKEvent;
parent.Children.Add(newBacteria);
}
else if (btnTabletop.IsChecked == true) //新建台面模板
{
Window wnd = Application.Current.MainWindow;
Grid parent = Utilities.FindVisualChild(wnd);
NewTabletopTemplate newTabletopTemplate = new NewTabletopTemplate();
newTabletopTemplate.closeEvent += SubWnd_closeEvent;
newTabletopTemplate.OKEvent += NewTabletopTemplate_OKEvent;
parent.Children.Add(newTabletopTemplate);
}
else if (btnTestDesign.IsChecked == true)
{
if (testDesign.rootMethod.Children.Count > 3)
{
PlsToolTipWin plsToolTipWin = new PlsToolTipWin("当前实验未保存,是否保存?");
plsToolTipWin.Height = this.ActualHeight;
plsToolTipWin.Width = this.ActualWidth;
SolidColorBrush mybtn1_Brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(70, 0, 0, 0));
plsToolTipWin.Background = (System.Windows.Media.Brush)mybtn1_Brush;
plsToolTipWin.ShowDialog();
if (plsToolTipWin.DialogResult == true)
{
SaveTest();
}
else
{
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
}
}
testDesign = new TestDesign();
gridContent.Children.Add(testDesign);
tbCaption.Text = Properties.Resources.strXHandler;
CurWorkFlowName = string.Empty;
if (consumableManagement != null)
{
consumableManagement.observers.Clear();
}
}
}
#endregion
#region 主菜单——新建菌落界面确定按钮事件
private void NewBacteria_OKEvent(object sender, CustomRoutedEventArgs e)
{
string name = e.param as string;
Bacteria bacteria = bacteriaManagement.AddNewBacteria(name);
if (bacteria != null)
{
bacteriaManagement.listboxBacteria.SelectedItem = bacteria;
}
SubWnd_closeEvent(sender, null);
}
#endregion
#region 主菜单——新建台面模板界面确定按钮事件
private void NewTabletopTemplate_OKEvent(object sender, CustomRoutedEventArgs e)
{
string name = e.param as string;
TabletopTemplate tabletopTemplate = tabletopManagement.AddNewTabletopTemplate(name);
if (tabletopTemplate != null)
{
tabletopManagement.lbxTabletopList.SelectedItem = tabletopTemplate;
}
SubWnd_closeEvent(sender, null);
}
#endregion
#region 主菜单——检查方法属性事件
private void btnCheck_Click(object sender, RoutedEventArgs e)
{
firstPagePressed = false;
btnStartFirstPage.IsChecked = false;
btnFirst.Visibility = Visibility.Hidden;
btnUserManager.IsChecked = false;
btnUser.Visibility = Visibility.Hidden;
if (btnTestDesign.IsChecked == true)
{
XmlHelper xmlHelper = new XmlHelper();
//从方法中获取列表方法,并构建xml进行保存
xmlHelper.xmlDoc = testDesign.GenerateLaunchXmlDocument();
MethodListBll methodListBll = new MethodListBll();
DataCheckResult dr = methodListBll.CheckWorkFlow(xmlHelper.xmlDoc);
if (dr.result == 1)
{
string strError = string.Empty;
for (int i = 0; i < dr.errorlist.Count; i++)
{
if (i == dr.errorlist.Count - 1)
{
strError += dr.errorlist[i];
}
else
{
strError += dr.errorlist[i] + "\r\n";
}
}
if (testDesign.checkPropertyBreak == true)
{
testDesign.checkPropertyBreak = false;
}
else
{
PlsSetProperty plsSetProperty = new PlsSetProperty(strError);
plsSetProperty.closeEvent += PlsSetProperty_closeEvent;
Window wnd = Application.Current.MainWindow;
Grid parent = Utilities.FindVisualChild(wnd);
parent.Children.Add(plsSetProperty);
}
}
}
}
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);
}
#endregion
#region 模拟运行
public void btnSimulator_Click(object sender, RoutedEventArgs e)
{
EnableSimulator = true;
if (btnTestDesign.IsChecked == true)
{
ShowRunResult();
btnOpen.IsEnabled = false;
}
}
#endregion
#region 真实运行
public void btnRun_Click(object sender, RoutedEventArgs e)
{
//if (connectedEquip)
{
EnableSimulator = false;
if (btnTestDesign.IsChecked == true)
{
ShowRunResult();
}
btnOpen.IsEnabled = false;
}
//else
//{
// PlsToolTipWin plsToolTipWin = new PlsToolTipWin("设备未连接!");
// plsToolTipWin.Height = this.ActualHeight;
// plsToolTipWin.Width = this.ActualWidth;
// SolidColorBrush mybtn1_Brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(70, 0, 0, 0));
// plsToolTipWin.Background = (System.Windows.Media.Brush)mybtn1_Brush;
// plsToolTipWin.btnCancel.Visibility = Visibility.Hidden;
// plsToolTipWin.ShowDialog();
//}
}
#endregion
#region 运行界面显示
public void ShowRunResult()
{
// 添加运行的内容
MethodEx method = testDesign.GetWorkFlow();
if (method == null)
{
return;
}
XmlHelper xmlHelper = new XmlHelper();
// 从方法中获取列表方法,并构建xml进行保存
xmlHelper.xmlDoc = testDesign.GenerateLaunchXmlDocument();
// 保存住非运行的内容
if (gridMainContent.Children.Count > 0)
{
uIElement = gridMain;
//gridMainContent.Children.RemoveAt(gridMainContent.Children.Count - 1);
gridMainContent.Children.RemoveAt(0);
}
List list = testDesign.GetLabwaresOnTable();
if (RunWnd.hadRun)
{
if (EnableSimulator)
{
runWnd.tbxRunTitle.Text = "模拟运行";
}
else
{
runWnd.tbxRunTitle.Text = "真机运行";
}
// gridMainContent.Children.Add(runWnd);
gridMainContent.Children.Insert(0, runWnd);
return;
}
runWnd = new RunWnd(list, method, EnableSimulator, xmlHelper.xmlDoc);
runWnd.mainWindow = this;
if (EnableSimulator)
{
//runWnd.tbxRunTitle.Text = "模拟运行";
}
// gridMainContent.Children.Add(runWnd);
gridMainContent.Children.Insert(0, runWnd);
}
#endregion
#region 运行时最新的methode的xml对象
///
/// 运行时最新的methode的xml对象
///
///
public XmlDocument RefreshRunXml()
{
XmlHelper xmlHelper = new XmlHelper();
//从方法中获取列表方法,并构建xml进行保存
xmlHelper.xmlDoc = testDesign.GenerateLaunchXmlDocument();
return xmlHelper.xmlDoc;
}
#endregion
#region 刷新显示界面
public void RefreshRunResult()
{
// 添加运行的内容
MethodEx method = testDesign.GetWorkFlow();
if (method == null)
{
return;
}
XmlHelper xmlHelper = new XmlHelper();
// 从方法中获取列表方法,并构建xml进行保存
xmlHelper.xmlDoc = testDesign.GenerateLaunchXmlDocument();
// 保存住非运行的内容
if (gridMainContent.Children.Count > 0)
{
uIElement = gridMain;
}
if (runWnd != null)
{
List list = testDesign.GetLabwaresOnTable();
runWnd.RunWndRefresh(list, method, EnableSimulator, xmlHelper.xmlDoc);
}
}
#endregion
#region 新建耗材点击ok事件
private void NewConsumable_OKEvent(object sender, CustomRoutedEventArgs e)
{
Labware labware = e.param as Labware;
consumableManagement.AddNewLabware(labware);
SetObserverNode(testDesign.rootMethod);
consumableManagement.Update();
SubWnd_closeEvent(sender, null);
}
#endregion
#region 用户管理close事件
private void SubContent_closeEvent(object sender, EventArgs e)
{
UIElement element = sender as UIElement;
gridContent.Children.Remove(element);
}
#endregion
#region 保存方法 输入方法名Dialog取消事件
private void SubWnd_closeEvent(object sender, EventArgs e)
{
Window wnd = Application.Current.MainWindow;
Grid grid = Utilities.FindVisualChild(wnd);
UIElement element = sender as UIElement;
grid.Children.Remove(element);
}
#endregion
#region 主菜单——打开界面按钮事件
public bool isOpenning = false;//是否正打开实验
private void btnOpen_Click(object sender, RoutedEventArgs e)
{
methodExes.Clear();
methodExesForGroup.Clear();
try
{
if (btnLiquidManager.IsChecked == true)
{
// 打开文件加载液体配置
}
else if (btnConsumableManager.IsChecked == true)
{
// 打开文件加载耗材配置
}
else if (btnTestDesign.IsChecked == true)
{
#region 打开界面
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "选择一个文件";
openFileDialog.Multiselect = false;
openFileDialog.Filter = @"method文件|*.xmed|所有文件|*.*";
if (openFileDialog.ShowDialog(this) == true)
{
isOpenning = true;
rootGridTitle.RowDefinitions[1].Height = new GridLength(3);
//pBarProgress.IsIndeterminate = true;
//pBarProgress.Value = 0;
//this.Cursor = Cursors.Wait;
Mouse.OverrideCursor = Cursors.Wait;
#region 清空设计区
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (testDesign != null)
{
foreach (Canvas canvas in testDesign.gridTable.Children)
{
if (canvas != null)
{
for (int i = canvas.Children.Count - 1; i > 0; i--)
{
string objectName = canvas.Children[i].GetType().Name;
if (objectName == "ControlLabware")
{
if ((canvas.Children[i] as ControlLabware).IsTrash)
{
}
else
{
//if(Shared.SoftwareInformation.software_device_number.Equals(DeviceCategory.DeviceHXELEC))
//{
// if(canvas.Name.Equals("P1"))
// {
// continue;
// }
//}
canvas.Children.RemoveAt(i);
}
}
else
{
canvas.Children.RemoveAt(i);
}
}
canvas.Tag = null;
}
}
ObservableCollection methods = MethodDB.GetMethodFromdb(Shared.SoftwareInformation.software_device_number);
testDesign.InitializeWorkFlow(methods);
}
else
{
testDesign = new TestDesign();
}
gridContent.Children.Add(testDesign);
if (consumableManagement != null)
{
consumableManagement.observers.Clear();
}
#endregion
CurWorkFlowName = string.Empty;
CurWorkFlowName = openFileDialog.FileName;
tbCaption.Text = Properties.Resources.strXHandler + " - " + CurWorkFlowName;
#region 绑定数据
XmlHelper xmlHelper = new XmlHelper();
xmlHelper.xmlDoc.Load(CurWorkFlowName);
//UpdateProgress(pBarProgress, 1);
// 绑定台面
BindSetLatticesDataOnUI(xmlHelper.xmlDoc);
//UpdateProgress(pBarProgress, 2);
//Task.Run(() =>
//{
// 绑定命令集
BindWorkFlowIntoTree(xmlHelper.xmlDoc);
//});
// 流程运行前备份env数据
//xmlEnvBak = xmlHelper.xmlDoc.SelectSingleNode("root/env").Clone();
#endregion
}
#endregion
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
finally
{
//this.Cursor = Cursors.Arrow;
//rootGridTitle.RowDefinitions[1].Height = new GridLength(0);
}
}
#endregion
#region 更新进度条进度值
public void UpdateProgress(int newValue)
{
// 更新UI元素时需要确保是在UI线程中执行
this.Dispatcher.Invoke(() =>
{
pBarProgress.Value = newValue;
});
}
#endregion
#region 在实验列表功能中,选中一个方法打开
public void OpenAndLoadMethod(string fileContent)
{
try
{
//#region 清空设计区
//if (gridContent.Children.Count > 0)
// gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
//testDesign = new TestDesign();
//gridContent.Children.Add(testDesign);
//#endregion
#region 清空设计区
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
if (testDesign != null)
{
foreach (Canvas canvas in testDesign.gridTable.Children)
{
if (canvas != null)
{
for (int i = canvas.Children.Count - 1; i > 0; i--)
{
string objectName = canvas.Children[i].GetType().Name;
if (objectName == "ControlLabware")
{
if ((canvas.Children[i] as ControlLabware).IsTrash)
{
}
else
{
canvas.Children.RemoveAt(i);
}
}
else
{
canvas.Children.RemoveAt(i);
}
}
canvas.Tag = null;
}
}
ObservableCollection methods = MethodDB.GetMethodFromdb(Shared.SoftwareInformation.software_device_number);
testDesign.InitializeWorkFlow(methods);
}
else
{
testDesign = new TestDesign();
}
gridContent.Children.Add(testDesign);
if (consumableManagement != null)
{
consumableManagement.observers.Clear();
}
#endregion
XmlHelper xmlHelper = new XmlHelper();
xmlHelper.xmlDoc.LoadXml(fileContent);
//绑定台面
BindSetLatticesDataOnUI(xmlHelper.xmlDoc);
//绑定命令集
BindWorkFlowIntoTree(xmlHelper.xmlDoc);
}
catch (Exception ex)
{
}
}
#endregion
#region 绑定台面
public void BindSetLatticesDataOnUI(XmlDocument xmlDocument)
{
XmlNodeList xmlNodeList = xmlDocument.SelectNodes("root/env/platform");
object sender = new object();
RoutedEventArgs e = new RoutedEventArgs();
foreach (XmlNode xmlNode in xmlNodeList)
{
// 获取板子信息,克隆数据添加到板位上
//Labware labware = LabwareDB.GetLabware();
if (xmlNode.SelectNodes("labware") == null)
{
continue;
}
BindLabwareIntoLattice(xmlNode);
}
}
public void BindLabwareIntoLattice(XmlNode xmlNode)
{
if (testDesign == null)
return;
for (int i = 0; i < testDesign.gridTable.Children.Count; i++)
{
//一个存放Canvas的DataContext的集合对象
Stack labwareExes = new Stack();
Canvas canvas = ((Canvas)testDesign.gridTable.Children[i]);
int lapid = 0;
TabletopTemplate tabletopTemplate = TabletopTemplateDB.GetCurrentAppTabletopTemplateCollectionFromdb(); //增加台面模板判断
if (tabletopTemplate == null)
{
lapid = ControlCom.GetLatticeId(Convert.ToInt32(xmlNode.SelectSingleNode("lattice_id").InnerText));
}
else
{
string latticeNumber = "P" + xmlNode.SelectSingleNode("lattice_id").InnerText;
lapid = Convert.ToInt32(LatticeDB.GetLatticeDataByLatticeNumAndTempIdFromdb(latticeNumber, Convert.ToInt32(Shared.DeviceArmList.FirstOrDefault(x => x.arm_type.Equals(1)).device_arm_id), Shared.SoftwareInformation.software_device_number, tabletopTemplate.tabletopid).lattice_id);
}
string latticeNum = LatticeDB.GetLatticeDataByIdFromdb(lapid.ToString()).lattice_num;
int isTrash = (int)LatticeDB.GetLatticeDataByIdFromdb(lapid.ToString()).is_trash;
if (isTrash == 1)
{
continue;
}
if (((canvas.Children[0] as Border).Child as TextBlock).Text == latticeNum)
{
XmlNodeList labwareXmlNodeList = xmlNode.SelectNodes("labware");
for (int j = 0; j < labwareXmlNodeList.Count; j++)
{
string labwareId = labwareXmlNodeList[j].SelectSingleNode("labware_id").InnerText;
Labware labware = LabwareDB.GetLabware(labwareId);
if (labware != null)
{
if (labware.labware_type_id.Equals("4"))
{
labware.labwareWellInfoList = DataRWDAL.LabwareDB.GetSpecialLabwareWellInfo(labware.labware_id);
}
}
labware.labware_sname = labwareXmlNodeList[j].SelectSingleNode("labware_sname").InnerText;
if (labwareXmlNodeList[j].SelectSingleNode("labware_barcode") != null)
{
labware.labware_barcode = labwareXmlNodeList[j].SelectSingleNode("labware_barcode").InnerText;
}
if (string.IsNullOrEmpty(labware.labware_id))
{
continue;
}
Labware lbe = labware;
ControlLabware control = new ControlLabware();
//if (isTrash == 1)
//{
// ControlLabware cl = new ControlLabware()
// {
// IsTrash = true,
// LabwareName = Properties.Resources.strTrash.ToString()
// //LabwareName = string.Format("垃{0}圾{0}桶", Environment.NewLine)
// };
// LabwareEx lb = new LabwareEx();
// lb.labware_name = Properties.Resources.strTrash;
// //lb.labware_name = string.Format("垃{0}圾{0}桶", Environment.NewLine);
// lb.row = Grid.GetRow(canvas);
// lb.col = Grid.GetColumn(canvas);
// canvas.DataContext = lb;
// canvas.Children.Add(cl);
//}
//else
//{
control.LeftSideColor = ComUtility.RGBToColor(lbe.labware_color_lside); // 侧面
control.FrontColor = ComUtility.RGBToColor(lbe.labware_color_front); // 前斜面
control.TopColor = ComUtility.RGBToColor(lbe.labware_color_top); // 正上
control.BorderColor = ComUtility.RGBToColor(lbe.labware_color_line); // 边线
control.AllowDrop = true;
if (lbe.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.CircularDish).ToString()) // 圆形皿
{
control.LabwareWidth = canvas.ActualWidth;
control.LabwareHeight = canvas.ActualHeight;// canvas.ActualWidth*50/90;
//LabwareDeep = 8,
control.Rows = (int)lbe.number_row;
control.Columns = (int)lbe.number_column;
control.WellColor = Colors.White;
control.IsFill = true;
control.Label = latticeNum;
control.LabwareType = Convert.ToInt16(lbe.labware_type_id);
control.LabwareName = lbe.labware_name;
control.Barcode = lbe.labware_barcode;
control.Width = canvas.ActualWidth;
control.Height = canvas.ActualHeight + 4;
}
else
{
if (tabletopTemplate == null)
{
control.LabwareWidth = 126.46153846153845;//canvas.ActualWidth;
control.LabwareHeight = 48;//canvas.ActualHeight;
}
else
{
control.LabwareWidth = canvas.Width;
control.LabwareHeight = canvas.Height;
}
control.Rows = (int)lbe.number_row;
control.Columns = (int)lbe.number_column;
control.WellColor = Colors.White;
control.IsFill = true;
if (!string.IsNullOrEmpty(lbe.labware_sname))
{
control.Label = lbe.labware_sname;
}
else
{
control.Label = latticeNum;
}
if (!string.IsNullOrEmpty(lbe.labware_barcode))
{
control.Barcode = lbe.labware_barcode;
}
else
{
control.Barcode = "";
}
control.LabwareType = Convert.ToInt16(lbe.labware_type_id);
control.LabwareName = lbe.labware_name;
if (lbe.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Tube).ToString()) //管架
{
control.LabwareRealLength = lbe.labware_length;
control.LabwareRealWidth = lbe.labware_width;
control.labwareWellInfoList = lbe.labwareWellInfoList;
}
if (lbe.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Electrophoto).ToString()) //电泳板位
{
control.LabwareRealLength = lbe.labware_length;
control.LabwareRealWidth = lbe.labware_width;
control.labwareWellInfoList = lbe.labwareWellInfoList;
}
}
control.ValidWells =
labwareXmlNodeList[j].SelectSingleNode("residueValidWells").InnerText =
labwareXmlNodeList[j].SelectSingleNode("allValidWells").InnerText;
Canvas.SetLeft(control, 0);
if (lbe.labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Electrophoto).ToString()) //电泳切胶槽
{
Canvas.SetTop(control, 0);
}
else
{
Canvas.SetBottom(control, 0);
}
LabwareEx lb = new LabwareEx(lbe);
lb.row = Grid.GetRow(canvas);
lb.col = Grid.GetColumn(canvas);
lb.label = lbe.labware_sname;
lb.position = canvas.Name;
lb.validWells = control.ValidWells;
canvas.DataContext = lb;
if (canvas.Tag != null)
{
if (canvas.Tag.GetType().Name == "TabletopRelLattice")
{
}
else
{
labwareExes = (Stack)canvas.Tag;
}
}
if (labwareExes != null)
{
}
else
{
labwareExes = new Stack();
}
labwareExes.Push(lb);
canvas.Tag = labwareExes;
//根据重叠的层级,设置margin,用的是下层的耗材数据计算
double leftMargin = 0;//离左侧距离
double bottomMargin = 0;//离底部距离
for (int k = 0; k < canvas.Children.Count; k++)
{
ControlLabware a = canvas.Children[k] as ControlLabware;
if (a != null)
{
leftMargin += a.LabwareDeep;
bottomMargin += a.LabwareDeep;
}
}
control.Margin = new Thickness(leftMargin, 0, 0, bottomMargin);
canvas.Children.Add(control);
control.SetValidWells(control.ValidWells);
//如果是第二及其以上耗材,要隐藏标签
if (labwareExes.Count > 1)
{
control.Label = "";
}
else
{
}
//}
}
}
}
}
#endregion
List methodExes = new List();
MethodEx sourceItem = null;
List methodExesForGroup = new List();
#region 往Tree上绑定命令集
///
/// 往Tree上绑定命令集
///
///
public void BindWorkFlowIntoTree(XmlDocument xmlDocument)
{
//this.Dispatcher.Invoke(() =>
//{
Task.Run(() =>
{
try
{
//方法
XmlNodeList xmlNodeMethodList = xmlDocument.SelectNodes("root/method");
MethodListBll methodListBll = new MethodListBll();
this.Dispatcher.Invoke(() =>
{
MethodEx methodExLast = testDesign.rootMethod.Children[testDesign.rootMethod.Children.Count - 1];
testDesign.rootMethod.Children.RemoveAt(testDesign.rootMethod.Children.Count - 1);
//处理第一个节点
MethodStart methodStart = new MethodStart();
StartBll startBll = new StartBll();
methodStart = startBll.GenerateMethodStartDataByXmlNode(xmlNodeMethodList[0]);
MethodEx mi = testDesign.rootMethod.Children[0];
mi.tag = methodStart;
if (mi.control != null)
{
(mi.control as StartProperty).methodStart = methodStart;
}
//pBarProgress.IsIndeterminate = false;
pBarProgress.Maximum = xmlNodeMethodList.Count;// + 2;
});
//开始和结尾不要,其他的方法循环绑定数据
for (int i = 1; i < xmlNodeMethodList.Count; i++)
{
this.Dispatcher.Invoke(() =>
{
string MethodName = xmlNodeMethodList[i].SelectSingleNode("label").InnerText;
int iNum = methodListBll.getNumByMethodName(MethodName);
MethodEx methodEx = null;
switch (iNum)
{
case (int)MethodNameEnum.start:
//m = this.GenerateMethodEx(xmlNodeMethodList[i]);
//MethodStart methodStart = new MethodStart();
//StartBll startBll = new StartBll();
//methodStart = startBll.GenerateMethodStartDataByXmlNode(xmlNodeMethodList[i]);
//m.tag= methodStart;
//testDesign.rootMethod.Children.Add(m);
break;
case (int)MethodNameEnum.loadtips:
#region 安装吸头
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodLoadTips methodLoadTips = new MethodLoadTips();
LoadTipsBll loadTipsBll = new LoadTipsBll();
methodLoadTips = loadTipsBll.GenerateMethodLoadTipsDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodLoadTips;
if (methodLoadTips != null)
{
methodEx.method_Tipcontent = string.Format("安装{0}", methodLoadTips.labwaretipText);
}
methodEx.isEnabled = methodLoadTips.status == "enable";
testDesign.Method_LoadTips(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.unloadtips:
#region 卸载吸头
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodUnloadTips methodUnloadTips = new MethodUnloadTips();
UnloadTipsBll unloadTipsBll = new UnloadTipsBll();
methodUnloadTips = unloadTipsBll.GenerateMethodUnloadTipsDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodUnloadTips;
methodEx.isEnabled = methodUnloadTips.status == "enable";
testDesign.Method_UnloadTips(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.end:
#region 结束
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodEnd methodEnd = new MethodEnd();
EndBll endBll = new EndBll();
methodEnd = endBll.GenerateMethodEndDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodEnd;
methodEx.isEnabled = methodEnd.status == "enable";
methodEx.canDrop = false;
methodEx.Moveable = false;
testDesign.Method_End(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.loop:
#region 开始循环
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodLoop methodLoop = new MethodLoop();
LoopBll loopBll = new LoopBll();
methodLoop = loopBll.GenerateMethodLoopDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodLoop;
if (methodLoop != null)
{
methodEx.method_Tipcontent = string.Format("从{0}到{1},递增{2}", methodLoop.variablesValue.ToString(), methodLoop.variableeValue.ToString(), methodLoop.incrementValue.ToString());
}
methodEx.isEnabled = methodLoop.status == "enable";
testDesign.Method_Loop(methodEx);
//testDesign.rootMethod.Children.Add(m);
#endregion
break;
case (int)MethodNameEnum.endloop:
#region 结束循环
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
methodEx.Children[methodEx.Children.Count - 1].isEnabled = new LoopBll().GenerateMethodLoopDataByXmlNode(xmlNodeMethodList[i]).status == "enable";
if (methodExes.Count > 0)
{
if (methodExes[methodExes.Count - 1] != null)
{
sourceItem = null;
methodExes[methodExes.Count - 1] = null;
bool isAllNull = true;
//循环向前找,找到最后一个不为null的,设置为sourceItem
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
sourceItem = methodExes[k];
isAllNull = false;
break;
}
}
//如果向前找没有一个不为null的,则添加到tree;否则不添加
if (isAllNull)
{
testDesign.rootMethod.Children.Add(methodEx);
}
methodExes.RemoveAt(methodExes.Count - 1);
}
else
{
bool isAllNull = true;
int counAllNull = 0;//计算不为Null的个数
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
counAllNull++;
}
}
//循环向前找,找到最后一个不为null的,设置为null
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
sourceItem = null;
methodExes[k] = null;
isAllNull = false;
break;
}
}
//如果向前找没有一个不为null的,则添加到tree;否则不添加
if (isAllNull)
{
testDesign.rootMethod.Children.Add(methodEx);
}
else
{
if (counAllNull == 1)
{
testDesign.rootMethod.Children.Add(methodEx);
}
}
}
}
else
{
testDesign.rootMethod.Children.Add(methodEx);
sourceItem = null;
methodExes[methodExes.Count - 1] = null;
}
#endregion
break;
case (int)MethodNameEnum.aspirate:
#region 吸液
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodAspirate methodAspirate = new MethodAspirate();
AspirateBll aspirateBll = new AspirateBll();
methodAspirate = aspirateBll.GenerateMethodAspirateDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodAspirate;
if (methodAspirate != null)
{
methodEx.method_Tipcontent = string.Format("{0};{1}", methodAspirate.positionText, methodAspirate.wellvolume);
}
methodEx.isEnabled = methodAspirate.status == "enable";
testDesign.Method_Aspirate(methodEx);
//testDesign.treeviewWorkflow.SelectedItem = m;
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.dispense:
#region 排液
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodDispense methodDispense = new MethodDispense();
DispenseBll dispenseBll = new DispenseBll();
methodDispense = dispenseBll.GenerateMethodDispenseDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodDispense;
if (methodDispense != null)
{
methodEx.method_Tipcontent = string.Format("{0};{1}", methodDispense.positionText, methodDispense.wellvolume);
}
methodEx.isEnabled = methodDispense.status == "enable";
testDesign.Method_Dispense(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.mixing:
#region 混合
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodMixing methodMixing = new MethodMixing();
MixingBll mixingBll = new MixingBll();
methodMixing = mixingBll.GenerateMethodMixingDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodMixing;
if (methodMixing != null)
{
methodEx.method_Tipcontent = string.Format("{0};{1}", methodMixing.positionText, methodMixing.mixcount);
}
methodEx.isEnabled = methodMixing.status == "enable";
testDesign.Method_Mix(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.transferfile:
#region 文件
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodTransferFile methodTransferFile = new MethodTransferFile();
TransferFileBll transferFileBll = new TransferFileBll();
methodTransferFile = transferFileBll.GenerateMethodTransferFileDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodTransferFile;
methodEx.isEnabled = methodTransferFile.status == "enable";
testDesign.Method_File(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.griptransport:
#region 抓板转移
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodGripTransport methodGripTransport = new MethodGripTransport();
GripTransportBll gripTransportBll = new GripTransportBll();
methodGripTransport = gripTransportBll.GenerateMethodGripTransport(xmlNodeMethodList[i]);
methodEx.tag = methodGripTransport;
if (methodGripTransport != null)
{
methodEx.method_Tipcontent = string.Format("从{0}到{1}", methodGripTransport.srcPositionText, methodGripTransport.desPositionText);
}
methodEx.isEnabled = methodGripTransport.status == "enable";
testDesign.Method_GripTransport(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.gripmove:
#region 移动夹爪
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodGripMove methodGripMove = new MethodGripMove();
GripMoveBll gripMoveBll = new GripMoveBll();
methodGripMove = gripMoveBll.GenerateMethodGripMove(xmlNodeMethodList[i]);
methodEx.tag = methodGripMove;
methodEx.isEnabled = methodGripMove.status == "enable";
testDesign.Method_GripMove(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.holdingLabware:
#region 夹爪保持开始
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodHoldingLabware methodHoldingLabware = holdingLabwareBll.GenerateMethodBeginHoldingLabware(xmlNodeMethodList[i]);
methodEx.tag = methodHoldingLabware;
methodEx.isEnabled = methodHoldingLabware.status == "enable";
methodEx.method_Tipcontent = string.Format("从{0}抓板", methodHoldingLabware.srcPositionText);
testDesign.Method_HoldingLabware(methodEx);
#endregion
break;
case (int)MethodNameEnum.endHoldingLabware:
#region 夹爪保持结束
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodHoldingLabware endMethodHoldingLabware = holdingLabwareBll.GenerateMethodEndHoldingLabware(xmlNodeMethodList[i]);
methodEx.Children[methodEx.Children.Count - 1].tag = endMethodHoldingLabware;
methodEx.Children[methodEx.Children.Count - 1].isEnabled = endMethodHoldingLabware.status == "enable";
methodEx.Children[methodEx.Children.Count - 1].method_Tipcontent = string.Format("放板到{0}", endMethodHoldingLabware.desPositionText);
testDesign.Method_HoldingLabware(methodEx.Children[methodEx.Children.Count - 1]);
if (methodExes.Count > 0)
{
if (methodExes[methodExes.Count - 1] != null)
{
sourceItem = null;
methodExes[methodExes.Count - 1] = null;
bool isAllNull = true;
//循环向前找,找到最后一个不为null的,sourceItem
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
sourceItem = methodExes[k];
isAllNull = false;
break;
}
}
//如果向前找没有一个不为null的,则添加到tree;否则不添加
if (isAllNull)
{
testDesign.rootMethod.Children.Add(methodEx);
}
methodExes.RemoveAt(methodExes.Count - 1);
}
else
{
bool isAllNull = true;
int counAllNull = 0;//计算不为Null的个数
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
counAllNull++;
}
}
//循环向前找,找到最后一个不为null的,设置为null
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
sourceItem = null;
methodExes[k] = null;
isAllNull = false;
break;
}
}
//如果向前找没有一个不为null的,则添加到tree;否则不添加
if (isAllNull)
{
testDesign.rootMethod.Children.Add(methodEx);
}
else
{
if (counAllNull == 1)
{
testDesign.rootMethod.Children.Add(methodEx);
}
}
}
}
else
{
testDesign.rootMethod.Children.Add(methodEx);
sourceItem = null;
methodExes[methodExes.Count - 1] = null;
}
#endregion
break;
case (int)MethodNameEnum.home:
#region 复位
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodHome methodHome = new MethodHome();
HomeBll homeBll = new HomeBll();
methodHome = homeBll.GenerateMethodHome(xmlNodeMethodList[i]);
methodEx.tag = methodHome;
methodEx.isEnabled = methodHome.status == "enable";
testDesign.Method_Reset(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.pause:
#region 暂停
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodPauseMove methodPauseMove = new MethodPauseMove();
PauseMoveBll pauseMoveBll = new PauseMoveBll();
methodPauseMove = pauseMoveBll.GenerateMethodPauseMove(xmlNodeMethodList[i]);
methodEx.tag = methodPauseMove;
if (methodPauseMove != null)
{
methodEx.method_Tipcontent = string.Format("{0};{1}", methodPauseMove.pauseTime, methodPauseMove.pauseTipInfo);
}
methodEx.isEnabled = methodPauseMove.status == "enable";
testDesign.Method_Pause(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.remark:
#region 备注
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodRemark methodRemark = new MethodRemark();
CommentBll commentBll = new CommentBll();
methodRemark = commentBll.GenerateMethodRemark(xmlNodeMethodList[i]);
methodEx.tag = methodRemark;
if (methodRemark != null)
{
methodEx.method_Tipcontent = string.Format("{0}", methodRemark.title.ToString());
}
methodEx.isEnabled = methodRemark.status == "enable";
testDesign.Method_Comment(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.dataimport:
#region 数据导入
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodDataImport methodDataImport = new MethodDataImport();
DataImportBll dataImportBll = new DataImportBll();
methodDataImport = dataImportBll.GenerateMethodDataImportDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodDataImport;
methodEx.isEnabled = methodDataImport.status == "enable";
testDesign.Method_DataImport(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.dataexport:
#region 数据导出
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodDataExport methodDataExport = new MethodDataExport();
DataExportBll dataExportBll = new DataExportBll();
methodDataExport = dataExportBll.GenerateMethodDataExport(xmlNodeMethodList[i]);
methodEx.tag = methodDataExport;
methodEx.isEnabled = methodDataExport.status == "enable";
testDesign.Method_DataExport(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.group:
#region 组合
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodCombination methodCombination = new MethodCombination();
GroupBll groupBll = new GroupBll();
methodCombination = groupBll.GenerateMethodGroup(xmlNodeMethodList[i]);
methodEx.tag = methodCombination;
methodEx.isEnabled = methodCombination.status == "enable";
testDesign.Method_Group(methodEx);
#endregion
break;
case (int)MethodNameEnum.endgroup:
#region 结束组合
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
methodEx.Children[methodEx.Children.Count - 1].isEnabled = new GroupBll().GenerateMethodGroup(xmlNodeMethodList[i]).status == "enable";
if (methodExes.Count > 0)
{
if (methodExes[methodExes.Count - 1] != null)
{
sourceItem = null;
methodExes[methodExes.Count - 1] = null;
bool isAllNull = true;
//循环向前找,找到最后一个不为null的,sourceItem
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
sourceItem = methodExes[k];
isAllNull = false;
break;
}
}
//如果向前找没有一个不为null的,则添加到tree;否则不添加
if (isAllNull)
{
testDesign.rootMethod.Children.Add(methodEx);
}
methodExes.RemoveAt(methodExes.Count - 1);
}
else
{
bool isAllNull = true;
int counAllNull = 0;//计算不为Null的个数
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
counAllNull++;
}
}
//循环向前找,找到最后一个不为null的,设置为null
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
sourceItem = null;
methodExes[k] = null;
isAllNull = false;
break;
}
}
//如果向前找没有一个不为null的,则添加到tree;否则不添加
if (isAllNull)
{
testDesign.rootMethod.Children.Add(methodEx);
}
else
{
if (counAllNull == 1)
{
testDesign.rootMethod.Children.Add(methodEx);
}
}
}
}
else
{
testDesign.rootMethod.Children.Add(methodEx);
sourceItem = null;
methodExes[methodExes.Count - 1] = null;
}
#endregion
break;
case (int)MethodNameEnum.takephoto:
#region 拍照
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
if (Shared.SoftwareInformation.software_device_number.Equals(DeviceCategory.DeviceHXELEC))
{
MethodTakePhotoForElectro methodTakePhotoForElectro = new MethodTakePhotoForElectro();
TakePhotoBll takePhotoBll = new TakePhotoBll();
methodTakePhotoForElectro = takePhotoBll.GenerateMethodTakePhotoForElectroDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodTakePhotoForElectro;
methodEx.isEnabled = methodTakePhotoForElectro.status == "enable";
testDesign.Method_Capture(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
}
else
{
MethodTakePhoto methodTakePhoto = new MethodTakePhoto();
TakePhotoBll takePhotoBll = new TakePhotoBll();
methodTakePhoto = takePhotoBll.GenerateMethodTakePhotoDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodTakePhoto;
methodEx.isEnabled = methodTakePhoto.status == "enable";
testDesign.Method_Capture(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
}
#endregion
break;
case (int)MethodNameEnum.choice:
#region 挑选
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodChoice methodChoice = choiceBll.GenerateMethodChoiceDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodChoice;
methodEx.isEnabled = methodChoice.status == "enable";
testDesign.Method_Pick(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.coating:
#region 涂布
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodCoating methodCoating = coatingBll.GenerateMethodCoatingDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodCoating;
methodEx.isEnabled = methodCoating.status == "enable";
testDesign.Method_Coating(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.coatingfile:
#region 涂布文件
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodCoatingFile methodCoatingFile = new MethodCoatingFile();
CoatingFileBll coatingFileBll = new CoatingFileBll();
methodCoatingFile = coatingFileBll.GenerateMethodCoatingFileDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodCoatingFile;
methodEx.isEnabled = methodCoatingFile.status == "enable";
testDesign.Method_FileCoating(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.coatingReport:
#region 涂布报告
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodCoatingReport methodCoatingReport = new MethodCoatingReport();
CoatingReportBll coatingReportBll = new CoatingReportBll();
methodCoatingReport = coatingReportBll.GenerateMethodDataExport(xmlNodeMethodList[i]);
methodEx.tag = methodCoatingReport;
methodEx.isEnabled = methodCoatingReport.status == "enable";
testDesign.Method_CoatingFileExport(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.ultrasonic:
#region 超声探测
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodUltrasonic methodUltrasonic = new MethodUltrasonic();
UltrasonicBll ultrasonicBll = new UltrasonicBll();
methodUltrasonic = ultrasonicBll.GenerateMethodUltrasonicDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodUltrasonic;
methodEx.isEnabled = methodUltrasonic.status == "enable";
testDesign.Method_Ultrasonic(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.choiceTransfer:
#region 挑选转板
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodChoiceAndTransfer methodChoiceTransfer = choiceBll.GenerateMethodChoiceAndTransferDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodChoiceTransfer;
methodEx.isEnabled = methodChoiceTransfer.status == "enable";
testDesign.Method_PickAndTransfer(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.coatingTransfer:
#region 涂布转板
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodCoatingAndTransfer methodCoatingTransfer = coatingBll.GenerateMethodCoatingAndTransferDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodCoatingTransfer;
methodEx.isEnabled = methodCoatingTransfer.status == "enable";
testDesign.Method_CoatingAndTransfer(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.dilution:
#region 梯度稀释
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodDilution methodDilution = new MethodDilution();
DilutionBll dilutionBll = new DilutionBll();
methodDilution = dilutionBll.GenerateMethodDilutionDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodDilution;
methodEx.isEnabled = methodDilution.status == "enable";
testDesign.Method_Dilution(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.setVariable:
#region 设置变量
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodSetVariable methodSetVariable = new MethodSetVariable();
SetVariableBll setVariableBll = new SetVariableBll();
methodSetVariable = setVariableBll.GenerateMethodSetVariable(xmlNodeMethodList[i]);
methodEx.tag = methodSetVariable;
if (methodSetVariable != null)
{
methodEx.method_Tipcontent = string.Format("{0}={1}", methodSetVariable.variablename.ToString(), methodSetVariable.variablevalue.ToString());
}
methodEx.isEnabled = methodSetVariable.status == "enable";
testDesign.Method_SetVariable(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.VariableImport:
#region 文件导入变量
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodVariableImport methodVariableImport = new MethodVariableImport();
VariableImportBll variableImportBll = new VariableImportBll();
methodVariableImport = variableImportBll.GenerateMethodVariableImportDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodVariableImport;
methodEx.isEnabled = methodVariableImport.status == "enable";
testDesign.Method_VariableImport(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.ifStart:
#region 开始if
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodIfElse methodIfElse = new MethodIfElse();
IfElseBll ifElseBll = new IfElseBll();
methodIfElse = ifElseBll.GenerateMethodIfElseDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodIfElse;
if (methodIfElse != null)
{
string logicSymbol = string.Empty;
if (methodIfElse.logicCondition == LogicMark.Above)
{
logicSymbol = ">";
}
else if (methodIfElse.logicCondition == LogicMark.Below)
{
logicSymbol = "<";
}
else if (methodIfElse.logicCondition == LogicMark.Equal)
{
logicSymbol = "=";
}
else if (methodIfElse.logicCondition == LogicMark.Unequal)
{
logicSymbol = "!=";
}
else if (methodIfElse.logicCondition == LogicMark.AboveEqual)
{
logicSymbol = ">=";
}
else if (methodIfElse.logicCondition == LogicMark.BelowEqual)
{
logicSymbol = "<=";
}
methodEx.method_Tipcontent = string.Format("{0}{1}{2}", methodIfElse.variableName, logicSymbol, methodIfElse.variableValue);
}
methodEx.isEnabled = methodIfElse.status == "enable";
testDesign.Method_IfElse(methodEx);
#endregion
break;
case (int)MethodNameEnum.ifEnd:
#region 结束if
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
methodEx.Children[methodEx.Children.Count - 1].isEnabled = true;// new IfElseBll().GenerateMethodIfElseDataByXmlNode(xmlNodeMethodList[i]).status == "enable";
if (methodExes.Count > 0)
{
if (methodExes[methodExes.Count - 1] != null)
{
sourceItem = null;
methodExes[methodExes.Count - 1] = null;
bool isAllNull = true;
//循环向前找,找到最后一个不为null的,设置为sourceItem
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
sourceItem = methodExes[k];
isAllNull = false;
break;
}
}
//如果向前找没有一个不为null的,则添加到tree;否则不添加
if (isAllNull)
{
testDesign.rootMethod.Children.Add(methodEx);
}
methodExes.RemoveAt(methodExes.Count - 1);
}
else
{
bool isAllNull = true;
int counAllNull = 0;//计算不为Null的个数
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
counAllNull++;
}
}
//循环向前找,找到最后一个不为null的,设置为null
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
sourceItem = null;
methodExes[k] = null;
isAllNull = false;
break;
}
}
//如果向前找没有一个不为null的,则添加到tree;否则不添加
if (isAllNull)
{
testDesign.rootMethod.Children.Add(methodEx);
}
else
{
if (counAllNull == 1)
{
testDesign.rootMethod.Children.Add(methodEx);
}
}
}
}
else
{
testDesign.rootMethod.Children.Add(methodEx);
sourceItem = null;
methodExes[methodExes.Count - 1] = null;
}
#endregion
break;
case (int)MethodNameEnum.elseStart:
#region 开始if
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
methodIfElse = new MethodIfElse();
ifElseBll = new IfElseBll();
methodIfElse = ifElseBll.GenerateMethodIfElseDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodIfElse;
if (methodIfElse != null)
{
string logicSymbol = string.Empty;
if (methodIfElse.logicCondition == LogicMark.Above)
{
logicSymbol = ">";
}
else if (methodIfElse.logicCondition == LogicMark.Below)
{
logicSymbol = "<";
}
else if (methodIfElse.logicCondition == LogicMark.Equal)
{
logicSymbol = "=";
}
else if (methodIfElse.logicCondition == LogicMark.Unequal)
{
logicSymbol = "!=";
}
else if (methodIfElse.logicCondition == LogicMark.AboveEqual)
{
logicSymbol = ">=";
}
else if (methodIfElse.logicCondition == LogicMark.BelowEqual)
{
logicSymbol = "<=";
}
methodEx.method_Tipcontent = string.Format("{0}{1}{2}", methodIfElse.variableName, logicSymbol, methodIfElse.variableValue);
}
methodEx.isEnabled = methodIfElse.status == "enable";
testDesign.Method_IfElse(methodEx);
#endregion
break;
case (int)MethodNameEnum.elseEnd:
#region 结束if
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
methodEx.Children[methodEx.Children.Count - 1].isEnabled = true;//new IfElseBll().GenerateMethodIfElseDataByXmlNode(xmlNodeMethodList[i]).status == "enable";
if (methodExes.Count > 0)
{
if (methodExes[methodExes.Count - 1] != null)
{
sourceItem = null;
methodExes[methodExes.Count - 1] = null;
bool isAllNull = true;
//循环向前找,找到最后一个不为null的,设置为sourceItem
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
sourceItem = methodExes[k];
isAllNull = false;
break;
}
}
//如果向前找没有一个不为null的,则添加到tree;否则不添加
if (isAllNull)
{
testDesign.rootMethod.Children.Add(methodEx);
}
methodExes.RemoveAt(methodExes.Count - 1);
}
else
{
bool isAllNull = true;
int counAllNull = 0;//计算不为Null的个数
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
counAllNull++;
}
}
//循环向前找,找到最后一个不为null的,设置为null
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
sourceItem = null;
methodExes[k] = null;
isAllNull = false;
break;
}
}
//如果向前找没有一个不为null的,则添加到tree;否则不添加
if (isAllNull)
{
testDesign.rootMethod.Children.Add(methodEx);
}
else
{
if (counAllNull == 1)
{
testDesign.rootMethod.Children.Add(methodEx);
}
}
}
}
else
{
testDesign.rootMethod.Children.Add(methodEx);
sourceItem = null;
methodExes[methodExes.Count - 1] = null;
}
#endregion
break;
case (int)MethodNameEnum.timerSet:
#region 计时器
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodTimer methodTimer = new MethodTimer();
TimerBll timerBll = new TimerBll();
methodTimer = timerBll.GenerateMethodTimer(xmlNodeMethodList[i]);
methodEx.tag = methodTimer;
if (methodTimer != null)
{
methodEx.method_Tipcontent = string.Format("{0}s", methodTimer.duringTime.ToString());
}
methodEx.isEnabled = methodTimer.status == "enable";
testDesign.Method_Timer(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.waitFor:
#region 等待
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodWaitFor methodWaitFor = new MethodWaitFor();
WaitForBll waitForBll = new WaitForBll();
methodWaitFor = waitForBll.GenerateMethodTimer(xmlNodeMethodList[i]);
methodEx.tag = methodWaitFor;
methodEx.isEnabled = methodWaitFor.status == "enable";
testDesign.Method_WaitFor(methodEx, null);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.pumpDispense:
#region 泵排液
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodPumpDispese methodPumpDispese = new MethodPumpDispese();
PumpDispenseBll pumpDispenseBll = new PumpDispenseBll();
methodPumpDispese = pumpDispenseBll.GenerateMethodPumpDispenseDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodPumpDispese;
methodEx.isEnabled = methodPumpDispese.status == "enable";
testDesign.Method_PumpDispense(methodEx);
//testDesign.treeviewWorkflow.SelectedItem = m;
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.shaker:
#region 振荡
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodShake methodShake = new MethodShake();
ShakerBll shakerBll = new ShakerBll();
methodShake = shakerBll.GenerateMethodShakeDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodShake;
methodEx.isEnabled = methodShake.status == "enable";
testDesign.Method_Shake(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.switchLid:
#region 开关盖
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodSwitchLid methodSwitchLid = new MethodSwitchLid();
SwitchLidBll switchLidBll = new SwitchLidBll();
methodSwitchLid = switchLidBll.GenerateMethodSwitchLidDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodSwitchLid;
methodEx.isEnabled = methodSwitchLid.status == "enable";
testDesign.Method_SwitchLid(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.fileMoveLiquid:
#region 文件开关盖移液
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodFileMoveLiquid methodFileMoveLiquid = new MethodFileMoveLiquid();
FileMoveLiquidBll fileMoveLiquidBll = new FileMoveLiquidBll();
methodFileMoveLiquid = fileMoveLiquidBll.GenerateMethodFileMoveLiquidDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodFileMoveLiquid;
methodEx.isEnabled = methodFileMoveLiquid.status == "enable";
testDesign.Method_FileMoveLiquid(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.fileMoveLabware:
#region 文件转板
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodFileMoveLabware methodFileMoveLabware = new MethodFileMoveLabware();
FileMoveLabwareBll fileMoveLabwareBll = new FileMoveLabwareBll();
methodFileMoveLabware = fileMoveLabwareBll.GenerateMethodFileMoveLabwareDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodFileMoveLabware;
methodEx.isEnabled = methodFileMoveLabware.status == "enable";
testDesign.Method_FileMoveLabware(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.subMethod:
#region 子方法
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodSubMethod methodSubMethod = new SubMethodBll().GenerateMethodSubMethodDataByXmlNode(xmlNodeMethodList[i], true);
methodEx.tag = methodSubMethod;
methodEx.isEnabled = methodSubMethod.status == "enable";
testDesign.Method_SubMethod(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.varCalc:
#region 变量计算
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodVarCalc methodVarCalc = new MethodVarCalc();
VarCalcBll varCalcBll = new VarCalcBll();
methodVarCalc = varCalcBll.GenerateMethodVarCalcDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodVarCalc;
if (methodVarCalc != null)
{
string logicSymbol = string.Empty;
if (methodVarCalc.calcOperator == (int)CalcOperatorTypeEnum.Add)
{
logicSymbol = "+";
}
else if (methodVarCalc.calcOperator == (int)CalcOperatorTypeEnum.Minus)
{
logicSymbol = "-";
}
else if (methodVarCalc.calcOperator == (int)CalcOperatorTypeEnum.Time)
{
logicSymbol = "×";
}
else if (methodVarCalc.calcOperator == (int)CalcOperatorTypeEnum.Pide)
{
logicSymbol = "÷";
}
else if (methodVarCalc.calcOperator == (int)CalcOperatorTypeEnum.Mod)
{
logicSymbol = "%";
}
methodEx.method_Tipcontent = string.Format("{0}{1}{2}={3}", methodVarCalc.calcValue1.ToString(), logicSymbol, methodVarCalc.calcValue2.ToString(), methodVarCalc.calcResult.ToString());
}
methodEx.isEnabled = methodVarCalc.status == "enable";
testDesign.Method_VariableCalculate(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
case (int)MethodNameEnum.cutGum:
#region 文件切胶
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
MethodElectroFile methodElectroFile = new MethodElectroFile();
FileCutGumBll fileCutGumBll = new FileCutGumBll();
methodElectroFile = fileCutGumBll.GenerateMethodElectroFileDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodElectroFile;
methodEx.isEnabled = methodElectroFile.status == "enable";
testDesign.Method_FileElectro(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
#endregion
break;
default:
#region 第三方设备
if (xmlNodeMethodList[i].SelectSingleNode("isThirdPart") != null)
{
bool isThirdPart = bool.Parse(xmlNodeMethodList[i].SelectSingleNode("isThirdPart").InnerText);
if (!isThirdPart)
{
break;
}
methodEx = this.GenerateMethodEx(xmlNodeMethodList[i]);
ThirdPartBll thirdPartBll = new ThirdPartBll();
MethodThirdPart methodThirdPart = thirdPartBll.GenerateMethodThirdPartDataByXmlNode(xmlNodeMethodList[i]);
methodEx.tag = methodThirdPart;
methodEx.method_Tipcontent = string.Format("{0}", methodThirdPart.deviceMethod == null ? "" : methodThirdPart.deviceMethod.ParameterName);
methodEx.isEnabled = methodThirdPart.status == "enable";
testDesign.Method_ThirdPart(methodEx);
if (sourceItem == null)
{
testDesign.rootMethod.Children.Add(methodEx);
}
}
#endregion
break;
}
var mainWindow = (MainWindow)Application.Current.MainWindow;
if (mainWindow != null)
{
if (methodEx != null)
{
mainWindow.SetObserverNode(methodEx);
}
}
});
UpdateProgress(i);
Thread.Sleep(1); // 模拟耗时操作
}
this.Dispatcher.Invoke(() =>
{
testDesign.treeviewWorkflow.ItemsSource = testDesign.rootMethod.Children;
//
testDesign.ReOrderMethodIndex("", testDesign.rootMethod);
testDesign.updateWaitforOnWorkflow();
rootGridTitle.RowDefinitions[1].Height = new GridLength(0);
});
//启动一个定时器,1秒内更新一下界面
DispatcherTimer timerText = new DispatcherTimer();
timerText.Interval = TimeSpan.FromMilliseconds(1000);//1秒
timerText.Tick += timerText_Tick;
timerText.Start();
countOfLoad = 0;
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("BindWorkFlowIntoTree error", ex);
}
finally
{
isOpenning = false;
this.Dispatcher.Invoke(() =>
{
Mouse.OverrideCursor = null;
});
}
});
return;
}
#endregion
int countOfLoad = 0;
#region 定时器事件——检测是否在30分钟内持续操作了本软件,否则锁屏
private void timerText_Tick(object sender, EventArgs e)
{
if (countOfLoad == 0)
{
countOfLoad++;
testDesign.ReOrderMethodData(testDesign.rootMethod);
}
else
{
}
}
#endregion
#region 根据XmlNode创建MethodEx
public MethodEx GenerateMethodEx(XmlNode xmlNode)
{
MethodEx methodEx = null;
try
{
ObservableCollection methods = MethodDB.GetMethodFromdb(Shared.SoftwareInformation.software_device_number);
if (xmlNode.SelectSingleNode("label").InnerText == "start")
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("开始"));
if (currentMethod != null)
{
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
testDesign.rootMethod.Children.Add(methodEx);
}
}
#region 循环
else if (xmlNode.SelectSingleNode("label").InnerText == "循环开始")
{
if (methodExes.Count > 0)
{
if (methodExes[methodExes.Count - 1] != null)
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("循环"));
if (currentMethod != null)
{
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
//methodExes[methodExes.Count - 1] = methodEx;
methodExes.Add(methodEx);
sourceItem.Children.Add(methodEx);
methodEx.SetParent(sourceItem);
sourceItem = methodEx;
}
}
else
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("循环"));
if (currentMethod != null)
{
sourceItem = methodEx;
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
sourceItem = methodEx;
methodExes.Add(sourceItem);
}
}
}
else
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("循环"));
if (currentMethod != null)
{
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
sourceItem = methodEx;
methodExes.Add(sourceItem);
}
}
}
else if (xmlNode.SelectSingleNode("label").InnerText == "循环结束")
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("循环"));
if (currentMethod != null)
{
string id = Guid.NewGuid().ToString();
sourceItem.method_name += Properties.Resources.strBegin;
sourceItem.groupID = id;
MethodEx source = new MethodEx(sourceItem);
MethodEx endItem = new MethodEx(source, sourceItem);
endItem.groupID = id;
endItem.method_name = "循环" + Properties.Resources.strEnd;
endItem.method_ico = "循环结束.png";
endItem.Moveable = false;
endItem.method_Tipcontent = "";
sourceItem.Children.Add(endItem);
}
methodEx = sourceItem;
}
#endregion
#region 组合
else if (xmlNode.SelectSingleNode("label").InnerText == "组合开始")
{
if (methodExes.Count > 0)
{
if (methodExes[methodExes.Count - 1] != null)
{
Method currentMethod = methods.FirstOrDefault(x => x.method_content.Equals("组合"));
if (currentMethod != null)
{
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
methodExes.Add(methodEx);
sourceItem.Children.Add(methodEx);
methodEx.SetParent(sourceItem);
sourceItem = methodEx;
}
}
else
{
Method currentMethod = methods.FirstOrDefault(x => x.method_content.Equals("组合"));
if (currentMethod != null)
{
sourceItem = methodEx;
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
sourceItem = methodEx;
methodExes.Add(sourceItem);
}
}
}
else
{
Method currentMethod = methods.FirstOrDefault(x => x.method_content.Equals("组合"));
if (currentMethod != null)
{
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
sourceItem = methodEx;
methodExes.Add(sourceItem);
}
}
}
else if (xmlNode.SelectSingleNode("label").InnerText == "组合结束")
{
Method currentMethod = methods.FirstOrDefault(x => x.method_content.Equals("组合"));
if (currentMethod != null)
{
string id = Guid.NewGuid().ToString();
sourceItem.groupID = id;
MethodEx source = new MethodEx(sourceItem);
MethodEx endItem = new MethodEx(source, sourceItem);
endItem.groupID = id;
endItem.method_name = "组合" + Properties.Resources.strEnd;
endItem.method_ico = "组合结束.png";
endItem.Moveable = false;
sourceItem.Children.Add(endItem);
}
methodEx = sourceItem;
}
#endregion
#region 夹爪保持
else if (xmlNode.SelectSingleNode("label").InnerText == "夹爪保持开始")
{
if (methodExes.Count > 0)
{
if (methodExes[methodExes.Count - 1] != null)
{
Method currentMethod = methods.FirstOrDefault(x => x.method_content.Equals("夹爪保持"));
if (currentMethod != null)
{
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
methodExes.Add(methodEx);
sourceItem.Children.Add(methodEx);
methodEx.SetParent(sourceItem);
sourceItem = methodEx;
}
}
else
{
Method currentMethod = methods.FirstOrDefault(x => x.method_content.Equals("夹爪保持"));
if (currentMethod != null)
{
sourceItem = methodEx;
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
sourceItem = methodEx;
methodExes.Add(sourceItem);
}
}
}
else
{
Method currentMethod = methods.FirstOrDefault(x => x.method_content.Equals("夹爪保持"));
if (currentMethod != null)
{
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
sourceItem = methodEx;
methodExes.Add(sourceItem);
}
}
}
else if (xmlNode.SelectSingleNode("label").InnerText == "夹爪保持结束")
{
Method currentMethod = methods.FirstOrDefault(x => x.method_content.Equals("夹爪保持"));
if (currentMethod != null)
{
string id = Guid.NewGuid().ToString();
sourceItem.groupID = id;
MethodEx source = new MethodEx(sourceItem);
MethodEx endItem = new MethodEx(source, sourceItem);
endItem.groupID = id;
endItem.method_content = endItem.method_name = "夹爪保持" + Properties.Resources.strEnd;
endItem.method_ico = "夹爪保持结束.png";
endItem.Moveable = false;
sourceItem.Children.Add(endItem);
//methodEx = endItem;
}
methodEx = sourceItem;
}
#endregion
#region if开始
else if (xmlNode.SelectSingleNode("label").InnerText == "if开始")
{
if (methodExes.Count > 0)
{
if (methodExes[methodExes.Count - 1] != null)
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("条件判定"));
if (currentMethod != null)
{
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
//methodExes[methodExes.Count - 1] = methodEx;
methodEx.method_ico = "开始If.png";
methodEx.method_name = "if开始";
methodEx.method_content = "if开始";
methodExes.Add(methodEx);
sourceItem.Children.Add(methodEx);
methodEx.SetParent(sourceItem);
sourceItem = methodEx;
}
}
else
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("条件判定"));
if (currentMethod != null)
{
sourceItem = methodEx;
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
methodEx.method_ico = "开始If.png";
methodEx.method_name = "if开始";
methodEx.method_content = "if开始";
sourceItem = methodEx;
methodExes.Add(sourceItem);
}
}
}
else
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("条件判定"));
if (currentMethod != null)
{
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
methodEx.method_ico = "开始If.png";
methodEx.method_name = "if开始";
methodEx.method_content = "if开始";
sourceItem = methodEx;
methodExes.Add(sourceItem);
}
}
}
else if (xmlNode.SelectSingleNode("label").InnerText == "if结束")
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("条件判定"));
if (currentMethod != null)
{
string id = Guid.NewGuid().ToString();
sourceItem.method_ico = "开始If.png";
sourceItem.method_name = "if开始";
sourceItem.method_content = "if开始";
sourceItem.groupID = id;
MethodEx source = new MethodEx(sourceItem);
MethodEx endItem = new MethodEx(source, sourceItem);
endItem.groupID = id;
endItem.method_name = "if" + Properties.Resources.strEnd;
endItem.method_ico = "结束If.png";
endItem.Moveable = false;
sourceItem.Children.Add(endItem);
}
methodEx = sourceItem;
}
#endregion
#region else开始
else if (xmlNode.SelectSingleNode("label").InnerText == "else开始")
{
if (methodExes.Count > 0)
{
if (methodExes[methodExes.Count - 1] != null)
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("条件判定"));
if (currentMethod != null)
{
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
//methodExes[methodExes.Count - 1] = methodEx;
methodEx.method_ico = "开始else.png";
methodEx.method_name = "else开始";
methodEx.method_content = "else开始";
methodExes.Add(methodEx);
sourceItem.Children.Add(methodEx);
methodEx.SetParent(sourceItem);
sourceItem = methodEx;
}
}
else
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("条件判定"));
if (currentMethod != null)
{
sourceItem = methodEx;
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
methodEx.method_ico = "开始else.png";
methodEx.method_name = "else开始";
methodEx.method_content = "else开始";
sourceItem = methodEx;
methodExes.Add(sourceItem);
}
}
}
else
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("条件判定"));
if (currentMethod != null)
{
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
methodEx.method_ico = "开始else.png";
methodEx.method_name = "else开始";
methodEx.method_content = "else开始";
sourceItem = methodEx;
methodExes.Add(sourceItem);
}
}
}
else if (xmlNode.SelectSingleNode("label").InnerText == "else结束")
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals("条件判定"));
if (currentMethod != null)
{
string id = Guid.NewGuid().ToString();
sourceItem.method_ico = "开始else.png";
sourceItem.method_name = "else开始";
sourceItem.method_content = "else开始";
sourceItem.groupID = id;
MethodEx source = new MethodEx(sourceItem);
MethodEx endItem = new MethodEx(source, sourceItem);
endItem.groupID = id;
endItem.method_name = "else" + Properties.Resources.strEnd;
endItem.method_ico = "结束else.png";
endItem.Moveable = false;
sourceItem.Children.Add(endItem);
}
methodEx = sourceItem;
}
#endregion
#region 其它
else
{
Method currentMethod = methods.FirstOrDefault(x => x.method_name.Equals(xmlNode.SelectSingleNode("label").InnerText));
// 第三方设备名称变更后,可通过ID找出来
if (xmlNode.SelectSingleNode("isThirdPart") != null &&
bool.Parse(xmlNode.SelectSingleNode("isThirdPart").InnerText) && currentMethod == null)
{
currentMethod = methods.FirstOrDefault(x => x.method_id.Equals(xmlNode.SelectSingleNode("device/id").InnerText));
}
Method currentMethodEnd = methods.FirstOrDefault(x => x.method_name.Equals("结束"));
#region 常规方法
if (currentMethod != null)
{
methodEx = new MethodEx(currentMethod, testDesign.rootMethod);
//节点内容绑定
//methodEx.control
//判断是否还在循环内,如果还在,则取出最后一个添加
bool isInnerLoop = false;
for (int i = methodExes.Count - 1; i >= 0; i--)
{
if (methodExes[i] != null)
{
isInnerLoop = true;
break;
}
}
if (isInnerLoop)
{
for (int k = methodExes.Count - 1; k >= 0; k--)
{
if (methodExes[k] != null)
{
sourceItem = methodExes[k];
break;
}
}
if (sourceItem != null)
{
sourceItem.Children.Add(methodEx);
methodEx.SetParent(sourceItem);
}
}
else
{
if (sourceItem != null)
{
sourceItem.Children.Add(methodEx);
}
}
}
#endregion
#region 结束
else if (currentMethodEnd != null && xmlNode.SelectSingleNode("name").InnerText == "Method_End")
{
methodEx = new MethodEx(currentMethodEnd, testDesign.rootMethod);
if (sourceItem != null)
{
sourceItem.Children.Add(methodEx);
}
currentMethodEnd = null;
}
#endregion
}
#endregion
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
return methodEx;
}
#endregion
#region 另存为
private void btnSaveAs_Click(object sender, RoutedEventArgs e)
{
try
{
if (btnTestDesign.IsChecked == true)
{
string fileDir = string.Empty;
SaveFileDialog dlg = new SaveFileDialog();
dlg.Title = "另存为";
dlg.FileName = $"{DateTime.Now.ToString("yyyyMMddHHmmss")}.xmed"; // Default file name
dlg.DefaultExt = ".xmed"; // Default file extension
dlg.Filter = "method文件|*.xmed"; // Filter files by extension
dlg.InitialDirectory = System.AppDomain.CurrentDomain.BaseDirectory;
if (dlg.ShowDialog(this) == true)
{
SaveWorkflow(dlg.FileName, true);
}
}
else if (btnConsumableManager.IsChecked == true)
{
//consumableManagement.SaveConsumable();
//导出成文件
}
else if (btnLiquidManager.IsChecked == true)
{
//liquidManagement.SaveLiquid();
//导出成文件
}
else if (btnBacteriaManager.IsChecked == true)
{
//bacteriaManagement.SaveBacteria();
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#endregion
#region 首页按钮
bool firstPagePressed = false;//首页是否被按下
public void btnStartFirstPage_Click(object sender, RoutedEventArgs e)
{
firstPagePressed = true;
btnFirst.Visibility = Visibility.Visible;
btnUserManager.IsChecked = false;
btnUser.Visibility = Visibility.Collapsed;
if (gridMainContent.Children.Count > 0)
{
uIElement = gridMain;
// gridMainContent.Children.RemoveAt(gridMainContent.Children.Count - 1);
gridMainContent.Children.RemoveAt(0);
}
// gridMainContent.Children.Add(uIElement);
gridMainContent.Children.Insert(0, uIElement);
if (gridContent.Children.Count > 0)
gridContent.Children.RemoveAt(gridContent.Children.Count - 1);
List listBtn = ViewCom.GetChildObjects((DependencyObject)gdLeftImageList, typeof(ImageRadioButton));
if (listBtn.Count > 0)
{
foreach (ImageRadioButton i in listBtn)
{
if (i.IsChecked == true)
{
i.IsChecked = false;
}
}
}
if (deviceStatus == null)
{
deviceStatus = new DeviceStatus();
gridContent.Children.Add(deviceStatus);
}
else
{
gridContent.Children.Add(deviceStatus);
}
}
#endregion
#region 主窗体关闭事件
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
try
{
if (wasExecuteInitial)
{
// 断开设备底层连接
HxResult ret = MethodAction.Instance.ManualDispose();
#region 断开成像Socket
if (ConfigurationManager.AppSettings["openTakePhoto"].ToString() == "true" &&
socketTcpListener != null)
{
if (socketTcpListener.IsConnect() == true)
{
socketTcpListener.CloseConnect();
}
}
#endregion
#region 断开与设备的连接
// 停止服务端监听
SocketInteriorService.BreakConnect();
// 断开与设备的通讯
EquConnect.BreakDeviceConnect();
#endregion
}
Application.Current.Shutdown();
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#endregion
#region 控制面板
private async void btnControl_Click(object sender, RoutedEventArgs e)
{
try
{
ControlPanel controlPanel = new ControlPanel();
controlPanel.Owner = (Window)Shared.Main;
controlPanel.ShowDialog();
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#endregion
#region 暂停按钮
//int pauseState = 0;//1:暂停状态;0:正常状态
//private async void btnPause_Click(object sender, RoutedEventArgs e)
//{
// if (pauseState == 0)
// {
// pauseState = 1;
// runWnd.manualEvent.Reset();
// btnPause.Content = Properties.Resources.btnContinue.ToString();
// HxResult ret = MethodAction.Instance.StatusLamp(5);
// await Task.Factory.StartNew(() => MethodAction.Instance.Interrupt(1, true));
// }
// else
// {
// pauseState = 0;
// runWnd.manualEvent.Set();
// btnPause.Content = Properties.Resources.btnPause.ToString();
// HxResult ret = MethodAction.Instance.StatusLamp(4);
// await Task.Factory.StartNew(() => MethodAction.Instance.Interrupt(2));
// }
//}
#endregion
#region 断线重连
private void imgDeviceStatus_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (MethodAction.Instance != null)
{
if (!MethodAction.Instance.Connected)
{
HxResult ret = MethodAction.Instance.Connect();
if (ret.Result != ResultType.Success)
{
// 状态0 未链接 黄闪
ret = CommonBll.StatusLamp(0, false);
EnableSimulator = true;
connectedEquip = false;
OperateAuditLogDB.AddOperateAuditLogIntodb(operateAuditLogBll.GenerateOperateAuditLog("设备连接", "用户:" + Shared.User.username + "重新连接设备", Shared.User.username, "设备连接", "", "", "用户[id:" + Shared.User.username + "]", "失败"));
}
else
{
// 状态1 链接成功 蓝亮
ret = CommonBll.StatusLamp(1, false);
string TargetPath = "Assets/connect.png";
imgDeviceStatus.Source = new BitmapImage(new Uri(TargetPath, UriKind.Relative));
connectedEquip = true;
OperateAuditLogDB.AddOperateAuditLogIntodb(operateAuditLogBll.GenerateOperateAuditLog("设备连接", "用户:" + Shared.User.username + "重新连接设备", Shared.User.username, "设备连接", "", "", "用户[id:" + Shared.User.username + "]", "成功"));
// 连接设备初始化后
DoAfterInitDevice();
}
}
}
}
#endregion
#region 系统设置
SystemSettings systemSettings = null;
private void btnSettings_Click(object sender, RoutedEventArgs e)
{
systemSettings = new SystemSettings();
systemSettings.mainWindow = this;
systemSettings.observers.Clear();
SetObserverNode(testDesign.rootMethod);
systemSettings.ShowDialog();
}
#endregion
#region 关于
private void btnAbout_Click(object sender, RoutedEventArgs e)
{
SystemInformation systemInformation = new SystemInformation();
systemInformation.Width = 760;
systemInformation.Height = 410;
systemInformation.Owner = this;
systemInformation.ShowDialog();
}
#endregion
#region 事件接收函数
private void MainEvent(object sender, EventExArgs e)
{
// 显示设置报错Dialog
if (e.nType == EventEnum.ShowDeviceErrorDialg)
{
Application.Current.Dispatcher.Invoke(() =>
{
ErrorClientData errorData = (ErrorClientData)sender;
OperateDeviceDialog operateDeviceDialog = new OperateDeviceDialog(errorData);
operateDeviceDialog.ShowDialog();
EventBind.OperMark = operateDeviceDialog.OperMark; // 节点操作类型(1跳过、2重试、3终止)
SocketInteriorService.dicManualResetEvent[Shared.Exp.ExperimentId].Set();
});
}
}
#endregion
private void btnStartFirstPage_MouseEnter(object sender, MouseEventArgs e)
{
//RectangleGeometry rectangleGeometry = new RectangleGeometry(new Rect(0, 0, 70, 70), 5, 5);
//GeometryDrawing MaskDrawing = new GeometryDrawing(Brushes.White, null, rectangleGeometry);
//DrawingBrush drawingBrush = new DrawingBrush(MaskDrawing);
//btnStartFirstPage.OpacityMask = drawingBrush;
//drawingBrush.Stretch = Stretch.Fill;
//btnStartFirstPage.OpacityMask.Opacity = 0.8d;
}
private void btnStartFirstPage_MouseLeave(object sender, MouseEventArgs e)
{
//btnStartFirstPage.OpacityMask.Opacity = 1d;
}
private void UserControl_PreviewKeyDown(object sender, KeyEventArgs e)
{
}
}
}