using DataRWDAL;
using HxSocket;
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Xml;
using XCommon.Log;
using XCore;
using XHandler.Controls.Run.Com;
using XHandler.View;
using XImagingXhandler.XDAL;
namespace XHandler.Controls
{
public class GripTransportControl
{
#region 变量
private string strCurrentCulture = string.Empty;
private WellCalc wellCalc = new WellCalc();
#region BLL
private LatticeBll latticeBll = new LatticeBll();
private AspirateBll aspirateBll = new AspirateBll();
private GripTransportBll gripTransportBll = new GripTransportBll();
#endregion
#region 转运参数
private string strMethodName = string.Empty;
#endregion
public RunWnd launchView = null;
public HxSocketClient socketTcpListener = null;
#endregion
///
/// 构造函数
///
public GripTransportControl(string strCurrentCulture)
{
this.strCurrentCulture = strCurrentCulture;
}
#region 执行抓板放板,返回结果字符串
///
/// 执行抓板放板
///
///
///
///
///
public bool ExecuteGripTransport(XmlNode xmlEnv, XmlNode methodNode, bool isSimulator)
{
bool result = true;
string methodName = methodNode.SelectSingleNode("name").InnerText;
if (launchView._cancelSource.IsCancellationRequested)
{
result = false;
return result;
}
try
{
#region StartLog
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodName + "】" + Properties.MachineRunResource.strStart.ToString());
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodName + "】start:");
}
#endregion
#region 数据准备
MethodGripTransport gripTransportData = gripTransportBll.GenerateMethodGripTransport(methodNode);
#endregion
// From点位耗材信息
Labware labwareFrom = LabwareDB.GetLabware(gripTransportData.gripPickLabwareValue);
// To点位耗材信息
Labware labwareTo = null;
ObservableCollection piledFromLabwares = LabwareDB.GetPiledlabwareOfALabware(labwareFrom); // 被叠放的盖子
// 放空板位
if ("-1".Equals(gripTransportData.gripPlaceLabwareValue))
{
labwareTo = labwareFrom;
// 被抓的耗材位置是顶部,且有盖子:=> labwareTo = 盖子
if (piledFromLabwares.Count() > 0 && gripTransportData.gripModelPosValue == 2&& labwareFrom.labware_type_id!="4")
{
labwareTo = LabwareDB.GetLabware(piledFromLabwares[0].labware_id);
}
}
else
{
labwareTo = LabwareDB.GetLabware(gripTransportData.gripPlaceLabwareValue);
}
if (labwareFrom == null || labwareTo == null)
{
return result;
}
// 抓板
result = ControlCom.ExecuteGripTransportPick(xmlEnv, gripTransportData, labwareFrom, piledFromLabwares, methodName, launchView, isSimulator);
if (result)
{
// 放板
result = ControlCom.ExecuteGripTransportPlace(xmlEnv,gripTransportData, labwareFrom, labwareTo, piledFromLabwares, methodName, launchView, isSimulator);
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodName + "】" + Properties.MachineRunResource.strProgress.ToString() + Properties.MachineRunResource.strEnd.ToString());
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodName + "】progress: complete;");
}
if (result != false)
{
launchView.GenerateAnimation(xmlEnv, gripTransportData);
}
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
if (strCurrentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodName + "】" + Properties.MachineRunResource.strError.ToString() + " 源 " + ex.Source + " 错误信息 " + ex.Message + ";");
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】>Xhandler: 【" + methodName + "】error:source:" + ex.Source + ";error:" + ex.Message + ";");
}
result = false;
}
return result;
}
#endregion
}
}