<p>{&quot;@GetMapping&quot;:&quot;&quot;/queryCourseByCoachIDByDate&quot;&quot;,&quot;public&quot;:&quot; 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\n            if (!defaultTimes.isEmpty()) {\n                List<UpdateTime> updateTimes = defaultTimes.stream()\n                        .filter(defaultTime -&gt; defaultTime.getStartReservationTime() != null &amp;&amp; defaultTime.getEndReservationTime() != null)\n                        .map(defaultTime -&gt; {\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                            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                            return updateTime;\n                        })\n                        .collect(Collectors.toList());\n\n                // Batch save the updateTimes\n                boolean b = updateTimeService.saveBatch(updateTimes);\n                if (!b) {\n                    log.info(&quot;新增失败&quot;);\n                    return new Result&lt;&gt;(ResultCode.FAIL);\n                }\n                List<Long> updateTimeIds = updateTimes.stream().map(UpdateTime::getUpdateTimeId).collect(Collectors.toList());\n\n                // Parallel stream to query courseInfos\n                List<CourseInfo> courseInfos = courseInfoService.queryCourseByUpdateTimeIds(updateTimeIds);\n                Map&lt;Long, List<CarUser>&gt; courseInfoMap = courseInfos.parallelStream()\n                        .collect(Collectors.groupingByConcurrent(CourseInfo::getUpdateTimeId,\n                                Collectors.mapping(courseInfo -&gt; carUserService.queryOneCarUserById(courseInfo.getUserId()), Collectors.toList())));\n\n                updateTimeList = updateTimes.stream()\n                        .map(updateTime -&gt; {\n                            UpdateTimeDto updateTimeDto = new UpdateTimeDto();\n                            BeanUtils.copyProperties(updateTime, updateTimeDto);\n                            List<CarUser> carUserList = courseInfoMap.get(updateTime.getUpdateTimeId());\n                            if (carUserList != null) {\n                                updateTimeDto.setCurrentReservation(carUserList.size());// 当前预约人数\n                                updateTimeDto.setCarUserList(carUserList);\n                                if (carUserList.size() == updateTime.getMaxReservation()) {\n                                    updateTimeDto.setCourseStatus(true);// 设置课程状态为已满\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                            return updateTimeDto;\n                        })\n                        .collect(Collectors.toList());\n            }\n        } else {\n            List<Long> updateTimeIds = updateTimeList.stream().map(UpdateTime::getUpdateTimeId).collect(Collectors.toList());\n            // Parallel stream to query courseInfos\n            List<CourseInfo> courseInfos = courseInfoService.queryCourseByUpdateTimeIds(updateTimeIds);\n            Map&lt;Long, List<CarUser>&gt; courseInfoMap = courseInfos.parallelStream()\n                    .collect(Collectors.groupingByConcurrent(CourseInfo::getUpdateTimeId,\n                            Collectors.mapping(courseInfo -&gt; carUserService.queryOneCarUserById(courseInfo.getUserId()), Collectors.toList())));\n\n            updateTimeList = updateTimeList.stream()\n                    .map(updateTime -&gt; {\n                        UpdateTimeDto updateTimeDto = new UpdateTimeDto();\n                        BeanUtils.copyProperties(updateTime, updateTimeDto);\n                        List<CarUser> carUserList = courseInfoMap.get(updateTime.getUpdateTimeId());\n                        if (carUserList != null) {\n                            updateTimeDto.setCurrentReservation(carUserList.size());// 当前预约人数\n                            updateTimeDto.setCarUserList(carUserList);\n                            if (carUserList.size() == updateTime.getMaxReservation()) {\n                                updateTimeDto.setCourseStatus(true);// 设置课程状态为已满\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                        return updateTimeDto;\n                    })\n                    .collect(Collectors.toList());\n        }\n\n        for (UpdateTimeDto updateTimeDto : updateTimeList) {\n            if (updateTimeDto.getIsTimeOut() != null &amp;&amp; updateTimeDto.getIsTimeOut()) {\n                map.put(&quot;isTimeOutAll&quot;);\n                break;\n            }\n        }\n\n        map.put(&quot;isBreakDate&quot;);\n        map.put(&quot;updateTimeList&quot;);\n        log.info(&quot;通过日期查询约课安排成功!&quot;);\n        return new Result&lt;&gt;(ResultCode.SUCCESS, map);\n    }</p>

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

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