博主主页:一季春秋
博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。
主要内容:毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题库、技术咨询。🍅文末获取联系🍅
精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟
SpringBoot+Vue项目持续更新中
目录
本系统是通过Java语言来进行设计和实现的。项目主要用到的技术是SpringBoot框架,Vue框架,数据库使用的是SQL,系统采用的开发工具是IntelliJ IDEA。
本电影在线预定与管理系统主要包括个首页、人中心、管理员管理、用户管理、电影管理、论坛管理、公告信息管理、基础数据管理、轮播图信息等多个模块。它帮助电影在线预定与管理实现了信息化、网络化,通过测试,实现了系统设计目标,相比传统的管理模式,本系统合理的利用了电影在线预定与管理数据资源,有效的减少了电影在线预定与管理的经济投入,大大提高了电影在线预定与管理的效率。
- 开发语言:Java
-
- 使用框架:spring boot
-
- 前端技术:Vue 、css、element-ui、js
-
- 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code
-
- 数据库:MySQL 5.7/8.0
-
- 数据库管理工具:phpstudy/Navicat
-
- JDK版本:jdk1.8
-
- Maven: apache-maven 3.8.1-bin
通过软件的需求分析已经获得了系统的基本功能需求,根据需求,将电影在线预定与管理系统功能模块主要分为管理员模块。管理员添加首页、个人中心、管理员管理、用户管理、电影管理、论坛管理、公告信息管理、基础数据管理、轮播图信息等等操作。如图是系统的功能结构图。

前台首页
电影页面

电影详情

电影订单

管理员输入用户名和密码,下拉选择框,选择用户权限,然后点击立即登录,系统与保存在数据库的数据进行匹配,如果用户名与密码与数据库存放数据匹配,系统跳转到用户页面,否则提示错误重新跳转到登录页面。

管理员子系统模块主要包括对首页、人中心、管理员管理、用户管理、电影管理、论坛管理、公告信息管理、基础数据管理、轮播图信息等模块。
个人中心是可以进行添加系统管理员操作。添加管理员时,需要分别设置管理员的用户名,用户名不能为空,设置密码,在下拉选择框中选择权限。该模块还具备查询所有管理员列表,可以编辑修改列表中管理员的资料,包括用户名、密码和权限。

用户管理是可以进行添加用户信息操作。在文本框输入所要添加的用户管理,然后提交即可,输入错误可以点击重置按钮对文本框重置。

查询所有电影管理列表,查询电影信息,可以对列表中电影信息进行修改、删除等操作。

论坛管理是可以进行添加论坛信息操作。添加论坛信息时,需要设置论坛信息,然后提交即可,输入错误可以点击重置按钮对文本框重置。

查询所有公告信息管理列表,查询公告信息,并对公告信息进行修改,可以对列表中公告信息进行删除。

基础数据管理是可以列表中进行添加基础数据信息操作。添加基础数据信息时,需要设置基础数据信息基本信息,然后提交即可,输入错误可以点击重置按钮对文本框重置。

轮播图信息是可以列表中进行添加轮播图信息操作。添加轮播图信息时,需要设置轮播图基本信息,然后提交即可,输入错误可以点击重置按钮对文本框重置。

电影订单
- /**
- * 电影订单
- * 后端接口
- * @author
- * @email
- */
- @RestController
- @Controller
- @RequestMapping("/dianyingOrder")
- public class DianyingOrderController {
- private static final Logger logger = LoggerFactory.getLogger(DianyingOrderController.class);
-
- private static final String TABLE_NAME = "dianyingOrder";
-
- @Autowired
- private DianyingOrderService dianyingOrderService;
-
-
- @Autowired
- private TokenService tokenService;
-
- @Autowired
- private DianyingService dianyingService;//电影
- @Autowired
- private DianyingCommentbackService dianyingCommentbackService;//电影评价
- @Autowired
- private DictionaryService dictionaryService;//字典
- @Autowired
- private ForumService forumService;//论坛
- @Autowired
- private GonggaoService gonggaoService;//公告信息
- @Autowired
- private YonghuService yonghuService;//用户
- @Autowired
- private UsersService usersService;//管理员
-
-
- /**
- * 后端列表
- */
- @RequestMapping("/page")
- public R page(@RequestParam Map
params, HttpServletRequest request) { - logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
- String role = String.valueOf(request.getSession().getAttribute("role"));
- if(false)
- return R.error(511,"永不会进入");
- else if("用户".equals(role))
- params.put("yonghuId",request.getSession().getAttribute("userId"));
- CommonUtil.checkMap(params);
- PageUtils page = dianyingOrderService.queryPage(params);
-
- //字典表数据转换
- List
list =(List)page.getList(); - for(DianyingOrderView c:list){
- //修改对应字典表字段
- dictionaryService.dictionaryConvert(c, request);
- }
- return R.ok().put("data", page);
- }
-
- /**
- * 后端详情
- */
- @RequestMapping("/info/{id}")
- public R info(@PathVariable("id") Long id, HttpServletRequest request){
- logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
- DianyingOrderEntity dianyingOrder = dianyingOrderService.selectById(id);
- if(dianyingOrder !=null){
- //entity转view
- DianyingOrderView view = new DianyingOrderView();
- BeanUtils.copyProperties( dianyingOrder , view );//把实体数据重构到view中
- //级联表 电影
- //级联表
- DianyingEntity dianying = dianyingService.selectById(dianyingOrder.getDianyingId());
- if(dianying != null){
- BeanUtils.copyProperties( dianying , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
- view.setDianyingId(dianying.getId());
- }
- //级联表 用户
- //级联表
- YonghuEntity yonghu = yonghuService.selectById(dianyingOrder.getYonghuId());
- if(yonghu != null){
- BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
- view.setYonghuId(yonghu.getId());
- }
- //修改对应字典表字段
- dictionaryService.dictionaryConvert(view, request);
- return R.ok().put("data", view);
- }else {
- return R.error(511,"查不到数据");
- }
-
- }
-
- /**
- * 后端保存
- */
- @RequestMapping("/save")
- public R save(@RequestBody DianyingOrderEntity dianyingOrder, HttpServletRequest request){
- logger.debug("save方法:,,Controller:{},,dianyingOrder:{}",this.getClass().getName(),dianyingOrder.toString());
-
- String role = String.valueOf(request.getSession().getAttribute("role"));
- if(false)
- return R.error(511,"永远不会进入");
- else if("用户".equals(role))
- dianyingOrder.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
-
- dianyingOrder.setCreateTime(new Date());
- dianyingOrder.setInsertTime(new Date());
- dianyingOrderService.insert(dianyingOrder);
-
- return R.ok();
- }
-
- /**
- * 后端修改
- */
- @RequestMapping("/update")
- public R update(@RequestBody DianyingOrderEntity dianyingOrder, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
- logger.debug("update方法:,,Controller:{},,dianyingOrder:{}",this.getClass().getName(),dianyingOrder.toString());
- DianyingOrderEntity oldDianyingOrderEntity = dianyingOrderService.selectById(dianyingOrder.getId());//查询原先数据
-
- String role = String.valueOf(request.getSession().getAttribute("role"));
- // if(false)
- // return R.error(511,"永远不会进入");
- // else if("用户".equals(role))
- // dianyingOrder.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
-
- dianyingOrderService.updateById(dianyingOrder);//根据id更新
- return R.ok();
- }
-
-
-
- /**
- * 删除
- */
- @RequestMapping("/delete")
- public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
- logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
- List
oldDianyingOrderList =dianyingOrderService.selectBatchIds(Arrays.asList(ids));//要删除的数据 - dianyingOrderService.deleteBatchIds(Arrays.asList(ids));
-
- return R.ok();
- }
-
-
- /**
- * 批量上传
- */
- @RequestMapping("/batchInsert")
- public R save( String fileName, HttpServletRequest request){
- logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
- Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- //.eq("time", new SimpleDateFormat("yyyy-MM-dd").format(new Date()))
- try {
- List
dianyingOrderList = new ArrayList<>();//上传的东西 - Map
> seachFields= new HashMap<>();//要查询的字段 - Date date = new Date();
- int lastIndexOf = fileName.lastIndexOf(".");
- if(lastIndexOf == -1){
- return R.error(511,"该文件没有后缀");
- }else{
- String suffix = fileName.substring(lastIndexOf);
- if(!".xls".equals(suffix)){
- return R.error(511,"只支持后缀为xls的excel文件");
- }else{
- URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
- File file = new File(resource.getFile());
- if(!file.exists()){
- return R.error(511,"找不到上传文件,请联系管理员");
- }else{
- List
> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
- dataList.remove(0);//删除第一行,因为第一行是提示
- for(List
data:dataList){ - //循环
- DianyingOrderEntity dianyingOrderEntity = new DianyingOrderEntity();
- // dianyingOrderEntity.setDianyingOrderUuidNumber(data.get(0)); //订单号 要改的
- // dianyingOrderEntity.setDianyingId(Integer.valueOf(data.get(0))); //电影 要改的
- // dianyingOrderEntity.setYonghuId(Integer.valueOf(data.get(0))); //用户 要改的
- // dianyingOrderEntity.setDianyingOrderTruePrice(data.get(0)); //实付价格 要改的
- // dianyingOrderEntity.setDianyingOrderTypes(Integer.valueOf(data.get(0))); //订单类型 要改的
- // dianyingOrderEntity.setBuySectionNumber(Integer.valueOf(data.get(0))); //车厢 要改的
- // dianyingOrderEntity.setBuyZuoweiNumber(data.get(0)); //购买的座位 要改的
- // dianyingOrderEntity.setBuyZuoweiTime(sdf.parse(data.get(0))); //订购日期 要改的
- // dianyingOrderEntity.setInsertTime(date);//时间
- // dianyingOrderEntity.setCreateTime(date);//时间
- dianyingOrderList.add(dianyingOrderEntity);
-
-
- //把要查询是否重复的字段放入map中
- //订单号
- if(seachFields.containsKey("dianyingOrderUuidNumber")){
- List
dianyingOrderUuidNumber = seachFields.get("dianyingOrderUuidNumber"); - dianyingOrderUuidNumber.add(data.get(0));//要改的
- }else{
- List
dianyingOrderUuidNumber = new ArrayList<>(); - dianyingOrderUuidNumber.add(data.get(0));//要改的
- seachFields.put("dianyingOrderUuidNumber",dianyingOrderUuidNumber);
- }
- }
-
- //查询是否重复
- //订单号
- List
dianyingOrderEntities_dianyingOrderUuidNumber = dianyingOrderService.selectList(new EntityWrapper().in("dianying_order_uuid_number", seachFields.get("dianyingOrderUuidNumber"))); - if(dianyingOrderEntities_dianyingOrderUuidNumber.size() >0 ){
- ArrayList
repeatFields = new ArrayList<>(); - for(DianyingOrderEntity s:dianyingOrderEntities_dianyingOrderUuidNumber){
- repeatFields.add(s.getDianyingOrderUuidNumber());
- }
- return R.error(511,"数据库的该表中的 [订单号] 字段已经存在 存在数据为:"+repeatFields.toString());
- }
- dianyingOrderService.insertBatch(dianyingOrderList);
- return R.ok();
- }
- }
- }
- }catch (Exception e){
- e.printStackTrace();
- return R.error(511,"批量插入数据异常,请联系管理员");
- }
- }
-
-
-
-
- /**
- * 前端列表
- */
- @IgnoreAuth
- @RequestMapping("/list")
- public R list(@RequestParam Map
params, HttpServletRequest request) { - logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
-
- CommonUtil.checkMap(params);
- PageUtils page = dianyingOrderService.queryPage(params);
-
- //字典表数据转换
- List
list =(List)page.getList(); - for(DianyingOrderView c:list)
- dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
-
- return R.ok().put("data", page);
- }
-
- /**
- * 前端详情
- */
- @RequestMapping("/detail/{id}")
- public R detail(@PathVariable("id") Long id, HttpServletRequest request){
- logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
- DianyingOrderEntity dianyingOrder = dianyingOrderService.selectById(id);
- if(dianyingOrder !=null){
-
-
- //entity转view
- DianyingOrderView view = new DianyingOrderView();
- BeanUtils.copyProperties( dianyingOrder , view );//把实体数据重构到view中
-
- //级联表
- DianyingEntity dianying = dianyingService.selectById(dianyingOrder.getDianyingId());
- if(dianying != null){
- BeanUtils.copyProperties( dianying , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
- view.setDianyingId(dianying.getId());
- }
- //级联表
- YonghuEntity yonghu = yonghuService.selectById(dianyingOrder.getYonghuId());
- if(yonghu != null){
- BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
- view.setYonghuId(yonghu.getId());
- }
- //修改对应字典表字段
- dictionaryService.dictionaryConvert(view, request);
- return R.ok().put("data", view);
- }else {
- return R.error(511,"查不到数据");
- }
- }
-
-
- /**
- * 前端保存
- */
- @RequestMapping("/add")
- public R add(@RequestBody DianyingOrderEntity dianyingOrder, HttpServletRequest request){
- logger.debug("add方法:,,Controller:{},,dianyingOrder:{}",this.getClass().getName(),dianyingOrder.toString());
- DianyingEntity dianyingEntity = dianyingService.selectById(dianyingOrder.getDianyingId());
- if(dianyingEntity == null){
- return R.error(511,"查不到该电影");
- }
- // Double dianyingNewMoney = dianyingEntity.getDianyingNewMoney();
-
- if(false){
- }
- else if(dianyingEntity.getDianyingNewMoney() == null){
- return R.error(511,"票价不能为空");
- }
- List
buyZuoweiNumberList = new ArrayList<>(Arrays.asList(dianyingOrder.getBuyZuoweiNumber().split(",")));//这次购买的座位 - List
beforeBuyZuoweiNumberList = new ArrayList<>();//之前已经购买的座位 -
- //某天日期的某个分段
- List
dianyingOrderEntityList = - dianyingOrderService.selectList(new EntityWrapper
() - .eq("dianying_id", dianyingOrder.getDianyingId())
- .eq("buy_zuowei_time", dianyingOrder.getBuyZuoweiTime())
- .eq("buy_section_number", dianyingOrder.getBuySectionNumber())
- .notIn("dianying_order_types",102)//已退款的订单
-
- );
- for(DianyingOrderEntity d:dianyingOrderEntityList){
- beforeBuyZuoweiNumberList.addAll(Arrays.asList(d.getBuyZuoweiNumber().split(",")));
- }
- buyZuoweiNumberList.retainAll(beforeBuyZuoweiNumberList);//判断当前购买list包含已经被购买的list中是否有重复的 有的话 就保留
- if(buyZuoweiNumberList != null && buyZuoweiNumberList.size()>0 ){
- return R.error(511,buyZuoweiNumberList.toString()+" 的座位已经被使用");
- }
-
- //计算所获得积分
- Double buyJifen =0.0;
- Integer userId = (Integer) request.getSession().getAttribute("userId");
- YonghuEntity yonghuEntity = yonghuService.selectById(userId);
- if(yonghuEntity == null)
- return R.error(511,"用户不能为空");
- if(yonghuEntity.getNewMoney() == null)
- return R.error(511,"用户金额不能为空");
- double balance = yonghuEntity.getNewMoney() - dianyingEntity.getDianyingNewMoney()*(dianyingOrder.getBuyZuoweiNumber().split(",").length);//余额
- if(balance<0)
- return R.error(511,"余额不够支付");
- dianyingOrder.setDianyingOrderTypes(101); //设置订单状态为已购买
- dianyingOrder.setDianyingOrderTruePrice(dianyingEntity.getDianyingNewMoney()*(dianyingOrder.getBuyZuoweiNumber().split(",").length)); //设置实付价格
- dianyingOrder.setYonghuId(userId); //设置订单支付人id
- dianyingOrder.setDianyingOrderUuidNumber(String.valueOf(new Date().getTime()));
- dianyingOrder.setInsertTime(new Date());
- dianyingOrder.setCreateTime(new Date());
- dianyingOrderService.insert(dianyingOrder);//新增订单
- //更新第一注册表
- yonghuEntity.setNewMoney(balance);//设置金额
- yonghuService.updateById(yonghuEntity);
-
-
- return R.ok();
- }
-
-
- /**
- * 退款
- */
- @RequestMapping("/refund")
- public R refund(Integer id, HttpServletRequest request){
- logger.debug("refund方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
- String role = String.valueOf(request.getSession().getAttribute("role"));
-
- DianyingOrderEntity dianyingOrder = dianyingOrderService.selectById(id);//当前表service
- Integer buyNumber = dianyingOrder.getBuyZuoweiNumber().split(",").length;
- Integer dianyingId = dianyingOrder.getDianyingId();
- if(dianyingId == null)
- return R.error(511,"查不到该电影");
- DianyingEntity dianyingEntity = dianyingService.selectById(dianyingId);
- if(dianyingEntity == null)
- return R.error(511,"查不到该电影");
- Double dianyingNewMoney = dianyingEntity.getDianyingNewMoney();
- if(dianyingNewMoney == null)
- return R.error(511,"电影价格不能为空");
-
- Integer userId = (Integer) request.getSession().getAttribute("userId");
- YonghuEntity yonghuEntity = yonghuService.selectById(userId);
- if(yonghuEntity == null)
- return R.error(511,"用户不能为空");
- if(yonghuEntity.getNewMoney() == null)
- return R.error(511,"用户金额不能为空");
- Double zhekou = 1.0;
-
- //计算金额
- Double money = dianyingEntity.getDianyingNewMoney() * buyNumber * zhekou;
- //计算所获得积分
- Double buyJifen = 0.0;
- yonghuEntity.setNewMoney(yonghuEntity.getNewMoney() + money); //设置金额
-
-
-
-
- dianyingOrder.setDianyingOrderTypes(102);//设置订单状态为已退款
- dianyingOrderService.updateAllColumnById(dianyingOrder);//根据id更新
- yonghuService.updateById(yonghuEntity);//更新用户信息
- dianyingService.updateById(dianyingEntity);//更新订单中电影的信息
-
- return R.ok();
- }
-
- /**
- * 评价
- */
- @RequestMapping("/commentback")
- public R commentback(Integer id, String commentbackText, Integer dianyingCommentbackPingfenNumber, HttpServletRequest request){
- logger.debug("commentback方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
- DianyingOrderEntity dianyingOrder = dianyingOrderService.selectById(id);
- if(dianyingOrder == null)
- return R.error(511,"查不到该订单");
- Integer dianyingId = dianyingOrder.getDianyingId();
- if(dianyingId == null)
- return R.error(511,"查不到该电影");
-
- DianyingCommentbackEntity dianyingCommentbackEntity = new DianyingCommentbackEntity();
- dianyingCommentbackEntity.setId(id);
- dianyingCommentbackEntity.setDianyingId(dianyingId);
- dianyingCommentbackEntity.setYonghuId((Integer) request.getSession().getAttribute("userId"));
- dianyingCommentbackEntity.setDianyingCommentbackPingfenNumber(dianyingCommentbackPingfenNumber);
- dianyingCommentbackEntity.setDianyingCommentbackText(commentbackText);
- dianyingCommentbackEntity.setInsertTime(new Date());
- dianyingCommentbackEntity.setReplyText(null);
- dianyingCommentbackEntity.setUpdateTime(null);
- dianyingCommentbackEntity.setCreateTime(new Date());
- dianyingCommentbackService.insert(dianyingCommentbackEntity);
-
- dianyingOrder.setDianyingOrderTypes(105);//设置订单状态为已评价
- dianyingOrderService.updateById(dianyingOrder);//根据id更新
- return R.ok();
- }
-
- /**
- * 检票
- */
- @RequestMapping("/deliver")
- public R deliver(Integer id , HttpServletRequest request){
- logger.debug("refund:,,Controller:{},,ids:{}",this.getClass().getName(),id.toString());
- DianyingOrderEntity dianyingOrderEntity = dianyingOrderService.selectById(id);
- dianyingOrderEntity.setDianyingOrderTypes(103);//设置订单状态为已检票
- dianyingOrderService.updateById( dianyingOrderEntity);
-
- return R.ok();
- }
-
-
- }