|
@@ -23,35 +23,55 @@ module.exports = app => {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 获取截止本期数据
|
|
|
+ * @param {Object} tender - 标段
|
|
|
+ * @param {Object} stage - 本期
|
|
|
+ * @returns {Promise<void>}
|
|
|
+ */
|
|
|
+ async getFinalData(tender, stage) {
|
|
|
+ const sql = 'SELECT * FROM ' + this.tableName + ' As Bills' +
|
|
|
+ ' INNER JOIN ( ' +
|
|
|
+ ' SELECT MAX(`sorder`) As `sorder`, `lid` From ' + this.tableName +
|
|
|
+ ' WHERE tid = ? AND sorder < ?' +
|
|
|
+ ' GROUP BY `lid`' +
|
|
|
+ ' ) As MaxFilter ' +
|
|
|
+ ' ON Bills.sorder = MaxFilter.sorder And Bills.lid = MaxFilter.lid' +
|
|
|
+ ' WHERE Bills.tid = ?';
|
|
|
+ const sqlParam = [tender.id, stage.order, tender.id];
|
|
|
+ return await this.db.query(sql, sqlParam);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 生成本期最终数据
|
|
|
* @param transaction - 所属事务
|
|
|
- * @param {Number} tender - 标段
|
|
|
- * @param {Number}stage - 本期
|
|
|
+ * @param {Object} tender - 标段
|
|
|
+ * @param {Object} stage - 本期
|
|
|
* @returns {Promise<void>}
|
|
|
*/
|
|
|
async generateFinalData(transaction, tender, stage) {
|
|
|
if (!transaction || !tender || !stage) {
|
|
|
throw '数据错误';
|
|
|
}
|
|
|
- let preStage;
|
|
|
if (stage.order > 1) {
|
|
|
- preStage = await this.ctx.stage.getDataByCondition({tid: stage.tid, order: stage.order - 1});
|
|
|
- }
|
|
|
- if (preStage) {
|
|
|
- const sql = 'Insert Into ??(tid, sid, lid, sorder, contract_qty, contract_tp, qc_qty, qc_tp, postil)' +
|
|
|
- ' SELECT b.tid, b.sid, b.lid, ? As `sorder`, b.contract_qty, b.contract_tp, b.qc_qty, b.qc_tp, b.postil' +
|
|
|
- ' FROM ' + this.ctx.service.stageBills.tableName + ' AS b' +
|
|
|
- ' INNER JOIN(' +
|
|
|
- ' SELECT Max(`times`) As `times`, MAX(`order`) As `order`, `lid` FROM ' + this.ctx.service.stageBills.tableName +
|
|
|
- ' WHERE `sid` = ?' +
|
|
|
- ' GROUP By `lid`) As MF' +
|
|
|
- ' ON b.times = MF.times AND b.order = MF.order AND b.lid = MF.lid' +
|
|
|
- ' WHERE b.sid = ?';
|
|
|
- const sqlParam = [this.tableName, stage.order, stage.id, stage.id];
|
|
|
+ const sql = 'Insert Into ??(tid, sid, lid, sorder, contract_qty, contract_tp, qc_qty, qc_tp)' +
|
|
|
+ ' SELECT cur.tid, cur.sid, cur.lid, ? As `sorder`, ' +
|
|
|
+ ' IFNULL(cur.contract_qty, 0) + IFNULL(pre.contract_qty, 0), IFNULL(cur.contract_tp, 0) + IFNULL(pre.contract_tp, 0),' +
|
|
|
+ ' IFNULL(cur.qc_qty, 0) + IFNULL(pre.qc_qty, 0), IFNULL(cur.qc_tp, 0) + IFNULL(pre.qc_tp, 0)' +
|
|
|
+ ' FROM (SELECT b.tid, b.sid, b.lid, b.contract_qty, b.contract_tp, b.qc_qty, b.qc_tp' +
|
|
|
+ ' FROM ' + this.ctx.service.stageBills.tableName + ' AS b' +
|
|
|
+ ' INNER JOIN(' +
|
|
|
+ ' SELECT Max(`times`) As `times`, MAX(`order`) As `order`, `lid` FROM ' + this.ctx.service.stageBills.tableName +
|
|
|
+ ' WHERE `sid` = ?' +
|
|
|
+ ' GROUP By `lid`) As MF' +
|
|
|
+ ' ON b.times = MF.times AND b.order = MF.order AND b.lid = MF.lid' +
|
|
|
+ ' WHERE b.sid = ?) As cur' +
|
|
|
+ ' LEFT JOIN ?? As pre' +
|
|
|
+ ' ON cur.lid = pre.lid And pre.sorder = ?';
|
|
|
+ const sqlParam = [this.tableName, stage.order, stage.id, stage.id, this.tableName, stage.order - 1];
|
|
|
await transaction.query(sql, sqlParam);
|
|
|
} else {
|
|
|
- const sql = 'Insert Into ??(tid, sid, lid, sorder, contract_qty, contract_tp, qc_qty, qc_tp, postil)' +
|
|
|
- ' SELECT b.tid, b.sid, b.lid, ? As `sorder`, b.contract_qty, b.contract_tp, b.qc_qty, b.qc_tp, b.postil' +
|
|
|
+ const sql = 'Insert Into ??(tid, sid, lid, sorder, contract_qty, contract_tp, qc_qty, qc_tp)' +
|
|
|
+ ' SELECT b.tid, b.sid, b.lid, ? As `sorder`, b.contract_qty, b.contract_tp, b.qc_qty, b.qc_tp' +
|
|
|
' FROM ' + this.ctx.service.stageBills.tableName + ' AS b' +
|
|
|
' INNER JOIN(' +
|
|
|
' SELECT Max(`times`) As `times`, MAX(`order`) As `order`, `lid` FROM ' + this.ctx.service.stageBills.tableName +
|