Browse Source

台账分解、台账修订,上报强制检查调整

MaiXinRong 4 years ago
parent
commit
18e1d836a2

+ 8 - 1
app/controller/ledger_controller.js

@@ -469,6 +469,13 @@ module.exports = app => {
                 const ledgerData = await ctx.service.ledger.getData(ctx.tender.id);
                 const posData = this.ctx.tender.data.measure_type === measureType.tz.value
                     ? await ctx.service.pos.getPosData({ tid: ctx.tender.id }) : [];
+
+                const checkDataModel = require('../lib/ledger').checkData;
+                const checkData = new checkDataModel(ctx);
+                checkData.loadData(ledgerData, posData);
+                const sameCodeError = checkData.checkSameCode();
+                const siblingError = checkData.checkSibling();
+
                 const qtyData = ctx.helper.checkBillsWithPos(ledgerData, posData,
                     ['sgfh_qty', 'qtcl_qty', 'sjcl_qty', 'quantity']);
                 qtyData.error.forEach(x => { x.errorType = 'qty'; });
@@ -478,7 +485,7 @@ module.exports = app => {
                 ], this.ctx.tender.info.decimal);
                 tpData.error.forEach(x => { x.errorType = 'tp'; });
                 ctx.body = { err: 0, msg: '', data: {
-                    error: [...qtyData.error, ...tpData.error],
+                    error: [...qtyData.error, ...tpData.error, ...sameCodeError, ...siblingError],
                     source: {
                         bills: [...qtyData.source.bills, ...tpData.source.bills],
                         pos: [...qtyData.source.pos, ...tpData.source.pos],

+ 7 - 1
app/controller/revise_controller.js

@@ -459,6 +459,12 @@ module.exports = app => {
                 const reviseBills = await ctx.service.reviseBills.getData(ctx.tender.id);
                 const revisePos = await ctx.service.revisePos.getData(ctx.tender.id);
 
+                const checkDataModel = require('../lib/ledger').checkData;
+                const checkData = new checkDataModel(ctx);
+                checkData.loadData(reviseBills, revisePos);
+                const sameCodeError = checkData.checkSameCode();
+                const siblingError = checkData.checkSibling();
+
                 const qtyData = ctx.helper.checkBillsWithPos(reviseBills, revisePos,
                     ['sgfh_qty', 'qtcl_qty', 'sjcl_qty', 'quantity']);
                 qtyData.error.forEach(x => { x.errorType = 'qty'; });
@@ -468,7 +474,7 @@ module.exports = app => {
                 ], this.ctx.tender.info.decimal);
                 tpData.error.forEach(x => { x.errorType = 'tp'; });
                 ctx.body = { err: 0, msg: '', data: {
-                        error: [...qtyData.error, ...tpData.error],
+                        error: [...qtyData.error, ...tpData.error, ...sameCodeError, ...siblingError],
                         source: {
                             bills: [...qtyData.source.bills, ...tpData.source.bills],
                             pos: [...qtyData.source.pos, ...tpData.source.pos],

+ 2 - 1
app/controller/stage_controller.js

@@ -365,7 +365,8 @@ module.exports = app => {
 
                 const checkDataModel = require('../lib/ledger').checkData;
                 const checkData = new checkDataModel(ctx);
-                const check3fResult = checkData.check3fLimit(ctx.tender.data, ledgerData, posData);
+                checkData.loadData(ledgerData, posData);
+                const check3fResult = checkData.check3fLimit(ctx.tender.data);
                 const [qtyData, overData] = ctx.helper.checkBillsWithPos2(ledgerData, posData,
                     ['contract_qty', 'qc_qty'], projRela.banOver, this.ctx.tender.data.measure_type === measureType.tz.value);
                 qtyData.error.forEach(x => { x.errorType = 'qty'; });

+ 46 - 4
app/lib/ledger.js

@@ -680,7 +680,52 @@ class checkData {
             this._checkLeafBills3fLimit(checkType, bills, result, checkInfo);
         }
     }
-    check3fLimit(tender, bills, pos) {
+
+    loadData(bills, pos) {
+        this.checkBills.loadDatas(bills);
+        this.checkPos.loadDatas(pos);
+    }
+
+    checkSibling() {
+        const error = [];
+        for (const node of this.checkBills.nodes) {
+            if (!node.children || node.children.length === 0) continue;
+            let hasXmj, hasGcl;
+            for (const child of node.children) {
+                if (child.b_code) hasXmj = true;
+                if (!child.b_code) hasGcl = true;
+            }
+            if (hasXmj && hasGcl) error.push({
+                ledger_id: node.ledger_id,
+                b_code: node.b_code,
+                name: node.name,
+                errorType: 'sibling',
+            });
+        }
+        return error;
+    }
+
+    checkSameCode() {
+        const error = [];
+        let xmj = this.checkBills.nodes.filter(x => { return /^((GD*)|G)?[0-9]+/.test(x.code); });
+        let check = null;
+        while (xmj.length > 0) {
+            [check, xmj] = this.ctx.helper._.partition(xmj, x => { return x.code === xmj[0].code; });
+            if (check.length > 1) {
+                for (const c of check) {
+                    error.push({
+                        ledger_id: c.ledger_id,
+                        b_code: c.b_code,
+                        name: c.name,
+                        errorType: 'same_code',
+                    })
+                }
+            }
+        }
+        return error;
+    }
+
+    check3fLimit(tender) {
         const result = {
             error: [],
             source: {bills: [], pos: []},
@@ -691,9 +736,6 @@ class checkData {
         if (tender.s2b_dagl_limit) check.push('dagl');
         if (check.length === 0) return result;
 
-        this.checkBills.loadDatas(bills);
-        this.checkPos.loadDatas(pos);
-
         for (const b of this.checkBills.children) {
             this._recursiveCheckBills3fLimit(check, b, result, {});
         }

+ 2 - 0
app/public/js/shares/cs_tools.js

@@ -76,6 +76,8 @@ const showSelectTab = function(select, spread, afterShow) {
                                 case 'qty': return '数量';
                                 case 'tp': return '金额';
                                 case 'over': return '超计';
+                                case 'sibling': return '项目节清单同层';
+                                case 'same_code': return '重复项目节编号';
                                 case 's2b_over_gxby': return '违规计量(工序报验)';
                                 case 's2b_over_dagl': return '违规计量(档案管理)';
                                 case 's2b_lost_gxby': return '遗漏计量(工序报验)';