<p>// 2.通过日期查询约课安排\n@GetMapping(&quot;/queryCourseByCoachIDByDate&quot;)\npublic Result<Object> queryCourseByCoachIDByDate(Coach coach, String date, HttpServletRequest request) throws ParseException {\n\n    // 权限验证\n    String token = (String) request.getAttribute(&quot;claims_coach&quot;);\n\n    if (token == null || &quot;&quot;.equals(token)) {\n        throw new RuntimeException(&quot;权限不足!&quot;);\n    }\n\n    if (coach.getCoachId() == null) {\n        log.info(&quot;coachId为null&quot;);\n        return new Result&lt;&gt;(ResultCode.FAIL);\n    }\n\n    // 转换前端传递日期格式\n    Date convertedDate = RcqtUtils.getconvertedDate(date);\n\n    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();\n    // 查询日期对应的数据\n    List<UpdateTime> updateTimeList = updateTimeService.queryUpdateTimeByDate(coach.getCoachId(), convertedDate);\n\n    if (CollectionUtils.isEmpty(updateTimeList)) {\n        log.info(&quot;查询当前日期数据为空!&quot;);\n        // 查询教练自己设置的默认时间段\n        List<DefaultTime> defaultTimes = defaultTimeService.queryDefaultTimeByCoachID(coach.getCoachId());\n        List<UpdateTime> updateTimes = new ArrayList&lt;&gt;();// 存放新增的修改时间段\n\n        if (!defaultTimes.isEmpty()) {\n            List<DefaultTime> defaultTimeList = new ArrayList&lt;&gt;();\n            for (DefaultTime defaultTime : defaultTimes) {\n                // 4.新增修改时间段\n                if (defaultTime.getStartReservationTime() != null &amp;&amp; defaultTime.getEndReservationTime() != null) {\n                    UpdateTime updateTime = new UpdateTime();\n                    updateTime.setCoachId(coach.getCoachId());\n                    updateTime.setProjectType(defaultTime.getProjectType());\n                    updateTime.setCourseDate(convertedDate);\n                    updateTime.setStartReservationTime(defaultTime.getStartReservationTime());\n                    updateTime.setEndReservationTime(defaultTime.getEndReservationTime());\n                    updateTime.setMaxReservation(defaultTime.getMaxReservation());\n                    updateTime.setCourseStatus(false);// 人数未满\n                    updateTime.setCurrentReservation(0);// 当前预约人数0\n                    // 5.查询当前日期是周几,默认时间段里的休息日是否包含当前日期\n                    SimpleDateFormat dateFormat = new SimpleDateFormat(&quot;yyyy-MM-dd&quot;);\n                    String currentDate = dateFormat.format(convertedDate);\n                    String week = RcqtUtils.getDayOfWeek(currentDate);// 得到当前日期对应周几\n                    if (!StringUtils.isEmpty(week)) {\n                        updateTime.setIsBreakDate(defaultTime.getRestDay().contains(week));\n                    }\n                    updateTimes.add(updateTime);\n                    defaultTimeList.add(defaultTime);\n                }\n            }\n            // 批量新增修改时间段\n            boolean b = updateTimeService.saveBatch(updateTimes);\n            if (!b) {\n                log.info(&quot;新增失败&quot;);\n                return new Result&lt;&gt;(ResultCode.FAIL);\n            }\n            // 批量查询新增的修改时间段的id\n            List<Long> updateTimeIds = updateTimes.stream().map(UpdateTime::getUpdateTimeId).collect(Collectors.toList());\n\n            // 批量查询约课学员\n            List<CourseInfo> courseInfos = courseInfoService.queryCourseByUpdateTimeIds(updateTimeIds);\n            Map&lt;Long, List<CarUser>&gt; courseInfoMap = new HashMap&lt;&gt;();\n            for (CourseInfo courseInfo : courseInfos) {\n                CarUser carUser = carUserService.queryOneCarUserById(courseInfo.getUserId());\n                if (!courseInfoMap.containsKey(courseInfo.getUpdateTimeId())) {\n                    courseInfoMap.put(courseInfo.getUpdateTimeId(), new ArrayList&lt;&gt;());\n                }\n                courseInfoMap.get(courseInfo.getUpdateTimeId()).add(carUser);\n            }\n\n            for (UpdateTime updateTime : updateTimes) {\n                UpdateTimeDto updateTimeDto = new UpdateTimeDto();\n                BeanUtils.copyProperties(updateTime, updateTimeDto);\n\n                List<CarUser> carUserList = courseInfoMap.get(updateTime.getUpdateTimeId());\n                if (carUserList != null) {\n                    updateTimeDto.setCurrentReservation(carUserList.size());// 当前预约人数\n                    updateTimeDto.setCarUserList(carUserList);\n\n                    // 当前预约人数等于设置最大预约人数\n                    if (carUserList.size() == updateTime.getMaxReservation()) {\n                        updateTimeDto.setCourseStatus(true);// 设置课程状态为已满\n                    }\n                }\n\n                // 判断时间是否过期\n                if (updateTimeDto.getCourseDate().equals(RcqtUtils.getDay()) &amp;&amp; updateTimeDto.getStartReservationTime() != null) {\n                    updateTimeDto.setIsTimeOut(LocalTime.now().isAfter(updateTimeDto.getStartReservationTime().toLocalTime()));\n                }\n\n                updateTimeDtoList.add(updateTimeDto);\n            }\n            map.put(&quot;updateTimeList&quot;, updateTimeDtoList);\n        }\n    } else {\n        List<Long> updateTimeIds = updateTimeList.stream().map(UpdateTime::getUpdateTimeId).collect(Collectors.toList());\n\n        // 批量查询约课学员\n        List<CourseInfo> courseInfos = courseInfoService.queryCourseByUpdateTimeIds(updateTimeIds);\n        Map&lt;Long, List<CarUser>&gt; courseInfoMap = new HashMap&lt;&gt;();\n        for (CourseInfo courseInfo : courseInfos) {\n            CarUser carUser = carUserService.queryOneCarUserById(courseInfo.getUserId());\n            if (!courseInfoMap.containsKey(courseInfo.getUpdateTimeId())) {\n                courseInfoMap.put(courseInfo.getUpdateTimeId(), new ArrayList&lt;&gt;());\n            }\n            courseInfoMap.get(courseInfo.getUpdateTimeId()).add(carUser);\n        }\n\n        for (UpdateTime updateTime : updateTimeList) {\n            UpdateTimeDto updateTimeDto = new UpdateTimeDto();\n            BeanUtils.copyProperties(updateTime, updateTimeDto);\n\n            List<CarUser> carUserList = courseInfoMap.get(updateTime.getUpdateTimeId());\n            if (carUserList != null) {\n                updateTimeDto.setCurrentReservation(carUserList.size());// 当前预约人数\n                updateTimeDto.setCarUserList(carUserList);\n\n                // 当前预约人数等于设置最大预约人数\n                if (carUserList.size() == updateTime.getMaxReservation()) {\n                    updateTimeDto.setCourseStatus(true);// 设置课程状态为已满\n                }\n            }\n\n            // 判断时间是否过期\n            if (updateTimeDto.getCourseDate().equals(RcqtUtils.getDay()) &amp;&amp; updateTimeDto.getStartReservationTime() != null) {\n                updateTimeDto.setIsTimeOut(LocalTime.now().isAfter(updateTimeDto.getStartReservationTime().toLocalTime()));\n            }\n\n            updateTimeDtoList.add(updateTimeDto);\n        }\n        map.put(&quot;updateTimeList&quot;, updateTimeDtoList);\n    }\n\n    for (UpdateTimeDto updateTimeDto : updateTimeDtoList) {\n        if (updateTimeDto.getIsTimeOut() != null &amp;&amp; updateTimeDto.getIsTimeOut()) {\n            map.put(&quot;isTimeOutAll&quot;, true);\n            break;\n        }\n    }\n\n    map.put(&quot;isBreakDate&quot;, updateTimeList.stream().anyMatch(UpdateTime::getIsBreakDate));// 给前端总的休息状态\n\n    log.info(&quot;通过日期查询约课安排成功!&quot;);\n    return new Result&lt;&gt;(ResultCode.SUCCESS, map);\n}\n</p>

原文地址: https://www.cveoy.top/t/topic/p6Ct 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录