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