|  | @@ -117,8 +117,10 @@ module.exports = app => {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          _checkSpecialTender(tender, special) {
 | 
	
		
			
				|  |  | -            for (const spec of special) {
 | 
	
		
			
				|  |  | -                if (tender[spec.key] === true) return spec.key;
 | 
	
		
			
				|  |  | +            if (special) {
 | 
	
		
			
				|  |  | +                for (const spec of special) {
 | 
	
		
			
				|  |  | +                    if (tender[spec.key] === true) return spec.key;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              return '';
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -166,8 +168,8 @@ module.exports = app => {
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  if (hasPre) {
 | 
	
		
			
				|  |  |                      const preStage = stage.order > 1 ? await this.ctx.service.stageBillsFinal.getFinalData(tender, stage.order - 1) : [];
 | 
	
		
			
				|  |  | -                    this.ctx.helper.assignRelaData(posData, [
 | 
	
		
			
				|  |  | -                        {data: preStage, fields: ['contract_qty', 'qc_qty'], prefix: 'pre_', relaId: 'pid'}
 | 
	
		
			
				|  |  | +                    this.ctx.helper.assignRelaData(billsData, [
 | 
	
		
			
				|  |  | +                        {data: preStage, fields: ['contract_qty', 'qc_qty'], prefix: 'pre_', relaId: 'lid'}
 | 
	
		
			
				|  |  |                      ]);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -268,14 +270,14 @@ module.exports = app => {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          async _gatherFinalData(sTender, index, hasPre) {
 | 
	
		
			
				|  |  |              const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
 | 
	
		
			
				|  |  | -            const stages = await this.db.select(this.tableName, {
 | 
	
		
			
				|  |  | +            const stages = await this.db.select(this.ctx.service.stage.tableName, {
 | 
	
		
			
				|  |  |                  where: { tid: tender.id },
 | 
	
		
			
				|  |  |                  orders: [['order', 'desc']],
 | 
	
		
			
				|  |  |              });
 | 
	
		
			
				|  |  |              if (stages.length !== 0) {
 | 
	
		
			
				|  |  | -                const lastStage = stages[stages.length - 1];
 | 
	
		
			
				|  |  | +                const lastStage = stages[0];
 | 
	
		
			
				|  |  |                  if (lastStage.status === auditConst.stage.status.uncheck && lastStage.user_id !== this.ctx.session.sessionUser.accountId) {
 | 
	
		
			
				|  |  | -                    stages.splice(stages.length - 1, 1);
 | 
	
		
			
				|  |  | +                    stages.splice(0, 1);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              await this._gatherStageData(index, tender, stages[0], hasPre);
 | 
	
	
		
			
				|  | @@ -283,14 +285,14 @@ module.exports = app => {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          async _gatherCheckedFinalData(sTender, index, hasPre) {
 | 
	
		
			
				|  |  |              const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
 | 
	
		
			
				|  |  | -            const stages = await this.db.select(this.tableName, {
 | 
	
		
			
				|  |  | +            const stages = await this.db.select(this.ctx.service.stage.tableName, {
 | 
	
		
			
				|  |  |                  where: { tid: tender.id },
 | 
	
		
			
				|  |  |                  orders: [['order', 'desc']],
 | 
	
		
			
				|  |  |              });
 | 
	
		
			
				|  |  |              if (stages.length !== 0) {
 | 
	
		
			
				|  |  | -                const lastStage = stages[stages.length - 1];
 | 
	
		
			
				|  |  | +                const lastStage = stages[0];
 | 
	
		
			
				|  |  |                  if (lastStage.status !== auditConst.stage.status.checked) {
 | 
	
		
			
				|  |  | -                    stages.splice(stages.length - 1, 1);
 | 
	
		
			
				|  |  | +                    stages.splice(0, 1);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              await this._gatherStageData(index, tender, stages[0], hasPre);
 | 
	
	
		
			
				|  | @@ -321,22 +323,23 @@ module.exports = app => {
 | 
	
		
			
				|  |  |              if (!gsDefine || !gsDefine.enable) return [];
 | 
	
		
			
				|  |  |              if (!gsCustom || !gsCustom.tenders || gsCustom.tenders.length === 0) return [];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +            const gsSetting = JSON.parse(gsDefine.setting);
 | 
	
		
			
				|  |  |              let commonIndex = 0;
 | 
	
		
			
				|  |  |              for (const tender of gsCustom.tenders) {
 | 
	
		
			
				|  |  | -                const specialKey = this._checkSpecialTender(tender, gsDefine.setting.special);
 | 
	
		
			
				|  |  | +                const specialKey = this._checkSpecialTender(tender, gsSetting.special);
 | 
	
		
			
				|  |  |                  if (specialKey === '') {
 | 
	
		
			
				|  |  | -                    switch (gsDefine.setting.type) {
 | 
	
		
			
				|  |  | +                    switch (gsSetting.type) {
 | 
	
		
			
				|  |  |                          case 'month':
 | 
	
		
			
				|  |  | -                            await this._gatherMonthData(tender, commonIndex, gsCustom.month, gsDefine.hasPre);
 | 
	
		
			
				|  |  | +                            await this._gatherMonthData(tender, commonIndex, gsCustom.month, gsSetting.hasPre);
 | 
	
		
			
				|  |  |                              break;
 | 
	
		
			
				|  |  |                          case 'zone':
 | 
	
		
			
				|  |  |                              await this._gatherZoneData(tender, commonIndex, gsCustom.zone);
 | 
	
		
			
				|  |  |                              break;
 | 
	
		
			
				|  |  |                          case 'final':
 | 
	
		
			
				|  |  | -                            await this._gatherFinalData(tender, commonIndex, gsDefine.hasPre);
 | 
	
		
			
				|  |  | +                            await this._gatherFinalData(tender, commonIndex, gsSetting.hasPre);
 | 
	
		
			
				|  |  |                              break;
 | 
	
		
			
				|  |  |                          case 'checked-final':
 | 
	
		
			
				|  |  | -                            await this._gatherCheckedFinalData(tender, commonIndex, gsDefine.hasPre);
 | 
	
		
			
				|  |  | +                            await this._gatherCheckedFinalData(tender, commonIndex, gsSetting.hasPre);
 | 
	
		
			
				|  |  |                              break;
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                      commonIndex++;
 |