refactor(ticket): 重构工单相关功能
- 优化了工单详情、PDF生成、Excel导出等功能中的文件处理逻辑 - 使用 FileUploadRecordService 替代直接操作附件 URL - 移除了冗余的 FileInfo 类,简化了文件相关数据结构 -重构了文件上传和更新逻辑,提高了代码可读性和维护性
This commit is contained in:
parent
c20c100054
commit
5c81feeb62
|
|
@ -15,7 +15,6 @@ import com.nflg.mobilebroken.common.exception.NflgException;
|
||||||
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
||||||
import com.nflg.mobilebroken.common.pojo.PageData;
|
import com.nflg.mobilebroken.common.pojo.PageData;
|
||||||
import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO;
|
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.request.*;
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.*;
|
import com.nflg.mobilebroken.common.pojo.vo.*;
|
||||||
import com.nflg.mobilebroken.common.util.*;
|
import com.nflg.mobilebroken.common.util.*;
|
||||||
|
|
@ -123,6 +122,9 @@ public class TicketController extends ControllerBase {
|
||||||
@Resource
|
@Resource
|
||||||
private ITBaseDeviceTypeService deviceTypeService;
|
private ITBaseDeviceTypeService deviceTypeService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IFileUploadRecordService fileUploadRecordService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取问题类型
|
* 获取问题类型
|
||||||
* @return 问题类型列表
|
* @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()));
|
List<AdminUser> adminUsers = adminUserService.listByIds(Arrays.stream(handle.split(",")).map(Integer::parseInt).collect(Collectors.toList()));
|
||||||
handle = adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.joining(","));
|
handle = adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.joining(","));
|
||||||
}
|
}
|
||||||
List<FileInfo> images = new ArrayList<>();
|
List<Integer> fileIds=CollectionUtil.addAll(StrUtil.split(ticket.getAttachments(),","), StrUtil.split(ticket.getImages(),","))
|
||||||
List<FileInfo> files = new ArrayList<>();
|
.stream()
|
||||||
if (StrUtil.isNotBlank(ticket.getAttachments())) {
|
.map(Integer::parseInt)
|
||||||
StrUtil.split(ticket.getAttachments(), ",").forEach(item -> {
|
.collect(Collectors.toList());
|
||||||
if (item.endsWith(".jpg") || item.endsWith(".png") || item.endsWith(".jpeg")) {
|
List<String> images = new ArrayList<>();
|
||||||
images.add(new FileInfo(item.substring(item.lastIndexOf("/")+1),urlEncode(item)));
|
if (CollectionUtil.isNotEmpty(fileIds)){
|
||||||
} else {
|
images=fileUploadRecordService.listByIds(fileIds)
|
||||||
files.add(new FileInfo(item.substring(item.lastIndexOf("/")+1),urlEncode(item)));
|
.stream()
|
||||||
}
|
.map(FileUploadRecord::getUrl)
|
||||||
});
|
.filter(url->url.endsWith(".jpg") || url.endsWith(".png") || url.endsWith(".jpeg"))
|
||||||
}
|
.collect(Collectors.toList());
|
||||||
if (StrUtil.isNotBlank(ticket.getImages())) {
|
|
||||||
StrUtil.split(ticket.getImages(), ",").forEach(item -> {
|
|
||||||
images.add(new FileInfo(item.substring(item.lastIndexOf("/")+1),item));
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
TicketPdfVO vo = new TicketPdfVO()
|
TicketPdfVO vo = new TicketPdfVO()
|
||||||
.setNo(ticket.getNo())
|
.setNo(ticket.getNo())
|
||||||
|
|
@ -512,7 +510,7 @@ public class TicketController extends ControllerBase {
|
||||||
.setReason(ticket.getReason())
|
.setReason(ticket.getReason())
|
||||||
.setDeviceAddress(ticket.getDeviceAddress())
|
.setDeviceAddress(ticket.getDeviceAddress())
|
||||||
.setImages(images)
|
.setImages(images)
|
||||||
.setFiles(files)
|
// .setFiles(files)
|
||||||
.setMeasures(ticketSolutionService.getSolutionMeasures(ticket.getId()).getMeasures());
|
.setMeasures(ticketSolutionService.getSolutionMeasures(ticket.getId()).getMeasures());
|
||||||
Map<String, Object> variables = new HashMap<>();
|
Map<String, Object> variables = new HashMap<>();
|
||||||
variables.put("ticket", vo);
|
variables.put("ticket", vo);
|
||||||
|
|
@ -545,12 +543,12 @@ public class TicketController extends ControllerBase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String urlEncode(String url){
|
// private String urlEncode(String url){
|
||||||
int index = url.lastIndexOf("/");
|
// int index = url.lastIndexOf("/");
|
||||||
String pre= url.substring(0,index+1);
|
// String pre= url.substring(0,index+1);
|
||||||
String end = url.substring(index+1);
|
// String end = url.substring(index+1);
|
||||||
return pre+URLEncoder.encode(end, StandardCharsets.UTF_8);
|
// return pre+URLEncoder.encode(end, StandardCharsets.UTF_8);
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取工单详情
|
* 获取工单详情
|
||||||
|
|
@ -603,8 +601,8 @@ public class TicketController extends ControllerBase {
|
||||||
.setSolveTime(ticket.getSolveTime())
|
.setSolveTime(ticket.getSolveTime())
|
||||||
.setDeviceTypeSub(device.getDeviceTypeSub())
|
.setDeviceTypeSub(device.getDeviceTypeSub())
|
||||||
.setPrimaryUserName(device.getAgentName())
|
.setPrimaryUserName(device.getAgentName())
|
||||||
.setImages(StrUtil.isNotBlank(ticket.getImages()) ? StrUtil.split(ticket.getImages(), ",") : Collections.emptyList())
|
.setImages(getFileVOs(ticket.getImages()))
|
||||||
.setAttachments(StrUtil.isNotBlank(ticket.getAttachments()) ? StrUtil.split(ticket.getAttachments(), ",") : Collections.emptyList())
|
.setAttachments(getFileVOs(ticket.getAttachments()))
|
||||||
.setCreateUserId(ticket.getUserId())
|
.setCreateUserId(ticket.getUserId())
|
||||||
.setCreateUserName(user.getName())
|
.setCreateUserName(user.getName())
|
||||||
.setCreateUserAvatar(user.getAvatar())
|
.setCreateUserAvatar(user.getAvatar())
|
||||||
|
|
@ -620,6 +618,16 @@ public class TicketController extends ControllerBase {
|
||||||
return ApiResult.success(vo);
|
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) {
|
private TicketEvaluateVO getTicketEvaluate(Integer ticketId) {
|
||||||
TicketEvaluate ticketEvaluate = ticketEvaluateService.lambdaQuery().eq(TicketEvaluate::getTicketId,ticketId).one();
|
TicketEvaluate ticketEvaluate = ticketEvaluateService.lambdaQuery().eq(TicketEvaluate::getTicketId,ticketId).one();
|
||||||
if (Objects.isNull(ticketEvaluate)) {
|
if (Objects.isNull(ticketEvaluate)) {
|
||||||
|
|
@ -949,18 +957,17 @@ public class TicketController extends ControllerBase {
|
||||||
//第七行
|
//第七行
|
||||||
Row row7 = sheet.createRow(7);
|
Row row7 = sheet.createRow(7);
|
||||||
row7.setHeightInPoints(height);
|
row7.setHeightInPoints(height);
|
||||||
List<FileInfo> images = new ArrayList<>();
|
List<Integer> fileIds=CollectionUtil.addAll(StrUtil.split(ticket.getAttachments(),","), StrUtil.split(ticket.getImages(),","))
|
||||||
if (StrUtil.isNotBlank(ticket.getAttachments())) {
|
.stream()
|
||||||
StrUtil.split(ticket.getAttachments(), ",").forEach(item -> {
|
.map(Integer::parseInt)
|
||||||
if (item.endsWith(".jpg") || item.endsWith(".png") || item.endsWith(".jpeg")) {
|
.collect(Collectors.toList());
|
||||||
images.add(new FileInfo(item.substring(item.lastIndexOf("/") + 1), urlEncode(item)));
|
List<String> images = new ArrayList<>();
|
||||||
}
|
if (CollectionUtil.isNotEmpty(fileIds)){
|
||||||
});
|
images=fileUploadRecordService.listByIds(fileIds)
|
||||||
}
|
.stream()
|
||||||
if (StrUtil.isNotBlank(ticket.getImages())) {
|
.map(FileUploadRecord::getUrl)
|
||||||
StrUtil.split(ticket.getImages(), ",").forEach(item -> {
|
.filter(url->url.endsWith(".jpg") || url.endsWith(".png") || url.endsWith(".jpeg"))
|
||||||
images.add(new FileInfo(item.substring(item.lastIndexOf("/") + 1), item));
|
.collect(Collectors.toList());
|
||||||
});
|
|
||||||
}
|
}
|
||||||
int rowIndex = 6;
|
int rowIndex = 6;
|
||||||
int rows = images.size() % 2 == 0 ? images.size() / 2 : images.size() / 2 + 1;
|
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++) {
|
for (int i = 0; i < images.size(); i++) {
|
||||||
if (i % 2 == 0) {
|
if (i % 2 == 0) {
|
||||||
rowIndex++;
|
rowIndex++;
|
||||||
bindPic(images.get(i).getUrl(), workbook, sheet, rowIndex, 1, 6);
|
bindPic(images.get(i), workbook, sheet, rowIndex, 1, 6);
|
||||||
} else {
|
} 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) {
|
if (images.size() % 2 != 0) {
|
||||||
|
|
|
||||||
|
|
@ -73,8 +73,8 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td class="desc1">图片</td>
|
<td class="desc1">图片</td>
|
||||||
<td colspan="11">
|
<td colspan="11">
|
||||||
<div th:each="file:${ticket.images}">
|
<div th:each="url:${ticket.images}">
|
||||||
<img class="cimg" alt="" th:src="${file.url}"/>
|
<img alt="" class="cimg" th:src="${url}"/>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,9 @@ public class TiketController extends ControllerBase {
|
||||||
@Resource
|
@Resource
|
||||||
private ITBasePartService partService;
|
private ITBasePartService partService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IFileUploadRecordService fileUploadRecordService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 搜索设备
|
* 搜索设备
|
||||||
* @param request 搜索条件
|
* @param request 搜索条件
|
||||||
|
|
@ -209,8 +212,8 @@ public class TiketController extends ControllerBase {
|
||||||
.setUseTime(ticket.getUseTime())
|
.setUseTime(ticket.getUseTime())
|
||||||
.setDescription(ticket.getDescription())
|
.setDescription(ticket.getDescription())
|
||||||
.setState(ticket.getState())
|
.setState(ticket.getState())
|
||||||
.setImages(StrUtil.isNotBlank(ticket.getImages()) ? StrUtil.split(ticket.getImages(), ",") : Collections.emptyList())
|
.setImages(getFileVOs(ticket.getImages()))
|
||||||
.setAttachments(StrUtil.isNotBlank(ticket.getAttachments()) ? StrUtil.split(ticket.getAttachments(), ",") : Collections.emptyList())
|
.setAttachments(getFileVOs(ticket.getAttachments()))
|
||||||
.setCreateUserId(ticket.getUserId())
|
.setCreateUserId(ticket.getUserId())
|
||||||
.setCreateUserName(user.getName())
|
.setCreateUserName(user.getName())
|
||||||
.setCreateUserAvatar(user.getAvatar())
|
.setCreateUserAvatar(user.getAvatar())
|
||||||
|
|
@ -224,6 +227,16 @@ public class TiketController extends ControllerBase {
|
||||||
return ApiResult.success(vo);
|
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) {
|
private TicketEvaluateVO getTicketEvaluate(Integer ticketId) {
|
||||||
TicketEvaluate ticketEvaluate = ticketEvaluateService.lambdaQuery().eq(TicketEvaluate::getTicketId,ticketId).one();
|
TicketEvaluate ticketEvaluate = ticketEvaluateService.lambdaQuery().eq(TicketEvaluate::getTicketId,ticketId).one();
|
||||||
if (Objects.isNull(ticketEvaluate)) {
|
if (Objects.isNull(ticketEvaluate)) {
|
||||||
|
|
|
||||||
|
|
@ -87,10 +87,10 @@ public class TicketInfoVO {
|
||||||
private Byte urgency;
|
private Byte urgency;
|
||||||
|
|
||||||
//图片
|
//图片
|
||||||
private List<String> images;
|
private List<FileUploadVO> images;
|
||||||
|
|
||||||
//附件
|
//附件
|
||||||
private List<String> attachments;
|
private List<FileUploadVO> attachments;
|
||||||
|
|
||||||
//评价
|
//评价
|
||||||
private TicketEvaluateVO evaluate;
|
private TicketEvaluateVO evaluate;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.nflg.mobilebroken.common.pojo.vo;
|
package com.nflg.mobilebroken.common.pojo.vo;
|
||||||
|
|
||||||
import com.nflg.mobilebroken.common.constant.TicketState;
|
import com.nflg.mobilebroken.common.constant.TicketState;
|
||||||
import com.nflg.mobilebroken.common.pojo.dto.FileInfo;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
|
@ -58,9 +57,9 @@ public class TicketPdfVO {
|
||||||
//原因分析
|
//原因分析
|
||||||
private String reason;
|
private String reason;
|
||||||
//图片
|
//图片
|
||||||
private List<FileInfo> images;
|
private List<String> images;
|
||||||
//文件
|
// //文件
|
||||||
private List<FileInfo> files;
|
// private List<FileInfo> files;
|
||||||
|
|
||||||
public String getUrgencyDesc() {
|
public String getUrgencyDesc() {
|
||||||
if (Objects.isNull(urgency)) {
|
if (Objects.isNull(urgency)) {
|
||||||
|
|
|
||||||
|
|
@ -76,8 +76,6 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
|
||||||
.setUseTime(request.getUseTime())
|
.setUseTime(request.getUseTime())
|
||||||
.setTitle(request.getTitle())
|
.setTitle(request.getTitle())
|
||||||
.setDescription(request.getDescription())
|
.setDescription(request.getDescription())
|
||||||
.setImages(StrUtil.join(",", request.getImages()))
|
|
||||||
.setAttachments(StrUtil.join(",", request.getAttachments()))
|
|
||||||
.setState(TicketState.PendingProcessing.getState())
|
.setState(TicketState.PendingProcessing.getState())
|
||||||
.setUserId(userId)
|
.setUserId(userId)
|
||||||
.setCreateTime(LocalDateTime.now());
|
.setCreateTime(LocalDateTime.now());
|
||||||
|
|
@ -111,11 +109,13 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
|
||||||
}
|
}
|
||||||
fileUploadRecordService.updateBatchById(attachmentsRecords);
|
fileUploadRecordService.updateBatchById(attachmentsRecords);
|
||||||
}
|
}
|
||||||
|
if(CollectionUtil.isNotEmpty(imagesRecords) || CollectionUtil.isNotEmpty(attachmentsRecords)) {
|
||||||
lambdaUpdate()
|
lambdaUpdate()
|
||||||
.set(CollectionUtil.isNotEmpty(imagesRecords),Ticket::getImages, imagesRecords.stream().map(FileUploadRecord::getId).collect(Collectors.toList()))
|
.set(CollectionUtil.isNotEmpty(imagesRecords), Ticket::getImages, StrUtil.join(",",imagesRecords.stream().map(FileUploadRecord::getId).collect(Collectors.toList())))
|
||||||
.set(CollectionUtil.isNotEmpty(attachmentsRecords),Ticket::getAttachments, attachmentsRecords.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())
|
.eq(Ticket::getId, ticket.getId())
|
||||||
.update();
|
.update();
|
||||||
|
}
|
||||||
return ticket;
|
return ticket;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -347,7 +347,7 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AdminUserSimpleVO> getTicketHandle(Integer id) {
|
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());
|
List<Integer> handles=StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList());
|
||||||
if (CollectionUtil.isEmpty(handles)){
|
if (CollectionUtil.isEmpty(handles)){
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue