From 76e8235d75beaacc98d3791a2d6667f191a79d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 8 Jan 2026 13:44:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(chat):=20=E6=B7=BB=E5=8A=A0=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E9=99=84=E4=BB=B6=E9=AA=8C=E8=AF=81=E5=92=8C=E6=92=A4?= =?UTF-8?q?=E5=9B=9E=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 AddChatMessageRequest 中添加 @Valid 注解验证附件、图片和被艾特用户列表 - 为 FileUploadVO 添加文件id、名称和路径的非空验证 - 为 RemindUserRequest 添加用户id和名称的非空验证 - 实现消息撤回时自动删除相关附件记录功能 - 重构派工单搜索接口,添加用户ID参数和排序逻辑 - 更新工单重新开启权限判断逻辑,限制仅用户本人可操作 --- .../cfs/controller/TicketController.java | 7 ++++--- .../pojo/request/AddChatMessageRequest.java | 4 ++++ .../pojo/request/RemindUserRequest.java | 5 +++++ .../common/pojo/vo/FileUploadVO.java | 6 ++++++ .../gongfu/controller/DispatchController.java | 2 +- .../mapper/GongfuDispatchMapper.java | 2 +- .../service/IGongfuDispatchService.java | 2 +- .../repository/service/TicketChatService.java | 19 +++++++++++++++++++ .../impl/GongfuDispatchServiceImpl.java | 5 +++-- .../resources/mapper/GongfuDispatchMapper.xml | 11 ++++++----- 10 files changed, 50 insertions(+), 13 deletions(-) diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java index c221bd38..4245a8e8 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java @@ -328,15 +328,16 @@ public class TicketController extends ControllerBase { if (Objects.nonNull(part)) { vo.setComponent(part.getPartName()); } - vo.setCanReopen(Objects.equals(ticket.getState(), TicketState.ProcessingCompleted.getState()) - && !ticketSolutionAuditService.lambdaQuery().eq(TicketSolutionAudit::getTicketId, ticket.getId()).exists()); } else { GongfuDevicePart part = part1Service.getByIdAndLanguage(ticket.getComponentId(), MultilingualUtil.getLanguage()); if (Objects.nonNull(part)) { vo.setComponent(part.getPartName()); } - vo.setCanReopen(false); } + vo.setCanReopen((StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()) && Objects.equals(ticket.getUserId(), AppUserUtil.getUserId())) + && Objects.equals(ticket.getState(), TicketState.ProcessingCompleted.getState()) + && !ticketEvaluateService.lambdaQuery().eq(TicketEvaluate::getTicketId, ticket.getId()).exists() + ); return ApiResult.success(vo); } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AddChatMessageRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AddChatMessageRequest.java index f5dfea9b..ede3cc41 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AddChatMessageRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AddChatMessageRequest.java @@ -3,6 +3,7 @@ package com.nflg.mobilebroken.common.pojo.request; import com.nflg.mobilebroken.common.pojo.vo.FileUploadVO; import lombok.Data; +import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.util.List; @@ -20,14 +21,17 @@ public class AddChatMessageRequest { private String audioUrl; //附件列表 + @Valid private List attachments; //图片列表 + @Valid private List images; // 引用的消息 private String quoteId; //被艾特的用户列表 + @Valid private List remindUsers; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/RemindUserRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/RemindUserRequest.java index cc2cbb7b..bce5767f 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/RemindUserRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/RemindUserRequest.java @@ -2,16 +2,21 @@ package com.nflg.mobilebroken.common.pojo.request; import lombok.Data; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + @Data public class RemindUserRequest { /** * 用户id */ + @NotNull private Integer id; /** * 用户名 */ + @NotBlank private String name; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/FileUploadVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/FileUploadVO.java index 26748a16..8a79b387 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/FileUploadVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/FileUploadVO.java @@ -5,6 +5,9 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + @Data @Accessors(chain = true) @AllArgsConstructor @@ -14,16 +17,19 @@ public class FileUploadVO { /** * 文件id */ + @NotNull(message = "文件id不能为空") private Integer id; /** * 显示名称 */ + @NotBlank(message = "文件名称不能为空") private String fileName; /** * url路径 */ + @NotBlank(message = "文件路径不能为空") private String url; /** diff --git a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/DispatchController.java b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/DispatchController.java index b478d419..678bc458 100644 --- a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/DispatchController.java +++ b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/DispatchController.java @@ -210,7 +210,7 @@ public class DispatchController extends ControllerBase { */ @PostMapping("/search") public ApiResult> search(@Valid @RequestBody DispatchSearchRequest request) { - return ApiResult.success(dispatchService.search(request)); + return ApiResult.success(dispatchService.search(request, AdminUserUtil.getUserId())); } /** diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/GongfuDispatchMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/GongfuDispatchMapper.java index a8fbe581..b947d749 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/GongfuDispatchMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/GongfuDispatchMapper.java @@ -19,7 +19,7 @@ import java.util.List; */ public interface GongfuDispatchMapper extends BaseMapper { - IPage search(DispatchSearchRequest request, Page objectPage); + IPage search(DispatchSearchRequest request, Integer userId, Page objectPage); DispatchVO getInfo(Long id); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IGongfuDispatchService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IGongfuDispatchService.java index 0e4366aa..9ab629a1 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IGongfuDispatchService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IGongfuDispatchService.java @@ -18,7 +18,7 @@ import java.util.List; */ public interface IGongfuDispatchService extends IService { - IPage search(DispatchSearchRequest request); + IPage search(DispatchSearchRequest request, Integer userId); DispatchVO getInfo(Long id); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/TicketChatService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/TicketChatService.java index be54ffb5..4e922fa6 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/TicketChatService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/TicketChatService.java @@ -8,8 +8,10 @@ import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO; import com.nflg.mobilebroken.common.pojo.dto.TicketChatDTO; import com.nflg.mobilebroken.common.pojo.dto.TicketSet; import com.nflg.mobilebroken.common.pojo.vo.ChatMessageVO; +import com.nflg.mobilebroken.common.pojo.vo.FileUploadVO; import com.nflg.mobilebroken.common.util.MultilingualUtil; import com.nflg.mobilebroken.common.util.VUtils; +import com.nflg.mobilebroken.repository.entity.FileUploadRecord; import com.nflg.mobilebroken.repository.entity.ParamConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.data.mongodb.core.MongoTemplate; @@ -23,6 +25,7 @@ import java.time.Duration; import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -38,6 +41,9 @@ public class TicketChatService { @Resource private IParamConfigService paramConfigService; + @Resource + private IFileUploadRecordService fileUploadRecordService; + public void add(TicketChatDTO ticketChatDTO) { mongoTemplate.save(ticketChatDTO); } @@ -147,6 +153,19 @@ public class TicketChatService { log.info("消息撤回 找到消息"); message.setContent("消息已撤回"); flag=true; + //删除消息附件 + List fileIds = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(message.getAttachments())) { + fileIds.addAll(message.getAttachments().stream().map(FileUploadVO::getId).collect(Collectors.toList())); + } + if (CollectionUtil.isNotEmpty(message.getImages())) { + fileIds.addAll(message.getImages().stream().map(FileUploadVO::getId).collect(Collectors.toList())); + } + if (CollectionUtil.isNotEmpty(fileIds)) { + fileUploadRecordService.lambdaUpdate() + .in(FileUploadRecord::getId, fileIds) + .remove(); + } } } if (flag && Objects.nonNull(message.getQuote()) && message.getQuote().getId().equals(messageId)){ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/GongfuDispatchServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/GongfuDispatchServiceImpl.java index 710c93fc..562c2d62 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/GongfuDispatchServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/GongfuDispatchServiceImpl.java @@ -18,6 +18,7 @@ import java.util.Objects; *

* 派工单 服务实现类 *

+ * * @author 代码生成器生成 * @since 2025 */ @@ -25,8 +26,8 @@ import java.util.Objects; public class GongfuDispatchServiceImpl extends ServiceImpl implements IGongfuDispatchService { @Override - public IPage search(DispatchSearchRequest request) { - return baseMapper.search(request, new Page<>(request.getPage(), request.getPageSize())); + public IPage search(DispatchSearchRequest request, Integer userId) { + return baseMapper.search(request, userId, new Page<>(request.getPage(), request.getPageSize())); } @Override diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/GongfuDispatchMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/GongfuDispatchMapper.xml index 964c4dad..4edea074 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/GongfuDispatchMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/GongfuDispatchMapper.xml @@ -3,7 +3,8 @@