| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | 'use strict';module.exports = app => {    class ScheduleMonth extends app.BaseService {        constructor(ctx) {            super(ctx);            this.tableName = 'schedule_month';        }        async getLastPlanMonth() {            const sql = 'SELECT `yearmonth` FROM ?? WHERE `tid` = ? ORDER BY `yearmonth` DESC Limit 0,1';            const sqlParam = [this.tableName, this.ctx.tender.id];            return await this.db.query(sql, sqlParam);        }        async add(data) {            const transaction = await this.db.beginTransaction();            try {                const insertData = [];                for (const m of data) {                    insertData.push({ tid: this.ctx.tender.id, yearmonth: m });                }                if (insertData.length > 0) await transaction.insert(this.tableName, insertData);                await transaction.commit();                return true;            } catch (err) {                await transaction.rollback();                throw err;            }        }        async del(data) {            const transaction = await this.db.beginTransaction();            try {                for (const m of data) {                    const delData = { tid: this.ctx.tender.id, yearmonth: m };                    await transaction.delete(this.tableName, delData);                    await transaction.delete(this.ctx.service.scheduleLedgerMonth.tableName, delData);                }                // 重新计算总 计划金额和计划工程量                await this.calcPlan(transaction, this.ctx.tender.id);                await transaction.commit();                return true;            } catch (err) {                await transaction.rollback();                throw err;            }        }        async calcPlan(transaction, tid) {            const sql = 'SELECT SUM(`plan_gcl`) as total_plan_gcl, SUM(`plan_tp`) as total_plan_tp FROM ?? WHERE tid = ?';            const sqlParam = [this.tableName, tid];            const result = await transaction.queryOne(sql, sqlParam);            const updateData = {                plan_gcl: result.total_plan_gcl,                plan_tp: result.total_plan_tp,            };            const option = {                where: {                    tid,                },            };            return await transaction.update(this.ctx.service.schedule.tableName, updateData, option);        }        async calcSj(transaction, tid) {            const sql = 'SELECT SUM(`sj_gcl`) as total_sj_gcl, SUM(`sj_tp`) as total_sj_tp FROM ?? WHERE tid = ?';            const sqlParam = [this.tableName, tid];            const result = await transaction.queryOne(sql, sqlParam);            const updateData = {                sj_gcl: result.total_sj_gcl,                sj_tp: result.total_sj_tp,            };            const option = {                where: {                    tid,                },            };            return await transaction.update(this.ctx.service.schedule.tableName, updateData, option);        }        async addStageUsed(data) {            const updateData = {                id: data.id,                stage_gcl_used: 1,            };            return await this.db.update(this.tableName, updateData);        }        async delStageUsed(data) {            const transaction = await this.db.beginTransaction();            try {                const updateDatas = [];                const updateLmDatas = [];                for (const m of data) {                    updateDatas.push({ row: { stage_gcl_used: 0, sj_gcl: null, sj_tp: null }, where: { yearmonth: m, tid: this.ctx.tender.id } });                    updateLmDatas.push({ row: { sj_gcl: null, sj_tp: null }, where: { yearmonth: m, tid: this.ctx.tender.id } });                }                if (updateDatas.length > 0) await transaction.updateRows(this.tableName, updateDatas);                if (updateLmDatas.length > 0) await transaction.updateRows(this.ctx.service.scheduleLedgerMonth.tableName, updateLmDatas);                // 重新计算总 计划金额和计划工程量                await this.calcSj(transaction, this.ctx.tender.id);                await transaction.commit();                return true;            } catch (err) {                await transaction.rollback();                throw err;            }        }    }    return ScheduleMonth;};
 |