Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)
🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍
文章目录
1.0 项目介绍
2.0 用户登录功能
3.0 用户管理功能
4.0 影院管理功能
5.0 电影管理功能
6.0 影厅管理功能
7.0 电影排片管理功能
8.0 用户评论管理功能
9.0 用户购票功能
10.0 用户购票记录管理
1.0 项目介绍
开发工具:IDEA、VScode
服务器:Tomcat, JDK 17
项目构建:maven
数据库:mysql 5.7
系统用户前台和管理后台两部分,项目采用前后端分离
前端技术:vue +elementUI
服务端技术:springboot+mybatis+redis+mysql
项目功能描述:
1)前台功能:
1.登录、注册、退出系统、首页、搜索
2.电影:正在热映、即将热映、经典影片
3.影院:选座订票、下单支付
4.榜单:TOP100榜
5.个人中心:我的订单、基本信息
2)后台功能:
1.登录、退出系统、首页
2.影院管理
(1)影院信息管理:添加、修改、删除、查询等功能
(2)影院区域管理:添加、修改、删除等功能
3.电影管理
(1)电影信息管理:添加、修改、删除、查询、演员和影片分类等功能
(2)电影评论管理:添加、删除等操作
(5)电影类别管理:添加、修改、删除等功能
4.影厅管理
(1)影厅信息管理:添加、修改、删除、查询、安排座位等功能
(2)影厅类别管理:添加、修改、删除等功能
5.场次管理
(1)场次信息管理:添加、修改、删除、查询、查看座位等功能
6.用户管理
(1)用户信息管理:添加、修改、删除、查询等功能
(2)订单信息管理:查询、删除等功能
(3)用户爱好管理:添加、修改、删除等功能
7.权限管理
(1)角色信息管理:添加、修改、删除、分配权限等功能
(2)资源信息管理:添加、修改、删除等功能
注意:不一定非要完全符合开发环境,有稍微的差别也是可以开发的。
2.0 用户登录功能
实现了登录校验,还有用户注册功能:
用到了 Spring Security 框架来实现登录、校验、验证等功能。
相关的部分源码:
@RestController public class SysLoginController {@Autowiredprivate SysLoginService loginService;@Autowiredprivate ISysMenuService menuService;@Autowiredprivate SysPermissionService permissionService;/*** 登录方法* * @param loginBody 登录信息* @return 结果*/@PostMapping("/login")public AjaxResult login(@RequestBody LoginBody loginBody){AjaxResult ajax = AjaxResult.success();// 生成令牌String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),loginBody.getUuid());ajax.put(Constants.TOKEN, token);return ajax;}/*** 获取用户信息* * @return 用户信息*/@GetMapping("getInfo")public AjaxResult getInfo(){SysUser user = SecurityUtils.getLoginUser().getUser();// 角色集合Set<String> roles = permissionService.getRolePermission(user);// 权限集合Set<String> permissions = permissionService.getMenuPermission(user);AjaxResult ajax = AjaxResult.success();ajax.put("user", user);ajax.put("roles", roles);ajax.put("permissions", permissions);return ajax;}/*** 获取路由信息* * @return 路由信息*/@GetMapping("getRouters")public AjaxResult getRouters(){Long userId = SecurityUtils.getUserId();List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);return AjaxResult.success(menuService.buildMenus(menus));} }
public String login(String username, String password, String code, String uuid){// 验证码校验validateCaptcha(username, code, uuid);// 登录前置校验loginPreCheck(username, password);// 用户验证Authentication authentication = null;try{UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);AuthenticationContextHolder.setContext(authenticationToken);// 该方法会去调用UserDetailsServiceImpl.loadUserByUsernameauthentication = authenticationManager.authenticate(authenticationToken);}catch (Exception e){if (e instanceof BadCredentialsException){AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));throw new UserPasswordNotMatchException();}else{AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));throw new ServiceException(e.getMessage());}}finally{AuthenticationContextHolder.clearContext();}AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));LoginUser loginUser = (LoginUser) authentication.getPrincipal();recordLoginInfo(loginUser.getUserId());// 生成tokenreturn tokenService.createToken(loginUser);}
3.0 用户管理功能
上传图片使用了第三方接口:x-File-Storage 框架。
相关的部分源码:
1)后端代码:
@RestController @RequestMapping("/manage/user") public class UserController extends BaseController {@Autowiredprivate IUserService userService;@Autowiredprivate SysUserServiceImpl sysUserService;/*** 查询用户信息列表*//*@PreAuthorize("@ss.hasPermi('manage:user:list')")*/@GetMapping("/list")public TableDataInfo list(User user){List<User> list = userService.selectUserList(user);TableDataInfo rspData = new TableDataInfo();rspData.setCode(HttpStatus.SUCCESS);rspData.setMsg("查询成功");rspData.setRows(list);rspData.setTotal(new PageInfo(list).getTotal());return rspData;}/*** 导出用户信息列表*/@PreAuthorize("@ss.hasPermi('manage:user:export')")@Log(title = "用户信息", businessType = BusinessType.EXPORT)@PostMapping("/export")public void export(HttpServletResponse response, User user){List<User> list = userService.selectUserList(user);ExcelUtil<User> util = new ExcelUtil<User>(User.class);util.exportExcel(response, list, "用户信息数据");}/*** 获取用户信息详细信息*/@PreAuthorize("@ss.hasPermi('manage:user:query')")@GetMapping(value = "/{userId}")public AjaxResult getInfo(@PathVariable("userId") Long userId){return success(userService.selectUserByUserId(userId));}/*** 新增用户信息*/@PreAuthorize("@ss.hasPermi('manage:user:add')")@Log(title = "用户信息", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody User user){return toAjax(userService.insertUser(user));}/*** 修改用户信息*/@PreAuthorize("@ss.hasPermi('manage:user:edit')")@Log(title = "用户信息", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody User user){return toAjax(userService.updateUser(user));}/*** 删除用户信息*/@PreAuthorize("@ss.hasPermi('manage:user:remove')")@Log(title = "用户信息", businessType = BusinessType.DELETE)@DeleteMapping("/{userIds}")public AjaxResult remove(@PathVariable Long[] userIds){return toAjax(userService.deleteUserByUserIds(userIds));}/*** 查询全部用户信息列表*//*@PreAuthorize("@ss.hasPermi('manage:user:list')")*/@GetMapping("/allUserList")public TableDataInfo allUserList(User user){List<User> list = userService.addUserList(user);return getDataTable(list);} }
2)前端代码:
<template><div class="app-container"><el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"><el-form-item label="用户名" prop="userName"><el-inputv-model="queryParams.userName"placeholder="请输入用户名"clearable@keyup.enter="handleQuery"/></el-form-item><el-form-item label="手机号码" prop="phoneNumber"><el-inputv-model="queryParams.phoneNumber"placeholder="请输入手机号码"clearable@keyup.enter="handleQuery"/></el-form-item><el-form-item><el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh" @click="resetQuery">重置</el-button></el-form-item></el-form><el-row :gutter="10" class="mb8"><el-col :span="1.5"><el-buttontype="primary"plainicon="Plus"@click="handleAdd"v-hasPermi="['manage:user:add']">新增</el-button></el-col><el-col :span="1.5"><el-buttontype="success"plainicon="Edit":disabled="single"@click="handleUpdate"v-hasPermi="['manage:user:edit']">修改</el-button></el-col><el-col :span="1.5"><el-buttontype="danger"plainicon="Delete":disabled="multiple"@click="handleDelete"v-hasPermi="['manage:user:remove']">删除</el-button></el-col><el-col :span="1.5"><el-buttontype="warning"plainicon="Download"@click="handleExport"v-hasPermi="['manage:user:export']">导出</el-button></el-col><right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar></el-row><el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"><el-table-column type="selection" width="55" align="center" /><el-table-column label="用户ID" width="80" align="center" prop="userId" /><el-table-column label="用户名" width="100" align="center" prop="userName" /><el-table-column label="头像" align="center" prop="avatar" ><template #default="scope"><image-preview :src="scope.row.avatar" class="avatar-image" width="20" height="20" /></template></el-table-column><el-table-column label="性别" align="center" prop="gender"><template #default="scope"><dict-tag :options="sys_user_sex" :value="scope.row.gender"/></template></el-table-column><el-table-column label="手机号码" align="center" prop="phoneNumber" /><el-table-column label="个人签名" align="center" prop="signature" /><el-table-column label="操作" align="center" class-name="small-padding fixed-width"><template #default="scope"><el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:user:edit']">修改</el-button><el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:user:remove']">删除</el-button></template></el-table-column></el-table><paginationv-show="total>0":total="total"v-model:page="queryParams.pageNum"v-model:limit="queryParams.pageSize"@pagination="getList"/><!-- 添加或修改用户信息对话框 --><el-dialog :title="title" v-model="open" width="500px" append-to-body><el-form ref="userRef" :model="form" :rules="rules" label-width="80px"><el-form-item label="用户名" prop="userName"><el-input v-model="form.userName" placeholder="请输入用户名" /></el-form-item><el-form-item label="头像" prop="avatar"><image-upload v-model="form.avatar"/></el-form-item><el-form-item label="手机" prop="phoneNumber"><el-input v-model="form.phoneNumber" placeholder="请输入手机号码" /></el-form-item><el-form-item label="密码" prop="password"><el-input v-model="form.password" type="password" placeholder="请输入用户密码" /></el-form-item><el-form-item label="性别" prop="gender"><el-select v-model="form.gender" placeholder="请选择性别"><el-optionv-for="dict in sys_user_sex":key="dict.value":label="dict.label":value="parseInt(dict.value)"></el-option></el-select></el-form-item><el-form-item label="出生日期" prop="birthDate"><el-date-picker clearablev-model="form.birthDate"type="date"value-format="YYYY-MM-DD"placeholder="请选择出生日期"></el-date-picker></el-form-item><el-form-item label="个人签名" prop="signature"><el-input v-model="form.signature" type="textarea" placeholder="请输入内容" /></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button type="primary" @click="submitForm">确 定</el-button><el-button @click="cancel">取 消</el-button></div></template></el-dialog></div> </template>
4.0 影院管理功能
相关的部分源码:
1)后端代码:
@RestController @RequestMapping("/manage/cinema") public class CinemaController extends BaseController {@Autowiredprivate ICinemaService cinemaService;/*** 查询影院信息列表*/@PreAuthorize("@ss.hasPermi('manage:cinema:list')")@GetMapping("/list")public TableDataInfo list(Cinema cinema){startPage();List<Cinema> list = cinemaService.selectCinemaList(cinema);return getDataTable(list);}/*** 导出影院信息列表*/@PreAuthorize("@ss.hasPermi('manage:cinema:export')")@Log(title = "影院信息", businessType = BusinessType.EXPORT)@PostMapping("/export")public void export(HttpServletResponse response, Cinema cinema){List<Cinema> list = cinemaService.selectCinemaList(cinema);ExcelUtil<Cinema> util = new ExcelUtil<Cinema>(Cinema.class);util.exportExcel(response, list, "影院信息数据");}/*** 获取影院信息详细信息*/@PreAuthorize("@ss.hasPermi('manage:cinema:query')")@GetMapping(value = "/{cinemaId}")public AjaxResult getInfo(@PathVariable("cinemaId") Long cinemaId){return success(cinemaService.selectCinemaByCinemaId(cinemaId));}/*** 新增影院信息*/@PreAuthorize("@ss.hasPermi('manage:cinema:add')")@Log(title = "影院信息", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody Cinema cinema){return toAjax(cinemaService.insertCinema(cinema));}/*** 修改影院信息*/@PreAuthorize("@ss.hasPermi('manage:cinema:edit')")@Log(title = "影院信息", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody Cinema cinema){return toAjax(cinemaService.updateCinema(cinema));}/*** 删除影院信息*/@PreAuthorize("@ss.hasPermi('manage:cinema:remove')")@Log(title = "影院信息", businessType = BusinessType.DELETE)@DeleteMapping("/{cinemaIds}")public AjaxResult remove(@PathVariable Long[] cinemaIds){return toAjax(cinemaService.deleteCinemaByCinemaIds(cinemaIds));} }
2)前端代码:
<template><div class="app-container"><el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"><el-form-item label="影院名" prop="cinemaName"><el-inputv-model="queryParams.cinemaName"placeholder="请输入影院名"clearable@keyup.enter="handleQuery"/></el-form-item><el-form-item label="详细地址" prop="address"><el-inputv-model="queryParams.address"placeholder="请输入详细地址"clearable@keyup.enter="handleQuery"/></el-form-item><el-form-item label="营业状态" prop="operatingStatus"><el-select v-model="queryParams.operatingStatus" placeholder="请选择营业状态" clearable><el-optionv-for="dict in operating_status":key="dict.value":label="dict.label":value="dict.value"/></el-select></el-form-item><el-form-item><el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button><el-button icon="Refresh" @click="resetQuery">重置</el-button></el-form-item></el-form><el-row :gutter="10" class="mb8"><el-col :span="1.5"><el-buttontype="primary"plainicon="Plus"@click="handleAdd"v-hasPermi="['manage:cinema:add']">新增</el-button></el-col><el-col :span="1.5"><el-buttontype="success"plainicon="Edit":disabled="single"@click="handleUpdate"v-hasPermi="['manage:cinema:edit']">修改</el-button></el-col><el-col :span="1.5"><el-buttontype="danger"plainicon="Delete":disabled="multiple"@click="handleDelete"v-hasPermi="['manage:cinema:remove']">删除</el-button></el-col><el-col :span="1.5"><el-buttontype="warning"plainicon="Download"@click="handleExport"v-hasPermi="['manage:cinema:export']">导出</el-button></el-col><right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar></el-row><el-table v-loading="loading" :data="cinemaList" @selection-change="handleSelectionChange"><el-table-column type="selection" width="55" align="center" /><el-table-column label="序号ID" align="center" type="index" width="80"/><el-table-column label="影院名" align="center" prop="cinemaName" /><el-table-column label="联系电话" align="center" prop="contactNumber" /><el-table-column label="详细地址" align="left" prop="address" show-overflow-tooltip="true"/><el-table-column label="营业状态" align="center" prop="operatingStatus"><template #default="scope"><dict-tag :options="operating_status" :value="scope.row.operatingStatus"/></template></el-table-column><el-table-column label="更新时间" align="center" prop="updateTime" width="180"><template #default="scope"><span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {i}:{h}:{m}') }}</span></template></el-table-column><el-table-column label="操作" align="center" class-name="small-padding fixed-width"><template #default="scope"><el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:cinema:edit']">修改</el-button><el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:cinema:remove']">删除</el-button></template></el-table-column></el-table><paginationv-show="total>0":total="total"v-model:page="queryParams.pageNum"v-model:limit="queryParams.pageSize"@pagination="getList"/><!-- 添加或修改影院信息对话框 --><el-dialog :title="title" v-model="open" width="500px" append-to-body><el-form ref="cinemaRef" :model="form" :rules="rules" label-width="80px"><el-form-item label="影院名" prop="cinemaName"><el-input v-model="form.cinemaName" placeholder="请输入影院名" /></el-form-item><el-form-item label="联系电话" prop="contactNumber"><el-input v-model="form.contactNumber" placeholder="请输入联系电话" /></el-form-item><el-form-item label="详细地址" prop="address"><el-input v-model="form.address" placeholder="请输入详细地址" /></el-form-item><el-form-item label="营业状态" prop="operatingStatus"><el-select v-model="form.operatingStatus" placeholder="请选择营业状态"><el-optionv-for="dict in operating_status":key="dict.value":label="dict.label":value="parseInt(dict.value)"></el-option></el-select></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button type="primary" @click="submitForm">确 定</el-button><el-button @click="cancel">取 消</el-button></div></template></el-dialog></div> </template>
5.0 电影管理功能
相关部分源码:
@Autowiredprivate IFilmService filmService;/*** 查询电影信息列表*/@PreAuthorize("@ss.hasPermi('manage:film:list')")@GetMapping("/list")public TableDataInfo list(Film film){startPage();List<Film> list = filmService.selectFilmList(film);return getDataTable(list);}/*** 导出电影信息列表*/@PreAuthorize("@ss.hasPermi('manage:film:export')")@Log(title = "电影信息", businessType = BusinessType.EXPORT)@PostMapping("/export")public void export(HttpServletResponse response, Film film){List<Film> list = filmService.selectFilmList(film);ExcelUtil<Film> util = new ExcelUtil<Film>(Film.class);util.exportExcel(response, list, "电影信息数据");}
6.0 影厅管理功能
相关源码:
/*** 获取影厅信息详细信息*/@PreAuthorize("@ss.hasPermi('manage:hall:query')")@GetMapping(value = "/{hallId}")public AjaxResult getInfo(@PathVariable("hallId") Long hallId){return success(hallService.selectHallByHallId(hallId));}/*** 新增影厅信息*/@PreAuthorize("@ss.hasPermi('manage:hall:add')")@Log(title = "影厅信息", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody Hall hall){return toAjax(hallService.insertHall(hall));}/*** 修改影厅信息*/@PreAuthorize("@ss.hasPermi('manage:hall:edit')")@Log(title = "影厅信息", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody Hall hall){return toAjax(hallService.updateHall(hall));}
7.0 电影排片管理功能
相关源码:
/*** 获取电影排片详细信息*/@PreAuthorize("@ss.hasPermi('manage:schedule:query')")@GetMapping(value = "/{scheduleId}")public AjaxResult getInfo(@PathVariable("scheduleId") Long scheduleId){return success(scheduleService.selectScheduleByScheduleId(scheduleId));}/*** 新增电影排片*/@PreAuthorize("@ss.hasPermi('manage:schedule:add')")@Log(title = "电影排片", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody Schedule schedule){return toAjax(scheduleService.insertSchedule(schedule));}/*** 修改电影排片*/@PreAuthorize("@ss.hasPermi('manage:schedule:edit')")@Log(title = "电影排片", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody Schedule schedule){return toAjax(scheduleService.updateSchedule(schedule));}
8.0 用户评论管理功能
相关源码:
/*** 获取用户评价详细信息*/@PreAuthorize("@ss.hasPermi('manage:review:query')")@GetMapping(value = "/{reviewId}")public AjaxResult getInfo(@PathVariable("reviewId") Long reviewId){return success(reviewService.selectReviewByReviewId(reviewId));}/*** 新增用户评价*/@PreAuthorize("@ss.hasPermi('manage:review:add')")@Log(title = "用户评价", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody Review review){return toAjax(reviewService.insertReview(review));}/*** 修改用户评价*/@PreAuthorize("@ss.hasPermi('manage:review:edit')")@Log(title = "用户评价", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody Review review){return toAjax(reviewService.updateReview(review));}
9.0 用户购票功能
相关源码:
1)后端代码:
/*** 获取购票数据详细信息*/@PreAuthorize("@ss.hasPermi('manage:byTicket:query')")@GetMapping(value = "/{ticketId}")public AjaxResult getInfo(@PathVariable("ticketId") Long ticketId){return success(byTicketService.selectByTicketByTicketId(ticketId));}/*** 新增购票数据*/@PreAuthorize("@ss.hasPermi('manage:byTicket:add')")@Log(title = "购票数据", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody ByTicket byTicket){if (byTicket.getUserId() == null){byTicket.setUserId(getUserId());}return toAjax(byTicketService.insertByTicket(byTicket));}/*** 修改购票数据*/@PreAuthorize("@ss.hasPermi('manage:byTicket:edit')")@Log(title = "购票数据", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody ByTicket byTicket){return toAjax(byTicketService.updateByTicket(byTicket));}
2)前端代码:
<template><div class="app-container background-image"><div class="movie-posters"><div v-for="movie in filmList" :key="movie.filmId" class="movie-poster" @click="handlePosterClick(movie.filmId)"><img :src="movie.posterImage" :alt="movie.filmName" /><div class="movie-title">{{ movie.filmName }}</div><div class="movie-info">主演:{{ movie.actors }}</div></div></div><el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"><!-- 现有的表单内容 --></el-form><!-- 添加或修改购票数据对话框 --><el-dialog :title="title" v-model="open" width="500px" append-to-body><el-form ref="byTicketRef" :model="form" :rules="rules" label-width="80px"><!-- 现有的表单内容 --><el-form-item label="电影" prop="filmId"><el-select v-model="form.filmId" placeholder="请选择电影" disabled><el-optionv-for="item in filmList":key="item.filmId":value="item.filmId":label="item.filmName"/></el-select></el-form-item><el-form-item label="影院" prop="cinemaId"><el-selectv-model="form.cinemaId" placeholder="请选择影院"><el-optionv-for="item in cinemaList":key="item.cinemaId":value="item.cinemaId":label="item.cinemaName"/></el-select></el-form-item><el-form-item label="影厅" prop="hallId"><el-select v-model="form.hallId" placeholder="请选择影厅"><el-optionv-for="item in hallList":key="item.hallId":value="item.hallId":label="item.hallName"/></el-select></el-form-item><el-form-item label="座位号" prop="seatNumber"><el-input-number min="1" max="20" v-model="myRow" placeholder="行排" /> <el-input-number min="1" max="20" v-model="myColumn" placeholder="竖排" /></el-form-item><el-form-item label="票数" prop="numberOfTickets"><el-input-number :min="1" :max="100" v-model="form.numberOfTickets" placeholder="输入票数" /></el-form-item><el-form-item label="预约时间" prop="purchaseTime"><el-date-picker clearablev-model="form.purchaseTime"type="date"value-format="YYYY-MM-DD"placeholder="请选择购买时间"></el-date-picker></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button type="primary" @click="submitForm">确 定</el-button><el-button @click="cancel">取 消</el-button></div></template></el-dialog></div> </template>
10.0 用户购票记录管理
相关部分代码:
//根据电影ID查询电影排片列表获取对应的电影院@GetMapping("/cinemaList/{filmId}")@PreAuthorize("@ss.hasPermi('manage:byTicket:list')")public AjaxResult cinemaList(@PathVariable("filmId") Long filmId){return success(byTicketService.cinemaSelectScheduleListByFilmId(filmId));}//根据电影ID查询电影排片列表获取对应的影厅@GetMapping("/hallList/{filmId}")@PreAuthorize("@ss.hasPermi('manage:byTicket:list')")public AjaxResult hallList(@PathVariable("filmId") Long filmId){return success(byTicketService.hallSelectScheduleListByFilmId(filmId));}
若需要项目完整源码,可以在 CSDN 私信给我,我每天都有查看消息的,感谢大家支持,希望可以帮助到大家!
相关文章:

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 项目介绍 2.0 用户登录功能 3.0 用户管理功能 4.0 影院管理功能 5.0 电影管理功能 6.0 影厅管理功能 7.0 电影排片管理功能 8.0 用户评论管理功能 9.0 用户购票功…...

Linux(网络协议和管理)
后面也会持续更新,学到新东西会在其中补充。 建议按顺序食用,欢迎批评或者交流! 缺什么东西欢迎评论!我都会及时修改的! 在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频 王晓春老师的个人空间…...
C++ 入门第 20 天:STL 容器之无序集合与无序多重集合
往期回顾: C 入门17:STL 容器之映射(map)与多重映射(multimap)_-CSDN博客 C 入门18:STL 容器之栈(stack)与队列(queue)-CSDN博客 C 入门19&#x…...

devops-部署Harbor实现私有Docker镜像仓库
文章目录 概述下载配置安装安装后生成的文件使用和维护Harbor参考资料 概述 Harbor是一个开源注册中心,它使用策略和基于角色的访问控制来保护工件,确保镜像被扫描并且没有漏洞,并将镜像签名为可信的。Harbor是CNCF的一个毕业项目࿰…...

rebase ‘A‘ onto ‘master‘ 和 merge ‘master‘ into ‘A‘有什么区别
在Git版本控制系统中,rebase 和 merge 是两种不同的操作,用于合并分支。rebase A onto master 和 merge master into A 虽然最终目的都是将两个分支的更改合并在一起,但它们在处理方式和结果上有所不同。 rebase ‘A’ onto ‘master’ 含义…...

Vulhub:Jackson[漏洞复现]
CVE-2017-7525(Jackson反序列化) 启动漏洞环境 docker-compose up -d 阅读vulhub给出的漏洞文档 cat README.zh-cn.md # Jackson-databind 反序列化漏洞(CVE-2017-7525) Jackson-databind 支持 [Polymorphic Deserialization](https://github.com/Fas…...

strongswan构建测试环境
make-testing脚本文件负责构建strongswan的虚拟化测试系统。位于目录strongswan-5.9.14/testing/,需要以管理员身份运行make-testing。生成测试用到的虚拟客户机镜像,KVM虚拟机和虚拟网络的配置文件位于目录:config/kvm。 ~/strongswan-5.9.14/testing$…...
前端:金额高精度处理
Decimal 是什么 想必大家在用js 处理 数字的 加减乘除的时候,或许都有遇到过 精度不够 的问题,还有那些经典的面试题 0.20.1 ! 0.3, 至于原因,那就是 js 计算底层用的是 IEEE 754 ,精度上有限制, 那么Deci…...

面试题整理3----nc命令的常见用法
面试题整理3----nc命令的常见用法 1. NC是什么2. NC的常用参数2.1 开启指定端口TCP监听(-l小写的L)2.2 测试端口是否能访问(-v)2.3 开启指定端口UDP监听(-u)2.4 端口扫描(-z)2.5 指定超时时间(-w)2.6 指定本地端口号连接(-p)2.7 指定的命令(-e) 1. NC是什么 nc(Net…...

Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】
竣工测量是建筑项目竣工阶段的一个至关重要的环节,它为建筑工程的质量验收和成果核查提供了核心的参考依据。传统的竣工测量方法,如全站仪测量,主要依赖于现场人工操作,存在一些明显的局限性,例如作业时间长、工作量大…...

IntelliJ IDEA 使用技巧与插件推荐
目录 常用使用技巧 1. 使用快捷键提升开发效率 2. 多光标编辑 3. 代码自动补全 4. 使用 Find Action 快速执行操作 5. 集成版本控制系统(VCS) 6. 快速查看代码文档 推荐插件 1. Lombok Plugin 2. Rainbow Brackets 3. Key Promoter X 4. Chec…...
Oracle 技术精选学习
Oracle 技术犹如一座闪耀着无尽光芒的灯塔,为众多 IT 从业者和技术爱好者照亮了前行的道路。无论是数据库管理、企业应用开发还是数据分析,Oracle 都以其强大、稳定和广泛的应用而占据着行业的重要地位。学习 Oracle 技术,更是能为个人带来诸…...

sqlilabs第三十关到第三十五关靶场攻略
第三十关 第三十关和二十九关差不多,将单引号换成双引号 查询表名,字段名,数据 ?id1&id-2" union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase()-- ?id1&id-2" …...

windows免登录linux
windows 生成秘钥文件 ssh-keygen -t rsa 将公钥传送到服务器 scp C:\Users\xx/.ssh/id_rsa.pub xxxx:/home/ruoyi/id_rsa.pub linux 使用ssh-copy-id -i ~/.ssh/id_rsa.pub userhost 如果禁用root登录,先开启 vim /etc/ssh/sshd_config PermitRootLogin yes …...

matlab绘图时设置左、右坐标轴为不同颜色
目录 一、需求描述 二、实现方法 一、需求描述 当图中存在两条曲线,需要对两条曲线进行分别描述时,应设置左、右坐标轴为不同颜色,并设置刻度线,且坐标轴颜色需要和曲线颜色相同。 二、实现方法 1.1、可以实现: 1…...

springboot+javafx使用aop切面导致的fx:id不能被注入问题
记录一个我遇到得问题 问题描述 我本来使用AOP切面来进行全局异常管理,但是使用AOP之后fxml中通过fx:id绑定得参数无法被注入 Slf4j Component Aspect public class GlobalExceptionAspect {AfterThrowing(pointcut "execution(* com.shkj.videoclassifica…...

说说你对java lambda表达式的理解?
大家好,我是锋哥。今天分享关于【说说你对java lambda表达式的理解?】面试题。希望对大家有帮助; 说说你对java lambda表达式的理解? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Java Lambda 表达式是 Java 8 引入的一项重要特性&#…...

优化你的 3D Tiles:性能与质量的平衡
优化你的 3D Tiles:性能与质量的平衡 在现代的三维场景渲染中,3D Tiles 是一种强大的技术,它能以高效、分级加载的方式呈现海量的三维数据。然而,优化 3D Tiles 以实现性能与质量的平衡,却是一个复杂且关键的任务。本…...

【数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:编写一个程序实现单链表的基本运算。 相关知识 为了完成本关任务,你需要掌握:初始化线性表、销毁线性表、判定是否为空表、求线性…...

设计模式之桥接模式:抽象与实现之间的分离艺术
~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 桥接模式概述与角色组成 想象一下你家里的电视遥控器,无论是索尼还是三星的电视机,遥控器的按键功能都差不多࿱…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...