protected String getDeadLine(ReplyDeadlineConfigDTO replyDeadlineConfigDTO) {
TimeConfigDTO timeConfigDTO = replyDeadlineConfigDTO.getTimeConfigDTO();
Integer timeUnit = timeConfigDTO.getTimeUnit();
Integer timeValue = timeConfigDTO.getTimeValue();
LocalDateTime now = LocalDateTime.now();
LocalTime nowTime = now.toLocalTime();
LocalTime workStartTime = LocalTime.of(8, 30, 0);
LocalTime workEndTime = LocalTime.of(17, 59, 59);
LocalDateTime deadLine;
if (nowTime.isAfter(workStartTime) && nowTime.isBefore(workEndTime)) {
switch (timeUnit) {
case 1:
deadLine = LocalDateTime.now().plusDays(timeValue);
break;
case 2:
deadLine = LocalDateTime.now().plusHours(timeValue);
break;
case 3:
deadLine = LocalDateTime.now().plusMinutes(timeValue);
break;
default:
deadLine = LocalDateTime.now();
break;
}
LocalTime deadLineTime = deadLine.toLocalTime();
if (deadLineTime.isAfter(workEndTime)) {
Duration duration = Duration.between(workEndTime, deadLineTime);
long minutesDifference = duration.toMinutes();
deadLine = now.plusDays(1).with(workStartTime).plusMinutes(minutesDifference);
}
} else if (nowTime.isBefore(workStartTime)) {
deadLine = now.with(workStartTime).plusMinutes(convertToMinutes(timeConfigDTO));
} else {
deadLine = now.plusDays(1).with(workStartTime).plusMinutes(convertToMinutes(timeConfigDTO));
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return deadLine.format(formatter);
}
private long convertToMinutes(TimeConfigDTO timeConfigDTO) {
Integer timeUnit = timeConfigDTO.getTimeUnit();
switch (timeUnit) {
case 1:
return timeConfigDTO.getTimeValue() * 24 * 60;
case 2:
return timeConfigDTO.getTimeValue() * 60;
case 3:
return timeConfigDTO.getTimeValue();
default:
return 0;
}
}