From d076a18b1213ceea6bbf78b1e0718fd61671e193 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 24 Mar 2025 16:49:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AF=BC=E5=87=BApdf=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/TicketController.java | 102 +--------------- .../main/resources/templates/ticketpdf.html | 106 +++++++++-------- .../main/resources/templates/ticketpdf1.html | 111 ------------------ .../pojo/vo/SolutionMeasuresItemVO.java | 2 +- .../repository/entity/TicketSolution.java | 9 +- .../impl/TicketSolutionServiceImpl.java | 11 +- 6 files changed, 69 insertions(+), 272 deletions(-) delete mode 100644 nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf1.html 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 5feb903c..c955f95b 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 @@ -450,106 +450,6 @@ public class TicketController extends ControllerBase { @GetMapping("exportPdf") @ApiMark(moduleName = "工单管理", apiName = "导出工单为pdf") public void exportPdf(HttpServletResponse response, @Valid @RequestParam @NotBlank(message = "工单编号不能为空") String id) { - Ticket ticket = ticketService.getById(id); - AppUser user = appUserService.getById(ticket.getUserId()); - List companyIds= Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()); - List companys = customerService.listByIds(companyIds); - DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo()); - String handle = ticket.getHandle(); - if (StrUtil.isNotBlank(handle)) { - 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 messageVOS=ticketChatService.getMessages(ticket.getId()); - messageVOS.forEach(messageVO -> { - if (CollectionUtil.isNotEmpty(messageVO.getImages())){ - messageVO.getImages().forEach(image -> { - images.add(new FileInfo(image.substring(image.lastIndexOf("/")+1),image)); - }); - } - if (CollectionUtil.isNotEmpty(messageVO.getAttachments())){ - messageVO.getAttachments().forEach(attachment -> { - if (attachment.endsWith(".jpg") || attachment.endsWith(".png") || attachment.endsWith(".jpeg")) { - images.add(new FileInfo(attachment.substring(attachment.lastIndexOf("/")+1),urlEncode(attachment))); - } else { - files.add(new FileInfo(attachment.substring(attachment.lastIndexOf("/")+1),urlEncode(attachment))); - } - }); - } - }); - TicketPdfVO vo = new TicketPdfVO() - .setNo(ticket.getNo()) - .setTitle(ticket.getTitle()) - .setDeviceNo(ticket.getDeviceNo()) - .setModelNo(device.getModelNo()) - .setComponent(ticket.getComponent()) - .setUseTime(ticket.getUseTime()) - .setDescription(ticket.getDescription()) - .setState(ticket.getState()) - .setCreateUserName(user.getName()) - .setCreateTime(DateTimeUtil.format(ticket.getCreateTime())) - .setCompanyName(StrUtil.join(",",companys.stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList()))) - .setUrgency(ticket.getUrgency()) - .setUpdateTime(DateTimeUtil.format(ticket.getUpdateTime())) - .setHandleUserName(handle) - .setReason(ticket.getReason()) - .setImages(images) - .setFiles(files); - Map variables = new HashMap<>(); - variables.put("ticket", vo); - // 渲染HTML - TemplateEngine templateEngine = new TemplateEngine(); - ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver(); - resolver.setPrefix("/templates/"); - resolver.setSuffix(".html"); - templateEngine.setTemplateResolver(resolver); - - Context context = new Context(); - context.setVariables(variables); - String html = templateEngine.process("ticketpdf", context); - - response.setContentType(MediaType.APPLICATION_PDF_VALUE); - String encode = URLEncoder.encode(ticket.getTitle() + ".pdf", StandardCharsets.UTF_8); - response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" +encode ); - // 生成PDF - try { - ITextRenderer renderer = new ITextRenderer(); - renderer.getFontResolver().addFont("fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); - renderer.setDocumentFromString(html); - renderer.layout(); - try (OutputStream outputStream = response.getOutputStream()) { - renderer.createPDF(outputStream); - } - } catch (Exception e) { - log.error("生成pdf出错", e); - throw new NflgException(STATE.BusinessError, "生成pdf出错"); - } - } - - /** - * 导出工单为pdf1 - * @param id 工单id - */ - @GetMapping("exportPdf1") - @ApiMark(moduleName = "工单管理", apiName = "导出工单为pdf") - public void exportPdf1(HttpServletResponse response, @Valid @RequestParam @NotBlank(message = "工单编号不能为空") String id) { Ticket ticket = ticketService.getById(id); AppUser user = appUserService.getById(ticket.getUserId()); List companyIds= Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()); @@ -625,7 +525,7 @@ public class TicketController extends ControllerBase { Context context = new Context(); context.setVariables(variables); - String html = templateEngine.process("ticketpdf1", context); + String html = templateEngine.process("ticketpdf", context); response.setContentType(MediaType.APPLICATION_PDF_VALUE); String encode = URLEncoder.encode(ticket.getTitle() + ".pdf", StandardCharsets.UTF_8); diff --git a/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf.html b/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf.html index 1a47e256..019e0da6 100644 --- a/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf.html +++ b/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf.html @@ -29,80 +29,82 @@ width: 215px; height: auto; } + .desc1{ + text-align: center; + } -
- -
-

移动破售后问题反馈表

- - + + - - + + + + - - - - + + + + + + - - - - + + + + + + - - + + - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + +
标题移动破售后问题反馈表
问题详细描述标题紧急程度
工单编号设备编号设备机型设备编号反馈日期
机型使用时长提交人设备地点设备运行时间
问题部位处理人
紧急程度解决状态问题描述
处理人解决时间
解决方案
提交人提交时间
文件
-
- -
-
图片
+ 图片
原因分析
解决方案
NO.负责人计划日期确认日期备注
\ No newline at end of file diff --git a/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf1.html b/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf1.html deleted file mode 100644 index 64746e6b..00000000 --- a/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf1.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

移动破售后问题反馈表

标题紧急程度
设备机型设备编号反馈日期
提交人设备地点设备运行时间
处理人
问题描述
图片 -
- -
-
原因分析
解决方案
-
- - - - - - - - -
-
- - NO. - - 负责人 - 计划日期 - 确认日期 - 备注 - -
-
- - \ No newline at end of file diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/SolutionMeasuresItemVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/SolutionMeasuresItemVO.java index 5bcb618c..0651ff78 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/SolutionMeasuresItemVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/SolutionMeasuresItemVO.java @@ -12,7 +12,7 @@ public class SolutionMeasuresItemVO { private Integer id; /** - * 措施名称 + * 措施 */ @NotBlank private String name; diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketSolution.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketSolution.java index 8db9ef96..c538a09e 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketSolution.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketSolution.java @@ -37,12 +37,17 @@ public class TicketSolution implements Serializable { /** * 字典项id */ - private Integer dictionaryId; + private Integer dictionaryItemId; /** * 字典项值 */ - private String dictionaryName; + private String dictionaryItemName; + + /** + * 措施 + */ + private String description; /** * 负责人 diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketSolutionServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketSolutionServiceImpl.java index 6ea8e414..7607e015 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketSolutionServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketSolutionServiceImpl.java @@ -56,7 +56,7 @@ public class TicketSolutionServiceImpl extends ServiceImpl solutions = lambdaQuery().eq(TicketSolution::getTicketId, ticketId).orderByAsc(TicketSolution::getId).list(); - Map> groupedSolutions = solutions.stream().collect(Collectors.groupingBy(TicketSolution::getDictionaryName, LinkedHashMap::new, Collectors.toList())); + Map> groupedSolutions = solutions.stream().collect(Collectors.groupingBy(TicketSolution::getDictionaryItemName, LinkedHashMap::new, Collectors.toList())); if (CollectionUtil.isEmpty(groupedSolutions)) { return initialNames.stream().map(ticketSolutions -> new SolutionMeasuresVO() .setName(ticketSolutions) @@ -66,7 +66,7 @@ public class TicketSolutionServiceImpl extends ServiceImpl new SolutionMeasuresVO() .setName(ks.getKey()) .setItems(ks.getValue().stream().map(v -> new SolutionMeasuresItemVO() - .setName(v.getDictionaryName()) + .setName(v.getDescription()) .setSuperintendent(v.getSuperintendent()) .setScheduleDate(v.getScheduleDate()) .setConfirmedDate(v.getConfirmedDate()) @@ -83,7 +83,7 @@ public class TicketSolutionServiceImpl extends ServiceImpl new SolutionMeasuresItemVO() - .setName(v.getDictionaryName()) + .setName(v.getDescription()) .setSuperintendent(v.getSuperintendent()) .setScheduleDate(v.getScheduleDate()) .setConfirmedDate(v.getConfirmedDate()) @@ -125,8 +125,9 @@ public class TicketSolutionServiceImpl extends ServiceImpl