From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点

---
 HMI.ParameterManage/Model/XmlModel.cs |  287 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 287 insertions(+), 0 deletions(-)

diff --git a/HMI.ParameterManage/Model/XmlModel.cs b/HMI.ParameterManage/Model/XmlModel.cs
new file mode 100644
index 0000000..c04e4ad
--- /dev/null
+++ b/HMI.ParameterManage/Model/XmlModel.cs
@@ -0,0 +1,287 @@
+锘縰sing 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
+{
+    public class XmlModel : NotifyBase
+    {
+        public XmlModel(string baseFolder)
+        {
+        }
+
+        private ObservableCollection<ProductData> products;
+
+        public ObservableCollection<ProductData> Products
+        {
+            get { return products; }
+            set { Set(ref products, value); }
+        }
+
+        private ObservableCollection<ParameterData> parameters;
+
+        public ObservableCollection<ParameterData> Parameters
+        {
+            get { return parameters; }
+            set { Set(ref parameters, value); }
+        }
+
+        private ProductData selectedProduct;
+
+        public ProductData SelectedProduct
+        {
+            get { return selectedProduct; }
+            set
+            {
+                Set(ref selectedProduct, value);
+                LoadParameters();
+            }
+        }
+
+        private ParameterData selectedParameter;
+
+        public ParameterData SelectedParameter
+        {
+            get { return selectedParameter; }
+            set
+            {
+                Set(ref selectedParameter, value);
+            }
+        }
+
+        public List<string> groups { get; private set; }
+
+        public bool ValidateProductName(object value, out string msg)
+        {
+            msg = null;
+            string name = value.ToString();
+            if (Products == null) return true;
+            var temp = Products.FirstOrDefault(p => p.Name == name);
+            if (temp != null && temp != SelectedProduct)
+            {
+                msg = this.lang("App.MustBeUnique", this.lang("Pm.Product.Name"));
+                return false;
+            }
+            return true;
+        }
+
+        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)
+            {
+                msg = this.lang("App.MustBeUnique", this.lang("Pm.Product.Name"));
+                return false;
+            }
+            return true;
+        }
+
+        public void LoadProducts()
+        {
+            ObservableCollection<ProductData> products = ProductManager.GetProducts<ObservableCollection<ProductData>>();
+            products = products ?? new ObservableCollection<ProductData>();
+            Products = products;
+        }
+
+        public void LoadParameters()
+        {
+            ObservableCollection<ParameterData> parameters = null;
+            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)
+        {
+            int index = Products.IndexOf(data);
+            if (index > -1)
+            {
+                UpdateProduct(index, data);
+            }
+            else
+            {
+                InsertProduct(data);
+            }
+        }
+
+        public void SaveOrUpdateParameter(ParameterData data)
+        {
+            int index = Parameters.IndexOf(data);
+            if (index > -1)
+            {
+                UpdateParameter(index, data);
+            }
+            else
+            {
+                InsertParameter(data);
+                LogHelper.Info("HMI", $"[{data.ProductName}] Add New Parameter {data.Name}. Value: {data.Value}", out _);
+            }
+        }
+
+        #region 浜у搧鎿嶄綔
+        /// <summary>
+        /// 鏂板浜у搧
+        /// </summary>
+        /// <param name="data"></param>
+        public void InsertProduct(ProductData data)
+        {
+            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>
+        /// 鏇存柊浜у搧
+        /// </summary>
+        /// <param name="index"></param>
+        /// <param name="data"></param>
+        public void UpdateProduct(int index, ProductData data)
+        {
+            var temp = XmlHelper.DeepClone(Products);
+            temp[index] = data;
+            SaveProduct(temp);
+        }
+
+        /// <summary>
+        /// 鍒犻櫎浜у搧
+        /// </summary>
+        /// <param name="data"></param>
+        public void DeleteProduct(ProductData data)
+        {
+            int index = Products.IndexOf(data);
+            if (index > -1)
+            {
+                var temp = Products.Where(p => p != data).ToList();
+                SaveProduct(temp);
+            }
+        }
+
+        /// <summary>
+        /// 鎵归噺鍒犻櫎浜у搧
+        /// </summary>
+        public void DeleteProducts()
+        {
+            var temp = Products.Where(p => !p.IsSelected).ToList();
+            SaveProduct(temp);
+        }
+
+        /// <summary>
+        /// 鎸佷箙鍖栦骇鍝佹暟鎹�
+        /// </summary>
+        /// <param name="datas"></param>
+        private void SaveProduct(IList<ProductData> datas)
+        {
+            XmlHelper.SerializeToXml(ProductManager.GetDataFilePath(), datas);
+        }
+        #endregion
+
+        #region 浜у搧鍙傛暟鎿嶄綔
+        /// <summary>
+        /// 鏂板鍙傛暟
+        /// </summary>
+        /// <param name="data"></param>
+        public void InsertParameter(ParameterData data)
+        {
+            var temp = XmlHelper.DeepClone(Parameters);
+            temp.Add(data);
+            SaveParameter(temp);
+        }
+
+        /// <summary>
+        /// 鏇存柊鍙傛暟
+        /// </summary>
+        /// <param name="index"></param>
+        /// <param name="data"></param>
+        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>
+        /// 鍒犻櫎鍙傛暟
+        /// </summary>
+        /// <param name="data"></param>
+        public void DeleteParameter(ParameterData data)
+        {
+            int index = Parameters.IndexOf(data);
+            if (index > -1)
+            {
+                var temp = Parameters.Where(p => p != data).ToList();
+                SaveParameter(temp);
+                LoggerHelper.Info("Product Manage", $"User: {UserInfo.User.Name} deleted Product parameter:{data.Name} in Product:{data.ProductName}");
+            }
+        }
+
+        /// <summary>
+        /// 鎵归噺鍒犻櫎鍙傛暟
+        /// </summary>
+        public void DeleteParameters()
+        {
+            var needDelet = Parameters.Where(p => p.IsSelected).ToList();
+            if (needDelet.Count > 0)
+            {
+                var first = needDelet[0];
+                var names = needDelet.Select(e => e.Name).ToList();
+
+                var temp = Parameters.Where(p => !p.IsSelected).ToList();
+                SaveParameter(temp);
+                LoggerHelper.Info("Product Manage", $"User: {UserInfo.User.Name} deleted Product parameters:{string.Join(",", names)} in Product:{first.ProductName}");
+            }
+        }
+
+        /// <summary>
+        /// 鎸佷箙鍖栧弬鏁版暟鎹�
+        /// </summary>
+        /// <param name="datas"></param>
+        private void SaveParameter(IList<ParameterData> datas)
+        {
+            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
+    }
+}

--
Gitblit v1.9.1