wuyi 1 سال پیش
والد
کامیت
0e165be499
3فایلهای تغییر یافته به همراه54 افزوده شده و 3 حذف شده
  1. 2 0
      package.json
  2. 38 1
      src/task/task.controller.ts
  3. 14 2
      src/task/task.service.ts

+ 2 - 0
package.json

@@ -57,6 +57,7 @@
     "dedent": "^1.5.1",
     "douyudm": "^2.1.1",
     "eventsource-parser": "^1.0.0",
+    "exceljs": "^4.4.0",
     "express-basic-auth": "^1.2.1",
     "express-handlebars": "^7.0.6",
     "handlebars": "^4.7.7",
@@ -83,6 +84,7 @@
     "typeorm": "^0.3.12",
     "uuid": "^9.0.0",
     "ws": "^8.14.2",
+    "xlsx": "^0.18.5",
     "yup": "^1.0.0"
   },
   "devDependencies": {

+ 38 - 1
src/task/task.controller.ts

@@ -1,8 +1,10 @@
-import { Body, Controller, Delete, Param, Post, Put, Req } from '@nestjs/common'
+import { Body, Controller, Delete, HttpException, HttpStatus, Param, Post, Put, Req, Res } from '@nestjs/common'
 import { PageRequest } from 'src/common/dto/page-request'
 import { Task } from './entities/task.entity'
 import { TaskService } from './task.service'
 import { TaskItem } from './entities/task-item.entity'
+import * as ExcelJS from 'exceljs';
+import { Response } from 'express';
 
 @Controller('task')
 export class TaskController {
@@ -38,4 +40,39 @@ export class TaskController {
         return await this.taskService.findAllTaskItem(page)
     }
 
+    @Post('/item/:taskId/receipt')
+    async exportTaskItem(@Param('taskId') taskId: number, @Res() res: Response) {
+        try {
+            const taskItems = await this.taskService.getExportTaskItem(taskId);
+
+            const workbook = new ExcelJS.Workbook();
+            const worksheet = workbook.addWorksheet('Phone List');
+
+
+            worksheet.columns = [{ header: '手机号', key: 'number' }];
+
+
+            taskItems.forEach(item => {
+                worksheet.addRow({ item });
+            });
+
+            res.setHeader(
+                'Content-Type',
+                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+            );
+            res.setHeader(
+                'Content-Disposition',
+                `attachment; filename=task_phone_list.xlsx`,
+            );
+
+            return workbook.xlsx.write(res).then(() => {
+                res.end();
+            });
+        } catch (error) {
+            // 处理可能的错误
+            console.error(error);
+            res.status(500).send('Error exporting list to Excel');
+        }
+    }
+
 }

+ 14 - 2
src/task/task.service.ts

@@ -1,11 +1,11 @@
 import { PhoneListService } from './../phone-list/phone-list.service'
-import { Inject, Injectable, Logger, OnModuleInit, forwardRef, NotFoundException } from '@nestjs/common'
+import { forwardRef, Inject, Injectable, Logger, OnModuleInit } from '@nestjs/common'
 import { InjectRepository } from '@nestjs/typeorm'
 import { Task, TaskStatus } from './entities/task.entity'
 import { Repository } from 'typeorm'
 import { TaskItem, TaskItemStatus } from './entities/task-item.entity'
 import { PageRequest } from '../common/dto/page-request'
-import { Pagination, paginate } from 'nestjs-typeorm-paginate'
+import { paginate, Pagination } from 'nestjs-typeorm-paginate'
 import { EventsGateway } from '../events/events.gateway'
 import { randomUUID } from 'crypto'
 import { setTimeout } from 'timers/promises'
@@ -13,6 +13,7 @@ import { DeviceService } from '../device/device.service'
 import { SysConfigService } from '../sys-config/sys-config.service'
 import { Users } from '../users/entities/users.entity'
 import { Balance } from '../balance/entities/balance.entities'
+import { ta } from 'date-fns/locale'
 
 @Injectable()
 export class TaskService implements OnModuleInit {
@@ -138,6 +139,17 @@ export class TaskService implements OnModuleInit {
         }
     }
 
+    async getExportTaskItem(id: number) {
+        // 查询数据
+        const taskItems = await this.taskItemRepository.find({
+            where: {
+                taskId: id
+            }
+        })
+
+        return taskItems
+    }
+
     async runTask(task: Task) {
         let controller = new AbortController()
         this.taskControllers[task.id] = controller