|
@@ -238,10 +238,10 @@ module.exports = app => {
|
|
|
this.resultDealBills = [];
|
|
|
}
|
|
|
|
|
|
- async _getValidStages(tenderId) {
|
|
|
+ async _getValidStages(tenderId, sort = 'desc') {
|
|
|
const stages = await this.db.select(this.ctx.service.stage.tableName, {
|
|
|
where: { tid: tenderId },
|
|
|
- orders: [['order', 'desc']],
|
|
|
+ orders: [['order', sort]],
|
|
|
});
|
|
|
if (stages.length !== 0) {
|
|
|
const lastStage = stages[0];
|
|
@@ -281,53 +281,71 @@ module.exports = app => {
|
|
|
const beginTime = moment(times[0], 'YYYY-MM');
|
|
|
const endTime = moment(times[1], 'YYYY-MM');
|
|
|
|
|
|
- const stages = await this._getValidStages(tender.id), validStages = [];
|
|
|
+ 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 validStages;
|
|
|
+ return [validStages, preStage, endStage];
|
|
|
}
|
|
|
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 = [];
|
|
|
+ const stages = await this._getValidStages(tender.id, 'asc'), validStages = [];
|
|
|
+ let preStage, endStage;
|
|
|
for (const stage of stages) {
|
|
|
- if (stage.order < iBegin || stage.order > iEnd) continue;
|
|
|
-
|
|
|
- validStages.push(stage);
|
|
|
+ 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);
|
|
|
+ }
|
|
|
}
|
|
|
- return validStages;
|
|
|
+ return [validStages, preStage, endStage];
|
|
|
}
|
|
|
async _getCheckedZoneStages(tender, zone) {
|
|
|
- console.log(zone);
|
|
|
const times = zone.split(' - ');
|
|
|
if (times.length !== 2) throw '选择的汇总周期无效';
|
|
|
const beginTime = moment(times[0], 'YYYY-MM-DD');
|
|
|
const endTime = moment(times[1], 'YYYY-MM-DD');
|
|
|
|
|
|
- const stages = await this._getValidStages(tender.id), validStages = [];
|
|
|
+ const stages = await this._getValidStages(tender.id, 'asc'), validStages = [];
|
|
|
+ let preStage, endStage;
|
|
|
for (const stage of stages) {
|
|
|
if (stage.status !== auditConst.stage.status.checked) continue;
|
|
|
- const finalAudit = this.ctx.service.stageAudit.getLastestAuditor(stage.id, stage.times, stage.status);
|
|
|
+
|
|
|
+ const finalAudit = await this.ctx.service.stageAudit.getLastestAuditor(stage.id, stage.times, stage.status);
|
|
|
if (!finalAudit) continue;
|
|
|
|
|
|
const sTime = moment(finalAudit.end_time);
|
|
|
+ // console.log(stage.order, finalAudit.end_time);
|
|
|
+ stage.checked_time = sTime;
|
|
|
if (sTime.isBetween(beginTime, endTime, null, '[]')) {
|
|
|
validStages.push(stage);
|
|
|
+ } else if (sTime.isBefore(beginTime)) {
|
|
|
+ if (!preStage || preStage.checked_time.isBefore(sTime)) preStage = stage;
|
|
|
+ } else if (sTime.isAfter(endTime)) {
|
|
|
+ if (!endStage || endStage.checked_time.isAfter(sTime)) endStage = stage;
|
|
|
}
|
|
|
}
|
|
|
- return validStages;
|
|
|
+ // console.log(validStages.map(x => { return x.order }), preStage ? preStage.order : -1, endStage ? endStage.order : -1);
|
|
|
+ return [validStages, preStage, endStage];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 台账数据
|
|
|
*/
|
|
|
|
|
|
- async _gatherStagesData(completeData, tender, stages) {
|
|
|
+ async _gatherStagesData(completeData, tender, stages, preStage) {
|
|
|
const resultPos = this.resultPos;
|
|
|
const helper = this.ctx.helper;
|
|
|
completeData.id = tender.id;
|
|
@@ -366,9 +384,17 @@ module.exports = app => {
|
|
|
calcFields: ['deal_tp', 'total_price', 'contract_tp', 'qc_tp', 'gather_tp'],
|
|
|
calc: function (node) {
|
|
|
if (node.children && node.children.length === 0) {
|
|
|
+ node.pre_gather_qty = helper.add(node.pre_contract_qty, node.pre_qc_qty);
|
|
|
node.gather_qty = helper.add(node.contract_qty, node.qc_qty);
|
|
|
+ node.end_contract_qty = helper.add(node.pre_contract_qty, node.contract_qty);
|
|
|
+ node.end_qc_qty = helper.add(node.pre_qc_qty, node.qc_qty);
|
|
|
+ node.end_gather_qty = helper.add(node.pre_gather_qty, node.gather_qty);
|
|
|
}
|
|
|
+ node.pre_gather_tp = helper.add(node.pre_contract_tp, node.pre_qc_tp);
|
|
|
node.gather_tp = helper.add(node.contract_tp, node.qc_tp);
|
|
|
+ node.end_contract_tp = helper.add(node.pre_contract_tp, node.contract_tp);
|
|
|
+ node.end_qc_tp = helper.add(node.pre_qc_tp, node.qc_tp);
|
|
|
+ node.end_gather_tp = helper.add(node.pre_gather_tp, node.gather_tp);
|
|
|
}
|
|
|
});
|
|
|
const billsData = await this.ctx.service.ledger.getData(tender.id);
|
|
@@ -380,7 +406,11 @@ module.exports = app => {
|
|
|
const pos = new Ledger.pos({
|
|
|
id: 'id', ledgerId: 'lid',
|
|
|
calc: function (node) {
|
|
|
+ node.pre_gather_qty = helper.add(node.pre_contract_qty, node.pre_qc_qty);
|
|
|
node.gather_qty = helper.add(node.contract_qty, node.qc_qty);
|
|
|
+ node.end_contract_qty = helper.add(node.pre_contract_qty, node.contract_qty);
|
|
|
+ node.end_qc_qty = helper.add(node.pre_qc_qty, node.qc_qty);
|
|
|
+ node.end_gather_qty = helper.add(node.pre_gather_qty, node.gather_qty);
|
|
|
},
|
|
|
});
|
|
|
const posData = await this.ctx.service.pos.getAllDataByCondition({ where: { tid: tender.id} });
|
|
@@ -393,6 +423,18 @@ module.exports = app => {
|
|
|
posIndexData[indexPre + p.id] = p;
|
|
|
}
|
|
|
|
|
|
+ if (preStage) {
|
|
|
+ await this.ctx.service.stage.doCheckStage(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
|
|
@@ -421,21 +463,21 @@ module.exports = app => {
|
|
|
const posRange = pos.getLedgerPos(sourceNode.id);
|
|
|
if (!posRange || posRange.length === 0) return;
|
|
|
resultPos.loadGatherPos(gatherNode.id, posRange, (gatherPos, sourcePos) => {
|
|
|
- gatherUtils.gatherZonePos(tender, gatherPos, sourcePos, completeData.prefix, helper);
|
|
|
+ gatherUtils.gatherStagePos(tender, gatherPos, sourcePos, completeData.prefix, helper);
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
async _gatherZoneData(tender, completeData, zone) {
|
|
|
- const stages = await this._getTimeZoneStages(tender, zone);
|
|
|
- await this._gatherStagesData(completeData, tender, stages);
|
|
|
+ const [stages, preStage, endStage] = await this._getTimeZoneStages(tender, zone);
|
|
|
+ await this._gatherStagesData(completeData, tender, stages, preStage);
|
|
|
}
|
|
|
async _gatherIndexZoneData(tender, completeData, stageZone) {
|
|
|
- const stages = await this._getOrderZoneStages(tender, stageZone);
|
|
|
- await this._gatherStagesData(completeData, tender, stages);
|
|
|
+ const [stages, preStage, endStage] = await this._getOrderZoneStages(tender, stageZone);
|
|
|
+ await this._gatherStagesData(completeData, tender, stages, preStage);
|
|
|
}
|
|
|
async _gatherCheckedZoneData(tender, completeData, zone) {
|
|
|
- const stages = await this._getCheckedZoneStages(tender, zone);
|
|
|
- await this._gatherStagesData(completeData, tender, stages);
|
|
|
+ const [stages, preStage, endStage] = await this._getCheckedZoneStages(tender, zone);
|
|
|
+ await this._gatherStagesData(completeData, tender, stages, preStage);
|
|
|
}
|
|
|
|
|
|
async _gatherStageData(completeData, tender, stage, hasPre) {
|