|  | @@ -13,6 +13,7 @@ const PayCalculator = require('../lib/pay_calc');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  const auditConst = require('../const/audit');
 | 
	
		
			
				|  |  |  const payConst = require('../const/deal_pay');
 | 
	
		
			
				|  |  | +const materialConst = require('../const/material');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  const moment = require('moment');
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -766,6 +767,56 @@ module.exports = app => {
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              return this.resultDealBills;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        async getMaterial(tender_id, material_order, memFieldKeys) {
 | 
	
		
			
				|  |  | +            return await this.ctx.service.material.getValidMaterials(tender_id);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        _completeMaterialGl(materialGl) {
 | 
	
		
			
				|  |  | +            const tTypeStr = [], mTypeStr = [];
 | 
	
		
			
				|  |  | +            for (const t of materialConst.t_type) {
 | 
	
		
			
				|  |  | +                tTypeStr[t.value] = t.text;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            for (const m of materialConst.m_type) {
 | 
	
		
			
				|  |  | +                mTypeStr[m.value] = m.text;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            for (const gl of materialGl) {
 | 
	
		
			
				|  |  | +                gl.tp = this.ctx.helper.mul(gl.quantity, gl.m_spread);
 | 
	
		
			
				|  |  | +                gl.t_type_str = tTypeStr[gl.t_type];
 | 
	
		
			
				|  |  | +                gl.m_type_str = tTypeStr[gl.m_type];
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        async getMaterialGl(tender_id, material_order, memFieldKeys) {
 | 
	
		
			
				|  |  | +            const materials = await this.ctx.service.material.getAllDataByCondition({
 | 
	
		
			
				|  |  | +                where: {tid: tender_id},
 | 
	
		
			
				|  |  | +                orders: [['order', 'desc']],
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +            if (materials.length > 0) {
 | 
	
		
			
				|  |  | +                let result;
 | 
	
		
			
				|  |  | +                if (materials[0].order === material_order) {
 | 
	
		
			
				|  |  | +                    result = await this.ctx.service.materialBills.getAllDataByCondition({
 | 
	
		
			
				|  |  | +                        where: {tid: tender_id}
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    const material = this.ctx.helper.find(materials, {order: material_order});
 | 
	
		
			
				|  |  | +                    if (!material) return [];
 | 
	
		
			
				|  |  | +                    const sql = 'SELECT m.id, m.tid, m.mid, m.t_type, m.code, m.name, m.unit, m.spec, m.m_type,' +
 | 
	
		
			
				|  |  | +                        '    m.base_price, m.base_times, m.remark, m.in_time,' +
 | 
	
		
			
				|  |  | +                        '    mh.quantity, mh.expr, mh.msg_tp, mh.msg_times, mh.msg_spread, mh.m_up_risk, mh.m_down_risk, mh.m_spread' +
 | 
	
		
			
				|  |  | +                        '  FROM ' + this.ctx.service.materialBills.tableName + ' m' +
 | 
	
		
			
				|  |  | +                        '  LEFT JOIN ' + this.ctx.service.materialBillsHistory.tableName + ' mh' +
 | 
	
		
			
				|  |  | +                        '  ON m.id = mh.mb_id' +
 | 
	
		
			
				|  |  | +                        '  WHERE mh.mid = ?';
 | 
	
		
			
				|  |  | +                    const sqlParam = [material.id];
 | 
	
		
			
				|  |  | +                    result = this.ctx.app.mysql.query(sql, sqlParam);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                this._completeMaterialGl(result);
 | 
	
		
			
				|  |  | +                return result;
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                return [];
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      return RptGatherMemory;
 |