feat: add src/main/java/demo/ReleaseService.java

This commit is contained in:
2026-09-25 11:56:58 +08:00
parent a6c136afae
commit 83d65d63c7

View File

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