sub_proj_info.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const defaultInfo = {
  10. main_quantity: [
  11. { id: 1, name: '路基土石方', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  12. { id: 2, name: '特殊路基处理', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  13. { id: 3, name: '路基排水坞工', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  14. { id: 4, name: '路基防护坞工', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  15. { id: 5, name: '路面工程', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  16. { id: 6, name: '大、特大桥', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  17. { id: 7, name: '中、小桥', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  18. { id: 8, name: '涵洞', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  19. { id: 9, name: '隧道', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  20. { id: 10, name: '分离式立交', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  21. { id: 11, name: '通道、天桥', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  22. { id: 12, name: '平面交叉', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  23. { id: 13, name: '互通式立交', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  24. { id: 14, name: '连接线长度、辅导长度', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  25. { id: 15, name: '管理及养护房屋', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  26. ],
  27. gcl_quantity: [
  28. { id: 1, name: '主要人工消耗', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  29. { id: 2, name: '主要材料消耗', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  30. { id: 3, name: '钢材', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  31. { id: 4, name: '沥青', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  32. { id: 5, name: '路面工程', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  33. { id: 6, name: '汽油、柴油', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  34. { id: 7, name: '水泥', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  35. { id: 8, name: '碎石、砂', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  36. { id: 9, name: '电', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  37. { id: 10, name: '主要机械消耗', unit: 'm3', dgn_qty: 0, final_qty: 0, },
  38. ],
  39. };
  40. module.exports = app => {
  41. class SubProjInfo extends app.BaseService {
  42. /**
  43. * 构造函数
  44. *
  45. * @param {Object} ctx - egg全局变量
  46. * @return {void}
  47. */
  48. constructor(ctx) {
  49. super(ctx);
  50. this.tableName = 'sub_project_info';
  51. }
  52. async addInfo(id, project_id, transaction) {
  53. const info = { id, project_id };
  54. for (const di in defaultInfo) {
  55. info[di] = JSON.stringify(defaultInfo[di]);
  56. }
  57. if (transaction) {
  58. await transaction.insert(this.tableName, info);
  59. } else {
  60. await this.db.insert(this.tableName, info);
  61. }
  62. return info;
  63. }
  64. /**
  65. * 获取标段相关信息
  66. * @param tenderId
  67. * @return {Promise<void>}
  68. */
  69. async getInfo(id) {
  70. let info = await this.getDataByCondition({ id });
  71. // 兼容不存在info的情况
  72. if (!info) info = await this.addInfo(id, this.ctx.session.sessionProject.id);
  73. for (const ai in defaultInfo) {
  74. info[ai] = !info[ai] || info[ai] === '' ? defaultInfo[ai] : JSON.parse(info[ai]);
  75. }
  76. return info;
  77. }
  78. async _saveCommonInfo(id, data) {
  79. const updateData = { id };
  80. for (const d in data) {
  81. if (d === 'id' || d === 'project_id') continue;
  82. if (defaultInfo[d]) continue;
  83. updateData[d] = data[d];
  84. }
  85. await this.db.update(this.tableName, updateData);
  86. return updateData;
  87. }
  88. async _saveArrayInfo(id, type, data) {
  89. const info = await this.getInfo(id);
  90. const source = info[type];
  91. const result = [];
  92. for (const d of data) {
  93. const s = source.find(x => { return x.id === d.id });
  94. if (d.dgn_qty !== undefined) s.dgn_qty = d.dgn_qty || 0;
  95. if (d.final_qty !== undefined) s.final_qty = d.final_qty || 0;
  96. result.push(s);
  97. }
  98. const updateData = { id };
  99. updateData[type] = JSON.stringify(source);
  100. await this.db.update(this.tableName, updateData);
  101. return result;
  102. }
  103. /**
  104. * 保存标段相关信息
  105. *
  106. * @param data
  107. * @return {Promise<void>}
  108. */
  109. async saveInfo(id, data) {
  110. switch (data.type) {
  111. case 'main_quantity':
  112. case 'gcl_quantity':
  113. return await this._saveArrayInfo(id, data.type, data.updateData);
  114. default:
  115. return await this._saveCommonInfo(id, data.updateData);
  116. }
  117. }
  118. }
  119. return SubProjInfo;
  120. };