java - 检查请求日期是否在特定时间内的简单方法。使用 for 循环和 if 语句

标签 java list spring-mvc for-loop if-statement

我有一个正在创建轮类的项目。用户可以请求休息日,因此当我创建轮类时,我想检查该用户是否请求了该天的休息日。我已经使用 for 和 if 语句来执行此操作,但它看起来很困惑并且并不总是有效。有没有更简单的方法来做到这一点?

这是我创建类次的代码。

Shift createShift(@RequestBody ShiftParams params)
    {

            User u = userService.findByFirstName(params.text);
        Set<User> userSets = new HashSet<>();
        userSets.add(u);

        List<Request> req = u.getRequests();

        if(req != null && req.isEmpty()) //This creates the shift if 
                                                   the user has no requests
        {
            Shift shift = new Shift();
            shift.setStart(params.start);
            shift.setEnd(params.end);
            shift.setUsersShifts(userSets);
            shiftService.save(shift);   
        }
        else 
        {

        for(Iterator<Request> it= req.iterator(); it.hasNext();)
        {
              Request empReq = it.next();

                 if(empReq.getStatus() == Status.Accepted) 
                {
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //for string
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); //for localdate

        //Request start date in LocalDate
        Date d = empReq.getDate();
        String rDateStart = sdf.format(d);
        LocalDate reqStartDate = LocalDate.parse(rDateStart, formatter).minusDays(1);
        System.out.println("Req start date is " + reqStartDate);

        //Request end date in LocalDate
        int numDays = empReq.getNumDays();
        LocalDate endDateReq = reqStartDate.plusDays(numDays).plusDays(1);
        System.out.println("Request finish date is" + endDateReq);

        //Shift start date in LocalDate
        String shiftDate = (params.start).format(formatter);
        LocalDate formatDateTime = LocalDate.parse(shiftDate, formatter);
    System.out.println("Shift date in date format " + formatDateTime); 


        if(formatDateTime.isAfter(reqStartDate) && 
          formatDateTime.isBefore(endDateReq)) //checks is the user has requested day off
{
    System.out.println("The employee has requested that day off");
} else { // if they havent requested that day off the shift is created

        Shift shift = new Shift();
        shift.setStart(params.start);
        shift.setEnd(params.end);
        shift.setUsersShifts(userSets);
        shiftService.save(shift);

    }

      }

  }
return null;

    }

最佳答案

假设:params.start是java.util.Date类型

   public Shift createShift(final @RequestBody ShiftParams params) {

        User u = userService.findByFirstName(params.text);

        Set<User> userSets = Collections.singleton(u);

        List<Request> requests = u.getRequests();

        if ( requests == null || requests.isEmpty() || hasNoDayOffOnShiftDate(requests, params)) //This creates the shift if the user has no requests
        {
            Shift shift = buildShift(params, userSets);
            shiftService.save(shift);
            return shift;
        } 

        return null;
    }

    private boolean hasNoDayOffOnShiftDate(List<Request> requests, ShiftParams params) {
        final LocalDate shiftStartDate = convertToLocalDate(params.start);

        Optional<Request> request = requests
                .stream()
                .filter(req -> req.getStatus() == Status.Accepted)
                .filter(req -> isDayOffOnShiftDate(req, shiftStartDate))
                .findAny();
        return request.isEmpty();
    }

    private boolean isDayOffOnShiftDate(Request empReq, LocalDate shiftStartDate) {
        //Request start date in LocalDate
        LocalDate reqStartDate = convertToLocalDate(empReq.getDate()).minusDays(1);
        System.out.println("Req start date is " + reqStartDate);

        //Request end date in LocalDate
        int numDays = empReq.getNumDays();
        LocalDate endDateReq = reqStartDate.plusDays(numDays).plusDays(1);
        System.out.println("Request finish date is" + endDateReq);

        if (shiftStartDate.isAfter(reqStartDate) &&
                shiftStartDate.isBefore(endDateReq)) //checks is the user has requested day off
        {
            System.out.println("The employee has requested that day off");
            return true;
        }else {
            return false;
        }
    }

    private Shift buildShift(@RequestBody ShiftParams params, Set<User> userSets) {
        Shift shift = new Shift();
        shift.setStart(params.start);
        shift.setEnd(params.end);
        shift.setUsersShifts(userSets);
        return shift;
    }

    public LocalDate convertToLocalDate(Date dateToConvert) {
        return LocalDate.ofInstant(
                dateToConvert.toInstant(), ZoneId.systemDefault());
    }

关于java - 检查请求日期是否在特定时间内的简单方法。使用 for 循环和 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56004821/

相关文章:

mysql - CloudFoundry MySQL Java 配置

java - 读入十个数字并显示不同数字的数量以及以一个空格分隔的不同数字的程序

java - 创建一个像环面一样工作的数组

Python:找到最小元素的最后一个索引?

java - 将 session 工厂从一项服务传递到另一项服务

使用 @RequestHeader 的 Spring : How do I know where a query comes from? (值 = "User-Agent")

java - 如何处理自填充列表的超时异常?

javascript - org.openqa.selenium.WebDriverException : unknown error: Runtime. 评估抛出异常:SyntaxError:缺少)在参数列表之后

python - 如何按特定顺序对字符串列表进行排序?

c - 列表,添加到最后,C 编程代码