| 
					
				 | 
			
			
				@@ -1,4 +1,4 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-'use strict'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+'use strict' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -8,10 +8,10 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @version 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const auditConst = require('../const/audit').revise; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const smsTypeConst = require('../const/sms_type'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const SmsAliConst = require('../const/sms_alitemplate'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const pushType = require('../const/audit').pushType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const auditConst = require('../const/audit').revise 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const smsTypeConst = require('../const/sms_type') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const SmsAliConst = require('../const/sms_alitemplate') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const pushType = require('../const/audit').pushType 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     class ReviseAudit extends app.BaseService { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -22,8 +22,8 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @return {void} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         constructor(ctx) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            super(ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            this.tableName = 'revise_audit'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            super(ctx) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.tableName = 'revise_audit' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -35,12 +35,13 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @returns {Promise<*>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async getAuditor(reviseId, auditorId, times = 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sql = 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, pa.`mobile`, pa.`telephone`, la.`times`, la.`audit_order`, la.`status`, la.`opinion`, la.`begin_time`, la.`end_time` ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sql = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, pa.`mobile`, pa.`telephone`, la.`times`, la.`audit_order`, la.`status`, la.`opinion`, la.`begin_time`, la.`end_time` ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 'FROM ?? AS la, ?? AS pa ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 'WHERE la.`rid` = ? and la.`audit_id` = ? and la.`times` = ?' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '    and la.`audit_id` = pa.`id`'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, reviseId, auditorId, times]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return await this.db.queryOne(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '    and la.`audit_id` = pa.`id`' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, reviseId, auditorId, times] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return await this.db.queryOne(sql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -51,13 +52,18 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @returns {Promise<*>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async getAuditors(reviseId, times = 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sql = 'SELECT la.`audit_id`, la.`times`, la.`audit_order`, la.`status`, la.`opinion`, la.`begin_time`, la.`end_time`,' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sql = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'SELECT la.`audit_id`, la.`times`, la.`audit_order`, la.`status`, la.`opinion`, la.`begin_time`, la.`end_time`,' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '    pa.`name`, pa.`company`, pa.`role`, pa.`mobile`, pa.`telephone`' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  FROM ' + this.tableName + ' AS la ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  INNER JOIN ' + this.ctx.service.projectAccount.tableName + ' AS pa ON la.`rid` = ? and la.`times` = ? and la.`audit_id` = pa.`id`' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  ORDER BY la.`audit_order`'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sqlParam = [reviseId, times]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return await this.db.query(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  FROM ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ' AS la ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  INNER JOIN ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.projectAccount.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ' AS pa ON la.`rid` = ? and la.`times` = ? and la.`audit_id` = pa.`id`' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  ORDER BY la.`audit_order`' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sqlParam = [reviseId, times] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return await this.db.query(sql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -68,18 +74,28 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @returns {Promise<*>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async getAuditors2ReviseList(rid, times = 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sql = 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, pa.`mobile`, pa.`telephone`, la.`times`, la.`audit_order`, la.`status`, la.`opinion`, la.`begin_time`, la.`end_time`, g.`sort` ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sql = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, pa.`mobile`, pa.`telephone`, la.`times`, la.`audit_order`, la.`status`, la.`opinion`, la.`begin_time`, la.`end_time`, g.`sort` ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 'FROM ?? AS la, ?? AS pa, (SELECT `audit_id`,(@i:=@i+1) as `sort` FROM ??, (select @i:=0) as it WHERE `rid` = ? AND `times` = ? GROUP BY `audit_id`) as g ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                'WHERE la.`rid` = ? and la.`times` = ? and la.`audit_id` = pa.`id` and g.`audit_id` = la.`audit_id` order by la.`audit_order`'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, this.tableName, rid, times, rid, times]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const result = await this.db.query(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sql2 = 'SELECT COUNT(a.`audit_id`) as num FROM (SELECT `audit_id` FROM ?? WHERE `rid` = ? AND `times` = ? GROUP BY `audit_id`) as a'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sqlParam2 = [this.tableName, rid, times]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const count = await this.db.queryOne(sql2, sqlParam2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'WHERE la.`rid` = ? and la.`times` = ? and la.`audit_id` = pa.`id` and g.`audit_id` = la.`audit_id` order by la.`audit_order`' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sqlParam = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.tableName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.projectAccount.tableName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.tableName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                times, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                times 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const result = await this.db.query(sql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sql2 = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'SELECT COUNT(a.`audit_id`) as num FROM (SELECT `audit_id` FROM ?? WHERE `rid` = ? AND `times` = ? GROUP BY `audit_id`) as a' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sqlParam2 = [this.tableName, rid, times] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const count = await this.db.queryOne(sql2, sqlParam2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (const i in result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                result[i].max_sort = count.num; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                result[i].max_sort = count.num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return result 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -90,12 +106,19 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @returns {Promise<*>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async getCurAuditor(reviseId, times = 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sql = 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, pa.`mobile`, pa.`telephone`, la.`times`, la.`audit_order`, la.`status`, la.`opinion`, la.`begin_time`, la.`end_time` ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sql = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, pa.`mobile`, pa.`telephone`, la.`times`, la.`audit_order`, la.`status`, la.`opinion`, la.`begin_time`, la.`end_time` ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 'FROM ?? AS la, ?? AS pa ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 'WHERE la.`rid` = ? and la.`status` = ? and la.`times` = ?' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '    and la.`audit_id` = pa.`id`'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, reviseId, auditConst.status.checking, times]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return await this.db.queryOne(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '    and la.`audit_id` = pa.`id`' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sqlParam = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.tableName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.projectAccount.tableName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                reviseId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                auditConst.status.checking, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                times 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return await this.db.queryOne(sql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -106,10 +129,10 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @returns {Promise<number>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async getNewOrder(reviseId, times = 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sql = 'SELECT Max(??) As max_order FROM ?? Where `rid` = ? and `times` = ?'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sqlParam = ['audit_order', this.tableName, reviseId, times]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const result = await this.db.queryOne(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return result && result.max_order ? result.max_order + 1 : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sql = 'SELECT Max(??) As max_order FROM ?? Where `rid` = ? and `times` = ?' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sqlParam = ['audit_order', this.tableName, reviseId, times] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const result = await this.db.queryOne(sql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return result && result.max_order ? result.max_order + 1 : 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -121,19 +144,19 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @returns {Promise<number>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async addAuditor(revise, auditorId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const times = revise.times ? revise.times : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const newOrder = await this.getNewOrder(revise.id, times); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const times = revise.times ? revise.times : 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const newOrder = await this.getNewOrder(revise.id, times) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const data = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 tender_id: revise.tid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 audit_id: auditorId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                times: times, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                times, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 audit_order: newOrder, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 status: auditConst.status.uncheck, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 rid: revise.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                in_time: new Date(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const result = await this.db.insert(this.tableName, data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return result.effectRows = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                in_time: new Date() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const result = await this.db.insert(this.tableName, data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return (result.effectRows = 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -146,27 +169,27 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @private 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async _syncOrderByDelete(transaction, reviseId, order, times) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            this.initSqlBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.initSqlBuilder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             this.sqlBuilder.setAndWhere('rid', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 value: this.db.escape(reviseId), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 operate: '=' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             this.sqlBuilder.setAndWhere('audit_order', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 value: order, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                operate: '>=', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                operate: '>=' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             this.sqlBuilder.setAndWhere('times', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 value: times, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                operate: '=', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                operate: '=' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             this.sqlBuilder.setUpdateData('audit_order', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 value: 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                selfOperate: '-', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const data = await transaction.query(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                selfOperate: '-' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const data = await transaction.query(sql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -178,22 +201,22 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @returns {Promise<boolean>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async deleteAuditor(revise, auditorId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const times = revise.times ? revise.times : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const transaction = await this.db.beginTransaction(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const times = revise.times ? revise.times : 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const transaction = await this.db.beginTransaction() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const condition = {rid: revise.id, audit_id: auditorId, times: times}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const auditor = await this.getDataByCondition(condition); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const condition = { rid: revise.id, audit_id: auditorId, times } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const auditor = await this.getDataByCondition(condition) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (!auditor) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    throw '该审核人不存在'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw '该审核人不存在' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await this._syncOrderByDelete(transaction, revise.id, auditor.audit_order, times); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await transaction.delete(this.tableName, condition); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await transaction.commit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } catch(err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await transaction.rollback(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                throw err; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await this._syncOrderByDelete(transaction, revise.id, auditor.audit_order, times) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await transaction.delete(this.tableName, condition) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await transaction.commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } catch (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await transaction.rollback() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -204,54 +227,69 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @returns {Promise<boolean>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async start(revise, times = 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const audit = await this.getDataByCondition({rid: revise.id, times: times, audit_order: 1}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!audit) throw '审核人信息错误'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const time = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const audit = await this.getDataByCondition({ rid: revise.id, times, audit_order: 1 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!audit) throw '审核人信息错误' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const time = new Date() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 拷贝备份台账数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const [billsHis, posHis] = await this.ctx.service.ledgerRevise.backupReviseHistoryFile(revise); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const [billsHis, posHis] = await this.ctx.service.ledgerRevise.backupReviseHistoryFile(revise) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const transaction = await this.db.beginTransaction(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const transaction = await this.db.beginTransaction() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 await transaction.update(this.tableName, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    id: audit.id, status: auditConst.status.checking, begin_time: time, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    bills_file: revise.bills_file, pos_file: revise.pos_file, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    id: audit.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    status: auditConst.status.checking, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    begin_time: time, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    bills_file: revise.bills_file, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pos_file: revise.pos_file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 const reviseData = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    id: revise.id, status: auditConst.status.checking, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    bills_file: billsHis, pos_file: posHis, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    id: revise.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    status: auditConst.status.checking, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    bills_file: billsHis, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pos_file: posHis 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (revise.times === 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    reviseData.begin_time = time; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    reviseData.begin_time = time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await transaction.update(this.ctx.service.ledgerRevise.tableName, reviseData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await transaction.update(this.ctx.service.ledgerRevise.tableName, reviseData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 添加短信通知-需要审批提醒功能 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 下一人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // await this.ctx.helper.sendUserSms(audit.audit_id, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //     smsTypeConst.judge.approval.toString(), '台帐修订需要您审批,请登录系统处理。'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await this.ctx.helper.sendAliSms(audit.audit_id, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    smsTypeConst.judge.approval.toString(), SmsAliConst.template.revise_check); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await this.ctx.helper.sendAliSms( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    audit.audit_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    smsTypeConst.judge.approval.toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SmsAliConst.template.revise_check 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 其他参与人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const auditList = await this.getAuditors(revise.tid, times); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const users = this._.pull(this._.map(auditList, 'user_id'), audit.id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const auditList = await this.getAuditors(revise.tid, times) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const users = this._.pull(this._.map(auditList, 'user_id'), audit.id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // await this.ctx.helper.sendUserSms(users, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //     smsTypeConst.judge.result.toString(), '台账修订已上报。'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await this.ctx.helper.sendAliSms(users, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    smsTypeConst.judge.result.toString(), SmsAliConst.template.revise_report); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await this.ctx.helper.sendAliSms( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    users, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    smsTypeConst.judge.result.toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SmsAliConst.template.revise_report 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await transaction.commit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await transaction.commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } catch (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await transaction.rollback(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                throw err; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await transaction.rollback() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async _replaceLedgerByRevise(transaction, revise) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sqlParam = [revise.tid]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            await transaction.delete(this.ctx.service.ledger.tableName, {tender_id: revise.tid}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const bSql = 'Insert Into ' + this.ctx.service.ledger.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sqlParam = [revise.tid] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            await transaction.delete(this.ctx.service.ledger.tableName, { tender_id: revise.tid }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const bSql = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'Insert Into ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.ledger.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '  (id, code, b_code, name, unit, source, remark, ledger_id, ledger_pid, level, `order`, full_path, is_leaf,' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '     quantity, total_price, unit_price, drawing_code, memo, dgn_qty1, dgn_qty2, deal_qty, deal_tp,' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '     sgfh_qty, sgfh_tp, sjcl_qty, sjcl_tp, qtcl_qty, qtcl_tp, node_type, crid, tender_id, is_tp,' + 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -260,20 +298,24 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '      quantity, total_price, unit_price, drawing_code, memo, dgn_qty1, dgn_qty2, deal_qty, deal_tp,' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '      sgfh_qty, sgfh_tp, sjcl_qty, sjcl_tp, qtcl_qty, qtcl_tp, node_type, crid, tender_id, is_tp, ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '      sgfh_expr, sjcl_expr, qtcl_expr' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  From ' + this.ctx.service.reviseBills.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  Where `tender_id` = ?'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            await transaction.query(bSql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            await transaction.delete(this.ctx.service.pos.tableName, {tid: revise.tid}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const pSql = 'Insert Into ' + this.ctx.service.pos.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  From ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.reviseBills.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  Where `tender_id` = ?' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            await transaction.query(bSql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            await transaction.delete(this.ctx.service.pos.tableName, { tid: revise.tid }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const pSql = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'Insert Into ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.pos.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '  (id, tid, lid, name, drawing_code, quantity, add_stage, add_times, add_user,' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '     sgfh_qty, sjcl_qty, qtcl_qty, crid, porder, position, ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '     sgfh_expr, sjcl_expr, qtcl_expr)' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '  Select id, tid, lid, name, drawing_code, quantity, add_stage, add_times, add_user,' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '     sgfh_qty, sjcl_qty, qtcl_qty, crid, porder, position,' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '     sgfh_expr, sjcl_expr, qtcl_expr' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  From ' + this.ctx.service.revisePos.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  Where `tid` = ?'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            await transaction.query(pSql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  From ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.revisePos.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  Where `tid` = ?' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            await transaction.query(pSql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -285,106 +327,181 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @returns {Promise<void>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async check(revise, checkType, opinion, times = 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (checkType !== auditConst.status.checked && checkType !== auditConst.status.checkNo) throw '提交数据错误'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const audit = await this.getDataByCondition({rid: revise.id, times: times, status: auditConst.status.checking}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!audit) throw '审核数据错误'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const pid = this.ctx.session.sessionProject.id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const noticeContent = await this.getNoticeContent(pid, audit.tender_id, audit.rid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const transaction = await this.db.beginTransaction(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (checkType !== auditConst.status.checked && checkType !== auditConst.status.checkNo) throw '提交数据错误' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const audit = await this.getDataByCondition({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rid: revise.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                times, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                status: auditConst.status.checking 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!audit) throw '审核数据错误' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const pid = this.ctx.session.sessionProject.id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const transaction = await this.db.beginTransaction() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const auditList = await this.getAuditors(revise.tid, times) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 审核通过添加到推送表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const noticeContent = await this.getNoticeContent(pid, audit.tender_id, audit.rid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const records = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        pid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        type: pushType.revise, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        uid: revise.uid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        status: auditConst.status.checked, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        content: noticeContent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                auditList.forEach(audit => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    records.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        pid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        type: pushType.revise, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        uid: audit.audit_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        status: auditConst.status.checked, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        content: noticeContent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await transaction.insert('zh_notice', records) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 整理当前流程审核人状态更新 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const time = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const time = new Date() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 更新当前审核流程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 await transaction.update(this.tableName, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    id: audit.id, status: checkType, opinion, end_time: time, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    id: audit.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    status: checkType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    opinion, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    end_time: time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (checkType === auditConst.status.checked) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    const nextAudit = await this.getDataByCondition({ rid: revise.id, times, audit_order: audit.audit_order + 1 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    const nextAudit = await this.getDataByCondition({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        rid: revise.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        times, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        audit_order: audit.audit_order + 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 无下一审核人表示,审核结束 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (nextAudit) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        await transaction.update(this.tableName, { id: nextAudit.id, status: auditConst.status.checking, begin_time: time }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        await transaction.update(this.tableName, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            id: nextAudit.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            status: auditConst.status.checking, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            begin_time: time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 短信通知-需要审批提醒功能 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 下一人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // await this.ctx.helper.sendUserSms(nextAudit.user_id, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         //     smsTypeConst.judge.approval.toString(), '台帐修订需要您审批,请登录系统处理。'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        await this.ctx.helper.sendAliSms(nextAudit.user_id, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            smsTypeConst.judge.result.toString(), SmsAliConst.template.revise_result, { status: SmsAliConst.status.success }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        await this.ctx.helper.sendAliSms( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            nextAudit.user_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            smsTypeConst.judge.result.toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            SmsAliConst.template.revise_result, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            { status: SmsAliConst.status.success } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 其他参与人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        const auditList = await this.getAuditors(revise.tid, times); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        const users = this._.pull(this._.map(auditList, 'user_id'), audit.id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        users.push(revise.uid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const users = this._.pull(this._.map(auditList, 'user_id'), audit.id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        users.push(revise.uid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // await this.ctx.helper.sendUserSms(users, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         //     smsTypeConst.judge.result.toString(), '台账修订审批通过。'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        await this.ctx.helper.sendAliSms(users, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            smsTypeConst.judge.result.toString(), SmsAliConst.template.revise_result2, { status: SmsAliConst.status.success }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        await this.ctx.helper.sendAliSms( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            users, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            smsTypeConst.judge.result.toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            SmsAliConst.template.revise_result2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            { status: SmsAliConst.status.success } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 同步修订信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        await transaction.update(this.ctx.service.ledgerRevise.tableName, { id: revise.id, status: checkType, end_time: time }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        await transaction.update(this.ctx.service.ledgerRevise.tableName, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            id: revise.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            status: checkType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            end_time: time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 最新一期跟台账相关的缓存数据应过期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        const lastStage = await this.ctx.service.stage.getLastestStage(revise.tid, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        const cacheTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (lastStage) await transaction.update(this.ctx.service.stage.tableName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            {id: lastStage.id, cache_time_l: cacheTime, cache_time_r: cacheTime}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const lastStage = await this.ctx.service.stage.getLastestStage(revise.tid, true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const cacheTime = new Date() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (lastStage) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            await transaction.update(this.ctx.service.stage.tableName, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                id: lastStage.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                cache_time_l: cacheTime, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                cache_time_r: cacheTime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 拷贝修订数据至台账 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        await this._replaceLedgerByRevise(transaction, revise); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        const sum = await this.ctx.service.reviseBills.addUp({tender_id: revise.tid/*, is_leaf: true*/}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        await this._replaceLedgerByRevise(transaction, revise) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const sum = await this.ctx.service.reviseBills.addUp({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            tender_id: revise.tid /* , is_leaf: true*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         await transaction.update(this.ctx.service.tender.tableName, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            id: revise.tid, total_price: sum.total_price, deal_tp: sum.deal_tp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        // 审核结束,将原报添加到推送表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        // const noticeContent = await this.getNoticeContent(pid, audit.tender_id, audit.rid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        await transaction.insert('zh_notice', { pid, type: pushType.revise, uid: revise.uid, status: auditConst.status.checked, is_read: 0, content: noticeContent }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            id: revise.tid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            total_price: sum.total_price, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            deal_tp: sum.deal_tp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 短信通知-审批通过提醒功能 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 下一人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // const msg = '台账修订审批通过,请登录系统处理。'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // await this.ctx.helper.sendUserSms(revise.uid, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         //     smsTypeConst.judge.result.toString(), msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        await this.ctx.helper.sendAliSms(revise.uid, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            smsTypeConst.judge.result.toString(), SmsAliConst.template.revise_result, { status: SmsAliConst.status.success }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        await this.ctx.helper.sendAliSms( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            revise.uid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            smsTypeConst.judge.result.toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            SmsAliConst.template.revise_result, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            { status: SmsAliConst.status.success } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 其他参与人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        const auditList = await this.getAuditors(revise.tid, times); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        const users = this._.pull(this._.map(auditList, 'user_id'), audit.id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const users = this._.pull(this._.map(auditList, 'user_id'), audit.id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // await this.ctx.helper.sendUserSms(users, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         //     smsTypeConst.judge.result.toString(), '台账修订审批通过。'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        await this.ctx.helper.sendAliSms(users, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            smsTypeConst.judge.result.toString(), SmsAliConst.template.revise_result2, { status: SmsAliConst.status.success }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        await this.ctx.helper.sendAliSms( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            users, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            smsTypeConst.judge.result.toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            SmsAliConst.template.revise_result2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            { status: SmsAliConst.status.success } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 同步修订信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    await transaction.update(this.ctx.service.ledgerRevise.tableName, { id: revise.id, times: times + 1, status: checkType }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    await transaction.update(this.ctx.service.ledgerRevise.tableName, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        id: revise.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        times: times + 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        status: checkType 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 拷贝新一次审核流程列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     const auditors = await this.getAllDataByCondition({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         where: { rid: revise.id, times }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        columns: ['tender_id', 'rid', 'audit_order', 'audit_id'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        columns: ['tender_id', 'rid', 'audit_order', 'audit_id'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     for (const a of auditors) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        a.times = times + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        a.status = auditConst.status.uncheck; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        a.in_time = time; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        a.times = times + 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        a.status = auditConst.status.uncheck 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        a.in_time = time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    await transaction.insert(this.tableName, auditors); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    await transaction.insert(this.tableName, auditors) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 短信通知-审批退回提醒功能 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 下一人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // await this.ctx.helper.sendUserSms(revise.uid, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //     smsTypeConst.judge.result.toString(), '台账修订审批退回,请登录系统处理。'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    await this.ctx.helper.sendAliSms(revise.uid, smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        smsTypeConst.judge.result.toString(), SmsAliConst.template.revise_result, { status: SmsAliConst.status.back }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    await this.ctx.helper.sendAliSms( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        revise.uid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        smsTypeConst.judge.result.toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        SmsAliConst.template.revise_result, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        { status: SmsAliConst.status.back } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 其他参与人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // await this.ctx.helper.sendUserSms(this._.map(auditors, 'user_id'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //     smsTypeConst.const.XD, smsTypeConst.judge.result.toString(), '台账修订审批退回。'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    await this.ctx.helper.sendAliSms(this._.map(auditors, 'user_id'), smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        smsTypeConst.judge.result.toString(), SmsAliConst.template.revise_result2, { status: SmsAliConst.status.back }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    // 审核结束,将原报添加到推送表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    await transaction.insert('zh_notice', { pid, type: pushType.revise, uid: revise.uid, status: auditConst.status.checkNo, is_read: 0, content: noticeContent }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    await this.ctx.helper.sendAliSms( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        this._.map(auditors, 'user_id'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        smsTypeConst.const.XD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        smsTypeConst.judge.result.toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        SmsAliConst.template.revise_result2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        { status: SmsAliConst.status.back } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await transaction.commit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await transaction.commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } catch (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await transaction.rollback(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                throw err; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await transaction.rollback() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -395,18 +512,33 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @returns {Promise<*>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async getAuditRevise(auditorId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sql = 'SELECT ra.`audit_id`, ra.`times`, ra.`audit_order`, ra.`begin_time`, ra.`end_time`,' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sql = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'SELECT ra.`audit_id`, ra.`times`, ra.`audit_order`, ra.`begin_time`, ra.`end_time`,' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '    r.id, r.corder, r.uid, r.status, r.content,' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '    t.id As t_id, t.`name` As t_name, t.`project_id` As t_pid, t.`type` As t_type, t.`user_id` As t_uid, t.`status` As t_status, ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '    p.name As audit_name, p.role As audit_role, p.company As audit_company' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  FROM ' + this.tableName + ' AS ra' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  Left Join ' + this.ctx.service.ledgerRevise.tableName + ' As r On ra.rid = r.id' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  Left Join ' + this.ctx.service.tender.tableName + ' AS t On r.tid = t.id' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  Left Join ' + this.ctx.service.projectAccount.tableName + ' As p On ra.audit_id = p.id' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  FROM ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ' AS ra' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  Left Join ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.ledgerRevise.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ' As r On ra.rid = r.id' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  Left Join ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.tender.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ' AS t On r.tid = t.id' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  Left Join ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.projectAccount.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ' As p On ra.audit_id = p.id' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '  WHERE r.`valid` != 0 and ((ra.`audit_id` = ? and ra.`status` = ?) OR' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '    (r.`uid` = ? and r.`status` = ? and ra.`status` = ? and ra.`times` = (r.`times`-1)))'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sqlParam = [auditorId, auditConst.status.checking, auditorId, auditConst.status.checkNo, auditConst.status.checkNo]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return await this.db.query(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '    (r.`uid` = ? and r.`status` = ? and ra.`status` = ? and ra.`times` = (r.`times`-1)))' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sqlParam = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                auditorId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                auditConst.status.checking, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                auditorId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                auditConst.status.checkNo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                auditConst.status.checkNo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return await this.db.query(sql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -430,17 +562,18 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //     '  ORDER By new_t.`end_time`'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // const sqlParam = [this.ctx.service.tender.tableName, auditorId, this.tableName, auditorId, noticeTime, projectId]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // return await this.db.query(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let notice =  await this.db.select('zh_notice', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let notice = await this.db.select('zh_notice', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 where: { pid, type: pushType.revise, uid }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 orders: [['create_time', 'desc']], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                limit: 10, offset: 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                limit: 10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                offset: 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             notice = notice.map(v => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 const extra = JSON.parse(v.content) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 delete v.content 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return { ...v, ...extra } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return notice; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return notice 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -450,15 +583,23 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @param {Number} rid 修订id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async getNoticeContent(pid, tid, rid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const noticeSql = 'SELECT * FROM (SELECT ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const noticeSql = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'SELECT * FROM (SELECT ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '  t.`id` As `tid`, t.`name`, r.`corder`, pa.`name` As `su_name`, pa.role As `su_role`' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '  FROM (SELECT * FROM ?? WHERE `id` = ? ) As t' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '  LEFT JOIN ?? As r On r.`id` = ? ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '  LEFT JOIN ?? As pa ON t.`user_id` = pa.`id`' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  WHERE  t.`project_id` = ? ) as new_t GROUP BY new_t.`tid`'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const noticeSqlParam = [this.ctx.service.tender.tableName, tid, this.ctx.service.ledgerRevise.tableName, rid, this.ctx.service.projectAccount.tableName, pid]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const content = await this.db.query(noticeSql, noticeSqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return content.length ? JSON.stringify(content[0]) : ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  WHERE  t.`project_id` = ? ) as new_t GROUP BY new_t.`tid`' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const noticeSqlParam = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.tender.tableName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.ledgerRevise.tableName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.projectAccount.tableName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const content = await this.db.query(noticeSql, noticeSqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return content.length ? JSON.stringify(content[0]) : '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -470,30 +611,39 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @return {Promise<boolean>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async getAuditorByStatus(rid, status, times = 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let auditor = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let sql = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let sqlParam = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let auditor = null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let sql = '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let sqlParam = '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             switch (status) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                case auditConst.status.checking : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                case auditConst.status.checked : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                case auditConst.status.checkNoPre : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sql = 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`rid`, la.`audit_order` ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case auditConst.status.checking: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case auditConst.status.checked: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case auditConst.status.checkNoPre: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sql = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`rid`, la.`audit_order` ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         'FROM ?? AS la, ?? AS pa ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'WHERE la.`rid` = ? and la.`status` = ? and la.`audit_id` = pa.`id` order by la.`times` desc, la.`audit_order` desc'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, rid, status]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    auditor = await this.db.queryOne(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                case auditConst.status.checkNo : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sql = 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`rid`, la.`audit_order` ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        'WHERE la.`rid` = ? and la.`status` = ? and la.`audit_id` = pa.`id` order by la.`times` desc, la.`audit_order` desc' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, rid, status] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    auditor = await this.db.queryOne(sql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case auditConst.status.checkNo: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sql = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`rid`, la.`audit_order` ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         'FROM ?? AS la, ?? AS pa ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'WHERE la.`rid` = ? and la.`status` = ? and la.`times` = ? and la.`audit_id` = pa.`id` order by la.`times` desc, la.`audit_order` desc'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, rid, auditConst.status.checkNo, parseInt(times) - 1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    auditor = await this.db.queryOne(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                case auditConst.status.uncheck : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                default:break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        'WHERE la.`rid` = ? and la.`status` = ? and la.`times` = ? and la.`audit_id` = pa.`id` order by la.`times` desc, la.`audit_order` desc' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sqlParam = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        this.tableName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        this.ctx.service.projectAccount.tableName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        rid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        auditConst.status.checkNo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        parseInt(times) - 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    auditor = await this.db.queryOne(sql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case auditConst.status.uncheck: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return auditor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return auditor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -503,25 +653,31 @@ module.exports = app => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * @returns {Promise<*>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async getAuditGroupByList(rid, times) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sql = 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`rid`, la.`audit_order` ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sql = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`rid`, la.`audit_order` ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 'FROM ?? AS la, ?? AS pa ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                'WHERE la.`rid` = ? and la.`times` = ? and la.`audit_id` = pa.`id` GROUP BY la.`audit_id` ORDER BY la.`audit_order`'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, rid, times]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return await this.db.query(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'WHERE la.`rid` = ? and la.`times` = ? and la.`audit_id` = pa.`id` GROUP BY la.`audit_id` ORDER BY la.`audit_order`' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, rid, times] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return await this.db.query(sql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // const sql = 'SELECT `tid`, `sid`, `aid`, `order` FROM ?? WHERE `sid` = ? and `times` = ? GROUP BY `aid`'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // const sqlParam = [this.tableName, stageId, times]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // return await this.db.query(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         async getAllAuditors(tenderId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sql = 'SELECT ra.audit_id, ra.tender_id FROM ' + this.tableName + ' ra' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  LEFT JOIN ' + this.ctx.service.tender.tableName + ' t On ra.tender_id = t.id' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sql = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'SELECT ra.audit_id, ra.tender_id FROM ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ' ra' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  LEFT JOIN ' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.ctx.service.tender.tableName + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ' t On ra.tender_id = t.id' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 '  WHERE t.id = ?' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                '  GROUP BY ra.audit_id'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const sqlParam = [tenderId]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return this.db.query(sql, sqlParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '  GROUP BY ra.audit_id' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const sqlParam = [tenderId] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return this.db.query(sql, sqlParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return ReviseAudit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return ReviseAudit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |