'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; };