cloudflight
2025-01-13 02c14c9c57dbde72d9c771bd8b0fab1cd023047d
WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroPropStatusHelper.cs
@@ -1,17 +1,171 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yw.Hydro;
using Yw.Hydro;
using Yw.Model;
using Yw.Service;
namespace Yw.WinFrmUI
{
    /// <summary>
    /// 属性状态辅助类
    /// 构件属性辅助类
    /// </summary>
    public class HydroPropStatusHelper
    {
        /// <summary>
        ///
        /// </summary>
        public HydroPropStatusHelper
            (
                Yw.Model.HydroModelInfo hydroInfo,
                List<Yw.Model.HydroParterPropStatusInfo> allPropStatusDbList
            )
        {
            _hydroInfo = hydroInfo;
            _dict = _hydroInfo.ToPropStatusInfoDict(allPropStatusDbList);
        }
        private Yw.Model.HydroModelInfo _hydroInfo = null;//水力信息
        private Dictionary<string, List<Yw.Model.HydroParterPropStatusInfo>> _dict = null;//字典
        private Dictionary<string, List<Yw.Model.HydroParterPropStatusInfo>> _dictUpdate = null;//更新字典
        /// <summary>
        /// 获取属性状态信息
        /// </summary>
        public HydroParterPropStatusInfo GetPropStatusInfo(string code, string propNameInfo)
        {
            if (string.IsNullOrEmpty(code))
            {
                return default;
            }
            if (string.IsNullOrEmpty(propNameInfo))
            {
                return default;
            }
            if (_dict == null)
            {
                _dict = new Dictionary<string, List<Model.HydroParterPropStatusInfo>>();
            }
            if (!_dict.ContainsKey(code))
            {
                _dict.Add(code, new List<Model.HydroParterPropStatusInfo>());
            }
            if (_dict[code] == null)
            {
                _dict[code] = new List<Model.HydroParterPropStatusInfo>();
            }
            var list = _dict[code];
            var propStatusInfo = list.Find(x => x.PropName == propNameInfo);
            return propStatusInfo;
        }
        /// <summary>
        /// 获取属性状态Db列表
        /// </summary>
        public List<Yw.Model.HydroParterPropStatusInfo> GetPropStatusDbList()
        {
            return _hydroInfo.ToPropStatusDbList(_dict);
        }
        /// <summary>
        /// 获取更新属性状态Db列表
        /// </summary>
        /// <returns></returns>
        public List<Yw.Model.HydroParterPropStatusInfo> GetUpdatePropStatusDbList()
        {
            return _hydroInfo.ToPropStatusDbList(_dictUpdate);
        }
        /// <summary>
        /// 重置
        /// </summary>
        public void Reset()
        {
            _dictUpdate?.Clear();
        }
        /// <summary>
        /// 更新属性状态
        /// </summary>
        public void UpdatePropStatus(Yw.Model.HydroParterInfo parter, string propNameInfo, ePropStatus propStatus, string statusInfo)
        {
            UpdatePropStatus(parter?.Code, propNameInfo, propStatus, statusInfo);
        }
        /// <summary>
        /// 更新属性状态
        /// </summary>
        public void UpdatePropStatus(string code, string propNameInfo, ePropStatus propStatus, string statusInfo)
        {
            if (string.IsNullOrEmpty(code))
            {
                return;
            }
            if (string.IsNullOrEmpty(propNameInfo))
            {
                return;
            }
            if (_dict == null)
            {
                _dict = new Dictionary<string, List<Model.HydroParterPropStatusInfo>>();
            }
            if (!_dict.ContainsKey(code))
            {
                _dict.Add(code, new List<Model.HydroParterPropStatusInfo>());
            }
            if (_dict[code] == null)
            {
                _dict[code] = new List<Model.HydroParterPropStatusInfo>();
            }
            var list = _dict[code];
            var propStatusInfo = list.Find(x => x.PropName == propNameInfo);
            if (propStatusInfo == null)
            {
                propStatusInfo = new HydroParterPropStatusInfo()
                {
                    Parter = code,
                    PropName = propNameInfo
                };
                list.Add(propStatusInfo);
            }
            propStatusInfo.PropStatus = propStatus;
            propStatusInfo.StatusInfo = statusInfo;
            AppendUpdatePropStatus(propStatusInfo);
        }
        //附加更新属性状态
        private void AppendUpdatePropStatus(HydroParterPropStatusInfo propStatusInfo)
        {
            if (propStatusInfo == null)
            {
                return;
            }
            if (string.IsNullOrEmpty(propStatusInfo.Parter))
            {
                return;
            }
            if (string.IsNullOrEmpty(propStatusInfo.PropName))
            {
                return;
            }
            if (_dictUpdate == null)
            {
                _dictUpdate = new Dictionary<string, List<HydroParterPropStatusInfo>>();
            }
            if (!_dictUpdate.ContainsKey(propStatusInfo.Parter))
            {
                _dictUpdate.Add(propStatusInfo.Parter, new List<HydroParterPropStatusInfo>());
            }
            if (_dictUpdate[propStatusInfo.Parter] == null)
            {
                _dictUpdate[propStatusInfo.Parter] = new List<Model.HydroParterPropStatusInfo>();
            }
            var list = _dictUpdate[propStatusInfo.Parter];
            list.RemoveAll(x => x.PropName == propStatusInfo.PropName);
            list.Add(propStatusInfo);
        }
    }
}