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 |  187 +++++++++++++++++++++++++++++++++-------------
 1 files changed, 132 insertions(+), 55 deletions(-)

diff --git a/HMI.ParameterManage/Model/XmlModel.cs b/HMI.ParameterManage/Model/XmlModel.cs
index a70a4be..c04e4ad 100644
--- a/HMI.ParameterManage/Model/XmlModel.cs
+++ b/HMI.ParameterManage/Model/XmlModel.cs
@@ -1,25 +1,19 @@
 锘縰sing HMI.Core.Entity;
+using HMI.Core.Manager;
 using HMI.Core.Util;
-using HMI.ParameterManage.Entity;
+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
     {
-        private string ProductSettingFile;
-        private string ParameterSettingFolder;
-
         public XmlModel(string baseFolder)
         {
-            ProductSettingFile = Path.Combine(baseFolder, "Product.setting");
-            ParameterSettingFolder = Path.Combine(baseFolder, "Parameter");
-            if (!Directory.Exists(ParameterSettingFolder))
-            {
-                Directory.CreateDirectory(ParameterSettingFolder);
-            }
         }
 
         private ObservableCollection<ProductData> products;
@@ -61,6 +55,8 @@
             }
         }
 
+        public List<string> groups { get; private set; }
+
         public bool ValidateProductName(object value, out string msg)
         {
             msg = null;
@@ -77,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)
@@ -91,31 +95,21 @@
 
         public void LoadProducts()
         {
-            ObservableCollection<ProductData> products;
-            if (File.Exists(ProductSettingFile))
-            {
-                products = XmlHelper.DeserializeFromXml<ObservableCollection<ProductData>>(ProductSettingFile);
-            }
-            else
-            {
-                products = new ObservableCollection<ProductData>();
-            }
+            ObservableCollection<ProductData> products = ProductManager.GetProducts<ObservableCollection<ProductData>>();
+            products = products ?? new ObservableCollection<ProductData>();
             Products = products;
         }
 
         public void LoadParameters()
         {
-            ObservableCollection<ParameterData> parameters = new ObservableCollection<ParameterData>();
+            ObservableCollection<ParameterData> parameters = null;
             if (SelectedProduct != null)
             {
-                string fileName = $"Parameter_{SelectedProduct.Name}.setting";
-                string parameterSettingFile = Path.Combine(ParameterSettingFolder, fileName);
-                if (File.Exists(parameterSettingFile))
-                {
-                    parameters = XmlHelper.DeserializeFromXml<ObservableCollection<ParameterData>>(parameterSettingFile);
-                }
+                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,11 +117,11 @@
             int index = Products.IndexOf(data);
             if (index > -1)
             {
-                UpdateData(index, data);
+                UpdateProduct(index, data);
             }
             else
             {
-                InsertData(data);
+                InsertProduct(data);
             }
         }
 
@@ -141,70 +135,153 @@
             else
             {
                 InsertParameter(data);
+                LogHelper.Info("HMI", $"[{data.ProductName}] Add New Parameter {data.Name}. Value: {data.Value}", out _);
             }
         }
 
-        public void InsertData(ProductData data)
+        #region 浜у搧鎿嶄綔
+        /// <summary>
+        /// 鏂板浜у搧
+        /// </summary>
+        /// <param name="data"></param>
+        public void InsertProduct(ProductData data)
         {
             var temp = XmlHelper.DeepClone(Products);
             temp.Add(data);
-            XmlHelper.SerializeToXml(ProductSettingFile, temp);
+            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);
+            }
         }
 
-        public void UpdateData(int index, ProductData data)
+        /// <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;
-            XmlHelper.SerializeToXml(ProductSettingFile, temp);
+            SaveProduct(temp);
         }
 
-        public void InsertParameter(ParameterData data)
-        {
-            var temp = XmlHelper.DeepClone(Parameters);
-            temp.Add(data);
-            string fileName = Path.Combine(ParameterSettingFolder, $"Parameter_{SelectedProduct.Name}.setting");
-            XmlHelper.SerializeToXml(fileName, temp);
-        }
-
-        public void UpdateParameter(int index, ParameterData data)
-        {
-            var temp = XmlHelper.DeepClone(Parameters);
-            temp[index] = data;
-            string fileName = Path.Combine(ParameterSettingFolder, $"Parameter_{SelectedProduct.Name}.setting");
-            XmlHelper.SerializeToXml(fileName, 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();
-                XmlHelper.SerializeToXml(ProductSettingFile, temp);
+                SaveProduct(temp);
             }
         }
+
+        /// <summary>
+        /// 鎵归噺鍒犻櫎浜у搧
+        /// </summary>
         public void DeleteProducts()
         {
             var temp = Products.Where(p => !p.IsSelected).ToList();
-            XmlHelper.SerializeToXml(ProductSettingFile, temp);
+            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();
-                string fileName = Path.Combine(ParameterSettingFolder, $"Parameter_{SelectedProduct.Name}.setting");
-                XmlHelper.SerializeToXml(fileName, temp);
+                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 temp = Parameters.Where(p => !p.IsSelected).ToList();
-            string fileName = Path.Combine(ParameterSettingFolder, $"Parameter_{SelectedProduct.Name}.setting");
-            XmlHelper.SerializeToXml(fileName, temp);
+            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