批量修改时间段信息 - 有预约学员弹窗提醒,无预约直接修改

该接口用于批量修改时间段信息。

流程说明:

  1. 权限验证: 验证请求者是否具有修改权限。
  2. 获取参数: 获取前端传递的要修改的时间段信息,包括updateTimeIdtimeprojectTypemaxReservation等。
  3. 查询数据库: 根据updateTimeId查询对应的UpdateTime对象。
  4. 判断是否已有预约: 遍历所有待训练课程,判断是否存在已预约的学员。
  5. 处理通知逻辑:
    • 如果存在已预约学员,则将相关信息封装成NoticeDto对象,并返回给前端,提示用户确认是否修改。
    • 如果不存在已预约学员,则直接修改UpdateTime对象并返回成功信息。
  6. 修改数据: 将修改后的UpdateTime对象批量更新到数据库。
  7. 返回结果: 返回操作结果,包括成功或失败信息。

代码实现:

@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> 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())) {
                            courseDtoListByAll.add(courseDto0);
                        }
                    } else if (courseDto0.getCourseDate().after(RcqtUtils.getDay())) {
                        courseDtoListByAll.add(courseDto0);
                    }
                }

                boolean shouldUpdateProjectType = true;
                for (CourseDto courseDto : courseDtoListByAll) {
                    if (courseDto.getDrivingProjectType().equals('科二/科三')) {
                        break;
                    } else if (updateTime.getProjectType().equals('科二/科三')) {
                        break;
                    } else if (!courseDto.getDrivingProjectType().equals(updateTime.getProjectType())) {
                        shouldUpdateProjectType = false;
                        break;
                    }
                }
                if (shouldUpdateProjectType) {
                    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())) {
                            courseDtoListByAll.add(courseDto0);
                        }
                    } else if (courseDto0.getCourseDate().after(RcqtUtils.getDay())) {
                        courseDtoListByAll.add(courseDto0);
                    }
                }

                if (courseDtoListByAll.size() > updateTime.getMaxReservation()) {
                    log.info('当前预约人数大于要修改的最大人数!');
                } else {
                    log.info('直接修改');
                    updateTimeMy.setMaxReservation(updateTime.getMaxReservation());
                }
            }
        }
        updateTimeMyList.add(updateTimeMy);
    }

    if (!courseDtoListByAll.isEmpty()) {
        //处理通知逻辑
        Map<Long, List<CourseDto>> fieldMap = courseDtoListByAll.stream()
                .collect(Collectors.groupingBy(CourseDto::getUpdateTimeId));

        List<NoticeDto> newObjects = fieldMap.entrySet().stream()
                .map(entry -> {
                    Long field = entry.getKey();
                    List<CourseDto> values = entry.getValue();
                    ;

                    CourseDto courseDto = values.get(0);
                    return new NoticeDto(field, courseDto, values);
                })
                .collect(Collectors.toList());


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

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

注意:

  • 代码中使用了一些简化的命名,如courseDto0updateTimeMy等,可以根据实际情况进行修改。
  • 实际开发过程中,需要根据具体业务需求进行调整。
  • 代码中没有包含具体的数据模型定义,需要根据实际情况进行添加。
  • 代码中没有包含具体的数据访问逻辑,需要根据实际情况进行实现。
  • 代码中没有包含具体的数据验证逻辑,需要根据实际情况进行添加。
  • 代码中没有包含具体的数据处理逻辑,需要根据实际情况进行实现。
  • 代码中没有包含具体的数据持久化逻辑,需要根据实际情况进行实现。
  • 代码中没有包含具体的数据安全处理逻辑,需要根据实际情况进行添加。
批量修改时间段信息 - 有预约学员弹窗提醒,无预约直接修改

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

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