浏览代码

getSummaryInfoByTender按照树结构数据排序

zhongzewei 6 年之前
父节点
当前提交
98652110fd
共有 1 个文件被更改,包括 22 次插入12 次删除
  1. 22 12
      modules/pm/facade/pm_facade.js

+ 22 - 12
modules/pm/facade/pm_facade.js

@@ -678,6 +678,25 @@ function getBuildingArea(projFeature){
     return null;
 }
 
+// 根据树结构数据排序
+function getSortedDataByTree(data) {
+    // NextSiblingID-数据映射
+    const mapping = {};
+    data.forEach(item => mapping[item.NextSiblingID] = item);
+    let lastItem = data.find(item => +item.NextSiblingID === -1);
+    if (!lastItem) {
+        return data;
+    }
+    const rst = [lastItem];
+    let preItem = mapping[lastItem.ID];
+    while (preItem) {
+        rst.unshift(preItem);
+        preItem = mapping[preItem.ID];
+    }
+    // 根据树结构排序形成的新数组与旧数组项数不同,说明树结构数据有问题(断链),则返回原本数据。
+    return rst.length === data.length ? rst : data;
+}
+
 //根据单位工程ID获取汇总信息
 //@param {Number}tenderID {String}summaryType @return {Object}
 async function getSummaryInfoByTender(tenderID, summaryType) {
@@ -693,20 +712,11 @@ async function getSummaryInfoByTender(tenderID, summaryType) {
         return null;
     }
     let summaryInfo = await getSummaryInfo([project.ID]);
-    //已经没有单项工程这一层
-    if(summaryType === projectType.engineering){
-        /*parentName = engineering.name ? engineering.name : '';
-        let tenders = await projectModel.find({ParentID: engineering.ID, $or: notDeleted});
-        for(let t of tenders){
-            if(summaryInfo[t.ID]){
-                summaryInfo[t.ID]['name'] = t.name ? t.name : '';
-                summaryList.push(summaryInfo[t.ID]);
-            }
-        }*/
-    }
-    else {
+    // 汇总到建设项目层(没有单项工程层了)
+    if (summaryType === projectType.project) {
         parentName = project.name ? project.name : '';
         let tenders = await projectModel.find({ParentID: project.ID, $or: notDeleted});
+        tenders = getSortedDataByTree(tenders);
         for(let t of tenders){
             if(summaryInfo[t.ID]){
                 summaryInfo[t.ID]['name'] = t.name ? t.name : '';