From 96ab6d14f8e96fe0b4d957ca982c82e2cf847b7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 13 May 2026 14:21:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(todo):=20=E6=96=B0=E5=A2=9E=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E5=B7=A5=E5=8D=95=E5=BE=85=E5=8A=9E=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=8F=8A=E5=B7=B2=E8=AF=BB=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构待办事项查询接口,支持返回问题工单待办详情VO - 增加待办事项实体和VO的已读状态字段 - 实现查询待办列表时自动标记未读待办为已读 - 新增接口获取当前用户已读和未读的待办数量 - 对应Mapper添加获取待办数量SQL查询 - 调整控制层提供待办数量的访问接口 - 删除与问题工单待办无关的旧待办项相关代码和依赖 --- .../QmsIssueTicketTodoController.java | 15 ++++++++-- .../QmsIssueTicketTodoControllerService.java | 15 ++++++---- .../pojo/vo/IssueTicketTodoNotReadNumVO.java | 17 +++++++++++ ...oItemVO.java => QmsIssueTicketToDoVO.java} | 7 ++++- .../repository/entity/QmsIssueTicketToDo.java | 5 ++++ .../mapper/QmsIssueTicketToDoMapper.java | 7 +++-- .../repository/mapper/QmsTodoItemMapper.java | 4 --- .../service/IQmsIssueTicketToDoService.java | 7 +++-- .../service/IQmsTodoItemService.java | 5 ---- .../impl/QmsIssueTicketToDoServiceImpl.java | 30 +++++++++++++++---- .../service/impl/QmsTodoItemServiceImpl.java | 8 ----- .../mapper/QmsIssueTicketToDoMapper.xml | 9 +++++- 12 files changed, 93 insertions(+), 36 deletions(-) create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/IssueTicketTodoNotReadNumVO.java rename nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/{QmsTodoItemVO.java => QmsIssueTicketToDoVO.java} (90%) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketTodoController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketTodoController.java index be242e93..86dd2a58 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketTodoController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketTodoController.java @@ -5,7 +5,8 @@ import com.nflg.qms.admin.service.QmsIssueTicketTodoControllerService; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO; -import com.nflg.wms.common.pojo.vo.QmsTodoItemVO; +import com.nflg.wms.common.pojo.vo.IssueTicketTodoNotReadNumVO; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketToDoVO; import com.nflg.wms.starter.BaseController; import jakarta.annotation.Resource; import jakarta.validation.Valid; @@ -25,8 +26,16 @@ public class QmsIssueTicketTodoController extends BaseController { * 查询 */ @PostMapping("search") - public ApiResult> search(@Valid @RequestBody QmsTodoItemSearchQO request) { - IPage page = qmsIssueTicketTodoControllerService.search(request); + public ApiResult> search(@Valid @RequestBody QmsTodoItemSearchQO request) { + IPage page = qmsIssueTicketTodoControllerService.search(request); return ApiResult.success(page); } + + /** + * 获取待办数量 + */ + @GetMapping("getCount") + public ApiResult getCount(){ + return ApiResult.success(qmsIssueTicketTodoControllerService.getCount()); + } } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketTodoControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketTodoControllerService.java index 45a7bd64..033fa204 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketTodoControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketTodoControllerService.java @@ -4,12 +4,12 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO; -import com.nflg.wms.common.pojo.vo.QmsTodoItemVO; +import com.nflg.wms.common.pojo.vo.IssueTicketTodoNotReadNumVO; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketToDoVO; +import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.repository.entity.QmsIssueTicketProcess; import com.nflg.wms.repository.service.IQmsIssueTicketProcessService; -import com.nflg.wms.repository.service.IQmsIssueTicketService; import com.nflg.wms.repository.service.IQmsIssueTicketToDoService; -import com.nflg.wms.repository.service.IQmsTodoItemService; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; @@ -28,10 +28,11 @@ public class QmsIssueTicketTodoControllerService { /** * 分页查询待办事项列表 */ - public IPage search(QmsTodoItemSearchQO request) { - IPage pageData = issueTicketToDoService.search(request); + public IPage search(QmsTodoItemSearchQO request) { + IPage pageData = issueTicketToDoService.search(request); if (CollectionUtil.isNotEmpty(pageData.getRecords())) { pageData.getRecords().forEach(item -> { + item.setIsRead(true); if (item.getStatus() != 2) { item.setCurrentHandleUserName( StrUtil.join(",", @@ -50,4 +51,8 @@ public class QmsIssueTicketTodoControllerService { } return pageData; } + + public IssueTicketTodoNotReadNumVO getCount() { + return issueTicketToDoService.getCount(UserUtil.getUserId()); + } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/IssueTicketTodoNotReadNumVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/IssueTicketTodoNotReadNumVO.java new file mode 100644 index 00000000..06dfac4a --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/IssueTicketTodoNotReadNumVO.java @@ -0,0 +1,17 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; + +@Data +public class IssueTicketTodoNotReadNumVO { + + /** + * 已读数量 + */ + private Integer readNum; + + /** + * 未读数量 + */ + private Integer unreadNum; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsTodoItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketToDoVO.java similarity index 90% rename from nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsTodoItemVO.java rename to nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketToDoVO.java index 83c37c99..b10e2a19 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsTodoItemVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketToDoVO.java @@ -8,7 +8,7 @@ import java.time.LocalDateTime; * 待办事项 信息VO */ @Data -public class QmsTodoItemVO { +public class QmsIssueTicketToDoVO { private Long id; @@ -61,4 +61,9 @@ public class QmsTodoItemVO { * 类型:0=处理主工单,1=处理工单子项;2=审核工单子项 */ private Integer type; + + /** + * 是否已读 + */ + private Boolean isRead; } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIssueTicketToDo.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIssueTicketToDo.java index e30f0d57..0256caf1 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIssueTicketToDo.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIssueTicketToDo.java @@ -39,4 +39,9 @@ public class QmsIssueTicketToDo implements Serializable { * 处理人ID */ private Long handlerUserId; + + /** + * 是否已读 + */ + private Boolean isRead; } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsIssueTicketToDoMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsIssueTicketToDoMapper.java index 4549ee15..9e5a97a7 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsIssueTicketToDoMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsIssueTicketToDoMapper.java @@ -4,7 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO; -import com.nflg.wms.common.pojo.vo.QmsTodoItemVO; +import com.nflg.wms.common.pojo.vo.IssueTicketTodoNotReadNumVO; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketToDoVO; import com.nflg.wms.repository.entity.QmsIssueTicketToDo; /** @@ -12,5 +13,7 @@ import com.nflg.wms.repository.entity.QmsIssueTicketToDo; */ public interface QmsIssueTicketToDoMapper extends BaseMapper { - IPage search(QmsTodoItemSearchQO request, Long userId, Page page); + IPage search(QmsTodoItemSearchQO request, Long userId, Page page); + + IssueTicketTodoNotReadNumVO getCount(Long userId); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsTodoItemMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsTodoItemMapper.java index 6c8de57f..c85b64ff 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsTodoItemMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsTodoItemMapper.java @@ -1,10 +1,6 @@ package com.nflg.wms.repository.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO; -import com.nflg.wms.common.pojo.vo.QmsTodoItemVO; import com.nflg.wms.repository.entity.QmsTodoItem; /** diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIssueTicketToDoService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIssueTicketToDoService.java index 98cb7806..6273aba3 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIssueTicketToDoService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIssueTicketToDoService.java @@ -3,7 +3,8 @@ package com.nflg.wms.repository.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO; -import com.nflg.wms.common.pojo.vo.QmsTodoItemVO; +import com.nflg.wms.common.pojo.vo.IssueTicketTodoNotReadNumVO; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketToDoVO; import com.nflg.wms.repository.entity.QmsIssueTicketToDo; /** @@ -14,7 +15,9 @@ public interface IQmsIssueTicketToDoService extends IService /** * 分页查询待办事项列表 */ - IPage search(QmsTodoItemSearchQO request); + IPage search(QmsTodoItemSearchQO request); void processed(Long id); + + IssueTicketTodoNotReadNumVO getCount(Long userId); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsTodoItemService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsTodoItemService.java index 90b6a246..06fb5a09 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsTodoItemService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsTodoItemService.java @@ -1,13 +1,8 @@ package com.nflg.wms.repository.service; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; -import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO; -import com.nflg.wms.common.pojo.vo.QmsTodoItemVO; import com.nflg.wms.repository.entity.QmsTodoItem; -import java.util.List; - /** * 待办事项 服务类 */ diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIssueTicketToDoServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIssueTicketToDoServiceImpl.java index 2839e14e..b3ecb0f8 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIssueTicketToDoServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIssueTicketToDoServiceImpl.java @@ -1,18 +1,19 @@ package com.nflg.wms.repository.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO; -import com.nflg.wms.common.pojo.vo.QmsTodoItemVO; +import com.nflg.wms.common.pojo.vo.IssueTicketTodoNotReadNumVO; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketToDoVO; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.repository.entity.QmsIssueTicketToDo; -import com.nflg.wms.repository.entity.QmsTodoItem; import com.nflg.wms.repository.mapper.QmsIssueTicketToDoMapper; import com.nflg.wms.repository.service.IQmsIssueTicketToDoService; import org.springframework.stereotype.Service; -import java.time.LocalDateTime; +import java.util.List; /** * 质量问题工单待办 ServiceImpl @@ -23,8 +24,22 @@ public class QmsIssueTicketToDoServiceImpl implements IQmsIssueTicketToDoService { @Override - public IPage search(QmsTodoItemSearchQO request) { - return baseMapper.search(request, UserUtil.getUserId(), new Page<>(request.getPage(), request.getPageSize())); + public IPage search(QmsTodoItemSearchQO request) { + IPage pageData = baseMapper.search(request, UserUtil.getUserId(), new Page<>(request.getPage(), request.getPageSize())); + if (CollectionUtil.isNotEmpty(pageData.getRecords())) { + List ticketIds = pageData.getRecords() + .stream() + .filter(todo -> !todo.getIsRead()) + .map(QmsIssueTicketToDoVO::getId) + .toList(); + if (CollectionUtil.isNotEmpty(ticketIds)) { + lambdaUpdate() + .in(QmsIssueTicketToDo::getTicketId, ticketIds) + .set(QmsIssueTicketToDo::getIsRead, true) + .update(); + } + } + return pageData; } @Override @@ -36,4 +51,9 @@ public class QmsIssueTicketToDoServiceImpl .eq(QmsIssueTicketToDo::getHasProcessed, false) .update(); } + + @Override + public IssueTicketTodoNotReadNumVO getCount(Long userId) { + return baseMapper.getCount(userId); + } } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsTodoItemServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsTodoItemServiceImpl.java index c74b775a..7bda86a6 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsTodoItemServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsTodoItemServiceImpl.java @@ -1,19 +1,11 @@ package com.nflg.wms.repository.service.impl; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO; -import com.nflg.wms.common.pojo.vo.QmsTodoItemVO; -import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.repository.entity.QmsTodoItem; import com.nflg.wms.repository.mapper.QmsTodoItemMapper; import com.nflg.wms.repository.service.IQmsTodoItemService; import org.springframework.stereotype.Service; -import java.time.LocalDateTime; -import java.util.List; - /** * 待办事项 服务实现类 */ diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsIssueTicketToDoMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsIssueTicketToDoMapper.xml index 3838d1fc..da16f385 100644 --- a/nflg-wms-repository/src/main/resources/mapper/QmsIssueTicketToDoMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/QmsIssueTicketToDoMapper.xml @@ -2,13 +2,14 @@ - SELECT CASE WHEN vit."type" = 0 THEN 0 WHEN vit.handler_user_id = #{userId} THEN 1 WHEN vit.approval_user_id = #{userId} THEN 2 END AS type, + itd.is_read, vit.* FROM qms_issue_ticket_todo itd INNER JOIN v_qms_issue_ticket vit ON itd.ticket_id = vit.ticket_id @@ -31,4 +32,10 @@ ORDER BY itd.id DESC +