Browse Source

1. 汇总,汇总截止类数据
2. 汇总,提供汇总最新期,审批完成最新期的模式

MaiXinRong 5 years ago
parent
commit
db09c4b10c
1 changed files with 146 additions and 62 deletions
  1. 146 62
      app/service/rpt_gather_memory.js

+ 146 - 62
app/service/rpt_gather_memory.js

@@ -9,9 +9,93 @@
  */
 
 const Ledger = require('../lib/ledger');
+const auditConst = require('../const/audit');
 const moment = require('moment');
 const indexPre = 'id_';
 
+const gatherUtils = {
+    gatherStage: function (tender, gatherNode, sourceNode, prefix, helper) {
+        gatherNode[prefix + 'id'] = tender.id;
+        gatherNode[prefix + 'name'] = tender.name;
+
+        gatherNode[prefix + "qty"] = helper.add(gatherNode[prefix + "qty"], sourceNode.quantity);
+        gatherNode[prefix + "tp"] = helper.add(gatherNode[prefix + "tp"], sourceNode.total_price);
+
+        gatherNode[prefix + "contract_qty"] = helper.add(gatherNode[prefix + "contract_qty"], sourceNode.contract_qty);
+        gatherNode[prefix + "contract_tp"] = helper.add(gatherNode[prefix + "contract_tp"], sourceNode.contract_tp);
+        gatherNode[prefix + "qc_qty"] = helper.add(gatherNode[prefix + "qc_qty"], sourceNode.qc_qty);
+        gatherNode[prefix + "qc_tp"] = helper.add(gatherNode[prefix + "qc_tp"], sourceNode.qc_tp);
+        gatherNode[prefix + "gather_qty"] = helper.add(gatherNode[prefix + "gather_qty"], sourceNode.gather_qty);
+        gatherNode[prefix + "gather_tp"] = helper.add(gatherNode[prefix + "gather_tp"], sourceNode.gather_tp);
+
+        gatherNode[prefix + "pre_contract_qty"] = helper.add(gatherNode[prefix + "pre_contract_qty"], sourceNode.pre_contract_qty);
+        gatherNode[prefix + "pre_contract_tp"] = helper.add(gatherNode[prefix + "pre_contract_tp"], sourceNode.pre_contract_tp);
+        gatherNode[prefix + "pre_qc_qty"] = helper.add(gatherNode[prefix + "pre_qc_qty"], sourceNode.pre_qc_qty);
+        gatherNode[prefix + "pre_qc_tp"] = helper.add(gatherNode[prefix + "pre_qc_tp"], sourceNode.pre_qc_tp);
+        gatherNode[prefix + "pre_gather_qty"] = helper.add(gatherNode[prefix + "pre_gather_qty"], sourceNode.pre_gather_qty);
+        gatherNode[prefix + "pre_gather_tp"] = helper.add(gatherNode[prefix + "pre_gather_tp"], sourceNode.pre_gather_tp);
+
+        gatherNode[prefix + "end_contract_qty"] = helper.add(gatherNode[prefix + "end_contract_qty"], sourceNode.end_contract_qty);
+        gatherNode[prefix + "end_contract_tp"] = helper.add(gatherNode[prefix + "end_contract_tp"], sourceNode.end_contract_tp);
+        gatherNode[prefix + "end_qc_qty"] = helper.add(gatherNode[prefix + "end_qc_qty"], sourceNode.end_qc_qty);
+        gatherNode[prefix + "end_qc_tp"] = helper.add(gatherNode[prefix + "end_qc_tp"], sourceNode.end_qc_tp);
+        gatherNode[prefix + "end_gather_qty"] = helper.add(gatherNode[prefix + "end_gather_qty"], sourceNode.end_gather_qty);
+        gatherNode[prefix + "end_gather_tp"] = helper.add(gatherNode[prefix + "end_gather_tp"], sourceNode.end_gather_tp);
+
+        gatherNode['s_' + "qty"] = helper.add(gatherNode['s_' + "qty"], sourceNode.quantity);
+        gatherNode['s_' + "tp"] = helper.add(gatherNode['s_' + "tp"], sourceNode.total_price);
+
+        gatherNode['s_' + "contract_qty"] = helper.add(gatherNode['s_' + "contract_qty"], sourceNode.contract_qty);
+        gatherNode['s_' + "contract_tp"] = helper.add(gatherNode['s_' + "contract_tp"], sourceNode.contract_tp);
+        gatherNode['s_' + "qc_qty"] = helper.add(gatherNode['s_' + "qc_qty"], sourceNode.qc_qty);
+        gatherNode['s_' + "qc_tp"] = helper.add(gatherNode['s_' + "qc_tp"], sourceNode.qc_tp);
+        gatherNode['s_' + "gather_qty"] = helper.add(gatherNode['s_' + "gather_qty"], sourceNode.gather_qty);
+        gatherNode['s_' + "gather_tp"] = helper.add(gatherNode['s_' + "gather_tp"], sourceNode.gather_tp);
+
+        gatherNode['s_' + "pre_contract_qty"] = helper.add(gatherNode['s_' + "pre_contract_qty"], sourceNode.pre_contract_qty);
+        gatherNode['s_' + "pre_contract_tp"] = helper.add(gatherNode['s_' + "pre_contract_tp"], sourceNode.pre_contract_tp);
+        gatherNode['s_' + "pre_qc_qty"] = helper.add(gatherNode['s_' + "pre_qc_qty"], sourceNode.pre_qc_qty);
+        gatherNode['s_' + "pre_qc_tp"] = helper.add(gatherNode['s_' + "pre_qc_tp"], sourceNode.pre_qc_tp);
+        gatherNode['s_' + "pre_gather_qty"] = helper.add(gatherNode['s_' + "pre_gather_qty"], sourceNode.pre_gather_qty);
+        gatherNode['s_' + "pre_gather_tp"] = helper.add(gatherNode['s_' + "pre_gather_tp"], sourceNode.pre_gather_tp);
+
+        gatherNode['s_' + "end_contract_qty"] = helper.add(gatherNode['s_' + "end_contract_qty"], sourceNode.end_contract_qty);
+        gatherNode['s_' + "end_contract_tp"] = helper.add(gatherNode['s_' + "end_contract_tp"], sourceNode.end_contract_tp);
+        gatherNode['s_' + "end_qc_qty"] = helper.add(gatherNode['s_' + "end_qc_qty"], sourceNode.end_qc_qty);
+        gatherNode['s_' + "end_qc_tp"] = helper.add(gatherNode['s_' + "end_qc_tp"], sourceNode.end_qc_tp);
+        gatherNode['s_' + "end_gather_qty"] = helper.add(gatherNode['s_' + "end_gather_qty"], sourceNode.end_gather_qty);
+        gatherNode['s_' + "end_gather_tp"] = helper.add(gatherNode['s_' + "end_gather_tp"], sourceNode.end_gather_tp);
+    },
+    gatherZone: function (tender, gatherNode, sourceNode, prefix, helper) {
+        gatherNode[prefix + 'id'] = tender.id;
+        gatherNode[prefix + 'name'] = tender.name;
+
+        gatherNode[prefix + "qty"] = helper.add(gatherNode[prefix + "qty"], sourceNode.quantity);
+        gatherNode[prefix + "tp"] = helper.add(gatherNode[prefix + "tp"], sourceNode.total_price);
+
+        gatherNode[prefix + "contract_qty"] = helper.add(gatherNode[prefix + "contract_qty"], sourceNode.contract_qty);
+        gatherNode[prefix + "contract_tp"] = helper.add(gatherNode[prefix + "contract_tp"], sourceNode.contract_tp);
+        gatherNode[prefix + "qc_qty"] = helper.add(gatherNode[prefix + "qc_qty"], sourceNode.qc_qty);
+        gatherNode[prefix + "qc_tp"] = helper.add(gatherNode[prefix + "qc_tp"], sourceNode.qc_tp);
+        gatherNode[prefix + "gather_qty"] = helper.add(gatherNode[prefix + "gather_qty"], sourceNode.gather_qty);
+        gatherNode[prefix + "gather_tp"] = helper.add(gatherNode[prefix + "gather_tp"], sourceNode.gather_tp);
+
+        gatherNode['s_' + "qty"] = helper.add(gatherNode['s_' + "qty"], sourceNode.quantity);
+        gatherNode['s_' + "tp"] = helper.add(gatherNode['s_' + "tp"], sourceNode.total_price);
+
+        gatherNode['s_' + "contract_qty"] = helper.add(gatherNode['s_' + "contract_qty"], sourceNode.contract_qty);
+        gatherNode['s_' + "contract_tp"] = helper.add(gatherNode['s_' + "contract_tp"], sourceNode.contract_tp);
+        gatherNode['s_' + "qc_qty"] = helper.add(gatherNode['s_' + "qc_qty"], sourceNode.qc_qty);
+        gatherNode['s_' + "qc_tp"] = helper.add(gatherNode['s_' + "qc_tp"], sourceNode.qc_tp);
+        gatherNode['s_' + "gather_qty"] = helper.add(gatherNode['s_' + "gather_qty"], sourceNode.gather_qty);
+        gatherNode['s_' + "gather_tp"] = helper.add(gatherNode['s_' + "gather_tp"], sourceNode.gather_tp);
+    },
+    gatherSpecial: function (gatherNode, sourceNode, prefix, helper) {
+        gatherNode[prefix + "qty"] = helper.add(gatherNode[prefix + "qty"], sourceNode.quantity);
+        gatherNode[prefix + "tp"] = helper.add(gatherNode[prefix + "tp"], sourceNode.total_price);
+    },
+};
+
 module.exports = app => {
     class RptGatherMemory extends app.BaseService {
 
@@ -39,7 +123,7 @@ module.exports = app => {
             return '';
         }
 
-        async _gatherMonthData(sTender, index, month) {
+        async _gatherStageData(index, tender, stage, hasPre) {
             const helper = this.ctx.helper;
             const billsTree = new Ledger.billsTree(this.ctx, {
                 id: 'ledger_id',
@@ -52,22 +136,20 @@ module.exports = app => {
                 calcFields: ['deal_tp', 'total_price', 'contract_tp', 'qc_tp', 'gather_tp', 'pre_contract_tp', 'pre_qc_tp', 'pre_gather_tp'],
                 calc: function (node) {
                     if (node.children && node.children.length === 0) {
-                        // node.pre_gather_qty = self.ctx.helper.add(node.pre_contract_qty, node.pre_qc_qty);
+                        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 = self.ctx.helper.add(node.pre_contract_qty, node.contract_qty);
-                        // node.end_qc_qty = self.ctx.helper.add(node.pre_qc_qty, node.qc_qty);
-                        // node.end_gather_qty = self.ctx.helper.add(node.pre_gather_qty, node.gather_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 = self.ctx.helper.add(node.pre_contract_tp, node.pre_qc_tp);
+                    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 = self.ctx.helper.add(node.pre_contract_tp, node.contract_tp);
-                    // node.end_qc_tp = self.ctx.helper.add(node.pre_qc_tp, node.qc_tp);
-                    // node.end_gather_tp = self.ctx.helper.add(node.pre_gather_tp, node.gather_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 tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
             const billsData = await this.ctx.service.ledger.getData(tender.id);
-            const stage = await this.ctx.service.stage.getDataByCondition({tid: tender.id, s_time: month});
             if (stage) {
                 await this.ctx.service.stage.doCheckStage(stage);
                 if (stage.readOnly) {
@@ -82,33 +164,26 @@ module.exports = app => {
                         {data: curStage, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: '', relaId: 'lid'}
                     ]);
                 }
+                if (hasPre) {
+                    const preStage = stage.order > 1 ? await this.ctx.service.stageBillsFinal.getFinalData(tender, stage.order - 1) : [];
+                    this.ctx.helper.assignRelaData(posData, [
+                        {data: preStage, fields: ['contract_qty', 'qc_qty'], prefix: 'pre_', relaId: 'pid'}
+                    ]);
+                }
             }
             billsTree.loadDatas(billsData);
             billsTree.calculateAll();
             this.resultTree.loadGatherTree(billsTree, function (gatherNode, sourceNode) {
-                gatherNode['t_' + index + '_id'] = tender.id;
-                gatherNode['t_' + index + '_name'] = tender.name;
-
-                gatherNode['t_' + index + "_qty"] = helper.add(gatherNode['t_' + index + "_qty"], sourceNode.quantity);
-                gatherNode['t_' + index + "_tp"] = helper.add(gatherNode['t_' + index + "_tp"], sourceNode.total_price);
-                gatherNode['t_' + index + "_contract_qty"] = helper.add(gatherNode['t_' + index + "_contract_qty"], sourceNode.contract_qty);
-                gatherNode['t_' + index + "_contract_tp"] = helper.add(gatherNode['t_' + index + "_contract_tp"], sourceNode.contract_tp);
-                gatherNode['t_' + index + "_qc_qty"] = helper.add(gatherNode['t_' + index + "_qc_qty"], sourceNode.contract_qty);
-                gatherNode['t_' + index + "_qc_tp"] = helper.add(gatherNode['t_' + index + "_qc_tp"], sourceNode.contract_tp);
-                gatherNode['t_' + index + "_gather_qty"] = helper.add(gatherNode['t_' + index + "_gather_qty"], sourceNode.contract_qty);
-                gatherNode['t_' + index + "_gather_tp"] = helper.add(gatherNode['t_' + index + "_gather_tp"], sourceNode.contract_tp);
-
-                gatherNode['s_' + "qty"] = helper.add(gatherNode['t_' + "qty"], sourceNode.quantity);
-                gatherNode['s_' + "tp"] = helper.add(gatherNode['t_' + "tp"], sourceNode.total_price);
-                gatherNode['s_' + "contract_qty"] = helper.add(gatherNode['t_' + "contract_qty"], sourceNode.contract_qty);
-                gatherNode['s_' + "contract_tp"] = helper.add(gatherNode['t_' + "contract_tp"], sourceNode.contract_tp);
-                gatherNode['s_' + "qc_qty"] = helper.add(gatherNode['t_' + "qc_qty"], sourceNode.contract_qty);
-                gatherNode['s_' + "qc_tp"] = helper.add(gatherNode['t_' + "qc_tp"], sourceNode.contract_tp);
-                gatherNode['s_' + "gather_qty"] = helper.add(gatherNode['t_' + "gather_qty"], sourceNode.contract_qty);
-                gatherNode['s_' + "gather_tp"] = helper.add(gatherNode['t_' + "gather_tp"], sourceNode.contract_tp);
+                gatherUtils.gatherStage(tender, gatherNode, sourceNode, 't_' + index + '_', helper);
             });
         }
 
+        async _gatherMonthData(sTender, index, month, hasPre) {
+            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+            const stage = await this.ctx.service.stage.getDataByCondition({tid: tender.id, s_time: month});
+            await this._gatherStageData(index, tender, stage, hasPre);
+        }
+
         async _gatherZoneData(sTender, index, zone) {
             const helper = this.ctx.helper;
             /**
@@ -187,27 +262,38 @@ module.exports = app => {
             billsTree.loadDatas(billsData);
             billsTree.calculateAll();
             this.resultTree.loadGatherTree(billsTree, function (gatherNode, sourceNode) {
-                gatherNode['t_' + index + '_id'] = tender.id;
-                gatherNode['t_' + index + '_name'] = tender.name;
-
-                gatherNode['t_' + index + "_qty"] = helper.add(gatherNode['t_' + index + "_qty"], sourceNode.quantity);
-                gatherNode['t_' + index + "_tp"] = helper.add(gatherNode['t_' + index + "_tp"], sourceNode.total_price);
-                gatherNode['t_' + index + "_contract_qty"] = helper.add(gatherNode['t_' + index + "_contract_qty"], sourceNode.contract_qty);
-                gatherNode['t_' + index + "_contract_tp"] = helper.add(gatherNode['t_' + index + "_contract_tp"], sourceNode.contract_tp);
-                gatherNode['t_' + index + "_qc_qty"] = helper.add(gatherNode['t_' + index + "_qc_qty"], sourceNode.contract_qty);
-                gatherNode['t_' + index + "_qc_tp"] = helper.add(gatherNode['t_' + index + "_qc_tp"], sourceNode.contract_tp);
-                gatherNode['t_' + index + "_gather_qty"] = helper.add(gatherNode['t_' + index + "_gather_qty"], sourceNode.contract_qty);
-                gatherNode['t_' + index + "_gather_tp"] = helper.add(gatherNode['t_' + index + "_gather_tp"], sourceNode.contract_tp);
-
-                gatherNode['s_' + "qty"] = helper.add(gatherNode['t_' + "qty"], sourceNode.quantity);
-                gatherNode['s_' + "tp"] = helper.add(gatherNode['t_' + "tp"], sourceNode.total_price);
-                gatherNode['s_' + "contract_qty"] = helper.add(gatherNode['t_' + "contract_qty"], sourceNode.contract_qty);
-                gatherNode['s_' + "contract_tp"] = helper.add(gatherNode['t_' + "contract_tp"], sourceNode.contract_tp);
-                gatherNode['s_' + "qc_qty"] = helper.add(gatherNode['t_' + "qc_qty"], sourceNode.contract_qty);
-                gatherNode['s_' + "qc_tp"] = helper.add(gatherNode['t_' + "qc_tp"], sourceNode.contract_tp);
-                gatherNode['s_' + "gather_qty"] = helper.add(gatherNode['t_' + "gather_qty"], sourceNode.contract_qty);
-                gatherNode['s_' + "gather_tp"] = helper.add(gatherNode['t_' + "gather_tp"], sourceNode.contract_tp);
+                gatherUtils.gatherZone(gatherNode, sourceNode, 't_' + index + '_', helper);
+            });
+        }
+
+        async _gatherFinalData(sTender, index, hasPre) {
+            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+            const stages = await this.db.select(this.tableName, {
+                where: { tid: tender.id },
+                orders: [['order', 'desc']],
             });
+            if (stages.length !== 0) {
+                const lastStage = stages[stages.length - 1];
+                if (lastStage.status === auditConst.stage.status.uncheck && lastStage.user_id !== this.ctx.session.sessionUser.accountId) {
+                    stages.splice(stages.length - 1, 1);
+                }
+            }
+            await this._gatherStageData(index, tender, stages[0], hasPre);
+        }
+
+        async _gatherCheckedFinalData(sTender, index, hasPre) {
+            const tender = await this.ctx.service.tender.getCheckTender(sTender.tid);
+            const stages = await this.db.select(this.tableName, {
+                where: { tid: tender.id },
+                orders: [['order', 'desc']],
+            });
+            if (stages.length !== 0) {
+                const lastStage = stages[stages.length - 1];
+                if (lastStage.status !== auditConst.stage.status.checked) {
+                    stages.splice(stages.length - 1, 1);
+                }
+            }
+            await this._gatherStageData(index, tender, stages[0], hasPre);
         }
 
         async _gatherSpecialData(sTender, sKey) {
@@ -227,17 +313,10 @@ module.exports = app => {
             billsTree.loadDatas(billsData);
             billsTree.calculateAll();
             this.resultTree.loadGatherTree(billsTree, function (gatherNode, sourceNode) {
-                gatherNode['ts_' + sKey + "_qty"] = helper.add(gatherNode['ts_' + sKey + "_qty"], sourceNode.quantity);
-                gatherNode['ts_' + sKey + "_tp"] = helper.add(gatherNode['ts_' + sKey + "_tp"], sourceNode.total_price);
+                gatherUtils.gatherSpecial(gatherNode, sourceNode, 'ts_' + sKey + '_', helper);
             })
         }
 
-        _calculateSum(tree) {
-            for (const node of tree.nodes) {
-
-            }
-        }
-
         async getGatherStageBills(memFieldKeys, gsDefine, gsCustom) {
             if (!gsDefine || !gsDefine.enable) return [];
             if (!gsCustom || !gsCustom.tenders || gsCustom.tenders.length === 0) return [];
@@ -248,10 +327,16 @@ module.exports = app => {
                 if (specialKey === '') {
                     switch (gsDefine.setting.type) {
                         case 'month':
-                            await this._gatherMonthData(tender, commonIndex, gsCustom.month);
+                            await this._gatherMonthData(tender, commonIndex, gsCustom.month, gsDefine.hasPre);
                             break;
                         case 'zone':
-                            await this._gatherZoneData(tender, commonIndex, gsCustom.month);
+                            await this._gatherZoneData(tender, commonIndex, gsCustom.zone);
+                            break;
+                        case 'final':
+                            await this._gatherFinalData(tender, commonIndex, gsDefine.hasPre);
+                            break;
+                        case 'checked-final':
+                            await this._gatherCheckedFinalData(tender, commonIndex, gsDefine.hasPre);
                             break;
                     }
                     commonIndex++;
@@ -261,7 +346,6 @@ module.exports = app => {
             }
 
             this.resultTree.generateSortNodes();
-            this._calculateSum(this.resultTree);
             return this.resultTree.getDefaultDatas();
         }