From 83d65d63c79c56524921e559c7b1641a6c8fbca8 Mon Sep 17 00:00:00 2001 From: xingchen <1098756313@qq.com> Date: Fri, 25 Sep 2026 11:56:58 +0800 Subject: [PATCH] feat: add src/main/java/demo/ReleaseService.java --- src/main/java/demo/ReleaseService.java | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/java/demo/ReleaseService.java diff --git a/src/main/java/demo/ReleaseService.java b/src/main/java/demo/ReleaseService.java new file mode 100644 index 0000000..4a464fc --- /dev/null +++ b/src/main/java/demo/ReleaseService.java @@ -0,0 +1,36 @@ +package demo; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +/** + * @author xingchen + * @description 维护放行规则审查服务 + * @create 2026-09-25 10:04 + */ +public final class ReleaseService { + /** + * 按固定顺序审查设备维护放行申请 + * + * @param request 放行申请 + * @param reviewDate 审查日期 + * @return 放行决定和拒绝原因 + */ + public ReleaseDecision review(ReleaseRequest request, LocalDate reviewDate) { + List reasons = new ArrayList<>(); + if (request == null || reviewDate == null) return new ReleaseDecision(false, List.of("申请或审查日缺失")); + if (request.equipmentId() == null || request.equipmentId().isBlank()) reasons.add("设备编号缺失"); + if (request.maintainer() == null || request.maintainer().isBlank()) reasons.add("维护人缺失"); + if (request.reviewer() == null || request.reviewer().isBlank()) reasons.add("复核人缺失"); + if (request.maintainer() != null && request.maintainer().equals(request.reviewer())) reasons.add("维护与复核不能同人"); + if (request.calibrationDate() == null || request.calibrationDate().isBefore(reviewDate)) reasons.add("校准已过期"); + if (request.calibrationDate() != null && request.calibrationDate().isAfter(reviewDate.plusYears(2))) reasons.add("校准日期异常"); + if (request.defects() == null) reasons.add("缺陷清单缺失"); + else for (Defect defect : request.defects()) { + if (defect == null) { reasons.add("缺陷记录缺失"); continue; } + if (defect.critical() && !defect.closed()) reasons.add("关键缺陷未关闭: " + defect.code()); + } + return new ReleaseDecision(reasons.isEmpty(), List.copyOf(reasons)); + } +}