//3.修改信息(批量修改)-是否有预约的学员(有:弹窗提醒-修改时间段已约学员,确定需要调整,调整后会短信通知学员、无:直接修改)
    @PostMapping("/updateOneUpdateTimeByIDByNotice")
    public Result<Object> updateOneUpdateTimeByIDByNotice(@RequestBody Map<String, Object> params, HttpServletRequest request) {

        //权限验证
        String token = (String) request.getAttribute("claims_coach");
        if (token == null || "".equals(token)) {
            throw new RuntimeException("权限不足!");
        }

        log.info("updateOneUpdateTimeByID报文:" + params);
        Map<String, Object> map = new HashMap<>();

        //前端传递参数
        //修改时间段id:updateTimeId、要修改的时间段字符串:time、要修改的科目:projectType、要修改的人数:maxReservation
        JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(params));
        JSONArray jsonArray = jsonObject.getJSONArray("updateTime");

        //集合(前端传递的要修改的对象集合)
        List<UpdateTimeDtox> updateTimes = JSONObject.parseArray(jsonArray.toJSONString(), UpdateTimeDtox.class);

        if (updateTimes.isEmpty()) {
            log.error("前端传递集合为空!");
            return new Result<>(ResultCode.FAIL);
        }

        List<UpdateTime> updateTimeMyList = new ArrayList<>();//存放修改的对象
        List<CourseDto> courseDtoListByNow = new ArrayList<>();
        List<CourseDto> courseDtoListByAll = new ArrayList<>();

        //遍历前端发来的要修改信息的对象集合
        for (UpdateTimeDtox updateTime : updateTimes) {
            //在数据库找到对应的对象
            UpdateTime updateTimeMy = updateTimeService.getById(updateTime.getUpdateTimeId());

            if (updateTimeMy != null) {

                //1.修改科目
                //判断前端传递与自身信息是否相等
                if (!updateTime.getProjectType().equals(updateTimeMy.getProjectType())) {
                    log.info("修改科目");
                    //通过修改时间段id和当前时间(08:00)查询(待训练)课程信息
                    List<CourseDto> courseInfos = courseInfoService.queryCourseByUpdateTimeIdByStatus0(updateTime.getUpdateTimeId());
                    //存放待训练的课程
                    for (CourseDto courseDto0 : courseInfos) {
                        if (courseDto0.getCourseDate().equals(RcqtUtils.getDay())) {
                            if (LocalTime.now().isBefore(courseDto0.getStartReservationTime().toLocalTime())) {
                                courseDtoListByNow.add(courseDto0);
                            }
                        } else if (courseDto0.getCourseDate().after(RcqtUtils.getDay())) {
                            courseDtoListByNow.add(courseDto0);
                        }
                    }


                    if (!CollectionUtils.isEmpty(courseDtoListByNow)) {
                        for (CourseDto courseDto : courseDtoListByNow) {
                            CarUser carUser = carUserService.queryOneCarUserById(courseDto.getUserId());
                            courseDto.setCarUser(carUser);
                            if (carUser.getDrivingProjectType().equals("科二/科三")) {
                                updateTimeMy.setProjectType(updateTime.getProjectType());
                            } else if (updateTime.getProjectType().equals("科二/科三")) {
                                updateTimeMy.setProjectType(updateTime.getProjectType());
                            } else if (!carUser.getDrivingProjectType().equals(updateTime.getProjectType())) {
                                if (Objects.equals(carUser.getUserId(), courseDto.getUserId())){
                                    courseDtoListByAll.add(courseDto);
                                }
                            }
                        }

                    } else {
                        log.info("当前无预约学员,直接修改");
                        //当前没有预约的学员
                        updateTimeMy.setProjectType(updateTime.getProjectType());
                    }

                }

                //2.修改最大预约人数
                if (!updateTimeMy.getMaxReservation().equals(updateTime.getMaxReservation())) {
                    log.info("修改最大预约人数");
                    //通过修改时间段id和当前时间(08:00)查询(待训练)课程信息
                    List<CourseDto> courseInfos = courseInfoService.queryCourseByUpdateTimeIdByStatus0(updateTime.getUpdateTimeId());
                    //存放待训练的课程
                    for (CourseDto courseDto0 : courseInfos) {
                        if (courseDto0.getCourseDate().equals(RcqtUtils.getDay())) {
                            if (LocalTime.now().isBefore(courseDto0.getStartReservationTime().toLocalTime())) {
                                courseDtoListByNow.add(courseDto0);
                            }
                        } else if (courseDto0.getCourseDate().after(RcqtUtils.getDay())) {
                            courseDtoListByNow.add(courseDto0);
                        }
                    }

                    List<CarUser> carUserList = new ArrayList<>();
                    if (!CollectionUtils.isEmpty(courseDtoListByNow)) {
                        for (CourseDto courseDto : courseDtoListByNow) {
                            CarUser carUser = carUserService.queryOneCarUserById(courseDto.getUserId());
                            courseDto.setCarUser(carUser);
                            carUserList.add(carUser);
                            if (carUserList.size() > updateTime.getMaxReservation()) {
                                log.info("当前预约人数大于要修改的最大人数!");
                                courseDtoListByAll.add(courseDto);
                            } else {
                                log.info("不需要通知预约学员");
                                updateTimeMy.setMaxReservation(updateTime.getMaxReservation());
                            }

                        }

                    } else {
                        //当前无预约学员
                        log.info("当前无预约学员");
                        updateTimeMy.setMaxReservation(updateTime.getMaxReservation());
                    }
                }

                //3.修改时间段
                Time start = RcqtUtils.getTime(updateTime.getStartReservationTime());//前端时间
                Time end = RcqtUtils.getTime(updateTime.getEndReservationTime());
                if (!start.toLocalTime().equals(updateTimeMy.getStartReservationTime().toLocalTime()) && !end.toLocalTime().equals(updateTimeMy.getEndReservationTime().toLocalTime())) {
                    log.info("修改时间段,开始与结束时间都不相等");
                    //排除前端传递的时间段与数据库里相同
                    if (start.toLocalTime().isAfter(end.toLocalTime())) {
                        log.error("开始时间要大于结束时间!");
                        return new Result<>(ResultCode.TIME_NOT_RIGHT);
                    }

                    //排除数据库中开始时间和结束时间为空的
                    if (updateTimeMy.getStartReservationTime() != null && updateTimeMy.getEndReservationTime() != null) {
                        log.info("数据库时间段不为空!");
                        List<UpdateTime> updateTimeList = updateTimeService.queryUpdateTimeByDate(updateTimeMy.getCoachId(), updateTimeMy.getCourseDate());
                        for (UpdateTime d : updateTimeList) {
                            //当日期是今天时,不能修改时间为过期时间
                            if (d.getCourseDate().equals(RcqtUtils.getDay())) {
                                if (start.toLocalTime().isBefore(LocalTime.now())) {
                                    log.error("该修改时间段为过期时间段!");
                                    return new Result<>(ResultCode.TIME_IS_OUT);
                                }
                            }

                            //排除数据库时间段为空的
                            if (d.getEndReservationTime() != null && d.getStartReservationTime() != null) {
                                //排除当前要修改的时间段,与其他时间段进行比较
                                if (!Objects.equals(updateTimeMy.getUpdateTimeId(), d.getUpdateTimeId())) {
                                    if (start.equals(d.getStartReservationTime()) && end.equals(d.getEndReservationTime())) {
                                        log.error("修改时间段与其他时间段重复!");
                                        return new Result<>(ResultCode.TIME_NOT_RIGHT);
                                    }

                                    //输入开始时间与原有结束时间不相等、输入结束时间与原有开始时间不相等
                                    if ((!start.equals(d.getEndReservationTime())) && (!end.equals(d.getStartReservationTime()))) {
                                        if ((!start.after(d.getEndReservationTime())) && (!end.before(d.getStartReservationTime()))) {
                                            log.error("修改时间段与其他时间段冲突重复!");
                                            return new Result<>(ResultCode.TIME_NOT_RIGHT);
                                        }
                                    }
                                }
                            }
                        }

                        List<CourseDto> courseInfos = courseInfoService.queryCourseByUpdateTimeIdByStatus0(updateTime.getUpdateTimeId());
                        //存放待训练的课程
                        for (CourseDto courseDto0 : courseInfos) {
                            if (courseDto0.getCourseDate().equals(RcqtUtils.getDay())) {
                                if (LocalTime.now().isBefore(courseDto0.getStartReservationTime().toLocalTime())) {
                                    courseDtoListByNow.add(courseDto0);
                                }
                            } else if (courseDto0.getCourseDate().after(RcqtUtils.getDay())) {
                                courseDtoListByNow.add(courseDto0);
                            }
                        }

                        if (!CollectionUtils.isEmpty(courseDtoListByNow)) {
                            for (CourseDto courseDto : courseDtoListByNow) {
                                CarUser carUser = carUserService.queryOneCarUserById(courseDto.getUserId());
                                courseDto.setCarUser(carUser);
                                courseDtoListByAll.add(courseDto);
                            }

                        } else {
                            log.info("当前无预约学员");
                            //当前无预约学员
                            updateTimeMy.setStartReservationTime(start);
                            updateTimeMy.setEndReservationTime(end);
                        }

                    }
                } else if (start.toLocalTime().equals(updateTimeMy.getStartReservationTime().toLocalTime()) && !end.toLocalTime().equals(updateTimeMy.getEndReservationTime().toLocalTime())) {
                    log.info("修改时间段,开始时间相等-结束时间不相等");
                    //排除前端传递的时间段与数据库里相同
                    if (start.toLocalTime().isAfter(end.toLocalTime())) {
                        log.error("开始时间要大于结束时间!");
                        return new Result<>(ResultCode.TIME_NOT_RIGHT);
                    }

                    //排除数据库中开始时间和结束时间为空的
                    if (updateTimeMy.getStartReservationTime() != null && updateTimeMy.getEndReservationTime() != null) {
                        log.info("数据库时间段不为空!");
                        List<UpdateTime> updateTimeList = updateTimeService.queryUpdateTimeByDate(updateTimeMy.getCoachId(), updateTimeMy.getCourseDate());
                        for (UpdateTime d : updateTimeList) {
                            //当日期是今天时,不能修改时间为过期时间
                            if (d.getCourseDate().equals(RcqtUtils.getDay())) {
                                if (start.toLocalTime().isBefore(LocalTime.now())) {
                                    log.error("该修改时间段为过期时间段!");
                                    return new Result<>(ResultCode.TIME_IS_OUT);
                                }
                            }

                            //排除数据库时间段为空的
                            if (d.getEndReservationTime() != null && d.getStartReservationTime() != null) {
                                //排除当前要修改的时间段,与其他时间段进行比较
                                if (!Objects.equals(updateTimeMy.getUpdateTimeId(), d.getUpdateTimeId())) {
                                    if (start.equals(d.getStartReservationTime()) && end.equals(d.getEndReservationTime())) {
                                        log.error("修改时间段与其他时间段重复!");
                                        return new Result<>(ResultCode.TIME_NOT_RIGHT);
                                    }

                                    //输入开始时间与原有结束时间不相等、输入结束时间与原有开始时间不相等
                                    if ((!start.equals(d.getEndReservationTime())) && (!end.equals(d.getStartReservationTime()))) {
                                        if ((!start.after(d.getEndReservationTime())) && (!end.before(d.getStartReservationTime()))) {
                                            log.error("修改时间段与其他时间段冲突重复!");
                                            return new Result<>(ResultCode.TIME_NOT_RIGHT);
                                        }
                                    }
                                }
                            }
                        }

                        List<CourseDto> courseInfos = courseInfoService.queryCourseByUpdateTimeIdByStatus0(updateTime.getUpdateTimeId());

                        for (CourseDto courseDto0 : courseInfos) {
                            if (courseDto0.getCourseDate().equals(RcqtUtils.getDay())) {
                                if (LocalTime.now().isBefore(courseDto0.getStartReservationTime().toLocalTime())) {
                                    courseDtoListByNow.add(courseDto0);
                                }
                            } else if (courseDto0.getCourseDate().after(RcqtUtils.getDay())) {
                                courseDtoListByNow.add(courseDto0);
                            }
                        }

                        if (!CollectionUtils.isEmpty(courseDtoListByNow)) {
                            for (CourseDto courseDto : courseDtoListByNow) {
                                CarUser carUser = carUserService.queryOneCarUserById(courseDto.getUserId());
                                courseDto.setCarUser(carUser);
                                courseDtoListByAll.add(courseDto);
                            }

                        } else {
                            log.info("当前无预约学员");
                            //当前无预约学员
                            updateTimeMy.setStartReservationTime(start);
                            updateTimeMy.setEndReservationTime(end);
                        }

                    }
                } else if (!start.toLocalTime().equals(updateTimeMy.getStartReservationTime().toLocalTime()) && end.toLocalTime().equals(updateTimeMy.getEndReservationTime().toLocalTime())) {
                    log.info("修改时间段,开始时间不相等-结束时间相等");
                    //排除前端传递的时间段与数据库里相同
                    if (start.toLocalTime().isAfter(end.toLocalTime())) {
                        log.error("开始时间要大于结束时间!");
                        return new Result<>(ResultCode.TIME_NOT_RIGHT);
                    }

                    //排除数据库中开始时间和结束时间为空的
                    if (updateTimeMy.getStartReservationTime() != null && updateTimeMy.getEndReservationTime() != null) {
                        log.info("数据库时间段不为空!");
                        List<UpdateTime> updateTimeList = updateTimeService.queryUpdateTimeByDate(updateTimeMy.getCoachId(), updateTimeMy.getCourseDate());
                        for (UpdateTime d : updateTimeList) {
                            //当日期是今天时,不能修改时间为过期时间
                            if (d.getCourseDate().equals(RcqtUtils.getDay())) {
                                if (start.toLocalTime().isBefore(LocalTime.now())) {
                                    log.error("该修改时间段为过期时间段!");
                                    return new Result<>(ResultCode.TIME_IS_OUT);
                                }
                            }

                            //排除数据库时间段为空的
                            if (d.getEndReservationTime() != null && d.getStartReservationTime() != null) {
                                //排除当前要修改的时间段,与其他时间段进行比较
                                if (!Objects.equals(updateTimeMy.getUpdateTimeId(), d.getUpdateTimeId())) {
                                    if (start.equals(d.getStartReservationTime()) && end.equals(d.getEndReservationTime())) {
                                        log.error("修改时间段与其他时间段重复!");
                                        return new Result<>(ResultCode.TIME_NOT_RIGHT);
                                    }

                                    //输入开始时间与原有结束时间不相等、输入结束时间与原有开始时间不相等
                                    if ((!start.equals(d.getEndReservationTime())) && (!end.equals(d.getStartReservationTime()))) {
                                        if ((!start.after(d.getEndReservationTime())) && (!end.before(d.getStartReservationTime()))) {
                                            log.error("修改时间段与其他时间段冲突重复!");
                                            return new Result<>(ResultCode.TIME_NOT_RIGHT);
                                        }
                                    }
                                }
                            }
                        }

                        List<CourseDto> courseInfos = courseInfoService.queryCourseByUpdateTimeIdByStatus0(updateTime.getUpdateTimeId());
                        //存放待训练的课程
                        for (CourseDto courseDto0 : courseInfos) {
                            if (courseDto0.getCourseDate().equals(RcqtUtils.getDay())) {
                                if (LocalTime.now().isBefore(courseDto0.getStartReservationTime().toLocalTime())) {
                                    courseDtoListByNow.add(courseDto0);
                                }
                            } else if (courseDto0.getCourseDate().after(RcqtUtils.getDay())) {
                                courseDtoListByNow.add(courseDto0);
                            }
                        }

                        if (!CollectionUtils.isEmpty(courseDtoListByNow)) {
                            for (CourseDto courseDto : courseDtoListByNow) {
                                CarUser carUser = carUserService.queryOneCarUserById(courseDto.getUserId());
                                courseDto.setCarUser(carUser);
                                courseDtoListByAll.add(courseDto);
                            }

                        } else {
                            log.info("当前无预约学员");
                            //当前无预约学员
                            updateTimeMy.setStartReservationTime(start);
                            updateTimeMy.setEndReservationTime(end);
                        }
                    }
                }
            }
            updateTimeMyList.add(updateTimeMy);
        }

        if (!courseDtoListByAll.isEmpty()) {
            Map<Long, List<CourseDto>> fieldMap = new HashMap<>();
            courseDtoListByAll.forEach(obj -> {
                Long field = obj.getUpdateTimeId();
                fieldMap.computeIfAbsent(field, k -> new ArrayList<>()).add(obj);
            });

            List<NoticeDto> newObjects = new ArrayList<>();
            fieldMap.entrySet().forEach(entry -> {
                Long field = entry.getKey();
                List<CourseDto> values = entry.getValue();
                List<CarUser> carUserList = values.stream().map(CourseDto::getCarUser).collect(Collectors.toList());

                CourseDto courseDto = values.get(0);
                NoticeDto newObject = new NoticeDto(field, courseDto, carUserList, values);
                newObjects.add(newObject);
            });

            log.info("通知");
            map.put("courseInfos", newObjects);
            return new Result<>(ResultCode.NOTICE_COACH, map);
        }

        boolean b = updateTimeService.updateBatchById(updateTimeMyList);

        if (b) {
            log.info("修改时间段信息成功!");
            return new Result<>(ResultCode.SUCCESS);
        } else {
            log.error("修改时间段信息失败!");
            return new Result<>(ResultCode.FAIL);
        }

    }

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

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