stage.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. 'use strict';
  2. /**
  3. * 期计量 数据模型
  4. *
  5. * @author Mai
  6. * @date 2018/8/13
  7. * @version
  8. */
  9. const audit = require('../const/audit');
  10. module.exports = app => {
  11. class Stage extends app.BaseService {
  12. /**
  13. * 构造函数
  14. *
  15. * @param {Object} ctx - egg全局变量
  16. * @return {void}
  17. */
  18. constructor(ctx) {
  19. super(ctx);
  20. this.tableName = 'stage';
  21. }
  22. /**
  23. * 获取标段下的全部计量期,按倒序
  24. * @param tenderId
  25. * @returns {Promise<void>}
  26. */
  27. async getValidStages(tenderId) {
  28. return await this.db.select(this.tableName, {
  29. where: {tid: tenderId},
  30. orders: [['order', 'desc']],
  31. });
  32. }
  33. /**
  34. *
  35. * @param tenderId - 标段id
  36. * @param date - 计量年月
  37. * @param period - 开始-截止日期
  38. * @returns {Promise<void>}
  39. */
  40. async addStage(tenderId, date, period) {
  41. const stages = await this.getAllDataByCondition({
  42. where: {tid: tenderId},
  43. order: ['order'],
  44. });
  45. if (stages.length > 0 && stages[stages.length - 1].status !== audit.flow.status.checked) {
  46. throw '上一期未审批通过,请等待上一期审批通过后,再新增数据';
  47. };
  48. const order = stages.length + 1;
  49. const newStage = {
  50. sid: this.uuid.v4(),
  51. tid: tenderId,
  52. order: order,
  53. in_time: new Date(),
  54. s_time: date,
  55. period: period,
  56. times: 1,
  57. status: audit.flow.status.uncheck,
  58. user_id: this.ctx.session.sessionUser.accountId,
  59. };
  60. const result = await this.db.insert(this.tableName, newStage);
  61. return result.affectedRows === 1 ? newStage : null;
  62. }
  63. /**
  64. * 编辑计量期
  65. *
  66. * @param {Number} tenderId - 标段Id
  67. * @param {Number} order - 第N期
  68. * @param {String} date - 计量年月
  69. * @param {String} period - 开始-截止时间
  70. * @returns {Promise<void>}
  71. */
  72. async saveStage(tenderId, order, date, period) {
  73. await this.db.update(this.tableName, {
  74. s_time: date,
  75. period: period,
  76. }, { where: { tid: tenderId, order: order } });
  77. }
  78. /**
  79. * 设置 中间计量 生成规则,并生成数据
  80. * @param {Number} tenderId - 标段id
  81. * @param {Number} order - 期序号
  82. * @param {Number} data - 中间计量生成规则
  83. * @returns {Promise<void>}
  84. */
  85. async buildDetailData(tenderId, order, data) {
  86. const conn = await this.db.beginTransaction();
  87. try {
  88. await conn.update(this.tableName, { im_type: data.im_type, im_pre: data.im_pre }, { where: { tid: tenderId, order: order } });
  89. // to do 生成中间计量数据
  90. await conn.commit();
  91. } catch (err) {
  92. await conn.rollback();
  93. throw err;
  94. }
  95. }
  96. }
  97. return Stage;
  98. };