using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using XImagingXhandler.XDAL; using System.Resources; using XCoreBLL.Resource; using System.Xml; using System.Xml.Linq; using System.Data; using DriverManager; using DriverLibrary; using DriverLib; using DriverLib.Engine; using System.Collections.ObjectModel; using XCommon.Log; using DataCalcDAL.Com; using DataEntity.Share; using XCommon; using HxEnum; namespace XCore { /// /// 吸液业务逻辑处理 /// public class DilutionBll { string strCurrentCulture = ""; WellCalc wellCalc = new WellCalc(); LatticeBll latticeBll = new LatticeBll(); public DilutionBll() { strCurrentCulture = System.Threading.Thread.CurrentThread.CurrentCulture.Name; } public MethodDilution GenerateMethodDilutionDataByXmlNode(XmlNode xmlNode) { MethodDilution methodDilution = new MethodDilution(); methodDilution.isrun = xmlNode.SelectSingleNode("isrun").InnerText; methodDilution.status = xmlNode.SelectSingleNode("status").InnerText; methodDilution.name = xmlNode.SelectSingleNode("name").InnerText; methodDilution.label = xmlNode.SelectSingleNode("label").InnerText; methodDilution.strIndex = xmlNode.SelectSingleNode("strIndex").InnerText; #region 机械臂 methodDilution.armText = xmlNode.SelectSingleNode("arm/text").InnerText; methodDilution.armValue = xmlNode.SelectSingleNode("arm/value").InnerText; methodDilution.headType = xmlNode.SelectSingleNode("headType").InnerText; string strchs = xmlNode.SelectSingleNode("channels").InnerText; // 从xml中获取通道数组值 methodDilution.channels = ComUtility.GetChannelsFromXml(strchs); #endregion #region 吸头盒 methodDilution.labwaretipText = xmlNode.SelectSingleNode("labwaretip/text").InnerText; methodDilution.labwaretipValue = xmlNode.SelectSingleNode("labwaretip/value").InnerText; #endregion #region 选择目标板 相关 methodDilution.positionTextGradientDilution = xmlNode.SelectSingleNode("position/text").InnerText; methodDilution.positionValueGradientDilution = xmlNode.SelectSingleNode("position/value").InnerText; methodDilution.labwareTextGradientDilution = xmlNode.SelectSingleNode("labware/text").InnerText; methodDilution.labwareValueGradientDilution = xmlNode.SelectSingleNode("labware/value").InnerText; methodDilution.wellarrayGradientDilution = xmlNode.SelectSingleNode("wellarray").InnerText; // 吸液选中的孔位,逗号分割 methodDilution.volume = float.Parse(xmlNode.SelectSingleNode("volume").InnerText); // 体积 // 液体类型 methodDilution.liquidTypeTextGradientDilution = xmlNode.SelectSingleNode("liquidType/text").InnerText; methodDilution.liquidTypeValueGradientDilution = xmlNode.SelectSingleNode("liquidType/value").InnerText; // 液体范围 methodDilution.liquidRangeTextGradientDilution = xmlNode.SelectSingleNode("liquidRange/text").InnerText; methodDilution.liquidRangeValueGradientDilution = xmlNode.SelectSingleNode("liquidRange/value").InnerText; // 液体 methodDilution.liquidTextGradientDilution = xmlNode.SelectSingleNode("liquid/text").InnerText; methodDilution.liquidValueGradientDilution = xmlNode.SelectSingleNode("liquid/value").InnerText; #region 混合 methodDilution.bMix = xmlNode.SelectSingleNode("enableMix").InnerText.ToLower() == "true" ? true : false; methodDilution.mixvolume = Convert.ToDouble(xmlNode.SelectSingleNode("mixvolume").InnerText); methodDilution.mixcount = Convert.ToInt32(xmlNode.SelectSingleNode("mixcount").InnerText); methodDilution.mixAspiratePositionText = xmlNode.SelectSingleNode("mixAspiratePosition/text").InnerText; methodDilution.mixAspiratePositionValue = Convert.ToInt32(xmlNode.SelectSingleNode("mixAspiratePosition/value").InnerText); methodDilution.mixAspirateDistance = Convert.ToDouble(xmlNode.SelectSingleNode("mixAspirateDistance").InnerText); methodDilution.mixAspirateSpeed = Convert.ToDouble(xmlNode.SelectSingleNode("mixAspirateSpeed").InnerText); methodDilution.mixDispensePositionText = xmlNode.SelectSingleNode("mixDispensePosition/text").InnerText; methodDilution.mixDispensePositionValue = Convert.ToInt32(xmlNode.SelectSingleNode("mixDispensePosition/value").InnerText); methodDilution.mixDispenseDistance = Convert.ToDouble(xmlNode.SelectSingleNode("mixDispenseDistance").InnerText); methodDilution.mixDispenseSpeed = Convert.ToDouble(xmlNode.SelectSingleNode("mixDispenseSpeed").InnerText); #endregion // 稀释方向 methodDilution.dilutionDirectionText = xmlNode.SelectSingleNode("dilutionDirection/text").InnerText; methodDilution.dilutionDirectionValue = EnumManagement.GetField(Convert.ToInt32(xmlNode.SelectSingleNode("dilutionDirection/value").InnerText)); // 更换Tip methodDilution.changeTipsValueGradientDilution = xmlNode.SelectSingleNode("changeTipsValue").InnerText; // 舍弃选中范围最后一行或最后一列多余的体积 methodDilution.isDiscardLastVolume = bool.Parse(xmlNode.SelectSingleNode("isDiscardLastVolume").InnerText); #endregion #region 梯度稀释设置 相关 methodDilution.positionTextAddDiluent = xmlNode.SelectSingleNode("positionDilution/text").InnerText; methodDilution.positionValueAddDiluent = xmlNode.SelectSingleNode("positionDilution/value").InnerText; methodDilution.labwareTextAddDiluent = xmlNode.SelectSingleNode("labwareDilution/text").InnerText; methodDilution.labwareValueAddDiluent = xmlNode.SelectSingleNode("labwareDilution/value").InnerText; methodDilution.wellarrayAddDiluent = xmlNode.SelectSingleNode("wellarrayDilution").InnerText; methodDilution.dilutionFactor = int.Parse(xmlNode.SelectSingleNode("dilutionFactor").InnerText); // 液体类型 methodDilution.liquidTypeTextAddDiluent = xmlNode.SelectSingleNode("liquidTypeDilution/text").InnerText; methodDilution.liquidTypeValueAddDiluent = xmlNode.SelectSingleNode("liquidTypeDilution/value").InnerText; // 液体范围 methodDilution.liquidRangeTextAddDiluent = xmlNode.SelectSingleNode("liquidRangeDilution/text").InnerText; methodDilution.liquidRangeValueAddDiluent = xmlNode.SelectSingleNode("liquidRangeDilution/value").InnerText; // 液体 methodDilution.liquidTextAddDiluent = xmlNode.SelectSingleNode("liquidDilution/text").InnerText; methodDilution.liquidValueAddDiluent = xmlNode.SelectSingleNode("liquidDilution/value").InnerText; // 更换Tip methodDilution.changeTipsValueAddDiluent = xmlNode.SelectSingleNode("changeTipsValueDilution").InnerText; // 目标板选中范围的首行或首列加入稀释液 methodDilution.isTargetSelectRangeFirstAddDiluent = bool.Parse(xmlNode.SelectSingleNode("isTargetSelectRangeFirstAddDiluent").InnerText); #endregion return methodDilution; } #region 检查所有属性设置是否满足要求 /// /// 检查所有属性设置是否满足要求 /// /// 吸液属性对象 /// 检查所有属性设置是否满足要求 public MethodPropertyInfo CheckProperty(MethodAspirate methodAspirate) { MethodPropertyInfo methodPropertyInfo = new MethodPropertyInfo(); if (strCurrentCulture== "zh-CN") { } else if(strCurrentCulture == "en-US") { } return methodPropertyInfo; } #endregion } }