parent
5bb2f41a0c
commit
db885a9105
|
|
@ -73,6 +73,9 @@ public class QmsIssueTicketControllerService {
|
|||
@Resource
|
||||
private IQmsPdiInspectionResultsService pdiInspectionResultsService;
|
||||
|
||||
@Resource
|
||||
private IQmsPdiInspectionResultsLoadingImageService pdiInspectionResultsLoadingImageService;
|
||||
|
||||
@Resource
|
||||
private IQmsPdiDetectionRulesStatusItemService pdiStatusItemService;
|
||||
|
||||
|
|
@ -2700,6 +2703,11 @@ public class QmsIssueTicketControllerService {
|
|||
.set(QmsIssueTicket::getUpdateTime, now)
|
||||
.update();
|
||||
|
||||
// PDI工单关闭时:创建新任务单,复制内容,不合格项改为合格
|
||||
if (ticket.getSourceType() != null && ticket.getSourceType() == 1 && ticket.getSourceId() != null) {
|
||||
createPdiRepairTask(ticket.getSourceId(), now);
|
||||
}
|
||||
|
||||
} else if (request.getCreateApproval() == 1) {
|
||||
// 驳回工单
|
||||
// 校验:handlers和审批意见不能为空
|
||||
|
|
@ -2794,4 +2802,76 @@ public class QmsIssueTicketControllerService {
|
|||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* PDI工单关闭时创建新任务单
|
||||
* 复制原任务内容,将不合格项改为合格
|
||||
*/
|
||||
private void createPdiRepairTask(Long originalTaskId, LocalDateTime now) {
|
||||
// 1. 获取原任务
|
||||
QmsPdiTaskRecord originalTask = pdiTaskRecordService.getById(originalTaskId);
|
||||
if (originalTask == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. 创建新任务单
|
||||
QmsPdiTaskRecord newTask = new QmsPdiTaskRecord()
|
||||
.setTaskNo(basdeSerialNumberControllerService.generateSerialNumber(1))
|
||||
.setDeviceNo(originalTask.getDeviceNo())
|
||||
.setDetectionRulesId(originalTask.getDetectionRulesId())
|
||||
.setInspectionEnable(2) // 已完成
|
||||
.setInspectionInspection(true) // 合格
|
||||
.setAssistantId(originalTask.getAssistantId())
|
||||
.setSubmissionTime(originalTask.getSubmissionTime())
|
||||
.setRequiredCompletionTime(originalTask.getRequiredCompletionTime())
|
||||
.setStartDetectionTime(originalTask.getStartDetectionTime())
|
||||
.setDetectionCompletionTime(now)
|
||||
.setOverdue(originalTask.getOverdue())
|
||||
.setPushRecords(originalTask.getPushRecords())
|
||||
.setFactoryNo(originalTask.getFactoryNo())
|
||||
.setOrderNo(originalTask.getOrderNo())
|
||||
.setWarehouseNo(originalTask.getWarehouseNo())
|
||||
.setRelatedTaskId(originalTask.getId());
|
||||
pdiTaskRecordService.save(newTask);
|
||||
|
||||
// 3. 复制检验结果,不合格项改为合格
|
||||
List<QmsPdiInspectionResults> oldResults = pdiInspectionResultsService.lambdaQuery()
|
||||
.eq(QmsPdiInspectionResults::getTaskId, originalTaskId)
|
||||
.list();
|
||||
|
||||
if (!oldResults.isEmpty()) {
|
||||
List<QmsPdiInspectionResults> newResults = new ArrayList<>();
|
||||
for (QmsPdiInspectionResults old : oldResults) {
|
||||
QmsPdiInspectionResults newResult = new QmsPdiInspectionResults()
|
||||
.setDetectionRulesId(old.getDetectionRulesId())
|
||||
.setTaskId(newTask.getId())
|
||||
.setInspectionItemId(old.getInspectionItemId())
|
||||
.setInspectionItemType(old.getInspectionItemType())
|
||||
.setInspectionItemImage(old.getInspectionItemImage())
|
||||
.setInspectionItemResults(true) // 全部改为合格
|
||||
.setRemark(old.getRemark())
|
||||
.setInspectorId(old.getInspectorId())
|
||||
.setInspectionTime(old.getInspectionTime())
|
||||
.setInspectionBy(old.getInspectionBy());
|
||||
newResults.add(newResult);
|
||||
}
|
||||
pdiInspectionResultsService.saveBatch(newResults);
|
||||
}
|
||||
|
||||
// 4. 复制装车前图片
|
||||
List<QmsPdiInspectionResultsLoadingImage> oldImages = pdiInspectionResultsLoadingImageService.lambdaQuery()
|
||||
.eq(QmsPdiInspectionResultsLoadingImage::getTaskId, originalTaskId)
|
||||
.list();
|
||||
|
||||
if (!oldImages.isEmpty()) {
|
||||
List<QmsPdiInspectionResultsLoadingImage> newImages = new ArrayList<>();
|
||||
for (QmsPdiInspectionResultsLoadingImage old : oldImages) {
|
||||
QmsPdiInspectionResultsLoadingImage newImage = new QmsPdiInspectionResultsLoadingImage()
|
||||
.setTaskId(newTask.getId())
|
||||
.setLoadingImage(old.getLoadingImage());
|
||||
newImages.add(newImage);
|
||||
}
|
||||
pdiInspectionResultsLoadingImageService.saveBatch(newImages);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -847,21 +847,25 @@ public class QmsPqcTaskRecordControllerService {
|
|||
}
|
||||
}
|
||||
|
||||
// 校验工序检查(一二级)
|
||||
// 校验工序检查(一二级):自检数据和自检附件有一个不为空即有效
|
||||
if (request.getProcessInspections() != null) {
|
||||
for (int i = 0; i < request.getProcessInspections().size(); i++) {
|
||||
QmsPqcTaskRecordDraftQO.ProcessInspectionItem item = request.getProcessInspections().get(i);
|
||||
if (StrUtil.isBlank(item.getSelfTestData())) {
|
||||
boolean hasSelfTestData = StrUtil.isNotBlank(item.getSelfTestData());
|
||||
boolean hasSelfTestFiles = item.getSelfTestFiles() != null && !item.getSelfTestFiles().isEmpty();
|
||||
if (!hasSelfTestData && !hasSelfTestFiles) {
|
||||
emptyFields.add("processInspections[" + i + "].selfTestData");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 校验工序检查(三级)
|
||||
// 校验工序检查(三级):QC检测数据和QC检测附件有一个不为空即有效
|
||||
if (request.getProcessInspectionsLevel3() != null) {
|
||||
for (int i = 0; i < request.getProcessInspectionsLevel3().size(); i++) {
|
||||
QmsPqcTaskRecordDraftQO.ProcessInspectionLevel3Item item = request.getProcessInspectionsLevel3().get(i);
|
||||
if (StrUtil.isBlank(item.getQcTestData())) {
|
||||
boolean hasQcTestData = StrUtil.isNotBlank(item.getQcTestData());
|
||||
boolean hasQcTestFiles = item.getQcTestFiles() != null && !item.getQcTestFiles().isEmpty();
|
||||
if (!hasQcTestData && !hasQcTestFiles) {
|
||||
emptyFields.add("processInspectionsLevel3[" + i + "].qcTestData");
|
||||
}
|
||||
}
|
||||
|
|
@ -989,7 +993,69 @@ public class QmsPqcTaskRecordControllerService {
|
|||
.setCreateTime(now);
|
||||
|
||||
issueTicketService.save(ticket);
|
||||
|
||||
|
||||
// 2. 创建返修任务
|
||||
String repairTaskNo = basdeSerialNumberControllerService.generateSerialNumber(42);
|
||||
QmsPqcTaskRecord repairTask = new QmsPqcTaskRecord()
|
||||
.setTaskNo(repairTaskNo)
|
||||
.setAufnr(taskRecord.getAufnr())
|
||||
.setModelNo(taskRecord.getModelNo())
|
||||
.setNo(taskRecord.getNo())
|
||||
.setInspectionPointId(taskRecord.getInspectionPointId())
|
||||
.setRelatedTaskId(taskRecord.getId())
|
||||
.setStatus((short) 0) // 自检中
|
||||
.setEnable(true)
|
||||
.setCreateTime(now);
|
||||
pqcTaskRecordService.save(repairTask);
|
||||
|
||||
// 3. 复制详情记录:合格项保留全部数据,不合格项清空自检/QC数据、附件及复核意见
|
||||
List<QmsPqcTaskRecordDetails> oldDetails = pqcTaskRecordDetailsService.lambdaQuery()
|
||||
.eq(QmsPqcTaskRecordDetails::getTaskId, taskRecord.getId())
|
||||
.list();
|
||||
|
||||
List<QmsPqcTaskRecordDetails> newDetails = new ArrayList<>();
|
||||
for (QmsPqcTaskRecordDetails old : oldDetails) {
|
||||
QmsPqcTaskRecordDetails newDetail = new QmsPqcTaskRecordDetails()
|
||||
.setTaskId(repairTask.getId())
|
||||
.setInspectionPointItemId(old.getInspectionPointItemId())
|
||||
.setType(old.getType());
|
||||
|
||||
if (old.getType() != null && old.getType() == 1) {
|
||||
// 关键物料采集:全部复制
|
||||
newDetail.setSelfTestData(old.getSelfTestData())
|
||||
.setReviewData(old.getReviewData())
|
||||
.setSelfTestAttachments(old.getSelfTestAttachments());
|
||||
} else {
|
||||
// 工序检查:根据是否合格决定复制策略
|
||||
if (Boolean.TRUE.equals(old.getReviewEnable())) {
|
||||
// 合格项:保留全部数据
|
||||
newDetail.setSelfTestData(old.getSelfTestData())
|
||||
.setReviewData(old.getReviewData())
|
||||
.setReviewEnable(old.getReviewEnable())
|
||||
.setSelfTestAttachments(old.getSelfTestAttachments())
|
||||
.setReviewAttachments(old.getReviewAttachments())
|
||||
.setReviewOpinion(old.getReviewOpinion())
|
||||
.setQcTestData(old.getQcTestData())
|
||||
.setQcTestAttachments(old.getQcTestAttachments());
|
||||
}
|
||||
// 不合格项:只保留 inspectionPointItemId 和 type,其他字段为空,等自检人重新填写
|
||||
}
|
||||
newDetails.add(newDetail);
|
||||
}
|
||||
|
||||
if (!newDetails.isEmpty()) {
|
||||
pqcTaskRecordDetailsService.saveBatch(newDetails);
|
||||
}
|
||||
|
||||
// 4. 推送通知原自检人重新自检
|
||||
if (taskRecord.getSelfTesterId() != null) {
|
||||
Long repairTypeId = dictionaryItemService.getId("消息类型", "PQCRepairTask");
|
||||
if (repairTypeId != null) {
|
||||
sendTodoMessage(taskRecord.getSelfTesterId(), taskRecord.getSelfTesterName(),
|
||||
repairTask.getId(), repairTypeId, currentUserId, currentUserName, now);
|
||||
}
|
||||
}
|
||||
|
||||
// 返回工单编号
|
||||
return ticketNo;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -530,6 +530,7 @@ public class QmsReportControllerService {
|
|||
|
||||
// 当前周期总检测量
|
||||
long currentTotal = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, currentStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, currentEnd)
|
||||
.count();
|
||||
|
|
@ -538,6 +539,7 @@ public class QmsReportControllerService {
|
|||
long previousTotal = 0;
|
||||
if (hasTimeRange) {
|
||||
previousTotal = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, previousStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, previousEnd)
|
||||
.count();
|
||||
|
|
@ -565,6 +567,7 @@ public class QmsReportControllerService {
|
|||
|
||||
// 当前周期已完成
|
||||
long currentCompleted = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.eq(QmsPdiTaskRecord::getInspectionEnable, 2)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, currentStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, currentEnd)
|
||||
|
|
@ -574,6 +577,7 @@ public class QmsReportControllerService {
|
|||
long previousCompleted = 0;
|
||||
if (hasTimeRange) {
|
||||
previousCompleted = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.eq(QmsPdiTaskRecord::getInspectionEnable, 2)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, previousStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, previousEnd)
|
||||
|
|
@ -597,6 +601,7 @@ public class QmsReportControllerService {
|
|||
*/
|
||||
private int calculatePdiPendingTasks(LocalDateTime currentStart, LocalDateTime currentEnd) {
|
||||
long count = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.eq(QmsPdiTaskRecord::getInspectionEnable, 0)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, currentStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, currentEnd)
|
||||
|
|
@ -617,6 +622,7 @@ public class QmsReportControllerService {
|
|||
long currentAvgSeconds = 0;
|
||||
|
||||
List<QmsPdiTaskRecord> currentCompletedTasks = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.eq(QmsPdiTaskRecord::getInspectionEnable, 2)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, currentStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, currentEnd)
|
||||
|
|
@ -640,6 +646,7 @@ public class QmsReportControllerService {
|
|||
|
||||
if (hasTimeRange) {
|
||||
List<QmsPdiTaskRecord> previousCompletedTasks = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.eq(QmsPdiTaskRecord::getInspectionEnable, 2)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, previousStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, previousEnd)
|
||||
|
|
@ -675,6 +682,7 @@ public class QmsReportControllerService {
|
|||
*/
|
||||
private double calculatePdiPlanCompletionRate(LocalDateTime currentStart, LocalDateTime currentEnd) {
|
||||
long total = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, currentStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, currentEnd)
|
||||
.count();
|
||||
|
|
@ -682,6 +690,7 @@ public class QmsReportControllerService {
|
|||
if (total == 0) return 0;
|
||||
|
||||
long completed = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.eq(QmsPdiTaskRecord::getInspectionEnable, 2)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, currentStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, currentEnd)
|
||||
|
|
@ -700,6 +709,7 @@ public class QmsReportControllerService {
|
|||
|
||||
// 当前周期
|
||||
long currentTotal = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, currentStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, currentEnd)
|
||||
.count();
|
||||
|
|
@ -707,6 +717,7 @@ public class QmsReportControllerService {
|
|||
long currentFail = 0;
|
||||
if (currentTotal > 0) {
|
||||
currentFail = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.eq(QmsPdiTaskRecord::getInspectionInspection, false)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, currentStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, currentEnd)
|
||||
|
|
@ -719,12 +730,14 @@ public class QmsReportControllerService {
|
|||
double previousFailRate = 0;
|
||||
if (hasTimeRange) {
|
||||
long previousTotal = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, previousStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, previousEnd)
|
||||
.count();
|
||||
|
||||
if (previousTotal > 0) {
|
||||
long previousFail = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.eq(QmsPdiTaskRecord::getInspectionInspection, false)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, previousStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, previousEnd)
|
||||
|
|
@ -761,6 +774,7 @@ public class QmsReportControllerService {
|
|||
|
||||
// 该周已完成数
|
||||
long weekCompleted = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.eq(QmsPdiTaskRecord::getInspectionEnable, 2)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, currentWeekStart)
|
||||
.le(QmsPdiTaskRecord::getSubmissionTime, currentWeekEnd)
|
||||
|
|
@ -770,6 +784,7 @@ public class QmsReportControllerService {
|
|||
long weekQualified = 0;
|
||||
if (weekCompleted > 0) {
|
||||
weekQualified = pdiTaskRecordService.lambdaQuery()
|
||||
.isNull(QmsPdiTaskRecord::getRelatedTaskId)
|
||||
.eq(QmsPdiTaskRecord::getInspectionEnable, 2)
|
||||
.eq(QmsPdiTaskRecord::getInspectionInspection, true)
|
||||
.ge(QmsPdiTaskRecord::getSubmissionTime, currentWeekStart)
|
||||
|
|
|
|||
|
|
@ -96,4 +96,9 @@ public class QmsPdiTaskRecord implements Serializable {
|
|||
* 仓库编号
|
||||
*/
|
||||
private String warehouseNo;
|
||||
|
||||
/**
|
||||
* 关联任务ID
|
||||
*/
|
||||
private Long relatedTaskId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,8 @@
|
|||
COUNT(*) AS "defectCount"
|
||||
FROM qms_pdi_task_record t
|
||||
INNER JOIN qms_pdi_detection_rules dr ON dr.id = t.detection_rules_id
|
||||
WHERE t.submission_time >= #{startTime}
|
||||
WHERE t.related_task_id IS NULL
|
||||
AND t.submission_time >= #{startTime}
|
||||
AND t.submission_time <= #{endTime}
|
||||
GROUP BY dr.model_no
|
||||
ORDER BY COUNT(*) DESC
|
||||
|
|
|
|||
Loading…
Reference in New Issue