Explorar o código

第二期,截止上期数据相关

MaiXinRong %!s(int64=6) %!d(string=hai) anos
pai
achega
272d5f663d

+ 9 - 1
app/controller/stage_controller.js

@@ -174,10 +174,18 @@ module.exports = app => {
                 condition.tid = ctx.tender.id;
                 const responseData = {err: 0, msg: '', data: {}};
                 responseData.data.pos = await ctx.service.pos.getPosData(condition);
-                // todo 根据当前人,或指定对象查询数据
+                // 根据当前人,或指定对象查询数据
                 responseData.data.curStageData = await ctx.service.stagePos.getAuditorStageData(ctx.tender.id,
                     ctx.stage.id, ctx.stage.times, ctx.stage.curAuditor ? ctx.stage.curAuditor.order : 0,
                     this.app._.map(responseData.data.pos, 'id'));
+                // 查询截止上期数据
+                if (ctx.stage.order > 1) {
+                    responseData.data.preStageData = await ctx.service.stagePosFinal.getAllDataByCondition({
+                        where: {tid: this.ctx.tender.id, sorder: ctx.stage.order - 1}
+                    });
+                } else {
+                    responseData.data.preStageData = [];
+                }
                 ctx.body = responseData;
             } catch (err) {
                 this.log(err);

+ 5 - 5
app/public/js/path_tree.js

@@ -138,7 +138,7 @@ class StagePosData extends PosData {
             let node = this.getPos(data.pid);
             if (node) {
                 for (const prop of fields) {
-                    if (data[fieldPre + prop] !== undefined) {
+                    if (data[prop] !== undefined) {
                         node[fieldPre + prop] = data[prop];
                     }
                 }
@@ -919,12 +919,12 @@ const createNewPathTree = function (type, setting) {
             }
         }
 
-        loadPreStageData(preStageData) {
-            this.loadStageData(preStageData, 'pre_', this.setting.updateFields);
+        loadPreStageData(datas) {
+            this.loadStageData(datas, 'pre_', this.setting.updateFields);
         }
 
-        loadCurStageData(curStageData) {
-            this.loadStageData(curStageData, '', this.setting.updateFields);
+        loadCurStageData(datas) {
+            this.loadStageData(datas, '', this.setting.updateFields);
         }
 
         /**

+ 6 - 1
app/public/js/stage.js

@@ -98,14 +98,17 @@ $(document).ready(() => {
     };
     // 台账树结构计算相关设置
     stageTreeSetting.updateFields = ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'];
-    stageTreeSetting.calcFields = ['deal_tp', 'total_price', 'contract_tp', 'qc_tp', 'gather_tp', 'end_contract_tp', 'end_qc_tp', 'end_gather_tp'];
+    stageTreeSetting.calcFields = ['deal_tp', 'total_price', 'contract_tp', 'qc_tp', 'gather_tp',
+        'pre_contract_tp', 'pre_qc_tp', 'pre_gather_tp', 'end_contract_tp', 'end_qc_tp', 'end_gather_tp'];
     stageTreeSetting.calcFun = function (node) {
         if (node.children && node.children.length === 0) {
+            node.pre_gather_qty = _.add(node.pre_contract_qty, node.pre_qc_qty);
             node.gather_qty = _.add(node.contract_qty, node.qc_qty);
             node.end_contract_qty = _.add(node.pre_contract_qty, node.contract_qty);
             node.end_qc_qty = _.add(node.pre_qc_qty, node.qc_qty);
             node.end_gather_qty = _.add(node.pre_gather_qty, node.gather_qty);
         }
+        node.pre_gather_tp = _.add(node.pre_contract_tp, node.pre_qc_tp);
         node.gather_tp = _.add(node.contract_tp, node.qc_tp);
         node.end_contract_tp = _.add(node.pre_contract_tp, node.contract_tp);
         node.end_qc_tp = _.add(node.pre_qc_tp, node.qc_tp);
@@ -123,6 +126,7 @@ $(document).ready(() => {
         updateFields: ['contract_qty', 'qc_qty', 'postil'],
     };
     stagePosSetting.calcFun = function (pos) {
+        pos.pre_gather_qty = _.add(pos.pre_contract_qty, pos.pre_qc_qty);
         pos.gather_qty = _.add(pos.contract_qty, pos.qc_qty);
         pos.end_contract_qty = _.add(pos.pre_contract_qty, pos.contract_qty);
         pos.end_qc_qty = _.add(pos.pre_qc_qty, pos.qc_qty);
@@ -669,6 +673,7 @@ $(document).ready(() => {
         if (result.preStageData) {
             stagePos.loadPreStageData(result.preStageData);
         }
+        stagePos.calculateAll();
         stagePosSpreadObj.loadCurPosData();
     });
     spSpread.bind(spreadNS.Events.EditEnded, stagePosSpreadObj.editEnded);

+ 1 - 1
app/service/stage_audit.js

@@ -245,7 +245,7 @@ module.exports = app => {
                         // 本期结束
                         // 生成截止本期数据 final数据
                         await this.ctx.service.stageBillsFinal.generateFinalData(transaction, this.ctx.tender, this.ctx.stage);
-                        //await this.ctx.service.stagePF.generateFinalData(transaction, this.ctx.tender, this.ctx.stage);
+                        await this.ctx.service.stagePosFinal.generateFinalData(transaction, this.ctx.tender, this.ctx.stage);
                         // 计算并合同支付最终数据
                         await this.ctx.service.stagePay.calcAllStagePays(this.ctx.stage, transaction);
                         // 同步 期信息

+ 69 - 0
app/service/stage_pos_final.js

@@ -0,0 +1,69 @@
+'use strict';
+
+/**
+ * stage_pos_final 期-部位明细-最终数据(截止本期)
+ *
+ * @author Mai
+ * @date
+ * @version
+ */
+
+module.exports = app => {
+
+    class StagePosFinal extends app.BaseService {
+        /**
+         * 构造函数
+         *
+         * @param {Object} ctx - egg全局变量
+         * @return {void}
+         */
+        constructor(ctx) {
+            super(ctx);
+            this.tableName = 'stage_pos_final';
+        }
+
+        /**
+         * 生成本期最终数据
+         * @param transaction - 所属事务
+         * @param {Number} tender - 标段
+         * @param {Number}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, pid, sorder, contract_qty, qc_qty, postil)' +
+                    '  SELECT p.tid, p.sid, p.lid, p.pid, ? As `sorder`, p.contract_qty, p.qc_qty, p.postil' +
+                    '  FROM ' + this.ctx.service.stagePos.tableName + ' AS p' +
+                    '  INNER JOIN(' +
+                    '    SELECT Max(`times`) As `times`, MAX(`order`) As `order`, `pid` FROM ' + this.ctx.service.stagePos.tableName +
+                    '    WHERE `sid` = ?' +
+                    '    GROUP By `pid`) As MF' +
+                    '  ON p.times = MF.times AND p.order = MF.order AND p.pid = MF.pid' +
+                    '  WHERE p.sid = ?';
+                const sqlParam = [this.tableName, stage.order, stage.id, stage.id];
+                await transaction.query(sql, sqlParam);
+            } else {
+                const sql = 'Insert Into ??(tid, sid, lid, pid, sorder, contract_qty, qc_qty, postil)' +
+                    '  SELECT p.tid, p.sid, p.lid, p.pid, ? As `sorder`, p.contract_qty, p.qc_qty, p.postil' +
+                    '  FROM ' + this.ctx.service.stagePos.tableName + ' AS p' +
+                    '  INNER JOIN(' +
+                    '    SELECT Max(`times`) As `times`, MAX(`order`) As `order`, `pid` FROM ' + this.ctx.service.stagePos.tableName +
+                    '    WHERE `sid` = ?' +
+                    '    GROUP By `pid`) As MF' +
+                    '  ON p.times = MF.times AND p.order = MF.order AND p.pid = MF.pid' +
+                    '  WHERE p.sid = ?';
+                const sqlParam = [this.tableName, stage.order, stage.id, stage.id];
+                await transaction.query(sql, sqlParam);
+            }
+        }
+    }
+
+    return StagePosFinal;
+}