'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) 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.orderBy = [['order', 'desc']] const [sql, sqlParam] = this.sqlBuilder.build(this.tableName) return await this.db.queryOne(sql, sqlParam) } // /** // * 更新预付款记录 // * @param {Object} data 载荷 // * @param {Number} id 预付款id // */ // async updateAdvance(data, id) { // const result = await this.db.update(this.tableName, data, { where: { id } }) // console.log(result) // } } return Advance }