From 10f1d375641304651d6e7ec5cfa866b4feee8e12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 12 May 2026 10:19:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?refactor(qms-issue-ticket):=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E5=B7=A5=E5=8D=95=E5=BE=85=E5=8A=9E=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E6=9B=BF=E6=8D=A2=E6=97=A7=E5=BE=85?= =?UTF-8?q?=E5=8A=9E=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除旧的QmsTodoItem相关接口和实现,移除待办事项的isRead字段 - 新增质量问题工单待办实体QmsIssueTicketToDo及对应的Service和Mapper实现 - 调整工单处理流程中待办消息的创建和保存,使用QmsIssueTicketToDo替代旧的待办实体 - 重命名并重构待办事项控制器及服务为QmsIssueTicketTodo相关,实现分页查询及标记处理 - 更新查询参数和返回VO,支持工单相关字段和处理状态查询过滤 - 清理和优化相关Mapper XML配置及SQL,简化查询条件和联表关系 - 废弃旧的批量标记已读功能,改为处理状态标记机制 - 保持接口方法语义一致,确保现有功能无缝迁移至新待办结构 --- .../controller/QmsCoaTaskController.java | 2 - ...java => QmsIssueTicketTodoController.java} | 25 ++---- .../qms/admin/controller/TestController.java | 1 - .../QmsIssueTicketControllerService.java | 37 ++++---- ...msIssueTicketProcessControllerService.java | 85 ++++++------------- ... QmsIssueTicketTodoControllerService.java} | 16 +--- .../common/pojo/qo/QmsTodoItemSearchQO.java | 17 ++-- .../wms/common/pojo/vo/QmsTodoItemVO.java | 53 +++++------- .../repository/entity/QmsIssueTicketToDo.java | 42 +++++++++ .../mapper/QmsIssueTicketToDoMapper.java | 16 ++++ .../repository/mapper/QmsTodoItemMapper.java | 1 - .../service/IQmsIssueTicketToDoService.java | 20 +++++ .../service/IQmsTodoItemService.java | 10 --- .../impl/QmsIssueTicketToDoServiceImpl.java | 39 +++++++++ .../service/impl/QmsTodoItemServiceImpl.java | 22 ----- .../mapper/QmsIssueTicketToDoMapper.xml | 34 ++++++++ .../resources/mapper/QmsTodoItemMapper.xml | 39 --------- .../PdiTaskOverdueNotifyProcessor.java | 3 - 18 files changed, 227 insertions(+), 235 deletions(-) rename nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/{TodoItemController.java => QmsIssueTicketTodoController.java} (52%) rename nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/{TodoItemControllerService.java => QmsIssueTicketTodoControllerService.java} (64%) create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIssueTicketToDo.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsIssueTicketToDoMapper.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIssueTicketToDoService.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIssueTicketToDoServiceImpl.java create mode 100644 nflg-wms-repository/src/main/resources/mapper/QmsIssueTicketToDoMapper.xml diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsCoaTaskController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsCoaTaskController.java index 1126a7cc..d829590e 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsCoaTaskController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsCoaTaskController.java @@ -92,7 +92,6 @@ public class QmsCoaTaskController extends BaseController { // 推送COA通知 QmsTodoItem qmsTodoItem = new QmsTodoItem() .setCode(basdeSerialNumberControllerService.generateSerialNumber(32)) - .setIsRead(false) .setSourceTypeId(dictionaryItemServiceId) .setSourceId(coaTaskService.lambdaQuery().eq(QmsCoaTask::getMaterialId,qo.getMaterialNo()).one().getId()) .setCreateUserId(UserUtil.getUserId()) @@ -120,7 +119,6 @@ public class QmsCoaTaskController extends BaseController { for (Long taskId : ids) { QmsTodoItem qmsTodoItem = new QmsTodoItem() .setCode(basdeSerialNumberControllerService.generateSerialNumber(32)) - .setIsRead(false) .setSourceTypeId(dictionaryItemServiceId) .setSourceId(taskId) .setCreateUserId(currentUserId) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/TodoItemController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketTodoController.java similarity index 52% rename from nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/TodoItemController.java rename to nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketTodoController.java index da343bd1..40112e9e 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/TodoItemController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketTodoController.java @@ -1,7 +1,7 @@ package com.nflg.qms.admin.controller; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.nflg.qms.admin.service.TodoItemControllerService; +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; @@ -11,33 +11,22 @@ import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.springframework.web.bind.annotation.*; -import java.util.List; - /** - * 待办事项 + * 工单待办 */ @RestController -@RequestMapping("/todo-item") -public class TodoItemController extends BaseController { +@RequestMapping("/ticket-todo-item") +public class QmsIssueTicketTodoController extends BaseController { @Resource - private TodoItemControllerService todoItemControllerService; + private QmsIssueTicketTodoControllerService qmsIssueTicketTodoControllerService; /** - * 分页查询待办事项列表 + * 查询 */ @PostMapping("search") public ApiResult> search(@Valid @RequestBody QmsTodoItemSearchQO request) { - IPage page = todoItemControllerService.search(request); + IPage page = qmsIssueTicketTodoControllerService.search(request); return ApiResult.success(page); } - - /** - * 批量标记已读 - */ - @PostMapping("mark-as-read") - public ApiResult markAsRead(@RequestBody List ids) { - todoItemControllerService.markAsRead(ids); - return ApiResult.success(); - } } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/TestController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/TestController.java index c8cb9072..387c731a 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/TestController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/TestController.java @@ -43,7 +43,6 @@ public class TestController extends BaseController { VUtil.trueThrowBusinessError(Objects.isNull(dictionaryItemServiceId)).throwMessage("消息类型不存在"); QmsTodoItem qmsTodoItem = new QmsTodoItem() .setCode(basdeSerialNumberControllerService.generateSerialNumber(32)) - .setIsRead(false) .setSourceTypeId(dictionaryItemServiceId) .setSourceId(0L) .setCreateUserId(UserUtil.getUserId()) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketControllerService.java index b7392a80..5764a172 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketControllerService.java @@ -51,7 +51,7 @@ public class QmsIssueTicketControllerService { private IUserService userService; @Resource - private IQmsTodoItemService todoItemService; + private IQmsIssueTicketToDoService issueTicketToDoService; @Resource private IDictionaryItemService dictionaryItemService; @@ -147,7 +147,7 @@ public class QmsIssueTicketControllerService { // 5. 为每个处理人创建处理记录并推送待办 List processes = new ArrayList<>(); - List todoItems = new ArrayList<>(); + List todoItems = new ArrayList<>(); for (Long handlerUserId : request.getHandlerUserIds()) { User handlerUser = handlerUserMap.get(handlerUserId); @@ -160,14 +160,9 @@ public class QmsIssueTicketControllerService { processes.add(process); // 创建待办消息 - QmsTodoItem todoItem = new QmsTodoItem() - .setCode(ticket.getTicketNo()) - .setIsRead(false) - .setSourceTypeId(sourceTypeId) - .setSourceId(process.getId()) // 使用处理记录的ID - .setCreateUserId(handlerUserId) - .setCreateUserName(handlerUser.getUserName()) - .setCreateTime(now); + QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() + .setTicketId(ticket.getId()) + .setHandlerUserId(handlerUserId); todoItems.add(todoItem); } @@ -175,12 +170,12 @@ public class QmsIssueTicketControllerService { issueTicketProcessService.saveBatch(processes); // 7. 更新处理记录中的sourceId(因为saveBatch后才有ID) - for (int i = 0; i < processes.size(); i++) { - todoItems.get(i).setSourceId(processes.get(i).getId()); - } +// for (int i = 0; i < processes.size(); i++) { +// todoItems.get(i).setSourceId(processes.get(i).getId()); +// } // 8. 批量推送待办消息 - todoItemService.saveBatch(todoItems); + issueTicketToDoService.saveBatch(todoItems); // 9. 如果工单状态是待流转(0),更新为处理中(1) if (ticket.getStatus() != null && ticket.getStatus() == 0) { @@ -512,6 +507,8 @@ public class QmsIssueTicketControllerService { } issueTicketService.updateById(entity); + issueTicketToDoService.processed(entity.getId()); + if (request.getApprovalStatus() != 5) { wmsIncomingInspectionTaskCallbackService.processAsync(entity.getSourceId(), request.getApprovalStatus()); } @@ -901,16 +898,12 @@ public class QmsIssueTicketControllerService { List users = userService.lambdaQuery() .eq(User::getPurchasingGroup, detail.getPurchaseGroup()) .list(); - List todoItems = users.stream().map(user -> new QmsTodoItem() - .setCode(detail.getTaskNo()) - .setSourceTypeId(dictionaryItemService.getIdByCode("MessageType", "IncomingMaterialInspectionApproval")) - .setSourceId(entity.getId()) - .setCreateUserId(user.getId()) - .setCreateUserName(user.getUserName()) - .setCreateTime(LocalDateTime.now()) + List todoItems = users.stream().map(user -> new QmsIssueTicketToDo() + .setTicketId(entity.getId()) + .setHandlerUserId(user.getId()) ).toList(); if (CollectionUtil.isNotEmpty(todoItems)) { - todoItemService.saveBatch(todoItems); + issueTicketToDoService.saveBatch(todoItems); } } } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketProcessControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketProcessControllerService.java index 03f1f76c..4f9964f4 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketProcessControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketProcessControllerService.java @@ -6,19 +6,8 @@ import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessAddQO; import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessDraftQO; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; -import com.nflg.wms.repository.entity.Department; -import com.nflg.wms.repository.entity.QmsIssueTicket; -import com.nflg.wms.repository.entity.QmsIssueTicketProcess; -import com.nflg.wms.repository.entity.QmsTodoItem; -import com.nflg.wms.repository.entity.User; -import com.nflg.wms.repository.entity.UserInterior; -import com.nflg.wms.repository.service.IDepartmentService; -import com.nflg.wms.repository.service.IDictionaryItemService; -import com.nflg.wms.repository.service.IQmsIssueTicketProcessService; -import com.nflg.wms.repository.service.IQmsIssueTicketService; -import com.nflg.wms.repository.service.IQmsTodoItemService; -import com.nflg.wms.repository.service.IUserInteriorService; -import com.nflg.wms.repository.service.IUserService; +import com.nflg.wms.repository.entity.*; +import com.nflg.wms.repository.service.*; import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.springframework.scheduling.annotation.Async; @@ -53,7 +42,7 @@ public class QmsIssueTicketProcessControllerService { private IQmsIssueTicketService issueTicketService; @Resource - private IQmsTodoItemService todoItemService; + private IQmsIssueTicketToDoService issueTicketToDoService; @Resource private IDictionaryItemService dictionaryItemService; @@ -99,15 +88,10 @@ public class QmsIssueTicketProcessControllerService { // 推送待办消息 Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "PDIDefectiveProductHandling"); User handlerUser = userService.getById(handlerUserId); - QmsTodoItem todoItem = new QmsTodoItem() - .setCode(ticketNo) - .setIsRead(false) - .setSourceTypeId(sourceTypeId) - .setSourceId(processId) - .setCreateUserId(handlerUserId) - .setCreateUserName(handlerUser != null ? handlerUser.getUserName() : null) - .setCreateTime(LocalDateTime.now()); - todoItemService.save(todoItem); + QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() + .setTicketId(issueTicketId) + .setHandlerUserId(handlerUserId); + issueTicketToDoService.save(todoItem); } private Long doAdd(Long issueTicketId, Long handlerUserId, List taskResultIds) { @@ -180,16 +164,10 @@ public class QmsIssueTicketProcessControllerService { if (userInterior != null && userInterior.getDeptId() != null) { Department department = departmentService.getById(userInterior.getDeptId()); if (department != null && department.getHeadUserId() != null) { - Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "InspectionTaskWorkOrder"); - QmsTodoItem todoItem = new QmsTodoItem() - .setCode(ticket.getTicketNo()) - .setIsRead(false) - .setSourceTypeId(sourceTypeId) - .setSourceId(process.getId()) - .setCreateUserId(department.getHeadUserId()) - .setCreateUserName(department.getHeadUserName()) - .setCreateTime(now); - todoItemService.save(todoItem); + QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() + .setTicketId(ticket.getId()) + .setHandlerUserId(department.getHeadUserId()); + issueTicketToDoService.save(todoItem); } } } else { @@ -229,15 +207,10 @@ public class QmsIssueTicketProcessControllerService { // 驳回:推送待办给处理人 Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "InspectionTaskWorkOrder"); User handler = userService.getById(process.getHandlerUserId()); - QmsTodoItem todoItem = new QmsTodoItem() - .setCode(ticket.getTicketNo()) - .setIsRead(false) - .setSourceTypeId(sourceTypeId) - .setSourceId(process.getId()) - .setCreateUserId(process.getHandlerUserId()) - .setCreateUserName(handler != null ? handler.getUserName() : null) - .setCreateTime(now); - todoItemService.save(todoItem); + QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() + .setTicketId(ticket.getId()) + .setHandlerUserId(process.getHandlerUserId()); + issueTicketToDoService.save(todoItem); } else if (leaderApprovalResult == 1) { // 同意:检查同一工单下所有处理记录是否都已完成 Long issueTicketId = process.getIssueTicketId(); @@ -293,15 +266,10 @@ public class QmsIssueTicketProcessControllerService { if (request.getApprovalStatus() == 1) { // 驳回:推送待办给工单创建人 User creator = userService.getById(ticket.getCreateUserId()); - QmsTodoItem todoItem = new QmsTodoItem() - .setCode(ticket.getTicketNo()) - .setIsRead(false) - .setSourceTypeId(sourceTypeId) - .setSourceId(process.getId()) - .setCreateUserId(ticket.getCreateUserId()) - .setCreateUserName(creator != null ? creator.getUserName() : null) - .setCreateTime(now); - todoItemService.save(todoItem); + QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() + .setTicketId(ticket.getId()) + .setHandlerUserId(ticket.getCreateUserId()); + issueTicketToDoService.save(todoItem); } else if (request.getApprovalStatus() == 0) { // 通过:推送给当前用户所在部门负责人 Long currentUserId = UserUtil.getUserId(); @@ -311,17 +279,14 @@ public class QmsIssueTicketProcessControllerService { if (userInterior != null && userInterior.getDeptId() != null) { Department department = departmentService.getById(userInterior.getDeptId()); if (department != null && department.getHeadUserId() != null) { - QmsTodoItem todoItem = new QmsTodoItem() - .setCode(ticket.getTicketNo()) - .setIsRead(false) - .setSourceTypeId(sourceTypeId) - .setSourceId(process.getId()) - .setCreateUserId(department.getHeadUserId()) - .setCreateUserName(department.getHeadUserName()) - .setCreateTime(now); - todoItemService.save(todoItem); + QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() + .setTicketId(ticket.getId()) + .setHandlerUserId(department.getHeadUserId()); + issueTicketToDoService.save(todoItem); } } } + + issueTicketToDoService.processed(ticket.getId()); } } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/TodoItemControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketTodoControllerService.java similarity index 64% rename from nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/TodoItemControllerService.java rename to nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketTodoControllerService.java index d8b684b7..e1837409 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/TodoItemControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketTodoControllerService.java @@ -3,32 +3,24 @@ package com.nflg.qms.admin.service; 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.repository.service.IQmsIssueTicketToDoService; import com.nflg.wms.repository.service.IQmsTodoItemService; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; -import java.util.List; - /** * 待办事项业务逻辑 */ @Component -public class TodoItemControllerService { +public class QmsIssueTicketTodoControllerService { @Resource - private IQmsTodoItemService todoItemService; + private IQmsIssueTicketToDoService issueTicketToDoService; /** * 分页查询待办事项列表 */ public IPage search(QmsTodoItemSearchQO request) { - return todoItemService.search(request); - } - - /** - * 批量标记已读 - */ - public void markAsRead(List ids) { - todoItemService.markAsRead(ids); + return issueTicketToDoService.search(request); } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsTodoItemSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsTodoItemSearchQO.java index 3328efae..c26e5bd5 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsTodoItemSearchQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsTodoItemSearchQO.java @@ -11,22 +11,17 @@ import lombok.EqualsAndHashCode; public class QmsTodoItemSearchQO extends SearchBaseQO { /** - * 编号 + * 来源类型:0=IQC检测任务,1=PDI检测任务,2=巡检 */ - private String code; + private Short sourceType; /** - * 标题 + * 工单标题 */ - private String title; + private String ticketTitle; /** - * 来源类型ID + * 是否已处理 */ - private Long sourceTypeId; - - /** - * 是否已读 - */ - private Boolean isRead; + private Boolean hasProcessed; } 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/QmsTodoItemVO.java index 00cc7859..7992fa2b 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/QmsTodoItemVO.java @@ -13,62 +13,47 @@ public class QmsTodoItemVO { private Long id; /** - * 编号 + * 工单编号 */ - private String code; + private String ticketNo; /** - * 标题 + * 工单标题 */ - private String title; + private String ticketTitle; /** - * 来源类型ID + * 来源类型:0=IQC检测任务,1=PDI检测任务,2=巡检 */ - private Long sourceTypeId; + private Short sourceType; /** - * 来源类型名称 - */ - private String sourceTypeName; - - /** - * 来源ID - */ - private Long sourceId; - - /** - * 是否已读 - */ - private Boolean isRead; - - /** - * 创建人ID - */ - private Long createUserId; - - /** - * 创建人姓名 + * 流程发起人 */ private String createUserName; /** - * 创建时间 + * 流程发起时间 */ private LocalDateTime createTime; /** - * 更新人ID + * 当前节点处理人 */ - private Long updateUserId; + private String currentUserName; /** - * 更新人姓名 + * 流程结束时间 */ - private String updateUserName; + private LocalDateTime completeTime; /** - * 更新时间 + * 状态:0=待流转,1=处理中,2=已完成 */ - private LocalDateTime updateTime; + private Short status; + + /** + * 类型:0=处理主工单,1=处理工单子项;2=审核工单子项 + */ + private Integer type; } 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 new file mode 100644 index 00000000..e30f0d57 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIssueTicketToDo.java @@ -0,0 +1,42 @@ +package com.nflg.wms.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 质量问题工单待办表 + * @since 2026 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("qms_issue_ticket_todo") +public class QmsIssueTicketToDo implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 工单ID + */ + private Long ticketId; + + /** + * 是否已处理 + */ + private Boolean hasProcessed; + + /** + * 处理人ID + */ + private Long handlerUserId; +} 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 new file mode 100644 index 00000000..4549ee15 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsIssueTicketToDoMapper.java @@ -0,0 +1,16 @@ +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.QmsIssueTicketToDo; + +/** + * 质量问题工单待办 Mapper 接口 + */ +public interface QmsIssueTicketToDoMapper extends BaseMapper { + + IPage search(QmsTodoItemSearchQO request, Long userId, Page page); +} 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 ca830cb3..6c8de57f 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 @@ -12,5 +12,4 @@ import com.nflg.wms.repository.entity.QmsTodoItem; */ public interface QmsTodoItemMapper extends BaseMapper { - IPage search(QmsTodoItemSearchQO request, Page page); } 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 new file mode 100644 index 00000000..98cb7806 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIssueTicketToDoService.java @@ -0,0 +1,20 @@ +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.QmsIssueTicketToDo; + +/** + * 质量问题工单待办 Service + */ +public interface IQmsIssueTicketToDoService extends IService { + + /** + * 分页查询待办事项列表 + */ + IPage search(QmsTodoItemSearchQO request); + + void processed(Long id); +} 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 11eebaed..90b6a246 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 @@ -13,14 +13,4 @@ import java.util.List; */ public interface IQmsTodoItemService extends IService { - /** - * 分页查询待办事项列表 - */ - IPage search(QmsTodoItemSearchQO request); - - /** - * 批量标记已读 - * @param ids 待办事项ID列表 - */ - void markAsRead(List ids); } 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 new file mode 100644 index 00000000..2839e14e --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIssueTicketToDoServiceImpl.java @@ -0,0 +1,39 @@ +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.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; + +/** + * 质量问题工单待办 ServiceImpl + */ +@Service +public class QmsIssueTicketToDoServiceImpl + extends ServiceImpl + implements IQmsIssueTicketToDoService { + + @Override + public IPage search(QmsTodoItemSearchQO request) { + return baseMapper.search(request, UserUtil.getUserId(), new Page<>(request.getPage(), request.getPageSize())); + } + + @Override + public void processed(Long id) { + lambdaUpdate() + .set(QmsIssueTicketToDo::getHasProcessed, true) + .eq(QmsIssueTicketToDo::getTicketId, id) + .eq(QmsIssueTicketToDo::getHandlerUserId, UserUtil.getUserId()) + .eq(QmsIssueTicketToDo::getHasProcessed, false) + .update(); + } +} 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 b4438e80..c74b775a 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 @@ -20,26 +20,4 @@ import java.util.List; @Service public class QmsTodoItemServiceImpl extends ServiceImpl implements IQmsTodoItemService { - @Override - public IPage search(QmsTodoItemSearchQO request) { - return baseMapper.search(request, new Page<>(request.getPage(), request.getPageSize())); - } - - @Override - public void markAsRead(List ids) { - if (ids == null || ids.isEmpty()) { - return; - } - Long userId = UserUtil.getUserId(); - String userName = UserUtil.getUserName(); - LocalDateTime now = LocalDateTime.now(); - lambdaUpdate() - .eq(QmsTodoItem::getIsRead, false) - .in(QmsTodoItem::getId, ids) - .set(QmsTodoItem::getIsRead, true) - .set(QmsTodoItem::getUpdateUserId, userId) - .set(QmsTodoItem::getUpdateUserName, userName) - .set(QmsTodoItem::getUpdateTime, now) - .update(); - } } diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsIssueTicketToDoMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsIssueTicketToDoMapper.xml new file mode 100644 index 00000000..258ee34e --- /dev/null +++ b/nflg-wms-repository/src/main/resources/mapper/QmsIssueTicketToDoMapper.xml @@ -0,0 +1,34 @@ + + + + + + + diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsTodoItemMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsTodoItemMapper.xml index ec9872e1..ed57d57c 100644 --- a/nflg-wms-repository/src/main/resources/mapper/QmsTodoItemMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/QmsTodoItemMapper.xml @@ -2,43 +2,4 @@ - - diff --git a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/PdiTaskOverdueNotifyProcessor.java b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/PdiTaskOverdueNotifyProcessor.java index 9807784f..b7458d61 100644 --- a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/PdiTaskOverdueNotifyProcessor.java +++ b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/PdiTaskOverdueNotifyProcessor.java @@ -164,7 +164,6 @@ public class PdiTaskOverdueNotifyProcessor implements BasicProcessor { .setCode(task.getTaskNo()) .setSourceTypeId(sourceTypeId) .setSourceId(task.getId()) - .setIsRead(false) .setCreateUserId(leaderId) .setCreateUserName(leader != null ? leader.getUserName() : "未知") .setCreateTime(now); @@ -205,7 +204,6 @@ public class PdiTaskOverdueNotifyProcessor implements BasicProcessor { .setCode(task.getTaskNo()) .setSourceTypeId(sourceTypeId) .setSourceId(task.getId()) - .setIsRead(false) .setCreateUserId(inspectorId) .setCreateUserName(inspector != null ? inspector.getUserName() : "未知") .setCreateTime(now); @@ -221,7 +219,6 @@ public class PdiTaskOverdueNotifyProcessor implements BasicProcessor { .setCode(task.getTaskNo()) .setSourceTypeId(sourceTypeId) .setSourceId(task.getId()) - .setIsRead(false) .setCreateUserId(assistantId) .setCreateUserName(assistant != null ? assistant.getUserName() : "未知") .setCreateTime(now); From 1651ad531873d0919f20642087eb3523eb2f5be0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 12 May 2026 10:41:49 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat(issue-ticket):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=B4=A8=E9=87=8F=E9=97=AE=E9=A2=98=E5=B7=A5=E5=8D=95=E5=BE=85?= =?UTF-8?q?=E5=8A=9E=E5=88=97=E8=A1=A8=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改控制器注释,明确为质量问题工单待办 - 查询待办事项时关联获取当前未完成工单的所有处理人名称 - 调整SQL查询逻辑,修正关联字段并限制待办视图的访问权限 - QmsTodoItemVO新增ticketId字段,替换currentUserName为currentHandleUserName以更准确表示含义 --- .../QmsIssueTicketTodoController.java | 2 +- .../QmsIssueTicketTodoControllerService.java | 29 ++++++++++++++++++- .../wms/common/pojo/vo/QmsTodoItemVO.java | 7 ++++- .../mapper/QmsIssueTicketToDoMapper.xml | 4 +-- 4 files changed, 37 insertions(+), 5 deletions(-) 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 40112e9e..be242e93 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 @@ -12,7 +12,7 @@ import jakarta.validation.Valid; import org.springframework.web.bind.annotation.*; /** - * 工单待办 + * 质量问题工单待办 */ @RestController @RequestMapping("/ticket-todo-item") 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 e1837409..45a7bd64 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 @@ -1,8 +1,13 @@ package com.nflg.qms.admin.service; +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.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; @@ -17,10 +22,32 @@ public class QmsIssueTicketTodoControllerService { @Resource private IQmsIssueTicketToDoService issueTicketToDoService; + @Resource + private IQmsIssueTicketProcessService issueTicketProcessService; + /** * 分页查询待办事项列表 */ public IPage search(QmsTodoItemSearchQO request) { - return issueTicketToDoService.search(request); + IPage pageData = issueTicketToDoService.search(request); + if (CollectionUtil.isNotEmpty(pageData.getRecords())) { + pageData.getRecords().forEach(item -> { + if (item.getStatus() != 2) { + item.setCurrentHandleUserName( + StrUtil.join(",", + issueTicketProcessService.lambdaQuery() + .select(QmsIssueTicketProcess::getHandlerUserName) + .eq(QmsIssueTicketProcess::getIssueTicketId, item.getTicketId()) + .list() + .stream() + .map(QmsIssueTicketProcess::getHandlerUserName) + .toList() + ) + + ); + } + }); + } + return pageData; } } 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/QmsTodoItemVO.java index 7992fa2b..83c37c99 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/QmsTodoItemVO.java @@ -12,6 +12,11 @@ public class QmsTodoItemVO { private Long id; + /** + * 工单id + */ + private Long ticketId; + /** * 工单编号 */ @@ -40,7 +45,7 @@ public class QmsTodoItemVO { /** * 当前节点处理人 */ - private String currentUserName; + private String currentHandleUserName; /** * 流程结束时间 diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsIssueTicketToDoMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsIssueTicketToDoMapper.xml index 258ee34e..3838d1fc 100644 --- a/nflg-wms-repository/src/main/resources/mapper/QmsIssueTicketToDoMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/QmsIssueTicketToDoMapper.xml @@ -11,8 +11,8 @@ END AS type, vit.* FROM qms_issue_ticket_todo itd - INNER JOIN v_qms_issue_ticket vit ON itd.source_id = vit.ticket_id - where itd.handler_user_id = #{userId} + INNER JOIN v_qms_issue_ticket vit ON itd.ticket_id = vit.ticket_id + where itd.handler_user_id = #{userId} and (vit.handler_user_id=#{userId} or vit.approval_user_id=#{userId}) AND vit.source_type = #{request.sourceType}