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
|
{
|
/// <summary>
|
/// 吸液业务逻辑处理
|
/// </summary>
|
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<DilutionDirectionEnum>(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 检查所有属性设置是否满足要求
|
/// <summary>
|
/// 检查所有属性设置是否满足要求
|
/// </summary>
|
/// <param name="methodAspirate">吸液属性对象</param>
|
/// <returns>检查所有属性设置是否满足要求</returns>
|
public MethodPropertyInfo CheckProperty(MethodAspirate methodAspirate)
|
{
|
MethodPropertyInfo methodPropertyInfo = new MethodPropertyInfo();
|
|
if (strCurrentCulture== "zh-CN")
|
{
|
|
}
|
else if(strCurrentCulture == "en-US")
|
{
|
|
}
|
return methodPropertyInfo;
|
}
|
#endregion
|
|
|
}
|
}
|