基于javaweb+mysql的ssm+maven电影院购票选座管理系统(java+ssm+mysql+jsp)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SSM+Maven电影院购票选座管理系统(java+ssm+mysql+jsp)
启动前先修改图片的上传路径:
com.demo.constant.RuntimeConstant#BASE_UPLOAD_PHOTO_PATH
后台:
http://localhost:8080/admin/user/login
admin 123456
前台:
http://localhost:8080/home/user/login
user1 123456
user2 123456
项目描述:这是一个基于SSM框架开发的电影院选座购票系统。首先,这个项目页面简洁清爽,易于理解和学习。其次,这项目功能丰富,具有一个电影院选座购票系统该有的所有功能。
项目功能:此项目分为两个角色:普通用户和管理员。普通用户有登录注册、浏览和筛选电影信息、评论、评分电影信息、选座购票、查看个人信息、查看个人订单信息等等功能。管理员有登录、管理所有用户信息、管理所有电影信息、管理所有评论信息、管理所有订单信息、管理所有角色信息、管理所有电影院信息、管理所有场次信息等等功能。
应用技术:Jsp + SSM + MySQL + LayUI + Bootstrap
运行环境:Eclipse/IntelliJ IDEA + MySQL5.7(项目压缩包中自带) + Tomcat8.5(项目压缩包中自带) + JDK1.8 + Maven3.6.3
@RequestMapping(value="/delete",method = RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> delete(String id){
return commentService.delete(id);
}
}
/**
*/
@Controller("AdminSystemController")
@RequestMapping("/admin/system")
public class SystemController {
@Resource
private IRoleService roleService;
@Resource
private IUserService userService;
@Resource
private IMovieService movieService;
@Resource
private ISessionService sessionService;
@Resource
private IOrderService orderService;
if(orderMapper.updateByPrimaryKeySelective(order) == 0){
return ResponseVo.errorByMsg(CodeMsg.ORDER_SAVE_ERROR);
}
return ResponseVo.success(true);
}
/**
* 删除订单信息
* @param id
* @return
*/
@Override
public ResponseVo<Boolean> delete(String id) {
if(CommonUtil.isEmpty(id)){
return ResponseVo.errorByMsg(CodeMsg.DATA_ERROR);
}
// 删除订单详情数据
OrderItemExample orderItemExample = new OrderItemExample();
orderItemExample.createCriteria().andOrderIdEqualTo(id);
if(orderItemMapper.deleteByExample(orderItemExample) == 0){
throw new RuntimeException("订单信息删除失败,请联系管理员!");
}
// 删除订单数据
if(orderMapper.deleteByPrimaryKey(id) == 0){
throw new RuntimeException("订单信息删除失败,请联系管理员!");
}
// 重新计算已定座位数
sessionService.sumOrderSeat();
return ResponseVo.success(true);
}
/**
* 获取订单的总数
* @return
*/
@Override
public ResponseVo<Integer> getTotal() {
return ResponseVo.success(orderMapper.countByExample(new OrderExample()));
}
}
}
/**
* 封装分页数据
* @return
*/
@RequestMapping(value="/page",method = RequestMethod.POST)
@ResponseBody
public Page page(Page page, String name){
return sessionService.getPage(page, name).getData();
}
/**
* 保存场次信息
* @param session
* @return
*/
@RequestMapping(value="/save",method = RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> save(Session session){
return sessionService.save(session);
}
/**
* 删除场次信息
* @param id
* @return
*/
@RequestMapping(value="/delete",method = RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> delete(String id){
return sessionService.delete(id);
}
}
/**
@ResponseBody
public Page page(Page page, String name){
return movieService.getPage(page, name).getData();
}
/**
* 保存电影信息
* @param movie
* @return
*/
@RequestMapping(value="/save",method = RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> save(Movie movie){
return movieService.save(movie);
}
/**
* 删除电影信息
* @param id
* @return
*/
@RequestMapping(value="/delete",method = RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> delete(String id){
return movieService.delete(id);
}
}
HttpServletRequest request,
HttpServletResponse response){
CaptchaUtil captchaUtil = new CaptchaUtil(vcodeLength,fontSize,width,height);
String generatorVCode = captchaUtil.generatorVCode(); //验证码的值
//将生成的验证码放入session,以供放后面程序的验证使用
request.getSession().setAttribute(method, generatorVCode);
log.info("验证码成功生成,method=" + method + ",value=" + generatorVCode);
try {
ImageIO.write(captchaUtil.generatorRotateVCodeImage(generatorVCode, true), "gif", response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
*/
@Controller("AdminCinemaController")
@RequestMapping("/admin/cinema")
public class CinemaController {
@Resource
private ICinemaService cinemaService;
/**
* 电影院列表页面
* @param model
* @return
*/
@Override
public ResponseVo<Integer> getTotal() {
return ResponseVo.success(orderMapper.countByExample(new OrderExample()));
}
}
/**
*/
@Controller("FileController")
@RequestMapping("/common/file")
public class FileController {
private Logger logger = LoggerFactory.getLogger(FileController.class);
@Autowired
private ResourceLoader resourceLoader;
/**
* 上传图片统一处理
* @param photo
}
BigDecimal totalPrice = new BigDecimal("0.00");
String orderId = UuidUtil.getShortUuid();
order.setTradeNo(String.valueOf(new SnowFlake(2,3).nextId()));
order.setId(orderId);
order.setState(OrderStateEnum.NO_PAY.getCode());
User user = (User) request.getSession().getAttribute(RuntimeConstant.HOME_USER);
order.setUserId(user.getId());
order.setCinemaName(cinema.getName());
order.setMovieName(movie.getName());
order.setMoviePhoto(movie.getPhoto());
order.setSessionHall(session.getHall());
order.setSessionTime(session.getTime());
order.setCreateTime(new Date());
totalPrice = session.getPrice().multiply(new BigDecimal(orderItemList.size()));
order.setTotalPrice(totalPrice);
for(OrderItem orderItem : orderItemList){
orderItem.setOrderId(orderId);
orderItem.setPrice(session.getPrice());
orderItem.setId(UuidUtil.getShortUuid());
orderItem.setSessionId(session.getId());
if(orderItemMapper.insertSelective(orderItem) == 0){
throw new RuntimeException("生成订单失败,请稍后重试!");
}
}
if(orderMapper.insertSelective(order) == 0){
throw new RuntimeException("生成订单失败,请稍后重试!");
}
// 增加已预订座位数
session.setOrderSeat(session.getOrderSeat() + orderItemList.size());
if(sessionMapper.updateByPrimaryKeySelective(session) == 0){
throw new RuntimeException("生成订单失败,请稍后重试!");
}
return ResponseVo.successByMsg(order ,"确认选座成功!");
}
/**
* 根据用户id获取订单数据
* @param userId
* @return
return ResponseVo.errorByMsg(CodeMsg.REPASSWORD_EMPTY);
}
if(CommonUtil.isEmpty(user.getPhone()) || user.getPhone().length() != 11){
return ResponseVo.errorByMsg(CodeMsg.USER_PHONE_ERROR);
}
if(!user.getPassword().equals(user.getRePassword())){
return ResponseVo.errorByMsg(CodeMsg.REPASSWORD_ERROR);
}
// 验证验证码输入是否正确
String correctCaptcha = (String) request.getSession().getAttribute("home_register");
if(CommonUtil.isEmpty(correctCaptcha)){
return ResponseVo.errorByMsg(CodeMsg.CAPTCHA_EXPIRED);
}
if(!(correctCaptcha.toLowerCase()).equals(user.getCaptcha().toLowerCase())){
return ResponseVo.errorByMsg(CodeMsg.CAPTCHA_ERROR);
}
// 判断用户昵称是否重复
if(isUsernameExist(user, "")){
return ResponseVo.errorByMsg(CodeMsg.USERNAME_EXIST);
}
user.setId(UuidUtil.getShortUuid());
user.setLoginTime(new Date());
user.setRoleId(RoleEnum.USER.getCode());
if(userMapper.insertSelective(user) == 0){
return ResponseVo.errorByMsg(CodeMsg.USER_REGISTER_ERROR);
}
return ResponseVo.successByMsg(true, "注册成功,快去登录体验吧!");
}
/**
* 用户修改个人信息操作处理
* @param user
* @return
*/
@Override
public ResponseVo<Boolean> saveUserInfo(User user, HttpServletRequest request) {
if(user == null){
return ResponseVo.errorByMsg(CodeMsg.DATA_ERROR);
}
if(userMapper.updateByPrimaryKeySelective(user) == 0){
return ResponseVo.errorByMsg(CodeMsg.SAVE_USER_INFO_ERROR);
}
User newUser = userMapper.selectByPrimaryKey(user.getId());
request.getSession().setAttribute(RuntimeConstant.HOME_USER, newUser);
return ResponseVo.successByMsg(true, "保存用户个人信息成功!");
}
/**
* 判断用户昵称是否重复
* @param user
* @param id
* @return
*/
}
// 保存订单信息操作
if(orderMapper.updateByPrimaryKeySelective(order) == 0){
return ResponseVo.errorByMsg(CodeMsg.ORDER_SAVE_ERROR);
}
return ResponseVo.success(true);
}
/**
* 删除订单信息
* @param id
* @return
*/
@Override
public ResponseVo<Boolean> delete(String id) {
if(CommonUtil.isEmpty(id)){
return ResponseVo.errorByMsg(CodeMsg.DATA_ERROR);
}
// 删除订单详情数据
OrderItemExample orderItemExample = new OrderItemExample();
orderItemExample.createCriteria().andOrderIdEqualTo(id);
if(orderItemMapper.deleteByExample(orderItemExample) == 0){
throw new RuntimeException("订单信息删除失败,请联系管理员!");
}
// 删除订单数据
if(orderMapper.deleteByPrimaryKey(id) == 0){
throw new RuntimeException("订单信息删除失败,请联系管理员!");
}
// 重新计算已定座位数
sessionService.sumOrderSeat();
return ResponseVo.success(true);
}
/**
* 获取订单的总数
* @return
*/
@Override
public ResponseVo<Integer> getTotal() {
return ResponseVo.success(orderMapper.countByExample(new OrderExample()));
}
}
/**
*/
@Controller("FileController")
@RequestMapping("/common/file")
public class FileController {
private Logger logger = LoggerFactory.getLogger(FileController.class);
@Autowired
private ResourceLoader resourceLoader;
/**
* 上传图片统一处理
* @param photo
* @param request
* @return
*/
@RequestMapping(value="/upload_photo",method= RequestMethod.POST)
@ResponseBody
public ResponseVo<String> uploadPhoto(MultipartFile photo, HttpServletRequest request){
if(photo == null){
return ResponseVo.errorByMsg(CodeMsg.PHOTO_EMPTY);
}
//检查上传文件大小 不能超过1MB
if(photo.getSize() > 1 * 1024* 1024) {
return ResponseVo.errorByMsg(CodeMsg.PHOTO_SURPASS_MAX_SIZE);
}
//获取文件后缀
/**
*/
@Controller("AdminCinemaController")
@RequestMapping("/admin/cinema")
public class CinemaController {
@Resource
private ICinemaService cinemaService;
/**
* 电影院列表页面
* @param model
* @return
*/
@RequestMapping(value="/index",method = RequestMethod.GET)
public ModelAndView index(ModelAndView model){
model.addObject("firstMenu", "cinema");
model.addObject("secondMenu", "cinema-index");
model.addObject("Page", cinemaService.getPage(new Page(), "").getData());
model.setViewName("admin/cinema/index");
return model;
}
/**
* 电影院列表数据获取
* @param name
* @param page
* @return
*/
@RequestMapping(value="/list",method = RequestMethod.POST)
@ResponseBody
public List<Cinema> list(String name, Page page){
return cinemaService.list(name, page).getData();
}
/**
* 封装分页数据
* @return
@ResponseBody
public List<User> list(String name, Page page){
return userService.list(name, page).getData();
}
/**
* 封装分页数据
* @return
*/
@RequestMapping(value="/page",method = RequestMethod.POST)
@ResponseBody
public Page page(Page page, String name){
return userService.getPage(page, name).getData();
}
/**
* 保存用户信息
* @param user
* @return
*/
@RequestMapping(value="/save",method = RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> save(User user){
return userService.save(user);
}
/**
* 删除用户信息
* @param id
* @return
*/
@RequestMapping(value="/delete",method = RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> delete(String id){
return userService.delete(id);
}
/**
* 用户登录操作处理
* @param user
* @param request
page.setTotalCount(userMapper.countByExample(userExample));
return ResponseVo.success(page);
}
/**
* 获取用户列表数据
* @param name
* @param page
* @return
*/
@Override
public ResponseVo<List<User>> list(String name, Page page) {
UserExample userExample = new UserExample();
if(!CommonUtil.isEmpty(name)){
// 进行了搜索
userExample.createCriteria().andUsernameLike('%' + name + '%');
}
PageHelper.startPage(page.getPage(), page.getRows());
List<User> userList = userMapper.selectByExample(userExample);
for(User u : userList){
Role role = roleMapper.selectByPrimaryKey(u.getRoleId());
u.setRole(role);
}
return ResponseVo.success(userList);
}
/**
* 保存用户信息
* @param user
* @return
*/
@Override
public ResponseVo<Boolean> save(User user) {
if(user == null){
return ResponseVo.errorByMsg(CodeMsg.DATA_ERROR);
}
// 进行统一表单验证
CodeMsg validate = ValidateEntityUtil.validate(user);
if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
return ResponseVo.errorByMsg(validate);
for(Order order : orderList){
User user = userMapper.selectByPrimaryKey(order.getUserId());
order.setUser(user);
}
return ResponseVo.success(orderList);
}
/**
* 封装分页数据
* @param page
* @param name
* @return
*/
@Override
public ResponseVo<Page> getPage(Page page, String name) {
OrderExample orderExample = new OrderExample();
if(!CommonUtil.isEmpty(name)){
orderExample.createCriteria().andTradeNoEqualTo(name);
}
page.setTotalCount(orderMapper.countByExample(orderExample));
return ResponseVo.success(page);
}
/**
* 根据订单id获取订单详情的
* @param id
* @return
*/
@Override
public List<OrderItem> getOrderItemList(String id) {
if(CommonUtil.isEmpty(id)){
return new ArrayList<>();
}
OrderItemExample orderItemExample = new OrderItemExample();
orderItemExample.createCriteria().andOrderIdEqualTo(id);
return orderItemMapper.selectByExample(orderItemExample);
}
/**
* 保存订单信息
* @param order
/**
*/
@Service
@Transactional
public class OrderServiceImpl implements IOrderService {
@Resource
private OrderMapper orderMapper;
/**
* 删除评论信息
* @param id
* @return
*/
@RequestMapping(value="/delete",method = RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> delete(String id){
return commentService.delete(id);
}
}
/**
*/
@Controller("AdminSystemController")
@RequestMapping("/admin/system")
public class SystemController {
@Resource
private IRoleService roleService;
@Resource
private IUserService userService;
return cinemaService.delete(id);
}
}
/**
*/
@Controller("AdminMovieController")
@RequestMapping("/admin/movie")
public class MovieController {
@Resource
private IMovieService movieService;
/**
* 电影列表页面
* @param model
* @return
*/
@RequestMapping(value="/index",method = RequestMethod.GET)
public ModelAndView index(ModelAndView model){
model.addObject("firstMenu", "movie");
model.addObject("secondMenu", "movie-index");
model.addObject("Page", movieService.getPage(new Page(), "").getData());
model.setViewName("admin/movie/index");
return model;
}
/**
* 电影列表数据获取
* @param name
*/
public Boolean isUsernameExist(User user, String id) {
UserExample userExample = new UserExample();
userExample.createCriteria().andUsernameEqualTo(user.getUsername());
List<User> selectedUserList = userMapper.selectByExample(userExample);
if(selectedUserList != null && selectedUserList.size() > 0) {
if(selectedUserList.size() > 1){
return true; //出现重名
}
if(!selectedUserList.get(0).getId().equals(id)) {
return true; //出现重名
}
}
return false;//没有重名
}
}