using DataEntity.Share;
using HxEnum;
using HxSocket;
using MySqlX.XDevAPI.Common;
using System;
using System.Data;
using System.Reflection;
using System.Xml;
using XCommon;
using XCommon.Log;
using XCore;
using XHandler.Class.DataEx;
using XHandler.Controls.Run.Com;
using XHandler.View;
using XHandler.View.Com;
using XImagingXhandler.XDAL;
namespace XHandler.Controls
{
///
/// 变量计算逻辑控制类
///
public class VarCalcControl
{
#region 变量
// 系统语言
private string m_currentCulture = string.Empty;
private MethodVarCalc m_varCalcData = null;
public RunWnd launchView = null;
#region BLL
private VarCalcBll m_varCalcBll = new VarCalcBll();
#endregion
#endregion
///
/// 构造函数
///
public VarCalcControl()
{
m_currentCulture = Shared.SoftwareInformation.currentculture;
}
#region 执行变量计算
///
/// 执行变量计算
///
///
///
///
///
public bool Execute(XmlNode xmlEnv, XmlNode methodNode, bool isSimulator)
{
bool bResult = false;
var platformNodeList = xmlEnv.SelectNodes("platform");
string methodName = methodNode.SelectSingleNode("name").InnerText;
#region 任务被取消
if (launchView._cancelSource.IsCancellationRequested)
{
bResult = false;
return bResult;
}
#endregion
#region RunLog start
if (m_currentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】" + Properties.MachineRunResource.strStart.ToString());
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodNode.SelectSingleNode("name").InnerText + "】start:");
}
#endregion
try
{
#region 数据准备
m_varCalcData = m_varCalcBll.GenerateMethodVarCalcDataByXmlNode(methodNode);
#endregion
#region 数据检查
// 计算结果不是变量
string calcResultVarName = ControlCom.IsVariable(m_varCalcData.calcResult);
if (calcResultVarName == null)
{
if (m_currentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodName + "】"+$"{Properties.MachineRunResource.strProgress}" +
$"计算结果不是变量, 变量: {m_varCalcData.calcResult}");
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodName + "】" + $"progress:calc result isn't a variable, variable: {m_varCalcData.calcResult}");
}
bResult = false;
return bResult;
}
double calcValue1 = 0d;
double calcValue2 = 0d;
// 操作值1
if (!GetVarValue(m_varCalcData.calcValue1, out calcValue1, methodName))
{
bResult = false;
return bResult;
}
// 操作值2
if (!GetVarValue(m_varCalcData.calcValue2, out calcValue2, methodName))
{
bResult = false;
return bResult;
}
#endregion
#region 计算
double dResult = 0d;
// +
if (m_varCalcData.calcOperator == EnumManagement.GetEnumValue(CalcOperatorTypeEnum.Add))
{
dResult = calcValue1 + calcValue2;
}
// -
else if (m_varCalcData.calcOperator == EnumManagement.GetEnumValue(CalcOperatorTypeEnum.Minus))
{
dResult = calcValue1 - calcValue2;
}
// *
else if (m_varCalcData.calcOperator == EnumManagement.GetEnumValue(CalcOperatorTypeEnum.Time))
{
dResult = calcValue1 * calcValue2;
}
// /
else if (m_varCalcData.calcOperator == EnumManagement.GetEnumValue(CalcOperatorTypeEnum.Pide))
{
dResult = calcValue1 / calcValue2;
}
// %
else if (m_varCalcData.calcOperator == EnumManagement.GetEnumValue(CalcOperatorTypeEnum.Mod))
{
dResult = calcValue1 % calcValue2;
}
#endregion
#region 结果赋值给变量
SetVarVal(calcResultVarName, dResult.ToString(), methodName);
#endregion
bResult = true;
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
#region Exception
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodName + "】" + "error:source:" + ex.Source + ";error:" + ex.Message + ";");
bResult = false;
#endregion
}
return bResult;
}
#endregion
///
/// 获取变量的值:double
///
///
///
///
///
public bool GetVarValue(string variableName, out double varValue, string methodName)
{
string strVarValue = string.Empty;
string currentCulture = Shared.SoftwareInformation.currentculture;
varValue = -1d;
#region 获取参数值
string var = ControlCom.IsVariable(variableName);
bool isVariable = var != null;
if (isVariable)
{
strVarValue = GetVarVal(var, methodName);
if (strVarValue == null)
{
return false;
}
}
else
{
strVarValue = variableName;
}
#endregion
#region 数据转换
bool bResult = ComUtility.ParseToDouble(strVarValue, out varValue);
if (!bResult)
{
if (currentCulture.Equals("zh-CN"))
{
string strMsg = isVariable ? ($"变量: {variableName}, 值: {strVarValue}") : ($"值: {strVarValue}");
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodName + "】" + $"{Properties.MachineRunResource.strProgress} 不是数字:{strMsg}");
}
else
{
string strMsg = isVariable ? ($"variable: {variableName}, value: {strVarValue}") : ($"value: {strVarValue}");
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodName + "】" + $"progress:calc result isn't a number:{strMsg}");
}
return false;
}
#endregion
return bResult;
}
///
/// 获取变量值
///
///
///
///
public string GetVarVal(string varName, string methodName)
{
string currentCulture = Shared.SoftwareInformation.currentculture;
Variable globalVariable = null;
globalVariable = ControlCom.SearchGlobalVariable(launchView, varName);
if (!string.IsNullOrEmpty(globalVariable.variablename))
{
}
else
{
LoggerHelper.ErrorLog($"[GetVarVal]:变量不存在!!! VarName = {varName}");
if (currentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodName + "】" + $"{Properties.MachineRunResource.strProgress} 变量不存在, 变量: {varName}");
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodName + "】" + $"progress:variable isn't exist, variable: {varName}");
}
return null;
}
string varVal = null;
string globalVariableValue = ControlCom.SearchValueOfGlobalVariable(launchView, varName);
if (!string.IsNullOrEmpty(globalVariableValue))
{
varVal = globalVariableValue;
}
if (varVal == null)
{
}
else
{
varVal = globalVariableValue;
}
return varVal;
}
///
/// 设置变量值
///
///
///
///
public void SetVarVal(string varName, string varVal, string methodName)
{
Variable globalVariable = null;
globalVariable = ControlCom.SearchGlobalVariable(launchView, varName);
if (!string.IsNullOrEmpty(globalVariable.variablename))
{
globalVariable.variablecurval= varVal;
}
//var am = launchView.gloadVariable;
string currentCulture = Shared.SoftwareInformation.currentculture;
if (currentCulture.Equals("zh-CN"))
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodName + "】" + $"{Properties.MachineRunResource.strProgress}值:{varVal} => 变量:{varName}");
}
else
{
launchView.AddLogs("【" + DateTime.Now.ToString("HH:mm:ss:fff") + "】> Xhandler: 【" + methodName + "】" + $"progress:value:{varVal} => variable:{varName}");
}
}
}
}