计算截止时间

86 阅读1分钟
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();
//                long min = convertToMinutes(timeConfigDTO);
                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;
        }
    }