using System; using System.Collections.Generic; using System.Linq; namespace MECF.Framework.UI.Client.TrayThickness { public class TrayCoatingThickness : ICloneable { private readonly List _dataList; #region Constructors public TrayCoatingThickness() { Tray = new CoatingData(); TrayInner = new CoatingData(); RingInner = new CoatingData(); RingOuter = new CoatingData(); _dataList = new List( new [] { Tray, TrayInner, RingInner, RingOuter }); } public TrayCoatingThickness(string trayGuId) { TrayGuid = trayGuId; //Tary的默认数据库ID为自身编号1~8 Tray = new CoatingData($"石墨托盘", trayGuId); TrayInner = new CoatingData($"内部托架", trayGuId); RingInner = new CoatingData($"中间托架", trayGuId); RingOuter = new CoatingData($"外部托架", trayGuId); _dataList = new List( new[] { Tray, TrayInner, RingInner, RingOuter }); } //public TrayCoatingThickness(int slot) : this(slot.ToString()) //{ //} #endregion #region Properties public string TrayGuid { get; set; } /// /// Tray厚度对象 /// public CoatingData Tray { get; set; } /// /// Tray内环厚度对象 /// public CoatingData TrayInner { get; set; } /// /// Ring内环厚度对象 /// public CoatingData RingInner { get; set; } /// /// Ring外环厚度对象 /// public CoatingData RingOuter { get; set; } #endregion #region Methods public bool Validate(out string reason) { if (!Tray.Validate(out reason)) return false; if(!TrayInner.Validate(out reason)) return false; if(!RingInner.Validate(out reason)) return false; if (!RingOuter.Validate(out reason)) return false; //每个环Number数据是否存在相同,Linq语句检查 if (_dataList.GroupBy(i => i.SerialNumber).Any(g => g.Count() > 1)) { reason = $"some of components have same SN, please check."; return false; } return true; } public void Update(TrayCoatingThickness newData) { Tray.Update(newData.Tray); TrayInner.Update(newData.TrayInner); RingInner.Update(newData.RingInner); RingOuter.Update(newData.RingOuter); } public object Clone() { var newObj = new TrayCoatingThickness(TrayGuid); newObj.Tray = (CoatingData)Tray.Clone(); newObj.TrayInner = (CoatingData)TrayInner.Clone(); newObj.RingInner = (CoatingData)RingInner.Clone(); newObj.RingOuter = (CoatingData)RingOuter.Clone(); return newObj; } #endregion } }