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 2eee5c23..5ef1b58f 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 @@ -764,17 +764,14 @@ public class QmsIssueTicketControllerService { // 可选条件:工单状态 wrapper.eq(request.getStatus() != null, QmsIssueTicket::getStatus, request.getStatus()); - // 可选条件:工单标题(模糊匹配) - wrapper.like(StrUtil.isNotBlank(request.getTicketTitle()), - QmsIssueTicket::getTicketTitle, request.getTicketTitle()); - - // 可选条件:工单编号(模糊匹配) - wrapper.like(StrUtil.isNotBlank(request.getTicketNo()), - QmsIssueTicket::getTicketNo, request.getTicketNo()); - - // 可选条件:提交人(模糊匹配) - wrapper.like(StrUtil.isNotBlank(request.getCreateUserName()), - QmsIssueTicket::getCreateUserName, request.getCreateUserName()); + // 可选条件:关键字模糊匹配(工单标题、工单编号、提交人姓名) + if (StrUtil.isNotBlank(request.getKey())) { + wrapper.and(w -> w + .like(QmsIssueTicket::getTicketTitle, request.getKey()) + .or().like(QmsIssueTicket::getTicketNo, request.getKey()) + .or().like(QmsIssueTicket::getCreateUserName, request.getKey()) + ); + } // 排序:按创建时间倒序 wrapper.orderByDesc(QmsIssueTicket::getCreateTime); @@ -1736,13 +1733,14 @@ public class QmsIssueTicketControllerService { QmsInspectionTicketDetailVO vo = new QmsInspectionTicketDetailVO(); // 填充工单基本信息 + vo.setId(ticket.getId()); vo.setTicketTitle(ticket.getTicketTitle()); vo.setProjectNo(ticket.getProjectNo()); vo.setIncidentType(ticket.getIncidentType()); vo.setExceptionCode(ticket.getExceptionCode()); vo.setCreateUserName(ticket.getCreateUserName()); vo.setCreateTime(ticket.getCreateTime()); - vo.setUnqualifiedQty(ticket.getUnqualifiedQty()); + vo.setImpactQuantity(ticket.getImpactQuantity()); vo.setTicketType("巡检"); vo.setIncidentLocation(ticket.getIncidentLocation()); vo.setIncidentDescription(ticket.getIncidentDescription()); @@ -1786,51 +1784,83 @@ public class QmsIssueTicketControllerService { vo.setImages(List.of()); } - // 查询处理记录(取第一条) + // 查询所有处理记录 List processes = issueTicketProcessService.lambdaQuery() .eq(QmsIssueTicketProcess::getIssueTicketId, id) .list(); if (CollectionUtil.isNotEmpty(processes)) { - QmsIssueTicketProcess process = processes.get(0); - - // 填充处理人信息 - vo.setHandlerUserName(process.getHandlerUserName()); - - // 查询处理人部门 - if (process.getHandlerUserId() != null) { - UserInterior userInterior = userInteriorService.lambdaQuery() - .eq(UserInterior::getUserId, process.getHandlerUserId()) - .one(); - if (userInterior != null && userInterior.getDeptId() != null) { - Department department = departmentService.getById(userInterior.getDeptId()); - if (department != null) { - vo.setHandlerDeptName(department.getName()); + // 组装处理人列表(按部门合并) + Map> handlersByDept = new LinkedHashMap<>(); + for (QmsIssueTicketProcess process : processes) { + if (StrUtil.isBlank(process.getHandlerUserName())) { + continue; + } + String deptName = ""; + if (process.getHandlerUserId() != null) { + UserInterior userInterior = userInteriorService.lambdaQuery() + .eq(UserInterior::getUserId, process.getHandlerUserId()) + .one(); + if (userInterior != null && userInterior.getDeptId() != null) { + Department department = departmentService.getById(userInterior.getDeptId()); + if (department != null) { + deptName = department.getName(); + } } } + handlersByDept.computeIfAbsent(deptName, k -> new ArrayList<>()).add(process.getHandlerUserName()); } - - // 填充根本原因 - if (StrUtil.isNotBlank(process.getRootCause())) { - vo.setRootCause(process.getRootCause()); + List handlers = new ArrayList<>(); + for (Map.Entry> entry : handlersByDept.entrySet()) { + QmsInspectionTicketDetailVO.HandlerVO handlerVO = new QmsInspectionTicketDetailVO.HandlerVO(); + handlerVO.setDeptName(entry.getKey()); + handlerVO.setUserName(String.join(",", entry.getValue())); + handlers.add(handlerVO); } + vo.setHandlers(handlers); - // 填充上级领导信息 - if (StrUtil.isNotBlank(process.getLeaderUserName())) { - vo.setLeaderUserName(process.getLeaderUserName()); - - // 查询领导部门 + // 组装领导列表(仅处理人已提交、领导已审批时才展示) + Map> leadersByDept = new LinkedHashMap<>(); + for (QmsIssueTicketProcess process : processes) { + // 领导审批状态为 null 表示处理人尚未提交,不展示 + if (process.getLeaderApprovalResult() == null || StrUtil.isBlank(process.getLeaderUserName())) { + continue; + } + String deptName = ""; if (process.getLeaderUserId() != null) { UserInterior leaderInterior = userInteriorService.lambdaQuery() .eq(UserInterior::getUserId, process.getLeaderUserId()) .one(); if (leaderInterior != null && leaderInterior.getDeptId() != null) { - Department leaderDepartment = departmentService.getById(leaderInterior.getDeptId()); - if (leaderDepartment != null) { - vo.setLeaderDeptName(leaderDepartment.getName()); + Department leaderDept = departmentService.getById(leaderInterior.getDeptId()); + if (leaderDept != null) { + deptName = leaderDept.getName(); } } } + // 拼接领导姓名与审批意见 + String approvalText = process.getLeaderApprovalResult() == 1 ? "同意" : "驳回"; + String leaderDisplay; + if (StrUtil.isNotBlank(process.getLeaderApprovalOpinion())) { + leaderDisplay = process.getLeaderUserName() + "(" + approvalText + ":" + process.getLeaderApprovalOpinion() + ")"; + } else { + leaderDisplay = process.getLeaderUserName() + "(" + approvalText + ")"; + } + leadersByDept.computeIfAbsent(deptName, k -> new ArrayList<>()).add(leaderDisplay); + } + List leaders = new ArrayList<>(); + for (Map.Entry> entry : leadersByDept.entrySet()) { + QmsInspectionTicketDetailVO.LeaderVO leaderVO = new QmsInspectionTicketDetailVO.LeaderVO(); + leaderVO.setDeptName(entry.getKey()); + leaderVO.setUserName(String.join(",", entry.getValue())); + leaders.add(leaderVO); + } + vo.setLeaders(leaders); + + // 填充根本原因(取第一条处理记录) + QmsIssueTicketProcess firstProcess = processes.get(0); + if (StrUtil.isNotBlank(firstProcess.getRootCause())) { + vo.setRootCause(firstProcess.getRootCause()); } // 查询纠正措施 @@ -1869,6 +1899,8 @@ public class QmsIssueTicketControllerService { vo.setPermanentMeasures(permanentMeasures); } else { // 如果没有处理记录,设置空列表 + vo.setHandlers(List.of()); + vo.setLeaders(List.of()); vo.setTemporaryMeasures(List.of()); vo.setPermanentMeasures(List.of()); } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketTabletSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketTabletSearchQO.java index 119e0495..1902deaf 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketTabletSearchQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketTabletSearchQO.java @@ -2,12 +2,14 @@ package com.nflg.wms.common.pojo.qo; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; /** * 平板端巡检工单列表查询参数 */ @Data @EqualsAndHashCode(callSuper = true) +@Accessors(chain = false) public class QmsIssueTicketTabletSearchQO extends PageQO { /** @@ -16,17 +18,7 @@ public class QmsIssueTicketTabletSearchQO extends PageQO { private Short status; /** - * 工单标题(模糊匹配,可选) + * 搜索关键字(可选),模糊匹配工单标题、工单编号、提交人姓名 */ - private String ticketTitle; - - /** - * 工单编号(模糊匹配,可选) - */ - private String ticketNo; - - /** - * 提交人姓名(模糊匹配,可选) - */ - private String createUserName; + private String key; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPdiInspectionResultsSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPdiInspectionResultsSearchQO.java index 3b8b0eaa..d5835cec 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPdiInspectionResultsSearchQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPdiInspectionResultsSearchQO.java @@ -9,24 +9,9 @@ import lombok.Data; public class QmsPdiInspectionResultsSearchQO { /** - * 机型编号(可选) + * 搜索关键字(可选),模糊匹配机型编号、订单编号、机台编号、任务单号 */ - private String machineNo; - - /** - * 订单编号(可选) - */ - private String orderNo; - - /** - * 机台编号(可选) - */ - private String deviceNo; - - /** - * 质检单号/任务单号(可选,预留字段) - */ - private String taskNo; + private String key; /** * 任务状态(可选):0=待流转,1=质检中,2=已完成,3=待流转(逾期) diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionTicketDetailVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionTicketDetailVO.java index 636b2c82..f984b384 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionTicketDetailVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionTicketDetailVO.java @@ -12,6 +12,11 @@ import java.util.List; @Data public class QmsInspectionTicketDetailVO { + /** + * 工单ID + */ + private Long id; + /** * 工单标题 */ @@ -43,9 +48,9 @@ public class QmsInspectionTicketDetailVO { private LocalDateTime createTime; /** - * 数量(不合格数量) + * 影响数量 */ - private Integer unqualifiedQty; + private String impactQuantity; /** * 工单类型(巡检) @@ -78,14 +83,14 @@ public class QmsInspectionTicketDetailVO { private List images; /** - * 处理人姓名 + * 处理人列表(按部门合并) */ - private String handlerUserName; + private List handlers; /** - * 处理人部门 + * 部门领导列表(处理人提交后才展示) */ - private String handlerDeptName; + private List leaders; /** * 临时纠正措施列表 @@ -102,16 +107,6 @@ public class QmsInspectionTicketDetailVO { */ private String rootCause; - /** - * 上级领导姓名 - */ - private String leaderUserName; - - /** - * 领导部门 - */ - private String leaderDeptName; - /** * 文件详情 */ @@ -139,6 +134,40 @@ public class QmsInspectionTicketDetailVO { private String url; } + /** + * 处理人信息(按部门合并) + */ + @Data + public static class HandlerVO { + + /** + * 部门名称 + */ + private String deptName; + + /** + * 处理人姓名(同部门多人用逗号隔开) + */ + private String userName; + } + + /** + * 部门领导信息 + */ + @Data + public static class LeaderVO { + + /** + * 部门名称 + */ + private String deptName; + + /** + * 领导姓名(拼接审批意见) + */ + private String userName; + } + /** * 纠正措施 */ diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectionItemServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectionItemServiceImpl.java index 14e200ab..3b873ec7 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectionItemServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectionItemServiceImpl.java @@ -58,6 +58,14 @@ public class QmsInspectionItemServiceImpl extends ServiceImpl 0) { + throw new NflgException(STATE.BusinessError, "该物料类别的检测项已存在,不允许重复添加"); + } + // 根据物料类别ID生成编号和名称 QmsQcMaterialCategory category = materialCategoryService.getById(qo.getMaterialTypeId()); if (category == null) { diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsPdiInspectionResultsMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsPdiInspectionResultsMapper.xml index 2d41b72e..cc53c1d9 100644 --- a/nflg-wms-repository/src/main/resources/mapper/QmsPdiInspectionResultsMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/QmsPdiInspectionResultsMapper.xml @@ -22,17 +22,14 @@ AND (t.assistant_id = #{request.userId} OR r.inspector_id = #{request.userId}) - - AND r.machine_no = #{request.machineNo} - - - AND t.order_no = #{request.orderNo} - - - AND t.device_no = #{request.deviceNo} - - - AND t.task_no = #{request.taskNo} + + + AND ( + r.machine_no ILIKE CONCAT('%', #{request.key}, '%') + OR t.order_no ILIKE CONCAT('%', #{request.key}, '%') + OR t.device_no ILIKE CONCAT('%', #{request.key}, '%') + OR t.task_no ILIKE CONCAT('%', #{request.key}, '%') + )