| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- namespace wms.service.Extensions.LayerPacking.model
 
- {
 
-     /// <summary>
 
-     /// 箱信息
 
-     /// </summary>
 
-     public class LayerPackingBoxInfo
 
-     {
 
-         /// <summary>
 
-         /// 箱ID
 
-         /// </summary>
 
-         [Obsolete]
 
-         public string BoxId { get; set; }
 
-         /// <summary>
 
-         /// 箱产品
 
-         /// </summary>
 
-         public List<LayerPackingLayerInfo> Layers { get; set; }
 
-         /// <summary>
 
-         /// 箱总扭转值
 
-         /// </summary>
 
-         public decimal TotalTorsion => Layers.Sum(l => l.TotalTorsion);
 
-         /// <summary>
 
-         /// 箱总焊点盘数
 
-         /// </summary>
 
-         public int SolderProductCount => Layers.Sum(l => l.SolderProductCount);
 
-         /// <summary>
 
-         /// 箱总焊点数
 
-         /// </summary>
 
-         public decimal TotalSolderJoints => Layers.Sum(l => l.TotalSolderJoints);
 
-         /// <summary>
 
-         /// 成箱时间
 
-         /// </summary>
 
-         public DateTime PackingTime { get; set; }
 
-         /// <summary>
 
-         /// 最小箱目标
 
-         /// </summary>
 
-         public decimal MinBoxTarget { get; set; }
 
-         /// <summary>
 
-         /// 最大箱目标
 
-         /// </summary>
 
-         public decimal MaxBoxTarget { get; set; }
 
-         /// <summary>
 
-         /// 箱目标
 
-         /// </summary>
 
-         public decimal BoxTarget { get; set; }
 
-         /// <summary>
 
-         /// 装箱时的产品池平均值
 
-         /// </summary>
 
-         public decimal ProductPoolAverage { get; set; }
 
-         /// <summary>
 
-         /// 构造函数
 
-         /// </summary>
 
-         public LayerPackingBoxInfo()
 
-         {
 
-             Layers = new List<LayerPackingLayerInfo>();
 
-             PackingTime = DateTime.Now;
 
-         }
 
-         /// <summary>
 
-         /// 判断当前箱是否有效
 
-         /// </summary>
 
-         /// <param name="constraints"></param>
 
-         /// <returns></returns>
 
-         public bool IsValid(LayerPackingConstraints constraints)
 
-         {
 
-             var total = TotalTorsion;
 
-             bool torsionValid = total >= constraints.MinBoxTotal && total <= constraints.MaxBoxTotal && Layers.All(l => l.IsValid(constraints));
 
-             if (!torsionValid) return false;
 
-             var constraintType = constraints.GetSolderConstraintType();
 
-             return constraintType switch
 
-             {
 
-                 SolderConstraintType.NoConstraint => true,
 
-                 SolderConstraintType.OnlyProductCount => SolderProductCount <= constraints.SolderMaxCount,
 
-                 SolderConstraintType.BothConstraints => SolderProductCount <= constraints.SolderMaxCount && TotalSolderJoints <= constraints.PerSolderMaxCount,
 
-                 _ => true,
 
-             };
 
-         }
 
-         /// <summary>
 
-         /// 箱极值对是否有效
 
-         /// </summary>
 
-         /// <param name="highThreshold">大极值阈值</param>
 
-         /// <param name="lowThreshold">小极值阈值</param>
 
-         /// <returns></returns>
 
-         public bool HasValidExtremePairs(decimal highThreshold, decimal lowThreshold)
 
-         {
 
-             return Layers.All(l => l.HasValidExtremePair(highThreshold, lowThreshold));
 
-         }
 
-         /// <summary>
 
-         /// 获取偏差
 
-         /// </summary>
 
-         /// <param name="target"></param>
 
-         /// <returns></returns>
 
-         public decimal GetDeviationFromTarget(decimal target)
 
-         {
 
-             return Math.Abs(TotalTorsion - target);
 
-         }
 
-         /// <summary>
 
-         /// 获取产品总数
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public int GetTotalProductCount()
 
-         {
 
-             return Layers.Sum(l => l.Products.Count);
 
-         }
 
-     }
 
- }
 
 
  |