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
|
{
|
/// <summary>
|
/// 变量计算逻辑控制类
|
/// </summary>
|
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
|
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
public VarCalcControl()
|
{
|
m_currentCulture = Shared.SoftwareInformation.currentculture;
|
}
|
|
#region 执行变量计算
|
/// <summary>
|
/// 执行变量计算
|
/// </summary>
|
/// <param name="xmlEnv"></param>
|
/// <param name="methodNode"></param>
|
/// <param name="isSimulator"></param>
|
/// <returns></returns>
|
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
|
|
/// <summary>
|
/// 获取变量的值:double
|
/// </summary>
|
/// <param name="variableName"></param>
|
/// <param name="varValue"></param>
|
/// <param name="methodName"></param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 获取变量值
|
/// </summary>
|
/// <param name="varName"></param>
|
/// <param name="methodName"></param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 设置变量值
|
/// </summary>
|
/// <param name="varName"></param>
|
/// <param name="varVal"></param>
|
/// <param name="methodName"></param>
|
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}");
|
}
|
}
|
}
|
}
|