import { Controller, Query, Body, Get, Post, Inject } from '@midwayjs/core'; import { HttpService } from '@midwayjs/axios'; import { Context } from '@midwayjs/koa'; import { ApiTags } from '@midwayjs/swagger'; import { UtilService } from '../service/util.service'; import { ServiceError } from '../error/service.error'; const Excel = require('exceljs'); @ApiTags(['工具']) @Controller('/util') export class UtilController { @Inject() service: UtilService; @Inject() ctx: Context; @Inject() httpService: HttpService; @Post('/toTotal') async toTotal() { const result = await this.service.toTotal(); return result; } @Get('/oneStatistics') async oneStatistics(@Query('type') type: string) { const result = await this.service.oneStatistics(type); return result; } @Get('/twoStatistics') async twoStatistics(@Query('type') type: string) { const result = await this.service.twoStatistics(type); return result; } @Get('/thrStatistics') async thrStatistics(@Query('type') type: string) { const result = await this.service.thrStatistics(type); return result; } @Get('/fourStatistics') async fourStatistics(@Query('type') type: string) { const result = await this.service.fourStatistics(type); return result; } @Get('/fiveStatistics') async fiveStatistics(@Query('type') type: string) { const result = await this.service.fiveStatistics(type); return result; } @Get('/sixStatistics') async sixStatistics(@Query('type') type: string) { const result = await this.service.sixStatistics(type); return result; } @Get('/cstatistics') async Companystatistics() { const result = await this.service.Companystatistics(); return result; } @Get('/sstatistics') async Supplystatistics() { const result = await this.service.Supplystatistics(); return result; } @Get('/dstatistics') async Demandstatistics() { const result = await this.service.Demandstatistics(); return result; } @Get('/pstatistics') async Projectstatistics() { const result = await this.service.Projectstatistics(); return result; } @Get('/astatistics') async Achievementstatistics() { const result = await this.service.Achievementstatistics(); return result; } @Post('/toExport') async toExport(@Body() data: object) { const result = await this.service.toExport(data); return result; } @Post('/toImport') async upload() { const body: any = this.ctx.request.body; const fData = await this.getFile(body.url); const workbook = new Excel.Workbook(); await workbook.xlsx.load(fData); const result = []; const sheetList = []; workbook.eachSheet(sheet => { // 整理出的数据 const rows = []; sheet.eachRow((row, ri) => { if (ri !== 1) { const rd = [null]; row.eachCell({ includeEmpty: true }, c => { const value = c.value; rd.push(value); }); rows.push(rd); } }); sheetList.push({ sheet: sheet.name, rows }); }); for (const s of sheetList) { const { sheet, rows } = s; const func = this.service.nameToFunction(sheet); if (!func) continue; try { const num = await this.service[func](rows); result[sheet] = num.result; result.push({ key: sheet, num: num.result, errorList: num.errorList.join(',') }); } catch (error) { console.log(error); result.push({ key: sheet, num: 'error' }); } } return result; } /** * 根据短地址获取文件 * @param {String} uri 短地址 */ async getFile(uri) { try { const result = await this.httpService.request({ baseURL: 'http://127.0.0.1:19700', method: 'get', url: uri, responseType: 'arraybuffer', headers: { 'Content-Type': 'application/octet-stream', Accept: 'application/octet-stream', }, }); if (!(result && result.data)) { throw new ServiceError('未找到指定文件'); } return result.data; } catch (error) { console.log(`error: ${uri}`); console.log(Object.keys(error)); for (const key in error) { console.log(key); console.log(error[key]); } } } }