deal_bills_controller.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date 2018/5/7
  7. * @version
  8. */
  9. const fs = require('fs');
  10. const path = require('path');
  11. const excel = require('node-xlsx');
  12. module.exports = app => {
  13. class DealBillsController extends app.BaseController {
  14. /**
  15. * 获取标段的签约清单数据
  16. * @param ctx
  17. * @return {Promise<void>}
  18. */
  19. async getData(ctx) {
  20. const responseData = {
  21. err: 0,
  22. msg: '',
  23. data: [],
  24. };
  25. try {
  26. responseData.data = await ctx.service.dealBills.getAllDataByCondition({ where: { tender_id: ctx.tender.id } });
  27. } catch (error) {
  28. this.log(error);
  29. responseData.err = 1;
  30. responseData.msg = error.toString();
  31. }
  32. ctx.body = responseData;
  33. }
  34. /**
  35. * 导入Excel数据
  36. * @param ctx
  37. * @return {Promise<void>}
  38. */
  39. async loadExcel(ctx) {
  40. const responseData = {
  41. err: 0,
  42. msg: '',
  43. data: [],
  44. };
  45. let stream;
  46. try {
  47. stream = await ctx.getFileStream();
  48. const create_time = Date.parse(new Date()) / 1000;
  49. const fileInfo = path.parse(stream.filename);
  50. const fileName = this.app.baseDir + '/app/public/deal_bills/uploads/' + 'deal_bills' + create_time + fileInfo.ext;
  51. // 保存文件
  52. await ctx.helper.saveStreamFile(stream, fileName);
  53. // 读取文件
  54. const sheet = excel.parse(fileName);
  55. if (!sheet || sheet.length === 0 || sheet[0] === undefined || sheet[0].data === undefined) {
  56. throw 'excel没有对应数据';
  57. }
  58. const result = await ctx.service.dealBills.importData(sheet[0], ctx.tender.id);
  59. if (!result) {
  60. throw '导入数据失败';
  61. }
  62. responseData.data = await this.ctx.service.dealBills.getAllDataByCondition({ where: { tender_id: ctx.tender.id } });
  63. } catch (err) {
  64. this.log(err);
  65. // 失败需要消耗掉stream 以防卡死
  66. if (stream) {
  67. await sendToWormhole(stream);
  68. }
  69. this.setMessage(err.toString(), this.messageType.ERROR);
  70. }
  71. ctx.body = responseData;
  72. }
  73. /**
  74. * 下载模板文件
  75. * @param ctx
  76. * @return {Promise<void>}
  77. */
  78. async download(ctx) {
  79. const file = ctx.params.file;
  80. if (file) {
  81. try {
  82. let fileName;
  83. if (file === 'template.xls') {
  84. fileName = this.app.baseDir + '/app/public/deal_bills/deal_template.xls';
  85. } else {
  86. const create_time = Date.parse(new Date()) / 1000;
  87. fileName = this.app.baseDir + '/app/public/deal_bills/downloads/' + ctx.tender.id + '-' + create_time + '.xlsx';
  88. // todo 导出签约清单Excel
  89. }
  90. ctx.body = await fs.readFileSync(fileName);
  91. } catch (err) {
  92. this.log(err);
  93. }
  94. }
  95. }
  96. }
  97. return DealBillsController;
  98. };