budget.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date 2021/11/9
  7. * @version
  8. */
  9. module.exports = app => {
  10. class Budget extends app.BaseService {
  11. /**
  12. * 构造函数
  13. *
  14. * @param {Object} ctx - egg全局变量
  15. * @return {void}
  16. */
  17. constructor(ctx) {
  18. super(ctx);
  19. this.tableName = 'budget';
  20. }
  21. /**
  22. * 数据规则
  23. *
  24. * @param {String} scene - 场景
  25. * @return {Object} - 返回数据规则
  26. */
  27. rule(scene) {
  28. let rule = {};
  29. switch (scene) {
  30. case 'add':
  31. rule = {
  32. name: { type: 'string', required: true, min: 2 },
  33. std_id: { type: 'string', required: true, min: 1 },
  34. };
  35. break;
  36. case 'save':
  37. rule = {
  38. name: { type: 'string', required: true, min: 2, max: 100, },
  39. };
  40. default:
  41. break;
  42. }
  43. return rule;
  44. }
  45. /**
  46. * 新增标段
  47. *
  48. * @param {Object} data - 提交的数据
  49. * @return {Boolean} - 返回新增结果
  50. */
  51. async add(data) {
  52. const budgetStd = await this.ctx.service.budgetStd.getDataById(data.std_id);
  53. if (!budgetStd) throw '选择的概算标准不存在,请刷新页面重试';
  54. const conn = await this.db.beginTransaction();
  55. try {
  56. // 获取当前用户信息
  57. const sessionUser = this.ctx.session.sessionUser;
  58. // 获取当前项目信息
  59. const sessionProject = this.ctx.session.sessionProject;
  60. const insertData = {
  61. pid: sessionProject.id, user_id: sessionUser.accountId, in_time: new Date(),
  62. name: data.name, std_id: data.std_id,
  63. };
  64. const operate = await conn.insert(this.tableName, insertData);
  65. if (operate.insertId === 0) throw '新增标段数据失败';
  66. // 获取合同支付模板 并添加到标段
  67. await this.ctx.service.budgetGu.initByTemplate(conn, operate.insertId, budgetStd.gu_template_id);
  68. await this.ctx.service.budgetGai.initByTemplate(conn, operate.insertId, budgetStd.gu_template_id);
  69. await this.ctx.service.budgetYu.initByTemplate(conn, operate.insertId, budgetStd.gu_template_id);
  70. await conn.commit();
  71. return await this.getDataById(operate.insertId);
  72. } catch (error) {
  73. await conn.rollback();
  74. throw error;
  75. }
  76. }
  77. /**
  78. * 保存标段
  79. *
  80. * @param {Number} id
  81. * @param {Object} postData - 表单post过来的数
  82. * @return {Boolean} - 返回执行结果
  83. */
  84. async save(id, postData) {
  85. const rowData = { id, name: postData.name };
  86. const result = await this.db.update(this.tableName, rowData);
  87. return result.affectedRows > 0;
  88. }
  89. /**
  90. * 假删除
  91. *
  92. * @param {Number} id - 删除的id
  93. * @return {Boolean} - 删除结果
  94. */
  95. async deleteBudget(id) {
  96. const updateData = { id, status: this.status.DISABLE };
  97. const result = await this.db.update(this.tableName, updateData);
  98. return result.affectedRows > 0;
  99. }
  100. /**
  101. * 真删除
  102. * @param {Number} id - 删除的标段id
  103. * @return {Promise<boolean>} - 结果
  104. */
  105. async deleteBudgetNoBackup(id) {
  106. const transaction = await this.db.beginTransaction();
  107. try {
  108. await transaction.delete(this.tableName, { id });
  109. await transaction.delete(this.ctx.service.guBudget.tableName, { bid: id });
  110. await transaction.delete(this.ctx.service.gaiBudget.tableName, { bid: id });
  111. await transaction.delete(this.ctx.service.yuBudget.tableName, { bid: id });
  112. await transaction.commit();
  113. return true;
  114. } catch (err) {
  115. this.ctx.log(err);
  116. await transaction.rollback();
  117. return false;
  118. }
  119. }
  120. }
  121. return Budget;
  122. };