tender.js 3.5 KB

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