Explorar o código

报表,汇总表,分表后取值调整

MaiXinRong %!s(int64=4) %!d(string=hai) anos
pai
achega
fb603dbd38

+ 2 - 2
app/base/base_service.js

@@ -47,8 +47,8 @@ class BaseService extends Service {
     get tableName() {
         if (this.depart <= 0) return this._table;
 
-        if (!this.ctx.tender) throw '获取数据表错误';
-        return this._table + '_' + (this.ctx.tender.id % this.depart);
+        if (!this.ctx.query_tender && !this.ctx.tender) throw '获取数据表错误';
+        return this._table + '_' + ((this.ctx.query_tender ? this.ctx.query_tender.id : this.ctx.tender.id) % this.depart);
     }
 
     /**

+ 2 - 1
app/controller/spss_controller.js

@@ -31,11 +31,12 @@ module.exports = app => {
             if (!tender || tender.project_id !== this.ctx.session.sessionProject.id) {
                 throw '不存在该标段';
             }
-            this.ctx.tender = tender;
+            this.ctx.query_tender = tender;
             const bills = await this.ctx.service.ledger.getData(tid);
             const pos = tender.measure_type === measureType.tz.value || includePos
                 ? await this.ctx.service.pos.getPosData({tid: tid})
                 : [];
+            this.ctx.query_tender = null;
 
             return { id: tid, name: tender.name, bills: bills, pos: pos };
         }

+ 2 - 1
app/controller/tender_controller.js

@@ -123,7 +123,7 @@ module.exports = app => {
                 const tenderList = await this.ctx.service.tender.getList('', userPermission);
 
                 for (const t of tenderList) {
-                    this.ctx.tender = t;
+                    this.ctx.query_tender = t;
                     if (t.user_id === this.ctx.session.sessionUser.accountId && (
                         t.ledger_status === auditConst.ledger.status.checkNo || t.ledger_status === auditConst.ledger.status.uncheck)) {
                         const sum = await this.ctx.service.ledger.addUp({ tender_id: t.id/* , is_leaf: true*/ });
@@ -148,6 +148,7 @@ module.exports = app => {
                         await this._getLedgerAuditInfo(t);
                     }
                 }
+                this.ctx.query_tender = null;
                 const categoryData = await this.ctx.service.category.getAllCategory(this.ctx.session.sessionProject.id);
                 const valuations = await this.ctx.service.valuation.getProjectValidValuation(this.ctx.session.sessionProject.id);
                 const renderData = {

+ 2 - 1
app/controller/wap_controller.js

@@ -147,7 +147,7 @@ module.exports = app => {
 
                 const tenderList = await this.ctx.service.tender.getList('', userPermission);
                 for (const t of tenderList) {
-                    this.ctx.tender = t;
+                    this.ctx.query_tender = t;
                     if (t.user_id === this.ctx.session.sessionUser.accountId && (
                         t.ledger_status === auditConst.ledger.status.checkNo || t.ledger_status === auditConst.ledger.status.uncheck)) {
                         const sum = await this.ctx.service.ledger.addUp({tender_id: t.id/*, is_leaf: true*/});
@@ -166,6 +166,7 @@ module.exports = app => {
                         await this.ctx.service.stage.checkStageGatherData(t.lastStage);
                     }
                 }
+                this.ctx.query_tender = null;
                 const categoryData = await this.ctx.service.category.getAllCategory(this.ctx.session.sessionProject.id);
                 const valuations = await this.ctx.service.valuation.getProjectValidValuation(this.ctx.session.sessionProject.id);
                 const renderData = {

+ 120 - 105
app/service/rpt_gather_memory.js

@@ -284,18 +284,33 @@ module.exports = app => {
                     const curStage = await this.ctx.service.stageBills.getAuditorStageData(tender.id,
                         stage.id, stage.curTimes, stage.curOrder);
                     this.ctx.helper.assignRelaData(billsData, [
-                        {data: curStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: '', relaId: 'lid'}
+                        {
+                            data: curStage,
+                            fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'],
+                            prefix: '',
+                            relaId: 'lid'
+                        }
                     ]);
                 } else {
                     const curStage = await this.ctx.service.stageBills.getLastestStageData(tender.id, stage.id);
                     this.ctx.helper.assignRelaData(billsData, [
-                        {data: curStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: '', relaId: 'lid'}
+                        {
+                            data: curStage,
+                            fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'],
+                            prefix: '',
+                            relaId: 'lid'
+                        }
                     ]);
                 }
                 if (hasPre) {
                     const preStage = stage.order > 1 ? await this.ctx.service.stageBillsFinal.getFinalData(tender, stage.order - 1) : [];
                     this.ctx.helper.assignRelaData(billsData, [
-                        {data: preStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: 'pre_', relaId: 'lid'}
+                        {
+                            data: preStage,
+                            fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'],
+                            prefix: 'pre_',
+                            relaId: 'lid'
+                        }
                     ]);
                 }
             }
@@ -304,7 +319,6 @@ module.exports = app => {
             this.resultTree.loadGatherTree(billsTree, function (gatherNode, sourceNode) {
                 gatherUtils.gatherStage(tender, gatherNode, sourceNode, completeData.prefix, helper);
             });
-
         }
 
         async _gatherStagesData(completeData, tender, stages) {
@@ -368,14 +382,20 @@ module.exports = app => {
                 if (stage.readOnly) {
                     const curStage = await this.ctx.service.stageBills.getAuditorStageData(tender.id,
                         stage.id, stage.curTimes, stage.curOrder);
-                    sumAssignRelaData(billsIndexData, [
-                        {data: curStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: '', relaId: 'lid'}
-                    ]);
+                    sumAssignRelaData(billsIndexData, [{
+                        data: curStage,
+                        fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'],
+                        prefix: '',
+                        relaId: 'lid'
+                    }]);
                 } else {
                     const curStage = await this.ctx.service.stageBills.getLastestStageData(tender.id, stage.id);
-                    sumAssignRelaData(billsIndexData, [
-                        {data: curStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: '', relaId: 'lid'}
-                    ]);
+                    sumAssignRelaData(billsIndexData, [{
+                        data: curStage,
+                        fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'],
+                        prefix: '',
+                        relaId: 'lid'
+                    }]);
                 }
             }
 
@@ -386,45 +406,39 @@ module.exports = app => {
             });
         }
 
-        async _gatherMonthData(sTender, completeData, month, hasPre) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherMonthData(tender, completeData, month, hasPre) {
             const stages = await this._getValidStages(tender.id);
             const stage = this.ctx.helper._.find(stages, {s_time: month});
             await this._gatherStageData(completeData, tender, stage, hasPre);
         }
 
-        async _gatherIndexData(sTender, completeData, index, hasPre) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherIndexData(tender, completeData, index, hasPre) {
             const stages = await this._getValidStages(tender.id);
             const stage = this.ctx.helper._.find(stages, {order: index});
             await this._gatherStageData(completeData, tender, stage, hasPre);
         }
 
-        async _gatherZoneData(sTender, completeData, zone) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherZoneData(tender, completeData, zone) {
             const stages = await this._getTimeZoneStages(tender, zone);
             await this._gatherStagesData(completeData, tender, stages);
         }
 
-        async _gatherIndexZoneData(sTender, completeData, stageZone) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherIndexZoneData(tender, completeData, stageZone) {
             const stages = await this._getOrderZoneStages(tender, stageZone);
             await this._gatherStagesData(completeData, tender, stages);
         }
 
-        async _gatherFinalData(sTender, completeData, hasPre) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherFinalData(tender, completeData, hasPre) {
             const stages = await this._getValidStages(tender.id);
             await this._gatherStageData(completeData, tender, stages[0], hasPre);
         }
 
-        async _gatherCheckedFinalData(sTender, completeData, hasPre) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherCheckedFinalData(tender, completeData, hasPre) {
             const stages = await this._getCheckedStages(tender.id);
             await this._gatherStageData(completeData, tender, stages[0], hasPre);
         }
 
-        async _gatherLedgerData(sTender, completeData) {
+        async _gatherLedgerData(tender, completeData) {
             const helper = this.ctx.helper;
             const billsTree = new Ledger.billsTree(this.ctx, {
                 id: 'ledger_id',
@@ -436,16 +450,15 @@ module.exports = app => {
                 stageId: 'id',
                 calcFields: ['deal_tp', 'total_price'],
             });
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
             const billsData = await this.ctx.service.ledger.getData(tender.id);
             billsTree.loadDatas(billsData);
             billsTree.calculateAll();
             this.resultTree.loadGatherTree(billsTree, function (gatherNode, sourceNode) {
                 gatherUtils.gatherLedger(tender, gatherNode, sourceNode, completeData.prefix, helper);
-            })
+            });
         }
 
-        async _gatherSpecialData(sTender, sKey) {
+        async _gatherSpecialData(tender, sKey) {
             const helper = this.ctx.helper;
             const billsTree = new Ledger.billsTree(this.ctx, {
                 id: 'ledger_id',
@@ -457,13 +470,12 @@ module.exports = app => {
                 stageId: 'id',
                 calcFields: ['deal_tp', 'total_price'],
             });
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
             const billsData = await this.ctx.service.ledger.getData(tender.id);
             billsTree.loadDatas(billsData);
             billsTree.calculateAll();
             this.resultTree.loadGatherTree(billsTree, function (gatherNode, sourceNode) {
                 gatherUtils.gatherSpecial(gatherNode, sourceNode, 'ts_' + sKey + '_', helper);
-            })
+            });
         }
 
         async getGatherStageBills(memFieldKeys, gsDefine, gsCustom) {
@@ -473,40 +485,46 @@ module.exports = app => {
             const gsSetting = JSON.parse(gsDefine.setting);
             let commonIndex = 0;
             const completeDatas = [];
-            for (const tender of gsCustom.tenders) {
-                const specialKey = this._checkSpecialTender(tender, gsSetting.special);
-                if (specialKey === '') {
-                    const completeData = {
-                        prefix: 't_' + commonIndex + '_',
-                    };
-                    completeDatas.push(completeData);
-                    switch (gsSetting.type) {
-                        case 'month':
-                            await this._gatherMonthData(tender, completeData, gsCustom.month, gsSetting.hasPre);
-                            break;
-                        case 'zone':
-                            await this._gatherZoneData(tender, completeData, gsCustom.zone);
-                            break;
-                        case 'final':
-                            await this._gatherFinalData(tender, completeData, gsSetting.hasPre);
-                            break;
-                        case 'checked-final':
-                            await this._gatherCheckedFinalData(tender, completeData, gsSetting.hasPre);
-                            break;
-                        case 'ledger':
-                            await this._gatherLedgerData(tender, completeData);
-                            break;
-                        case 'stage':
-                            await this._gatherIndexData(tender, completeData, gsCustom.stage, gsSetting.hasPre);
-                            break;
-                        case 'stage-zone':
-                            await this._gatherIndexZoneData(tender, completeData, gsCustom.stage_zone);
-                            break;
+            for (const t of gsCustom.tenders) {
+                const specialKey = this._checkSpecialTender(t, gsSetting.special);
+                const tender = await this.ctx.service.tender.getCheckTender(t.tid);
+                this.ctx.query_tender = tender;
+                try {
+                    if (specialKey === '') {
+                        const completeData = {
+                            prefix: 't_' + commonIndex + '_',
+                        };
+                        completeDatas.push(completeData);
+                        switch (gsSetting.type) {
+                            case 'month':
+                                await this._gatherMonthData(tender, completeData, gsCustom.month, gsSetting.hasPre);
+                                break;
+                            case 'zone':
+                                await this._gatherZoneData(tender, completeData, gsCustom.zone);
+                                break;
+                            case 'final':
+                                await this._gatherFinalData(tender, completeData, gsSetting.hasPre);
+                                break;
+                            case 'checked-final':
+                                await this._gatherCheckedFinalData(tender, completeData, gsSetting.hasPre);
+                                break;
+                            case 'ledger':
+                                await this._gatherLedgerData(tender, completeData);
+                                break;
+                            case 'stage':
+                                await this._gatherIndexData(tender, completeData, gsCustom.stage, gsSetting.hasPre);
+                                break;
+                            case 'stage-zone':
+                                await this._gatherIndexZoneData(tender, completeData, gsCustom.stage_zone);
+                                break;
+                        }
+                        commonIndex++;
+                    } else {
+                        await this._gatherSpecialData(tender, specialKey);
                     }
-                    commonIndex++;
-                } else {
-                    await this._gatherSpecialData(tender, specialKey);
+                } catch(err) {
                 }
+                this.ctx.query_tender = null;
             }
 
             this.resultTree.generateSortNodes();
@@ -580,8 +598,7 @@ module.exports = app => {
             info.gather_tp = helper.add(info.contract_tp, info.qc_tp);
         }
 
-        async _gatherMonthTenderInfo(sTender, index, month, hasPre) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherMonthTenderInfo(tender, index, month, hasPre) {
             const info = await this._getBaseTenderInfo(tender);
             const stages = await this._getValidStages(tender.id);
             const stage = this.ctx.helper._.find(stages, {s_time: month});
@@ -589,8 +606,7 @@ module.exports = app => {
             this.resultTenderInfo.push(info);
         }
 
-        async _gatherOrderTenderInfo(sTender, index, order, hasPre) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherOrderTenderInfo(tender, index, order, hasPre) {
             const info = await this._getBaseTenderInfo(tender);
             const stages = await this._getValidStages(tender.id);
             const stage = this.ctx.helper._.find(stages, {order: order});
@@ -598,47 +614,40 @@ module.exports = app => {
             this.resultTenderInfo.push(info);
         }
 
-        async _gatherZoneTenderInfo(sTender, index, zone) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherZoneTenderInfo(tender, index, zone) {
             const info = await this._getBaseTenderInfo(tender);
             const stages = await this._getTimeZoneStages(tender, zone);
             await this._getStagesTenderInfo(stages, info);
             this.resultTenderInfo.push(info);
         }
 
-        async _gatherOrderZoneTenderInfo(sTender, index, stageZone) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherOrderZoneTenderInfo(tender, index, stageZone) {
             const info = await this._getBaseTenderInfo(tender);
             const stages = await this._getOrderZoneStages(tender, stageZone);
             await this._getStagesTenderInfo(stages, info);
             this.resultTenderInfo.push(info);
         }
 
-        async _gatherFinalTenderInfo(sTender, index, hasPre) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherFinalTenderInfo(tender, index, hasPre) {
             const info = await this._getBaseTenderInfo(tender);
             const stages = await this._getValidStages(tender.id);
             await this._getStageTenderInfo(stages[0], info);
             this.resultTenderInfo.push(info);
         }
 
-        async _gatherCheckedFinalTenderInfo(sTender, index, hasPre) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherCheckedFinalTenderInfo(tender, index, hasPre) {
             const info = await this._getBaseTenderInfo(tender);
             const stages = await this._getCheckedStages(tender.id);
             await this._getStageTenderInfo(stages[0], info);
             this.resultTenderInfo.push(info);
         }
 
-        async _gatherLedgerTenderInfo(sTender, index) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+        async _gatherLedgerTenderInfo(tender, index) {
             const info = await this._getBaseTenderInfo(tender);
             this.resultTenderInfo.push(info);
         }
 
-        async _gatherSpecialTenderInfo(sTender, sKey) {
-            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
-
+        async _gatherSpecialTenderInfo(tender, sKey) {
             const info = await this._getBaseTenderInfo(tender);
             info.spec = sKey;
             this.resultTenderInfo.push(info);
@@ -651,36 +660,42 @@ module.exports = app => {
             this.resultTenderInfo = [];
             const gsSetting = JSON.parse(gsDefine.setting);
             let commonIndex = 0;
-            for (const tender of gsCustom.tenders) {
-                const specialKey = this._checkSpecialTender(tender, gsSetting.special);
-                if (specialKey === '') {
-                    switch (gsSetting.type) {
-                        case 'month':
-                            await this._gatherMonthTenderInfo(tender, commonIndex, gsCustom.month, gsSetting.hasPre);
-                            break;
-                        case 'zone':
-                            await this._gatherZoneTenderInfo(tender, commonIndex, gsCustom.zone);
-                            break;
-                        case 'final':
-                            await this._gatherFinalTenderInfo(tender, commonIndex, gsSetting.hasPre);
-                            break;
-                        case 'checked-final':
-                            await this._gatherCheckedFinalTenderInfo(tender, commonIndex, gsSetting.hasPre);
-                            break;
-                        case 'ledger':
-                            await this._gatherLedgerTenderInfo(tender, commonIndex);
-                            break;
-                        case 'stage':
-                            await this._gatherOrderTenderInfo(tender, commonIndex, gsCustom.stage, gsSetting.hasPre);
-                            break;
-                        case 'stage-zone':
-                            await this._gatherOrderZoneTenderInfo(tender, commonIndex, gsCustom.stage_zone);
-                            break;
+            for (const t of gsCustom.tenders) {
+                const specialKey = this._checkSpecialTender(t, gsSetting.special);
+                const tender = await this.ctx.service.tender.getCheckTender(t.tid);
+                this.ctx.query_tender = tender;
+                try {
+                    if (specialKey === '') {
+                        switch (gsSetting.type) {
+                            case 'month':
+                                await this._gatherMonthTenderInfo(tender, commonIndex, gsCustom.month, gsSetting.hasPre);
+                                break;
+                            case 'zone':
+                                await this._gatherZoneTenderInfo(tender, commonIndex, gsCustom.zone);
+                                break;
+                            case 'final':
+                                await this._gatherFinalTenderInfo(tender, commonIndex, gsSetting.hasPre);
+                                break;
+                            case 'checked-final':
+                                await this._gatherCheckedFinalTenderInfo(tender, commonIndex, gsSetting.hasPre);
+                                break;
+                            case 'ledger':
+                                await this._gatherLedgerTenderInfo(tender, commonIndex);
+                                break;
+                            case 'stage':
+                                await this._gatherOrderTenderInfo(tender, commonIndex, gsCustom.stage, gsSetting.hasPre);
+                                break;
+                            case 'stage-zone':
+                                await this._gatherOrderZoneTenderInfo(tender, commonIndex, gsCustom.stage_zone);
+                                break;
+                        }
+                        commonIndex++;
+                    } else {
+                        await this._gatherSpecialTenderInfo(tender, specialKey);
                     }
-                    commonIndex++;
-                } else {
-                    await this._gatherSpecialTenderInfo(tender, specialKey);
+                } catch (err) {
                 }
+                this.ctx.query_tender = null;
             }
             return this.resultTenderInfo;
         }