Explorar o código

变更概况,计算重做

MaiXinRong %!s(int64=3) %!d(string=hai) anos
pai
achega
3f505cd72a
Modificáronse 2 ficheiros con 35 adicións e 56 borrados
  1. 3 3
      app/public/js/stage_change.js
  2. 32 53
      app/service/stage_change.js

+ 3 - 3
app/public/js/stage_change.js

@@ -35,11 +35,11 @@ class ChangeAnalysis {
         change.attachments = change.detail.attachments;
         change.bills = change.detail.bills;
         for (const b of change.bills) {
-            const aub = change.detail.addUsedBills.find(function (x) {
-                return x.id === b.id;
+            const aub = change.detail.addUsedBills.filter(function (x) {
+                return x.cbid === b.id;
             });
             if (aub) {
-                b.used_qty = aub.used_qty;
+                b.used_qty = ZhCalc.sum(aub.map(x => { return x.qty}));
             }
             b.qty = _.toNumber(b.samount);
             b.valid_qty = ZhCalc.sub(b.qty, b.used_qty);

+ 32 - 53
app/service/stage_change.js

@@ -287,61 +287,40 @@ module.exports = app => {
          * @return {Promise<void>}
          */
         async getUsedData(tid, cid) {
-            const lastStage = await this.ctx.service.stage.getLastestStage(tid, true);
-            let filter;
-            if (this.ctx.stage && lastStage.id === this.ctx.stage.id) {
-                filter = this.db.format(' And (s.`order` < ? || (s.`order` = ? And sChange.`stimes` <= ? And sChange.`sorder` <= ?))',
-                    [lastStage.order, lastStage.order, this.ctx.stage.curTimes, this.ctx.stage.curOrder]);
+            if (this.ctx.stage.status === audit.stage.status.checked) {
+                const sql = 'SELECT scf.*, cal.unit_price ' +
+                    '  FROM ' + this.tableName + ' scf ' +
+                    '  LEFT JOIN ' + this.ctx.service.stage.tableName + ' s ON scf.sid = s.id' +
+                    '  WHERE scf.tid = ? And scf.cid = ? And s.order = ?';
+                const result = await this.db.query(sql, [tid, cid, this.ctx.stage.order]);
+                return result;
             } else {
-                if (lastStage.status === audit.stage.status.uncheck) {
-                    filter = 'And s.order < ' + lastStage.order;
-                } else if (lastStage.status === audit.stage.status.checked) {
-                    filter = '';
-                } else if (lastStage.status === audit.stage.status.checkNo) {
-                    filter = this.db.format(' And (s.`order` < ? || (s.`order` = ? And sChange.`stimes` <= ?))',
-                        [lastStage.order, lastStage.order, lastStage.times]);
-                } else {
-                    const curAuditor = await this.ctx.service.stageAudit.getCurAuditor(lastStage.id, lastStage.times);
-                    filter = this.db.format(' And (s.`order` < ? || (s.`order` = ? And sChange.`stimes` <= ? And sChange.`sorder` <= ?))',
-                        [lastStage.order, lastStage.order, lastStage.times, curAuditor.order - 1]);
-                }
+                const sql = 'SELECT * FROM ' + this.tableName + ' WHERE sid = ? AND (stimes * 100 + sorder) <= (? * 100 + ?)';
+                const curAll = await this.db.query(sql, [this.ctx.stage.id, this.ctx.stage.curTimes, this.ctx.stage.curOrder]);
+                const cur = this.ctx.helper.filterLastestData(curAll, ['lid', 'pid', 'cid', 'cbid'], 'stimes', 'sorder');
+                return cur;
             }
-
-            const sql = 'SELECT c.lid, c.pid, SUM(c.qty) as used_qty,' +
-                        '    cb.tid, cb.cid, cb.id, cb.code, cb.name, cb.unit, cb.unit_price, cb.detail, cb.samount, cb.bwmx, cb.detail' +
-                        '  FROM ' + this.ctx.service.changeAuditList.tableName + ' As cb' +
-                        '  LEFT JOIN ' + this.tableName + ' As c ON cb.id = c.cbid ' +
-                        '  INNER JOIN (' +
-                        '    SELECT MAX(`stimes` * ' + timesLen + ' + `sorder`) As `flow`, `lid`, `pid`, `cbid`, sChange.`sid`, `cid` ' +
-                        '      FROM ' + this.tableName + ' As sChange' +
-                        '      LEFT JOIN ' + this.ctx.service.stage.tableName + ' As s ON sChange.sid = s.id' +
-                        '      WHERE sChange.tid = ? AND cid = ?' + filter +
-                        '      GROUP By `lid`, `pid`, `cbid`, sChange.`sid`' +
-                        '  ) As m' +
-                        '  ON (c.stimes * ' + timesLen + ' + c.sorder) = m.flow And c.`cbid` = m.`cbid` AND c.`sid` = m.`sid` And c.`cid` = m.`cid` And c.`lid` = m.`lid` And c.`pid` = m.`pid`' +
-                        '  WHERE cb.cid = ?' +
-                        '  GROUP By c.`cbid`';
-            const sqlParam = [tid, cid, cid];
-            return await this.db.query(sql, sqlParam);
         }
 
         async getFinalUsedData(tid, cid) {
-            const sql = 'SELECT c.lid, c.pid, SUM(c.qty) as used_qty,' +
-                '    cb.tid, cb.cid, cb.id, cb.code, cb.name, cb.unit, cb.unit_price, cb.detail, cb.samount, cb.oamount, cb.bwmx, cb.gcl_id' +
-                '  FROM ' + this.ctx.service.changeAuditList.tableName + ' As cb' +
-                '  LEFT JOIN ' + this.tableName + ' As c ON cb.id = c.cbid ' +
-                '  INNER JOIN (' +
-                '    SELECT MAX(`stimes` * ' + timesLen + ' + `sorder`) As `flow`, `lid`, `pid`, `cbid`, sChange.`sid`, `cid` ' +
-                '      FROM ' + this.tableName + ' As sChange' +
-                '      LEFT JOIN ' + this.ctx.service.stage.tableName + ' As s ON sChange.sid = s.id' +
-                '      WHERE sChange.tid = ? AND cid = ?' +
-                '      GROUP By `lid`, `pid`, `cbid`, sChange.`sid`' +
-                '  ) As m' +
-                '  ON (c.stimes * ' + timesLen + ' + c.sorder) = m.flow And c.`cbid` = m.`cbid` AND c.`sid` = m.`sid` And c.`cid` = m.`cid` And c.`lid` = m.`lid` And c.`pid` = m.`pid`' +
-                '  WHERE cb.cid = ?' +
-                '  GROUP By c.`cbid`';
-            const sqlParam = [tid, cid, cid];
-            return await this.db.query(sql, sqlParam);
+            if (stage.status === audit.stage.status.checked) {
+                const sql = 'SELECT scf.*, cal.unit_price ' +
+                    '  FROM ' + this.ctx.service.stageChangeFinal.tableName + ' scf ' +
+                    '  LEFT JOIN ' + this.ctx.service.stage.tableName + ' s ON scf.sid = s.id' +
+                    '  WHERE scf.tid = ? And scf.cid = ? And s.order <= ?';
+                const result = await this.db.query(sql, [tid, cid, this.ctx.stage.order]);
+                return result;
+            } else {
+                const preSql = 'SELECT scf.* ' +
+                    '  FROM ' + this.ctx.service.stageChangeFinal.tableName + ' scf ' +
+                    '  LEFT JOIN ' + this.ctx.service.stage.tableName + ' s ON scf.sid = s.id' +
+                    '  WHERE scf.tid = ? And scf.cid = ? And s.order < ?';
+                const pre = await this.db.query(preSql, [tid, cid, stage.order]);
+                const sql = 'SELECT * FROM ' + this.tableName + ' WHERE sid = ? AND (stimes * 100 + sorder) <= (? * 100 + ?)';
+                const curAll = await this.db.query(sql, [this.ctx.stage.id, this.ctx.stage.curTimes, this.ctx.stage.curOrder]);
+                const cur = this.ctx.helper.filterLastestData(curAll, ['lid', 'pid', 'cid', 'cbid'], 'stimes', 'sorder');
+                return [...pre, ...cur];
+            }
         }
 
         /**
@@ -432,18 +411,18 @@ module.exports = app => {
         async _getChangeBillsWithUsedInfo(stage) {
             if (stage.status === audit.stage.status.checked) {
                 const sql = 'SELECT scf.*, cal.unit_price ' +
-                    '  FROM ' + this.tableName + ' scf ' +
+                    '  FROM ' + this.ctx.service.stageChangeFinal.tableName + ' scf ' +
                     '  LEFT JOIN ' + this.ctx.service.stage.tableName + ' s ON scf.sid = s.id' +
                     '  WHERE scf.tid = ? And s.order <= ?';
                 const result = await this.db.query(sql, [stage.tid, stage.order]);
                 return result;
             } else {
                 const preSql = 'SELECT scf.* ' +
-                    '  FROM ' + this.tableName + ' scf ' +
+                    '  FROM ' + this.ctx.service.stageChangeFinal.tableName + ' scf ' +
                     '  LEFT JOIN ' + this.ctx.service.stage.tableName + ' s ON scf.sid = s.id' +
                     '  WHERE scf.tid = ? And s.order < ?';
                 const pre = await this.db.query(preSql, [stage.tid, stage.order]);
-                const sql = 'SELECT * FROM ' + this.ctx.service.stageChange.tableName + ' WHERE sid = ? AND (stimes * 100 + sorder) <= (? * 100 + ?)';
+                const sql = 'SELECT * FROM ' + this.tableName + ' WHERE sid = ? AND (stimes * 100 + sorder) <= (? * 100 + ?)';
                 const curAll = await this.db.query(sql, [stage.id, stage.curTimes, stage.curOrder]);
                 const cur = this.ctx.helper.filterLastestData(curAll, ['lid', 'pid', 'cid', 'cbid'], 'stimes', 'sorder');
                 return [...pre, ...cur];