导入功能和工单返回模板修改

新增巡检任务修改方法
This commit is contained in:
funny 2026-05-12 08:38:36 +08:00
parent 3e3796ccfb
commit 6759fb6ab5
3 changed files with 446 additions and 233 deletions

View File

@ -22,6 +22,7 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@ -610,6 +611,61 @@ public class QmsIssueTicketControllerService {
issueTicketService.save(entity);
}
/**
* 修改巡检工单发起前
* 仅允许创建人修改且工单状态必须为待流转(0)
*/
@Transactional(rollbackFor = Exception.class)
public void updateInspectionTicket(QmsIssueTicketUpdateQO request) {
Long currentUserId = UserUtil.getUserId();
String currentUserName = UserUtil.getUserName();
LocalDateTime now = LocalDateTime.now();
// 1. 查询工单
QmsIssueTicket ticket = issueTicketService.getById(request.getId());
VUtil.trueThrowBusinessError(ticket == null).throwMessage("工单不存在");
// 2. 权限校验只有创建人才能修改
VUtil.trueThrowBusinessError(!ticket.getCreateUserId().equals(currentUserId))
.throwMessage("只有创建人才能修改工单");
// 3. 状态校验只有待流转状态才能修改
VUtil.trueThrowBusinessError(ticket.getStatus() != 0)
.throwMessage("只有待流转状态的工单才能修改");
// 4. 来源类型校验只能修改巡检工单
VUtil.trueThrowBusinessError(ticket.getSourceType() != 2)
.throwMessage("只能修改巡检工单");
// 5. 校验是否已设置负责人已发起
VUtil.trueThrowBusinessError(ticket.getApprovalUserId() != null)
.throwMessage("工单已发起,不允许修改");
// 6. 更新工单信息
issueTicketService.lambdaUpdate()
.eq(QmsIssueTicket::getId, request.getId())
.set(QmsIssueTicket::getTicketTitle, request.getTicketTitle())
.set(QmsIssueTicket::getProjectNo, request.getProjectNo())
.set(QmsIssueTicket::getIncidentType, request.getIncidentType())
.set(QmsIssueTicket::getExceptionCode, request.getExceptionCode())
.set(QmsIssueTicket::getUnqualifiedQty, request.getUnqualifiedQty())
.set(QmsIssueTicket::getImpactQuantity, request.getImpactQuantity())
.set(QmsIssueTicket::getIncidentLocation, request.getIncidentLocation())
.set(QmsIssueTicket::getIncidentDescription, request.getIncidentDescription())
.set(QmsIssueTicket::getIncidentReason, request.getIncidentReason())
.set(QmsIssueTicket::getIncidentConsequence, request.getIncidentConsequence())
.set(QmsIssueTicket::getImageIds, request.getImages() == null
? ""
: StrUtil.join(",", request.getImages().stream()
.map(com.nflg.wms.common.pojo.vo.FileUploadVO::getId)
.toList()))
.set(QmsIssueTicket::getRemark, request.getRemark())
.set(QmsIssueTicket::getUpdateUserId, currentUserId)
.set(QmsIssueTicket::getUpdateUserName, currentUserName)
.set(QmsIssueTicket::getUpdateTime, now)
.update();
}
/**
* 平板端查询巡检工单列表
* 仅查询当前登录人创建的巡检工单sourceType=2
@ -1008,224 +1064,228 @@ public class QmsIssueTicketControllerService {
* 返回工单基本信息及处理记录措施列表
*/
public QmsPdiTicketDetailVO getPdiTicketDetail(Long id) {
// 查询工单基本信息
QmsIssueTicket ticket = issueTicketService.getById(id);
QmsPdiTicketDetailVO vo = new QmsPdiTicketDetailVO();
vo.setTicketNo(ticket.getTicketNo());
vo.setTicketTitle(ticket.getTicketTitle());
vo.setProjectNo(ticket.getProjectNo());
vo.setIncidentType(ticket.getIncidentType());
vo.setExceptionCode(ticket.getExceptionCode());
vo.setUnqualifiedQty(ticket.getUnqualifiedQty());
vo.setCreator(ticket.getCreateUserName());
vo.setCreateTime(ticket.getCreateTime());
vo.setStatus(ticket.getStatus());
vo.setCompleteTime(ticket.getCompleteTime()); // 设置完成时间
// 查询工单类型PDI-新机检测 PDI-库存检测
if (ticket.getSourceId() != null) {
QmsPdiTaskRecord taskRecord = pdiTaskRecordService.getById(ticket.getSourceId());
if (taskRecord != null && taskRecord.getDetectionRulesId() != null) {
QmsPdiDetectionRules detectionRules = pdiDetectionRulesService.getById(taskRecord.getDetectionRulesId());
if (detectionRules != null && detectionRules.getInspectionType() != null) {
String inspectionTypeStr = detectionRules.getInspectionType() == 0 ? "新机检测" : "库存检测";
vo.setTicketType("PDI-" + inspectionTypeStr);
}
}
}
// 查询处理记录列表
List<QmsIssueTicketProcess> processes = issueTicketProcessService.lambdaQuery()
.eq(QmsIssueTicketProcess::getIssueTicketId, id)
.list();
// 构建不合格检测项列表每项关联处理信息
List<QmsPdiTicketDetailVO.InspectionItemVO> inspectionItems = new ArrayList<>();
String rootCause = null;
List<QmsPdiTicketDetailVO.MeasureVO> temporaryMeasures = new ArrayList<>();
List<QmsPdiTicketDetailVO.MeasureVO> permanentMeasures = new ArrayList<>();
for (QmsIssueTicketProcess process : processes) {
// 提取根本原因取第一条
if (rootCause == null && StrUtil.isNotBlank(process.getRootCause())) {
rootCause = process.getRootCause();
}
// 查询该处理记录关联的不合格检测项
if (StrUtil.isNotBlank(process.getTaskResultIds())) {
String[] taskIds = process.getTaskResultIds().split(",");
for (String taskId : taskIds) {
if (StrUtil.isNotBlank(taskId)) {
List<QmsPdiInspectionResults> unqualifiedResults = pdiInspectionResultsService.lambdaQuery()
.eq(QmsPdiInspectionResults::getTaskId, Long.parseLong(taskId.trim()))
.eq(QmsPdiInspectionResults::getInspectionItemResults, false)
.list();
// 收集检测项ID仅type=0/1/3
Set<Long> statusItemIds = unqualifiedResults.stream()
.filter(r -> r.getInspectionItemType() != null && r.getInspectionItemType() != 2)
.map(QmsPdiInspectionResults::getInspectionItemId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// 查询检测项信息
Map<Long, QmsPdiDetectionRulesStatusItem> statusItemMap = new HashMap<>();
if (!statusItemIds.isEmpty()) {
List<QmsPdiDetectionRulesStatusItem> statusItems = pdiStatusItemService.lambdaQuery()
.in(QmsPdiDetectionRulesStatusItem::getId, statusItemIds)
.list();
statusItemMap = statusItems.stream()
.collect(Collectors.toMap(QmsPdiDetectionRulesStatusItem::getId, s -> s, (a, b) -> a));
}
// 收集示例图ID
Set<Long> exampleImageIds = statusItemMap.values().stream()
.map(QmsPdiDetectionRulesStatusItem::getInspectionImage)
.filter(StrUtil::isNotBlank)
.flatMap(imageStr -> Arrays.stream(imageStr.split(",")))
.filter(StrUtil::isNotBlank)
.map(Long::valueOf)
.collect(Collectors.toSet());
// 查询示例图
Map<Long, FileUploadRecord> exampleImageMap = new HashMap<>();
if (!exampleImageIds.isEmpty()) {
List<FileUploadRecord> records = fileUploadRecordService.lambdaQuery()
.in(FileUploadRecord::getId, exampleImageIds)
.list();
exampleImageMap = records.stream()
.collect(Collectors.toMap(FileUploadRecord::getId, r -> r, (a, b) -> a));
}
// 查询处理人部门信息
Long handlerDeptId = null;
String handlerDeptName = null;
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) {
handlerDeptId = department.getId();
handlerDeptName = department.getName();
}
}
}
final Map<Long, QmsPdiDetectionRulesStatusItem> finalStatusItemMap = statusItemMap;
final Map<Long, FileUploadRecord> finalExampleImageMap = exampleImageMap;
final Long finalHandlerDeptId = handlerDeptId;
final String finalHandlerDeptName = handlerDeptName;
for (QmsPdiInspectionResults result : unqualifiedResults) {
QmsPdiTicketDetailVO.InspectionItemVO itemVO = new QmsPdiTicketDetailVO.InspectionItemVO();
itemVO.setId(result.getId());
itemVO.setInspectionItemId(result.getInspectionItemId());
itemVO.setInspectionItemType(result.getInspectionItemType());
itemVO.setInspectionItemImage(parseImageList(result.getInspectionItemImage()));
itemVO.setInspectionItemResults(result.getInspectionItemResults());
itemVO.setRemark(result.getRemark());
itemVO.setInspectorId(result.getInspectorId());
itemVO.setInspectionTime(result.getInspectionTime());
itemVO.setInspectionBy(result.getInspectionBy());
// 填充检测项信息仅type=0/1/3
if (result.getInspectionItemType() != null && result.getInspectionItemType() != 2) {
QmsPdiDetectionRulesStatusItem statusItem = finalStatusItemMap.get(result.getInspectionItemId());
if (statusItem != null) {
itemVO.setComponentsDes(statusItem.getComponentsDes());
itemVO.setInspectionContent(statusItem.getInspectionContent());
// 解析示例图URL
if (StrUtil.isNotBlank(statusItem.getInspectionImage())) {
String exampleUrl = Arrays.stream(statusItem.getInspectionImage().split(","))
.filter(StrUtil::isNotBlank)
.map(String::trim)
.map(Long::valueOf)
.map(finalExampleImageMap::get)
.filter(Objects::nonNull)
.map(FileUploadRecord::getUrl)
.findFirst()
.orElse(null);
itemVO.setInspectionExampleImage(exampleUrl);
}
}
}
// 填充处理信息
itemVO.setHandlerUserId(process.getHandlerUserId());
itemVO.setHandlerUserName(process.getHandlerUserName());
itemVO.setHandlerDeptId(finalHandlerDeptId);
itemVO.setHandlerDeptName(finalHandlerDeptName);
itemVO.setProcessTime(process.getApprovalTime());
itemVO.setProcessStatus(process.getApprovalStatus());
itemVO.setApprovalUserId(process.getApprovalUserId());
itemVO.setApprovalUserName(process.getApprovalUserName());
itemVO.setApprovalTime(process.getApprovalTime());
itemVO.setApprovalStatus(process.getApprovalStatus());
inspectionItems.add(itemVO);
}
}
}
}
// 查询措施列表按措施类型区分临时/永久
List<QmsIssueTicketProcessMeasure> measures = issueTicketProcessMeasureService.lambdaQuery()
.eq(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, process.getId())
.list();
// 查询字典项ID
Long temporaryTypeId = dictionaryItemService.getIdByCode("MeasureType", "TemporaryCorrectiveMeasures");
Long permanentTypeId = dictionaryItemService.getIdByCode("MeasureType", "PermanentCorrectiveMeasures");
for (QmsIssueTicketProcessMeasure measure : measures) {
QmsPdiTicketDetailVO.MeasureVO measureVO = new QmsPdiTicketDetailVO.MeasureVO();
measureVO.setId(measure.getId());
measureVO.setMeasureTypeId(measure.getMeasureTypeId());
measureVO.setMeasureContent(measure.getMeasureContent());
measureVO.setChargeUser(measure.getChargeUser());
measureVO.setPlanDate(measure.getPlanDate());
measureVO.setConfirmDate(measure.getConfirmDate());
measureVO.setRemark(measure.getRemark());
// 根据measureTypeId区分临时措施和永久措施
if (measure.getMeasureTypeId() != null) {
if (measure.getMeasureTypeId().equals(temporaryTypeId)) {
temporaryMeasures.add(measureVO);
} else if (measure.getMeasureTypeId().equals(permanentTypeId)) {
permanentMeasures.add(measureVO);
}
}
}
}
// 构建处理人信息按部门分组
Map<String, List<String>> handlers = new HashMap<>();
for (QmsIssueTicketProcess process : processes) {
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) {
String deptName = department.getName();
handlers.computeIfAbsent(deptName, k -> new ArrayList<>())
.add(process.getHandlerUserName());
}
}
}
}
vo.setInspectionItems(inspectionItems);
vo.setHandlers(handlers);
vo.setRootCause(rootCause);
vo.setTemporaryMeasures(temporaryMeasures);
vo.setPermanentMeasures(permanentMeasures);
vo.setSignatures(new HashMap<>());
return vo;
// // 查询工单基本信息
// QmsIssueTicket ticket = issueTicketService.getById(id);
// QmsPdiTicketDetailVO vo = new QmsPdiTicketDetailVO();
// vo.setTicketNo(ticket.getTicketNo());
// vo.setTicketTitle(ticket.getTicketTitle());
// vo.setProjectNo(ticket.getProjectNo());
// vo.setIncidentType(ticket.getIncidentType());
// vo.setExceptionCode(ticket.getExceptionCode());
// vo.setUnqualifiedQty(ticket.getUnqualifiedQty());
// vo.setCreator(ticket.getCreateUserName());
// vo.setCreateTime(ticket.getCreateTime());
// vo.setStatus(ticket.getStatus());
// vo.setCompleteTime(ticket.getCompleteTime()); // 设置完成时间
//
// // 查询工单类型PDI-新机检测 PDI-库存检测
// if (ticket.getSourceId() != null) {
// QmsPdiTaskRecord taskRecord = pdiTaskRecordService.getById(ticket.getSourceId());
// if (taskRecord != null && taskRecord.getDetectionRulesId() != null) {
// QmsPdiDetectionRules detectionRules = pdiDetectionRulesService.getById(taskRecord.getDetectionRulesId());
// if (detectionRules != null && detectionRules.getInspectionType() != null) {
// String inspectionTypeStr = detectionRules.getInspectionType() == 0 ? "新机检测" : "库存检测";
// vo.setTicketType("PDI-" + inspectionTypeStr);
// }
// }
// }
//
// // 查询处理记录列表
// List<QmsIssueTicketProcess> processes = issueTicketProcessService.lambdaQuery()
// .eq(QmsIssueTicketProcess::getIssueTicketId, id)
// .list();
//
// // 构建不合格检测项列表每项关联处理信息
// List<QmsPdiTicketDetailVO.InspectionItemVO> inspectionItems = new ArrayList<>();
// String rootCause = null;
// List<QmsPdiTicketDetailVO.MeasureVO> temporaryMeasures = new ArrayList<>();
// List<QmsPdiTicketDetailVO.MeasureVO> permanentMeasures = new ArrayList<>();
//
// for (QmsIssueTicketProcess process : processes) {
// // 提取根本原因取第一条
// if (rootCause == null && StrUtil.isNotBlank(process.getRootCause())) {
// rootCause = process.getRootCause();
// }
//
// // 查询该处理记录关联的不合格检测项
// if (StrUtil.isNotBlank(process.getTaskResultIds())) {
// String[] taskIds = process.getTaskResultIds().split(",");
// for (String taskId : taskIds) {
// if (StrUtil.isNotBlank(taskId)) {
// List<QmsPdiInspectionResults> unqualifiedResults = pdiInspectionResultsService.lambdaQuery()
// .eq(QmsPdiInspectionResults::getTaskId, Long.parseLong(taskId.trim()))
// .eq(QmsPdiInspectionResults::getInspectionItemResults, false)
// .list();
//
// // 收集检测项ID仅type=0/1/3
// Set<Long> statusItemIds = unqualifiedResults.stream()
// .filter(r -> r.getInspectionItemType() != null && r.getInspectionItemType() != 2)
// .map(QmsPdiInspectionResults::getInspectionItemId)
// .filter(Objects::nonNull)
// .collect(Collectors.toSet());
//
// // 查询检测项信息
// Map<Long, QmsPdiDetectionRulesStatusItem> statusItemMap = new HashMap<>();
// if (!statusItemIds.isEmpty()) {
// List<QmsPdiDetectionRulesStatusItem> statusItems = pdiStatusItemService.lambdaQuery()
// .in(QmsPdiDetectionRulesStatusItem::getId, statusItemIds)
// .list();
// statusItemMap = statusItems.stream()
// .collect(Collectors.toMap(QmsPdiDetectionRulesStatusItem::getId, s -> s, (a, b) -> a));
// }
//
// // 收集示例图ID
// Set<Long> exampleImageIds = statusItemMap.values().stream()
// .map(QmsPdiDetectionRulesStatusItem::getInspectionImage)
// .filter(StrUtil::isNotBlank)
// .flatMap(imageStr -> Arrays.stream(imageStr.split(",")))
// .filter(StrUtil::isNotBlank)
// .map(Long::valueOf)
// .collect(Collectors.toSet());
//
// // 查询示例图
// Map<Long, FileUploadRecord> exampleImageMap = new HashMap<>();
// if (!exampleImageIds.isEmpty()) {
// List<FileUploadRecord> records = fileUploadRecordService.lambdaQuery()
// .in(FileUploadRecord::getId, exampleImageIds)
// .list();
// exampleImageMap = records.stream()
// .collect(Collectors.toMap(FileUploadRecord::getId, r -> r, (a, b) -> a));
// }
//
// // 查询处理人部门信息
// Long handlerDeptId = null;
// String handlerDeptName = null;
// 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) {
// handlerDeptId = department.getId();
// handlerDeptName = department.getName();
// }
// }
// }
//
// final Map<Long, QmsPdiDetectionRulesStatusItem> finalStatusItemMap = statusItemMap;
// final Map<Long, FileUploadRecord> finalExampleImageMap = exampleImageMap;
// final Long finalHandlerDeptId = handlerDeptId;
// final String finalHandlerDeptName = handlerDeptName;
//
// for (QmsPdiInspectionResults result : unqualifiedResults) {
// QmsPdiTicketDetailVO.InspectionItemVO itemVO = new QmsPdiTicketDetailVO.InspectionItemVO();
// itemVO.setId(result.getId());
// itemVO.setInspectionItemId(result.getInspectionItemId());
// itemVO.setInspectionItemType(result.getInspectionItemType());
// itemVO.setInspectionItemImage(parseImageList(result.getInspectionItemImage()));
// itemVO.setInspectionItemResults(result.getInspectionItemResults());
// itemVO.setRemark(result.getRemark());
// itemVO.setInspectorId(result.getInspectorId());
// itemVO.setInspectionTime(result.getInspectionTime());
// itemVO.setInspectionBy(result.getInspectionBy());
//
// // 填充检测项信息仅type=0/1/3
// if (result.getInspectionItemType() != null && result.getInspectionItemType() != 2) {
// QmsPdiDetectionRulesStatusItem statusItem = finalStatusItemMap.get(result.getInspectionItemId());
// if (statusItem != null) {
// itemVO.setComponentsDes(statusItem.getComponentsDes());
// itemVO.setInspectionContent(statusItem.getInspectionContent());
// // 解析示例图URL
// if (StrUtil.isNotBlank(statusItem.getInspectionImage())) {
// String exampleUrl = Arrays.stream(statusItem.getInspectionImage().split(","))
// .filter(StrUtil::isNotBlank)
// .map(String::trim)
// .map(Long::valueOf)
// .map(finalExampleImageMap::get)
// .filter(Objects::nonNull)
// .map(FileUploadRecord::getUrl)
// .findFirst()
// .orElse(null);
// itemVO.setInspectionExampleImage(exampleUrl);
// }
// }
// }
//
// // 填充处理信息
// itemVO.setHandlerUserId(process.getHandlerUserId());
// itemVO.setHandlerUserName(process.getHandlerUserName());
// itemVO.setHandlerDeptId(finalHandlerDeptId);
// itemVO.setHandlerDeptName(finalHandlerDeptName);
// itemVO.setProcessTime(process.getApprovalTime());
// itemVO.setProcessStatus(process.getApprovalStatus());
// itemVO.setApprovalUserId(process.getApprovalUserId());
// itemVO.setApprovalUserName(process.getApprovalUserName());
// itemVO.setApprovalTime(process.getApprovalTime());
// itemVO.setApprovalStatus(process.getApprovalStatus());
//
// inspectionItems.add(itemVO);
// }
// }
// }
// }
//
// // 查询措施列表按措施类型区分临时/永久
// List<QmsIssueTicketProcessMeasure> measures = issueTicketProcessMeasureService.lambdaQuery()
// .eq(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, process.getId())
// .list();
//
// // 查询字典项ID
// Long temporaryTypeId = dictionaryItemService.getIdByCode("MeasureType", "TemporaryCorrectiveMeasures");
// Long permanentTypeId = dictionaryItemService.getIdByCode("MeasureType", "PermanentCorrectiveMeasures");
//
// for (QmsIssueTicketProcessMeasure measure : measures) {
// QmsPdiTicketDetailVO.MeasureVO measureVO = new QmsPdiTicketDetailVO.MeasureVO();
// measureVO.setId(measure.getId());
// measureVO.setMeasureTypeId(measure.getMeasureTypeId());
// measureVO.setMeasureContent(measure.getMeasureContent());
// measureVO.setChargeUser(measure.getChargeUser());
// measureVO.setPlanDate(measure.getPlanDate());
// measureVO.setConfirmDate(measure.getConfirmDate());
// measureVO.setRemark(measure.getRemark());
//
// // 根据measureTypeId区分临时措施和永久措施
// if (measure.getMeasureTypeId() != null) {
// if (measure.getMeasureTypeId().equals(temporaryTypeId)) {
// temporaryMeasures.add(measureVO);
// } else if (measure.getMeasureTypeId().equals(permanentTypeId)) {
// permanentMeasures.add(measureVO);
// }
// }
// }
// }
//
// // 构建处理人信息按部门分组
// Map<String, List<String>> handlers = new HashMap<>();
// for (QmsIssueTicketProcess process : processes) {
// 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) {
// String deptName = department.getName();
// handlers.computeIfAbsent(deptName, k -> new ArrayList<>())
// .add(process.getHandlerUserName());
// }
// }
// }
// }
//
// vo.setInspectionItems(inspectionItems);
// vo.setHandlers(handlers);
// vo.setRootCause(rootCause);
// vo.setTemporaryMeasures(temporaryMeasures);
// vo.setPermanentMeasures(permanentMeasures);
//
// // 构建相关人员签字按部门只返回已审批的
// Map<String, QmsPdiTicketMyDetailVO.SignatureInfo> signatures = buildSignatures(processes);
// vo.setSignatures(signatures);
//
// return vo;
return null;
}
/**
@ -1265,29 +1325,60 @@ public class QmsIssueTicketControllerService {
.list();
}
// 构建返回VO
// 构建返回VO - 工单基本信息
QmsPdiTicketMyDetailVO vo = new QmsPdiTicketMyDetailVO();
vo.setId(ticket.getId());
vo.setSourceType(ticket.getSourceType());
vo.setSourceId(ticket.getSourceId());
vo.setTicketNo(ticket.getTicketNo());
vo.setTicketTitle(ticket.getTicketTitle());
vo.setProjectNo(ticket.getTicketNo()); // 工程编号使用工单编号
vo.setIncidentType(ticket.getIncidentType());
vo.setExceptionCode(ticket.getExceptionCode());
vo.setUnqualifiedQty(ticket.getUnqualifiedQty());
vo.setRemark(ticket.getRemark());
vo.setCreator(ticket.getCreateUserName());
vo.setCreateTime(ticket.getCreateTime());
vo.setStatus(ticket.getStatus());
vo.setCompleteTime(ticket.getCompleteTime()); // 设置完成时间
vo.setIncidentLocation(ticket.getIncidentLocation());
vo.setIncidentDescription(ticket.getIncidentDescription());
vo.setIncidentReason(ticket.getIncidentReason());
vo.setIncidentConsequence(ticket.getIncidentConsequence());
vo.setImages(parseImageList(ticket.getImageIds()));
vo.setRemark(ticket.getRemark());
vo.setStatus(ticket.getStatus());
vo.setCompleteTime(ticket.getCompleteTime());
vo.setApprovalStatus(ticket.getApprovalStatus());
vo.setApprovalOpinion(ticket.getApprovalOpinion());
vo.setApprovalUserId(ticket.getApprovalUserId());
vo.setApprovalUserName(ticket.getApprovalUserName());
vo.setApprovalTime(ticket.getApprovalTime());
vo.setCreateUserId(ticket.getCreateUserId());
vo.setCreateUserName(ticket.getCreateUserName());
vo.setCreateTime(ticket.getCreateTime());
vo.setCreator(ticket.getCreateUserName());
// 工单类型根据sourceType转换
if (ticket.getSourceType() != null) {
switch (ticket.getSourceType()) {
case 0:
vo.setTicketType("IQC检测任务");
break;
case 1:
vo.setTicketType("PDI检测任务");
break;
case 2:
vo.setTicketType("巡检");
break;
default:
vo.setTicketType("未知");
}
}
// 生成主题机型编号+订单编号+出厂检测/库存检测+检测版本号
if (ticket.getSourceId() != null) {
// 生成主题机型编号+订单编号+新机检测/库存检测+检测版本号仅PDI工单
if (ticket.getSourceType() != null && ticket.getSourceType() == 1 && ticket.getSourceId() != null) {
QmsPdiTaskRecord taskRecord = pdiTaskRecordService.getById(ticket.getSourceId());
if (taskRecord != null && taskRecord.getDetectionRulesId() != null) {
QmsPdiDetectionRules detectionRules = pdiDetectionRulesService.getById(taskRecord.getDetectionRulesId());
if (detectionRules != null) {
String inspectionTypeStr = detectionRules.getInspectionType() != null && detectionRules.getInspectionType() == 0 ? "新机检测" : "库存检测";
vo.setTicketTitle(detectionRules.getMachineNo() + "-" + detectionRules.getOrderNo() + "-" + inspectionTypeStr + "-" + detectionRules.getInspectionVersion());
vo.setTicketType("PDI-" + inspectionTypeStr);
}
}
}
@ -1465,11 +1556,97 @@ public class QmsIssueTicketControllerService {
vo.setRootCause(rootCause);
vo.setTemporaryMeasures(temporaryMeasures);
vo.setPermanentMeasures(permanentMeasures);
vo.setSignatures(new HashMap<>());
// 构建相关人员签字按部门只返回已审批的
Map<String, QmsPdiTicketMyDetailVO.SignatureInfo> signatures = buildSignatures(processes);
vo.setSignatures(signatures);
return vo;
}
/**
* 构建相关人员签字按部门只返回已审批的
* @param processes 处理记录列表
* @return 部门签字信息Map
*/
private Map<String, QmsPdiTicketMyDetailVO.SignatureInfo> buildSignatures(List<QmsIssueTicketProcess> processes) {
Map<String, QmsPdiTicketMyDetailVO.SignatureInfo> signatures = new HashMap<>();
for (QmsIssueTicketProcess process : processes) {
// 只返回已审批的记录approvalStatus 不为 null
if (process.getApprovalStatus() == null) {
continue;
}
// 查询处理人的部门信息
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) {
String deptName = department.getName();
// 查询部门领导
Department leaderDept = departmentService.getById(userInterior.getDeptId());
String leaderName = null;
if (leaderDept != null && leaderDept.getHeadUserId() != null) {
User leaderUser = userService.getById(leaderDept.getHeadUserId());
if (leaderUser != null) {
leaderName = leaderUser.getUserName();
}
}
// 如果领导未审批跳过
if (StrUtil.isBlank(leaderName)) {
continue;
}
// 构建签名姓名状态
String statusText = convertApprovalStatus(process.getApprovalStatus());
String signature = leaderName + "" + statusText + "";
// 构建签字信息
QmsPdiTicketMyDetailVO.SignatureInfo signatureInfo = new QmsPdiTicketMyDetailVO.SignatureInfo();
signatureInfo.setDeptName(deptName);
signatureInfo.setApprovalOpinion(process.getApprovalOpinion());
signatureInfo.setApprovalTime(process.getApprovalTime() != null
? process.getApprovalTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
: null);
signatureInfo.setSignature(signature);
signatures.put(deptName, signatureInfo);
}
}
}
}
return signatures;
}
/**
* 转换审批状态为文本
* @param status 审批状态0=通过1=驳回2=重检3=报废4=维修5=挑选使用6=让渡使用
* @return 状态文本
*/
private String convertApprovalStatus(Short status) {
if (status == null) {
return "未审批";
}
switch (status) {
case 0: return "通过";
case 1: return "驳回";
case 2: return "重检";
case 3: return "报废";
case 4: return "维修";
case 5: return "挑选使用";
case 6: return "让渡使用";
default: return "未知";
}
}
/**
* 查询巡检工单详情
* 返回工单基本信息图片列表处理人信息纠正措施等

View File

@ -199,23 +199,36 @@ public class QmsPdiStatusItemControllerService {
// 读取 Excel 里的所有图片
List<Drawings.Picture> pictures = new ExcelReader(new java.io.ByteArrayInputStream(fileBytes)).listPictures();
// 遍历 DTO遇到 DISPIMG 就上传图片并替换地址
// 遍历 DTO遇到 DISPIMG 就上传图片并替换为文件ID
for (int i = 0; i < data.size(); i++) {
QmsPdiStatusItemImportDTO dto = data.get(i);
String inspectionImage = dto.getInspectionImage();
// 如果是图片公式就取图片上传地址填回去
// 如果是图片公式就取图片上传文件ID填回去
if (StrUtil.isNotBlank(inspectionImage) && inspectionImage.startsWith("=DISPIMG(")) {
if (i < pictures.size()) {
Drawings.Picture pic = pictures.get(i);
try (FileInputStream fis = new FileInputStream(pic.getLocalPath().toFile())) {
// 上传图片 获取地址
// 1. 上传图片 获取URL
String imageUrl = fileUploadService.upload(
"image/" + DateTimeUtil.format(LocalDate.now(), "yyyyMMdd") + "/" + IdUtil.fastUUID() + ".png",
fis,
"image/png"
);
dto.setInspectionImage(imageUrl);
// 2. 保存文件上传记录
FileUploadRecord record = new FileUploadRecord();
record.setId(IdUtil.getSnowflakeNextId());
record.setFileName(pic.getLocalPath().getFileName().toString());
record.setFileType("image/png");
record.setUrl(imageUrl);
record.setFrom("PDI检测项导入");
record.setCreateBy(UserUtil.getUserName());
record.setCreateTime(LocalDateTime.now());
fileUploadRecordService.save(record);
// 3. 将文件ID填回到DTO
dto.setInspectionImage(String.valueOf(record.getId()));
}
} else {
dto.setInspectionImage(null);

View File

@ -172,7 +172,7 @@ public class QmsPdiTicketMyDetailVO {
/**
* 相关人员签字按部门
*/
private Map<String, String> signatures;
private Map<String, SignatureInfo> signatures;
// ===== 旧的处理记录列表保留兼容 =====
@ -416,4 +416,27 @@ public class QmsPdiTicketMyDetailVO {
*/
private Long approvalUserId;
}
@Data
public static class SignatureInfo {
/**
* 部门名称
*/
private String deptName;
/**
* 审批意见
*/
private String approvalOpinion;
/**
* 审批时间
*/
private String approvalTime;
/**
* 签名格式姓名状态
*/
private String signature;
}
}