Browse Source

1. 报表内存表,新增变更令数据
2. 报表内存表,变更令、变更清单数据,添加所有审批人数据

MaiXinRong 5 years ago
parent
commit
e7f16c7b27
3 changed files with 123 additions and 14 deletions
  1. 77 12
      app/service/report_memory.js
  2. 41 1
      builder_report_index_define.js
  3. 5 1
      test/app/service/report_memory.test.js

+ 77 - 12
app/service/report_memory.js

@@ -87,6 +87,7 @@ module.exports = app => {
             });
             // 需要缓存的数据
             this.stageImData = null;
+            this.changeData = null;
         }
 
         _checkFieldsExist(source, check) {
@@ -562,21 +563,85 @@ module.exports = app => {
             return dealPay;
         }
 
+        async _generateChange(tid) {
+            if (this.changeData !== null) return;
+            try {
+                const decimal = this.ctx.tender.info.decimal, ctx = this.ctx;
+                const change = await this.ctx.service.change.getListByStatus(tid, 3);
+                const changeBills = await this.ctx.service.changeAuditList.getChangeAuditBills(tid);
+                for (const d of changeBills) {
+                    //const precision = this.ctx.helper.findPrecision(this.ctx.tender.info.precision, d.unit);
+                    d.o_qty = d.oamount;
+                    d.o_tp = this.ctx.helper.mul(d.o_qty, d.unit_price, decimal.tp);
+                    d.c_qty = d.camount;
+                    d.c_tp = this.ctx.helper.mul(d.c_qty, d.unit_price, decimal.tp);
+                    d.s_qty = d.samount ? parseFloat(d.samount) : 0;
+                    d.s_tp = this.ctx.helper.mul(d.s_qty, d.unit_price, decimal.tp);
+
+                    const auditAmount = d.audit_amount.split(',');
+                    const relaChange = ctx.helper._.find(change, {cid: d.cid});
+                    for (const [i, aa] of auditAmount.entries()) {
+                        const amountField = 'amount_' + (i+1), tpField = 'tp_' + (i+1);
+                        d[amountField] = aa ? parseFloat(aa) : 0;
+                        d[tpField] = ctx.helper.mul(d[amountField], d.unit_price, decimal.tp);
+                        if (relaChange) {
+                            relaChange[tpField] = ctx.helper.add(relaChange[tpField], d[tpField]);
+                        }
+                    }
+                }
+
+                change.sort(function (a, b) {
+                    return a.code.localeCompare(b.code);
+                });
+                changeBills.sort(function (a, b) {
+                    const aCIndex = change.findIndex(function (c) {
+                        return c.cid === a.cid;
+                    });
+                    const bCIndex = change.findIndex(function (c) {
+                        return c.cid === b.cid;
+                    });
+                    return aCIndex === bCIndex
+                        ? ctx.helper.compareCode(a.code, b.code)
+                        : aCIndex - bCIndex;
+                });
+                this.changeData = {change: change, bills: changeBills};
+            } catch(err) {
+                this.ctx.helper.log(err);
+                throw err;
+                this.changeData = {change: [], bills: []};
+            }
+
+        }
+
+        async getChangeData(tid, sid, fields) {
+            await this.ctx.service.tender.checkTender(tid);
+
+            await this._generateChange(tid);
+            return this.changeData.change;
+        }
+
         async getChangeBillsData(tid, sid, fields) {
             await this.ctx.service.tender.checkTender(tid);
 
-            const data = await this.ctx.service.changeAuditList.getChangeAuditBills(tid);
-            const decimal = this.ctx.tender.info.decimal;
-            for (const d of data) {
-                //const precision = this.ctx.helper.findPrecision(this.ctx.tender.info.precision, d.unit);
-                d.o_qty = d.oamount;
-                d.o_tp = this.ctx.helper.mul(d.o_qty, d.unit_price, decimal.tp);
-                d.c_qty = d.camount;
-                d.c_tp = this.ctx.helper.mul(d.c_qty, d.unit_price, decimal.tp);
-                d.s_qty = d.samount ? parseFloat(d.samount) : 0;
-                d.s_tp = this.ctx.helper.mul(d.s_qty, d.unit_price, decimal.tp);
-            }
-            return data;
+            await this._generateChange(tid);
+            return this.changeData.bills;
+            // const data = await this.ctx.service.changeAuditList.getChangeAuditBills(tid);
+            // for (const d of data) {
+            //     //const precision = this.ctx.helper.findPrecision(this.ctx.tender.info.precision, d.unit);
+            //     d.o_qty = d.oamount;
+            //     d.o_tp = this.ctx.helper.mul(d.o_qty, d.unit_price, decimal.tp);
+            //     d.c_qty = d.camount;
+            //     d.c_tp = this.ctx.helper.mul(d.c_qty, d.unit_price, decimal.tp);
+            //     d.s_qty = d.samount ? parseFloat(d.samount) : 0;
+            //     d.s_tp = this.ctx.helper.mul(d.s_qty, d.unit_price, decimal.tp);
+            //
+            //     const auditAmount = d.audit_amount.split(',');
+            //     for (const [i, aa] of auditAmount.entries()) {
+            //         d['amount_' + (i + 1)] = aa ? parseFloat(aa) : 0;
+            //         d['tp_' + (i + 1)] = this.ctx.helper.mul(d['amount_' + i], d.unit_price, decimal.tp);
+            //     }
+            // }
+            //return data;
         }
 
         async getStageJgcl(tid, sid, fields) {

+ 41 - 1
builder_report_index_define.js

@@ -101,6 +101,46 @@ const stage_other = {
         {name: '截止上期-金额', field: 'pre_tp', type: dataType.currency, tag: {type: 'tp'}},
     ]
 };
+const change = {
+    name: '变更令(mem_change)',
+    remark: '',
+    id: 33,
+    key: 'mem_change',
+    prefix: '变更令',
+    cols: [
+        {name: '变更令id', field: 'cid', type: dataType.str},
+        {name: '变更令号', field: 'code', type: dataType.str},
+        {name: '批复文号', field: 'w_code', type: dataType.str},
+        {name: '批复编号', field: 'p_code', type: dataType.str},
+        {name: '变更名称', field: 'name', type: dataType.str},
+        {name: '桩号', field: 'peg', type: dataType.str},
+        {name: '原设计图名称', field: 'org_name', type: dataType.str},
+        {name: '原图号', field: 'org_code', type: dataType.str},
+        {name: '变更设计图名称', field: 'new_name', type: dataType.str},
+        {name: '变更图号', field: 'new_code', type: dataType.str},
+        {name: '工程变更理由及内容', field: 'content', type: dataType.str},
+        {name: '工程变更合同依据', field: 'basis', type: dataType.str},
+        {name: '变更工程量数量计算式', field: 'expr', type: dataType.str},
+        {name: '备注', field: 'memo', type: dataType.str},
+        {name: '变更类型', field: 'type', type: dataType.str},
+        {name: '变更类别', field: 'class', type: dataType.int},
+        {name: '变更性质', field: 'quality', type: dataType.int},
+        {name: '变更提出单位', field: 'company', type: dataType.str},
+        {name: '费用承担方', field: 'charge', type: dataType.int},
+        {name: '金额', field: 'total_price', type: dataType.currency, tag: {type: 'tp'}},
+        {name: '变更状态发生时间(时间戳)', field: 'cin_time', type: dataType.str},
+        {name: '完成审批时间(时间戳)', field: 'sin—_ime', type: dataType.str},
+        {name: '金额_1', field: 'tp_1', type: dataType.currency, tag: {type: 'tp'}},
+        {name: '金额_2', field: 'tp_2', type: dataType.currency, tag: {type: 'tp'}},
+        {name: '金额_3', field: 'tp_3', type: dataType.currency, tag: {type: 'tp'}},
+        {name: '金额_4', field: 'tp_4', type: dataType.currency, tag: {type: 'tp'}},
+        {name: '金额_5', field: 'tp_5', type: dataType.currency, tag: {type: 'tp'}},
+        {name: '金额_6', field: 'tp_6', type: dataType.currency, tag: {type: 'tp'}},
+        {name: '金额_7', field: 'tp_7', type: dataType.currency, tag: {type: 'tp'}},
+        {name: '金额_8', field: 'tp_8', type: dataType.currency, tag: {type: 'tp'}},
+        {name: '金额_9', field: 'tp_9', type: dataType.currency, tag: {type: 'tp'}},
+    ]
+};
 
 const recursiveMkdirSync = async function (pathName) {
     if (!fs.existsSync(pathName)) {
@@ -188,7 +228,7 @@ const exportTableDefine = async function (define) {
     await saveTableDefine(tableDefine, path.join(savePath, define.key + '.json'));
 };
 
-const defines = [stage_bonus, stage_jgcl, stage_other];
+const defines = [change];
 for (const d of defines) {
     exportTableDefine(d);
 }

+ 5 - 1
test/app/service/report_memory.test.js

@@ -397,9 +397,13 @@ describe('test/app/service/report_memory.test.js', () => {
         addFields(tableDefine, prefix + '金额10', 'tp10', dataType.currency);
         yield saveTableDefine(ctx, tableDefine, path.join(savePath, 'mem_union_data.json'));
     });
-    it('test mem_change_bills', function* () {
+    it('test mem_change_bills && mem_change ', function* () {
         const ctx = app.mockContext(mockData);
 
+        const change = yield ctx.service.reportMemory.getChangeData(12);
+        if (change instanceof Array) {
+            yield ctx.helper.saveBufferFile(JSON.stringify(change, '', '\t'), path.join(savePath, 'mem_change.json'));
+        }
         const data = yield ctx.service.reportMemory.getChangeBillsData(12);
         if (data instanceof Array) {
             yield ctx.helper.saveBufferFile(JSON.stringify(data, '', '\t'), path.join(savePath, 'mem_change_bills.json'));