基于javaweb的SpringBoot在线电影售票系统设计和实现(java+springboot+jpa+mysql+freemarker+maven)

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

210023072402

220023072402

230023072402

240023072402

基于javaweb的SpringBoot在线电影售票系统设计和实现(java+springboot+jpa+mysql+freemarker+maven)

一、项目简述

前台:

1、正在上映的电影浏览查看。

2、影院信息浏览查看。

3、新闻咨询信息浏览查看。

4、地域信息查看切换。

5、用户注册登录。

6、电影排期查看。

7、在线选座生成订单并支付。

8、电影、影院的评价及评价浏览。

9、用户个人中心。

10、用户中心订单管理。

11、用户中心余额充值。

12、用户中心电影评价、影院评价管理。

后台:

1、地域管理。

2、电影管理、电影评价管理。

3、影院管理、影院评价管理。

4、影厅管理。

5、拍片场次管理。

6、新闻咨询管理。

7、用户管理。

8、订单管理。

9、支付管理。

10、统计类:包括用户、电影、影院、票房等等的统计。

二、项目运行

环境配置: Jdk1.8 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)

项目技术: Springboot+ SpringMVC + Spring Data JPA + freemarker + JavaScript + JQuery + Ajax + maven等等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
	//数据库添加操作成功,记录日志
operaterLogService.add("添加菜单信息【" + menu + "】");
return Result.success(true);
}

/**
* 菜单编辑页面
* @param model
* @param id
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.GET)
public String eidt(Model model,@RequestParam(name="id",required=true)Long id){
List<Menu> findAll = menuService.findAll();
model.addAttribute("title","菜单列表");
model.addAttribute("topMenus",MenuUtil.getTopMenus(findAll));
model.addAttribute("secondMenus",MenuUtil.getSecondMenus(findAll));
model.addAttribute("menu",menuService.find(id));
return "admin/menu/edit";
}

/**
* 菜单编辑页面表单提交处理
* @param request
* @param menu
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> edit(Menu menu){
if(menu == null){
Result.error(CodeMsg.DATA_ERROR);
}
if(menu.getId() == null){
Result.error(CodeMsg.ADMIN_MENU_ID_EMPTY);
}
//用统一验证实体方法验证是否合法
CodeMsg validate = ValidateEntityUtil.validate(menu);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(menu.getParent() != null){
if(menu.getParent().getId() == null){
menu.setParent(null);
}
}
Menu existMenu = menuService.find(menu.getId());
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
		orderItem.setMoney(cinemaHallSession.getNewPrice());
orderItems.add(orderItem);
}
if(!orderService.generateOrder(order, orderItems)){
return Result.error(CodeMsg.HOME_ADD_ORDER_ERROR);
}
log.info("订单已经生成");
return Result.success(order.getSn());
}

/**
* 订单确认支付页面
* @param sn
* @param model
* @return
*/
@RequestMapping(value="order_pay",method=RequestMethod.GET)
public String orderPay(@RequestParam(name="order_sn",required=true)String sn,Model model){
Order order = orderService.find(sn);
if(order == null){
model.addAttribute("msg", "订单编号不存在!");
return RuntimeConstant.RUN_ERROR_VIEW;
}
if(order.getStatus() != Order.status_unpay){
model.addAttribute("msg", "订单状态不可支付!");
return RuntimeConstant.RUN_ERROR_VIEW;
}
long passTime = System.currentTimeMillis()/1000 - order.getCreateTime().getTime()/1000;
if(passTime > orderTimeout){
model.addAttribute("msg", "订单已超时,不可支付!");
return RuntimeConstant.RUN_ERROR_VIEW;
}
//订单状态都合适
model.addAttribute("leftTime", orderTimeout - passTime);
model.addAttribute("order", order);
model.addAttribute("orderItemList", orderItemService.find(order.getId()));
return "home/order/pay_order";
}

/**
* 订单支付
* @param sn
* @return
*/
@RequestMapping(value="order_pay",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> orderPay(@RequestParam(name="order_sn",required=true)String sn){
Order order = orderService.find(sn);
if(order == null){
return Result.error(CodeMsg.HOME_ORDER_NO_EXIST);
}
if(order.getStatus() != Order.status_unpay){
return Result.error(CodeMsg.HOME_ORDER_STATUS_UNABLE);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
	account.setPassword(password);
if(accountService.save(account) == null){
return Result.error(CodeMsg.HOME_ACCOUNT_REGISTER_ERROR);
}
//表示用户已经注册成功,放入session
SessionUtil.set(SessionConstant.SESSION_ACCOUNT_LOGIN_KEY, account);
return Result.success(true);
}

/**
* 用户登录
* @param mobile
* @param password
* @param checkCode
* @param tag
* @return
*/
@RequestMapping(value="/login",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> login(@RequestParam(name="mobile",required=true)String mobile,
@RequestParam(name="password")String password,
@RequestParam(name="checkCode")String checkCode,
@RequestParam(name="tag")Integer tag
){
Account account = null;
if(tag == 1){
//表示是密码登录
if(StringUtils.isEmpty(password)){
return Result.error(CodeMsg.ADMIN_PASSWORD_EMPTY);
}
account = accountService.find(mobile);
if(account == null){
return Result.error(CodeMsg.HOME_ACCOUNT_REGISTER_MOBILE_NO_EXIST);
}
//表示一切符合,开始检查密码是否正确
if(!password.equals(account.getPassword())){
return Result.error(CodeMsg.HOME_ACCOUNT_LOGIN_PWD_ERROR);
}
}
if(tag == 2){
//从session中获取短信验证码
String smsCode = (String)SessionUtil.get("home_login_sms_code");
if(smsCode == null){
return Result.error(CodeMsg.SESSION_EXPIRED);
}
if(!smsCode.equalsIgnoreCase(checkCode)){
return Result.error(CodeMsg.SMS_CODE_ERROR);
}
//短信验证码正确
SessionUtil.set("home_login_sms_code", null);
//检查手机号是否已经注册
account = accountService.find(mobile);
if(account == null){
return Result.error(CodeMsg.HOME_ACCOUNT_REGISTER_MOBILE_NO_EXIST);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40


/**
* 后台菜单管理控制器
*
*/
@RequestMapping("/admin/menu")
@Controller
public class MenuController {

@Autowired
private MenuService menuService;

@Autowired
private OperaterLogService operaterLogService;

/**
* 菜单列表展示页面
* @param model
* @return
*/
@RequestMapping(value="/list")
public String list(Model model){
List<Menu> findAll = menuService.findAll();
model.addAttribute("title","菜单列表");
model.addAttribute("topMenus", MenuUtil.getTopMenus(findAll));
model.addAttribute("secondMenus",MenuUtil.getSecondMenus(findAll));
model.addAttribute("thirdMenus",MenuUtil.getThirdMenus(findAll));
return "admin/menu/list";
}

/**
* 菜单添加页面
* @param model
* @return
*/
@RequestMapping(value="/add",method=RequestMethod.GET)
public String add(Model model){
List<Menu> findAll = menuService.findAll();
model.addAttribute("title","菜单列表");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
* 电影院列表页面
* @param model
* @return
*/
@RequestMapping(value="/list")
public String list(Model model, Cinema cinema, PageBean<Cinema> pageBean){
model.addAttribute("pageBean", cinemaService.findPage(cinema, pageBean));
model.addAttribute("name",cinema.getName());
return "admin/cinema/list";
}

/**
* 电影院添加页面
* @param model
* @return
*/
@RequestMapping(value="/add",method=RequestMethod.GET)
public String add(Model model){
model.addAttribute("provinceList", areaService.getAllProvince());
model.addAttribute("cinemaServiceList", CinemaServices.values());
return "admin/cinema/add";
}

/**
* 电影院编辑页面
* @param model
* @param id
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.GET)
public String edit(Model model,@RequestParam(name="id",required=true)Long id){
Cinema cinema = cinemaService.findById(id);
model.addAttribute("cinema", cinema);
model.addAttribute("provinceList", areaService.getAllProvince());
model.addAttribute("cityList", areaService.getAllCity(cinema.getArea().getProvinceId()));
model.addAttribute("districtList", areaService.getAllDistrict(cinema.getArea().getCityId()));
model.addAttribute("cinemaServiceList", CinemaServices.values());
return "admin/cinema/edit";
}

/**
* 添加电影院表单提交
* @param cinema


项目链接:
https://javayms.github.io?id=041422282105200cf
https://javayms.pages.dev?id=041422282105200cf