|
@@ -26,194 +26,395 @@ module.exports = app => {
|
|
|
ctx.showProject = true;
|
|
|
}
|
|
|
|
|
|
- async _getTzData(tid, includePos = false) {
|
|
|
- const tender = await this.ctx.service.tender.getTender(tid);
|
|
|
- if (!tender || tender.project_id !== this.ctx.session.sessionProject.id) {
|
|
|
- throw '不存在该标段';
|
|
|
+ async info(ctx) {
|
|
|
+ try {
|
|
|
+ const categoryData = await this.ctx.service.category.getAllCategory(this.ctx.subProject);
|
|
|
+ const renderData = {
|
|
|
+ categoryData,
|
|
|
+ jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.spss.info)
|
|
|
+ };
|
|
|
+ await this.layout('spss/info.ejs', renderData, 'spss/gather_select_modal.ejs');
|
|
|
+ } catch (err) {
|
|
|
+ ctx.helper.log(err);
|
|
|
}
|
|
|
- const bills = await this.ctx.service.ledger.getData(tid);
|
|
|
- const pos = tender.measure_type === measureType.tz.value || includePos
|
|
|
- ? await this.ctx.service.pos.getPosData({tid: tid})
|
|
|
- : [];
|
|
|
-
|
|
|
- return { id: tid, name: tender.name, bills: bills, pos: pos };
|
|
|
- }
|
|
|
-
|
|
|
- async _checkStage(tid, sorder) {
|
|
|
- const stage = await this.service.stage.getDataByCondition({ tid: tid, order: sorder });
|
|
|
- if (!stage) throw '期数据错误';
|
|
|
- await this.service.stage.doCheckStage(stage);
|
|
|
- return stage;
|
|
|
}
|
|
|
|
|
|
- async _getStageData(tid, sorder) {
|
|
|
- const data = await this._getTzData(tid, true);
|
|
|
- const stage = await this._checkStage(tid, sorder);
|
|
|
- const bills = await this.ctx.service.stageBills.getAuditorStageData2(tid, stage.id, stage.curTimes, stage.curOrder);
|
|
|
- const pos = await this.ctx.service.stagePos.getAuditorStageData2(tid, stage.id, stage.curTimes, stage.curOrder);
|
|
|
- data.stage = {
|
|
|
- sid: stage.id, sorder: stage.order, curTimes: stage.curTimes, curOrder: stage.curOrder,
|
|
|
- bills: bills, pos: pos
|
|
|
- };
|
|
|
- return data;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 台账 对比 页面
|
|
|
- *
|
|
|
- * @param {Object} ctx - egg全局变量
|
|
|
- * @return {void}
|
|
|
- */
|
|
|
- async compareTz(ctx) {
|
|
|
+ async gatherLedger(ctx) {
|
|
|
try {
|
|
|
+ const categoryData = await this.ctx.service.category.getAllCategory(this.ctx.subProject);
|
|
|
const renderData = {
|
|
|
- jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.compare.tz)
|
|
|
+ categoryData,
|
|
|
+ jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.spss.gatherLedger)
|
|
|
};
|
|
|
- await this.layout('spss/compare_tz.ejs', renderData, 'spss/compare_tz_modal.ejs');
|
|
|
+ await this.layout('spss/gather_ledger.ejs', renderData, 'spss/gather_select_modal.ejs');
|
|
|
} catch (err) {
|
|
|
ctx.helper.log(err);
|
|
|
}
|
|
|
}
|
|
|
- /**
|
|
|
- * 获取 台账 对比 数据(Ajax)
|
|
|
- * @param ctx
|
|
|
- * @returns {Promise<void>}
|
|
|
- */
|
|
|
- async loadCompareTz(ctx) {
|
|
|
+
|
|
|
+ async gatherStage(ctx) {
|
|
|
try {
|
|
|
- const data = JSON.parse(ctx.request.body.data);
|
|
|
- const responseData = {err: 0, msg: '', data: {}};
|
|
|
-
|
|
|
- // const tender1 = await ctx.service.tender.getTender(data.tid1);
|
|
|
- // responseData.data.tender1 = {
|
|
|
- // name: tender1.name,
|
|
|
- // bills: await ctx.service.ledger.getData(data.tid1),
|
|
|
- // pos: tender1.measure_type === measureType.tz.value
|
|
|
- // ? await ctx.service.pos.getPosData({tid: data.tid1}) : []
|
|
|
- // };
|
|
|
- // const tender2 = await ctx.service.tender.getTender(data.tid2);
|
|
|
- // responseData.data.tender2 = {
|
|
|
- // name: tender2.name,
|
|
|
- // bills: await ctx.service.ledger.getData(data.tid2),
|
|
|
- // pos: tender2.measure_type === measureType.tz.value
|
|
|
- // ? await ctx.service.pos.getPosData({tid: data.tid2}) : []
|
|
|
- // };
|
|
|
- responseData.data.tender1 = await this._getTzData(data.tid1);
|
|
|
- responseData.data.tender2 = await this._getTzData(data.tid2);
|
|
|
- ctx.body = responseData;
|
|
|
+ const categoryData = await this.ctx.service.category.getAllCategory(this.ctx.subProject);
|
|
|
+ const renderData = {
|
|
|
+ categoryData,
|
|
|
+ jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.spss.gatherStage)
|
|
|
+ };
|
|
|
+ await this.layout('spss/gather_stage.ejs', renderData, 'spss/gather_select_modal.ejs');
|
|
|
} catch (err) {
|
|
|
ctx.helper.log(err);
|
|
|
- ctx.body = this.ajaxErrorBody(err, '查询数据错误');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /**
|
|
|
- * 期计量 对比 页面
|
|
|
- *
|
|
|
- * @param {Object} ctx - egg全局变量
|
|
|
- * @return {void}
|
|
|
- */
|
|
|
- async compareStage(ctx) {
|
|
|
+ async gatherStageExtra(ctx) {
|
|
|
try {
|
|
|
+ const categoryData = await this.ctx.service.category.getAllCategory(this.ctx.subProject);
|
|
|
const renderData = {
|
|
|
- jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.compare.stage)
|
|
|
+ categoryData,
|
|
|
+ jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.spss.gatherStageExtra)
|
|
|
};
|
|
|
- await this.layout('spss/compare_tz.ejs', renderData, 'spss/compare_stage_modal.ejs');
|
|
|
+ await this.layout('spss/gather_stage_extra.ejs', renderData, 'spss/gather_select_modal.ejs');
|
|
|
} catch (err) {
|
|
|
ctx.helper.log(err);
|
|
|
}
|
|
|
}
|
|
|
- /**
|
|
|
- * 获取 期计量 对比 数据(Ajax)
|
|
|
- * @param ctx
|
|
|
- * @returns {Promise<void>}
|
|
|
- */
|
|
|
- async loadCompareStage(ctx) {
|
|
|
+
|
|
|
+ async compareLedger(ctx) {
|
|
|
try {
|
|
|
- const data = JSON.parse(ctx.request.body.data);
|
|
|
- const responseData = {err: 0, msg: '', data: {}};
|
|
|
- responseData.data.tender1 = await this._getStageData(data.tid1, data.sorder1);
|
|
|
- responseData.data.tender2 = await this._getStageData(data.tid2, data.sorder2);
|
|
|
- ctx.body = responseData;
|
|
|
+ const categoryData = await this.ctx.service.category.getAllCategory(this.ctx.subProject);
|
|
|
+ const renderData = {
|
|
|
+ categoryData,
|
|
|
+ jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.spss.compareLedger)
|
|
|
+ };
|
|
|
+ await this.layout('spss/compare_ledger.ejs', renderData, 'spss/compare_select_modal.ejs');
|
|
|
} catch (err) {
|
|
|
ctx.helper.log(err);
|
|
|
- ctx.body = this.ajaxErrorBody(err, '查询数据错误');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /**
|
|
|
- * 台账 汇总 页面
|
|
|
- *
|
|
|
- * @param {Object} ctx - egg全局变量
|
|
|
- * @return {void}
|
|
|
- */
|
|
|
- async gatherTz(ctx) {
|
|
|
+ async compareStage(ctx) {
|
|
|
try {
|
|
|
+ const categoryData = await this.ctx.service.category.getAllCategory(this.ctx.subProject);
|
|
|
const renderData = {
|
|
|
- jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.gather.tz)
|
|
|
+ categoryData,
|
|
|
+ jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.spss.compareStage),
|
|
|
};
|
|
|
- await this.layout('spss/compare_tz.ejs', renderData, 'spss/gather_tz_modal.ejs');
|
|
|
+ await this.layout('spss/compare_stage.ejs', renderData, 'spss/compare_select_modal.ejs');
|
|
|
} catch (err) {
|
|
|
ctx.helper.log(err);
|
|
|
}
|
|
|
}
|
|
|
- /**
|
|
|
- * 获取 台账 汇总 数据(Ajax)
|
|
|
- * @param ctx
|
|
|
- * @returns {Promise<void>}
|
|
|
- */
|
|
|
- async loadGatherTz(ctx) {
|
|
|
- try {
|
|
|
- const data = JSON.parse(ctx.request.body.data);
|
|
|
- const responseData = {err: 0, msg: '', data: []};
|
|
|
|
|
|
- for (const t of data.tenders) {
|
|
|
- responseData.data.push(await this._getTzData(t.id));
|
|
|
+ async _loadInfoData(tender) {
|
|
|
+
|
|
|
+ }
|
|
|
+ async _loadLedgerData(tender) {
|
|
|
+ const bills = await this.ctx.service.ledger.getAllDataByCondition({
|
|
|
+ columns: ['id', 'ledger_id', 'ledger_pid', 'level', 'full_path', 'is_leaf', 'order', 'code', 'b_code', 'name', 'unit', 'unit_price', 'quantity', 'total_price'],
|
|
|
+ where: { tender_id: tender.id },
|
|
|
+ });
|
|
|
+ const pos = await this.ctx.service.pos.getAllDataByCondition({
|
|
|
+ columns: ['id', 'lid', 'name', 'quantity'],
|
|
|
+ where: { tid: tender.id },
|
|
|
+ });
|
|
|
+ return [bills, pos];
|
|
|
+ }
|
|
|
+ async _loadDealBillsData(tender) {
|
|
|
+
|
|
|
+ }
|
|
|
+ async _getValidStages(tenderId, sort = 'desc') {
|
|
|
+ const accountId = this.ctx.session.sessionUser.accountId;
|
|
|
+ const stages = await this.ctx.service.stage.getAllDataByCondition({ where: { tid: tenderId }, orders: [['order', sort]] });
|
|
|
+ return stages.filter(s => { return s.status !== status.uncheck || s.user_id === accountId; });
|
|
|
+ }
|
|
|
+ async _filterOrder(tender, order) {
|
|
|
+ const stages = await this._getValidStages(tender.id);
|
|
|
+ return { type: 'stage', stage: this.ctx.helper._.find(stages, { order }) };
|
|
|
+ }
|
|
|
+ async _filterMonth(tender, month) {
|
|
|
+ const stages = await this._getValidStages(tender.id);
|
|
|
+ return { type: 'stage', stage: this.ctx.helper._.find(stages, { s_time: month }) };
|
|
|
+ }
|
|
|
+ async _filterFinal(tender) {
|
|
|
+ const stages = await this._getValidStages(tender.id);
|
|
|
+ return { type: 'stage', stage: stages[0] };
|
|
|
+ }
|
|
|
+ async _filterCheckedFinal(tender) {
|
|
|
+ const stages = await this._getValidStages(tender.id);
|
|
|
+ const checkedStages = stages.filter(x => { return x.status === status.checked; });
|
|
|
+ return { type: 'stage', stage: checkedStages[0] };
|
|
|
+ }
|
|
|
+ async _filterOrderZone(tender, zone) {
|
|
|
+ let [iBegin, iEnd] = zone.split(':');
|
|
|
+ iBegin = this.ctx.helper._.toInteger(iBegin) || 0;
|
|
|
+ iEnd = this.ctx.helper._.toInteger(iEnd) || 0;
|
|
|
+ const stages = await this._getValidStages(tender.id, 'asc'), validStages = [];
|
|
|
+ let preStage, endStage;
|
|
|
+ for (const stage of stages) {
|
|
|
+ if (stage.order < iBegin) {
|
|
|
+ if (!preStage || preStage.order < stage.order) preStage = stage;
|
|
|
+ } else if (stage.order > iEnd) {
|
|
|
+ if (!endStage || endStage.order > stage.order) endStage = stage;
|
|
|
+ } else {
|
|
|
+ validStages.push(stage);
|
|
|
}
|
|
|
- ctx.body = responseData;
|
|
|
- } catch (err) {
|
|
|
- ctx.helper.log(err);
|
|
|
- ctx.body = this.ajaxErrorBody(err, '查询数据错误');
|
|
|
}
|
|
|
+ return { type: 'stages', stages: validStages, preStage, endStage };
|
|
|
}
|
|
|
+ async _filterTimeZone(tender, zone) {
|
|
|
+ const times = zone.split(' - ');
|
|
|
+ if (times.length !== 2) throw '选择的汇总周期无效';
|
|
|
+ const beginTime = moment(times[0], 'YYYY-MM');
|
|
|
+ const endTime = moment(times[1], 'YYYY-MM');
|
|
|
|
|
|
- /**
|
|
|
- * 期计量 汇总 页面
|
|
|
- *
|
|
|
- * @param {Object} ctx - egg全局变量
|
|
|
- * @return {void}
|
|
|
- */
|
|
|
- async gatherStage(ctx) {
|
|
|
- try {
|
|
|
- const renderData = {
|
|
|
- jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.gather.stage)
|
|
|
+ const stages = await this._getValidStages(tender.id, 'asc'), validStages = [];
|
|
|
+ let preStage, endStage;
|
|
|
+ for (const stage of stages) {
|
|
|
+ const sTime = moment(stage.s_time, 'YYYY-MM');
|
|
|
+ if (sTime.isBetween(beginTime, endTime, null, '[]')) {
|
|
|
+ validStages.push(stage);
|
|
|
+ } else if (sTime.isBefore(beginTime)) {
|
|
|
+ if (!preStage || moment(preStage.s_time, 'YYYY-MM').isBefore(sTime)) preStage = stage;
|
|
|
+ } else if (sTime.isAfter(endTime)) {
|
|
|
+ if (!endStage || moment(endStage.s_time, 'YYYY-MM').isAfter(sTime)) endStage = stage;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return { type: 'stages', stages: validStages, preStage, endStage };
|
|
|
+ }
|
|
|
+ async _filterStages(tender, stageInfo) {
|
|
|
+ switch (stageInfo.type) {
|
|
|
+ case 'stage':
|
|
|
+ return await this._filterOrder(tender, stageInfo.stage);
|
|
|
+ case 'month':
|
|
|
+ return await this._filterMonth(tender, stageInfo.month);
|
|
|
+ case 'final':
|
|
|
+ return await this._filterFinal(tender);
|
|
|
+ case 'checked-final':
|
|
|
+ return await this._filterCheckedFinal(tender);
|
|
|
+ case 'zone':
|
|
|
+ return await this._filterTimeZone(tender, stageInfo.zone);
|
|
|
+ case 'stage-zone':
|
|
|
+ return await this._filterOrderZone(tender, stageInfo.stage_zone);
|
|
|
+ default:
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ async _loadStageData(tender, stage) {
|
|
|
+ await this.ctx.service.stage.doCheckStage(stage);
|
|
|
+ const bills = await this.ctx.service.ledger.getAllDataByCondition({
|
|
|
+ columns: ['id', 'ledger_id', 'ledger_pid', 'level', 'full_path', 'is_leaf', 'order', 'code', 'b_code', 'name', 'unit', 'unit_price', 'quantity', 'total_price'],
|
|
|
+ where: { tender_id: tender.id },
|
|
|
+ });
|
|
|
+ const curStage = stage.readOnly
|
|
|
+ ? await this.ctx.service.stageBills.getAuditorStageData2(tender.id, stage.id, stage.curTimes, stage.curOrder)
|
|
|
+ : await this.ctx.service.stageBills.getLastestStageData2(tender.id, stage.id);
|
|
|
+ const preStage = stage.preCheckedStage ? await this.ctx.service.stageBillsFinal.getFinalData(tender, stage.preCheckedStage.order) : [];
|
|
|
+ const bpcStage = await this.ctx.service.stageBillsPc.getAllDataByCondition({ where: { sid: stage.id } });
|
|
|
+ this.ctx.helper.assignRelaData(bills, [
|
|
|
+ { data: curStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: '', relaId: 'lid' },
|
|
|
+ { data: preStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: 'pre_', relaId: 'lid' },
|
|
|
+ { data: bpcStage, fields: ['contract_pc_tp', 'qc_pc_tp', 'pc_tp'], prefix: '', relaId: 'lid' },
|
|
|
+ ]);
|
|
|
+
|
|
|
+ const pos = await this.ctx.service.pos.getAllDataByCondition({
|
|
|
+ columns: ['id', 'lid', 'name', 'quantity'],
|
|
|
+ where: { tid: tender.id },
|
|
|
+ });
|
|
|
+ const curStagePos = stage.readOnly
|
|
|
+ ? await this.ctx.service.stagePos.getAuditorStageData2(tender.id, stage.id, stage.curTimes, stage.curOrder)
|
|
|
+ : await this.ctx.service.stagePos.getLastestStageData2(tender.id, stage.id);
|
|
|
+ const preStagePos = stage.preCheckedStage ? await this.ctx.service.stagePosFinal.getFinalData(tender, stage.preCheckedStage.order) : [];
|
|
|
+ this.ctx.helper.assignRelaData(pos, [
|
|
|
+ { data: curStagePos, fields: ['contract_qty', 'qc_qty'], prefix: '', relaId: 'pid' },
|
|
|
+ { data: preStagePos, fields: ['contract_qty', 'qc_qty'], prefix: 'pre_', relaId: 'pid' },
|
|
|
+ ]);
|
|
|
+ return [bills, pos];
|
|
|
+ }
|
|
|
+ async _loadStagesData(tender, stages, preStage, endStage) {
|
|
|
+ const indexPre = 'id_';
|
|
|
+ const sumAssignRelaData = function (index, rela) {
|
|
|
+ const loadFields = function (datas, fields, prefix, relaId) {
|
|
|
+ for (const d of datas) {
|
|
|
+ const key = indexPre + d[relaId];
|
|
|
+ const m = index[key];
|
|
|
+ if (m) {
|
|
|
+ for (const f of fields) {
|
|
|
+ if (d[f] !== undefined) {
|
|
|
+ m[prefix + f] = helper.add(m[prefix + f], d[f]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
};
|
|
|
- await this.layout('spss/compare_tz.ejs', renderData, 'spss/gather_stage_modal.ejs');
|
|
|
- } catch (err) {
|
|
|
- ctx.helper.log(err);
|
|
|
+ for (const r of rela) {
|
|
|
+ loadFields(r.data, r.fields, r.prefix, r.relaId);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ const bills = await this.ctx.service.ledger.getAllDataByCondition({
|
|
|
+ columns: ['id', 'ledger_id', 'ledger_pid', 'level', 'full_path', 'is_leaf', 'order', 'code', 'b_code', 'name', 'unit', 'unit_price', 'quantity', 'total_price'],
|
|
|
+ where: { tender_id: tender.id },
|
|
|
+ });
|
|
|
+ const pos = await this.ctx.service.pos.getAllDataByCondition({
|
|
|
+ columns: ['id', 'lid', 'name', 'quantity'],
|
|
|
+ where: { tid: tender.id },
|
|
|
+ });
|
|
|
+
|
|
|
+ let billsIndexData = {};
|
|
|
+ for (const bd of billsData) {
|
|
|
+ billsIndexData[indexPre + bd.id] = bd;
|
|
|
+ }
|
|
|
+ let posIndexData = {};
|
|
|
+ for (const p of posData) {
|
|
|
+ posIndexData[indexPre + p.id] = p;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (preStage) {
|
|
|
+ const endStage = await this.ctx.service.stageBillsFinal.getFinalData(tender, preStage.order);
|
|
|
+ sumAssignRelaData(billsIndexData, [
|
|
|
+ { data: endStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: 'pre_', relaId: 'lid'},
|
|
|
+ ]);
|
|
|
+ const endStagePos = await this.ctx.service.stagePosFinal.getFinalData(tender, preStage.order);
|
|
|
+ sumAssignRelaData(posIndexData, [
|
|
|
+ {data: endStagePos, fields: ['contract_qty', 'qc_qty'], prefix: 'pre_', relaId: 'lid'},
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (const stage of stages) {
|
|
|
+ await this.ctx.service.stage.doCheckStage(stage);
|
|
|
+ const curStage = stage.readOnly
|
|
|
+ ? await this.ctx.service.stageBills.getAuditorStageData2(tender.id, stage.id, stage.curTimes, stage.curOrder)
|
|
|
+ : await this.ctx.service.stageBills.getLastestStageData2(tender.id, stage.id);
|
|
|
+ const bpcStage = await this.ctx.service.stageBillsPc.getAllDataByCondition({ where: { sid: stage.id } });
|
|
|
+ sumAssignRelaData(billsIndexData, [
|
|
|
+ {data: curStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: '', relaId: 'lid'},
|
|
|
+ { data: bpcStage, fields: ['contract_pc_tp', 'qc_pc_tp', 'pc_tp'], prefix: '', relaId: 'lid' },
|
|
|
+ ]);
|
|
|
+
|
|
|
+ const curStagePos = stage.readOnly
|
|
|
+ ? await this.ctx.service.stagePos.getAuditorStageData2(tender.id, stage.id, stage.curTimes, stage.curOrder)
|
|
|
+ : await this.ctx.service.stagePos.getLastestStageData2(tender.id, stage.id);
|
|
|
+ sumAssignRelaData(posIndexData, [
|
|
|
+ {data: curStagePos, fields: ['contract_qty', 'qc_qty'], prefix: '', relaId: 'pid'},
|
|
|
+ ]);
|
|
|
}
|
|
|
+ return [bills, pos];
|
|
|
}
|
|
|
- /**
|
|
|
- * 获取 期计量 汇总 数据(Ajax)
|
|
|
- * @param ctx
|
|
|
- * @returns {Promise<void>}
|
|
|
- */
|
|
|
- async loadGatherStage(ctx) {
|
|
|
+ async _loadStageLedgerData(tender, filter) {
|
|
|
+ return filter.type === 'stage'
|
|
|
+ ? await this._loadStageData(tender, filter.stage)
|
|
|
+ : await this._loadStagesData(tender, filter.stages, filter.preStage, filter.endStage);
|
|
|
+ }
|
|
|
+ async _loadJgclData(tender, stages) {
|
|
|
+
|
|
|
+ };
|
|
|
+ async _loadYjclData(tender, stages) {
|
|
|
+
|
|
|
+ };
|
|
|
+ async _loadBonusData(tender, stages) {
|
|
|
+
|
|
|
+ };
|
|
|
+ async _loadSafeProdData(tender, stages) {
|
|
|
+
|
|
|
+ };
|
|
|
+ async _loadTempLandData(tender, stages) {
|
|
|
+
|
|
|
+ };
|
|
|
+ async _loadOtherData(tender, stages) {
|
|
|
+
|
|
|
+ };
|
|
|
+ async _loadTenderData(tid, filter, stageInfo) {
|
|
|
+ this.ctx.tender = null;
|
|
|
+ const tender = await this.ctx.service.tender.checkTender(tid);
|
|
|
+ const result = { id: tender.id, name: tender.name };
|
|
|
+ let stageFilter = null;
|
|
|
+ for (const f of filter) {
|
|
|
+ switch (f) {
|
|
|
+ case 'info':
|
|
|
+ result.info = await this._loadInfoData(tender);
|
|
|
+ break;
|
|
|
+ case 'ledger':
|
|
|
+ if (filter.indexOf('stage') < 0) [result.bills, result.pos] = await this._loadLedgerData(tender);
|
|
|
+ break;
|
|
|
+ case 'stage':
|
|
|
+ if (!stageFilter) stageFilter = await this._filterStages(tender, stageInfo);
|
|
|
+ [result.bills, result.pos, result.stages] = await this._loadStageLedgerData(tender, stageFilter);
|
|
|
+ break;
|
|
|
+ case 'jgcl':
|
|
|
+ if (!stageFilter) stageFilter = await this._filterStages(tender, stageInfo);
|
|
|
+ result.jgcl = await this._loadJgclData(tender, stageFilter);
|
|
|
+ break;
|
|
|
+ case 'yjcl':
|
|
|
+ if (!stageFilter) stageFilter = await this._filterStages(tender, stageInfo);
|
|
|
+ result.jgcl = await this._loadYjclData(tender, stageFilter);
|
|
|
+ break;
|
|
|
+ case 'bonus':
|
|
|
+ if (!stageFilter) stageFilter = await this._filterStages(tender, stageInfo);
|
|
|
+ result.jgcl = await this._loadBonusData(tender, stageFilter);
|
|
|
+ break;
|
|
|
+ case 'safeProd':
|
|
|
+ if (!stageFilter) stageFilter = await this._filterStages(tender, stageInfo);
|
|
|
+ result.jgcl = await this._loadSafeProdData(tender, stageFilter);
|
|
|
+ break;
|
|
|
+ case 'tempLand':
|
|
|
+ if (!stageFilter) stageFilter = await this._filterStages(tender, stageInfo);
|
|
|
+ result.jgcl = await this._loadTempLandData(tender, stageFilter);
|
|
|
+ break;
|
|
|
+ case 'other':
|
|
|
+ if (!stageFilter) stageFilter = await this._filterStages(tender, stageInfo);
|
|
|
+ result.jgcl = await this._loadOtherData(tender, stageFilter);
|
|
|
+ break;
|
|
|
+ default: throw '查询的数据类型未定义';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ async load(ctx) {
|
|
|
try {
|
|
|
const data = JSON.parse(ctx.request.body.data);
|
|
|
- const responseData = {err: 0, msg: '', data: []};
|
|
|
-
|
|
|
- for (const t of data.tenders) {
|
|
|
- responseData.data.push(await this._getStageData(t.id, t.sorder));
|
|
|
+ const filter = data.filter.split(',');
|
|
|
+ const result = [];
|
|
|
+ for (const t of data.tender) {
|
|
|
+ result.push(await this._loadTenderData(t.tid, filter, t.stageInfo));
|
|
|
}
|
|
|
- ctx.body = responseData;
|
|
|
+ ctx.body = { err: 0, msg: '', data: result };
|
|
|
} catch (err) {
|
|
|
- ctx.helper.log(err);
|
|
|
- ctx.body = this.ajaxErrorBody(err, '查询数据错误');
|
|
|
+ ctx.log(err);
|
|
|
+ ctx.ajaxErrorBody(err, '加载数据错误');
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ async _getTzData(tid, includePos = false) {
|
|
|
+ const tender = await this.ctx.service.tender.getTender(tid);
|
|
|
+ if (!tender || tender.project_id !== this.ctx.session.sessionProject.id) {
|
|
|
+ throw '不存在该标段';
|
|
|
+ }
|
|
|
+ const bills = await this.ctx.service.ledger.getData(tid);
|
|
|
+ const pos = tender.measure_type === measureType.tz.value || includePos
|
|
|
+ ? await this.ctx.service.pos.getPosData({tid: tid})
|
|
|
+ : [];
|
|
|
+
|
|
|
+ return { id: tid, name: tender.name, bills: bills, pos: pos };
|
|
|
+ }
|
|
|
+
|
|
|
+ async _checkStage(tid, sorder) {
|
|
|
+ const stage = await this.service.stage.getDataByCondition({ tid: tid, order: sorder });
|
|
|
+ if (!stage) throw '期数据错误';
|
|
|
+ await this.service.stage.doCheckStage(stage);
|
|
|
+ return stage;
|
|
|
+ }
|
|
|
+
|
|
|
+ async _getStageData(tid, sorder) {
|
|
|
+ const data = await this._getTzData(tid, true);
|
|
|
+ const stage = await this._checkStage(tid, sorder);
|
|
|
+ const bills = await this.ctx.service.stageBills.getAuditorStageData2(tid, stage.id, stage.curTimes, stage.curOrder);
|
|
|
+ const pos = await this.ctx.service.stagePos.getAuditorStageData2(tid, stage.id, stage.curTimes, stage.curOrder);
|
|
|
+ data.stage = {
|
|
|
+ sid: stage.id, sorder: stage.order, curTimes: stage.curTimes, curOrder: stage.curOrder,
|
|
|
+ bills: bills, pos: pos
|
|
|
+ };
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 检测台账 页面
|
|
|
*
|