Просмотр исходного кода

getSummaryInfoByTender 项目按照树结构数据排序

zhongzewei 6 лет назад
Родитель
Сommit
b5af303ab4
1 измененных файлов с 21 добавлено и 0 удалено
  1. 21 0
      modules/pm/facade/pm_facade.js

+ 21 - 0
modules/pm/facade/pm_facade.js

@@ -710,6 +710,25 @@ async function getIndexReportData(prj_id, filters) {
     return await project_facade.getIndexReportData(prj_id, filters);
 }
 
+// 根据树结构数据排序
+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) {
@@ -734,6 +753,7 @@ async function getSummaryInfoByTender(tenderID, summaryType) {
     if(summaryType === projectType.engineering){ // 汇总到单项工程级别
         parent = engineering;
         let tenders = await projectModel.find({ParentID: engineering.ID, $or: notDeleted});
+        tenders = getSortedDataByTree(tenders);
         for(let t of tenders){
             if(summaryInfo[t.ID]){
                 summaryInfo[t.ID]['name'] = t.name ? t.name : '';
@@ -743,6 +763,7 @@ async function getSummaryInfoByTender(tenderID, summaryType) {
     } else { // 汇总到建设项目级别
         parent = project;
         let engs = await projectModel.find({ParentID: project.ID, $or: notDeleted});
+        engs = getSortedDataByTree(engs);
         for(let e of engs){
             if(summaryInfo[e.ID]){
                 summaryInfo[e.ID]['name'] = e.name ? e.name : '';