|
|
@@ -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 : '';
|