Merge remote-tracking branch '惠信/qms/develop' into qms/develop

This commit is contained in:
曹鹏飞 2026-05-12 14:51:16 +08:00
commit cd9692efae
6 changed files with 138 additions and 95 deletions

View File

@ -764,17 +764,14 @@ public class QmsIssueTicketControllerService {
// 可选条件工单状态 // 可选条件工单状态
wrapper.eq(request.getStatus() != null, QmsIssueTicket::getStatus, request.getStatus()); wrapper.eq(request.getStatus() != null, QmsIssueTicket::getStatus, request.getStatus());
// 可选条件工单标题模糊匹配 // 可选条件关键字模糊匹配工单标题工单编号提交人姓名
wrapper.like(StrUtil.isNotBlank(request.getTicketTitle()), if (StrUtil.isNotBlank(request.getKey())) {
QmsIssueTicket::getTicketTitle, request.getTicketTitle()); wrapper.and(w -> w
.like(QmsIssueTicket::getTicketTitle, request.getKey())
// 可选条件工单编号模糊匹配 .or().like(QmsIssueTicket::getTicketNo, request.getKey())
wrapper.like(StrUtil.isNotBlank(request.getTicketNo()), .or().like(QmsIssueTicket::getCreateUserName, request.getKey())
QmsIssueTicket::getTicketNo, request.getTicketNo()); );
}
// 可选条件提交人模糊匹配
wrapper.like(StrUtil.isNotBlank(request.getCreateUserName()),
QmsIssueTicket::getCreateUserName, request.getCreateUserName());
// 排序按创建时间倒序 // 排序按创建时间倒序
wrapper.orderByDesc(QmsIssueTicket::getCreateTime); wrapper.orderByDesc(QmsIssueTicket::getCreateTime);
@ -1736,13 +1733,14 @@ public class QmsIssueTicketControllerService {
QmsInspectionTicketDetailVO vo = new QmsInspectionTicketDetailVO(); QmsInspectionTicketDetailVO vo = new QmsInspectionTicketDetailVO();
// 填充工单基本信息 // 填充工单基本信息
vo.setId(ticket.getId());
vo.setTicketTitle(ticket.getTicketTitle()); vo.setTicketTitle(ticket.getTicketTitle());
vo.setProjectNo(ticket.getProjectNo()); vo.setProjectNo(ticket.getProjectNo());
vo.setIncidentType(ticket.getIncidentType()); vo.setIncidentType(ticket.getIncidentType());
vo.setExceptionCode(ticket.getExceptionCode()); vo.setExceptionCode(ticket.getExceptionCode());
vo.setCreateUserName(ticket.getCreateUserName()); vo.setCreateUserName(ticket.getCreateUserName());
vo.setCreateTime(ticket.getCreateTime()); vo.setCreateTime(ticket.getCreateTime());
vo.setUnqualifiedQty(ticket.getUnqualifiedQty()); vo.setImpactQuantity(ticket.getImpactQuantity());
vo.setTicketType("巡检"); vo.setTicketType("巡检");
vo.setIncidentLocation(ticket.getIncidentLocation()); vo.setIncidentLocation(ticket.getIncidentLocation());
vo.setIncidentDescription(ticket.getIncidentDescription()); vo.setIncidentDescription(ticket.getIncidentDescription());
@ -1786,51 +1784,83 @@ public class QmsIssueTicketControllerService {
vo.setImages(List.of()); vo.setImages(List.of());
} }
// 查询处理记录取第一条 // 查询所有处理记录
List<QmsIssueTicketProcess> processes = issueTicketProcessService.lambdaQuery() List<QmsIssueTicketProcess> processes = issueTicketProcessService.lambdaQuery()
.eq(QmsIssueTicketProcess::getIssueTicketId, id) .eq(QmsIssueTicketProcess::getIssueTicketId, id)
.list(); .list();
if (CollectionUtil.isNotEmpty(processes)) { if (CollectionUtil.isNotEmpty(processes)) {
QmsIssueTicketProcess process = processes.get(0); // 组装处理人列表按部门合并
Map<String, List<String>> handlersByDept = new LinkedHashMap<>();
// 填充处理人信息 for (QmsIssueTicketProcess process : processes) {
vo.setHandlerUserName(process.getHandlerUserName()); if (StrUtil.isBlank(process.getHandlerUserName())) {
continue;
// 查询处理人部门 }
if (process.getHandlerUserId() != null) { String deptName = "";
UserInterior userInterior = userInteriorService.lambdaQuery() if (process.getHandlerUserId() != null) {
.eq(UserInterior::getUserId, process.getHandlerUserId()) UserInterior userInterior = userInteriorService.lambdaQuery()
.one(); .eq(UserInterior::getUserId, process.getHandlerUserId())
if (userInterior != null && userInterior.getDeptId() != null) { .one();
Department department = departmentService.getById(userInterior.getDeptId()); if (userInterior != null && userInterior.getDeptId() != null) {
if (department != null) { Department department = departmentService.getById(userInterior.getDeptId());
vo.setHandlerDeptName(department.getName()); if (department != null) {
deptName = department.getName();
}
} }
} }
handlersByDept.computeIfAbsent(deptName, k -> new ArrayList<>()).add(process.getHandlerUserName());
} }
List<QmsInspectionTicketDetailVO.HandlerVO> handlers = new ArrayList<>();
// 填充根本原因 for (Map.Entry<String, List<String>> entry : handlersByDept.entrySet()) {
if (StrUtil.isNotBlank(process.getRootCause())) { QmsInspectionTicketDetailVO.HandlerVO handlerVO = new QmsInspectionTicketDetailVO.HandlerVO();
vo.setRootCause(process.getRootCause()); handlerVO.setDeptName(entry.getKey());
handlerVO.setUserName(String.join(",", entry.getValue()));
handlers.add(handlerVO);
} }
vo.setHandlers(handlers);
// 填充上级领导信息 // 组装领导列表仅处理人已提交领导已审批时才展示
if (StrUtil.isNotBlank(process.getLeaderUserName())) { Map<String, List<String>> leadersByDept = new LinkedHashMap<>();
vo.setLeaderUserName(process.getLeaderUserName()); for (QmsIssueTicketProcess process : processes) {
// 领导审批状态为 null 表示处理人尚未提交不展示
// 查询领导部门 if (process.getLeaderApprovalResult() == null || StrUtil.isBlank(process.getLeaderUserName())) {
continue;
}
String deptName = "";
if (process.getLeaderUserId() != null) { if (process.getLeaderUserId() != null) {
UserInterior leaderInterior = userInteriorService.lambdaQuery() UserInterior leaderInterior = userInteriorService.lambdaQuery()
.eq(UserInterior::getUserId, process.getLeaderUserId()) .eq(UserInterior::getUserId, process.getLeaderUserId())
.one(); .one();
if (leaderInterior != null && leaderInterior.getDeptId() != null) { if (leaderInterior != null && leaderInterior.getDeptId() != null) {
Department leaderDepartment = departmentService.getById(leaderInterior.getDeptId()); Department leaderDept = departmentService.getById(leaderInterior.getDeptId());
if (leaderDepartment != null) { if (leaderDept != null) {
vo.setLeaderDeptName(leaderDepartment.getName()); 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<QmsInspectionTicketDetailVO.LeaderVO> leaders = new ArrayList<>();
for (Map.Entry<String, List<String>> 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); vo.setPermanentMeasures(permanentMeasures);
} else { } else {
// 如果没有处理记录设置空列表 // 如果没有处理记录设置空列表
vo.setHandlers(List.of());
vo.setLeaders(List.of());
vo.setTemporaryMeasures(List.of()); vo.setTemporaryMeasures(List.of());
vo.setPermanentMeasures(List.of()); vo.setPermanentMeasures(List.of());
} }

View File

@ -2,12 +2,14 @@ package com.nflg.wms.common.pojo.qo;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/** /**
* 平板端巡检工单列表查询参数 * 平板端巡检工单列表查询参数
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Accessors(chain = false)
public class QmsIssueTicketTabletSearchQO extends PageQO { public class QmsIssueTicketTabletSearchQO extends PageQO {
/** /**
@ -16,17 +18,7 @@ public class QmsIssueTicketTabletSearchQO extends PageQO {
private Short status; private Short status;
/** /**
* 工单标题模糊匹配可选 * 搜索关键字可选模糊匹配工单标题工单编号提交人姓名
*/ */
private String ticketTitle; private String key;
/**
* 工单编号模糊匹配可选
*/
private String ticketNo;
/**
* 提交人姓名模糊匹配可选
*/
private String createUserName;
} }

View File

@ -9,24 +9,9 @@ import lombok.Data;
public class QmsPdiInspectionResultsSearchQO { public class QmsPdiInspectionResultsSearchQO {
/** /**
* 机型编号可选 * 搜索关键字可选模糊匹配机型编号订单编号机台编号任务单号
*/ */
private String machineNo; private String key;
/**
* 订单编号可选
*/
private String orderNo;
/**
* 机台编号可选
*/
private String deviceNo;
/**
* 质检单号/任务单号可选预留字段
*/
private String taskNo;
/** /**
* 任务状态可选0=待流转1=质检中2=已完成3=待流转逾期 * 任务状态可选0=待流转1=质检中2=已完成3=待流转逾期

View File

@ -12,6 +12,11 @@ import java.util.List;
@Data @Data
public class QmsInspectionTicketDetailVO { public class QmsInspectionTicketDetailVO {
/**
* 工单ID
*/
private Long id;
/** /**
* 工单标题 * 工单标题
*/ */
@ -43,9 +48,9 @@ public class QmsInspectionTicketDetailVO {
private LocalDateTime createTime; private LocalDateTime createTime;
/** /**
* 数量不合格数量 * 影响数量
*/ */
private Integer unqualifiedQty; private String impactQuantity;
/** /**
* 工单类型巡检 * 工单类型巡检
@ -78,14 +83,14 @@ public class QmsInspectionTicketDetailVO {
private List<FileDetailVO> images; private List<FileDetailVO> images;
/** /**
* 处理人姓名 * 处理人列表按部门合并
*/ */
private String handlerUserName; private List<HandlerVO> handlers;
/** /**
* 处理人部门 * 部门领导列表处理人提交后才展示
*/ */
private String handlerDeptName; private List<LeaderVO> leaders;
/** /**
* 临时纠正措施列表 * 临时纠正措施列表
@ -102,16 +107,6 @@ public class QmsInspectionTicketDetailVO {
*/ */
private String rootCause; private String rootCause;
/**
* 上级领导姓名
*/
private String leaderUserName;
/**
* 领导部门
*/
private String leaderDeptName;
/** /**
* 文件详情 * 文件详情
*/ */
@ -139,6 +134,40 @@ public class QmsInspectionTicketDetailVO {
private String url; 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;
}
/** /**
* 纠正措施 * 纠正措施
*/ */

View File

@ -58,6 +58,14 @@ public class QmsInspectionItemServiceImpl extends ServiceImpl<QmsInspectionItemM
String operator = UserUtil.getUserName(); String operator = UserUtil.getUserName();
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
// 校验 materialTypeId 是否已存在
Long existCount = lambdaQuery()
.eq(QmsInspectionItem::getMaterialTypeId, qo.getMaterialTypeId())
.count();
if (existCount > 0) {
throw new NflgException(STATE.BusinessError, "该物料类别的检测项已存在,不允许重复添加");
}
// 根据物料类别ID生成编号和名称 // 根据物料类别ID生成编号和名称
QmsQcMaterialCategory category = materialCategoryService.getById(qo.getMaterialTypeId()); QmsQcMaterialCategory category = materialCategoryService.getById(qo.getMaterialTypeId());
if (category == null) { if (category == null) {

View File

@ -22,17 +22,14 @@
<if test="request.userId != null"> <if test="request.userId != null">
AND (t.assistant_id = #{request.userId} OR r.inspector_id = #{request.userId}) AND (t.assistant_id = #{request.userId} OR r.inspector_id = #{request.userId})
</if> </if>
<if test="request.machineNo != null and request.machineNo != ''"> <!-- 关键字模糊匹配:机型编号、订单编号、机台编号、任务单号 -->
AND r.machine_no = #{request.machineNo} <if test="request.key != null and request.key != ''">
</if> AND (
<if test="request.orderNo != null and request.orderNo != ''"> r.machine_no ILIKE CONCAT('%', #{request.key}, '%')
AND t.order_no = #{request.orderNo} OR t.order_no ILIKE CONCAT('%', #{request.key}, '%')
</if> OR t.device_no ILIKE CONCAT('%', #{request.key}, '%')
<if test="request.deviceNo != null and request.deviceNo != ''"> OR t.task_no ILIKE CONCAT('%', #{request.key}, '%')
AND t.device_no = #{request.deviceNo} )
</if>
<if test="request.taskNo != null and request.taskNo != ''">
AND t.task_no = #{request.taskNo}
</if> </if>
<!-- 任务状态筛选 --> <!-- 任务状态筛选 -->
<if test="request.inspectionEnable != null"> <if test="request.inspectionEnable != null">