tender.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. 'use strict';
  2. /**
  3. * 标段数据模型
  4. *
  5. * @author CaiAoLin
  6. * @date 2017/11/30
  7. * @version
  8. */
  9. module.exports = app => {
  10. class Tender extends app.BaseService {
  11. /**
  12. * 构造函数
  13. *
  14. * @param {Object} ctx - egg全局变量
  15. * @return {void}
  16. */
  17. constructor(ctx) {
  18. super(ctx);
  19. this.tableName = 'tender';
  20. this.status = {
  21. INIT: 1,
  22. };
  23. }
  24. /**
  25. * 数据规则
  26. *
  27. * @param {String} scene - 场景
  28. * @return {Object} - 返回数据规则
  29. */
  30. rule(scene) {
  31. let rule = {};
  32. switch (scene) {
  33. case 'add':
  34. rule = {
  35. name: { type: 'string', required: true, min: 2 },
  36. };
  37. break;
  38. default:
  39. break;
  40. }
  41. return rule;
  42. }
  43. /**
  44. * 获取标段列表
  45. *
  46. * @return {Array} - 返回标段数据
  47. */
  48. async getList() {
  49. // 获取当前用户信息
  50. const sessionUser = this.ctx.session.sessionUser;
  51. this.initSqlBuilder();
  52. this.sqlBuilder.setAndWhere('project_id', {
  53. value: sessionUser.projectId,
  54. operate: '=',
  55. });
  56. this.sqlBuilder.setAndWhere('user_id', {
  57. value: sessionUser.accountId,
  58. operate: '=',
  59. });
  60. this.sqlBuilder.limit = 10;
  61. this.sqlBuilder.columns = ['id', 'name', 'status'];
  62. const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
  63. return await this.db.query(sql, sqlParam);
  64. }
  65. /**
  66. * 新增标段
  67. *
  68. * @param {Object} postData - 表单post过来的数据
  69. * @return {Boolean} - 返回新增结果
  70. */
  71. async add(postData) {
  72. let result = false;
  73. this.transaction = await this.db.beginTransaction();
  74. try {
  75. // 获取当前用户信息
  76. const sessionUser = this.ctx.session.sessionUser;
  77. const insertData = {
  78. name: postData.name,
  79. status: this.status.INIT,
  80. project_id: sessionUser.projectId,
  81. user_id: sessionUser.accountId,
  82. create_time: postData.create_time,
  83. };
  84. const operate = await this.transaction.insert(this.tableName, insertData);
  85. result = operate.insertId > 0;
  86. if (!result) {
  87. throw '新增标段数据失败';
  88. }
  89. // 获取标段项目节点模板
  90. const tenderNodeTemplateData = await this.ctx.service.tenderNodeTemplate.getData();
  91. // 复制模板数据到标段数据表
  92. this.ctx.service.ledger.transaction = this.transaction;
  93. const copyResult = await this.ctx.service.ledger.add(tenderNodeTemplateData, operate.insertId);
  94. if (!copyResult) {
  95. throw '新增标段项目节点失败';
  96. }
  97. this.transaction.commit();
  98. } catch (error) {
  99. result = false;
  100. this.transaction.rollback();
  101. }
  102. return result;
  103. }
  104. }
  105. return Tender;
  106. };