|
@@ -210,6 +210,35 @@ module.exports = app => {
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
+ async _getTimeZoneStages(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');
|
|
|
+
|
|
|
+ const stages = await this._getValidStages(tender.id), validStages = [];
|
|
|
+ for (const stage of stages) {
|
|
|
+ const sTime = moment(stage.s_time, 'YYYY-MM');
|
|
|
+ if (sTime.isBetween(beginTime, endTime, null, '[]')) {
|
|
|
+ validStages.push(stage);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return validStages;
|
|
|
+ }
|
|
|
+
|
|
|
+ async _getOrderZoneStages (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), validStages = [];
|
|
|
+ for (const stage of stages) {
|
|
|
+ if (stage.order < iBegin || stage.order > iEnd) continue;
|
|
|
+
|
|
|
+ validStages.push(stage);
|
|
|
+ }
|
|
|
+ return validStages;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 台账数据
|
|
|
*/
|
|
@@ -278,15 +307,10 @@ module.exports = app => {
|
|
|
|
|
|
}
|
|
|
|
|
|
- async _gatherMonthData(sTender, completeData, month, hasPre) {
|
|
|
- const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
- const stages = await this._getValidStages(tender.id);
|
|
|
- const stage = this.ctx.helper._.find(stages, {s_time: month});
|
|
|
- await this._gatherStageData(completeData, tender, stage, hasPre);
|
|
|
- }
|
|
|
-
|
|
|
- async _gatherZoneData(sTender, completeData, zone) {
|
|
|
+ async _gatherStagesData(completeData, tender, stages) {
|
|
|
const helper = this.ctx.helper;
|
|
|
+ completeData.id = tender.id;
|
|
|
+ completeData.name = tender.name;
|
|
|
/**
|
|
|
* 汇总并合并 相关数据
|
|
|
* @param {Array} index - 主数据
|
|
@@ -310,7 +334,6 @@ module.exports = app => {
|
|
|
loadFields(r.data, r.fields, r.prefix, r.relaId);
|
|
|
}
|
|
|
};
|
|
|
-
|
|
|
const billsTree = new Ledger.billsTree(this.ctx, {
|
|
|
id: 'ledger_id',
|
|
|
pid: 'ledger_pid',
|
|
@@ -327,9 +350,6 @@ module.exports = app => {
|
|
|
node.gather_tp = helper.add(node.contract_tp, node.qc_tp);
|
|
|
}
|
|
|
});
|
|
|
- const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
- completeData.id = tender.id;
|
|
|
- completeData.name = tender.name;
|
|
|
const billsData = await this.ctx.service.ledger.getData(tender.id);
|
|
|
|
|
|
const dgnData = await this.ctx.service.stageBillsDgn.getDgnData(tender.id);
|
|
@@ -343,30 +363,22 @@ module.exports = app => {
|
|
|
billsIndexData[indexPre + bd.id] = bd;
|
|
|
}
|
|
|
|
|
|
- const times = zone.split(' - ');
|
|
|
- if (times.length !== 2) throw '选择的汇总周期无效';
|
|
|
- const beginTime = moment(times[0], 'YYYY-MM');
|
|
|
- const endTime = moment(times[1], 'YYYY-MM');
|
|
|
-
|
|
|
- const stages = await this._getValidStages(tender.id);
|
|
|
for (const stage of stages) {
|
|
|
- const sTime = moment(stage.s_time, 'YYYY-MM');
|
|
|
- if (sTime.isBetween(beginTime, endTime, null, '[]')) {
|
|
|
- await this.ctx.service.stage.doCheckStage(stage);
|
|
|
- if (stage.readOnly) {
|
|
|
- const curStage = await this.ctx.service.stageBills.getAuditorStageData(tender.id,
|
|
|
- stage.id, stage.curTimes, stage.curOrder);
|
|
|
- sumAssignRelaData(billsIndexData, [
|
|
|
- {data: curStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: '', relaId: 'lid'}
|
|
|
- ]);
|
|
|
- } else {
|
|
|
- const curStage = await this.ctx.service.stageBills.getLastestStageData(tender.id, stage.id);
|
|
|
- sumAssignRelaData(billsIndexData, [
|
|
|
- {data: curStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: '', relaId: 'lid'}
|
|
|
- ]);
|
|
|
- }
|
|
|
+ await this.ctx.service.stage.doCheckStage(stage);
|
|
|
+ if (stage.readOnly) {
|
|
|
+ const curStage = await this.ctx.service.stageBills.getAuditorStageData(tender.id,
|
|
|
+ stage.id, stage.curTimes, stage.curOrder);
|
|
|
+ sumAssignRelaData(billsIndexData, [
|
|
|
+ {data: curStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: '', relaId: 'lid'}
|
|
|
+ ]);
|
|
|
+ } else {
|
|
|
+ const curStage = await this.ctx.service.stageBills.getLastestStageData(tender.id, stage.id);
|
|
|
+ sumAssignRelaData(billsIndexData, [
|
|
|
+ {data: curStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: '', relaId: 'lid'}
|
|
|
+ ]);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
billsTree.loadDatas(billsData);
|
|
|
billsTree.calculateAll();
|
|
|
this.resultTree.loadGatherTree(billsTree, function (gatherNode, sourceNode) {
|
|
@@ -374,6 +386,32 @@ module.exports = app => {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ async _gatherMonthData(sTender, completeData, month, hasPre) {
|
|
|
+ const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
+ const stages = await this._getValidStages(tender.id);
|
|
|
+ const stage = this.ctx.helper._.find(stages, {s_time: month});
|
|
|
+ await this._gatherStageData(completeData, tender, stage, hasPre);
|
|
|
+ }
|
|
|
+
|
|
|
+ async _gatherIndexData(sTender, completeData, index, hasPre) {
|
|
|
+ const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
+ const stages = await this._getValidStages(tender.id);
|
|
|
+ const stage = this.ctx.helper._.find(stages, {order: index});
|
|
|
+ await this._gatherStageData(completeData, tender, stage, hasPre);
|
|
|
+ }
|
|
|
+
|
|
|
+ async _gatherZoneData(sTender, completeData, zone) {
|
|
|
+ const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
+ const stages = await this._getTimeZoneStages(tender, zone);
|
|
|
+ await this._gatherStagesData(completeData, tender, stages);
|
|
|
+ }
|
|
|
+
|
|
|
+ async _gatherIndexZoneData(sTender, completeData, stageZone) {
|
|
|
+ const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
+ const stages = await this._getOrderZoneStages(tender, stageZone);
|
|
|
+ await this._gatherStagesData(completeData, tender, stages);
|
|
|
+ }
|
|
|
+
|
|
|
async _gatherFinalData(sTender, completeData, hasPre) {
|
|
|
const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
const stages = await this._getValidStages(tender.id);
|
|
@@ -458,6 +496,12 @@ module.exports = app => {
|
|
|
case 'ledger':
|
|
|
await this._gatherLedgerData(tender, completeData);
|
|
|
break;
|
|
|
+ case 'stage':
|
|
|
+ await this._gatherIndexData(tender, completeData, gsCustom.stage, gsSetting.hasPre);
|
|
|
+ break;
|
|
|
+ case 'stage-zone':
|
|
|
+ await this._gatherIndexZoneData(tender, completeData, gsCustom.stage_zone);
|
|
|
+ break;
|
|
|
}
|
|
|
commonIndex++;
|
|
|
} else {
|
|
@@ -522,6 +566,20 @@ module.exports = app => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ async _getStagesTenderInfo(stages, info) {
|
|
|
+ const helper = this.ctx.helper;
|
|
|
+ for (const stage of stages) {
|
|
|
+ await this.ctx.service.stage.doCheckStage(stage);
|
|
|
+ await this.ctx.service.stage.checkStageGatherData(stage);
|
|
|
+
|
|
|
+ info.contract_tp = helper.add(info.contract_tp, stage.contract_tp);
|
|
|
+ info.qc_tp = helper.add(info.qc_tp, stage.qc_tp);
|
|
|
+
|
|
|
+ info.yf_tp = helper.add(info.yf_tp, stage.yf_tp);
|
|
|
+ }
|
|
|
+ info.gather_tp = helper.add(info.contract_tp, info.qc_tp);
|
|
|
+ }
|
|
|
+
|
|
|
async _gatherMonthTenderInfo(sTender, index, month, hasPre) {
|
|
|
const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
const info = await this._getBaseTenderInfo(tender);
|
|
@@ -531,31 +589,28 @@ module.exports = app => {
|
|
|
this.resultTenderInfo.push(info);
|
|
|
}
|
|
|
|
|
|
- async _gatherZoneTenderInfo(sTender, index, zone) {
|
|
|
- const helper = this.ctx.helper;
|
|
|
+ async _gatherOrderTenderInfo(sTender, index, order, hasPre) {
|
|
|
const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
const info = await this._getBaseTenderInfo(tender);
|
|
|
+ const stages = await this._getValidStages(tender.id);
|
|
|
+ const stage = this.ctx.helper._.find(stages, {order: order});
|
|
|
+ await this._getStageTenderInfo(stage, info);
|
|
|
+ this.resultTenderInfo.push(info);
|
|
|
+ }
|
|
|
|
|
|
- const times = zone.split(' - ');
|
|
|
- if (times.length !== 2) throw '选择的汇总周期无效';
|
|
|
- const beginTime = moment(times[0], 'YYYY-MM');
|
|
|
- const endTime = moment(times[1], 'YYYY-MM');
|
|
|
-
|
|
|
- const stages = await this._getValidStages(tender.id, true);
|
|
|
- for (const stage of stages) {
|
|
|
- const sTime = moment(stage.s_time, 'YYYY-MM');
|
|
|
- if (sTime.isBetween(beginTime, endTime, null, '[]')) {
|
|
|
- await this.ctx.service.stage.doCheckStage(stage);
|
|
|
- await this.ctx.service.stage.checkStageGatherData(stage);
|
|
|
-
|
|
|
- info.contract_tp = helper.add(info.contract_tp, stage.contract_tp);
|
|
|
- info.qc_tp = helper.add(info.qc_tp, stage.qc_tp);
|
|
|
-
|
|
|
- info.yf_tp = helper.add(info.yf_tp, stage.yf_tp);
|
|
|
- }
|
|
|
- }
|
|
|
- info.gather_tp = helper.add(info.contract_tp, info.qc_tp);
|
|
|
+ async _gatherZoneTenderInfo(sTender, index, zone) {
|
|
|
+ const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
+ const info = await this._getBaseTenderInfo(tender);
|
|
|
+ const stages = await this._getTimeZoneStages(tender, zone);
|
|
|
+ await this._getStagesTenderInfo(stages, info);
|
|
|
+ this.resultTenderInfo.push(info);
|
|
|
+ }
|
|
|
|
|
|
+ async _gatherOrderZoneTenderInfo(sTender, index, stageZone) {
|
|
|
+ const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
+ const info = await this._getBaseTenderInfo(tender);
|
|
|
+ const stages = await this._getOrderZoneStages(tender, stageZone);
|
|
|
+ await this._getStagesTenderInfo(stages, info);
|
|
|
this.resultTenderInfo.push(info);
|
|
|
}
|
|
|
|
|
@@ -615,6 +670,12 @@ module.exports = app => {
|
|
|
case 'ledger':
|
|
|
await this._gatherLedgerTenderInfo(tender, commonIndex);
|
|
|
break;
|
|
|
+ case 'stage':
|
|
|
+ await this._gatherOrderTenderInfo(tender, commonIndex, gsCustom.stage, gsSetting.hasPre);
|
|
|
+ break;
|
|
|
+ case 'stage-zone':
|
|
|
+ await this._gatherOrderZoneTenderInfo(tender, commonIndex, gsCustom.stage_zone);
|
|
|
+ break;
|
|
|
}
|
|
|
commonIndex++;
|
|
|
} else {
|
|
@@ -685,6 +746,29 @@ module.exports = app => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ async _gatherStagesPay(completeData, tender, stages) {
|
|
|
+ const helper = this.ctx.helper;
|
|
|
+ completeData.id = tender.id;
|
|
|
+ completeData.name = tender.name;
|
|
|
+
|
|
|
+ for (const stage of stages) {
|
|
|
+ await this.ctx.service.stage.doCheckStage(stage);
|
|
|
+
|
|
|
+ const dealPay = await this.ctx.service.stagePay.getStagePays(stage);
|
|
|
+ await this._checkStagePayCalc(tender, stage, dealPay);
|
|
|
+ for (const dp of dealPay) {
|
|
|
+ dp.end_tp = helper.add(dp.pre_tp, dp.tp);
|
|
|
+ this._gatherPayRecord(dp, function (gatherData, sourceData) {
|
|
|
+ gatherData[completeData.prefix + 'id'] = tender.id;
|
|
|
+ gatherData[completeData.prefix + 'name'] = tender.name;
|
|
|
+
|
|
|
+ gatherData[completeData.prefix + 'tp'] = helper.add(gatherData[completeData.prefix + 'tp'], sourceData.tp);
|
|
|
+ gatherData['s_' + 'tp'] = helper.add(gatherData['s_' + 'tp'], sourceData.tp);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
async _gatherMonthStagePay(sTender, completeData, month, hasPre) {
|
|
|
const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
const stages = await this._getValidStages(tender.id);
|
|
@@ -692,38 +776,23 @@ module.exports = app => {
|
|
|
await this._gatherStagePay(completeData, tender, stage, hasPre);
|
|
|
}
|
|
|
|
|
|
- async _gatherZoneStagePay(sTender, completeData, zone) {
|
|
|
- const helper = this.ctx.helper;
|
|
|
-
|
|
|
+ async _gatherOrderStagePay(sTender, completeData, order, hasPre) {
|
|
|
const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
- completeData.id = tender.id;
|
|
|
- completeData.name = tender.name;
|
|
|
const stages = await this._getValidStages(tender.id);
|
|
|
+ const stage = this.ctx.helper._.find(stages, {order: order});
|
|
|
+ await this._gatherStagePay(completeData, tender, stage, hasPre);
|
|
|
+ }
|
|
|
|
|
|
- const times = zone.split(' - ');
|
|
|
- if (times.length !== 2) throw '选择的汇总周期无效';
|
|
|
- const beginTime = moment(times[0], 'YYYY-MM');
|
|
|
- const endTime = moment(times[1], 'YYYY-MM');
|
|
|
+ async _gatherZoneStagePay(sTender, completeData, zone) {
|
|
|
+ const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
+ const stages = await this._getTimeZoneStages(tender, zone);
|
|
|
+ await this._gatherStagesPay(completeData, tender, stages);
|
|
|
+ }
|
|
|
|
|
|
- for (const stage of stages) {
|
|
|
- const sTime = moment(stage.s_time, 'YYYY-MM');
|
|
|
- if (sTime.isBetween(beginTime, endTime, null, '[]')) {
|
|
|
- await this.ctx.service.stage.doCheckStage(stage);
|
|
|
-
|
|
|
- const dealPay = await this.ctx.service.stagePay.getStagePays(stage);
|
|
|
- await this._checkStagePayCalc(tender, stage, dealPay);
|
|
|
- for (const dp of dealPay) {
|
|
|
- dp.end_tp = helper.add(dp.pre_tp, dp.tp);
|
|
|
- this._gatherPayRecord(dp, function (gatherData, sourceData) {
|
|
|
- gatherData[completeData.prefix + 'id'] = tender.id;
|
|
|
- gatherData[completeData.prefix + 'name'] = tender.name;
|
|
|
-
|
|
|
- gatherData[completeData.prefix + 'tp'] = helper.add(gatherData[completeData.prefix + 'tp'], sourceData.tp);
|
|
|
- gatherData['s_' + 'tp'] = helper.add(gatherData['s_' + 'tp'], sourceData.tp);
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ async _gatherOrderZoneStagePay(sTender, completeData, stageZone) {
|
|
|
+ const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
|
|
|
+ const stages = await this._getOrderZoneStages(tender, stageZone)
|
|
|
+ await this._gatherStagesPay(completeData, tender, stages);
|
|
|
}
|
|
|
|
|
|
async _gatherFinalStagePay(sTender, completeData, hasPre) {
|
|
@@ -766,6 +835,12 @@ module.exports = app => {
|
|
|
case 'checked-final':
|
|
|
await this._gatherCheckedFinalStagePay(tender, completeData, gsSetting.hasPre);
|
|
|
break;
|
|
|
+ case 'stage':
|
|
|
+ await this._gatherOrderStagePay(tender, completeData, gsCustom.stage, gsSetting.hasPre);
|
|
|
+ break;
|
|
|
+ case 'stage-zone':
|
|
|
+ await this._gatherOrderZoneStagePay(tender, completeData, gsCustom.stage_zone);
|
|
|
+ break;
|
|
|
}
|
|
|
commonIndex++;
|
|
|
}
|