From 8a0f4620c8c53058f4be461d5743940ad7fa308a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 30 Dec 2025 12:09:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(ticket):=20=E6=B7=BB=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E6=92=A4=E9=94=80=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在admin和gongfu模块的TicketController中添加revokedTicket接口 - 为SFTP文件上传添加控制台进度条显示功能 - 优化OSS文件上传服务,添加文件元数据设置 - 修复文件上传过程中缺少进度反馈的问题 --- .../admin/controller/TicketController.java | 10 ++++ .../src/test/java/DeployTest.java | 46 ++++++++++++++++++- .../gongfu/controller/TicketController.java | 10 ++++ .../service/impl/OSSFileUploadService.java | 7 ++- 4 files changed, 70 insertions(+), 3 deletions(-) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java index 1f617eee..3d186a02 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java @@ -474,6 +474,16 @@ public class TicketController extends ControllerBase { return ApiResult.success(); } + /** + * 撤销工单 + * @param id 工单编号 + **/ + @GetMapping("revokedTicket") + public ApiResult revokedTicket(@Valid @RequestParam @NotNull Integer id) { + ticketService.revoked(id); + return ApiResult.success(); + } + // /** // * 关闭工单 // * @param request 请求参数 diff --git a/nflg-mobilebroken-cfs-app/src/test/java/DeployTest.java b/nflg-mobilebroken-cfs-app/src/test/java/DeployTest.java index d9772efa..ec9cb380 100644 --- a/nflg-mobilebroken-cfs-app/src/test/java/DeployTest.java +++ b/nflg-mobilebroken-cfs-app/src/test/java/DeployTest.java @@ -262,7 +262,7 @@ public class DeployTest { */ public void uploadFile(String localPath, String remotePath) throws SftpException { printInfo("开始上传本地文件{}到远程{}", localPath, remotePath); - channelSftp.put(localPath, remotePath); + channelSftp.put(localPath, remotePath, new ConsoleProgressBar()); printInfo("上传完成"); } @@ -277,6 +277,50 @@ public class DeployTest { session.disconnect(); } } + + static class ConsoleProgressBar implements SftpProgressMonitor { + private long max = 0; + private int percentTransferred = -1; + + @Override + public void init(int op, String src, String dest, long max) { + this.max = max; + System.out.println("正在传输: " + src + " -> " + dest); + } + + @Override + public boolean count(long count) { + if (max > 0) { + int newPercent = (int) ((count * 100) / max); + // 只有当百分比变化时才更新输出(避免频繁刷新控制台) + if (newPercent > percentTransferred) { + percentTransferred = newPercent; + printProgressBar(percentTransferred); + } + } + return true; + } + + private void printProgressBar(int percent) { + StringBuilder bar = new StringBuilder("["); + for (int i = 0; i < 50; i++) { + if (i < (percent / 2)) { + bar.append("="); + } else if (i == (percent / 2)) { + bar.append(">"); + } else { + bar.append(" "); + } + } + bar.append("] ").append(percent).append("%"); + System.out.print("\r" + bar); // 使用 \r 回到行首覆盖输出 + } + + @Override + public void end() { + System.out.println("\r传输完成。"); + } + } } public interface SshResultCallback { diff --git a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TicketController.java b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TicketController.java index 9b9e86ad..c23ab774 100644 --- a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TicketController.java +++ b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TicketController.java @@ -475,6 +475,16 @@ public class TicketController extends ControllerBase { return ApiResult.success(); } + /** + * 撤销工单 + * @param id 工单编号 + **/ + @GetMapping("revokedTicket") + public ApiResult revokedTicket(@Valid @RequestParam @NotNull Long id) { + ticketService.revoked(id); + return ApiResult.success(); + } + /** * 导出工单为pdf * @param id 工单id diff --git a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/OSSFileUploadService.java b/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/OSSFileUploadService.java index 6eb10f96..cef55e69 100644 --- a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/OSSFileUploadService.java +++ b/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/OSSFileUploadService.java @@ -36,9 +36,12 @@ public class OSSFileUploadService implements FileUploadService { } @Override - public String upload(String filePath, InputStream stream) { + public String upload(String filePath, InputStream stream) throws IOException { // 上传文件到OSS - PutObjectResult result = ossClient.putObject(new PutObjectRequest(bucketName, filePath, stream)); + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentLength(stream.available()); + metadata.setContentDisposition("attachment"); + PutObjectResult result = ossClient.putObject(new PutObjectRequest(bucketName, filePath, stream, metadata)); //log.debug("上传文件结果: " + result); return StrUtil.format("{}/{}",domain, filePath); }