refactor(ticket): 重构工单相关功能

- 优化了工单详情、PDF生成、Excel导出等功能中的文件处理逻辑
- 使用 FileUploadRecordService 替代直接操作附件 URL
- 移除了冗余的 FileInfo 类,简化了文件相关数据结构
-重构了文件上传和更新逻辑,提高了代码可读性和维护性
This commit is contained in:
曹鹏飞 2025-04-14 20:41:23 +08:00
parent c20c100054
commit 5c81feeb62
6 changed files with 76 additions and 57 deletions

View File

@ -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<AdminUser> adminUsers = adminUserService.listByIds(Arrays.stream(handle.split(",")).map(Integer::parseInt).collect(Collectors.toList()));
handle = adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.joining(","));
}
List<FileInfo> images = new ArrayList<>();
List<FileInfo> 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<Integer> fileIds=CollectionUtil.addAll(StrUtil.split(ticket.getAttachments(),","), StrUtil.split(ticket.getImages(),","))
.stream()
.map(Integer::parseInt)
.collect(Collectors.toList());
List<String> 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<String, Object> 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<FileUploadVO> 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<FileInfo> 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<Integer> fileIds=CollectionUtil.addAll(StrUtil.split(ticket.getAttachments(),","), StrUtil.split(ticket.getImages(),","))
.stream()
.map(Integer::parseInt)
.collect(Collectors.toList());
List<String> 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) {

View File

@ -73,8 +73,8 @@
<tr>
<td class="desc1">图片</td>
<td colspan="11">
<div th:each="file:${ticket.images}">
<img class="cimg" alt="" th:src="${file.url}"/>
<div th:each="url:${ticket.images}">
<img alt="" class="cimg" th:src="${url}"/>
</div>
</td>
</tr>

View File

@ -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<FileUploadVO> 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)) {

View File

@ -87,10 +87,10 @@ public class TicketInfoVO {
private Byte urgency;
//图片
private List<String> images;
private List<FileUploadVO> images;
//附件
private List<String> attachments;
private List<FileUploadVO> attachments;
//评价
private TicketEvaluateVO evaluate;

View File

@ -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<FileInfo> images;
//文件
private List<FileInfo> files;
private List<String> images;
// //文件
// private List<FileInfo> files;
public String getUrgencyDesc() {
if (Objects.isNull(urgency)) {

View File

@ -76,8 +76,6 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> 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<TicketMapper, Ticket> 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<TicketMapper, Ticket> impleme
@Override
public List<AdminUserSimpleVO> 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<Integer> handles=StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList());
if (CollectionUtil.isEmpty(handles)){
return Collections.emptyList();