'use strict'; /** * Created by Tony on 2021/3/30. */ const BaseService = require('../base/base_service'); const rptArchiveConst = require('../const/rpt_archive'); module.exports = app => { class RptArchive extends BaseService { /** * 构造函数 * * @param {Object} ctx - egg全局变量 * @return {void} */ constructor(ctx) { super(ctx); this.tableName = 'rpt_archive'; this.dataId = 'id'; } async getArchiveById(id) { this.initSqlBuilder(); this.sqlBuilder.setAndWhere('id', { value: id, operate: '=', }); this.sqlBuilder.columns = ['id', 'prj_id', 'stage_id', 'content']; const [sql, sqlParam] = this.sqlBuilder.build(this.tableName); const list = await this.db.query(sql, sqlParam); return list; } async getArchiveByBzId(prjId, stgId, bzId) { if (stgId > 0) { return await this.getPrjStgArchive(prjId, stgId); } if (!bzId) return []; this.initSqlBuilder(); this.sqlBuilder.setAndWhere('prj_id', { value: prjId, operate: '=', }); this.sqlBuilder.setAndWhere('stage_id', { value: stgId, operate: '=', }); this.sqlBuilder.setAndWhere('business_id', { value: `"${bzId}"`, operate: '=', }); // this.sqlBuilder.columns = ['id', 'prj_id', 'stage_id', 'content']; const [sql, sqlParam] = this.sqlBuilder.build(this.tableName); const rstList = await this.db.query(sql, sqlParam); return rstList; } async getPrjStgArchiveByBz(prjId, stgId, tenderId) { this.initSqlBuilder(); this.sqlBuilder.setAndWhere('prj_id', { value: prjId, operate: '=', }); this.sqlBuilder.setAndWhere('stage_id', { value: stgId, operate: '=', }); this.sqlBuilder.setAndWhere('tender_id', { value: tenderId, operate: '=', }); // this.sqlBuilder.columns = ['id', 'prj_id', 'stage_id', 'tender_id', 'content']; const [sql, sqlParam] = this.sqlBuilder.build(this.tableName); const rstList = await this.db.query(sql, sqlParam); // 去除content为空或者为[]的 return this._.filter(rstList, function(item) { return item.content !== null && item.content !== '[]'; }); } async getPrjStgArchive(prjId, stgId) { this.initSqlBuilder(); this.sqlBuilder.setAndWhere('prj_id', { value: prjId, operate: '=', }); this.sqlBuilder.setAndWhere('stage_id', { value: stgId, operate: '=', }); this.sqlBuilder.columns = ['id', 'prj_id', 'stage_id', 'content']; const [sql, sqlParam] = this.sqlBuilder.build(this.tableName); const rstList = await this.db.query(sql, sqlParam); return rstList; } async createArchive(prj_id, stage_id, tender_id, business_id, archiveArr) { let rst = null; this.transaction = await this.db.beginTransaction(); try { const data = { prj_id, stage_id, business_id, tender_id, business_type: rptArchiveConst.getBusinessType(stage_id), content: JSON.stringify(archiveArr), }; // console.log(data); rst = await this.transaction.insert(this.tableName, data); await this.transaction.commit(); } catch (ex) { console.log(ex); // 回滚 await this.transaction.rollback(); } return rst; } async updateArchive(id, prj_id, stage_id, tender_id, business_id, archiveArr) { let rst = null; this.transaction = await this.db.beginTransaction(); try { const data = { id, prj_id, stage_id, business_id, tender_id, business_type: rptArchiveConst.getBusinessType(stage_id), content: JSON.stringify(archiveArr), }; // console.log(data); rst = await this.transaction.update(this.tableName, data); await this.transaction.commit(); } catch (ex) { console.log(ex); // 回滚 await this.transaction.rollback(); } return rst; } } return RptArchive; };