|
|
@@ -57,41 +57,61 @@ module.exports = app => {
|
|
|
});
|
|
|
return result;
|
|
|
}
|
|
|
- async getEndData(stage) {
|
|
|
- const commonDetailSql = 'SELECT cost_id, id AS source_id, code, name, tax, pay_tp, cut_tp, yf_tp, sf_tp, yf_excl_tax_tp, sf_excl_tax_tp ' +
|
|
|
- ` FROM ${this.tableName} WHERE tender_id = ? AND stage_order <= ? AND is_deal = 0 ORDER BY code ASC`;
|
|
|
- const commonDetail = await this.db.query(commonDetailSql, [stage.tid, stage.stage_order]);
|
|
|
- // 以下sql只有在mysqlV8.0以后才可使用
|
|
|
+ async getEndDataByStageId(tenderId, stageIds) {
|
|
|
+ if (!stageIds || stageIds.length === 0) return [];
|
|
|
+
|
|
|
+ const idSql = stageIds.map(x => { return `'${x}'`; }).join(', ');
|
|
|
+ const commonDetailSql =
|
|
|
+ 'SELECT sd.cost_id, sd.code, sd.name, sd.tax, sd.is_deal, sd.id AS source_cid, sd.pay_tp, sd.cut_tp, sd.yf_tp, sd.sf_tp, sd.yf_excl_tax_tp, sd.sf_excl_tax_tp, sbd.in_tp, sbd.in_excl_tax_tp ' +
|
|
|
+ ` FROM ${this.ctx.service.costStageDetail.tableName} sd LEFT JOIN ${this.ctx.service.costStageBookDetail.tableName} sbd ON sbd.detail_id = sd.id` +
|
|
|
+ ` WHERE sd.tender_id = ? AND sd.stage_id in (${idSql}) AND sd.is_deal = 0 ORDER BY sd.code ASC`;
|
|
|
+ const commonDetail = await this.db.query(commonDetailSql, [tenderId]);
|
|
|
+ // 以下sql需要8.0的mysql才支持,暂不使用
|
|
|
// const dealDetailSql =
|
|
|
// 'SELECT * FROM ( ' +
|
|
|
- // ' SELECT sd.cost_id, sd.code, sd.name, sd.tax, source_cid AS source_id,' +
|
|
|
+ // ' SELECT sd.cost_id, sd.code, sd.name, sd.tax, sd.source_cid AS source_id,' +
|
|
|
// ' sum(sd.pay_tp) OVER (PARTITION BY sd.source_cid) AS pay_tp,' +
|
|
|
// ' sum(sd.cut_tp) OVER (PARTITION BY sd.source_cid) AS cut_tp,' +
|
|
|
// ' sum(sd.yf_tp) OVER (PARTITION BY sd.source_cid) AS yf_tp,' +
|
|
|
// ' sum(sd.sf_tp) OVER (PARTITION BY sd.source_cid) AS sf_tp,' +
|
|
|
// ' sum(sd.yf_excl_tax_tp) OVER (PARTITION BY sd.source_cid) AS yf_excl_tax_tp,' +
|
|
|
// ' sum(sd.sf_excl_tax_tp) OVER (PARTITION BY sd.source_cid) AS sf_excl_tax_tp,' +
|
|
|
+ // ' sum(sbd.in_tp) OVER (PARTITION BY sd.source_cid) AS in_tp,' +
|
|
|
+ // ' sum(sbd.in_excl_tax_tp) OVER (PARTITION BY sd.source_cid) AS in_excl_tax_tp,' +
|
|
|
// ' ROW_NUMBER() OVER (PATITION BY sd.source_cid ORDER BY create_time DESC) AS rn' +
|
|
|
- // ` FROM ${this.tableName} sd LEFT JOIN ${this.ctx.service.costStage.tableName} cs ON sd.stage_id = cs.id` +
|
|
|
+ // ` FROM ${this.ctx.service.costStageDetail.tableName} sd LEFT JOIN ${this.tableName} sbd ON sbd.detail_id = sd.id` +
|
|
|
+ // ` LEFT JOIN ${this.ctx.service.costStage.tableName} cs ON sd.stage_id = cs.id` +
|
|
|
// ' WHERE cs.tid = ? AND cs.stage_order <= ? AND sd.is_deal = 1' +
|
|
|
// ' ) t WHERE t.rn = 1';
|
|
|
const dealDetailSql =
|
|
|
- 'SELECT a.code, a.name, a.tax, a.party_b, b.* FROM (' +
|
|
|
- ' SELECT sd.cost_id, sd.code, sd.name, sd.party_b, sd.tax, sd.source_cid' +
|
|
|
+ 'SELECT a.code, a.name, a.tax, a.is_deaL, a.party_b, b.* FROM (' +
|
|
|
+ ' SELECT sd.cost_id, sd.code, sd.name, sd.party_b, sd.tax, sd.is_deal, sd.source_cid' +
|
|
|
' FROM (' +
|
|
|
- ' SELECT source_cid, max(add_time) AS latest_time FROM zh_cost_stage_detail WHERE tender_id = ? AND stage_order <= ? AND is_deal = 1 GROUP BY cost_id, source_cid' +
|
|
|
- ' ) lastTable LEFT JOIN zh_cost_stage_detail sd ON lastTable.latest_time = sd.add_time AND sd.cost_id = lastTable.cost_id AND sd.source_cid = lastTable.source_cid' +
|
|
|
+ ` SELECT cost_id, source_cid, max(add_time) AS latest_time FROM ${this.ctx.service.costStageDetail.tableName} ` +
|
|
|
+ ` WHERE tender_id = ? AND stage_id in(${idSql}) AND is_deal = 1 GROUP BY cost_id, source_cid` +
|
|
|
+ ` ) lastTable LEFT JOIN ${this.ctx.service.costStageDetail.tableName} sd ON lastTable.latest_time = sd.add_time AND sd.cost_id = lastTable.cost_id AND sd.source_cid = lastTable.source_cid` +
|
|
|
' ) a' +
|
|
|
' LEFT JOIN ( ' +
|
|
|
- ' SELECT cost_id, source_cid, sum(pay_tp) AS pay_tp, sum(cut_tp) AS cut_tp, ' +
|
|
|
- ' sum(yf_tp) AS yf_tp, sum(sf_tp) AS sf_tp, ' +
|
|
|
- ' sum(yf_excl_tax_tp) AS yf_excl_tax_tp, sum(sf_excl_tax_tp) AS sf_excl_tax_tp' +
|
|
|
- ' FROM zh_cost_stage_detail WHERE tender_id = ? AND stage_order <= ? AND is_deal = 1 GROUP BY cost_id, source_cid' +
|
|
|
- ') b ON a.cost_id = b.cost_id AND a.source_cid = b.source_cid' +
|
|
|
+ ' SELECT csd.cost_id, csd.source_cid, sum(csd.pay_tp) AS pay_tp, sum(csd.cut_tp) AS cut_tp, ' +
|
|
|
+ ' sum(csd.yf_tp) AS yf_tp, sum(csd.sf_tp) AS sf_tp, ' +
|
|
|
+ ' sum(csd.yf_excl_tax_tp) AS yf_excl_tax_tp, sum(csd.sf_excl_tax_tp) AS sf_excl_tax_tp,' +
|
|
|
+ ' sum(csbd.in_tp) AS in_tp, sum(csbd.in_excl_tax_tp) As in_excl_tax_tp' +
|
|
|
+ ` FROM ${this.ctx.service.costStageDetail.tableName} csd LEFT JOIN ${this.ctx.service.costStageBookDetail.tableName} csbd ON csd.id = csbd.detail_id` +
|
|
|
+ ` WHERE csd.tender_id = ? AND csd.stage_id in (${idSql}) AND csd.is_deal = 1 GROUP BY csd.cost_id, csd.source_cid` +
|
|
|
+ ' ) b ON a.cost_id = b.cost_id AND a.source_cid = b.source_cid' +
|
|
|
' ORDER BY a.code ASC';
|
|
|
- const dealDetail = await this.db.query(dealDetailSql, [stage.tid, stage.stage_order, stage.tid, stage.stage_order]);
|
|
|
+ const dealDetail = await this.db.query(dealDetailSql, [tenderId, tenderId]);
|
|
|
return [...commonDetail, ...dealDetail];
|
|
|
}
|
|
|
+ async getEndData(stage) {
|
|
|
+ if (stage) return [];
|
|
|
+
|
|
|
+ const allStages = await this.db.query(`SELECT id FROM ${this.ctx.service.costStage.tableName} WHERE tid = ? AND stage_type = 'ledger' AND stage_order <= ?`, [stage.tid, stage.stage_order]);
|
|
|
+ const relaStageIds = allStages.map(x => {
|
|
|
+ return x.id;
|
|
|
+ });
|
|
|
+ await this.getEndDataByStageId(stage.tid, relaStageIds);
|
|
|
+ }
|
|
|
|
|
|
async _getLedgerUpdateData(data, ledger_id, details) {
|
|
|
const detailDatas = details || await this.getAllDataByCondition({ columns: ['id', 'ledger_id', ...costFields.curFields], where: { ledger_id, stage_id: this.ctx.costStage.id } });
|