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}"); } } } }