measure_bills.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. 'use strict';
  2. /**
  3. * 中间计量--计量清单 数据模型
  4. *
  5. * @author Mai
  6. * @date 2018/6/27
  7. * @version
  8. */
  9. module.exports = app => {
  10. class MeasureBills extends app.BaseService {
  11. /**
  12. * 构造函数
  13. *
  14. * @param {Object} ctx - egg全局变量
  15. * @return {void}
  16. */
  17. constructor(ctx) {
  18. super(ctx);
  19. this.tableName = 'measure_bills';
  20. }
  21. /**
  22. * 查询中间计量下清单信息
  23. *
  24. * @param {Number} tenderId - 标段id
  25. * @param {uuid} mid - 中间计量id
  26. * @returns {Promise<*>}
  27. */
  28. async getBillsDetail(tenderId, mid) {
  29. const sql = 'SELECT MB.`tender_id`, MB.`mid`, MB.`bid`, L.`code`, L.`name`, L.`full_path` ' +
  30. 'FROM ?? AS L, ?? AS MB ' +
  31. 'WHERE L.`tender_id` = ? and MB.`tender_id` = ? and MB.`mid` = ? ' +
  32. ' and MB.`bid` = L.`ledger_id`';
  33. const sqlParam = [this.ctx.service.ledger.tableName, this.tableName, tenderId, tenderId, mid];
  34. return await this.db.query(sql, sqlParam);
  35. }
  36. /**
  37. *
  38. * @param tenderId
  39. * @param mid
  40. * @param ids
  41. * @returns {Promise<*>}
  42. * @private
  43. */
  44. async _getUnionBillsData(tenderId, mid, ids) {
  45. const sql = 'SELECT L.*, MB.`deal_quantity`, MB.`deal_totalprice`, MB.`qc_quantity`, MB.`qc_totalprice` ' +
  46. 'FROM ?? AS L, ?? AS MB ' +
  47. 'WHERE L.`tender_id` = ? and L.`ledger_id` IN (' + ids.join(',') + ') and MB.`tender_id` = ? and MB.`mid` = ?' +
  48. ' and MB.`bid` = L.`ledger_id` ' +
  49. 'UNION ' +
  50. 'SELECT L.*, Null, Null, Null, Null ' +
  51. 'FROM ?? AS L ' +
  52. 'WHERE L.`tender_id` = ? and L.`ledger_id` IN (' + ids.join(',') + ') and L.`is_leaf` = false';
  53. const sqlParam = [this.ctx.service.ledger.tableName, this.tableName, tenderId, tenderId, mid,
  54. this.ctx.service.ledger.tableName, tenderId];
  55. return await this.db.query(sql, sqlParam);
  56. };
  57. /**
  58. * 查询中间计量下清单(含父项)
  59. * @param {Number} tenderId - 标段id
  60. * @param {uuid} mid - 中间计量id
  61. * @returns {Promise<Array>}
  62. */
  63. async getBillsDetailWithParent(tenderId, mid) {
  64. const bills = await this.getBillsDetail(tenderId, mid);
  65. if (bills.length > 0) {
  66. let ids = [];
  67. for (const b of bills) {
  68. ids = ids.concat(b.full_path.split('.'));
  69. }
  70. return await this._getUnionBillsData(tenderId, mid, ids);
  71. //return await this.ctx.service.ledger.getDataByNodeIds(tenderId, ids);
  72. } else {
  73. return [];
  74. }
  75. }
  76. /**
  77. * 查询中间计量下,某一条清单信息
  78. * @param {Number} tenderId - 标段id
  79. * @param {uuid} mid - 计量id
  80. * @param {Number} bid - 清单id
  81. * @returns {Promise<*>}
  82. */
  83. async getBillsData(tenderId, mid, bid) {
  84. const sql = 'SELECT MB.`tender_id`, MB.`mid`, MB.`bid`, L.`code`, L.`name`, L.`full_path` ' +
  85. 'FROM ?? AS L, ?? AS MB ' +
  86. 'WHERE L.`tender_id` = ? and MB.`tender_id` = ? and MB.`mid` = ? and MB.bid = ?' +
  87. ' and MB.`bid` = L.`ledger_id`';
  88. const sqlParam = [this.ctx.service.ledger.tableName, this.tableName, tenderId, tenderId, mid, bid];
  89. return await this.db.queryOne(sql, sqlParam);
  90. }
  91. /**
  92. * 查询中间计量下,某一条清单信息(含父项)
  93. * @param {Number} tenderId - 标段id
  94. * @param {uuid} mid - 计量id
  95. * @param {Number} bid - 清单id
  96. * @returns {Promise<*>}
  97. */
  98. async getBillsDataWithParent(tenderId, mid, bid) {
  99. const bills = await this.getBillsData(tenderId, mid, bid);
  100. const ids = bills.full_path.split('.');
  101. return await this._getUnionBillsData(tenderId, mid, ids);
  102. //return await this.ctx.service.ledger.getDataByNodeIds(tenderId, bills.full_path.split('.'));
  103. }
  104. /**
  105. * 新增计量清单
  106. * @param {Number} tenderId - 标段id
  107. * @param {uuid} mid - 计量id
  108. * @param {Number} bid - 清单id
  109. * @returns {Promise<void>}
  110. */
  111. async addBills(tenderId, mid, bid) {
  112. const result = await this.db.insert(this.tableName, {
  113. tender_id: tenderId,
  114. mid: mid,
  115. bid: bid,
  116. in_time: new Date(),
  117. in_user: this.ctx.session.sessionUser.accountId,
  118. });
  119. }
  120. /**
  121. * 移除计量清单
  122. * @param {Number} tenderId - 标段id
  123. * @param {uuid} mid - 计量id
  124. * @param {Number} bid - 清单id
  125. * @returns {Promise<void>}
  126. */
  127. async removeBills(tenderId, mid, bid) {
  128. await this.db.delete(this.tableName, {
  129. tender_id: tenderId,
  130. mid: mid,
  131. bid: bid,
  132. });
  133. }
  134. /**
  135. * 更新计量清单并计算
  136. * @param {Number} tenderId - 标段id
  137. * @param {uuid} mid - 计量id
  138. * @param {Number} bid - 清单id
  139. * @param {Object} data - 更新数据
  140. * @returns {Promise<*>}
  141. */
  142. async updateBills(tenderId, mid, bid, data) {
  143. const bills = await this.ctx.service.ledger.getDataByNodeId(tenderId, bid);
  144. if (data.deal_quantity) {
  145. data.deal_totalprice = data.deal_quantity * bills.unit_price;
  146. } else if (data.qc_quantity) {
  147. data.qc_totalprice = data.qc_quantity * bills.unit_price;
  148. } else {
  149. throw '计量清单数据有误';
  150. }
  151. const result = await this.update(data, {
  152. tender_id: tenderId,
  153. mid: mid,
  154. bid: bid,
  155. });
  156. if (result) {
  157. data.ledger_id = bid;
  158. return data;
  159. } else {
  160. throw '更新数据失败';
  161. }
  162. }
  163. }
  164. return MeasureBills;
  165. };