浏览代码

修改推荐算法

mengxiangge 6 年之前
父节点
当前提交
026b8cc1fb
共有 1 个文件被更改,包括 60 次插入8 次删除
  1. 60 8
      MBI/SAGA.MBI/WinView/ModeInfoMaintenance/VMMatchFM.cs

+ 60 - 8
MBI/SAGA.MBI/WinView/ModeInfoMaintenance/VMMatchFM.cs

@@ -395,23 +395,75 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         {
             FloorName = floorName;
             FMList = new ObservableCollection<MEquipFM>();
+            //1,首先按方案1过滤
+            //1.a,如果有值,过滤没有关联岗位的。
+            //1.b,1.a有值,推荐1.a;没有值,推荐1;
+            //2,1没有值,按方案2过滤
+            var tempList = list.Where(t => IsMathPlan1(t, equip));
+            if (tempList.Any())
+            {
+                var nodutyList = tempList.Where(t => t.EquipmentId.IsNotNullEmpty());
+                if (nodutyList.Any())
+                {
+                    foreach (MEquipFM fm in nodutyList)
+                    {
+                        FMList.Add(fm);
+                    }
+                }
+                else
+                {
+                    foreach (MEquipFM fm in tempList)
+                    {
+                        FMList.Add(fm);
+                    }
+                }
+            }
+            else
+            {
+                foreach (var item in list)
+                {
+                    if (IsMathPlan2(item, equip))
+                        FMList.Add(item);
+                }
+            }
+
 
-            foreach (var item in list)
+        }
+        /// <summary>
+        /// 推荐方案1,同设备族and距离近
+        /// </summary>
+        /// <param name="equipFm"></param>
+        /// <param name="equip"></param>
+        /// <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(IsLocationNear);
+            while (true)
             {
-                if (IsMath(item, equip))
-                    FMList.Add(item);
+                if (equipFm.FamilyCode != equip.Family.Code)
+                    break;
+                result = funcs.Any(t => t(equipFm, equip));
+                break;
             }
+            return result;
         }
-
-        private bool IsMath(MEquipFM equipFm, MRevitEquipBase equip)
+        /// <summary>
+        /// 推荐方案2,同设备族and没有与其它岗位关联,
+        /// 同一楼层or点位同一楼层or安装位置同一楼层or本地名称或本地编码不为null,且相等
+        /// </summary>
+        /// <param name="equipFm"></param>
+        /// <param name="equip"></param>
+        /// <returns></returns>
+        private bool IsMathPlan2(MEquipFM equipFm, MRevitEquipBase equip)
         {
             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(IsSamePointFloor);
             funcs.Add(IsSameInstallLocation);
             funcs.Add(IsSameLocalNameOrId);
-            funcs.Add(IsLocationNear);
             while (true)
             {
                 //不推荐已经绑定过的
@@ -419,7 +471,7 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
                     break;
                 if (equipFm.FamilyCode != equip.Family.Code)
                     break;
-                result=funcs.Any(t => t(equipFm, equip));
+                result = funcs.Any(t => t(equipFm, equip));
                 break;
             }
             return result;