alielie
2025-11-21 3a471ae651b228231bebb3a2d438baa1d4ac0261
HMI.ParameterManage/Model/XmlModel.cs
@@ -1,6 +1,7 @@
using HMI.Core.Entity;
using HMI.Core.Manager;
using HMI.Core.Util;
using HMI.ParameterManage.Entity;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
@@ -9,17 +10,8 @@
{
    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 +53,8 @@
            }
        }
        public List<string> groups { get; private set; }
        public bool ValidateProductName(object value, out string msg)
        {
            msg = null;
@@ -69,7 +63,7 @@
            var temp = Products.FirstOrDefault(p => p.Name == name);
            if (temp != null && temp != SelectedProduct)
            {
                msg = "产品名称不能重复";
                msg = this.lang("App.MustBeUnique", this.lang("Pm.Product.Name"));
                return false;
            }
            return true;
@@ -83,7 +77,7 @@
            var temp = Parameters.FirstOrDefault(p => p.Name == name);
            if (temp != null && temp != SelectedParameter)
            {
                msg = "参数名称不能重复";
                msg = this.lang("App.MustBeUnique", this.lang("Pm.Product.Name"));
                return false;
            }
            return true;
@@ -91,31 +85,22 @@
        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 +108,11 @@
            int index = Products.IndexOf(data);
            if (index > -1)
            {
                UpdateData(index, data);
                UpdateProduct(index, data);
            }
            else
            {
                InsertData(data);
                InsertProduct(data);
            }
        }
@@ -144,67 +129,144 @@
            }
        }
        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(PathHelper.ProductDataFile, 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);
            temp[index] = data;
            SaveParameter(temp);
        }
        /// <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 = Path.Combine(PathHelper.ProductDataFolder, "Parameter", $"Parameter_{SelectedProduct.Name}.data");
            XmlHelper.SerializeToXml(fileName, datas);
        }
        private void SaveParameter(string product, IList<ParameterData> datas)
        {
            string fileName = Path.Combine(PathHelper.ProductDataFolder, "Parameter", $"Parameter_{product}.data");
            XmlHelper.SerializeToXml(fileName, datas);
        }
        #endregion
    }
}