Browse Source

期汇总数据

MaiXinRong 5 năm trước cách đây
mục cha
commit
4f197dff80

+ 0 - 19
app/controller/stage_controller.js

@@ -1209,21 +1209,6 @@ module.exports = app => {
         }
 
         /**
-         * 报表
-         * @param ctx
-         * @returns {Promise<void>}
-         */
-        async report(ctx) {
-            try {
-                const renderData = await this._getDefaultRenderData(ctx);
-                await this.layout('stage/report.ejs', renderData, 'stage/report_modal.ejs');
-            } catch (err) {
-                this.log(err);
-                ctx.redirect('/tender/' + ctx.tender.id + '/measure/stage');
-            }
-        }
-
-        /**
          * 上传附件
          * @param {Object} ctx - egg全局变量
          * @return {void}
@@ -1577,10 +1562,6 @@ module.exports = app => {
 
             ctx.body = responseData;
         }
-
-        async differ(ctx) {
-
-        }
     }
 
     return StageController;

+ 1 - 1
app/lib/rpt_data_analysis.js

@@ -394,7 +394,7 @@ const gatherChapter = {
         const gatherRelaFields = function (chapter, source, field) {
             const fields = field instanceof Array ? field : [field];
             for (const f of fields) {
-                chapter[f.target] = ctx.helper.add(chapter[f.target], source[f.target]);
+                chapter[f.target] = ctx.helper.add(chapter[f.target], source[f.source]);
             }
         };
 

+ 4 - 0
app/service/report.js

@@ -148,6 +148,10 @@ module.exports = app => {
                             runnableRst.push(service.rptGatherMemory.getMaterialGl(params.tender_id, params.material_order, memFieldKeys[filter]));
                             runnableKey.push(filter);
                             break;
+                        case 'mem_sum_stage_bills':
+                            runnableRst.push(service.rptGatherMemory.getSumStageBillsData(params.tender_id, memFieldKeys[filter]));
+                            runnableKey.push(filter);
+                            break;
                         default:
                             break;
                     }

+ 55 - 0
app/service/report_memory.js

@@ -867,6 +867,61 @@ module.exports = app => {
                 return [];
             }
         }
+
+        async getSumStageBillsData(tid, sid, fields) {
+            await this.ctx.service.tender.checkTender(tid);
+
+            const billsData = await this.ctx.service.ledger.getData(this.ctx.tender.id);
+            const checkStageField = function (stageOrder) {
+                for (const f of fields) {
+                    if (f.indexOf('s' + stageOrder + '_') >= 0) {
+                        return true;
+                    }
+                }
+                return false;
+            };
+
+            const calcFields = ['deal_tp', 'total_price'], calcPrefix = [];
+            const stages = this.ctx.service.stage.getValidStages(this.ctx.tender.id);
+            for (const stage of stages) {
+                if (!checkStageField(stage.order)) return;
+
+                await this.ctx.service.stage.doCheckStage(stage);
+                calcFields.push('s' + stageOrder + '_contract_tp');
+                calcFields.push('s' + stageOrder + '_qc_tp');
+                calcFields.push('s' + stageOrder + '_gather_tp');
+                calcFields.push('s' + stageOrder + '_');
+
+                const curStage = stage.readOnly
+                    ? await this.ctx.service.stageBills.getAuditorStageData(this.ctx.tender.id, stage.id, stage.curTimes, stage.curOrder)
+                    : await this.ctx.service.stageBills.getLastestStageData(this.ctx.tender.id, stage.id);
+                this.ctx.helper.assignRelaData(billsData, [
+                    {data: curStage, fields: ['contract_qty', 'contract_tp', 'contract_expr', 'qc_qty', 'qc_tp'], prefix: 's' + stage.order + '_', relaId: 'lid'}
+                ]);
+            }
+
+            const billsTree = new Ledger.billsTree(this.ctx, {
+                id: 'ledger_id',
+                pid: 'ledger_pid',
+                order: 'order',
+                level: 'level',
+                rootId: -1,
+                keys: ['id', 'tender_id', 'ledger_id'],
+                stageId: 'id',
+                calcFields: calcFields,
+                calc: function (node) {
+                    for (const prefix of calcPrefix) {
+                        if (node.children && node.children.length === 0) {
+                            node[prefix + 'gather_qty'] = self.ctx.helper.add(node[prefix + 'contract_qty'], node[prefix + 'qc_qty']);
+                        }
+                        node[prefix + 'gather_tp'] = self.ctx.helper.add(node[prefix + 'contract_tp'], node[prefix + 'qc_tp']);
+                    }
+                }
+            });
+            billsTree.loadDatas(billsData);
+            billsTree.calculateAll();
+            return billsTree.getDefaultDatas();
+        }
     }
 
     return ReportMemory;

+ 3 - 5
app/service/stage.js

@@ -210,11 +210,8 @@ module.exports = app => {
         async checkStageGatherData(stage) {
             // 最新一期计量(未审批完成),当前操作人的期详细数据,应实时计算
             if (stage.status !== auditConst.status.checked) {
-                const curAuditor = await this.ctx.service.stageAudit.getCurAuditor(stage.id, stage.times);
-                const isActive = curAuditor ? curAuditor.aid === this.ctx.session.sessionUser.accountId : stage.user_id === this.ctx.session.sessionUser.accountId;
-                stage.curTimes = stage.status === auditConst.status.checkNo ? stage.times - 1 : stage.times;
-                stage.curOrder = curAuditor ? curAuditor.order : 0;
-                if (isActive && stage.check_calc) {
+                await this.doCheckStage(stage);
+                if (!stage.readOnly && stage.check_calc) {
                     const tpData = await this.ctx.service.stageBills.getSumTotalPrice(stage);
                     stage.contract_tp = tpData.contract_tp;
                     stage.qc_tp = tpData.qc_tp;
@@ -228,6 +225,7 @@ module.exports = app => {
                     }, {id: stage.id});
                 } else if (stage.tp_history) {
                     const his = this.ctx.helper._.find(stage.tp_history, {times: stage.curTimes, order: stage.curOrder});
+                    console.log(his);
                     if (his) {
                         stage.contract_tp = his.contract_tp;
                         stage.qc_tp = his.qc_tp;

+ 81 - 1
builder_report_index_define.js

@@ -1009,6 +1009,85 @@ const materialGl = {
     ],
 };
 
+const sum_stage_bills = {
+    name: '期汇总-清单数据表(mem_sum_stage_bills)',
+    remark: '',
+    id: 42,
+    key: 'mem_sum_stage_bills',
+    prefix: '期汇总-清单数据',
+    cols: [
+        { name: '台账ID', field: 'id', type: dataType.int },
+        { name: '标段ID', field: 'tender_id', type: dataType.int },
+        { name: '树结构-ID', field: 'ledger_id', type: dataType.int },
+        { name: '树结构-父项ID', field: 'ledger_pid', type: dataType.int },
+        { name: '树结构-层级', field: 'level', type: dataType.int },
+        { name: '树结构-同层排序', field: 'order', type: dataType.int },
+        { name: '树结构-完整路径', field: 'full_path', type: dataType.str },
+        { name: '树结构-是否子项', field: 'is_leaf', type: dataType.int }, // 8
+
+        { name: '项目节编号', field: 'code', type: dataType.str },
+        { name: '清单编号', field: 'b_code', type: dataType.str },
+        { name: '名称', field: 'name', type: dataType.str },
+        { name: '单位', field: 'unit', type: dataType.str }, // 12
+        { name: '单价', field: 'unit_price', type: dataType.currency },
+
+        { name: '签约-数量', field: 'deal_qty', type: dataType.currency },
+        { name: '签约-金额', field: 'deal_tp', type: dataType.currency },
+
+        { name: '施工复核-数量', field: 'sgfh_qty', type: dataType.currency },
+        { name: '施工复核-金额', field: 'sgfh_tp', type: dataType.currency },
+        { name: '设计错漏-数量', field: 'sjcl_qty', type: dataType.currency },
+        { name: '设计错漏-金额', field: 'sjcl_tp', type: dataType.currency },
+        { name: '其他错漏-数量', field: 'qtcl_qty', type: dataType.currency },
+        { name: '其他错漏-金额', field: 'qtcl_tp', type: dataType.currency },
+        { name: '台账-数量', field: 'quantity', type: dataType.currency },
+        { name: '台账-金额', field: 'total_price', type: dataType.currency },
+
+        { name: '项目节-数量1', field: 'dgn_qty1', type: dataType.currency },
+        { name: '项目节-数量2', field: 'dgn_qty2', type: dataType.currency },
+
+        { name: '图册号', field: 'drawing_code', type: dataType.str },
+        { name: '备注', field: 'memo', type: dataType.str },
+        { name: '节点类型', field: 'node_type', type: dataType.int },
+        { name: '总额计量', field: 'is_tp', type: dataType.int },
+
+        { name: '第1期-合同-数量', field: 's1_contract_qty', type: dataType.currency },
+        { name: '第1期-合同-金额', field: 's1_contract_tp', type: dataType.currency },
+        { name: '第1期-变更-数量', field: 's1_qc_qty', type: dataType.currency },
+        { name: '第1期-变更-金额', field: 's1_qc_tp', type: dataType.currency },
+        { name: '第1期-完成-数量', field: 's1_gather_qty', type: dataType.currency },
+        { name: '第1期-完成-金额', field: 's1_gather_tp', type: dataType.currency },
+
+        { name: '第2期-合同-数量', field: 's2_contract_qty', type: dataType.currency },
+        { name: '第2期-合同-金额', field: 's2_contract_tp', type: dataType.currency },
+        { name: '第2期-变更-数量', field: 's2_qc_qty', type: dataType.currency },
+        { name: '第2期-变更-金额', field: 's2_qc_tp', type: dataType.currency },
+        { name: '第2期-完成-数量', field: 's2_gather_qty', type: dataType.currency },
+        { name: '第2期-完成-金额', field: 's2_gather_tp', type: dataType.currency },
+
+        { name: '第3期-合同-数量', field: 's3_contract_qty', type: dataType.currency },
+        { name: '第3期-合同-金额', field: 's3_contract_tp', type: dataType.currency },
+        { name: '第3期-变更-数量', field: 's3_qc_qty', type: dataType.currency },
+        { name: '第3期-变更-金额', field: 's3_qc_tp', type: dataType.currency },
+        { name: '第3期-完成-数量', field: 's3_gather_qty', type: dataType.currency },
+        { name: '第3期-完成-金额', field: 's3_gather_tp', type: dataType.currency },
+
+        { name: '第4期-合同-数量', field: 's4_contract_qty', type: dataType.currency },
+        { name: '第4期-合同-金额', field: 's4_contract_tp', type: dataType.currency },
+        { name: '第4期-变更-数量', field: 's4_qc_qty', type: dataType.currency },
+        { name: '第4期-变更-金额', field: 's4_qc_tp', type: dataType.currency },
+        { name: '第4期-完成-数量', field: 's4_gather_qty', type: dataType.currency },
+        { name: '第4期-完成-金额', field: 's4_gather_tp', type: dataType.currency },
+
+        { name: '第5期-合同-数量', field: 's5_contract_qty', type: dataType.currency },
+        { name: '第5期-合同-金额', field: 's5_contract_tp', type: dataType.currency },
+        { name: '第5期-变更-数量', field: 's5_qc_qty', type: dataType.currency },
+        { name: '第5期-变更-金额', field: 's5_qc_tp', type: dataType.currency },
+        { name: '第5期-完成-数量', field: 's5_gather_qty', type: dataType.currency },
+        { name: '第5期-完成-金额', field: 's5_gather_tp', type: dataType.currency },
+    ],
+};
+
 const recursiveMkdirSync = async function(pathName) {
     if (!fs.existsSync(pathName)) {
         const upperPath = path.dirname(pathName);
@@ -1109,7 +1188,8 @@ const defines = [
     stage_pay,
     stage_im_zl, stage_im_tz, stage_im_tz_bills,
     gather_stage_bills, gather_tender_info, gather_stage_pay, gather_deal_bills,
-    material, materialGl
+    material, materialGl,
+    sum_stage_bills
 ];
 for (const d of defines) {
     exportTableDefine(d);