Преглед на файлове

截止上期数据相关

MaiXinRong преди 6 години
родител
ревизия
c1d6722a94
променени са 5 файла, в които са добавени 82 реда и са изтрити 51 реда
  1. 2 6
      app/controller/stage_controller.js
  2. 0 3
      app/public/js/tender_list_manage.js
  3. 38 18
      app/service/stage_bills_final.js
  4. 0 1
      app/service/stage_pay.js
  5. 42 23
      app/service/stage_pos_final.js

+ 2 - 6
app/controller/stage_controller.js

@@ -155,9 +155,7 @@ module.exports = app => {
                 renderData.jsFiles = this.app.jsFiles.common.concat(this.app.jsFiles.stage.index);
                 // 查询截止上期数据
                 if (ctx.stage.order > 1) {
-                    renderData.preStageData = await ctx.service.stageBillsFinal.getAllDataByCondition({
-                        where: {tid: this.ctx.tender.id, sorder: ctx.stage.order - 1}
-                    });
+                    renderData.preStageData = await ctx.service.stageBillsFinal.getFinalData(ctx.tender.data, ctx.stage);
                 } else {
                     renderData.preStageData = [];
                 }
@@ -186,9 +184,7 @@ module.exports = app => {
                     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}
-                    });
+                    responseData.data.preStageData = await ctx.service.stagePosFinal.getFinalData(ctx.tender.data, ctx.stage);
                 } else {
                     responseData.data.preStageData = [];
                 }

+ 0 - 3
app/public/js/tender_list_manage.js

@@ -233,7 +233,6 @@ function initTenderTree () {
 }
 function recursiveGetTenderNodeHtml (node, arr) {
     const html = [];
-    console.log(node);
     html.push('<tr>');
     // 名称
     html.push('<td class="in-' + node.level + '">');
@@ -456,8 +455,6 @@ $(document).ready(() => {
                         const a = arr.find(function (x) {
                             return x.id === rid;
                         });
-                        console.log(arr.indexOf(a));
-                        console.log(arr.length - 1);
                         if (arr.length > 1 && arr.indexOf(a) === arr.length - 1) {
                             const span = $('span', tr.prev());
                             span.text('└');

+ 38 - 18
app/service/stage_bills_final.js

@@ -23,35 +23,55 @@ module.exports = app => {
         }
 
         /**
+         * 获取截止本期数据
+         * @param {Object} tender - 标段
+         * @param {Object} stage - 本期
+         * @returns {Promise<void>}
+         */
+        async getFinalData(tender, stage) {
+            const sql = 'SELECT * FROM ' + this.tableName + ' As Bills' +
+                '  INNER JOIN ( ' +
+                '    SELECT MAX(`sorder`) As `sorder`, `lid` From ' + this.tableName +
+                '      WHERE tid = ? AND sorder < ?' +
+                '      GROUP BY `lid`' +
+                '  ) As MaxFilter ' +
+                '  ON Bills.sorder = MaxFilter.sorder And Bills.lid = MaxFilter.lid' +
+                '  WHERE Bills.tid = ?';
+            const sqlParam = [tender.id, stage.order, tender.id];
+            return await this.db.query(sql, sqlParam);
+        }
+
+        /**
          * 生成本期最终数据
          * @param transaction - 所属事务
-         * @param {Number} tender - 标段
-         * @param {Number}stage - 本期
+         * @param {Object} tender - 标段
+         * @param {Object} 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, sorder, contract_qty, contract_tp, qc_qty, qc_tp, postil)' +
-                    '  SELECT b.tid, b.sid, b.lid, ? As `sorder`, b.contract_qty, b.contract_tp, b.qc_qty, b.qc_tp, b.postil' +
-                    '  FROM ' + this.ctx.service.stageBills.tableName + ' AS b' +
-                    '  INNER JOIN(' +
-                    '    SELECT Max(`times`) As `times`, MAX(`order`) As `order`, `lid` FROM ' + this.ctx.service.stageBills.tableName +
-                    '    WHERE `sid` = ?' +
-                    '    GROUP By `lid`) As MF' +
-                    '  ON b.times = MF.times AND b.order = MF.order AND b.lid = MF.lid' +
-                    '  WHERE b.sid = ?';
-                const sqlParam = [this.tableName, stage.order, stage.id, stage.id];
+                const sql = 'Insert Into ??(tid, sid, lid, sorder, contract_qty, contract_tp, qc_qty, qc_tp)' +
+                    '  SELECT cur.tid, cur.sid, cur.lid, ? As `sorder`, ' +
+                    '      IFNULL(cur.contract_qty, 0) + IFNULL(pre.contract_qty, 0), IFNULL(cur.contract_tp, 0) + IFNULL(pre.contract_tp, 0),' +
+                    '      IFNULL(cur.qc_qty, 0) + IFNULL(pre.qc_qty, 0), IFNULL(cur.qc_tp, 0) + IFNULL(pre.qc_tp, 0)' +
+                    '  FROM (SELECT b.tid, b.sid, b.lid, b.contract_qty, b.contract_tp, b.qc_qty, b.qc_tp' +
+                    '    FROM ' + this.ctx.service.stageBills.tableName + ' AS b' +
+                    '    INNER JOIN(' +
+                    '      SELECT Max(`times`) As `times`, MAX(`order`) As `order`, `lid` FROM ' + this.ctx.service.stageBills.tableName +
+                    '      WHERE `sid` = ?' +
+                    '      GROUP By `lid`) As MF' +
+                    '    ON b.times = MF.times AND b.order = MF.order AND b.lid = MF.lid' +
+                    '    WHERE b.sid = ?) As cur' +
+                    '  LEFT JOIN ?? As pre' +
+                    '  ON cur.lid = pre.lid And pre.sorder = ?';
+                const sqlParam = [this.tableName, stage.order, stage.id, stage.id, this.tableName, stage.order - 1];
                 await transaction.query(sql, sqlParam);
             } else {
-                const sql = 'Insert Into ??(tid, sid, lid, sorder, contract_qty, contract_tp, qc_qty, qc_tp, postil)' +
-                    '  SELECT b.tid, b.sid, b.lid, ? As `sorder`, b.contract_qty, b.contract_tp, b.qc_qty, b.qc_tp, b.postil' +
+                const sql = 'Insert Into ??(tid, sid, lid, sorder, contract_qty, contract_tp, qc_qty, qc_tp)' +
+                    '  SELECT b.tid, b.sid, b.lid, ? As `sorder`, b.contract_qty, b.contract_tp, b.qc_qty, b.qc_tp' +
                     '  FROM ' + this.ctx.service.stageBills.tableName + ' AS b' +
                     '  INNER JOIN(' +
                     '    SELECT Max(`times`) As `times`, MAX(`order`) As `order`, `lid` FROM ' + this.ctx.service.stageBills.tableName +

+ 0 - 1
app/service/stage_pay.js

@@ -86,7 +86,6 @@ module.exports = app => {
             // 获取截止上期数据
             if (stage.order > 1) {
                 const preStage = await this.ctx.service.stage.getDataByCondition({tid: stage.tid, order: stage.order - 1});
-                console.log(preStage);
                 if (!preStage) {
                     throw '标段数据有误';
                 }

+ 42 - 23
app/service/stage_pos_final.js

@@ -23,6 +23,25 @@ module.exports = app => {
         }
 
         /**
+         * 获取截止本期数据
+         * @param {Object} tender - 标段
+         * @param {Object} stage - 本期
+         * @returns {Promise<void>}
+         */
+        async getFinalData(tender, stage) {
+            const sql = 'SELECT * FROM ' + this.tableName + ' As Pos' +
+                '  INNER JOIN ( ' +
+                '    SELECT MAX(`sorder`) As `sorder`, `pid` From ' + this.tableName +
+                '      WHERE tid = ? AND sorder < ?' +
+                '      GROUP BY `pid`' +
+                '  ) As MaxFilter ' +
+                '  ON Pos.sorder = MaxFilter.sorder And Pos.pid = MaxFilter.pid' +
+                '  WHERE Pos.tid = ?';
+            const sqlParam = [tender.id, stage.order, tender.id];
+            return await this.db.query(sql, sqlParam);
+        }
+
+        /**
          * 生成本期最终数据
          * @param transaction - 所属事务
          * @param {Number} tender - 标段
@@ -33,32 +52,32 @@ module.exports = app => {
             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];
+                const sql = 'Insert Into ??(tid, sid, lid, pid, sorder, contract_qty, qc_qty)' +
+                            '  SELECT cur.tid, cur.sid, cur.lid, cur.pid, ? As `sorder`,' +
+                            '      IFNULL(cur.contract_qty, 0) + IFNULL(pre.contract_qty, 0), IFNULL(cur.qc_qty, 0) + IFNULL(pre.qc_qty, 0)' +
+                            '    FROM (SELECT p.tid, p.sid, p.lid, p.pid, p.contract_qty, p.qc_qty' +
+                            '      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 = ?) As cur' +
+                            '    LEFT JOIN ?? As pre' +
+                            '    ON cur.pid = pre.pid AND pre.sorder = ?';
+                const sqlParam = [this.tableName, stage.order, stage.id, stage.id, this.tableName, stage.order - 1];
                 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 sql = 'Insert Into ??(tid, sid, lid, pid, sorder, contract_qty, qc_qty)' +
+                            '  SELECT p.tid, p.sid, p.lid, p.pid, ? As `sorder`, p.contract_qty, p.qc_qty' +
+                            '  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);
             }