sub_proj_push.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. module.exports = app => {
  10. class SubProjPush extends app.BaseService {
  11. /**
  12. * 构造函数
  13. *
  14. * @param {Object} ctx - egg全局变量
  15. * @return {void}
  16. */
  17. constructor(ctx) {
  18. super(ctx);
  19. this.tableName = 'sub_project_push';
  20. }
  21. async getData(spid) {
  22. const data = await this.getAllDataByCondition({where: { spid }, orders: [['push_order', 'asc']]});
  23. return data;
  24. }
  25. async _addDatas(data) {
  26. const spid = this.ctx.subProject.id;
  27. const datas = data instanceof Array ? data : [data];
  28. const insertData = [];
  29. for (const d of datas) {
  30. if (!d.push_order) throw '提交的数据错误';
  31. const nd = {
  32. id: this.uuid.v4(),
  33. spid: this.ctx.subProject.id,
  34. user_id: this.ctx.session.sessionUser.accountId,
  35. update_user_id: this.ctx.session.sessionUser.accountId,
  36. push_order: d.push_order,
  37. };
  38. if (d.push_date !== undefined) nd.push_date = d.push_date;
  39. if (d.push_content !== undefined) nd.push_content = d.push_content;
  40. if (d.memo !== undefined) nd.memo = d.memo;
  41. insertData.push(nd);
  42. }
  43. const push_order = this.ctx.helper._.min(insertData.map(x => { return x.push_order}));
  44. const conn = await this.db.beginTransaction();
  45. try {
  46. await conn.query(`UPDATE ${this.tableName} SET push_order = push_order + ? WHERE spid = ? AND push_order >= ?`, [insertData.length, spid, push_order]);
  47. await conn.insert(this.tableName, insertData);
  48. await conn.commit();
  49. } catch(err) {
  50. await conn.rollback();
  51. throw err;
  52. }
  53. const add = await this.getAllDataByCondition({ where: { spid: this.ctx.subProject.id, id: this.ctx.helper._.map(insertData, 'id') } });
  54. const update = await this.db.query(`SELECT * FROM ${this.tableName} WHERE spid = ? AND push_order >= ?`, [spid, push_order + insertData.length]);
  55. return { add, update };
  56. }
  57. async _delDatas (data) {
  58. const spid = this.ctx.subProject.id;
  59. const datas = data instanceof Array ? data : [data];
  60. const orgDatas = await this.getAllDataByCondition({ where: { id: datas }});
  61. const push_order = this.ctx.helper._.min(orgDatas.map(x => { return x.push_order}));
  62. const conn = await this.db.beginTransaction();
  63. try {
  64. await conn.delete(this.tableName, {id: datas});
  65. await conn.update(this.ctx.service.subProjFile.tableName, { is_deleted: 1}, { where: { spid: this.ctx.subProject.id, type: 'push', rela_id: datas } });
  66. await conn.query(`UPDATE ${this.tableName} SET push_order = push_order - ? WHERE spid = ? AND push_order >= ?`, [datas.length, spid, push_order + datas.length]);
  67. await conn.commit();
  68. } catch(err) {
  69. await conn.rollback();
  70. throw err;
  71. }
  72. const update = await this.db.query(`SELECT * FROM ${this.tableName} WHERE spid = ? AND push_order >= ?`, [spid, push_order]);
  73. return { del: datas, update };
  74. }
  75. async _updateDatas (data) {
  76. const datas = data instanceof Array ? data : [data];
  77. const uDatas = [];
  78. for (const d of datas) {
  79. const nd = { id: d.id };
  80. if (d.push_order !== undefined) nd.push_order = d.push_order;
  81. if (d.push_date !== undefined) nd.push_date = d.push_date;
  82. if (d.push_content !== undefined) nd.push_content = d.push_content;
  83. if (d.memo !== undefined) nd.memo = d.memo;
  84. uDatas.push(nd);
  85. }
  86. if (uDatas.length > 0) {
  87. await this.db.updateRows(this.tableName, uDatas);
  88. return uDatas;
  89. } else {
  90. return [];
  91. }
  92. }
  93. async updateDatas(data) {
  94. const result = {add: [], del: [], update: []};
  95. try {
  96. if (data.add) {
  97. const addResult = await this._addDatas(data.add);
  98. result.add.push(...addResult.add);
  99. result.update.push(...addResult.update);
  100. }
  101. if (data.update) {
  102. result.update = await this._updateDatas(data.update);
  103. }
  104. if (data.del) {
  105. const delResult = await this._delDatas(data.del);
  106. result.del.push(...delResult.del);
  107. result.update.push(...delResult.update);
  108. }
  109. return result;
  110. } catch (err) {
  111. if (err.stack) {
  112. throw err;
  113. } else {
  114. result.err = err.toString();
  115. return result;
  116. }
  117. }
  118. }
  119. }
  120. return SubProjPush;
  121. };