using DriverLib.Engine;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Xml;
|
using XCommon;
|
using XCoreBLL.Resource;
|
using XImagingXhandler.XDAL;
|
|
namespace XCore
|
{
|
public class DispenseBll
|
{
|
string strCurrentCulture = "";
|
public DispenseBll()
|
{
|
strCurrentCulture = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
|
}
|
|
public MethodDispense GenerateMethodDispenseDataByXmlNode(XmlNode xmlNode)
|
{
|
MethodDispense methodDispense = new MethodDispense();
|
|
methodDispense.isrun = xmlNode.SelectSingleNode("isrun").InnerText;
|
methodDispense.status = xmlNode.SelectSingleNode("status").InnerText;
|
methodDispense.name = xmlNode.SelectSingleNode("name").InnerText;
|
methodDispense.label = xmlNode.SelectSingleNode("label").InnerText;
|
methodDispense.strIndex = xmlNode.SelectSingleNode("strIndex").InnerText;
|
methodDispense.labwareText = xmlNode.SelectSingleNode("labware/text").InnerText;
|
methodDispense.labwareValue = xmlNode.SelectSingleNode("labware/value").InnerText;
|
methodDispense.positionText = xmlNode.SelectSingleNode("position/text").InnerText;
|
methodDispense.positionValue = xmlNode.SelectSingleNode("position/value").InnerText;
|
methodDispense.armText = xmlNode.SelectSingleNode("arm/text").InnerText;
|
methodDispense.armValue = xmlNode.SelectSingleNode("arm/value").InnerText;
|
methodDispense.headType = xmlNode.SelectSingleNode("headType").InnerText;
|
//methodDispense.labwaretipText = xmlNode.SelectSingleNode("labwaretip/text").InnerText;
|
//methodDispense.labwaretipValue = xmlNode.SelectSingleNode("labwaretip/value").InnerText;
|
|
string strchs = xmlNode.SelectSingleNode("channels").InnerText;
|
methodDispense.channels = ComUtility.GetChannelsFromXml(strchs);
|
|
methodDispense.wellarray = xmlNode.SelectSingleNode("wellarray").InnerText;
|
methodDispense.enableSingleWellvolume = xmlNode.SelectSingleNode("enableSingleWellvolume").InnerText.ToLower() == "true" ? true : false;
|
|
XmlNodeList xnList = xmlNode.SelectNodes("SingleWellvolume");
|
List<DropdownName> list = new List<DropdownName>();
|
foreach (XmlNode xn in xnList)
|
{
|
DropdownName dropdownName = new DropdownName();
|
dropdownName.dropdown_id = xn.SelectSingleNode("channel").InnerText;
|
dropdownName.dropdown_name = xn.SelectSingleNode("value").InnerText;
|
list.Add(dropdownName);
|
}
|
methodDispense.singlewellvolume = list;
|
|
methodDispense.wellvolume = Convert.ToDouble(xmlNode.SelectSingleNode("wellvolume").InnerText);
|
|
methodDispense.isNull = xmlNode.SelectSingleNode("isNull").InnerText.ToLower() == "true" ? true : false;
|
methodDispense.liquididText = xmlNode.SelectSingleNode("liquidid/text").InnerText;
|
methodDispense.liquididValue = xmlNode.SelectSingleNode("liquidid/value").InnerText;
|
methodDispense.liquidrangeidText = xmlNode.SelectSingleNode("liquidrangeid/text").InnerText;
|
methodDispense.liquidrangeidValue = xmlNode.SelectSingleNode("liquidrangeid/value").InnerText;
|
methodDispense.liquidpidText = xmlNode.SelectSingleNode("liquidpid/text").InnerText;
|
methodDispense.liquidpidValue = xmlNode.SelectSingleNode("liquidpid/value").InnerText;
|
methodDispense.bMix = xmlNode.SelectSingleNode("enableMix").InnerText.ToLower() == "true" ? true : false;
|
methodDispense.bMultiMix = xmlNode.SelectSingleNode("enableMultiMix").InnerText.ToLower() == "true" ? true : false;
|
methodDispense.mixvolume = Convert.ToDouble(xmlNode.SelectSingleNode("mixvolume").InnerText);
|
methodDispense.mixcount = Convert.ToInt32(xmlNode.SelectSingleNode("mixcount").InnerText);
|
methodDispense.mixAspiratePositionText = xmlNode.SelectSingleNode("mixAspiratePosition/text").InnerText;
|
methodDispense.mixAspiratePositionValue = Convert.ToInt32(xmlNode.SelectSingleNode("mixAspiratePosition/value").InnerText);
|
methodDispense.mixAspirateDistance = Convert.ToDouble(xmlNode.SelectSingleNode("mixAspirateDistance").InnerText);
|
methodDispense.mixAspirateSpeed = Convert.ToDouble(xmlNode.SelectSingleNode("mixAspirateSpeed").InnerText);
|
methodDispense.mixDispensePositionText = xmlNode.SelectSingleNode("mixDispensePosition/text").InnerText;
|
methodDispense.mixDispensePositionValue = Convert.ToInt32(xmlNode.SelectSingleNode("mixDispensePosition/value").InnerText);
|
methodDispense.mixDispenseDistance = Convert.ToDouble(xmlNode.SelectSingleNode("mixDispenseDistance").InnerText);
|
methodDispense.mixDispenseSpeed = Convert.ToDouble(xmlNode.SelectSingleNode("mixDispenseSpeed").InnerText);
|
|
|
methodDispense.enableLiquidSensor = xmlNode.SelectSingleNode("enableLiquidSensor").InnerText.ToLower() == "true" ? true : false;
|
methodDispense.liquidSensorCount = Convert.ToInt32(xmlNode.SelectSingleNode("liquidSensorCount").InnerText);
|
methodDispense.liquidSensorDistance = Convert.ToDouble(xmlNode.SelectSingleNode("liquidSensorDistance").InnerText);
|
methodDispense.liquidSensorEndDistance = Convert.ToDouble(xmlNode.SelectSingleNode("liquidSensorEndDistance").InnerText);
|
methodDispense.liquidSensorSpeed = Convert.ToDouble(xmlNode.SelectSingleNode("liquidSensorSpeed").InnerText);
|
methodDispense.liquidSensorRadio = Convert.ToDouble(xmlNode.SelectSingleNode("liquidSensorRadio").InnerText);
|
methodDispense.liquidSensorDisIdText = xmlNode.SelectSingleNode("liquidSensorDisId/text").InnerText;
|
methodDispense.liquidSensorDisIdValue = Convert.ToDouble(xmlNode.SelectSingleNode("liquidSensorDisId/value").InnerText);
|
methodDispense.enableLiquidFollow = xmlNode.SelectSingleNode("enableLiquidFollow").InnerText.ToLower() == "true" ? true : false;
|
methodDispense.liquidFollowType = Convert.ToInt32(xmlNode.SelectSingleNode("liquidFollowType/value").InnerText);
|
methodDispense.liquidFollowTypeName = xmlNode.SelectSingleNode("liquidFollowType/text").InnerText;
|
methodDispense.liquidFollowSpeed = Convert.ToDouble(xmlNode.SelectSingleNode("liquidFollowSpeed").InnerText);
|
methodDispense.liquidFollowDistance = Convert.ToDouble(xmlNode.SelectSingleNode("liquidFollowDistance").InnerText);
|
methodDispense.liquidFollowArea = Convert.ToDouble(xmlNode.SelectSingleNode("liquidFollowArea").InnerText);
|
methodDispense.enableMixFollow = xmlNode.SelectSingleNode("enableMixFollow").InnerText.ToLower() == "true" ? true : false;
|
|
methodDispense.enableSensorBlock = xmlNode.SelectSingleNode("enableSensorBlock").InnerText.ToLower() == "true" ? true : false;
|
//methodDispense. = Convert.ToDouble(xmlNode.SelectSingleNode("liquidSensorBlockDistance").InnerText);
|
methodDispense.dispenseBlockDisIdText = xmlNode.SelectSingleNode("dispenseBlockDisId/text").InnerText;
|
methodDispense.dispenseBlockDisIdValue = Convert.ToInt32(xmlNode.SelectSingleNode("dispenseBlockDisId/value").InnerText);
|
return methodDispense;
|
}
|
|
#region 检查所有属性设置是否满足要求
|
/// <summary>
|
/// 检查所有属性设置是否满足要求
|
/// </summary>
|
/// <param name="methodAspirate">吸液属性对象</param>
|
/// <returns>检查所有属性设置是否满足要求</returns>
|
public MethodPropertyInfo CheckProperty(MethodDispense methodDispense)
|
{
|
MethodPropertyInfo methodPropertyInfo = new MethodPropertyInfo();
|
|
if (strCurrentCulture == "zh-CN")
|
{
|
methodPropertyInfo.property_tips_info = DispenseResourceCHS.tipsInfo.ToString();
|
|
if (methodDispense.labwareValue == null || methodDispense.labwaretipValue == "")
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceCHS.labwareText.ToString();
|
}
|
if (methodDispense.positionValue == null || methodDispense.positionValue == "")
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceCHS.positionText.ToString();
|
}
|
if (methodDispense.armValue == null || methodDispense.armValue == "")
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceCHS.armText.ToString();
|
}
|
else
|
{
|
if (methodDispense.armText == "arm1")
|
{
|
if (DispenseResourceCHS.wellarray.Contains(","))
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceCHS.armWithSingleChannel.ToString();
|
methodPropertyInfo.property_tips_info = DispenseResourceCHS.errorInfo.ToString();
|
}
|
}
|
else if (methodDispense.armText == "arm2")
|
{
|
if (!DispenseResourceCHS.wellarray.Contains(","))
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceCHS.armWithSingleChannel.ToString();
|
methodPropertyInfo.property_tips_info = DispenseResourceCHS.errorInfo.ToString();
|
}
|
}
|
}
|
if (methodDispense.wellarray == null || methodDispense.wellarray == "")
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceCHS.wellarray.ToString();
|
}
|
//if (methodDispense.mixcount != null || methodDispense.mixcount != "")
|
//{
|
// if (methodDispense.mixvolume == null || methodDispense.mixvolume == "")
|
// {
|
// methodPropertyInfo.property_name_info = DispenseResourceCHS.mixvolume.ToString();
|
// }
|
//}
|
//if (methodDispense.wellvolume == null || methodDispense.wellvolume == "")
|
//{
|
// methodPropertyInfo.property_name_info = DispenseResourceCHS.wellvolume.ToString();
|
//}
|
if (methodDispense.liquididValue == null || methodDispense.liquididValue == "")
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceCHS.liquididText.ToString();
|
}
|
}
|
else if (strCurrentCulture == "en-US")
|
{
|
methodPropertyInfo.property_tips_info = DispenseResourceENU.tipsInfo.ToString();
|
|
if (methodDispense.labwareValue == null || methodDispense.labwaretipValue == "")
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceENU.labwareText.ToString();
|
}
|
if (methodDispense.positionValue == null || methodDispense.positionValue == "")
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceENU.positionText.ToString();
|
}
|
if (methodDispense.armValue == null || methodDispense.armValue == "")
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceENU.armText.ToString();
|
}
|
else
|
{
|
if (methodDispense.armText == "arm1")
|
{
|
if (DispenseResourceENU.wellarray.Contains(","))
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceENU.armWithSingleChannel.ToString();
|
methodPropertyInfo.property_tips_info = DispenseResourceENU.errorInfo.ToString();
|
}
|
}
|
else if (methodDispense.armText == "arm2")
|
{
|
if (!DispenseResourceENU.wellarray.Contains(","))
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceENU.armWithSingleChannel.ToString();
|
methodPropertyInfo.property_tips_info = DispenseResourceENU.errorInfo.ToString();
|
}
|
}
|
}
|
if (methodDispense.wellarray == null || methodDispense.wellarray == "")
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceENU.wellarray.ToString();
|
}
|
//if (methodDispense.mixcount != null || methodDispense.mixcount != "")
|
//{
|
// if (methodDispense.mixvolume == null || methodDispense.mixvolume == "")
|
// {
|
// methodPropertyInfo.property_name_info = DispenseResourceENU.mixvolume.ToString();
|
// }
|
//}
|
//if (methodDispense.wellvolume == null || methodDispense.wellvolume == "")
|
//{
|
// methodPropertyInfo.property_name_info = DispenseResourceENU.wellvolume.ToString();
|
//}
|
if (methodDispense.liquididValue == null || methodDispense.liquididValue == "")
|
{
|
methodPropertyInfo.property_name_info = DispenseResourceENU.liquididText.ToString();
|
}
|
}
|
return methodPropertyInfo;
|
}
|
#endregion
|
|
#region 执行排液,返回结果字符串
|
/// <summary>
|
/// 执行排液,返回结果字符串
|
/// </summary>
|
/// <param name="dispenseMParam">排液的参数对象</param>
|
/// <param name="isSimulator"></param>
|
/// <returns>结果实体对象</returns>
|
public HxResult ExecuteDispense(DispenseMParam dispenseMParam, bool isSimulator = false)
|
{
|
HxResult ret = new HxResult();
|
if (!isSimulator)
|
{
|
ret = MethodAction.Instance.Dispense(dispenseMParam);
|
}
|
else
|
{
|
CommonBll.DoSimulateDelay();
|
ret.Result = ResultType.Success;
|
}
|
|
return ret;
|
}
|
|
public HxResult ExecuteDispense(DispenseMParamSH dispenseMParam, bool isSimulator = false)
|
{
|
HxResult ret = new HxResult();
|
if (!isSimulator)
|
{
|
ret = MethodAction.Instance.Dispense(dispenseMParam);
|
}
|
else
|
{
|
CommonBll.DoSimulateDelay();
|
ret.Result = ResultType.Success;
|
}
|
|
return ret;
|
}
|
#endregion
|
}
|
}
|