/** * Created by Tony on 2017/3/13. */ let JV = require('../rpt_component/jpc_value_define'); let Template = require('../models/rpt_template'); let TemplateData = require('../models/rpt_tpl_data_demo'); let JpcEx = require('../rpt_component/jpc_ex'); //let cache = require('../../../public/cache/cacheUtil'); let rptUtil = require("../util/rpt_util"); let rpt_xl_util = require('../util/rpt_excel_util'); let fs = require('fs'); let strUtil = require('../../../public/stringUtil'); //统一回调函数 let callback = function(req, res, err, data){ if(err){ res.json({success: false, error: err}); } else{ //res.send({success: true, data: data}); res.json({success:true, data: data}); } }; module.exports = { getReportAllPages: function(req, res){ let grp_id = req.body.grp_id; let tpl_id = req.body.tpl_id; let pageSize = req.body.pageSize; let rptTpl = null; Template.findOne({GROUP_KEY: grp_id, ID_KEY: tpl_id}, '-_id').exec().then(function(rst) { rptTpl = rst; if (rptTpl) { return TemplateData.getPromise(tpl_id); } else { callback(req, res, 'No report template was found!', null); } }).then(function(tplData){ if (tplData) { let printCom = JpcEx.createNew(); rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize; let defProperties = rptUtil.getReportDefaultCache(); printCom.initialize(rptTpl); printCom.analyzeData(rptTpl, tplData, defProperties); let maxPages = printCom.totalPages; let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties); if (pageRst) { callback(req, res, null, pageRst); } else { callback(req, res, "Have errors while on going...", null); } } else { callback(req, res, 'No report data were found!', null); } } ); }, getExcel: function(req, res) { let grp_id = req.params.id, tpl_id = req.params.pm, pageSize = req.params.size, rptName = req.params.rptName; let rptTpl = null; Template.findOne({GROUP_KEY: grp_id, ID_KEY: tpl_id}, '-_id').exec().then(function(rst) { rptTpl = rst; if (rptTpl) { return TemplateData.getPromise(tpl_id); } else { callback(req, res, 'No report template was found!', null); } }).then(function(tplData){ if (tplData) { let printCom = JpcEx.createNew(); rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize; let defProperties = rptUtil.getReportDefaultCache(); printCom.initialize(rptTpl); printCom.analyzeData(rptTpl, tplData, defProperties); let maxPages = printCom.totalPages; let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties); if (pageRst) { rpt_xl_util.exportExcel(pageRst, rptName, null, function(newName){ res.setHeader('Content-Type', 'application/vnd.openxmlformats'); res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".xlsx"); let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + newName + '.xlsx'); filestream.on('data', function(chunk) { res.write(chunk); }); filestream.on('end', function() { res.end(); }); }); } else { callback(req, res, "Have errors while on going...", null); } } else { callback(req, res, 'No report data were found!', null); } } ); } };