tender_ass.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. 'use strict';
  2. /**
  3. * 标段协作相关
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. module.exports = app => {
  10. class TenderAss 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_ass';
  20. }
  21. async getAssData(tid, type, rela_id = '') {
  22. return this.getAllDataByCondition({
  23. columns: ['id', 'tid', 'user_id', 'rela_id', 'ass_type', 'ass_id', 'name', 'company', 'role'],
  24. where: { tid, ass_type: type, rela_id: rela_id || '' },
  25. orders: [['create_time', 'asc']]
  26. });
  27. }
  28. async getUserAssData(tid, type, user_id, rela_id = '') {
  29. const result = await this.getDataByCondition({ tid, ass_type: type, user_id, rela_id });
  30. if (result) result.ass_id = result.ass_id ? result.ass_id.split(',') : [];
  31. return result;
  32. }
  33. async saveAssData(tid, type, rela_id, data) {
  34. const accountId = this.ctx.session.sessionUser.accountId;
  35. const orgAssData = await this.getAssData(tid, type, rela_id || '');
  36. const updateData = [], deleteData = [], insertData = [];
  37. for (const d of data) {
  38. const oa = orgAssData.find(x => { return x.user_id === d.user_id; });
  39. if (oa) {
  40. updateData.push({ id: oa.id, ass_id: d.ass_id, update_user_id: accountId });
  41. } else {
  42. insertData.push({
  43. tid, rela_id: rela_id || '', ass_type: type, ass_id: d.ass_id,
  44. user_id: d.user_id, name: d.name, company: d.company, role: d.role,
  45. create_user_id: accountId, update_user_id: accountId,
  46. });
  47. }
  48. }
  49. for (const oa of orgAssData) {
  50. const d = data.find(x => { return x.user_id === oa.user_id; });
  51. if (!d) deleteData.push(oa.id);
  52. }
  53. if (updateData.length === 0 && deleteData.length === 0 && insertData.length === 0) return;
  54. const conn = await this.db.beginTransaction();
  55. try {
  56. if (insertData.length > 0) await conn.insert(this.tableName, insertData);
  57. if (deleteData.length > 0) await conn.delete(this.tableName, { id: deleteData });
  58. if (updateData.length > 0) await conn.updateRows(this.tableName, updateData);
  59. await conn.commit();
  60. } catch (err) {
  61. this.ctx.log(err);
  62. await conn.rollback();
  63. throw '保存协作数据错误';
  64. }
  65. }
  66. }
  67. return TenderAss;
  68. };