tender.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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 sessionProject = this.ctx.session.sessionProject;
  51. this.initSqlBuilder();
  52. this.sqlBuilder.setAndWhere('project_id', {
  53. value: sessionProject.id,
  54. operate: '=',
  55. });
  56. this.sqlBuilder.limit = 10;
  57. this.sqlBuilder.columns = ['id', 'name', 'status', 'type'];
  58. const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
  59. return await this.db.query(sql, sqlParam);
  60. }
  61. /**
  62. * 新增标段
  63. *
  64. * @param {Object} postData - 表单post过来的数据
  65. * @return {Boolean} - 返回新增结果
  66. */
  67. async add(postData) {
  68. let result = false;
  69. this.transaction = await this.db.beginTransaction();
  70. try {
  71. // 获取当前用户信息
  72. const sessionUser = this.ctx.session.sessionUser;
  73. const insertData = {
  74. name: postData.name,
  75. status: this.status.INIT,
  76. project_id: sessionUser.projectId,
  77. user_id: sessionUser.accountId,
  78. create_time: postData.create_time,
  79. };
  80. const operate = await this.transaction.insert(this.tableName, insertData);
  81. result = operate.insertId > 0;
  82. if (!result) {
  83. throw '新增标段数据失败';
  84. }
  85. // 获取标段项目节点模板
  86. const tenderNodeTemplateData = await this.ctx.service.tenderNodeTemplate.getData();
  87. // 复制模板数据到标段数据表
  88. this.ctx.service.ledger.transaction = this.transaction;
  89. const copyResult = await this.ctx.service.ledger.add(tenderNodeTemplateData, operate.insertId);
  90. if (!copyResult) {
  91. throw '新增标段项目节点失败';
  92. }
  93. this.transaction.commit();
  94. } catch (error) {
  95. result = false;
  96. this.transaction.rollback();
  97. }
  98. return result;
  99. }
  100. }
  101. return Tender;
  102. };