ellisran 1 неделя назад
Родитель
Сommit
7b4de482fb
2 измененных файлов с 14 добавлено и 2 удалено
  1. 7 0
      app/base/base_budget_service.js
  2. 7 2
      app/service/project_screen.js

+ 7 - 0
app/base/base_budget_service.js

@@ -554,6 +554,13 @@ class BaseBudget extends TreeService {
 
         return await this.importYbpData(budget, ybpData, needGcl);
     }
+
+    async getSumTpByBudgetIds(budgetIds) {
+        if (budgetIds.length === 0) return [];
+        const sql = 'SELECT bid, SUM(total_price) AS total_price FROM ' + this.tableName + ' WHERE bid IN (?) AND is_leaf = true GROUP BY bid';
+        const sqlParam = [budgetIds];
+        return await this.db.query(sql, sqlParam);
+    }
 }
 
 module.exports = BaseBudget;

+ 7 - 2
app/service/project_screen.js

@@ -156,6 +156,11 @@ module.exports = app => {
             const projectTree = new Ledger.baseTree(ctx, { id: 'id', pid: 'tree_pid', level: 'tree_level', order: 'tree_order', rootId: '-1' });
             projectTree.loadDatas(nodes);
             const selectedNodes = projectTree.nodes.filter(n => !n.is_folder && (!options.id || n.id === options.id) && infos.some(info => info.id === n.id));
+            // Match the live budget totals displayed on the project info page.
+            const budgetIds = Array.from(new Set(selectedNodes.map(node => node.budget_id).filter(Boolean)));
+            const budgetTotals = (await Promise.all([ctx.service.budgetGu, ctx.service.budgetGai, ctx.service.budgetYu]
+                .map(service => service.getSumTpByBudgetIds(budgetIds))))
+                .map(rows => new Map(rows.map(row => [String(row.bid), row.total_price])));
             const allTenders = [];
             if (selectedNodes.length && (user.is_admin === 1 || (permission && permission.tender && permission.tender.indexOf('2') !== -1))) {
                 allTenders.push(...await ctx.service.tender.getAllDataByCondition({ where: { spid: selectedNodes.map(n => n.id) } }));
@@ -237,8 +242,8 @@ module.exports = app => {
                     tenders: tenderInvestments,
                     changeRows, stages,
                     progressText: latestEvent ? `${latestEvent.date},${latestEvent.department || ''}已完成「${latest.name}」${latestEvent.step}。` : '暂无阶段动态',
-                    amounts: ['lx', 'cb', 'sgt', 'pf'].map(prefix => toWan(info[prefix + '_tp'], info[prefix + '_tp_unit']))
-                        .concat([tenders.length ? toWan(contract, '元') : null, hasMeasured ? toWan(measured, '元') : null, finalAmount]) });
+                    amounts: budgetTotals.map(totals => toWan(totals.get(String(node.budget_id)), '元'))
+                        .concat([toWan(info.pf_tp, info.pf_tp_unit), tenders.length ? toWan(contract, '元') : null, hasMeasured ? toWan(measured, '元') : null, finalAmount]) });
             }
             return result;
         }