批量修改时间段信息 - 有预约学员弹窗提醒,无预约直接修改
批量修改时间段信息 - 有预约学员弹窗提醒,无预约直接修改
该接口用于批量修改时间段信息。
流程说明:
- 权限验证: 验证请求者是否具有修改权限。
- 获取参数: 获取前端传递的要修改的时间段信息,包括
updateTimeId、time、projectType、maxReservation等。 - 查询数据库: 根据
updateTimeId查询对应的UpdateTime对象。 - 判断是否已有预约: 遍历所有待训练课程,判断是否存在已预约的学员。
- 处理通知逻辑:
- 如果存在已预约学员,则将相关信息封装成
NoticeDto对象,并返回给前端,提示用户确认是否修改。 - 如果不存在已预约学员,则直接修改
UpdateTime对象并返回成功信息。
- 如果存在已预约学员,则将相关信息封装成
- 修改数据: 将修改后的
UpdateTime对象批量更新到数据库。 - 返回结果: 返回操作结果,包括成功或失败信息。
代码实现:
@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);
}
}
}
注意:
- 代码中使用了一些简化的命名,如
courseDto0、updateTimeMy等,可以根据实际情况进行修改。 - 实际开发过程中,需要根据具体业务需求进行调整。
- 代码中没有包含具体的数据模型定义,需要根据实际情况进行添加。
- 代码中没有包含具体的数据访问逻辑,需要根据实际情况进行实现。
- 代码中没有包含具体的数据验证逻辑,需要根据实际情况进行添加。
- 代码中没有包含具体的数据处理逻辑,需要根据实际情况进行实现。
- 代码中没有包含具体的数据持久化逻辑,需要根据实际情况进行实现。
- 代码中没有包含具体的数据安全处理逻辑,需要根据实际情况进行添加。
原文地址: https://www.cveoy.top/t/topic/qokb 著作权归作者所有。请勿转载和采集!