Explorar o código

code sync from cost

TonyKang %!s(int64=7) %!d(string=hai) anos
pai
achega
23b9722e32

+ 41 - 35
modules/reports/controllers/rpt_controller.js

@@ -8,6 +8,9 @@ import async from "async";
 import JV from "../rpt_component/jpc_value_define";
 
 let Template = mongoose.model('rpt_templates');
+let rptTplDataFacade = require("../facade/rpt_tpl_data_facade");
+//let fsUtil = require("../../../public/fsUtil");
+
 import rptTplFacade from "../facade/rpt_template_facade";
 import demoTemplateFacade from "../facade/rpt_tpl_data_demo_facade";
 
@@ -17,6 +20,7 @@ import rpt_xl_util from "../util/rpt_excel_util";
 import rpt_pdf_util from "../util/rpt_pdf_util";
 import fs from "fs";
 import strUtil from "../../../public/stringUtil";
+import rptDataExtractor from "../util/rpt_construct_data_util";
 
 //统一回调函数
 let callback = function(req, res, err, data){
@@ -68,42 +72,36 @@ function getAllPagesCommonOrg(rpt_id, pageSize, option, cb) {
     );
 }
 
-function getAllPagesCommon(rpt_id, pageSize, cb) {
+function getAllPagesCommon(user_id, prj_id, rpt_id, pageSize, option, cb) {
     let rptTpl = null;
     rptTplFacade.getRptTemplate(rpt_id).then(function(rst) {
         rptTpl = rst;
         if (rptTpl) {
-            let tplData = {};
-            if (rptTpl[JV.NODE_FIELD_MAP]) {
-                //1. 离散数据
-                if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS] && rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS].length > 0) {
-                    tplData[JV.DATA_DISCRETE_DATA] = [];
-                }
-                //2. 主数据
-                if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS] && rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS].length > 0) {
-                    tplData[JV.DATA_MASTER_DATA] = [];
-                }
-                //3. 从数据
-                if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS] && rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS].length > 0) {
-                    tplData[JV.DATA_DETAIL_DATA] = [];
-                }
-                //2. Ex主数据
-                if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS_EX] && rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS_EX].length > 0) {
-                    tplData[JV.DATA_MASTER_DATA_EX] = [];
-                }
-                //3. Ex从数据
-                if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS_EX] && rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS_EX].length > 0) {
-                    tplData[JV.DATA_DETAIL_DATA_EX] = [];
-                }
-                //4. 重点: 开始组装$PROJECT对象
-                let $PROJECT = {};
-                //let $PROJECT.COMMON = {};
-                //return demoTemplateData.getPromise(rptTpl.ID_KEY);
-                //return demoTemplateData.findOne({"Data_Key": rptTpl.ID_KEY}).exec();
+            let rptDataUtil = new rptDataExtractor();
+            rptDataUtil.initialize((rptTpl._doc)?rptTpl._doc:rptTpl);
+            let filter = rptDataUtil.getDataRequestFilter();
+            rptTplDataFacade.prepareProjectData(user_id, prj_id, filter, function (err, msg, rawDataObj) {
+                if (!err) {
+                    let tplData = rptDataUtil.assembleData(rawDataObj);
+                    let printCom = JpcEx.createNew();
+                    rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize;
+                    let defProperties = rptUtil.getReportDefaultCache();
+                    let dftOption = option||JV.PAGING_OPTION_NORMAL;
+                    printCom.initialize(rptTpl);
+                    printCom.analyzeData(rptTpl, tplData, defProperties, dftOption);
+                    let maxPages = printCom.totalPages;
+                    let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties);
+                    if (pageRst) {
+                        //fsUtil.wirteObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult.js");
+                        cb(null, pageRst);
+                    } else {
+                        cb('Have errors while on going...', null);
+                    }
 
-            } else {
-                cb('No report template data were found!', null);
-            }
+                } else {
+                    cb('No report data were found!', null);
+                }
+            });
         } else {
             cb('No report template was found!', null);
         }
@@ -111,7 +109,15 @@ function getAllPagesCommon(rpt_id, pageSize, cb) {
 }
 
 module.exports = {
-    getReportAllPages: function(req, res){
+    getReportAllPages: function (req, res) {
+        let rpt_id = req.body.rpt_tpl_id, prj_id = req.body.prj_id,
+            user_id = req.body.user_id, pageSize = req.body.pageSize;
+        getAllPagesCommon(rpt_id, prj_id, user_id, pageSize, function (err, pageRst) {
+            callback(req, res, err, pageRst);
+        });
+    },
+
+    getTestReportAllPages: function(req, res){
         let rpt_id = req.body.ID;
         let pageSize = req.body.pageSize;
         getAllPagesCommonOrg(rpt_id, pageSize, JV.PAGING_OPTION_NORMAL, function(err, pageRst){
@@ -119,7 +125,7 @@ module.exports = {
             callback(req, res, err, pageRst);
         })
     },
-    getExcel: function(req, res) {
+    getTestExcel: function(req, res) {
         let rpt_id = req.params.id,
             pageSize = req.params.size,
             rptName = req.params.rptName,
@@ -145,7 +151,7 @@ module.exports = {
             }
         })
     },
-    getExcelInOneBook: function(req, res) {
+    getTestExcelInOneBook: function(req, res) {
         let rpt_ids = req.params.ids.split(','),
             pageSize = req.params.size,
             rptName = req.params.rptName,
@@ -185,7 +191,7 @@ module.exports = {
             }
         })
     },
-    getPDF:function (req, res) {
+    getTestPDF:function (req, res) {
         let rpt_id = req.params.id,
             pageSize = req.params.size,
             rptName = req.params.rptName;

+ 10 - 4
modules/reports/routes/report_router.js

@@ -17,11 +17,17 @@ module.exports =function (app) {
                     userID: req.session.managerData.userID});
         }
     });
-    rptRouter.post('/getReport', reportController.getReportAllPages);
 
-    rptRouter.get('/getExcel/:id/:size/:rptName/:isOneSheet/:option', reportController.getExcel);
-    rptRouter.get('/getExcelInOneBook/:ids/:size/:rptName/:option', reportController.getExcelInOneBook);
+    //test
+    rptRouter.post('/getTestReport', reportController.getTestReportAllPages);
+    rptRouter.get('/getTestExcel/:id/:size/:rptName/:isOneSheet/:option', reportController.getTestExcel);
+    rptRouter.get('/getTestExcelInOneBook/:ids/:size/:rptName/:option', reportController.getTestExcelInOneBook);
+    rptRouter.get('/getTestPDF/:id/:size/:rptName', reportController.getTestPDF);
+    //now is the real:
+    rptRouter.post('/getReport', reportController.getReportAllPages);
+    // rptRouter.get('/getExcel/:id/:size/:rptName/:isOneSheet/:option', reportController.getExcel);
+    // rptRouter.get('/getExcelInOneBook/:ids/:size/:rptName/:option', reportController.getExcelInOneBook);
+    // rptRouter.get('/getPDF/:id/:size/:rptName', reportController.getPDF);
 
-    rptRouter.get('/getPDF/:id/:size/:rptName', reportController.getPDF);//2/A4/07-1表
     app.use("/report_api", rptRouter);
 };

+ 26 - 5
modules/reports/util/rpt_construct_data_util.js

@@ -47,6 +47,12 @@ class Rpt_Data_Extractor {
                     if (field[JV.PROP_FIELD_EXP_MAP]) {
                         if (field[JV.PROP_FIELD_EXP_MAP].indexOf('.' + key + '.') >= 0) {
                             rst.push(key);
+                            if (key === projectConst.RATION_GLJ && (rst.indexOf(projectConst.PROJECTGLJ) < 0)) {
+                                //rst.push(projectConst.PROJECTGLJ);
+                            }
+                            if (key === projectConst.PROJECTGLJ && (rst.indexOf(projectConst.RATION_GLJ) < 0)) {
+                                rst.push(projectConst.RATION_GLJ);
+                            }
                         }
                     }
                 }
@@ -341,7 +347,7 @@ function ext_mainGetPropety(propKey) {
     return rst;
 }
 
-function ext_mainGetFee(feeKey) {
+function ext_mainGetFee(feeKey, dtlFeeKey) {
     let rst = [];
     let parentObj = this;
     let dtObj = parentObj["myOwnRawDataObj"];
@@ -349,7 +355,11 @@ function ext_mainGetFee(feeKey) {
         if (dtObj.hasOwnProperty("fees")) {
             for (let fee of dtObj["fees"]) {
                 if (fee["fieldName"] === feeKey) {
-                    rst.push(dtObj["fees"][feeKey]);
+                    if (dtlFeeKey) {
+                        rst.push(fee[dtlFeeKey]);
+                    } else {
+                        rst.push(fee["unitFee"]);
+                    }
                     break;
                 }
             }
@@ -380,22 +390,33 @@ function ext_getPropety(propKey) {
     return rst;
 }
 
-function ext_getFee(feeKey) {
+function ext_getFee(feeKey, dtlFeeKey) {
     let rst = [], parentObj = this;
     let dtObj = parentObj["myOwnRawDataObj"];
     if (feeKey && dtObj) {
         for (let dItem of dtObj.data) {
+            let hasValue = false;
             if (dItem.hasOwnProperty("fees")) {
                 for (let fee of dItem["fees"]) {
                     if (fee["fieldName"] === feeKey) {
-                        rst.push(dItem["fees"][feeKey]);
+                        if (dtlFeeKey) {
+                            rst.push(fee[dtlFeeKey]);
+                        } else {
+                            rst.push(fee["unitFee"]);
+                        }
+                        hasValue = true;
                         break;
                     }
                 }
             } else if (dItem.hasOwnProperty(feeKey)) {
+                hasValue = true;
                 rst.push(dItem[feeKey]);
             } else {
-                rst.push[0];
+                hasValue = true;
+                rst.push(0);
+            }
+            if (!hasValue) {
+                rst.push(0);
             }
         }
     }

+ 8 - 8
public/fsUtil.js

@@ -2,26 +2,26 @@
  * Created by Tony on 2017/4/10.
  */
 
-var fs = require('fs');
+let fs = require('fs');
 
 module.exports = {
     writeArrayToFile: function(arr, filePath) {
         if (arr && filePath && Array.isArray(arr)) {
-            var chunks = [], len = 0;
-            for (var i = 0; i < arr.length; i++) {
-                var buffer = new Buffer(arr[i]);
+            let chunks = [], len = 0;
+            for (let i = 0; i < arr.length; i++) {
+                let buffer = new Buffer(arr[i]);
                 chunks.push(buffer);
                 len += buffer.length;
                 //
             }
-            var resultBuffer = new Buffer(len);
-            for(var i=0,size=chunks.length,pos=0;i<size;i++){
+            let resultBuffer = new Buffer(len);
+            for(let i=0,size=chunks.length,pos=0;i<size;i++){
                 chunks[i].copy(resultBuffer,pos);
                 pos += chunks[i].length;
             }
             fs.writeFile(filePath, resultBuffer, function(err){
                 if(err) throw err;
-                console.log('Write file: ' + filePath + ' ok!');
+                //console.log('Write file: ' + filePath + ' ok!');
             });
         }
     },
@@ -32,4 +32,4 @@ module.exports = {
             this.writeArrayToFile(arr, filePath);
         }
     }
-}
+};