| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | 'use strict';/** * 清单设置 数据模型 * @author LanJianRong * @date 2020/6/30 * @version */module.exports = app => {    class MaterialListGcl extends app.BaseService {        /**         * 构造函数         *         * @param {Object} ctx - egg全局变量         * @return {void}         */        constructor(ctx) {            super(ctx);            this.tableName = 'material_list_gcl';        }        async setData(mid, data) {            if (!this.ctx.tender) {                throw '数据错误';            }            const transaction = await this.db.beginTransaction();            try {                const insertArray = [];                for (const d of data) {                    insertArray.push({                        tid: this.ctx.tender.id,                        mid,                        order: d.order,                        gcl_id: d.gcl_id,                        mb_id: d.mb_id,                        quantity: d.quantity,                        expr: d.expr,                        old_quantity: d.quantity,                        old_expr: d.expr,                    });                }                if (insertArray.length > 0) await transaction.insert(this.tableName, insertArray);                await transaction.update(this.ctx.service.material.tableName, { id: mid, is_new: 1 });                await transaction.commit();                return true;            } catch (err) {                console.log(err);                await transaction.rollback();                throw err;            }        }        async insertOrDelGcl(transaction, insertGclList, removeGclList, mid) {            if (insertGclList && insertGclList.length > 0) {                for (const gcl of insertGclList) {                    gcl.tid = this.ctx.tender.id;                    gcl.mid = mid;                }                await transaction.insert(this.tableName, insertGclList);            }            if (removeGclList && removeGclList.length > 0) {                for (const gcl of removeGclList) {                    await transaction.delete(this.tableName, { id: gcl.id });                }            }        }        async setNewOldData(transaction, tid, type = 'new2old') {            if (type === 'new2old') {                const sql = 'UPDATE ?? SET `old_quantity`=`quantity`, `old_expr`=`expr` WHERE tid=?';                const sqlParam = [this.tableName, this.ctx.tender.id];                return await transaction.query(sql, sqlParam);            }            const sql = 'UPDATE ?? SET `quantity`=`old_quantity`, `expr`=`old_expr` WHERE tid=?';            const sqlParam = [this.tableName, this.ctx.tender.id];            return await transaction.query(sql, sqlParam);        }        async setOldFromLast(transaction, tid, order) {            if (order >= 1) {                // 获取上一期的list值                const materialInfo = await this.ctx.service.material.getDataByCondition({ tid, order });                const materialList = await this.ctx.service.materialList.getAllDataByCondition({ where: { mid: materialInfo.id, is_self: 0 } });                const lastMaterialGclList = this._.unionWith(materialList, function(item1, item2) {                    return item1.gcl_id === item2.gcl_id && item1.mb_id === item2.mb_id;                });                const updateArray = [];                for (const lm of lastMaterialGclList) {                    const updateInfo = {                        row: {                            old_quantity: lm.quantity,                            old_expr: lm.expr,                        },                        where: {                            tid: this.ctx.tender.id,                            gcl_id: lm.gcl_id,                            mb_id: lm.mb_id,                        },                    };                    updateArray.push(updateInfo);                }                if (updateArray.length > 0) await transaction.updateRows(this.tableName, updateArray);            }        }    }    return MaterialListGcl;};
 |