lib_controller.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. ctx.redirect('/lib');
  50. }
  51. const fileInfo = path.parse(filename);
  52. let create_time = Date.parse( new Date())/1000;
  53. let filepath = libConst.quotaLibDir + create_time + fileInfo.ext;
  54. addData = {
  55. name: fileInfo.name,
  56. path: filepath,
  57. create_time: create_time
  58. };
  59. const target = path.join(filepath);
  60. const writeStream = fs.createWriteStream(target);
  61. try {
  62. await awaitWriteStream(stream.pipe(writeStream));
  63. } catch (err) {
  64. await sendToWormhole(stream);
  65. throw err;
  66. }
  67. }
  68. if(addData !== {}){
  69. try {
  70. //插入数据到数据库
  71. const result = await ctx.service.quotaLib.add(addData);
  72. if (!result) {
  73. throw '新增指标源数据失败';
  74. }
  75. ctx.redirect('/lib');
  76. } catch (err) {
  77. throw err;
  78. }
  79. }else{
  80. throw '请上传文件';
  81. }
  82. }
  83. /**
  84. * 指标源详细页面
  85. *
  86. * @param {object} ctx - egg全局context
  87. * @return {void}
  88. */
  89. async detail (ctx) {
  90. let lid = ctx.params.id;
  91. lid = parseInt(lid);
  92. try{
  93. if(isNaN(lid) || lid < 0){
  94. throw '参数有误';
  95. }
  96. //获取指标源数据
  97. const libInfo = await ctx.service.quotaLib.getLibDataById(lid);
  98. // if(libInfo.status === libConst.status.enter){
  99. // throw '指标源已入库';
  100. // }
  101. const renderData = {
  102. libInfo,
  103. libConst
  104. };
  105. await this.layout('lib/detail.ejs', renderData, 'lib/detail-modal.ejs');
  106. } catch (error) {
  107. console.log(error);
  108. ctx.redirect('/lib');
  109. }
  110. }
  111. /**
  112. * 删除指标源
  113. *
  114. * @param {Object} ctx -egg全局变量
  115. * @return {void}
  116. */
  117. async delete(ctx) {
  118. let id = ctx.request.body.del_lib_id;
  119. let text = ctx.request.body.del_lib_text;
  120. id = parseInt(id);
  121. try {
  122. if (isNaN(id) || id <= 0) {
  123. throw '参数错误';
  124. }
  125. if(text === undefined || text !== '确认删除'){
  126. throw '参数错误';
  127. }
  128. const result = ctx.service.quotaLib.deleteLibById(id);
  129. if (!result) {
  130. throw '删除标段失败';
  131. }
  132. ctx.redirect('/lib');
  133. } catch (error) {
  134. console.log(error);
  135. ctx.redirect(ctx.request.headers.referer);
  136. }
  137. }
  138. /**
  139. * 指标源入库
  140. *
  141. * @param {Object} ctx -egg全局变量
  142. * @return {void}
  143. */
  144. async enter(ctx) {
  145. let id = ctx.request.body.enter_lib_id;
  146. id = parseInt(id);
  147. try {
  148. if (isNaN(id) || id <= 0) {
  149. throw '参数错误';
  150. }
  151. const result = ctx.service.quotaLib.enterLibById(id);
  152. if (!result) {
  153. throw '指标入库失败';
  154. }
  155. ctx.redirect('/lib');
  156. } catch (error) {
  157. console.log(error);
  158. ctx.redirect(ctx.request.headers.referer);
  159. }
  160. }
  161. }
  162. return LibController;
  163. }