'use strict'; const auditConst = require('../const/audit').advance; module.exports = app => { class Advance extends app.BaseService { constructor(ctx) { super(ctx); this.tableName = 'advance_pay'; } /** * 获取预付款列表 * @param {Number} tid 标段id * @param {Number} type 预付款类型 */ async getAdvanceList(tid, type) { this.initSqlBuilder(); this.sqlBuilder.setAndWhere('tid', { value: tid, operate: '=', }); this.sqlBuilder.setAndWhere('type', { value: type, operate: '=', }); this.sqlBuilder.orderBy = [['order', 'desc']]; const [sql, sqlParam] = this.sqlBuilder.build(this.tableName); const advance = await this.db.query(sql, sqlParam); for (const item of advance) { item.curAuditor = await this.ctx.service.advanceAudit.getAuditorByStatus(item.id, item.status, item.times); if (item.status === auditConst.status.checkNoPre) { item.curAuditor2 = await this.ctx.service.advanceAudit.getAuditorByStatus(item.id, auditConst.status.checking); } } console.log(advance); return advance; } /** * 获取预付款最新一期 * @param {Number} tid 标段id * @param {String} type 类型: 开工预付款|材料预付款 (0|1) * @param {Boolean} includeUnCheck 包括未上报的 * @return {Promise<*>} 实例结果集 */ async getLastestAdvance(tid, type, includeUnCheck = false) { this.initSqlBuilder(); this.sqlBuilder.setAndWhere('tid', { value: tid, operate: '=', }); this.sqlBuilder.setAndWhere('type', { value: type, operate: '=', }); if (!includeUnCheck) { this.sqlBuilder.setAndWhere('status', { value: auditConst.status.uncheck, operate: '!=', }); } this.sqlBuilder.orderBy = [['order', 'desc']]; const [sql, sqlParam] = this.sqlBuilder.build(this.tableName); const advance = await this.db.queryOne(sql, sqlParam); return advance; } /** * 创建一条新的记录 * @param {String} type 类型: 开工预付款|材料预付款 (start|material) * @return {Promise<*>} 插入结果集 */ async createRecord(type) { const { ctx } = this; const uid = ctx.session.sessionUser.accountId; const tid = ctx.tender.id; const latestOrder = await this.getLastestAdvance(tid, type); const order = !latestOrder ? 1 : latestOrder.order + 1; const record = await this.db.insert(this.tableName, { type, uid, tid, status: auditConst.status.uncheck, order }); return await this.getDataById(record.insertId); } /** * 获取上一期预付款记录 * @param {Number} tid 标段id * @param {Number} type 预付款类型 */ async getPreviousRecord(tid, type) { this.initSqlBuilder(); this.sqlBuilder.setAndWhere('tid', { value: tid, operate: '=', }); this.sqlBuilder.setAndWhere('type', { value: type, operate: '=', }); this.sqlBuilder.setAndWhere('order', { value: this.ctx.advance.order - 1, operate: '=', }); this.sqlBuilder.orderBy = [['order', 'desc']]; const [sql, sqlParam] = this.sqlBuilder.build(this.tableName); return await this.db.queryOne(sql, sqlParam); } } return Advance; };