样式规范(QMS):统一控制器与服务格式化
- 优化QMS任务记录代码的导入顺序及换行符。 - 确保控制器与服务文件符合项目风格规范。
This commit is contained in:
parent
0985594f6b
commit
f5d3b2e766
|
|
@ -13,6 +13,8 @@ import jakarta.validation.Valid;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PQC任务
|
* PQC任务
|
||||||
*
|
*
|
||||||
|
|
@ -66,6 +68,14 @@ public class QmsPqcTaskRecordController {
|
||||||
return ApiResult.success(pqcTaskRecordService.getReviewDetail(taskId));
|
return ApiResult.success(pqcTaskRecordService.getReviewDetail(taskId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询PQC检查点进度
|
||||||
|
*/
|
||||||
|
@GetMapping("/point/progress")
|
||||||
|
public ApiResult<QmsPqcTaskRecordPointProgressVO> getPointProgress(@RequestParam Long taskId) {
|
||||||
|
return ApiResult.success(pqcTaskRecordService.getPointProgress(taskId));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 暂存
|
* 暂存
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -610,6 +610,94 @@ public class QmsPqcTaskRecordControllerService {
|
||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询PQC检查点进度
|
||||||
|
*/
|
||||||
|
public QmsPqcTaskRecordPointProgressVO getPointProgress(Long taskId) {
|
||||||
|
QmsPqcTaskRecord currentTask = pqcTaskRecordService.getById(taskId);
|
||||||
|
VUtil.trueThrowBusinessError(currentTask == null).throwMessage("任务不存在");
|
||||||
|
|
||||||
|
String no = currentTask.getNo();
|
||||||
|
String modelNo = currentTask.getModelNo();
|
||||||
|
|
||||||
|
QmsPqcInspectionRule latestRule = pqcInspectionRuleService.lambdaQuery()
|
||||||
|
.eq(QmsPqcInspectionRule::getModelNo, modelNo)
|
||||||
|
.eq(QmsPqcInspectionRule::getIsDisabled, true)
|
||||||
|
.orderByDesc(QmsPqcInspectionRule::getRuleVersion)
|
||||||
|
.last("LIMIT 1")
|
||||||
|
.one();
|
||||||
|
|
||||||
|
LinkedHashMap<String, StepProgressAccumulator> stepMap = new LinkedHashMap<>();
|
||||||
|
Integer latestRuleVersion = latestRule != null ? latestRule.getRuleVersion() : null;
|
||||||
|
if (latestRule != null) {
|
||||||
|
List<QmsPqcInspectionPoint> latestPoints = pqcInspectionPointService.lambdaQuery()
|
||||||
|
.eq(QmsPqcInspectionPoint::getPqcRuleId, latestRule.getId())
|
||||||
|
.orderByAsc(QmsPqcInspectionPoint::getStepDicItemId)
|
||||||
|
.orderByAsc(QmsPqcInspectionPoint::getId)
|
||||||
|
.list();
|
||||||
|
for (QmsPqcInspectionPoint point : latestPoints) {
|
||||||
|
StepProgressAccumulator stepAccumulator = stepMap.computeIfAbsent(buildStepKey(point),
|
||||||
|
k -> StepProgressAccumulator.fromPoint(point));
|
||||||
|
stepAccumulator.putIfAbsent(buildPointKey(point),
|
||||||
|
PointProgressAccumulator.fromLatestPoint(point, latestRuleVersion));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<QmsPqcTaskRecord> taskRecords = pqcTaskRecordService.lambdaQuery()
|
||||||
|
.eq(QmsPqcTaskRecord::getNo, no)
|
||||||
|
.eq(QmsPqcTaskRecord::getModelNo, modelNo)
|
||||||
|
.isNotNull(QmsPqcTaskRecord::getInspectionPointId)
|
||||||
|
.orderByAsc(QmsPqcTaskRecord::getCreateTime)
|
||||||
|
.list();
|
||||||
|
|
||||||
|
if (!taskRecords.isEmpty()) {
|
||||||
|
Set<Long> pointIds = taskRecords.stream()
|
||||||
|
.map(QmsPqcTaskRecord::getInspectionPointId)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
Map<Long, QmsPqcInspectionPoint> pointMap = new HashMap<>();
|
||||||
|
if (!pointIds.isEmpty()) {
|
||||||
|
pointMap = pqcInspectionPointService.listByIds(pointIds).stream()
|
||||||
|
.collect(Collectors.toMap(QmsPqcInspectionPoint::getId, point -> point));
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<Long> ruleIds = pointMap.values().stream()
|
||||||
|
.map(QmsPqcInspectionPoint::getPqcRuleId)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
Map<Long, Integer> ruleVersionMap = new HashMap<>();
|
||||||
|
if (!ruleIds.isEmpty()) {
|
||||||
|
ruleVersionMap = pqcInspectionRuleService.listByIds(ruleIds).stream()
|
||||||
|
.collect(Collectors.toMap(QmsPqcInspectionRule::getId, QmsPqcInspectionRule::getRuleVersion));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (QmsPqcTaskRecord record : taskRecords) {
|
||||||
|
QmsPqcInspectionPoint point = pointMap.get(record.getInspectionPointId());
|
||||||
|
if (point == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Integer recordRuleVersion = ruleVersionMap.get(point.getPqcRuleId());
|
||||||
|
StepProgressAccumulator stepAccumulator = stepMap.computeIfAbsent(buildStepKey(point),
|
||||||
|
k -> StepProgressAccumulator.fromPoint(point));
|
||||||
|
String key = buildPointKey(point);
|
||||||
|
PointProgressAccumulator accumulator = stepAccumulator.computeIfAbsent(key,
|
||||||
|
k -> PointProgressAccumulator.fromTaskPoint(point));
|
||||||
|
accumulator.mergeRecord(point, recordRuleVersion, record.getStatus());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QmsPqcTaskRecordPointProgressVO result = new QmsPqcTaskRecordPointProgressVO();
|
||||||
|
result.setNo(no);
|
||||||
|
result.setModelNo(modelNo);
|
||||||
|
result.setSteps(stepMap.values().stream()
|
||||||
|
.map(StepProgressAccumulator::toVO)
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解析文件列表
|
* 解析文件列表
|
||||||
*/
|
*/
|
||||||
|
|
@ -1012,6 +1100,129 @@ public class QmsPqcTaskRecordControllerService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成检查点合并键
|
||||||
|
*/
|
||||||
|
private String buildStepKey(QmsPqcInspectionPoint point) {
|
||||||
|
String stepName = StrUtil.blankToDefault(point.getStepName(), "");
|
||||||
|
String stepDicItemId = point.getStepDicItemId() == null ? "" : point.getStepDicItemId().toString();
|
||||||
|
return stepDicItemId + "|" + stepName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildPointKey(QmsPqcInspectionPoint point) {
|
||||||
|
String pointCode = StrUtil.blankToDefault(point.getInspectionPointCode(), "");
|
||||||
|
String pointName = StrUtil.blankToDefault(point.getInspectionPointName(), "");
|
||||||
|
return buildStepKey(point) + "|" + pointCode + "|" + pointName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String formatRuleVersion(Collection<Integer> versions, Integer fallbackVersion) {
|
||||||
|
if (versions != null && !versions.isEmpty()) {
|
||||||
|
String versionText = versions.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.distinct()
|
||||||
|
.sorted()
|
||||||
|
.map(version -> "V" + version)
|
||||||
|
.collect(Collectors.joining("/"));
|
||||||
|
if (StrUtil.isNotBlank(versionText)) {
|
||||||
|
return versionText;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fallbackVersion == null ? null : "V" + fallbackVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查点进度聚合器
|
||||||
|
*/
|
||||||
|
private static class PointProgressAccumulator {
|
||||||
|
private String stepName;
|
||||||
|
private Long stepDicItemId;
|
||||||
|
private String inspectionPointName;
|
||||||
|
private String inspectionPointCode;
|
||||||
|
private Long inspectionPointId;
|
||||||
|
private boolean completed;
|
||||||
|
private int inspectionCount;
|
||||||
|
private final Set<Integer> versions = new LinkedHashSet<>();
|
||||||
|
private Integer fallbackVersion;
|
||||||
|
|
||||||
|
private static PointProgressAccumulator fromLatestPoint(QmsPqcInspectionPoint point, Integer latestRuleVersion) {
|
||||||
|
PointProgressAccumulator accumulator = new PointProgressAccumulator();
|
||||||
|
accumulator.stepName = point.getStepName();
|
||||||
|
accumulator.stepDicItemId = point.getStepDicItemId();
|
||||||
|
accumulator.inspectionPointName = point.getInspectionPointName();
|
||||||
|
accumulator.inspectionPointCode = point.getInspectionPointCode();
|
||||||
|
accumulator.inspectionPointId = point.getId();
|
||||||
|
accumulator.fallbackVersion = latestRuleVersion;
|
||||||
|
return accumulator;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PointProgressAccumulator fromTaskPoint(QmsPqcInspectionPoint point) {
|
||||||
|
PointProgressAccumulator accumulator = new PointProgressAccumulator();
|
||||||
|
accumulator.stepName = point.getStepName();
|
||||||
|
accumulator.stepDicItemId = point.getStepDicItemId();
|
||||||
|
accumulator.inspectionPointName = point.getInspectionPointName();
|
||||||
|
accumulator.inspectionPointCode = point.getInspectionPointCode();
|
||||||
|
accumulator.inspectionPointId = point.getId();
|
||||||
|
return accumulator;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void mergeRecord(QmsPqcInspectionPoint point, Integer recordRuleVersion, Short status) {
|
||||||
|
inspectionCount++;
|
||||||
|
if (status != null && status == 3) {
|
||||||
|
completed = true;
|
||||||
|
}
|
||||||
|
if (recordRuleVersion != null) {
|
||||||
|
versions.add(recordRuleVersion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private QmsPqcTaskRecordPointProgressVO toVO() {
|
||||||
|
QmsPqcTaskRecordPointProgressVO vo = new QmsPqcTaskRecordPointProgressVO();
|
||||||
|
vo.setStepName(stepName);
|
||||||
|
vo.setStepDicItemId(stepDicItemId);
|
||||||
|
vo.setInspectionPointName(inspectionPointName);
|
||||||
|
vo.setInspectionPointCode(inspectionPointCode);
|
||||||
|
vo.setInspectionPointId(inspectionPointId);
|
||||||
|
vo.setCompleted(completed);
|
||||||
|
vo.setInspectionCount(inspectionCount);
|
||||||
|
vo.setRuleVersion(formatRuleVersion(versions, fallbackVersion));
|
||||||
|
return vo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 步装进度聚合器
|
||||||
|
*/
|
||||||
|
private static class StepProgressAccumulator {
|
||||||
|
private String stepName;
|
||||||
|
private Long stepDicItemId;
|
||||||
|
private final LinkedHashMap<String, PointProgressAccumulator> points = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
private static StepProgressAccumulator fromPoint(QmsPqcInspectionPoint point) {
|
||||||
|
StepProgressAccumulator accumulator = new StepProgressAccumulator();
|
||||||
|
accumulator.stepName = point.getStepName();
|
||||||
|
accumulator.stepDicItemId = point.getStepDicItemId();
|
||||||
|
return accumulator;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PointProgressAccumulator computeIfAbsent(String key, java.util.function.Supplier<PointProgressAccumulator> supplier) {
|
||||||
|
return points.computeIfAbsent(key, k -> supplier.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void putIfAbsent(String key, PointProgressAccumulator accumulator) {
|
||||||
|
points.putIfAbsent(key, accumulator);
|
||||||
|
}
|
||||||
|
|
||||||
|
private QmsPqcTaskRecordPointProgressVO.StepVO toVO() {
|
||||||
|
QmsPqcTaskRecordPointProgressVO.StepVO vo = new QmsPqcTaskRecordPointProgressVO.StepVO();
|
||||||
|
vo.setStepName(stepName);
|
||||||
|
vo.setStepDicItemId(stepDicItemId);
|
||||||
|
vo.setPoints(points.values().stream()
|
||||||
|
.map(PointProgressAccumulator::toVO)
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
return vo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 提交结果类
|
* 提交结果类
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,86 @@
|
||||||
|
package com.nflg.wms.common.pojo.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PQC任务检查点进度返回对象
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class QmsPqcTaskRecordPointProgressVO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 机台编号
|
||||||
|
*/
|
||||||
|
private String no;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 机型编号
|
||||||
|
*/
|
||||||
|
private String modelNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 步装列表
|
||||||
|
*/
|
||||||
|
private List<StepVO> steps;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 步装进度
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public static class StepVO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 步装名称
|
||||||
|
*/
|
||||||
|
private String stepName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 步装字典ID
|
||||||
|
*/
|
||||||
|
private Long stepDicItemId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查点列表
|
||||||
|
*/
|
||||||
|
private List<PointVO> points;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查点进度
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public static class PointVO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查点名称
|
||||||
|
*/
|
||||||
|
private String inspectionPointName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查点编号
|
||||||
|
*/
|
||||||
|
private String inspectionPointCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查点流水号
|
||||||
|
*/
|
||||||
|
private Long inspectionPointId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否完成,true=已完成,false=未完成
|
||||||
|
*/
|
||||||
|
private Boolean completed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检测次数
|
||||||
|
*/
|
||||||
|
private Integer inspectionCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检测版本,示例:V1/V2/V3
|
||||||
|
*/
|
||||||
|
private String ruleVersion;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue