|
@@ -376,7 +376,26 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
|
|
/// </summary>
|
|
/// </summary>
|
|
public string FloorName { get; set; }
|
|
public string FloorName { get; set; }
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 由近到远进行排序
|
|
|
|
+ /// </summary>
|
|
|
|
+ public class RecommendByDistanceComparer : IComparer<MEquipFM>
|
|
|
|
+ {
|
|
|
|
+ private XYZ origin;
|
|
|
|
+ public RecommendByDistanceComparer(XYZ origin)
|
|
|
|
+ {
|
|
|
|
+ this.origin = origin;
|
|
|
|
+ }
|
|
|
|
+ public int Compare(MEquipFM x, MEquipFM y)
|
|
|
|
+ {
|
|
|
|
+ XYZ xXyz = x.Location.ToXyz();
|
|
|
|
+ XYZ yXyz = y.Location.ToXyz();
|
|
|
|
+ return origin.DistanceTo(xXyz).CompareTo(origin.DistanceTo(yXyz));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 推荐
|
|
|
|
+ /// </summary>
|
|
public class RecommendFMData : BaseFMData
|
|
public class RecommendFMData : BaseFMData
|
|
{
|
|
{
|
|
|
|
|
|
@@ -402,20 +421,21 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
|
|
var tempList = list.Where(t => IsMathPlan1(t, equip));
|
|
var tempList = list.Where(t => IsMathPlan1(t, equip));
|
|
if (tempList.Any())
|
|
if (tempList.Any())
|
|
{
|
|
{
|
|
|
|
+ List<MEquipFM> plan1List = new List<MEquipFM>();
|
|
var nodutyList = tempList.Where(t => t.EquipmentId.IsNotNullEmpty());
|
|
var nodutyList = tempList.Where(t => t.EquipmentId.IsNotNullEmpty());
|
|
if (nodutyList.Any())
|
|
if (nodutyList.Any())
|
|
{
|
|
{
|
|
- foreach (MEquipFM fm in nodutyList)
|
|
|
|
- {
|
|
|
|
- FMList.Add(fm);
|
|
|
|
- }
|
|
|
|
|
|
+ plan1List.AddRange(nodutyList);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- foreach (MEquipFM fm in tempList)
|
|
|
|
- {
|
|
|
|
- FMList.Add(fm);
|
|
|
|
- }
|
|
|
|
|
|
+ plan1List.AddRange(tempList);
|
|
|
|
+ }
|
|
|
|
+ //按距离由近到远排序
|
|
|
|
+ plan1List.Sort(new RecommendByDistanceComparer(equip.Location.ToXyz()));
|
|
|
|
+ foreach (MEquipFM fm in plan1List)
|
|
|
|
+ {
|
|
|
|
+ FMList.Add(fm);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
else
|
|
@@ -428,7 +448,9 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <summary>
|
|
- /// 推荐方案1,同设备族and距离近
|
|
|
|
|
|
+ /// 推荐方案1,
|
|
|
|
+ /// 同一楼层
|
|
|
|
+ /// 同设备族and距离近
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <param name="equipFm"></param>
|
|
/// <param name="equipFm"></param>
|
|
/// <param name="equip"></param>
|
|
/// <param name="equip"></param>
|
|
@@ -437,12 +459,13 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
|
|
{
|
|
{
|
|
bool result = false;
|
|
bool result = false;
|
|
List<Func<MEquipFM, MRevitEquipBase, bool>> funcs = new List<Func<MEquipFM, MRevitEquipBase, bool>>();
|
|
List<Func<MEquipFM, MRevitEquipBase, bool>> funcs = new List<Func<MEquipFM, MRevitEquipBase, bool>>();
|
|
|
|
+ funcs.Add(IsSameFloor);
|
|
funcs.Add(IsLocationNear);
|
|
funcs.Add(IsLocationNear);
|
|
while (true)
|
|
while (true)
|
|
{
|
|
{
|
|
if (equipFm.FamilyCode != equip.Family.Code)
|
|
if (equipFm.FamilyCode != equip.Family.Code)
|
|
break;
|
|
break;
|
|
- result = funcs.Any(t => t(equipFm, equip));
|
|
|
|
|
|
+ result = funcs.All(t => t(equipFm, equip));
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
return result;
|
|
return result;
|
|
@@ -572,7 +595,7 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
|
|
private bool IsLocationNear(MEquipFM equipFm, MRevitEquipBase equip)
|
|
private bool IsLocationNear(MEquipFM equipFm, MRevitEquipBase equip)
|
|
{
|
|
{
|
|
//推荐坐标的冗余值
|
|
//推荐坐标的冗余值
|
|
- double redundancy = 2000d;
|
|
|
|
|
|
+ double redundancy = 20000d;
|
|
XYZ fmXyz = equipFm.Location.ToXyz();
|
|
XYZ fmXyz = equipFm.Location.ToXyz();
|
|
XYZ dutyXyz = equip.Location.ToXyz();
|
|
XYZ dutyXyz = equip.Location.ToXyz();
|
|
bool result = false;
|
|
bool result = false;
|