Sfoglia il codice sorgente

1. 提供部分调差数据
2. 提供调差工料明细预处理

MaiXinRong 4 anni fa
parent
commit
0965b98e51

+ 3 - 0
app/lib/gcl_gather.js

@@ -244,6 +244,9 @@ const gclGatherModel = class {
         const loadLeafXmj = function (detail, calcSource) {
             const dx = helper._.assign({}, cacheLeafXmj);
             dx.gcl_id = gcl.id;
+            dx.org_gcl_id = node.id;
+            // dx.org_gcl_id = gcl.id;
+            // dx.gcl_id = node.id;
             if (detail.name !== node.name) {
                 dx.bwmx = detail.name;
                 dx.mx_id = detail.id;

+ 49 - 0
app/lib/rpt_data_analysis.js

@@ -12,6 +12,7 @@ const math = require('mathjs');
 const standard = require('../const/standard');
 const moment = require('moment');
 moment.locale('zh-cn');
+const fs = require('fs');
 
 const valueCheck = {
     _typeFun: {
@@ -1712,6 +1713,53 @@ const gatherGcl2 = {
         data.mem_gcl_gather_xmj = gatherUtil.leafXmjs;
     }
 };
+const gatherMaterialGl = {
+    name: '分类汇总调差工料',
+    hint: '根据工程量清单分类汇总调差工料,要求先使用【工程量清单汇总2】处理得到工程量清单数据,并引入【调差工料明细】',
+    fun(ctx, data, fieldsKey, options, csRela) {
+        if (!data.mem_gcl_gather_bills || !data.mem_gcl_gather_xmj || !data.mem_material_gl_detail) return;
+
+        const result = [];
+        for (const d of data.mem_material_gl_detail) {
+            const xmj = data.mem_gcl_gather_xmj.find(x => {
+                return d.gcl_id === x.org_gcl_id && d.xmj_id === x.id && (!d.mx_id || d.mx_id === x.mx_id);
+            });
+            if (!xmj) continue;
+
+            const gcl = data.mem_gcl_gather_bills.find(x => {
+                return x.id === xmj.gcl_id;
+            });
+            if (!gcl) continue;
+
+            const gd = result.find(x => {
+                return x.gather_gcl_id === gcl.id && x.mb_id === d.mb_id;
+            });
+            if (!gd) {
+                result.push({
+                    gather_gcl_id: gcl.id,
+                    mb_id: d.mb_id,
+                    gather_qty: d.gather_qty,
+                    quantity: d.quantity,
+                    b_code: gcl.b_code,
+                    name: gcl.name,
+                    unit: gcl.unit,
+                    unit_price: gcl.unit_price,
+                    cur_contract_qty: gcl.contract_qty,
+                    cur_contract_tp: gcl.contract_tp,
+                    cur_qc_qty: gcl.qc_qty,
+                    cur_qc_tp: gcl.qc_tp,
+                    cur_gather_qty: gcl.gather_qty,
+                    cur_gather_tp: gcl.gather_tp,
+                });
+            } else {
+                gd.gather_qty = ctx.helper.add(gd.gather_qty, d.gather_qty);
+                gd.quantity = ctx.helper.add(gd.quantity, d.quantity);
+            }
+        }
+        console.log(result);
+        data.mem_material_gl_detail = result;
+    }
+};
 
 const analysisObj = {
     changeSort,
@@ -1735,6 +1783,7 @@ const analysisObj = {
     getChangeLedger,
     treeFilter,
     gatherGcl2,
+    gatherMaterialGl,
 };
 const analysisDefine = (function(obj) {
     const result = [];

+ 18 - 6
app/service/report.js

@@ -158,6 +158,18 @@ module.exports = app => {
                             runnableRst.push(service.reportMemory.getMaterialGl(params.tender_id, params.material_order, memFieldKeys[filter]));
                             runnableKey.push(filter);
                             break;
+                        case 'mem_material_gl_detail':
+                            runnableRst.push(service.reportMemory.getMaterialGlDetail(params.tender_id, params.material_order, memFieldKeys[filter]));
+                            runnableKey.push(filter);
+                            break;
+                        case 'mem_material_bills':
+                            runnableRst.push(service.reportMemory.getMaterialBills(params.tender_id, params.material_order, memFieldKeys[filter]));
+                            runnableKey.push(filter);
+                            break;
+                        case 'mem_material_pos':
+                            runnableRst.push(service.reportMemory.getMaterialPos(params.tender_id, params.material_order, memFieldKeys[filter]));
+                            runnableKey.push(filter);
+                            break;
                         case 'mem_stage_sum_bills':
                             runnableRst.push(service.rptStageSumMemory.getStageSumBills(params.tender_id, memFieldKeys[filter],
                                 customDefine.stage_select, customSelect ? customSelect.stage_select : null));
@@ -206,12 +218,12 @@ module.exports = app => {
                     case 'mem_change_bills':
                         rst[filter] = await service.reportMemory.getChangeBillsData(params.tender_id, params.stage_id, memFieldKeys[filter]);
                         break;
-                    case 'mem_material_bills':
-                        rst[filter] = await service.rptGatherMemory.getMaterialBills(params.tender_id, params.material_order, memFieldKeys[filter]);
-                        break;
-                    case 'mem_material_bills_gl':
-                        rst[filter] = await service.rptGatherMemory.getMaterialBillsGl(params.tender_id, params.material_order, memFieldKeys[filter]);
-                        break;
+                    // case 'mem_material_bills':
+                    //     rst[filter] = await service.rptGatherMemory.getMaterialBills(params.tender_id, params.material_order, memFieldKeys[filter]);
+                    //     break;
+                    // case 'mem_material_bills_gl':
+                    //     rst[filter] = await service.rptGatherMemory.getMaterialBillsGl(params.tender_id, params.material_order, memFieldKeys[filter]);
+                    //     break;
                     default:
                         break;
                 }

+ 58 - 2
app/service/report_memory.js

@@ -882,7 +882,7 @@ module.exports = app => {
             }
         }
 
-        async getMaterial(tender_id, material_order, memFieldKeys) {
+        async getMaterial(tender_id, material_order, fields) {
             return await this.ctx.service.material.getValidMaterials(tender_id);
         }
 
@@ -902,7 +902,7 @@ module.exports = app => {
             }
         }
 
-        async getMaterialGl(tender_id, material_order, memFieldKeys) {
+        async getMaterialGl(tender_id, material_order, fields) {
             const materials = await this.ctx.service.material.getAllDataByCondition({
                 where: {tid: tender_id},
                 orders: [['order', 'desc']],
@@ -933,6 +933,62 @@ module.exports = app => {
             }
         }
 
+        async getMaterialGlDetail(tender_id, material_order, fields) {
+            const material = await this.ctx.service.material.getDataByCondition({tid: tender_id, order: material_order});
+            return material ? await this.ctx.service.materialList.getMaterialData(tender_id, material.id) : [];
+        }
+
+        async getMaterialBills(tender_id, material_order, fields) {
+            const material = await this.ctx.service.material.getDataByCondition({tid: tender_id, order: material_order});
+            try {
+                const billsData = await this.ctx.service.ledger.getData(tender_id);
+                if (this._checkFieldsExist(fields, billsFields.stage)) {
+                    const curStage = await this.ctx.service.stageBills.getStagesData(tender_id, material.stage_id);
+                    this.ctx.helper.assignRelaData(billsData, [
+                        {data: curStage, fields: ['contract_qty', 'contract_tp', 'contract_expr', 'qc_qty', 'qc_tp', 'postil'], prefix: '', relaId: 'lid'}
+                    ]);
+                }
+
+                const billsTree = this._getNewBillsTree();
+                billsTree.loadDatas(billsData);
+                billsTree.calculateAll();
+
+                return billsTree.getDatas([
+                    'id', 'tender_id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf',
+                    'code', 'b_code', 'name', 'unit', 'unit_price',
+                    'deal_qty', 'deal_tp',
+                    'sgfh_qty', 'sgfh_tp', 'sjcl_qty', 'sjcl_tp', 'qtcl_qty', 'qtcl_tp', 'quantity', 'total_price',
+                    'dgn_qty1', 'dgn_qty2',
+                    'drawing_code', 'memo', 'node_type', 'is_tp',
+                    'contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'gather_qty', 'gather_tp', 'postil',
+                    'sgfh_expr', 'sjcl_expr', 'qtcl_expr', 'contract_expr',
+                ]);
+            } catch(err) {
+                this.ctx.helper.log(err);
+                return [];
+            }
+        }
+
+        async getMaterialPos(tender_id, material_order, fields) {
+            const material = await this.ctx.service.material.getDataByCondition({tid: tender_id, order: material_order});
+            try {
+                const posData = await this.ctx.service.pos.getAllDataByCondition({ where: {tid: tender_id }});
+                if (this._checkFieldsExist(fields, posFields.stage)) {
+                    const curPosStage = await this.ctx.service.stagePos.getStagesData(tender_id, material.stage_id);
+                    this.ctx.helper.assignRelaData(posData, [
+                        {data: curPosStage, fields: ['contract_qty', 'qc_qty', 'contract_expr', 'postil'], prefix: '', relaId: 'pid'}
+                    ]);
+                }
+                this.pos.loadDatas(posData);
+                this.pos.calculateAll();
+
+                return this.pos.getDatas();
+            } catch (err) {
+                this.ctx.helper.log(err);
+                return [];
+            }
+        }
+
         async getSumStageBillsData(tid, sid, fields) {
             try {
                 await this.ctx.service.tender.checkTender(tid);

+ 124 - 1
builder_report_index_define.js

@@ -1120,6 +1120,128 @@ const materialGl = {
         { name: '备注', field: 'remark', type: dataType.str },
     ],
 };
+const material_bills = {
+    name: '材料调差-清单 数据表(mem_material_bills)',
+    remark: '',
+    id: 52,
+    key: 'mem_material_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, tag: { type: 'up' } },
+
+        { name: '签约-数量', field: 'deal_qty', type: dataType.currency, tag: { type: 'qty', unitKey: 12 } },
+        { name: '签约-金额', field: 'deal_tp', type: dataType.currency, tag: { type: 'tp' } },
+
+        { name: '施工复核-数量', field: 'sgfh_qty', type: dataType.currency, tag: { type: 'qty', unitKey: 12 } },
+        { name: '施工复核-金额', field: 'sgfh_tp', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '设计错漏-数量', field: 'sjcl_qty', type: dataType.currency, tag: { type: 'qty', unitKey: 12 } },
+        { name: '设计错漏-金额', field: 'sjcl_tp', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '其他错漏-数量', field: 'qtcl_qty', type: dataType.currency, tag: { type: 'qty', unitKey: 12 } },
+        { name: '其他错漏-金额', field: 'qtcl_tp', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '台账-数量', field: 'quantity', type: dataType.currency, tag: { type: 'qty', unitKey: 12 } },
+        { name: '台账-金额', field: 'total_price', type: dataType.currency, tag: { type: 'tp' } },
+
+        { 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: '本期-合同-数量', field: 'contract_qty', type: dataType.currency, tag: { type: 'qty', unitKey: 12 } },
+        { name: '本期-合同-金额', field: 'contract_tp', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '本期-数量变更-数量', field: 'qc_qty', type: dataType.currency, tag: { type: 'qty', unitKey: 12 } },
+        { name: '本期-数量变更-金额', field: 'qc_tp', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '本期-完成-数量', field: 'gather_qty', type: dataType.currency, tag: { type: 'qty', unitKey: 12 } },
+        { name: '本期-完成-金额', field: 'gather_tp', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '本期批注', field: 'postil', type: dataType.str },
+
+        { name: '预留扩展字段_1', field: 'ex_value1', type: dataType.currency },
+        { name: '预留扩展字段_2', field: 'ex_value2', type: dataType.currency },
+
+        { name: '施工复核-公式', field: 'sgfh_expr', type: dataType.currency },
+        { name: '设计错漏-公式', field: 'sjcl_expr', type: dataType.currency },
+        { name: '其他错漏-公式', field: 'qtcl_expr', type: dataType.currency },
+        { name: '本期-合同-公式', field: 'contract_expr', type: dataType.currency },
+    ],
+};
+const material_pos = {
+    name: '材料调差-计量单元(mem_material_pos)',
+    remark: '',
+    id: 53,
+    key: 'mem_material_pos',
+    prefix: '材料调差-计量单元',
+    cols: [
+        { name: 'id', field: 'id', type: dataType.str },
+        { name: '所属标段id', field: 'tid', type: dataType.int },
+        { name: '所属清单id', field: 'lid', type: dataType.str },
+        { name: '名称', field: 'name', type: dataType.str },
+        { name: '位置', field: 'position', type: dataType.str },
+        { name: '施工复核-数量', field: 'sgfh_qty', type: dataType.currency },
+        { name: '其他错漏-数量', field: 'qtcl_qty', type: dataType.currency },
+        { name: '设计错漏-数量', field: 'sjcl_qty', type: dataType.currency },
+        { name: '台账-数量', field: 'quantity', type: dataType.currency },
+        { name: '图号', field: 'drawing_code', type: dataType.str },
+        { name: '排序', field: 'p_order', type: dataType.str },
+        { name: '本期-合同计量-数量', field: 'contract_qty', type: dataType.currency },
+        { name: '本期-数量变更-数量', field: 'qc_qty', type: dataType.currency },
+        { name: '本期-数量变更-变更令', field: 'qc_bgl_code', type: dataType.str },
+        { name: '本期-完成计量-数量', field: 'gather_qty', type: dataType.currency },
+        { name: '本期批注', field: 'postil', type: dataType.str },
+
+        { name: '施工复核-公式', field: 'sgfh_expr', type: dataType.currency },
+        { name: '设计错漏-公式', field: 'sjcl_expr', type: dataType.currency },
+        { name: '其他错漏-公式', field: 'qtcl_expr', type: dataType.currency },
+        { name: '本期-合同-公式', field: 'contract_expr', type: dataType.currency },
+    ],
+};
+const material_gl_detail = {
+    name: '材料调差-调差工料明细(mem_material_gl_detail)',
+    remark: '',
+    id: 54,
+    key: 'mem_material_gl_detail',
+    prefix: '材料调差-调差工料明细',
+    cols: [
+        { name: 'id', field: 'id', type: dataType.int },
+        { name: '排序', field: 'order', type: dataType.int },
+        { name: '所属标段id', field: 'tid', type: dataType.int },
+        { name: '创建期id', field: 'mid', type: dataType.int },
+        { name: '所属工料id', field: 'mb_id', type: dataType.int },
+        { name: '清单id', field: 'gcl_id', type: dataType.int },
+        { name: '项目节id', field: 'xmj_id', type: dataType.int },
+        { name: '部位明细id', field: 'mx_id', type: dataType.int },
+        { name: '本期计量数量-小计', field: 'gather_qty', type: dataType.int },
+        { name: '数量', field: 'quantity', type: dataType.int },
+
+        { name: '清单编号(begin无值)', field: 'b_code', type: dataType.str },
+        { name: '名称', field: 'name', type: dataType.str },
+        { name: '单位', field: 'unit', type: dataType.str },
+        { name: '单价', field: 'unit_price', type: dataType.currency },
+
+        { name: '本期-合同-数量', field: 'cur_contract_qty', type: dataType.currency, },
+        { name: '本期-合同-金额', field: 'cur_contract_tp', type: dataType.currency, },
+        { name: '本期-数量变更-数量', field: 'cur_qc_qty', type: dataType.currency, },
+        { name: '本期-数量变更-金额', field: 'cur_qc_tp', type: dataType.currency, },
+        { name: '本期-完成-数量', field: 'cur_gather_qty', type: dataType.currency, },
+        { name: '本期-完成-金额', field: 'cur_gather_tp', type: dataType.currency, },
+
+        { name: '本期-价差(end无值)', field: 'jc', type: dataType.currency, },
+    ]
+};
 
 const stage_sum_bills = {
     name: '期汇总-清单-交叉数据表(mem_stage_sum_bills)',
@@ -1383,6 +1505,7 @@ const gcl_gather_xmj = {
         { name: '备用4-数量', field: 'spec4_qty', type: dataType.currency },
         { name: '备用5-数量', field: 'spec5_qty', type: dataType.currency },
         { name: '备用6-数量', field: 'spec6_qty', type: dataType.currency },
+        { name: 'id(项目节id)', field: 'id', type: dataType.int },
     ],
 };
 
@@ -1488,7 +1611,7 @@ 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, material_bills, material_pos, material_gl_detail,
     stage_sum_bills, stage_sum_pay, stage_audit, sign_select,
     stage_change_bills, stage_change_ledger,
     gcl_gather_bills, gcl_gather_xmj