lib_controller.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. 'use strict';
  2. /**
  3. * 指标库控制器
  4. *
  5. * @author Mai
  6. * @data 2018/4/19
  7. * @version
  8. */
  9. const fs = require('fs');
  10. const path = require('path');
  11. const awaitWriteStream = require('await-stream-ready').write;
  12. const sendToWormhole = require('stream-wormhole');
  13. const libConst = require('../const/lib');
  14. module.exports = app => {
  15. class LibController extends app.BaseController {
  16. /**
  17. * 指标库页面
  18. *
  19. * @param {object} ctx - egg全局context
  20. * @return {void}
  21. */
  22. async index (ctx) {
  23. let status = ctx.query.status;
  24. const libList = await ctx.service.quotaLib.getList(status);
  25. //获取指标源状态数量
  26. const libStatus = await ctx.service.quotaLib.getStatusNum();
  27. const renderData = {
  28. status,
  29. libList,
  30. libConst,
  31. libStatus
  32. };
  33. await this.layout('lib/index.ejs', renderData, 'lib/modal.ejs');
  34. }
  35. /**
  36. * 上传指标源
  37. *
  38. * @param {object} ctx - egg全局context
  39. * @return {void}
  40. */
  41. async upload(ctx) {
  42. const parts = ctx.multipart({ autoFields: true });
  43. let addData = {};
  44. let stream;
  45. while ((stream = await parts()) != null) {
  46. const filename = stream.filename.toLowerCase();
  47. if(filename === ''){
  48. throw '请上传文件';
  49. }
  50. const fileInfo = path.parse(filename);
  51. let create_time = Date.parse( new Date())/1000;
  52. let filepath = libConst.quotaLibDir + create_time + fileInfo.ext;
  53. addData = {
  54. name: fileInfo.name,
  55. path: filepath,
  56. create_time: create_time
  57. };
  58. const target = path.join(filepath);
  59. const writeStream = fs.createWriteStream(target);
  60. try {
  61. await awaitWriteStream(stream.pipe(writeStream));
  62. } catch (err) {
  63. await sendToWormhole(stream);
  64. throw err;
  65. }
  66. }
  67. if(addData !== {}){
  68. try {
  69. //插入数据到数据库
  70. const result = await ctx.service.quotaLib.add(addData);
  71. if (!result) {
  72. throw '新增指标源数据失败';
  73. }
  74. ctx.redirect('/lib');
  75. } catch (err) {
  76. throw err;
  77. }
  78. }else{
  79. throw '请上传文件';
  80. }
  81. }
  82. }
  83. return LibController;
  84. }