rpt_controller.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /**
  2. * Created by Tony on 2017/3/13.
  3. */
  4. let mongoose = require('mongoose');
  5. let JV = require('../rpt_component/jpc_value_define');
  6. let Template = mongoose.model('rpt_templates');
  7. let demoTemplateData = mongoose.model('rpt_temp_tpl_data');
  8. let JpcEx = require('../rpt_component/jpc_ex');
  9. let rptUtil = require("../util/rpt_util");
  10. let rpt_xl_util = require('../util/rpt_excel_util');
  11. let fs = require('fs');
  12. let strUtil = require('../../../public/stringUtil');
  13. //统一回调函数
  14. let callback = function(req, res, err, data){
  15. if(err){
  16. res.json({success: false, error: err});
  17. }
  18. else{
  19. //res.send({success: true, data: data});
  20. res.json({success:true, data: data});
  21. }
  22. };
  23. function getAllPagesCommon(req, res, rpt_id, pageSize, cb) {
  24. let rptTpl = null;
  25. Template.findOne({ID: rpt_id}, '-_id').exec().then(function(rst) {
  26. rptTpl = rst;
  27. if (rptTpl) {
  28. if (rptTpl.ID_KEY) {
  29. //return demoTemplateData.getPromise(rptTpl.ID_KEY);
  30. return demoTemplateData.findOne({"Data_Key": rptTpl.ID_KEY}).exec();
  31. } else {
  32. callback(req, res, 'No report template data were found!', null);
  33. }
  34. } else {
  35. callback(req, res, 'No report template was found!', null);
  36. }
  37. }).then(function(tplData){
  38. if (tplData) {
  39. let printCom = JpcEx.createNew();
  40. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize;
  41. let defProperties = rptUtil.getReportDefaultCache();
  42. printCom.initialize(rptTpl);
  43. printCom.analyzeData(rptTpl, tplData, defProperties);
  44. let maxPages = printCom.totalPages;
  45. let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties);
  46. if (pageRst) {
  47. cb(pageRst);
  48. } else {
  49. callback(req, res, "Have errors while on going...", null);
  50. }
  51. } else {
  52. callback(req, res, 'No report data were found!', null);
  53. }
  54. }
  55. );
  56. };
  57. module.exports = {
  58. getReportAllPages: function(req, res){
  59. let rpt_id = req.body.ID;
  60. let pageSize = req.body.pageSize;
  61. getAllPagesCommon(req, res, rpt_id, pageSize, function(pageRst){
  62. //fs.writeFileSync('D:/GitHome/ConstructionOperation/tmp/testRpt.js', JSON.stringify(pageRst));
  63. callback(req, res, null, pageRst);
  64. })
  65. },
  66. getExcel: function(req, res) {
  67. let rpt_id = req.params.id,
  68. pageSize = req.params.size,
  69. rptName = req.params.rptName,
  70. isOneSheet = req.params.isOneSheet;
  71. ;
  72. getAllPagesCommon(req, res, rpt_id, pageSize, function(pageRst){
  73. rpt_xl_util.exportExcel(pageRst, pageSize, rptName, isOneSheet, function(newName){
  74. res.setHeader('Content-Type', 'application/vnd.openxmlformats');
  75. res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".xlsx");
  76. let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + newName + '.xlsx');
  77. filestream.on('data', function(chunk) {
  78. res.write(chunk);
  79. });
  80. filestream.on('end', function() {
  81. res.end();
  82. });
  83. });
  84. })
  85. }
  86. };