| 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;
 
- };
 
 
  |