alielie
2026-06-15 f08871fe7d148d667f2f11f80f64de71a0d9504c
HMI.ParameterManage/Model/XmlModel.cs
@@ -1,10 +1,12 @@
using HMI.Core.Entity;
using HMI.Core.Manager;
using HMI.Core.Util;
using HMI.LogUtil;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
namespace HMI.ParameterManage.Model
{
@@ -53,6 +55,8 @@
            }
        }
        public List<string> groups { get; private set; }
        public bool ValidateProductName(object value, out string msg)
        {
            msg = null;
@@ -69,8 +73,16 @@
        public bool ValidateParameterName(object value, out string msg)
        {
            string pattern = @"^[\p{L}_][\p{L}\p{N}_]*$";
            msg = null;
            string name = value.ToString();
            if (!Regex.IsMatch(name, pattern))
            {
                msg = "参数名不能以数字开头";
                return false;
            }
            if (Products == null) return true;
            var temp = Parameters.FirstOrDefault(p => p.Name == name);
            if (temp != null && temp != SelectedParameter)
@@ -94,10 +106,10 @@
            if (SelectedProduct != null)
            {
                parameters = ProductManager.GetParametersByProductName<ObservableCollection<ParameterData>>(SelectedProduct.Name);
            }
            parameters = parameters ?? new ObservableCollection<ParameterData>();
            Parameters = parameters;
            groups = Parameters.Where(p => !string.IsNullOrEmpty(p.PGroup)).Select(p => p.PGroup).Distinct().ToList();
        }
        public void SaveOrUpdateData(ProductData data)
@@ -123,6 +135,7 @@
            else
            {
                InsertParameter(data);
                LogHelper.Info("HMI", $"[{data.ProductName}] Add New Parameter {data.Name}. Value: {data.Value}", out _);
            }
        }
@@ -136,6 +149,16 @@
            var temp = XmlHelper.DeepClone(Products);
            temp.Add(data);
            SaveProduct(temp);
            if (!string.IsNullOrEmpty(data.ParentId))
            {
                var parameters =
                    ProductManager.GetParametersByProductName<List<ParameterData>>(data.ParentId);
                foreach (var p in parameters)
                {
                    p.ProductName = data.Name;
                }
                SaveParameter(data.Name, parameters);
            }
        }
        /// <summary>
@@ -179,7 +202,7 @@
        /// <param name="datas"></param>
        private void SaveProduct(IList<ProductData> datas)
        {
            XmlHelper.SerializeToXml(PathHelper.ProductDataFile, datas);
            XmlHelper.SerializeToXml(ProductManager.GetDataFilePath(), datas);
        }
        #endregion
@@ -203,8 +226,13 @@
        public void UpdateParameter(int index, ParameterData data)
        {
            var temp = XmlHelper.DeepClone(Parameters);
            var old = temp[index];
            temp[index] = data;
            SaveParameter(temp);
            if (old.Value != data.Value)
            {
                LogHelper.Info("HMI", $"Update Parameter {data.Name}. Value: {old.Value} => {data.Value}", out _);
            }
        }
        /// <summary>
@@ -245,7 +273,13 @@
        /// <param name="datas"></param>
        private void SaveParameter(IList<ParameterData> datas)
        {
            string fileName = Path.Combine(PathHelper.ProductDataFolder, "Parameter", $"Parameter_{SelectedProduct.Name}.data");
            string fileName = ProductManager.GetParamFolderByProductName(SelectedProduct.Name);
            XmlHelper.SerializeToXml(fileName, datas);
        }
        private void SaveParameter(string product, IList<ParameterData> datas)
        {
            string fileName = ProductManager.GetParamFolderByProductName(product);
            XmlHelper.SerializeToXml(fileName, datas);
        }
        #endregion