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
}
}