schedule_month.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. 'use strict';
  2. module.exports = app => {
  3. class ScheduleMonth extends app.BaseService {
  4. constructor(ctx) {
  5. super(ctx);
  6. this.tableName = 'schedule_month';
  7. }
  8. async getLastPlanMonth() {
  9. const sql = 'SELECT `yearmonth` FROM ?? WHERE `tid` = ? ORDER BY `yearmonth` DESC Limit 0,1';
  10. const sqlParam = [this.tableName, this.ctx.tender.id];
  11. return await this.db.query(sql, sqlParam);
  12. }
  13. async add(data) {
  14. const transaction = await this.db.beginTransaction();
  15. try {
  16. const insertData = [];
  17. for (const m of data) {
  18. insertData.push({ tid: this.ctx.tender.id, yearmonth: m });
  19. }
  20. if (insertData.length > 0) await transaction.insert(this.tableName, insertData);
  21. await transaction.commit();
  22. return true;
  23. } catch (err) {
  24. await transaction.rollback();
  25. throw err;
  26. }
  27. }
  28. async del(data) {
  29. const transaction = await this.db.beginTransaction();
  30. try {
  31. for (const m of data) {
  32. const delData = { tid: this.ctx.tender.id, yearmonth: m };
  33. await transaction.delete(this.tableName, delData);
  34. await transaction.delete(this.ctx.service.scheduleLedgerMonth.tableName, delData);
  35. }
  36. // 重新计算总 计划金额和计划工程量
  37. await this.calcPlan(transaction, this.ctx.tender.id);
  38. await transaction.commit();
  39. return true;
  40. } catch (err) {
  41. await transaction.rollback();
  42. throw err;
  43. }
  44. }
  45. async calcPlan(transaction, tid) {
  46. const sql = 'SELECT SUM(`plan_gcl`) as total_plan_gcl, SUM(`plan_tp`) as total_plan_tp FROM ?? WHERE tid = ?';
  47. const sqlParam = [this.tableName, tid];
  48. const result = await transaction.queryOne(sql, sqlParam);
  49. const updateData = {
  50. plan_gcl: result.total_plan_gcl,
  51. plan_tp: result.total_plan_tp,
  52. };
  53. const option = {
  54. where: {
  55. tid,
  56. },
  57. };
  58. return await transaction.update(this.ctx.service.schedule.tableName, updateData, option);
  59. }
  60. async calcSj(transaction, tid) {
  61. const sql = 'SELECT SUM(`sj_gcl`) as total_sj_gcl, SUM(`sj_tp`) as total_sj_tp FROM ?? WHERE tid = ?';
  62. const sqlParam = [this.tableName, tid];
  63. const result = await transaction.queryOne(sql, sqlParam);
  64. const updateData = {
  65. sj_gcl: result.total_sj_gcl,
  66. sj_tp: result.total_sj_tp,
  67. };
  68. const option = {
  69. where: {
  70. tid,
  71. },
  72. };
  73. return await transaction.update(this.ctx.service.schedule.tableName, updateData, option);
  74. }
  75. async addStageUsed(data) {
  76. const updateData = {
  77. id: data.id,
  78. stage_gcl_used: 1,
  79. };
  80. return await this.db.update(this.tableName, updateData);
  81. }
  82. async delStageUsed(data) {
  83. const transaction = await this.db.beginTransaction();
  84. try {
  85. const updateDatas = [];
  86. const updateLmDatas = [];
  87. for (const m of data) {
  88. updateDatas.push({ row: { stage_gcl_used: 0, sj_gcl: null, sj_tp: null }, where: { yearmonth: m, tid: this.ctx.tender.id } });
  89. updateLmDatas.push({ row: { sj_gcl: null, sj_tp: null }, where: { yearmonth: m, tid: this.ctx.tender.id } });
  90. }
  91. if (updateDatas.length > 0) await transaction.updateRows(this.tableName, updateDatas);
  92. if (updateLmDatas.length > 0) await transaction.updateRows(this.ctx.service.scheduleLedgerMonth.tableName, updateLmDatas);
  93. // 重新计算总 计划金额和计划工程量
  94. await this.calcSj(transaction, this.ctx.tender.id);
  95. await transaction.commit();
  96. return true;
  97. } catch (err) {
  98. await transaction.rollback();
  99. throw err;
  100. }
  101. }
  102. }
  103. return ScheduleMonth;
  104. };