|  | @@ -23,35 +23,55 @@ module.exports = app => {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /**
 | 
	
		
			
				|  |  | +         * 获取截止本期数据
 | 
	
		
			
				|  |  | +         * @param {Object} tender - 标段
 | 
	
		
			
				|  |  | +         * @param {Object} stage - 本期
 | 
	
		
			
				|  |  | +         * @returns {Promise<void>}
 | 
	
		
			
				|  |  | +         */
 | 
	
		
			
				|  |  | +        async getFinalData(tender, stage) {
 | 
	
		
			
				|  |  | +            const sql = 'SELECT * FROM ' + this.tableName + ' As Bills' +
 | 
	
		
			
				|  |  | +                '  INNER JOIN ( ' +
 | 
	
		
			
				|  |  | +                '    SELECT MAX(`sorder`) As `sorder`, `lid` From ' + this.tableName +
 | 
	
		
			
				|  |  | +                '      WHERE tid = ? AND sorder < ?' +
 | 
	
		
			
				|  |  | +                '      GROUP BY `lid`' +
 | 
	
		
			
				|  |  | +                '  ) As MaxFilter ' +
 | 
	
		
			
				|  |  | +                '  ON Bills.sorder = MaxFilter.sorder And Bills.lid = MaxFilter.lid' +
 | 
	
		
			
				|  |  | +                '  WHERE Bills.tid = ?';
 | 
	
		
			
				|  |  | +            const sqlParam = [tender.id, stage.order, tender.id];
 | 
	
		
			
				|  |  | +            return await this.db.query(sql, sqlParam);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        /**
 | 
	
		
			
				|  |  |           * 生成本期最终数据
 | 
	
		
			
				|  |  |           * @param transaction - 所属事务
 | 
	
		
			
				|  |  | -         * @param {Number} tender - 标段
 | 
	
		
			
				|  |  | -         * @param {Number}stage - 本期
 | 
	
		
			
				|  |  | +         * @param {Object} tender - 标段
 | 
	
		
			
				|  |  | +         * @param {Object} stage - 本期
 | 
	
		
			
				|  |  |           * @returns {Promise<void>}
 | 
	
		
			
				|  |  |           */
 | 
	
		
			
				|  |  |          async generateFinalData(transaction, tender, stage) {
 | 
	
		
			
				|  |  |              if (!transaction || !tender || !stage) {
 | 
	
		
			
				|  |  |                  throw '数据错误';
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            let preStage;
 | 
	
		
			
				|  |  |              if (stage.order > 1) {
 | 
	
		
			
				|  |  | -                preStage = await this.ctx.stage.getDataByCondition({tid: stage.tid, order: stage.order - 1});
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (preStage) {
 | 
	
		
			
				|  |  | -                const sql = 'Insert Into ??(tid, sid, lid, sorder, contract_qty, contract_tp, qc_qty, qc_tp, postil)' +
 | 
	
		
			
				|  |  | -                    '  SELECT b.tid, b.sid, b.lid, ? As `sorder`, b.contract_qty, b.contract_tp, b.qc_qty, b.qc_tp, b.postil' +
 | 
	
		
			
				|  |  | -                    '  FROM ' + this.ctx.service.stageBills.tableName + ' AS b' +
 | 
	
		
			
				|  |  | -                    '  INNER JOIN(' +
 | 
	
		
			
				|  |  | -                    '    SELECT Max(`times`) As `times`, MAX(`order`) As `order`, `lid` FROM ' + this.ctx.service.stageBills.tableName +
 | 
	
		
			
				|  |  | -                    '    WHERE `sid` = ?' +
 | 
	
		
			
				|  |  | -                    '    GROUP By `lid`) As MF' +
 | 
	
		
			
				|  |  | -                    '  ON b.times = MF.times AND b.order = MF.order AND b.lid = MF.lid' +
 | 
	
		
			
				|  |  | -                    '  WHERE b.sid = ?';
 | 
	
		
			
				|  |  | -                const sqlParam = [this.tableName, stage.order, stage.id, stage.id];
 | 
	
		
			
				|  |  | +                const sql = 'Insert Into ??(tid, sid, lid, sorder, contract_qty, contract_tp, qc_qty, qc_tp)' +
 | 
	
		
			
				|  |  | +                    '  SELECT cur.tid, cur.sid, cur.lid, ? As `sorder`, ' +
 | 
	
		
			
				|  |  | +                    '      IFNULL(cur.contract_qty, 0) + IFNULL(pre.contract_qty, 0), IFNULL(cur.contract_tp, 0) + IFNULL(pre.contract_tp, 0),' +
 | 
	
		
			
				|  |  | +                    '      IFNULL(cur.qc_qty, 0) + IFNULL(pre.qc_qty, 0), IFNULL(cur.qc_tp, 0) + IFNULL(pre.qc_tp, 0)' +
 | 
	
		
			
				|  |  | +                    '  FROM (SELECT b.tid, b.sid, b.lid, b.contract_qty, b.contract_tp, b.qc_qty, b.qc_tp' +
 | 
	
		
			
				|  |  | +                    '    FROM ' + this.ctx.service.stageBills.tableName + ' AS b' +
 | 
	
		
			
				|  |  | +                    '    INNER JOIN(' +
 | 
	
		
			
				|  |  | +                    '      SELECT Max(`times`) As `times`, MAX(`order`) As `order`, `lid` FROM ' + this.ctx.service.stageBills.tableName +
 | 
	
		
			
				|  |  | +                    '      WHERE `sid` = ?' +
 | 
	
		
			
				|  |  | +                    '      GROUP By `lid`) As MF' +
 | 
	
		
			
				|  |  | +                    '    ON b.times = MF.times AND b.order = MF.order AND b.lid = MF.lid' +
 | 
	
		
			
				|  |  | +                    '    WHERE b.sid = ?) As cur' +
 | 
	
		
			
				|  |  | +                    '  LEFT JOIN ?? As pre' +
 | 
	
		
			
				|  |  | +                    '  ON cur.lid = pre.lid And pre.sorder = ?';
 | 
	
		
			
				|  |  | +                const sqlParam = [this.tableName, stage.order, stage.id, stage.id, this.tableName, stage.order - 1];
 | 
	
		
			
				|  |  |                  await transaction.query(sql, sqlParam);
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  | -                const sql = 'Insert Into ??(tid, sid, lid, sorder, contract_qty, contract_tp, qc_qty, qc_tp, postil)' +
 | 
	
		
			
				|  |  | -                    '  SELECT b.tid, b.sid, b.lid, ? As `sorder`, b.contract_qty, b.contract_tp, b.qc_qty, b.qc_tp, b.postil' +
 | 
	
		
			
				|  |  | +                const sql = 'Insert Into ??(tid, sid, lid, sorder, contract_qty, contract_tp, qc_qty, qc_tp)' +
 | 
	
		
			
				|  |  | +                    '  SELECT b.tid, b.sid, b.lid, ? As `sorder`, b.contract_qty, b.contract_tp, b.qc_qty, b.qc_tp' +
 | 
	
		
			
				|  |  |                      '  FROM ' + this.ctx.service.stageBills.tableName + ' AS b' +
 | 
	
		
			
				|  |  |                      '  INNER JOIN(' +
 | 
	
		
			
				|  |  |                      '    SELECT Max(`times`) As `times`, MAX(`order`) As `order`, `lid` FROM ' + this.ctx.service.stageBills.tableName +
 |