123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- 'use strict';
- /**
- * 中间计量--计量清单 数据模型
- *
- * @author Mai
- * @date 2018/6/27
- * @version
- */
- module.exports = app => {
- class MeasureBills extends app.BaseService {
- /**
- * 构造函数
- *
- * @param {Object} ctx - egg全局变量
- * @return {void}
- */
- constructor(ctx) {
- super(ctx);
- this.tableName = 'measure_bills';
- }
- /**
- * 查询中间计量下清单信息
- *
- * @param {Number} tenderId - 标段id
- * @param {uuid} mid - 中间计量id
- * @return {Promise<*>}
- */
- async getBillsDetail(tenderId, mid) {
- const sql = 'SELECT MB.`tender_id`, MB.`mid`, MB.`bid`, L.`code`, L.`name`, L.`full_path` ' +
- 'FROM ?? AS L, ?? AS MB ' +
- 'WHERE L.`tender_id` = ? and MB.`tender_id` = ? and MB.`mid` = ? ' +
- ' and MB.`bid` = L.`ledger_id`';
- const sqlParam = [this.ctx.service.ledger.tableName, this.tableName, tenderId, tenderId, mid];
- return await this.db.query(sql, sqlParam);
- }
- /**
- *
- * @param tenderId
- * @param mid
- * @param ids
- * @return {Promise<*>}
- * @private
- */
- async _getUnionBillsData(tenderId, mid, ids) {
- const sql = 'SELECT L.*, MB.`deal_quantity`, MB.`deal_totalprice`, MB.`qc_quantity`, MB.`qc_totalprice` ' +
- 'FROM ?? AS L, ?? AS MB ' +
- 'WHERE L.`tender_id` = ? and L.`ledger_id` IN (' + ids.join(',') + ') and MB.`tender_id` = ? and MB.`mid` = ?' +
- ' and MB.`bid` = L.`ledger_id` ' +
- 'UNION ' +
- 'SELECT L.*, Null, Null, Null, Null ' +
- 'FROM ?? AS L ' +
- 'WHERE L.`tender_id` = ? and L.`ledger_id` IN (' + ids.join(',') + ') and L.`is_leaf` = false';
- const sqlParam = [this.ctx.service.ledger.tableName, this.tableName, tenderId, tenderId, mid,
- this.ctx.service.ledger.tableName, tenderId];
- return await this.db.query(sql, sqlParam);
- }
- /**
- * 查询中间计量下清单(含父项)
- * @param {Number} tenderId - 标段id
- * @param {uuid} mid - 中间计量id
- * @return {Promise<Array>}
- */
- async getBillsDetailWithParent(tenderId, mid) {
- const bills = await this.getBillsDetail(tenderId, mid);
- if (bills.length > 0) {
- let ids = [];
- for (const b of bills) {
- ids = ids.concat(b.full_path.split('.'));
- }
- return await this._getUnionBillsData(tenderId, mid, ids);
- // return await this.ctx.service.ledger.getDataByNodeIds(tenderId, ids);
- }
- return [];
- }
- /**
- * 查询中间计量下,某一条清单信息
- * @param {Number} tenderId - 标段id
- * @param {uuid} mid - 计量id
- * @param {Number} bid - 清单id
- * @return {Promise<*>}
- */
- async getBillsData(tenderId, mid, bid) {
- const sql = 'SELECT MB.`tender_id`, MB.`mid`, MB.`bid`, L.`code`, L.`name`, L.`full_path` ' +
- 'FROM ?? AS L, ?? AS MB ' +
- 'WHERE L.`tender_id` = ? and MB.`tender_id` = ? and MB.`mid` = ? and MB.bid = ?' +
- ' and MB.`bid` = L.`ledger_id`';
- const sqlParam = [this.ctx.service.ledger.tableName, this.tableName, tenderId, tenderId, mid, bid];
- return await this.db.queryOne(sql, sqlParam);
- }
- /**
- * 查询中间计量下,某一条清单信息(含父项)
- * @param {Number} tenderId - 标段id
- * @param {uuid} mid - 计量id
- * @param {Number} bid - 清单id
- * @return {Promise<*>}
- */
- async getBillsDataWithParent(tenderId, mid, bid) {
- const bills = await this.getBillsData(tenderId, mid, bid);
- const ids = bills.full_path.split('.');
- return await this._getUnionBillsData(tenderId, mid, ids);
- // return await this.ctx.service.ledger.getDataByNodeIds(tenderId, bills.full_path.split('.'));
- }
- /**
- * 新增计量清单
- * @param {Number} tenderId - 标段id
- * @param {uuid} mid - 计量id
- * @param {Number} bid - 清单id
- * @return {Promise<void>}
- */
- async addBills(tenderId, mid, bid) {
- const result = await this.db.insert(this.tableName, {
- tender_id: tenderId,
- mid,
- bid,
- in_time: new Date(),
- in_user: this.ctx.session.sessionUser.accountId,
- });
- }
- /**
- * 移除计量清单
- * @param {Number} tenderId - 标段id
- * @param {uuid} mid - 计量id
- * @param {Number} bid - 清单id
- * @return {Promise<void>}
- */
- async removeBills(tenderId, mid, bid) {
- await this.db.delete(this.tableName, {
- tender_id: tenderId,
- mid,
- bid,
- });
- }
- /**
- * 更新计量清单并计算
- * @param {Number} tenderId - 标段id
- * @param {uuid} mid - 计量id
- * @param {Number} bid - 清单id
- * @param {Object} data - 更新数据
- * @return {Promise<*>}
- */
- async updateBills(tenderId, mid, bid, data) {
- const bills = await this.ctx.service.ledger.getDataByNodeId(tenderId, bid);
- if (data.deal_quantity) {
- data.deal_totalprice = data.deal_quantity * bills.unit_price;
- } else if (data.qc_quantity) {
- data.qc_totalprice = data.qc_quantity * bills.unit_price;
- } else {
- throw '计量清单数据有误';
- }
- const result = await this.update(data, {
- tender_id: tenderId,
- mid,
- bid,
- });
- if (result) {
- data.ledger_id = bid;
- return data;
- }
- throw '更新数据失败';
- }
- }
- return MeasureBills;
- };
|