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.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<QmsIssueTicketProcess> 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<String, List<String>> 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<QmsInspectionTicketDetailVO.HandlerVO> handlers = new ArrayList<>();
for (Map.Entry<String, List<String>> 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<String, List<String>> 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<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);
} else {
// 如果没有处理记录设置空列表
vo.setHandlers(List.of());
vo.setLeaders(List.of());
vo.setTemporaryMeasures(List.of());
vo.setPermanentMeasures(List.of());
}

View File

@ -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;
}

View File

@ -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=待流转逾期

View File

@ -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<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 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;
}
/**
* 纠正措施
*/

View File

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

View File

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