|
@@ -396,7 +396,15 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
|
|
|
{
|
|
|
XYZ xXyz = x.Location.ToXyz();
|
|
|
XYZ yXyz = y.Location.ToXyz();
|
|
|
- return origin.DistanceTo(xXyz).CompareTo(origin.DistanceTo(yXyz));
|
|
|
+ if (xXyz == null)
|
|
|
+ xXyz = new XYZ(x.X, x.Y, origin.Z);
|
|
|
+ if (yXyz == null)
|
|
|
+ yXyz = new XYZ(y.X, y.Y, origin.Z);
|
|
|
+ int result = origin.FindDistance2(xXyz).CompareTo(origin.FindDistance2(yXyz));
|
|
|
+ if (result == 0)
|
|
|
+ result = origin.DistanceTo(xXyz).CompareTo(origin.DistanceTo(yXyz));
|
|
|
+
|
|
|
+ return result;
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
@@ -424,11 +432,11 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
|
|
|
//1.a,如果有值,过滤没有关联岗位的。
|
|
|
//1.b,1.a有值,推荐1.a;没有值,推荐1;
|
|
|
//2,1没有值,按方案2过滤
|
|
|
- var tempList = list.Where(t => IsMathPlan1(t, equip));
|
|
|
+ var tempList = list.Where(t => IsMathPlan1(t, equip)).ToList();
|
|
|
if (tempList.Any())
|
|
|
{
|
|
|
List<MEquipFM> plan1List = new List<MEquipFM>();
|
|
|
- var nodutyList = tempList.Where(t => t.EquipmentId.IsNotNullEmpty());
|
|
|
+ var nodutyList = tempList.Where(t => t.EquipmentId.IsNullOrEmpty()).ToList();
|
|
|
if (nodutyList.Any())
|
|
|
{
|
|
|
plan1List.AddRange(nodutyList);
|
|
@@ -463,17 +471,11 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
|
|
|
/// <returns></returns>
|
|
|
private bool IsMathPlan1(MEquipFM equipFm, MRevitEquipBase equip)
|
|
|
{
|
|
|
- bool result = false;
|
|
|
List<Func<MEquipFM, MRevitEquipBase, bool>> funcs = new List<Func<MEquipFM, MRevitEquipBase, bool>>();
|
|
|
+ funcs.Add(IsSameFamilyCode);
|
|
|
funcs.Add(IsSameFloor);
|
|
|
funcs.Add(IsLocationNear);
|
|
|
- while (true)
|
|
|
- {
|
|
|
- if (equipFm.FamilyCode != equip.Family.Code)
|
|
|
- break;
|
|
|
- result = funcs.All(t => t(equipFm, equip));
|
|
|
- break;
|
|
|
- }
|
|
|
+ bool result = funcs.All(t => t(equipFm, equip));
|
|
|
return result;
|
|
|
}
|
|
|
/// <summary>
|
|
@@ -506,6 +508,16 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
|
|
|
|
|
|
#region 推荐方法
|
|
|
/// <summary>
|
|
|
+ /// 同一种设备族
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="equipFm"></param>
|
|
|
+ /// <param name="equip"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private bool IsSameFamilyCode(MEquipFM equipFm, MRevitEquipBase equip)
|
|
|
+ {
|
|
|
+ return (equipFm.FamilyCode == equip.Family.Code);
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
/// 资产和模型为同一层
|
|
|
/// </summary>
|
|
|
/// <param name="equipFm"></param>
|
|
@@ -577,7 +589,7 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
|
|
|
localName = equipment.LocalName;
|
|
|
localId = equipment.LocalId;
|
|
|
}
|
|
|
- if (equip is MEquipmentPart part)
|
|
|
+ else if (equip is MEquipmentPart part)
|
|
|
{
|
|
|
localName = part.LocalName;
|
|
|
localId = part.LocalId;
|
|
@@ -605,11 +617,18 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
|
|
|
XYZ fmXyz = equipFm.Location.ToXyz();
|
|
|
XYZ dutyXyz = equip.Location.ToXyz();
|
|
|
bool result = false;
|
|
|
+
|
|
|
if (fmXyz != null && dutyXyz != null)
|
|
|
{
|
|
|
//单位mm
|
|
|
result = fmXyz.DistanceTo(dutyXyz).IsLess(redundancy);
|
|
|
}
|
|
|
+ else if (fmXyz == null && dutyXyz != null)
|
|
|
+ {
|
|
|
+ //取不到Location,使用X,Y中的值,进行比较,忽略Z
|
|
|
+ fmXyz = new XYZ(equipFm.X, equipFm.Y, 0);
|
|
|
+ result = fmXyz.FindDistance2(dutyXyz).IsLess(redundancy);
|
|
|
+ }
|
|
|
return result;
|
|
|
}
|
|
|
|