From 5c81feeb6230ebc96361ef4ed59b81dfd65e3e20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 14 Apr 2025 20:41:23 +0800 Subject: [PATCH] =?UTF-8?q?refactor(ticket):=20=E9=87=8D=E6=9E=84=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化了工单详情、PDF生成、Excel导出等功能中的文件处理逻辑 - 使用 FileUploadRecordService 替代直接操作附件 URL - 移除了冗余的 FileInfo 类,简化了文件相关数据结构 -重构了文件上传和更新逻辑,提高了代码可读性和维护性 --- .../admin/controller/TicketController.java | 85 ++++++++++--------- .../main/resources/templates/ticketpdf.html | 4 +- .../cfs/controller/TiketController.java | 17 +++- .../common/pojo/vo/TicketInfoVO.java | 4 +- .../common/pojo/vo/TicketPdfVO.java | 7 +- .../service/impl/TicketServiceImpl.java | 16 ++-- 6 files changed, 76 insertions(+), 57 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 91ba1ad1..c2866689 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 @@ -15,7 +15,6 @@ import com.nflg.mobilebroken.common.exception.NflgException; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO; -import com.nflg.mobilebroken.common.pojo.dto.FileInfo; import com.nflg.mobilebroken.common.pojo.request.*; import com.nflg.mobilebroken.common.pojo.vo.*; import com.nflg.mobilebroken.common.util.*; @@ -123,6 +122,9 @@ public class TicketController extends ControllerBase { @Resource private ITBaseDeviceTypeService deviceTypeService; + @Resource + private IFileUploadRecordService fileUploadRecordService; + /** * 获取问题类型 * @return 问题类型列表 @@ -478,21 +480,17 @@ public class TicketController extends ControllerBase { List adminUsers = adminUserService.listByIds(Arrays.stream(handle.split(",")).map(Integer::parseInt).collect(Collectors.toList())); handle = adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.joining(",")); } - List images = new ArrayList<>(); - List files = new ArrayList<>(); - if (StrUtil.isNotBlank(ticket.getAttachments())) { - StrUtil.split(ticket.getAttachments(), ",").forEach(item -> { - if (item.endsWith(".jpg") || item.endsWith(".png") || item.endsWith(".jpeg")) { - images.add(new FileInfo(item.substring(item.lastIndexOf("/")+1),urlEncode(item))); - } else { - files.add(new FileInfo(item.substring(item.lastIndexOf("/")+1),urlEncode(item))); - } - }); - } - if (StrUtil.isNotBlank(ticket.getImages())) { - StrUtil.split(ticket.getImages(), ",").forEach(item -> { - images.add(new FileInfo(item.substring(item.lastIndexOf("/")+1),item)); - }); + List fileIds=CollectionUtil.addAll(StrUtil.split(ticket.getAttachments(),","), StrUtil.split(ticket.getImages(),",")) + .stream() + .map(Integer::parseInt) + .collect(Collectors.toList()); + List images = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(fileIds)){ + images=fileUploadRecordService.listByIds(fileIds) + .stream() + .map(FileUploadRecord::getUrl) + .filter(url->url.endsWith(".jpg") || url.endsWith(".png") || url.endsWith(".jpeg")) + .collect(Collectors.toList()); } TicketPdfVO vo = new TicketPdfVO() .setNo(ticket.getNo()) @@ -512,7 +510,7 @@ public class TicketController extends ControllerBase { .setReason(ticket.getReason()) .setDeviceAddress(ticket.getDeviceAddress()) .setImages(images) - .setFiles(files) +// .setFiles(files) .setMeasures(ticketSolutionService.getSolutionMeasures(ticket.getId()).getMeasures()); Map variables = new HashMap<>(); variables.put("ticket", vo); @@ -545,12 +543,12 @@ public class TicketController extends ControllerBase { } } - private String urlEncode(String url){ - int index = url.lastIndexOf("/"); - String pre= url.substring(0,index+1); - String end = url.substring(index+1); - return pre+URLEncoder.encode(end, StandardCharsets.UTF_8); - } +// private String urlEncode(String url){ +// int index = url.lastIndexOf("/"); +// String pre= url.substring(0,index+1); +// String end = url.substring(index+1); +// return pre+URLEncoder.encode(end, StandardCharsets.UTF_8); +// } /** * 获取工单详情 @@ -603,8 +601,8 @@ public class TicketController extends ControllerBase { .setSolveTime(ticket.getSolveTime()) .setDeviceTypeSub(device.getDeviceTypeSub()) .setPrimaryUserName(device.getAgentName()) - .setImages(StrUtil.isNotBlank(ticket.getImages()) ? StrUtil.split(ticket.getImages(), ",") : Collections.emptyList()) - .setAttachments(StrUtil.isNotBlank(ticket.getAttachments()) ? StrUtil.split(ticket.getAttachments(), ",") : Collections.emptyList()) + .setImages(getFileVOs(ticket.getImages())) + .setAttachments(getFileVOs(ticket.getAttachments())) .setCreateUserId(ticket.getUserId()) .setCreateUserName(user.getName()) .setCreateUserAvatar(user.getAvatar()) @@ -620,6 +618,16 @@ public class TicketController extends ControllerBase { return ApiResult.success(vo); } + private List getFileVOs(String ids){ + if (StrUtil.isBlank(ids)){ + return Collections.emptyList(); + } + return fileUploadRecordService.listByIds(StrUtil.split(ids, ",").stream().map(Integer::parseInt).collect(Collectors.toList())) + .stream() + .map(fileUploadRecord -> new FileUploadVO(fileUploadRecord.getId(), fileUploadRecord.getFileName(), fileUploadRecord.getUrl())) + .collect(Collectors.toList()); + } + private TicketEvaluateVO getTicketEvaluate(Integer ticketId) { TicketEvaluate ticketEvaluate = ticketEvaluateService.lambdaQuery().eq(TicketEvaluate::getTicketId,ticketId).one(); if (Objects.isNull(ticketEvaluate)) { @@ -949,18 +957,17 @@ public class TicketController extends ControllerBase { //第七行 Row row7 = sheet.createRow(7); row7.setHeightInPoints(height); - List images = new ArrayList<>(); - if (StrUtil.isNotBlank(ticket.getAttachments())) { - StrUtil.split(ticket.getAttachments(), ",").forEach(item -> { - if (item.endsWith(".jpg") || item.endsWith(".png") || item.endsWith(".jpeg")) { - images.add(new FileInfo(item.substring(item.lastIndexOf("/") + 1), urlEncode(item))); - } - }); - } - if (StrUtil.isNotBlank(ticket.getImages())) { - StrUtil.split(ticket.getImages(), ",").forEach(item -> { - images.add(new FileInfo(item.substring(item.lastIndexOf("/") + 1), item)); - }); + List fileIds=CollectionUtil.addAll(StrUtil.split(ticket.getAttachments(),","), StrUtil.split(ticket.getImages(),",")) + .stream() + .map(Integer::parseInt) + .collect(Collectors.toList()); + List images = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(fileIds)){ + images=fileUploadRecordService.listByIds(fileIds) + .stream() + .map(FileUploadRecord::getUrl) + .filter(url->url.endsWith(".jpg") || url.endsWith(".png") || url.endsWith(".jpeg")) + .collect(Collectors.toList()); } int rowIndex = 6; int rows = images.size() % 2 == 0 ? images.size() / 2 : images.size() / 2 + 1; @@ -976,9 +983,9 @@ public class TicketController extends ControllerBase { for (int i = 0; i < images.size(); i++) { if (i % 2 == 0) { rowIndex++; - bindPic(images.get(i).getUrl(), workbook, sheet, rowIndex, 1, 6); + bindPic(images.get(i), workbook, sheet, rowIndex, 1, 6); } else { - bindPic(images.get(i).getUrl(), workbook, sheet, rowIndex, 6, 12); + bindPic(images.get(i), workbook, sheet, rowIndex, 6, 12); } } if (images.size() % 2 != 0) { diff --git a/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf.html b/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf.html index 019e0da6..907d6cd0 100644 --- a/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf.html +++ b/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf.html @@ -73,8 +73,8 @@ 图片 -
- +
+
diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java index 81dcdfeb..0d58a1c7 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java @@ -86,6 +86,9 @@ public class TiketController extends ControllerBase { @Resource private ITBasePartService partService; + @Resource + private IFileUploadRecordService fileUploadRecordService; + /** * 搜索设备 * @param request 搜索条件 @@ -209,8 +212,8 @@ public class TiketController extends ControllerBase { .setUseTime(ticket.getUseTime()) .setDescription(ticket.getDescription()) .setState(ticket.getState()) - .setImages(StrUtil.isNotBlank(ticket.getImages()) ? StrUtil.split(ticket.getImages(), ",") : Collections.emptyList()) - .setAttachments(StrUtil.isNotBlank(ticket.getAttachments()) ? StrUtil.split(ticket.getAttachments(), ",") : Collections.emptyList()) + .setImages(getFileVOs(ticket.getImages())) + .setAttachments(getFileVOs(ticket.getAttachments())) .setCreateUserId(ticket.getUserId()) .setCreateUserName(user.getName()) .setCreateUserAvatar(user.getAvatar()) @@ -224,6 +227,16 @@ public class TiketController extends ControllerBase { return ApiResult.success(vo); } + private List getFileVOs(String ids){ + if (StrUtil.isBlank(ids)){ + return Collections.emptyList(); + } + return fileUploadRecordService.listByIds(StrUtil.split(ids, ",").stream().map(Integer::parseInt).collect(Collectors.toList())) + .stream() + .map(fileUploadRecord -> new FileUploadVO(fileUploadRecord.getId(), fileUploadRecord.getFileName(), fileUploadRecord.getUrl())) + .collect(Collectors.toList()); + } + private TicketEvaluateVO getTicketEvaluate(Integer ticketId) { TicketEvaluate ticketEvaluate = ticketEvaluateService.lambdaQuery().eq(TicketEvaluate::getTicketId,ticketId).one(); if (Objects.isNull(ticketEvaluate)) { diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketInfoVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketInfoVO.java index 88ab722b..09f00532 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketInfoVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketInfoVO.java @@ -87,10 +87,10 @@ public class TicketInfoVO { private Byte urgency; //图片 - private List images; + private List images; //附件 - private List attachments; + private List attachments; //评价 private TicketEvaluateVO evaluate; diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketPdfVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketPdfVO.java index 88b8b2cc..6bf279de 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketPdfVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketPdfVO.java @@ -1,7 +1,6 @@ package com.nflg.mobilebroken.common.pojo.vo; import com.nflg.mobilebroken.common.constant.TicketState; -import com.nflg.mobilebroken.common.pojo.dto.FileInfo; import lombok.Data; import lombok.experimental.Accessors; @@ -58,9 +57,9 @@ public class TicketPdfVO { //原因分析 private String reason; //图片 - private List images; - //文件 - private List files; + private List images; +// //文件 +// private List files; public String getUrgencyDesc() { if (Objects.isNull(urgency)) { diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java index b03cc325..1e87199a 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java @@ -76,8 +76,6 @@ public class TicketServiceImpl extends ServiceImpl impleme .setUseTime(request.getUseTime()) .setTitle(request.getTitle()) .setDescription(request.getDescription()) - .setImages(StrUtil.join(",", request.getImages())) - .setAttachments(StrUtil.join(",", request.getAttachments())) .setState(TicketState.PendingProcessing.getState()) .setUserId(userId) .setCreateTime(LocalDateTime.now()); @@ -111,11 +109,13 @@ public class TicketServiceImpl extends ServiceImpl impleme } fileUploadRecordService.updateBatchById(attachmentsRecords); } - lambdaUpdate() - .set(CollectionUtil.isNotEmpty(imagesRecords),Ticket::getImages, imagesRecords.stream().map(FileUploadRecord::getId).collect(Collectors.toList())) - .set(CollectionUtil.isNotEmpty(attachmentsRecords),Ticket::getAttachments, attachmentsRecords.stream().map(FileUploadRecord::getId).collect(Collectors.toList())) - .eq(Ticket::getId, ticket.getId()) - .update(); + if(CollectionUtil.isNotEmpty(imagesRecords) || CollectionUtil.isNotEmpty(attachmentsRecords)) { + lambdaUpdate() + .set(CollectionUtil.isNotEmpty(imagesRecords), Ticket::getImages, StrUtil.join(",",imagesRecords.stream().map(FileUploadRecord::getId).collect(Collectors.toList()))) + .set(CollectionUtil.isNotEmpty(attachmentsRecords), Ticket::getAttachments, StrUtil.join(",",attachmentsRecords.stream().map(FileUploadRecord::getId).collect(Collectors.toList()))) + .eq(Ticket::getId, ticket.getId()) + .update(); + } return ticket; } @@ -347,7 +347,7 @@ public class TicketServiceImpl extends ServiceImpl impleme @Override public List getTicketHandle(Integer id) { - Ticket ticket=lambdaQuery().select(Ticket::getHandle).eq(Ticket::getId,id).one(); + Ticket ticket=lambdaQuery().select(Ticket::getHandle,Ticket::getId).eq(Ticket::getId,id).one(); List handles=StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList()); if (CollectionUtil.isEmpty(handles)){ return Collections.emptyList();