This commit is contained in:
wucongxing8150 2025-07-09 16:15:50 +08:00
parent 94f796fdf2
commit d6133afeac

View File

@ -32,6 +32,8 @@ import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.chrono.ChronoLocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@ -453,75 +455,77 @@ public class MedicalRecordService {
// 检测所有时间
public ResponseDTO checkAllTime(MedicalRecordUpdateForm form){
// 基础时间
LocalDateTime admissionTime = form.getAdmissionTime();
LocalDateTime dischargeTime = form.getDischargeTime();
LocalDateTime headTime = form.getHeadTime();
LocalDateTime afterTime = form.getAfterTime();
LocalDateTime lastTime = form.getLastTime();
// 转换为 LocalDate
LocalDate admissionDate = form.getAdmissionTime().toLocalDate();
LocalDate dischargeDate = form.getDischargeTime().toLocalDate();
LocalDate headDate = form.getHeadTime().toLocalDate();
LocalDate afterDate = form.getAfterTime().toLocalDate();
LocalDate lastDate = form.getLastTime() != null ? form.getLastTime().toLocalDate() : null;
List<DpmsAddForm> dpmas = form.getDpmas();
// 时间基准线
LocalDateTime targetDate = LocalDateTime.of(2024, 10, 1, 0, 0);
LocalDate targetDate = LocalDate.of(2024, 10, 1);
// 1. 所有时间必须 >= 2024-10-01允许等于
if (!admissionTime.isEqual(targetDate) && !admissionTime.isAfter(targetDate)) {
if (!admissionDate.isEqual(targetDate) && !admissionDate.isAfter(targetDate)) {
return ResponseDTO.userErrorParam("入院时间需在2024年10月1日或之后");
}
if (!dischargeTime.isEqual(targetDate) && !dischargeTime.isAfter(targetDate)) {
if (!dischargeDate.isEqual(targetDate) && !dischargeDate.isAfter(targetDate)) {
return ResponseDTO.userErrorParam("出院时间需在2024年10月1日或之后");
}
if (!headTime.isEqual(targetDate) && !headTime.isAfter(targetDate)) {
if (!headDate.isEqual(targetDate) && !headDate.isAfter(targetDate)) {
return ResponseDTO.userErrorParam("首次人工肝治疗前检测时间需在2024年10月1日或之后");
}
if (!afterTime.isEqual(targetDate) && !afterTime.isAfter(targetDate)) {
if (!afterDate.isEqual(targetDate) && !afterDate.isAfter(targetDate)) {
return ResponseDTO.userErrorParam("首次人工肝治疗后检测时间需在2024年10月1日或之后");
}
for (DpmsAddForm dpma : dpmas) {
LocalDateTime treatTime = dpma.getTreatTime();
LocalDate treatTime = dpma.getTreatTime().toLocalDate();
if (!treatTime.isEqual(targetDate) && !treatTime.isAfter(targetDate)) {
return ResponseDTO.userErrorParam("人工肝治疗时间需在2024年10月1日或之后");
}
}
if (lastTime != null) {
if (!lastTime.isEqual(targetDate) && !lastTime.isAfter(targetDate)) {
if (lastDate != null) {
if (!lastDate.isEqual(targetDate) && !lastDate.isAfter(targetDate)) {
return ResponseDTO.userErrorParam("最后一次人工肝治疗后检测时间需在2024年10月1日或之后");
}
}
// 2. 出院时间必须大于入院时间
if (dpmas.size() > 1){
if (!dischargeTime.isAfter(admissionTime)) {
if (!dischargeDate.isAfter(admissionDate)) {
return ResponseDTO.userErrorParam("出院时间必须大于入院时间");
}
}
// 3. 所有时间必须在入院与出院之间含当天
if (headTime.isBefore(admissionTime) || headTime.isAfter(dischargeTime)) {
if (headDate.isBefore(admissionDate) || headDate.isAfter(dischargeDate)) {
return ResponseDTO.userErrorParam("首次人工肝治疗前检测时间必须在入院和出院时间之间");
}
if (afterTime.isBefore(admissionTime) || afterTime.isAfter(dischargeTime)) {
if (afterDate.isBefore(admissionDate) || afterDate.isAfter(dischargeDate)) {
return ResponseDTO.userErrorParam("首次人工肝治疗后检测时间必须在入院和出院时间之间");
}
if (lastTime != null && (lastTime.isBefore(admissionTime) || lastTime.isAfter(dischargeTime))) {
if (lastDate != null && (lastDate.isBefore(admissionDate) || lastDate.isAfter(dischargeDate))) {
return ResponseDTO.userErrorParam("最后一次人工肝治疗后检测时间必须在入院和出院时间之间");
}
for (int i = 0; i < dpmas.size(); i++) {
DpmsAddForm dpma = dpmas.get(i);
LocalDateTime treatTime = dpma.getTreatTime();
LocalDate treatTime = dpma.getTreatTime().toLocalDate();
if (dpmas.size() > 1) {
// 多次治疗必须严格在入院和出院之间不能等于
if (!treatTime.isAfter(admissionTime) || !treatTime.isBefore(dischargeTime)) {
if (!treatTime.isAfter(admissionDate) || !treatTime.isBefore(dischargeDate)) {
return ResponseDTO.userErrorParam("" + (i + 1) + " 次人工肝治疗时间必须在入院和出院时间之间");
}
} else {
// 只有一次治疗允许等于入院或出院时间
if (treatTime.isBefore(admissionTime) || treatTime.isAfter(dischargeTime)) {
return ResponseDTO.userErrorParam("人工肝治疗时间必须在入院和出院时间之间(允许为同一天)");
if (treatTime.isBefore(admissionDate) || treatTime.isAfter(dischargeDate)) {
return ResponseDTO.userErrorParam("人工肝治疗时间必须在入院和出院时间之间");
}
}
}
@ -538,35 +542,35 @@ public class MedicalRecordService {
}
for (int i = 1; i < dpmas.size(); i++) {
LocalDateTime prev = dpmas.get(i - 1).getTreatTime();
LocalDateTime curr = dpmas.get(i).getTreatTime();
LocalDate prev = dpmas.get(i - 1).getTreatTime().toLocalDate();
LocalDate curr = dpmas.get(i).getTreatTime().toLocalDate();
if (curr.isBefore(prev)) {
return ResponseDTO.userErrorParam("" + (i + 1) + " 次治疗时间必须晚于第 " + i + "");
}
}
// 5. 时间顺序关系校验
LocalDateTime firstTreatTime = dpmas.get(0).getTreatTime();
LocalDate firstTreatTime = dpmas.get(0).getTreatTime().toLocalDate();
if (headTime.isAfter(firstTreatTime)) {
if (headDate.isAfter(firstTreatTime)) {
return ResponseDTO.userErrorParam("首次人工肝治疗前检测时间必须早于第一次治疗时间");
}
if (afterTime.isBefore(firstTreatTime)) {
if (afterDate.isBefore(firstTreatTime)) {
return ResponseDTO.userErrorParam("首次人工肝治疗后检测时间必须在第一次治疗时间之后");
}
if (dpmas.size() > 1) {
if (lastTime == null) {
if (lastDate == null) {
return ResponseDTO.userErrorParam("人工肝治疗次数大于1需填入最后一次人工肝治疗后检测时间");
}
LocalDateTime lastTreatTime = dpmas.get(dpmas.size() - 1).getTreatTime();
if (lastTime.isBefore(lastTreatTime)) {
LocalDate lastTreatTime = dpmas.get(dpmas.size() - 1).getTreatTime().toLocalDate();
if (lastDate.isBefore(lastTreatTime)) {
return ResponseDTO.userErrorParam("最后一次人工肝治疗后检测时间必须在最后一次治疗时间之后");
}
if (lastTime.isAfter(dischargeTime)) {
if (lastDate.isAfter(dischargeDate)) {
return ResponseDTO.userErrorParam("最后一次人工肝治疗后检测时间必须在出院时间之前");
}
}