123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- 'use strict';
- /**
- *
- *
- * @author Mai
- * @date
- * @version
- */
- module.exports = app => {
- class SubProjPush extends app.BaseService {
- /**
- * 构造函数
- *
- * @param {Object} ctx - egg全局变量
- * @return {void}
- */
- constructor(ctx) {
- super(ctx);
- this.tableName = 'sub_project_push';
- }
- async getData(spid) {
- const data = await this.getAllDataByCondition({where: { spid }, orders: [['push_order', 'asc']]});
- return data;
- }
- async _addDatas(data) {
- const spid = this.ctx.subProject.id;
- const datas = data instanceof Array ? data : [data];
- const insertData = [];
- for (const d of datas) {
- if (!d.push_order) throw '提交的数据错误';
- const nd = {
- id: this.uuid.v4(),
- spid: this.ctx.subProject.id,
- user_id: this.ctx.session.sessionUser.accountId,
- update_user_id: this.ctx.session.sessionUser.accountId,
- push_order: d.push_order,
- };
- if (d.push_date !== undefined) nd.push_date = d.push_date;
- if (d.push_content !== undefined) nd.push_content = d.push_content;
- if (d.memo !== undefined) nd.memo = d.memo;
- insertData.push(nd);
- }
- const push_order = this.ctx.helper._.min(insertData.map(x => { return x.push_order}));
- const conn = await this.db.beginTransaction();
- try {
- await conn.query(`UPDATE ${this.tableName} SET push_order = push_order + ? WHERE spid = ? AND push_order >= ?`, [insertData.length, spid, push_order]);
- await conn.insert(this.tableName, insertData);
- await conn.commit();
- } catch(err) {
- await conn.rollback();
- throw err;
- }
- const add = await this.getAllDataByCondition({ where: { spid: this.ctx.subProject.id, id: this.ctx.helper._.map(insertData, 'id') } });
- const update = await this.db.query(`SELECT * FROM ${this.tableName} WHERE spid = ? AND push_order >= ?`, [spid, push_order + insertData.length]);
- return { add, update };
- }
- async _delDatas (data) {
- const spid = this.ctx.subProject.id;
- const datas = data instanceof Array ? data : [data];
- const orgDatas = await this.getAllDataByCondition({ where: { id: datas }});
- const push_order = this.ctx.helper._.min(orgDatas.map(x => { return x.push_order}));
- const conn = await this.db.beginTransaction();
- try {
- await conn.delete(this.tableName, {id: datas});
- await conn.update(this.ctx.service.subProjFile.tableName, { is_deleted: 1}, { where: { spid: this.ctx.subProject.id, type: 'push', rela_id: datas } });
- await conn.query(`UPDATE ${this.tableName} SET push_order = push_order - ? WHERE spid = ? AND push_order >= ?`, [datas.length, spid, push_order + datas.length]);
- await conn.commit();
- } catch(err) {
- await conn.rollback();
- throw err;
- }
- const update = await this.db.query(`SELECT * FROM ${this.tableName} WHERE spid = ? AND push_order >= ?`, [spid, push_order]);
- return { del: datas, update };
- }
- async _updateDatas (data) {
- const datas = data instanceof Array ? data : [data];
- const uDatas = [];
- for (const d of datas) {
- const nd = { id: d.id };
- if (d.push_order !== undefined) nd.push_order = d.push_order;
- if (d.push_date !== undefined) nd.push_date = d.push_date;
- if (d.push_content !== undefined) nd.push_content = d.push_content;
- if (d.memo !== undefined) nd.memo = d.memo;
- uDatas.push(nd);
- }
- if (uDatas.length > 0) {
- await this.db.updateRows(this.tableName, uDatas);
- return uDatas;
- } else {
- return [];
- }
- }
- async updateDatas(data) {
- const result = {add: [], del: [], update: []};
- try {
- if (data.add) {
- const addResult = await this._addDatas(data.add);
- result.add.push(...addResult.add);
- result.update.push(...addResult.update);
- }
- if (data.update) {
- result.update = await this._updateDatas(data.update);
- }
- if (data.del) {
- const delResult = await this._delDatas(data.del);
- result.del.push(...delResult.del);
- result.update.push(...delResult.update);
- }
- return result;
- } catch (err) {
- if (err.stack) {
- throw err;
- } else {
- result.err = err.toString();
- return result;
- }
- }
- }
- }
- return SubProjPush;
- };
|