Compare commits

..

70 Commits
main ... cw

Author SHA1 Message Date
pf6xyk43p 48ac716987 Update Schedule.java
1 year ago
pf6xyk43p 5f018810b9 Update Order.java
1 year ago
pf6xyk43p 1985aabed7 Update Movie.java
1 year ago
pf6xyk43p 2a75312441 Update Hall.java
1 year ago
pf6xyk43p fc2d55ce60 Update Comment.java
1 year ago
pf6xyk43p aca32067b9 Update Cinema.java
1 year ago
pf6xyk43p 6e20f2f8cc Update UserController.java
1 year ago
pf6xyk43p a064758569 Update ScheduleController.java
1 year ago
pf6xyk43p b33832ab16 Update OrderController.java
1 year ago
pf6xyk43p 26b489f14d Update MovieController.java
1 year ago
pf6xyk43p 523619435c Update CommentController.java
1 year ago
CW 37348f325a Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 4e9e4cf7e8 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 1d001f0802 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 6e75a7010f Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 93fe199339 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 7a992ff099 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 97b9ad0ccb Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 815206c8cb Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW ade9e2e296 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 2b95aefe5a Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 7ee5af245a Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW df6f2bedcf Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 7f7d0b39eb Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 086f506d56 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 89f4ba7a82 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW c76a5ef966 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW f64a90c355 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW e8de702e06 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 1287cc04f2 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW de2500dfdd Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 8c58c19f33 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 333b5ced5c Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 6372ca60f3 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW b0f8101ddb Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 8b0ffaf149 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 80c82cf476 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW c09a279a04 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW aa35720828 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 54558cb945 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW c25bea62c0 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 4438bbe85b Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW e4b5a0f45d Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW c197df1de5 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 6b06f81d61 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 007a0d547e Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 8a55466027 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 0dd0a87f44 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 305f725977 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 42b6392519 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW df28dd198b Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 4aee1e206e Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 2e4302bf23 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW d30b105079 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 90bbb36435 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW ae35a0346c Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 90b440f94f Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 3e1a55ebef Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 417c379cdf Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW b56e522882 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 44ab759e40 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW fce524a1ac Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 2225062d90 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW bbc2355c40 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW bbdb507493 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 0d72c7ba49 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 19aacb73c2 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 0b26e3bfc3 Merge branch 'cw' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 6db5cb600e Merge branch 'main' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago
CW 9c6d59b7c3 Merge branch 'main' of https://bdgit.educoder.net/pxv6y92jf/banban
1 year ago

@ -19,210 +19,195 @@ import com.service.IMovieService;
import com.service.IUserService;
/**
*
* JSON
*
*
*
* @author Wxj
*/
@Controller
@RequestMapping("/comment") // 设置该Controller的基础路径为/comment意味着该控制器下的所有请求路径都以此为前缀
@RequestMapping("/comment")
public class CommentController {
// 自动装配ICommentService用于调用评论相关的业务逻辑方法如查询、添加、更新、删除评论等操作。
@Resource
private ICommentService commentService;
// 自动装配IUserService用于获取用户相关信息例如根据用户ID查找用户详细信息等操作辅助评论业务逻辑处理比如补充评论中的用户信息。
@Resource
private IUserService userService;
// 自动装配IMovieService用于处理电影相关业务比如更新电影的评论数量等操作与评论业务存在关联关系因为评论是针对电影发表的。
@Resource
private IMovieService movieService;
// 注入评论服务层接口,用于调用评论相关的业务逻辑方法
@Resource
private ICommentService commentService;
// 注入用户服务层接口,用于获取用户相关信息等操作
@Resource
private IUserService userService;
// 注入电影服务层接口,可能用于和评论关联的电影相关操作,比如更新电影的评论数量等
@Resource
private IMovieService movieService;
/**
*
* ID
* JSON
*
* @return JSON
*/
@RequestMapping("findAllComments")
@ResponseBody
public JSONObject findAllComments() {
JSONObject obj = new JSONObject();
// 调用评论服务的方法获取所有评论列表
List<Comment> list = commentService.findAllComments();
for (Comment comment : list) {
// 通过用户服务根据评论中记录的用户ID查找对应的用户对象并设置到评论对象中补充用户信息。
comment.setComment_user(userService.findUserById(comment.getUser_id()));
}
obj.put("code", 0); // 设置成功状态码,表示查询操作成功执行。
obj.put("msg", ""); // 无额外消息,此处可根据实际业务需求在有特殊情况时设置相应提示消息。
obj.put("count", list.size()); // 设置评论总数,即获取到的评论列表的大小。
obj.put("data", list); // 将包含完整用户信息的评论列表数据放入 "data" 字段返回给前端。
return obj;
}
/**
*
* JSON
* JSON
* @return JSONObject JSON
*/
@RequestMapping("findAllComments")
@ResponseBody
public JSONObject findAllComments() {
JSONObject obj = new JSONObject();
// 调用评论服务层的方法获取所有评论列表
List<Comment> list = commentService.findAllComments();
// 遍历评论列表为每条评论设置对应的评论用户信息通过用户ID从用户服务层获取用户对象
for (Comment comment : list) {
comment.setComment_user(userService.findUserById(comment.getUser_id()));
}
obj.put("code", 0);
obj.put("msg", "");
obj.put("count", list.size());
obj.put("data", list);
return obj;
}
/**
*
*
* JSON 便
*
* @param page 1使
* @param limit 10使
* @param keyword
* @return JSON
*/
@RequestMapping("findAllCommentsPage")
@ResponseBody
public JSONObject findAllCommentsPage(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit, String keyword) {
// 调用评论服务的分页查询方法,传入页码、每页显示数量以及关键词,获取符合条件的评论信息分页结果。
PageInfo<Comment> info = commentService.findAllCommentsBySplitPage(page, limit, keyword);
for (Comment comment : info.getList()) {
// 通过用户服务根据评论中记录的用户ID查找对应的用户对象并设置到评论对象中补充用户信息。
comment.setComment_user(userService.findUserById(comment.getUser_id()));
}
JSONObject obj = new JSONObject();
obj.put("code", 0); // 设置成功状态码,表示分页查询操作成功执行。
obj.put("msg", ""); // 无额外消息,此处可根据实际业务需求在有特殊情况时设置相应提示消息。
obj.put("count", info.getTotal()); // 设置总记录数,即符合条件的评论总条数,从分页信息对象中获取。
obj.put("data", info.getList()); // 将包含完整用户信息的分页评论列表数据放入 "data" 字段返回给前端。
return obj;
}
/**
*
*
* JSON
* @param page 1
* @param limit 10
* @param keyword
* @return JSONObject JSON
*/
@RequestMapping("findAllCommentsPage")
@ResponseBody
public JSONObject findAllCommentsPage(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "pageSize", defaultValue = "10") Integer limit,
String keyword) {
PageInfo<Comment> info = commentService.findAllCommentsBySplitPage(page, limit, keyword);
// 遍历当前页的评论列表,为每条评论设置对应的评论用户信息
for (Comment comment : info.getList()) {
comment.setComment_user(userService.findUserById(comment.getUser_id()));
}
JSONObject obj = new JSONObject();
obj.put("code", 0);
obj.put("msg", "");
obj.put("count", info.getTotal());
obj.put("data", info.getList());
return obj;
}
/**
*
*
* IDID
*
*
*
* @param movie_id ID
* @param comment_content
* @param request
* @return JSON
*/
@RequestMapping("addCommentByUser")
@ResponseBody
public JSONObject addCommentByUser(@RequestParam("movie_id") long movie_id,
@RequestParam("comment_content") String comment_content, HttpServletRequest request) {
User user = (User) request.getSession().getAttribute("user");
JSONObject obj = new JSONObject();
if (user == null) {
// 用户未登录时设置状态码为200并返回相应提示消息给前端告知用户需登录后才可评论。
obj.put("code", 200);
obj.put("msg", "您未登录,登录之后才可评论~");
} else {
Comment comment = new Comment();
comment.setComment_content(comment_content);
comment.setMovie_id(movie_id);
comment.setUser_id(user.getUser_id());
comment.setComment_time(new Date());
// 调用评论服务的添加评论方法,将构建好的评论对象保存到数据库中,返回受影响的行数(通常大于 0 表示添加成功)。
Integer rs = commentService.addComemnt(comment);
if (rs > 0) {
// 如果评论添加成功调用电影服务的方法更新对应电影通过评论中的电影ID获取的评论数量返回受影响的行数通常大于 0 表示更新成功)。
Integer rs2 = movieService.addCommentCount(comment.getMovie_id());
if (rs2 > 0) {
obj.put("code", 0); // 设置成功状态码,表示评论发表及电影评论数更新均成功。
obj.put("msg", "评论成功~");
} else {
// 如果电影评论数更新失败,设置相应状态码和提示消息,告知前端评论发表部分成功,但电影评论数更新失败。
obj.put("code", 200);
obj.put("msg", "评论失败2~");
}
} else {
// 如果评论添加失败,设置相应状态码和提示消息,告知前端评论发表失败。
obj.put("code", 200);
obj.put("msg", "评论失败~");
}
}
return obj;
}
/**
*
* IDHttpServletRequest
* JSON
* @param movie_id ID
* @param comment_content
* @param request HttpServletRequest
* @return JSONObject JSON
*/
@RequestMapping("addCommentByUser")
@ResponseBody
public JSONObject addCommentByUser(@RequestParam("movie_id") long movie_id,
@RequestParam("comment_content") String comment_content,
HttpServletRequest request) {
User user = (User) request.getSession().getAttribute("user");
JSONObject obj = new JSONObject();
if (user == null) {
// 如果用户未登录,设置相应的状态码和提示信息
obj.put("code", 200);
obj.put("msg", "您未登录,登录之后才可评论~");
} else {
Comment comment = new Comment();
comment.setComment_content(comment_content);
comment.setMovie_id(movie_id);
comment.setUser_id(user.getUser_id());
comment.setComment_time(new Date());
// 调用评论服务层方法添加评论,返回受影响的行数
Integer rs = commentService.addComemnt(comment);
if (rs > 0) {
// 如果评论添加成功,尝试更新对应电影的评论数量
Integer rs2 = movieService.addCommentCount(comment.getMovie_id());
if (rs2 > 0) {
obj.put("code", 0);
obj.put("msg", "评论成功~");
} else {
obj.put("code", 200);
obj.put("msg", "评论失败2~");
}
} else {
obj.put("code", 200);
obj.put("msg", "评论失败~");
}
}
return obj;
}
/**
*
* ID
*
*
* @param comment_id ID
* @param comment_content
* @return JSON
*/
@RequestMapping("updateComment")
@ResponseBody
public JSONObject updateComment(@RequestParam("comment_id") long comment_id,
@RequestParam("comment_content") String comment_content) {
JSONObject obj = new JSONObject();
// 根据评论ID调用评论服务的方法查找对应的评论对象。
Comment comment = this.commentService.findCommentById(comment_id);
comment.setComment_time(new Date());
comment.setComment_content(comment_content);
// 调用评论服务的更新评论方法,将修改后的评论对象保存到数据库中,返回受影响的行数(通常大于 0 表示更新成功)。
Integer rs = commentService.updateComment(comment);
if (rs > 0) {
obj.put("code", 0); // 设置成功状态码,表示评论内容更新成功。
obj.put("msg", "修改成功~");
} else {
// 如果更新失败,设置相应状态码和提示消息,告知前端评论内容更新失败。
obj.put("code", 200);
obj.put("msg", "修改失败~");
}
return obj;
}
/**
*
* ID
* JSON
* @param comment_id ID
* @param comment_content
* @return JSONObject JSON
*/
@RequestMapping("updateComment")
@ResponseBody
public JSONObject updateComment(@RequestParam("comment_id") long comment_id,
@RequestParam("comment_content") String comment_content) {
JSONObject obj = new JSONObject();
Comment comment = this.commentService.findCommentById(comment_id);
comment.setComment_time(new Date());
comment.setComment_content(comment_content);
Integer rs = commentService.updateComment(comment);
if (rs > 0) {
obj.put("code", 0);
obj.put("msg", "修改成功~");
} else {
obj.put("code", 200);
obj.put("msg", "修改失败~");
}
return obj;
}
/**
*
* IDID
*
*
* @param comment_id ID
* @return JSON
*/
@RequestMapping("deleteComemnt")
@ResponseBody
public JSONObject deleteComment(@RequestParam("comment_id") long comment_id) {
JSONObject obj = new JSONObject();
// 先获取评论关联的电影ID通过评论服务根据评论ID查找评论对象再获取其中的电影ID。
Integer rs2 = movieService.delCommentCount(commentService.findCommentById(comment_id).getMovie_id());
// 调用评论服务的删除评论方法根据评论ID将评论从数据库中删除返回受影响的行数通常大于 0 表示删除成功)。
Integer rs = commentService.deleteComment(comment_id);
if (rs > 0) {
obj.put("code", 0); // 设置成功状态码,表示评论删除成功。
obj.put("msg", "删除成功~");
} else {
// 如果删除失败,设置相应状态码和提示消息,告知前端评论删除失败。
obj.put("code", 200);
obj.put("msg", "删除失败~");
}
return obj;
}
/**
*
* ID
* JSON
* @param comment_id ID
* @return JSONObject JSON
*/
@RequestMapping("deleteComemnt")
@ResponseBody
public JSONObject deleteComment(@RequestParam("comment_id") long comment_id) {
JSONObject obj = new JSONObject();
// 先获取要删除评论对应的电影ID然后调用电影服务层方法减少该电影的评论数量
Integer rs2 = movieService.delCommentCount(commentService.findCommentById(comment_id).getMovie_id());
Integer rs = commentService.deleteComment(comment_id);
if (rs > 0) {
obj.put("code", 0);
obj.put("msg", "删除成功~");
} else {
obj.put("code", 200);
obj.put("msg", "删除失败~");
}
return obj;
}
/**
*
*
* JSON 便
*
* @param page 1使
* @param limit 10使
* @param user_name
* @return JSON
*/
@RequestMapping("findCommentsByUserName")
@ResponseBody
public JSONObject findCommentsByUserName(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit, @RequestParam("user_name") String user_name) {
// 调用评论服务的分页查询方法,传入页码、每页显示数量以及用户名,获取符合条件的评论信息分页结果。
PageInfo<Comment> info = commentService.findCommentsByUserName(page, limit, user_name);
for (Comment comment : info.getList()) {
// 通过用户服务根据评论中记录的用户ID查找对应的用户对象并设置到评论对象中补充用户信息。
comment.setComment_user(userService.findUserById(comment.getUser_id()));
}
JSONObject obj = new JSONObject();
obj.put("code", 0); // 设置成功状态码,表示按用户名分页查询操作成功执行。
obj.put("msg", ""); // 无额外消息,此处可根据实际业务需求在有特殊情况时设置相应提示消息。
obj.put("count", info.getTotal()); // 设置总记录数,即符合用户名筛选条件的评论总条数,从分页信息对象中获取。
obj.put("data", info.getList()); // 将包含完整用户信息的分页评论列表数据放入 "data" 字段返回给前端。
return obj;
}
/**
*
*
* JSON
* @param page 1
* @param limit 10
* @param user_name
* @return JSONObject JSON
*/
@RequestMapping("findCommentsByUserName")
@ResponseBody
public JSONObject findCommentsByUserName(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit,
@RequestParam("user_name") String user_name) {
PageInfo<Comment> info = commentService.findCommentsByUserName(page, limit, user_name);
// 遍历当前页的评论列表,为每条评论设置对应的评论用户信息
for (Comment comment : info.getList()) {
comment.setComment_user(userService.findUserById(comment.getUser_id()));
}
JSONObject obj = new JSONObject();
obj.put("code", 0);
obj.put("msg", "");
obj.put("count", info.getTotal());
obj.put("data", info.getList());
return obj;
}
}

@ -21,215 +21,264 @@ import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSONObject;
import com.entity.Cinema;
import com.entity.Movie;
import com.service.ICinemaService; // 注入电影院服务接口,用于获取电影院相关信息,辅助电影管理业务逻辑
import com.service.IMovieService; // 注入电影服务接口,用于处理电影的各种业务操作,如查询、添加、删除、排序等
import com.util.UUIDUtil; // 用于生成唯一文件名的工具类,在文件上传场景中确保文件名的唯一性
import com.service.ICinemaService;
import com.service.IMovieService;
import com.util.UUIDUtil;
/**
*
*
*
* @author Wxj
*/
@Controller
@RequestMapping("/movie")
public class MovieController {
// 注入电影服务接口的实现类,通过该接口可以调用电影服务层提供的各种业务方法,实现对电影数据的操作。
@Resource
private IMovieService movieService;
// 注入电影院服务接口的实现类,用于获取电影院相关信息,例如查找放映某部电影的电影院列表等操作,与电影业务存在关联关系。
@Resource
private ICinemaService cinemaService;
// 1.电影详情页通过电影ID查找电影详情和对应的电影院列表用于前端展示电影的详细信息以及该电影在哪些电影院上映等情况。
@RequestMapping("findMovieById")
@ResponseBody
public JSONObject findMovieById(@RequestParam("movie_id") long movie_id) {
JSONObject obj = new JSONObject();
// 调用电影服务的方法根据传入的电影ID查找对应的电影对象获取电影详情信息。
Movie movie = movieService.findMovieById(movie_id);
// 调用电影院服务的方法查找放映该电影通过传入电影ID的电影院列表。
List<Cinema> list = this.cinemaService.findCinemasByMovieId(movie_id);
obj.put("code", 0);
// 将电影详情数据放入 "data" 字段返回给前端。
obj.put("data", movie);
// 将电影院列表数据放入 "cinemaList" 字段返回给前端,方便前端展示该电影的上映影院信息。
obj.put("cinemaList", list);
// 将电影院列表的大小(即放映该电影的影院数量)放入 "cinemaCount" 字段返回给前端。
obj.put("cinemaCount", list.size());
return obj;
}
// 2.首页电影列表,支持按名称搜索、按类型搜索,以及按时间、参评人数、评分排序,用于前端展示多种条件筛选和排序后的电影列表信息,满足不同用户查找电影的需求。
@RequestMapping("findAllMovies")
@ResponseBody
public JSONObject findAllMovies() {
JSONObject obj = new JSONObject();
// 获取正在上映的电影列表,这里参数 1 可能表示正在上映的筛选条件(具体由服务层方法定义)。
List<Movie> list = movieService.findAllMovies(1);
// 获取即将上映的电影列表,这里参数 0 可能表示即将上映的筛选条件(具体由服务层方法定义)。
List<Movie> upcomingList = movieService.findAllMovies(0);
// 获取按票房排序的电影列表,调用服务层按票房排序电影的方法。
List<Movie> offList = movieService.sortMovieByBoxOffice();
String type[] = {"喜剧", "动作", "爱情", "动画", "科幻", "惊悚", "冒险", "犯罪", "悬疑"};
ArrayList<Object> typeArr = new ArrayList<Object>();
for (int i = 0; i < type.length; i++) {
// 根据电影类型查找对应的电影列表,遍历各种类型进行查询。
List<Movie> movieList = this.movieService.findMoviesLikeType(type[i]);
float boxOffice = 0;
for (int j = 0; j < movieList.size(); j++) {
// 累加该类型电影的票房,用于统计各类型电影的总票房情况。
boxOffice += movieList.get(j).getMovie_boxOffice();
}
JSONObject typeJson = new JSONObject();
// 将电影类型作为键,该类型电影的总票房作为值,放入 JSON 对象中,方便前端按类型展示票房情况。
typeJson.put(type[i], boxOffice);
typeArr.add(typeJson);
}
obj.put("code", 0);
// 设置正在上映电影列表的数量,放入 "count" 字段返回给前端。
obj.put("count", list.size());
// 设置即将上映电影列表的数量,放入 "upcomingCount" 字段返回给前端。
obj.put("upcomingCount", upcomingList.size());
// 将正在上映的电影列表数据放入 "data" 字段返回给前端。
obj.put("data", list);
// 将即将上映的电影列表数据放入 "data1" 字段返回给前端。
obj.put("data1", upcomingList);
// 将按票房排序的电影列表数据放入 "sort" 字段返回给前端。
obj.put("sort", offList);
// 将按类型统计票房的信息列表放入 "type" 字段返回给前端,方便前端展示各类型电影票房情况。
obj.put("type", typeArr);
return obj;
}
// 3.按名称搜索电影,根据用户输入的电影名称查找匹配的电影列表,返回给前端展示搜索结果。
@RequestMapping("findMoviesByName")
@ResponseBody
public JSONObject findMoviesByName(@RequestParam("name") String name) {
JSONObject obj = new JSONObject();
// 调用电影服务的方法,根据传入的电影名称进行模糊查询,获取匹配的电影列表。
List<Movie> list = movieService.findMoviesLikeName(name);
obj.put("code", 0);
// 设置查询到的电影列表的数量,放入 "count" 字段返回给前端。
obj.put("count", list.size());
// 将查询到的电影列表数据放入 "data" 字段返回给前端。
obj.put("data", list);
return obj;
}
// 4.按类型搜索电影,根据用户指定的电影类型查找相应的电影列表,并返回给前端展示搜索结果。
@RequestMapping("findMoviesByType")
@ResponseBody
public JSONObject findMoviesByType(@RequestParam("type") String type) {
JSONObject obj = new JSONObject();
// 调用电影服务的方法,根据传入的电影类型进行模糊查询,获取匹配的电影列表。
List<Movie> list = movieService.findMoviesLikeType(type);
obj.put("code", 0);
// 设置查询到的电影列表的数量,放入 "count" 字段返回给前端。
obj.put("count", list.size());
// 将查询到的电影列表数据放入 "data" 字段返回给前端。
obj.put("data", list);
return obj;
}
// 5.按时间、评价人数、评分排序电影,根据用户选择的排序方式(如热门、时间、评价)对电影列表进行相应排序,并返回给前端展示排序后的结果。
@RequestMapping("sortAllMovies")
@ResponseBody
public JSONObject sortAllMovies(@RequestParam("order") String order) {
JSONObject obj = new JSONObject();
List<Movie> list = new ArrayList<Movie>();
switch (order) {
case "热门":
// 调用电影服务的按评价人数排序电影的方法,获取排序后的电影列表,这里 "热门" 可能对应按评价人数排序(具体由服务层定义)。
list = movieService.sortMovieByCount();
break;
case "时间":
// 调用电影服务的按时间排序电影的方法,获取排序后的电影列表,按照时间先后顺序进行排序。
list = movieService.sortMovieByDate();
break;
case "评价":
// 调用电影服务的按评分排序电影的方法,获取排序后的电影列表,按照电影评分高低进行排序。
list = movieService.sortMovieByScore();
break;
}
obj.put("code", 0);
// 设置排序后电影列表的数量,放入 "count" 字段返回给前端。
obj.put("count", list.size());
// 将排序后的电影列表数据放入 "data" 字段返回给前端。
obj.put("data", list);
return obj;
}
// 6.删除电影根据传入的电影ID执行删除电影的操作并根据删除结果返回相应提示信息给前端告知用户下架是否成功。
@RequestMapping("deleteMovie")
@ResponseBody
public JSONObject deleteMovie(@RequestParam("movie_id") long movie_id) {
JSONObject obj = new JSONObject();
// 调用电影服务的删除电影方法传入电影ID进行删除操作返回受影响的行数通常大于 0 表示删除成功)。
Integer rs = movieService.deleteMovie(movie_id);
if (rs > 0) {
obj.put("code", 0);
obj.put("msg", "下架成功~");
} else {
obj.put("code", 200);
obj.put("msg", "下架失败~");
}
return obj;
}
// 7.添加电影,包括上传电影海报和设置电影信息,处理添加新电影的请求,涉及文件上传、电影基本信息设置以及保存到数据库等操作,根据结果返回相应提示信息给前端。
@RequestMapping("addMovie")
@ResponseBody
public JSONObject addMovie(@RequestParam(value = "file", required = false) MultipartFile file, Movie movie,
HttpServletRequest request) throws IOException {
// 获取上传文件(电影海报)的原始名称,用于记录和后续处理(如生成唯一文件名等操作)。
String str = file.getOriginalFilename();
System.out.println("file:" + str);
// 使用 UUIDUtil 工具类生成唯一文件名,结合原始文件名的后缀,确保文件名在服务器上的唯一性,方便文件管理。
String name = UUIDUtil.getUUID() + str.substring(str.lastIndexOf("."));
System.out.println("name:" + name);
// 获取文件存储在服务器上的完整路径,结合服务器上下文路径和生成的唯一文件名,确定文件最终存储位置。
String path = request.getServletContext().getRealPath("/upload/movies") + "/" + name;
System.out.println("path:" + path);
// 生成存储在数据库中的相对路径,方便在数据库中记录文件位置,后续可根据此路径查找和展示海报图片。
String filePath = "../upload/movies/" + name;
// 设置电影对象的海报路径属性,将生成的相对路径赋值给电影对象,以便后续保存电影信息时一起存入数据库。
movie.setMovie_picture(filePath);
Date date = new Date();
// 修复获取年份和月份的bug将 Java 的 Date 类型转换为 java.sql.Date 类型,用于设置电影的上映日期,确保日期格式符合数据库要求。
java.sql.Date releaseDate = new java.sql.Date(date.getYear() + 1900, date.getMonth() + 1, date.getDay());
//SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd");
// 随机生成一个 5 - 9 之间的评分,通过 Random 类生成随机数,并结合一定的计算来控制评分范围。
float random = 5 + (new Random().nextFloat() * 4);
// 使用 DecimalFormat 格式化评分数字,使其保留一位小数,符合常见的评分展示格式要求。
DecimalFormat fnum = new DecimalFormat("##0.0");
String score = fnum.format(random);
// 将格式化后的评分设置为电影对象的评分属性,更新电影的评分信息。
movie.setMovie_score(Float.parseFloat(score));
// 设置电影对象的上映日期属性,将前面生成的符合数据库要求的日期赋值给电影对象,完善电影信息。
movie.setReleaseDate(releaseDate);
// 调用电影服务的添加电影方法,将包含完整信息(包括海报路径、评分、上映日期等)的电影对象保存到数据库中,返回受影响的行数(通常大于 0 表示添加成功)。
Integer rs = movieService.addMovie(movie);
JSONObject obj = new JSONObject();
if (rs > 0) {
// 如果添加电影成功,将上传的文件保存到指定路径,即将电影海报文件存储到服务器相应位置。
file.transferTo(new File(path));
System.out.println("文件写入成功,Path:" + path);
obj.put("code", 0);
obj.put("msg", "添加成功~");
} else {
obj.put("code", 200);
obj.put("msg", "添加失败~");
}
return obj;
}
// 8.更新电影,这里可能后续需要补充具体的更新电影逻辑代码,目前只是一个方法定义的占位,比如接收更新后的电影信息,调用服务层的更新方法等操作。
@RequestMapping("updateMovie")
@ResponseBody
public JSONObject updateMovie() {
// 此处代码暂未实现具体逻辑,后续可根据业务需求添加更新电影信息的相关代码,例如接收前端传入的更新后的电影对象,
// 调用 movieService 的相应更新方法进行数据库更新操作,并根据更新结果返回合适的提示信息给前端等操作。
JSONObject obj = new JSONObject();
return obj;
}
// 注入电影服务层接口,用于调用电影相关的业务逻辑方法
@Resource
private IMovieService movieService;
// 注入影院服务层接口,可能用于获取与电影相关的影院信息等操作
@Resource
private ICinemaService cinemaService;
/**
* ID
* IDJSON
* @param movie_id ID
* @return JSONObject JSON
*/
@RequestMapping("findMovieById")
@ResponseBody
public JSONObject findMovieById(@RequestParam("movie_id") long movie_id) {
JSONObject obj = new JSONObject();
// 调用电影服务层方法根据ID获取电影对象
Movie movie = movieService.findMovieById(movie_id);
// 调用影院服务层方法获取播放该电影的影院列表
List<Cinema> list = this.cinemaService.findCinemasByMovieId(movie_id);
obj.put("code", 0);
obj.put("data", movie);
obj.put("cinemaList", list);
obj.put("cinemaCount", list.size());
return obj;
}
/**
*
* JSON
* @return JSONObject JSON
*/
@RequestMapping("findAllMovies")
@ResponseBody
public JSONObject findAllMovies() {
JSONObject obj = new JSONObject();
// 获取正在上映的电影列表此处传入参数1可能表示正在上映的标识具体需看服务层实现逻辑
List<Movie> list = movieService.findAllMovies(1);
// 获取即将上映的电影列表传入参数0可能表示即将上映的标识
List<Movie> upcomingList = movieService.findAllMovies(0);
// 获取按票房排序的电影列表
List<Movie> offList = movieService.sortMovieByBoxOffice();
String type[] = {"喜剧", "动作", "爱情", "动画", "科幻", "惊悚", "冒险", "犯罪", "悬疑"};
ArrayList<Object> typeArr = new ArrayList<Object>();
for (int i = 0; i < type.length; i++) {
// 根据电影类型获取对应类型的电影列表
List<Movie> movieList = this.movieService.findMoviesLikeType(type[i]);
float boxOffice = 0;
for (int j = 0; j < movieList.size(); j++) {
// 累加该类型电影的票房
boxOffice += movieList.get(j).getMovie_boxOffice();
}
JSONObject typeJson = new JSONObject();
typeJson.put(type[i], boxOffice);
typeArr.add(typeJson);
}
obj.put("code", 0);
obj.put("count", list.size());
obj.put("upcomingCount", upcomingList.size());
obj.put("data", list);
obj.put("data1", upcomingList);
obj.put("sort", offList);
obj.put("type", typeArr);
return obj;
}
/**
*
* JSON
* @param name
* @return JSONObject JSON
*/
@RequestMapping("findMoviesByName")
@ResponseBody
public JSONObject findMoviesByName(@RequestParam("name") String name) {
JSONObject obj = new JSONObject();
List<Movie> list = movieService.findMoviesLikeName(name);
obj.put("code", 0);
obj.put("count", list.size());
obj.put("data", list);
return obj;
}
/**
*
* JSON
* @param type
* @return JSONObject JSON
*/
@RequestMapping("findMoviesByType")
@ResponseBody
public JSONObject findMoviesByType(@RequestParam("type") String type) {
JSONObject obj = new JSONObject();
List<Movie> list = movieService.findMoviesLikeType(type);
obj.put("code", 0);
obj.put("count", list.size());
obj.put("data", list);
return obj;
}
/**
*
* JSON
* @param order "热门""时间""评价"
* @return JSONObject JSON
*/
@RequestMapping("sortAllMovies")
@ResponseBody
public JSONObject sortAllMovies(@RequestParam("order") String order) {
JSONObject obj = new JSONObject();
List<Movie> list = new ArrayList<Movie>();
switch (order) {
case "热门":
list = movieService.sortMovieByCount();
break;
case "时间":
list = movieService.sortMovieByDate();
break;
case "评价":
list = movieService.sortMovieByScore();
break;
}
obj.put("code", 0);
obj.put("count", list.size());
obj.put("data", list);
return obj;
}
/**
*
* IDJSON
* @param movie_id ID
* @return JSONObject JSON
*/
@RequestMapping("deleteMovie")
@ResponseBody
public JSONObject deleteMovie(@RequestParam("movie_id") long movie_id) {
JSONObject obj = new JSONObject();
Integer rs = movieService.deleteMovie(movie_id);
if (rs > 0) {
obj.put("code", 0);
obj.put("msg", "下架成功~");
} else {
obj.put("code", 200);
obj.put("msg", "下架失败~");
}
return obj;
}
/**
*
*
* JSON
* @param file
* @param movie Movie
* @param request HttpServletRequest
* @return JSONObject JSON
* @throws IOException IO
*/
@RequestMapping("addMovie")
@ResponseBody
public JSONObject addMovie(@RequestParam(value = "file", required = false) MultipartFile file, Movie movie,
HttpServletRequest request) throws IOException {
// 获取上传文件的原始文件名
String str = file.getOriginalFilename();
System.out.println("file:" + str);
// 生成唯一的文件名使用UUIDUtil工具类生成UUID并结合原文件名的后缀
String name = UUIDUtil.getUUID() + str.substring(str.lastIndexOf("."));
System.out.println("name:" + name);
// 获取文件保存的绝对路径(服务器端的路径)
String path = request.getServletContext().getRealPath("/upload/movies") + "/" + name;
System.out.println("path:" + path);
// 设置相对路径,用于保存到数据库等操作(相对路径格式,具体需根据前端展示要求等情况确定是否合适)
String filePath = "../upload/movies/" + name;
movie.setMovie_picture(filePath);
Date date = new Date();
// 将util.Date类型转换为sql.Date类型此处代码可能存在问题建议使用Calendar来准确设置日期因为getYear、getMonth、getDay的返回值不符合常规预期
java.sql.Date releaseDate = new java.sql.Date(date.getYear(), date.getMonth(), date.getDay());
//SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd");
// 随机生成一个5到9之间的评分包含5不包含9并格式化为保留一位小数的字符串
float random = 5 + (new Random().nextFloat() * 4);
DecimalFormat fnum = new DecimalFormat("##0.0");
String score = fnum.format(random);
movie.setMovie_score(Float.parseFloat(score));
movie.setReleaseDate(releaseDate);
Integer rs = movieService.addMovie(movie);
JSONObject obj = new JSONObject();
if (rs > 0) {
// 将文件保存到指定的服务器路径
file.transferTo(new File(path));
System.out.println("文件写入成功,Path:" + path);
obj.put("code", 0);
obj.put("msg", "添加成功~");
} else {
obj.put("code", 200);
obj.put("msg", "添加失败~");
}
return obj;
}
/**
*
* 沿
* JSON
* @param file
* @param movie Movie
* @param request HttpServletRequest
* @return JSONObject JSON
* @throws IOException IO
*/
@RequestMapping("updateMovie")
@ResponseBody
public JSONObject updateMovie(@RequestParam(value = "file", required = false) MultipartFile file, Movie movie,
HttpServletRequest request) throws IOException {
JSONObject obj = new JSONObject();
if (file!= null) {
String str = file.getOriginalFilename();
System.out.println("file:" + str);
String name = UUIDUtil.getUUID() + str.substring(str.lastIndexOf("."));
System.out.println("name:" + name);
String path = request.getServletContext().getRealPath("/upload/movies") + "/" + name;
System.out.println("path:" + path);
String filePath = "../upload/movies/" + name;
file.transferTo(new File(path));
System.out.println("文件写入成功,Path:" + path);
movie.setMovie_picture(filePath);
} else {
// 如果没有上传新的海报文件,则获取原电影的海报信息设置给要修改的电影对象
Movie oldMovie = this.movieService.findMovieById(movie.getMovie_id());
movie.setMovie_picture(oldMovie.getMovie_picture());
}
Integer rs = movieService.updateMovie(movie);
if (rs > 0) {
obj.put("code", 0);
obj.put("msg", "修改成功~");
} else {
obj.put("code", 200);
obj.put("msg", "修改失败~");
}
return obj;
}
}

@ -21,171 +21,193 @@ import com.service.IMovieService;
import com.service.IOrderService;
import com.service.IScheduleService;
// 声明这是一个Spring MVC控制器处理与订单相关的请求RequestMapping注解指定了该控制器处理请求的基础路径为 "/order"
@Controller
@RequestMapping("/order")
public class OrderController {
// 注入订单服务,用于处理订单相关的业务逻辑,例如订单的查询、添加、修改等操作
// 注入订单服务层接口,用于调用订单相关的业务逻辑方法
@Resource
private IOrderService orderService;
// 注入排期服务,用于处理排期(如座位状态)的更新,比如在支付、退票成功等操作时对相应场次座位数进行增减操作
// 注入排片服务层接口,用于处理与排片相关的操作,比如座位数量增减等(在支付、退票成功时涉及)
@Resource
private IScheduleService scheduleService;
// 支付、退票成功时座位数的增减相关操作会调用此服务提供的方法来实现
// 注入电影服务,用于处理电影票房的更新,在支付、退票成功等场景下对电影票房数据进行相应的增减操作
private IScheduleService scheduleService;
// 注入电影服务层接口,用于处理与电影相关的操作,比如票房增减等(在支付、退票成功时涉及)
@Resource
private IMovieService movieService;
// 根据订单ID查找订单详情并返回给前端前端可根据返回结果展示订单的详细信息
private IMovieService movieService;
/**
* ID
* IDJSON
* @param order_id ID
* @return JSONObject JSON
*/
@RequestMapping("findOrderById")
@ResponseBody
public JSONObject findOrderById(@RequestParam("order_id") String order_id) {
JSONObject obj = new JSONObject();
// 调用订单服务的方法根据传入的订单ID查找对应的订单对象
Order order = orderService.findOrderById(order_id);
List<Order> list = new ArrayList<>();
List<Order> list = new ArrayList<Order>();
list.add(order);
// 设置返回的状态码为0表示查找成功
obj.put("code", 0);
obj.put("code", 0);
obj.put("msg", "");
// 设置返回数据的数量这里因为只查找了一个订单所以数量为1即list的大小
obj.put("count", list.size());
// 将查找到的订单数据放入 "data" 字段返回给前端
obj.put("data", list);
return obj;
}
// 根据用户名分页查找订单,并返回给前端,方便前端按照分页形式展示该用户的订单信息
/**
*
* JSON
* @param page 1
* @param limit 10
* @param user_name
* @return JSONObject JSON
*/
@RequestMapping("findOrderByUserName")
@ResponseBody
public JSONObject findOrderByUserName(
@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit,
@RequestParam("user_name") String user_name) {
// 调用订单服务的分页查询方法,根据传入的页码、每页显示数量以及用户名查找对应的订单信息分页结果
public JSONObject findOrderByUserName(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit,
@RequestParam("user_name") String user_name) {
PageInfo<Order> info = orderService.findOrdersByUserName(page, limit, user_name);
JSONObject obj = new JSONObject();
obj.put("code", 0);
obj.put("msg", "");
// 设置总记录数,即符合条件的订单总数,从分页信息对象中获取
obj.put("count", info.getTotal());
// 将分页后的订单列表数据放入 "data" 字段返回给前端
obj.put("data", info.getList());
return obj;
}
// 根据用户名查找用户的退票订单,并返回给前端,用于前端展示该用户的退票相关订单信息
/**
* 退
* 退退退JSON
* @param user_name
* @return JSONObject 退JSON
*/
@RequestMapping("findRefundOrderByUser")
@ResponseBody
public JSONObject findRefundOrderByUser(@RequestParam("user_name") String user_name) {
JSONObject obj = new JSONObject();
// 调用订单服务的方法,根据用户名查找该用户的退票订单列表
List<Order> list = this.orderService.findRefundOrderByUserName(user_name);
obj.put("code", 0);
obj.put("msg", "");
// 设置退票订单的数量,即列表的大小
obj.put("count", list.size());
// 将查找到的退票订单列表数据放入 "data" 字段返回给前端
obj.put("data", list);
return obj;
}
// 查找所有订单,并返回给前端,可用于前端展示系统中所有的订单信息(可能用于管理后台等场景)
/**
*
* JSON
* @return JSONObject JSON
*/
@RequestMapping("findAllOrders")
@ResponseBody
public JSONObject findAllOrders() {
JSONObject obj = new JSONObject();
// 调用订单服务的方法获取所有订单列表
List<Order> list = orderService.findAllOrders();
obj.put("code", 0);
obj.put("msg", "");
// 设置所有订单的数量,即列表的大小
obj.put("count", list.size());
// 将所有订单列表数据放入 "data" 字段返回给前端
obj.put("data", list);
return obj;
}
// 根据关键词分页查找所有订单,并返回给前端,方便前端按照分页形式展示经过关键词筛选后的订单信息
/**
*
* JSON
* @param page 1
* @param limit 10
* @param keyword
* @return JSONObject JSON
*/
@RequestMapping("findAllOrdersPage")
@ResponseBody
public JSONObject findAllOrdersPage(
@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit,
String keyword) {
// 调用订单服务的分页查询方法,根据传入的页码、每页显示数量以及关键词查找对应的订单信息分页结果
public JSONObject findAllOrdersPage(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit,
String keyword) {
PageInfo<Order> info = orderService.findAllOrdersBySplitPage(page, limit, keyword);
JSONObject obj = new JSONObject();
obj.put("code", 0);
obj.put("msg", "");
// 设置总记录数,即符合关键词筛选条件的订单总数,从分页信息对象中获取
obj.put("count", info.getTotal());
// 将分页后的订单列表数据放入 "data" 字段返回给前端
obj.put("data", info.getList());
return obj;
}
// 查找所有退票订单,并返回给前端(分页),用于前端分页展示系统中的所有退票订单信息(可能用于统计、管理等场景)
/**
* 退
* 0退退退退JSON
* @param page 1
* @param limit 10
* @return JSONObject 退JSON
*/
@RequestMapping("findAllRefundOrder")
@ResponseBody
public JSONObject findAllRefundOrder(
@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit) {
public JSONObject findAllRefundOrder(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit) {
JSONObject obj = new JSONObject();
// 调用订单服务的方法根据页码和每页显示数量查找处于退票状态这里0可能表示退票状态的订单信息分页结果
PageInfo<Order> info = orderService.findOrdersByState(page, limit, 0);
PageInfo<Order> info = orderService.findOrdersByState(page, limit, 0);
obj.put("code", 0);
obj.put("msg", "");
// 设置总记录数,即符合退票状态筛选条件的订单总数,从分页信息对象中获取
obj.put("count", info.getTotal());
// 将分页后的退票订单列表数据放入 "data" 字段返回给前端
obj.put("data", info.getList());
return obj;
}
// 购买电影票的逻辑处理接收排期ID、座位信息、票价以及HttpServletRequest对象等参数完成订单创建、座位数更新等操作
/**
*
* IDHttpServletRequest
* JSON
* @param schedule_id ID
* @param position[]
* @param price
* @param request HttpServletRequest
* @return JSONObject JSON
*/
@RequestMapping("buyTickets")
@ResponseBody
public JSONObject buyTickets(
@RequestParam("schedule_id") long schedule_id,
@RequestParam("position[]") String[] position,
@RequestParam("price") int price,
HttpServletRequest request) {
// 从会话中获取当前用户,用于确定购票的用户信息,若未登录则无法购票
public JSONObject buyTickets(@RequestParam("schedule_id") long schedule_id,
@RequestParam("position[]") String[] position,
@RequestParam("price") int price,
HttpServletRequest request) {
User user = (User) request.getSession().getAttribute("user");
JSONObject obj = new JSONObject();
if (user == null) {
// 用户未登录时设置状态码为200并返回相应提示消息给前端告知用户需登录后才可购票
// 如果用户未登录,设置相应的状态码和提示信息
obj.put("code", 200);
obj.put("msg", "您未登录,登录之后才可购票~");
} else {
int done = 0; // 记录成功购买的座位数初始化为0
// 计算每个座位的单价,用总票价除以购买的座位数量
int order_price = price / position.length;
String user_id = ""; // 格式化后的用户ID初始化为空字符串后续根据用户ID长度进行格式化处理
// 根据用户ID的长度进行格式化确保用户ID格式统一可能用于生成订单ID等逻辑需要
int done = 0;
// 计算每个座位的单价(总票价除以座位数量)
int order_price = price / position.length;
String user_id = "";
// 根据用户ID的长度进行格式化补0使其达到固定长度可能是为了生成订单ID等操作的格式统一需求
switch (String.valueOf(user.getUser_id()).length()) {
case 1: user_id = "000" + String.valueOf(user.getUser_id()); break;
case 2: user_id = "00" + String.valueOf(user.getUser_id()); break;
case 3: user_id = "0" + String.valueOf(user.getUser_id()); break;
case 4: user_id = String.valueOf(user.getUser_id()); break;
case 1:
user_id = "000" + String.valueOf(user.getUser_id());
break;
case 2:
user_id = "00" + String.valueOf(user.getUser_id());
break;
case 3:
user_id = "0" + String.valueOf(user.getUser_id());
break;
case 4:
user_id = String.valueOf(user.getUser_id());
break;
}
// 遍历要购买的座位数组,为每个座位创建订单并进行相关业务逻辑处理
for (int i = 0; i < position.length; i++) {
Order order = new Order();
String order_id = "";
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("YYYYMMdd");
// 生成订单ID格式为日期+用户ID+座位索引),先添加日期部分
// 生成订单ID的一部分,使用当前日期格式化后的字符串
order_id += dateFormat.format(date);
order_id += user_id;
String index = "";
// 根据座位字符串的长度进行不同的格式化处理提取出座位索引部分用于生成订单ID
// 根据座位位置信息的长度不同,进行格式处理,去除"排"、"座"等文字并可能补0生成订单ID的另一部分
switch (position[i].length()) {
case 4:
case 4:
index = "0" + position[i].replaceAll("排", "0");
index = index.replaceAll("座", "");
break;
@ -199,27 +221,81 @@ public class OrderController {
}
break;
case 6:
index = position[i].replaceAll("排", "");
index = position[i].replaceAll("排", "");
index = index.replaceAll("座", "");
break;
}
order_id += index;
// 设置订单对象的各项属性如订单ID、座位位置、对应的排期ID、用户ID、单价以及下单时间等
order.setOrder_id(order_id);
order.setOrder_position(position[i]);
order.setSchedule_id(schedule_id);
order.setUser_id(user.getUser_id());
order.setOrder_price(order_price);
order.setOrder_time(new Date());
// 添加订单到数据库,调用订单服务的添加订单方法
// 调用订单服务层方法添加订单,返回受影响的行数
Integer rs = this.orderService.addOrder(order);
// 更新排期的剩余座位数,调用排期服务的相应方法减少剩余座位数,每成功添加一个订单就减少一个座位
// 调用排片服务层方法减少对应排片的剩余座位数量
Integer rs1 = this.scheduleService.delScheduleRemain(schedule_id);
done++;
}
// 此处代码可能还需要处理一些后续逻辑比如判断所有座位是否都购买成功根据done与position.length对比
// 以及是否需要更新电影票房调用movieService相关方法等操作目前代码似乎未完整展示这些逻辑。
if (done == position.length) {
// 将票价转换为以万为单位的浮点数(可能是票房统计的单位要求)
float sum = (float) price / 10000;
// 调用电影服务层方法更新对应电影的票房(根据订单总价调整票房数值)
Integer rs2 = this.movieService.changeMovieBoxOffice(sum, this.scheduleService.findScheduleById(schedule_id).getMovie_id());
obj.put("code", 0);
obj.put("msg", "购票成功~");
} else {
obj.put("code", 200);
obj.put("msg", "购票失败~");
}
}
return obj;
}
/**
* 退
* ID退JSON
* @param order_id 退ID
* @return JSONObject 退JSON
*/
@RequestMapping("applyForRefund")
@ResponseBody
public JSONObject applyForRefund(@RequestParam("order_id") String order_id) {
JSONObject obj = new JSONObject();
Integer rs = orderService.updateOrderStateToRefund(order_id);
if (rs > 0) {
obj.put("code", 0);
obj.put("msg", "退票申请已发送~");
} else {
obj.put("code", 200);
obj.put("msg", "操作失败~");
}
return obj;
}
/**
* 退
* ID退JSON
* @param order_id 退ID
* @return JSONObject 退JSON
*/
@RequestMapping("agreeForRefund")
@ResponseBody
public JSONObject agreeForRefund(@RequestParam("order_id") String order_id) {
JSONObject obj = new JSONObject();
Integer rs = this.orderService.updateOrderStateToRefunded(order_id);
if (rs > 0) {
Order order = this.orderService.findOrderById(order_id);
int price = order.getOrder_price();
long movie_id = order.getOrder_schedule().getMovie_id();
// 将票价转换为以万为单位的浮点数(与票房统计的单位要求对应),并更新对应电影的票房
Integer rs2 = this.movieService.changeMovieBoxOffice((float) price / 10000, movie_id);
obj.put("code", 0);
obj.put("msg", "退票成功");
} else {
obj.put("code", 200);
obj.put("msg", "退票失败");
}
return obj;
}

@ -23,36 +23,28 @@ import com.service.IHallService;
import com.service.IMovieService;
import com.service.IScheduleService;
/**
* Schedule
*
*
* JSON
*/
@Controller
@RequestMapping("/schedule")
public class ScheduleController {
// 注入场次服务层接口,用于调用场次相关的业务逻辑方法,如查询、添加、修改、删除场次等操作。
// 注入排片服务层接口,用于调用排片相关的业务逻辑方法
@Resource
private IScheduleService scheduleService;
// 注入电影服务层接口,用于获取电影相关信息,例如根据电影名查找电影编号等操作,辅助场次相关业务逻辑处理。
// 注入电影服务层接口,可能用于获取电影相关信息等操作比如根据电影名称查找电影ID等
@Resource
private IMovieService movieService;
// 注入影院服务层接口,用于获取影院相关信息,可能在查询场次与影院关联等业务场景中使用。
// 注入影院服务层接口,用于获取影院相关信息(如查找影院列表、根据电影查找放映该电影的影院等)
@Resource
private ICinemaService cinemaService;
// 注入放映厅服务层接口,用于获取放映厅相关信息,比如根据影院和放映厅名称查找放映厅等操作,与场次的关联查询等业务有关。
// 注入影厅服务层接口用于获取影厅相关信息如根据影院和影厅名称查找影厅、根据影院ID查找影厅列表等
@Resource
private IHallService hallService;
/**
*
* scheduleService
* JSONObject 0 "data"
*
* @param schedule_id
* @return JSONObject JSON "code" "data"
* ID
* IDJSON
* @param schedule_id ID
* @return JSONObject JSON
*/
@RequestMapping("findScheduleById")
@ResponseBody
@ -65,15 +57,13 @@ public class ScheduleController {
}
/**
*
* scheduleService
* incomeArr
* JSONObject
*
* @param page 1使
* @param limit 10使
* @param schedule_state 1 0
* @return JSONObject JSON "code""count""data""income"
*
*
* JSON
* @param page 1
* @param limit 10
* @param schedule_state
* @return JSONObject JSON
*/
@RequestMapping("findAllScheduleByState")
@ResponseBody
@ -99,14 +89,13 @@ public class ScheduleController {
}
/**
*
* scheduleService
*
* JSONObject
*
* @param page 1使
* @param limit 10使
* @return JSONObject JSON "code""count""data""movieName""cinema""income"
*
*
*
* JSON
* @param page 1
* @param limit 10
* @return JSONObject JSON
*/
@RequestMapping("findAllSchedule")
@ResponseBody
@ -150,14 +139,13 @@ public class ScheduleController {
}
/**
*
* scheduleService
* incomeArr JSONObject
*
* @param page 1使
* @param limit 10使
* @param movie_name
* @return JSONObject JSON "code""count""data""income"
*
*
* JSON
* @param page 1
* @param limit 10
* @param movie_name
* @return JSONObject JSON
*/
@RequestMapping("findScheduleByMovieName")
@ResponseBody
@ -183,20 +171,12 @@ public class ScheduleController {
}
/**
*
* findScheduleByMovieName scheduleService
* incomeArr JSONObject
*
* @param page 1使
* @param limit 10使
* @param movie_name
* @return JSONObject JSON "code""count""data""income"
*/
@RequestMapping("findOffScheduleByMovieName")
@ResponseBody
public JSONObject findOffScheduleByMovieName(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit,
@RequestParam("movie_name") String movie_name) {
*
*
* JSON
* @param page 1
* @param limit defaultValue="10") Integer limit,
@RequestParam("movie_name") String movie_name) {
JSONObject obj = new JSONObject();
PageInfo<Schedule> info = scheduleService.findOffScheduleByMovieName(page, limit, movie_name);
ArrayList<Integer> incomeArr = new ArrayList<Integer>();
@ -216,18 +196,16 @@ public class ScheduleController {
}
/**
*
* scheduleService
* JSONObject
*
* @param cinema_id
* @param movie_id
* @return JSONObject JSON "code""count""data"
* IDID
* IDIDJSON
* @param cinema_id ID
* @param movie_id ID
* @return JSONObject JSON
*/
@RequestMapping("findScheduleByCinemaAndMovie")
@ResponseBody
public JSONObject findScheduleByCinemaAndMovie(@RequestParam("cinema_id") long cinema_id,
@RequestParam("movie_id") long movie_id) {
@RequestParam("movie_id") long movie_id) {
JSONObject obj = new JSONObject();
List<Schedule> list = scheduleService.findScheduleByCineamIdAndMovieId(cinema_id, movie_id);
obj.put("code", 0);
@ -237,17 +215,15 @@ public class ScheduleController {
}
/**
*
*
* scheduleService
* JSONObject
*
* @param movie_name
* @param hall_name
* @param cinema_name
* @param schedule_price
* @param schedule_startTime
* @return JSONObject JSON "code" "mgs"
*
* IDID
* JSON
* @param movie_name ID
* @param hall_name ID
* @param cinema_name
* @param schedule_price
* @param schedule_startTime
* @return JSONObject JSON
*/
@RequestMapping("addSchedule")
@ResponseBody
@ -276,13 +252,12 @@ public class ScheduleController {
}
/**
*
*
* scheduleService JSONObject
*
* @param schedule_id
* @param schedule_price
* @return JSONObject JSON "code" "mgs"
*
* ID
* JSON
* @param schedule_id ID
* @param schedule_price
* @return JSONObject JSON
*/
@RequestMapping("updateSchedulePrice")
@ResponseBody
@ -301,4 +276,60 @@ public class ScheduleController {
obj.put("mgs", "修改失败~");
}
return obj;
}
}
/**
*
* IDJSON
* @param schedule_id ID
* @return JSONObject JSON
*/
@RequestMapping("offlineSchedule")
@ResponseBody
public JSONObject offlineSchedule(@RequestParam("schedule_id") long schedule_id) {
JSONObject obj = new JSONObject();
Integer rs = this.scheduleService.deleteSchedule(schedule_id);
if (rs > 0) {
obj.put("code", 0);
obj.put("mgs", "下架成功~");
} else {
obj.put("code", 200);
obj.put("mgs", "下架失败~");
}
return obj;
}
/**
* Api id
* IDJSON
* @param movie_id ID
* @return JSONObject JSON
*/
@RequestMapping("findCinemasByMovieId")
@ResponseBody
public JSONObject findCinemasByMovieId(@RequestParam("movie_id") long movie_id) {
JSONObject obj = new JSONObject();
List<Cinema> list = this.cinemaService.findCinemasByMovieId(movie_id);
obj.put("code", 0);
obj.put("count", list.size());
obj.put("data", list);
return obj;
}
/**
* api
* JSON
* @param hall_name
* @param cinema_name
* @return JSONObject JSON
*/
@RequestMapping("testHall")
@ResponseBody
public JSONObject testHall(@RequestParam("hall_name") String hall_name,
@RequestParam("cinema_name") String cinema_name) {
Hall hall = this.hallService.findHallByCinemaAndHallName(cinema_name, hall_name);
JSONObject obj = new JSONObject();
obj.put("data", hall);
return obj;
}
}

@ -26,30 +26,30 @@ import com.service.IUserService;
import com.util.UUIDUtil;
/**
*
* update: 20197917:18:50
*
*
* update: 20197917:18:50
* @author Wxj
*/
@Controller
@RequestMapping("/user")
// 该类使用Spring的 @Controller 注解标记表示这是一个控制器类用于处理Web请求。
// @RequestMapping("/user") 则定义了该控制器处理的请求路径的基础部分,后续具体方法的请求路径在此基础上扩展。
public class UserController {
// 原本使用 @Autowired 进行依赖注入,后改为使用 @Resource用于将 IUserService 的实现类注入到当前控制器中,
// 以便调用用户服务层提供的各种业务方法来处理用户相关操作。
// @Autowired
// 注入用户服务层接口,用于调用用户相关的业务逻辑方法
// 此处原本使用了 @Autowired 注解,后改为 @Resource 注解,用于实现依赖注入
// @Resource 注解默认按照名称进行装配如果没有指定名称则按照属性名进行匹配查找对应的Bean
@Resource
private IUserService userService;
/**
*
* HttpServletRequest userService
* Session
* @param user_name
* @param user_pwd
* @param request HttpServletRequest
* @return JSONObject JSON
*
*
* Session
*
* @param user_name
* @param user_pwd
* @param request HttpServletRequest
* @return JSONObject JSON
*/
@RequestMapping("login")
@ResponseBody
@ -74,10 +74,10 @@ public class UserController {
}
/**
*
* HttpServletRequest "index"
* @param request HttpServletRequest
* @return String "index"
*
* HttpServletRequestSession "index"
* @param request HttpServletRequest
* @return String "index"
*/
@RequestMapping("logout")
@ResponseBody
@ -88,11 +88,12 @@ public class UserController {
}
/**
*
* User "fail"
* userService "success" "fail"
* @param user User
* @return String "success" "fail"
*
*
* 0 "fail"
* 0 "success" "fail"
* @param user User
* @return String "success" "fail"
*/
@RequestMapping("register")
@ResponseBody
@ -111,11 +112,11 @@ public class UserController {
}
/**
*
* User userService
* "success" "fail"
* @param user User
* @return String "success" "fail"
*
*
* 0 "success" "fail"
* @param user User
* @return String "success" "fail"
*/
@RequestMapping("updateUser")
@ResponseBody
@ -129,18 +130,18 @@ public class UserController {
}
/**
*
* HttpServletRequest
* "success" "fail"
* @param oldPwd
* @param newPwd
* @param request HttpServletRequest
* @return String "success" "fail"
*
* HttpServletRequest
* "success"
* "fail"
* @param oldPwd
* @param newPwd
* @param request HttpServletRequest
* @return String "success" "fail"
*/
@RequestMapping("modifyUserPwd")
@ResponseBody
public String modifyUserPwd(@RequestParam("oldPwd") String oldPwd, @RequestParam("newPwd") String newPwd,
HttpServletRequest request) {
public String modifyUserPwd(@RequestParam("oldPwd") String oldPwd, @RequestParam("oldPwd") String newPwd, HttpServletRequest request) {
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
if (user.getUser_pwd().equals(oldPwd)) {
@ -154,18 +155,17 @@ public class UserController {
}
/**
*
* userService
* JSONObject
* @param page 1使
* @param limit 10使
* @param keyword
* @return JSONObject JSON
*
* JSON
* @param page 1
* @param limit 10
* @param keyword
* @return JSONObject JSON
*/
@RequestMapping("findAllUser")
@ResponseBody
public JSONObject findAllUser(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit,
@RequestParam(value = "limit", defaultValue = "10") Integer pageSize,
String keyword) {
PageInfo<User> info = userService.findAllUserBySplitPage(page, limit, keyword);
JSONObject obj = new JSONObject();
@ -177,9 +177,9 @@ public class UserController {
}
/**
*
* JSONObject
* @return JSONObject JSON
*
* JSON
* @return JSONObject JSON
*/
@RequestMapping("findAllUserInfos")
@ResponseBody
@ -194,11 +194,10 @@ public class UserController {
}
/**
*
* userService
* JSONObject
* @param user_name
* @return JSONObject JSON
*
* JSON
* @param user_name
* @return JSONObject JSON
*/
@RequestMapping("findUserInfosByName")
@ResponseBody
@ -213,21 +212,19 @@ public class UserController {
}
/**
*
* HttpServletRequest
*
* 使 userService
* JSONObject
* @param file
* @param user User
* @param request HttpServletRequest
* @return JSONObject JSON
* @throws IOException I/O
*
*
* 使
* 0JSON
* @param file
* @param user IDUser
* @param request HttpServletRequest
* @return JSONObject JSON
* @throws IOException IO
*/
@RequestMapping("/uploadHeadImg")
@ResponseBody
public JSONObject uploadHeadImg(@RequestParam(value = "file", required = false) MultipartFile file, User user,
HttpServletRequest request) throws IOException {
public JSONObject uploadHeadImg(@RequestParam(value = "file", required = false) MultipartFile file, User user, HttpServletRequest request) throws IOException {
JSONObject obj = new JSONObject();
if (file!= null) {
String str = file.getOriginalFilename();
@ -257,18 +254,17 @@ public class UserController {
}
/**
* API
* HttpServletRequest
* JSONObject
* @param file
* @param user_name
* @param request HttpServletRequest
* @return JSONObject JSON
* Api
* JSON
* "null"
* @param file
* @param user_name
* @param request HttpServletRequest
* @return JSONObject JSON
*/
@RequestMapping("test")
@ResponseBody
public JSONObject uploadImg(@RequestParam(value = "file", required = false) MultipartFile file,
@RequestParam("user_name") String user_name, HttpServletRequest request) {
public JSONObject uploadImg(@RequestParam(value = "file", required = false) MultipartFile file, @RequestParam("user_name") String user_name, HttpServletRequest request) {
System.out.println(file);
JSONObject obj = new JSONObject();
if (file == null) {

@ -4,38 +4,84 @@ import java.util.List;
/**
*
*
* @author Wxj
*/
public class Cinema {
private long cinema_id;
private String cinema_name; //影院名称
private String cinema_address; //影院地址
private List<Hall> hallList; //所有的放映厅集合
public long getCinema_id() {
return cinema_id;
}
public void setCinema_id(long cinema_id) {
this.cinema_id = cinema_id;
}
public String getCinema_name() {
return cinema_name;
}
public void setCinema_name(String cinema_name) {
this.cinema_name = cinema_name;
}
public String getCinema_address() {
return cinema_address;
}
public void setCinema_address(String cinema_address) {
this.cinema_address = cinema_address;
}
public List<Hall> getHallList() {
return hallList;
}
public void setHallList(List<Hall> hallList) {
this.hallList = hallList;
}
}
// 电影院在数据库中的唯一标识,用于区分不同的电影院记录
private long cinema_id;
// 用于存储电影院的名称,展示给用户查看或用于其他业务逻辑中对影院的识别等操作
private String cinema_name; //影院名称
// 用于存储电影院的具体地址信息,方便用户查找影院位置等相关功能使用
private String cinema_address; //影院地址
// 用于存储该电影院下所有放映厅的集合,通过这个属性可以关联获取该影院包含的各个放映厅的详细信息,比如厅名、座位数等
private List<Hall> hallList; //所有的放映厅集合
/**
* ID
* @return long cinema_idID
*/
public long getCinema_id() {
return cinema_id;
}
/**
* ID
* @param cinema_id long ID
*/
public void setCinema_id(long cinema_id) {
this.cinema_id = cinema_id;
}
/**
*
* @return String cinema_name
*/
public String getCinema_name() {
return cinema_name;
}
/**
*
* @param cinema_name String
*/
public void setCinema_name(String cinema_name) {
this.cinema_name = cinema_name;
}
/**
*
* @return String cinema_address
*/
public String getCinema_address() {
return cinema_address;
}
/**
*
* @param cinema_address String
*/
public void setCinema_address(String cinema_address) {
this.cinema_address = cinema_address;
}
/**
*
* @return List<Hall> hallList
*/
public List<Hall> getHallList() {
return hallList;
}
/**
*
* @param hallList List<Hall>
*/
public void setHallList(List<Hall> hallList) {
this.hallList = hallList;
}
}

@ -1,53 +1,123 @@
package com.entity;
/**
*
*
* @author Wxj
*/
public class Comment {
import java.util.Date;
// 评论在数据库中的唯一标识,用于区分不同的评论记录
private long comment_id;
public class Comment {
private long comment_id;
private long user_id; //所属用户编号
private String comment_content; //评论内容
private long movie_id; //所属电影编号
private Date comment_time; //评论时间
private User comment_user; //所属用户
public long getComment_id() {
return comment_id;
}
public void setComment_id(long comment_id) {
this.comment_id = comment_id;
}
public long getUser_id() {
return user_id;
}
public void setUser_id(long user_id) {
this.user_id = user_id;
}
public String getComment_content() {
return comment_content;
}
public void setComment_content(String comment_content) {
this.comment_content = comment_content;
}
public long getMovie_id() {
return movie_id;
}
public void setMovie_id(long movie_id) {
this.movie_id = movie_id;
}
public Date getComment_time() {
return comment_time;
}
public void setComment_time(Date comment_time) {
this.comment_time = comment_time;
}
public User getComment_user() {
return comment_user;
}
public void setComment_user(User comment_user) {
this.comment_user = comment_user;
}
}
// 用于存储发表该评论的用户在用户表中的编号,通过这个编号可以关联到具体是哪个用户发表的评论,方便查询用户相关信息等操作
private long user_id; //所属用户编号
// 用于存储评论的具体文本内容,也就是用户实际输入发表的对某事物(此处通常关联电影)的看法、评价等文字信息
private String comment_content; //评论内容
// 用于存储该评论所属电影在电影表中的编号,通过这个编号可以关联到具体是针对哪部电影发表的评论,便于后续按电影查看评论等功能实现
private long movie_id; //所属电影编号
// 用于存储评论发表的时间,以 Date 类型记录具体的时间点,可用于排序、筛选不同时间段的评论等业务逻辑操作
private Date comment_time; //评论时间
// 用于存储发表该评论的用户对象,通过关联用户实体类,可以更方便地获取发表评论用户的详细信息(如用户名、头像等),不过这可能涉及到对象关联加载等额外操作,具体取决于业务场景和数据获取方式
private User comment_user; //所属用户
/**
* ID
* @return long comment_idID
*/
public long getComment_id() {
return comment_id;
}
/**
* ID
* @param comment_id long ID
*/
public void setComment_id(long comment_id) {
this.comment_id = comment_id;
}
/**
*
* @return long user_id
*/
public long getUser_id() {
return user_id;
}
/**
*
* @param user_id long
*/
public void setUser_id(long user_id) {
this.user_id = user_id;
}
/**
*
* @return String comment_content
*/
public String getComment_content() {
return comment_content;
}
/**
*
* @param comment_content String
*/
public void setComment_content(String comment_content) {
this.comment_content = comment_content;
}
/**
*
* @return long movie_id
*/
public long getMovie_id() {
return movie_id;
}
/**
*
* @param movie_id long
*/
public void setMovie_id(long movie_id) {
this.movie_id = movie_id;
}
/**
*
* @return Date comment_time
*/
public Date getComment_time() {
return comment_time;
}
/**
*
* @param comment_time Date
*/
public void setComment_time(Date comment_time) {
this.comment_time = comment_time;
}
/**
*
* @return User comment_user
*/
public User getComment_user() {
return comment_user;
}
/**
*
* @param comment_user User
*/
public void setComment_user(User comment_user) {
this.comment_user = comment_user;
}
}

@ -4,51 +4,122 @@ import java.util.List;
/**
*
*
* @author Wxj
*/
public class Hall {
private long hall_id;
private String hall_name; //放映厅名称
private int hall_capacity; //放映厅容量
private long cinema_id; //所属影院编号
private Cinema hall_cinema; //所属影院
private List<Schedule> ScheduleList; //所有的电影场次集合
public long getHall_id() {
return hall_id;
}
public void setHall_id(long hall_id) {
this.hall_id = hall_id;
}
public List<Schedule> getScheduleList() {
return ScheduleList;
}
public void setScheduleList(List<Schedule> scheduleList) {
ScheduleList = scheduleList;
}
public Cinema getHall_cinema() {
return hall_cinema;
}
public void setHall_cinema(Cinema hall_cinema) {
this.hall_cinema = hall_cinema;
}
public String getHall_name() {
return hall_name;
}
public void setHall_name(String hall_name) {
this.hall_name = hall_name;
}
public int getHall_capacity() {
return hall_capacity;
}
public void setHall_capacity(int hall_capacity) {
this.hall_capacity = hall_capacity;
}
public long getCinema_id() {
return cinema_id;
}
public void setCinema_id(long cinema_id) {
this.cinema_id = cinema_id;
}
}
// 放映厅在数据库中的唯一标识,用于区分不同的放映厅记录,方便在系统中对各个放映厅进行唯一的指代和操作
private long hall_id;
// 用于存储放映厅的名称,方便用户识别和选择不同的放映厅,通常会展示给用户查看场次信息等时使用
private String hall_name; //放映厅名称
// 用于存储放映厅能够容纳的观众人数,这个属性可以用于判断座位是否已满、统计可售票数等业务逻辑中
private int hall_capacity; //放映厅容量
// 用于存储该放映厅所属影院在影院表中的编号,通过这个编号可以关联到具体的影院信息,建立放映厅与影院之间的所属关系
private long cinema_id; //所属影院编号
// 用于存储该放映厅所属的影院对象,通过关联影院实体类,可以更方便地获取所属影院的详细信息(如影院名称、地址等),便于进行相关业务操作和信息展示
private Cinema hall_cinema; //所属影院
// 用于存储该放映厅安排的所有电影场次的集合,通过这个属性可以获取该放映厅在不同时间放映的电影情况,方便进行排片、查询场次等功能的实现
private List<Schedule> ScheduleList; //所有的电影场次集合
/**
* ID
* @return long hall_idID
*/
public long getHall_id() {
return hall_id;
}
/**
* ID
* @param hall_id long ID
*/
public void setHall_id(long hall_id) {
this.hall_id = hall_id;
}
/**
*
* @return List<Schedule> ScheduleList
*/
public List<Schedule> getScheduleList() {
return ScheduleList;
}
/**
*
* @param scheduleList List<Schedule>
*/
public void setScheduleList(List<Schedule> scheduleList) {
ScheduleList = scheduleList;
}
/**
*
* @return Cinema hall_cinema
*/
public Cinema getHall_cinema() {
return hall_cinema;
}
/**
*
* @param hall_cinema Cinema
*/
public void setHall_cinema(Cinema hall_cinema) {
this.hall_cinema = hall_cinema;
}
/**
*
* @return String hall_name
*/
public String getHall_name() {
return hall_name;
}
/**
*
* @param hall_name String
*/
public void setHall_name(String hall_name) {
this.hall_name = hall_name;
}
/**
*
* @return int hall_capacity
*/
public int getHall_capacity() {
return hall_capacity;
}
/**
*
* @param hall_capacity int
*/
public void setHall_capacity(int hall_capacity) {
this.hall_capacity = hall_capacity;
}
/**
*
* @return long cinema_id
*/
public long getCinema_id() {
return cinema_id;
}
/**
*
* @param cinema_id long
*/
public void setCinema_id(long cinema_id) {
this.cinema_id = cinema_id;
}
}

@ -1,172 +1,315 @@
package com.entity;
import java.sql.Date; // 导入 java.sql.Date 类,用于表示日期,格式通常为 yyyy-mm-dd这里用于存储电影的相关日期信息
import java.sql.Date; // yyyy-mm-dd用于表示日期类型此处大概率用于存储电影相关日期信息如上映时间等
import java.util.List;
/**
*
*
*
* @author Wxj
*/
public class Movie {
// 电影的唯一标识符,通常是数据库中的主键,用于唯一确定一部电影
// 电影在数据库中的唯一标识用于区分不同的电影记录在整个系统中可通过该ID来准确指代某一部具体的电影方便进行各种与电影相关的操作如查询、修改等。
private long movie_id;
// 电影的中文名称,用于展示给用户或者在中文语境下进行相关操作时使用
// 电影的中文名称,用于向用户展示电影的名称信息,方便用户识别和选择想要观看的电影。
private String movie_cn_name;
// 电影的外文名称(从变量名推测,可能是拼音或者其他外语名称等),用于多语言相关场景或者对外交流展示等情况
// 电影的外文名称(可能是英文或其他外语名称),用于在一些多语言展示或涉及外文资料引用等场景下使用。
private String movie_fg_name;
// 电影的演职人员信息,可能包含主演、配角等人员的姓名列表等相关内容,以字符串形式存储(更合理的方式也可以是用特定对象集合来表示)
private String movie_actor; // 演职人员
// 电影的导演信息,存储导演的姓名,若有多个导演可能以特定格式拼接在这个字符串中(同样也可考虑用更合适的对象集合等方式存储)
private String movie_director; // 导演
// 电影的详细介绍内容,比如剧情梗概、影片特色等详细文字描述,用于用户查看电影详情时展示
private String movie_detail; // 电影详情
// 电影的时长信息,通常格式可能是"XX分钟"之类的字符串形式,用于告知用户影片播放时长
private String movie_duration; // 电影时长
// 电影的类型信息,例如"喜剧"、"动作"、"科幻"等分类,以字符串形式存储(也可考虑用枚举等更规范的方式表示类型),方便按类型筛选、展示电影
private String movie_type; // 电影类型
// 电影的评分信息,以浮点数形式存储,一般是根据用户评价等综合计算得出的平均分数,用于衡量电影质量和受欢迎程度
private float movie_score; // 电影评分
// 电影的票房数据,以浮点数形式存储,代表电影取得的票房收入情况,用于统计分析电影商业表现等
private float movie_boxOffice; // 票房
// 电影的参评人数,即参与对该电影评分、评价等操作的用户数量,以长整型存储,可用于参考评分的可信度等情况
private long movie_commentCount; // 电影参评人数
// 电影的上映时间,使用 java.sql.Date 类型存储,能准确表示具体的年月日信息,便于查询、筛选不同时间段上映的电影
private Date movie_releaseDate; // 上映时间
// 电影的制片地区信息,比如"中国"、"美国"等,以字符串形式存储,有助于按地区分类、推荐电影等操作
private String movie_country; // 制片地区
// 电影海报的地址信息,存储海报图片在服务器或者网络中的位置,用于前端页面展示电影海报时获取图片资源
private String movie_picture; // 电影海报地址
// 电影的状态信息,用整数表示,默认值为 11 代表电影处于在线状态可正常观看、展示等0 代表电影已下架(不可见或者无法观看等情况)
private int movie_state; // 电影状态 默认 1 1在线 0下架
// 存储该电影所有的评论信息,以 Comment 类型的列表形式存在,方便获取、管理和展示用户对这部电影的各种评论内容
private List<Comment> commentList; // 所有的评论信息
// 获取电影的唯一标识符 movie_id 的方法,供外部类访问该私有属性
// 存储参演该电影的演职人员信息,通常会包含主演、配角等演员的姓名等相关介绍内容,方便用户了解电影的演员阵容。
private String movie_actor; //演职人员
// 存储执导该电影的导演姓名,明确电影的创作主导者,也是用户了解电影创作背景的一个重要信息点。
private String movie_director; //导演
// 用于存储电影的详细介绍内容,比如剧情梗概、故事背景、特色亮点等信息,方便用户在选择观看电影前更全面地了解电影情况。
private String movie_detail; //电影详情
// 表示电影的时长信息,一般以小时和分钟的格式记录(例如 "120分钟" 或 "2小时" 等形式),有助于用户知晓观看电影所需花费的时间。
private String movie_duration; //电影时长
// 用于描述电影的类型,常见的类型如 "喜剧"、"动作"、"爱情" 等,便于用户根据自己的喜好筛选和查找电影,同时也利于系统进行分类统计等业务操作。
private String movie_type; //电影类型
// 代表电影的评分信息,通常是一个基于用户评价等综合计算得出的浮点数,用于直观展示电影在观众心中的口碑情况,方便用户参考来判断电影质量。
private float movie_score; //电影评分
// 记录电影的票房数据,以浮点数形式体现电影在市场上的经济收益情况,可用于统计分析、热门电影排行等相关功能实现。
private float movie_boxOffice; //票房
// 统计参与对该电影进行评价的人数,以长整型记录,通过这个数值可以看出电影受关注和讨论的程度,也是衡量电影影响力的一个参考指标。
private long movie_commentCount; //电影参评人数
// 用于存储电影的上映时间,采用 java.sql.Date 类型按照 "yyyy-mm-dd" 的格式记录具体日期,方便按时间筛选电影、判断电影是否正在上映等操作。
private Date movie_releaseDate; //上映时间
// 表示电影的制片地区,例如 "中国"、"美国" 等,有助于用户了解电影的地域背景以及进行地区相关的电影筛选等功能。
private String movie_country; //制片地区
// 存储电影海报的地址信息,该地址指向存储电影海报图片文件的位置(可能是服务器上的相对或绝对路径等),用于在前端页面展示电影海报,吸引用户关注。
private String movie_picture; //电影海报地址
// 用于标记电影的状态默认值为1表示电影在线可观看、正常展示等情况值为0时表示电影已下架不再对外展示或提供观看服务方便系统对电影的展示和管理进行控制。
private int movie_state; //电影状态 默认1 1在线 0下架
// 用于存储该电影的所有评论信息列表,通过关联评论实体类,可以获取用户对该电影发表的各种评论内容,便于展示评论、统计分析评论数据等操作。
private List<Comment> commentList; //所有的评论信息
/**
* ID
* @return long movie_idID
*/
public long getMovie_id() {
return movie_id;
}
// 设置电影的唯一标识符 movie_id 的方法,外部类可以通过该方法给 movie_id 属性赋值
/**
* ID
* @param movie_id long ID
*/
public void setMovie_id(long movie_id) {
this.movie_id = movie_id;
}
// 获取电影的中文名称 movie_cn_name 的方法,用于外部获取该属性值展示或者使用
/**
*
* @return String movie_cn_name
*/
public String getMovie_cn_name() {
return movie_cn_name;
}
// 获取电影的状态 movie_state 的方法,外部可通过此方法得知电影当前处于在线还是下架等状态
/**
* 线
* @return int movie_state1线0
*/
public int getMovie_state() {
return movie_state;
}
// 设置电影的状态 movie_state 的方法,外部可通过此方法改变电影的状态(比如管理员操作下架电影等情况)
/**
* 线
* @param movie_state int 10
*/
public void setMovie_state(int movie_state) {
this.movie_state = movie_state;
}
// 设置电影的中文名称 movie_cn_name 的方法,外部类可调用此方法来更新电影的中文名称
/**
*
* @param movie_cn_name String
*/
public void setMovie_cn_name(String movie_cn_name) {
this.movie_cn_name = movie_cn_name;
}
// 获取电影的外文名称 movie_fg_name 的方法,供外部类在需要时获取该属性值
/**
*
* @return String movie_fg_name
*/
public String getMovie_fg_name() {
return movie_fg_name;
}
// 设置电影的外文名称 movie_fg_name 的方法,外部可通过调用此方法来修改电影的外文名称
/**
*
* @param movie_fg_name String
*/
public void setMovie_fg_name(String movie_fg_name) {
this.movie_fg_name = movie_fg_name;
}
// 获取电影的演职人员信息 movie_actor 的方法,用于外部展示或者处理相关人员信息
/**
*
* @return String movie_actor
*/
public String getMovie_actor() {
return movie_actor;
}
// 设置电影的演职人员信息 movie_actor 的方法,外部可调用此方法更新演职人员相关内容(比如新增演员等情况)
/**
*
* @param movie_actor String
*/
public void setMovie_actor(String movie_actor) {
this.movie_actor = movie_actor;
}
// 获取电影的导演信息 movie_director 的方法,方便外部获取并展示导演相关信息
/**
*
* @return String movie_director
*/
public String getMovie_director() {
return movie_director;
}
// 设置电影的导演信息 movie_director 的方法,外部可通过此方法改变电影的导演信息(比如有误录入需要修改等情况)
/**
*
* @param movie_director String
*/
public void setMovie_director(String movie_director) {
this.movie_director = movie_director;
}
// 获取电影的详细介绍内容 movie_detail 的方法,用于在前端页面等地方展示电影的详细情况给用户查看
/**
*
* @return String movie_detail
*/
public String getMovie_detail() {
return movie_detail;
}
// 设置电影的详细介绍内容 movie_detail 的方法,外部可通过调用此方法更新电影的详细介绍信息(比如补充更详细的剧情等情况)
/**
*
* @param movie_detail String
*/
public void setMovie_detail(String movie_detail) {
this.movie_detail = movie_detail;
}
// 获取电影的时长信息 movie_duration 的方法,外部可通过此方法获取并展示给用户影片播放时长情况
/**
*
* @return String movie_duration
*/
public String getMovie_duration() {
return movie_duration;
}
// 设置电影的时长信息 movie_duration 的方法,外部可调用此方法更新电影时长信息(比如纠正错误时长等情况)
/**
*
* @param movie_duration String
*/
public void setMovie_duration(String movie_duration) {
this.movie_duration = movie_duration;
}
// 获取电影的类型信息 movie_type 的方法,方便外部按类型进行分类、筛选、展示电影等操作
/**
*
* @return String movie_type
*/
public String getMovie_type() {
return movie_type;
}
// 设置电影的类型信息 movie_type 的方法,外部可通过此方法修改电影的类型分类(比如重新归类等情况)
/**
*
* @param movie_type String
*/
public void setMovie_type(String movie_type) {
this.movie_type = movie_type;
}
// 获取电影的评分信息 movie_score 的方法,外部可通过此方法获取并展示电影的评分情况给用户参考
/**
*
* @return float movie_score
*/
public float getMovie_score() {
return movie_score;
}
// 设置电影的评分信息 movie_score 的方法,一般来说评分是根据一定算法计算得出后通过此方法更新,而不是随意设置(实际应用中可能会有限制逻辑等)
/**
*
* @param movie_score float
*/
public void setMovie_score(float movie_score) {
this.movie_score = movie_score;
}
// 获取电影的票房数据 movie_boxOffice 的方法,用于外部统计、展示电影的商业票房表现情况
/**
*
* @return float movie_boxOffice
*/
public float getMovie_boxOffice() {
return movie_boxOffice;
}
// 设置电影的票房数据 movie_boxOffice 的方法,通常是在票房数据更新时(比如新的票房统计结果出来后)调用此方法进行设置
/**
*
* @param movie_boxOffice float
*/
public void setMovie_boxOffice(float movie_boxOffice) {
this.movie_boxOffice = movie_boxOffice;
}
// 获取电影的参评人数 movie_commentCount 的方法,外部可通过此方法获取参与评价的用户数量情况,用于参考评分可信度等
/**
*
* @return long movie_commentCount
*/
public long getMovie_commentCount() {
return movie_commentCount;
}
// 设置电影的参评人数 movie_commentCount 的方法,在参评人数有变化(比如新用户参与评价等情况)时可调用此方法更新
/**
*
* @param movie_commentCount long
*/
public void setMovie_commentCount(long movie_commentCount) {
this.movie_commentCount = movie_commentCount;
}
// 获取电影的上映时间 movie_releaseDate 的方法,方便外部按上映时间查询、筛选电影等操作
/**
*
* @return Date movie_releaseDate
*/
public Date getReleaseDate() {
return movie_releaseDate;
}
// 设置电影的上映时间 movie_releaseDate 的方法,一般在录入电影信息或者修改上映时间等情况时调用此方法(不过实际应用中上映时间通常是确定后较少修改的)
/**
*
* @param releaseDate Date
*/
public void setReleaseDate(Date releaseDate) {
this.movie_releaseDate = releaseDate;
}
// 获取电影的制片地区信息 movie_country 的方法,外部可通过此方法获取并按地区分类、展示电影等
/**
*
* @return String movie_country
*/
public String getMovie_country() {
return movie_country;
}
// 设置电影的制片地区信息 movie_country 的方法,在发现地区信息录入错误等情况时可调用此方法进行修改
/**
*
* @param movie_country String
*/
public void setMovie_country(String movie_country) {
this.movie_country = movie_country;
}
// 获取电影海报地址信息 movie_picture 的方法,用于前端页面等获取海报图片资源展示电影海报
/**
*
* @return String movie_picture
*/
public String getMovie_picture() {
return movie_picture;
}
// 设置电影海报地址信息 movie_picture 的方法,比如海报更换后可通过此方法更新地址信息
/**
*
* @param movie_picture String
*/
public void setMovie_picture(String movie_picture) {
this.movie_picture = movie_picture;
}
// 获取该电影所有评论信息的列表 commentList 的方法,外部可通过此方法获取并展示、处理用户的评论内容
/**
*
* @return List<Comment> commentList
*/
public List<Comment> getCommentList() {
return commentList;
}
// 设置该电影所有评论信息的列表 commentList 的方法,一般在添加新评论、删除评论等操作后调用此方法更新评论列表(实际应用中可能会有更复杂的逻辑配合)
/**
*
* @param commentList List<Comment>
*/
public void setCommentList(List<Comment> commentList) {
this.commentList = commentList;
}

@ -5,74 +5,180 @@ import java.util.List;
/**
*
* 便
* @author Wxj
*
*/
public class Order {
private String order_id;
private long user_id; //所属用户编号
private long schedule_id; //所属场次编号,通过schedule_id-》场次信息-》放映厅信息+电影信息
private String order_position; //电影票座位信息
private int order_state; //订单状态 0退票中 -1无法退票 1已支付 2退票成功
private int order_price; //订单价格
private Date order_time; //订单支付时间
private User order_user; //所属用户对象
private Schedule order_schedule; //所属电影场次
public String getOrder_id() {
return order_id;
}
public void setOrder_id(String order_id) {
this.order_id = order_id;
}
public Date getOrder_time() {
return order_time;
}
public void setOrder_time(Date order_time) {
this.order_time = order_time;
}
public int getOrder_price() {
return order_price;
}
public void setOrder_price(int order_price) {
this.order_price = order_price;
}
public long getUser_id() {
return user_id;
}
public void setUser_id(long user_id) {
this.user_id = user_id;
}
public long getSchedule_id() {
return schedule_id;
}
public void setSchedule_id(long schedule_id) {
this.schedule_id = schedule_id;
}
public String getOrder_position() {
return order_position;
}
public void setOrder_position(String order_position) {
this.order_position = order_position;
}
public User getOrder_user() {
return order_user;
}
public int getOrder_state() {
return order_state;
}
public void setOrder_state(int order_state) {
this.order_state = order_state;
}
public void setOrder_user(User order_user) {
this.order_user = order_user;
}
public Schedule getOrder_schedule() {
return order_schedule;
}
public void setOrder_schedule(Schedule order_schedule) {
this.order_schedule = order_schedule;
}
}
// 订单在数据库中的唯一标识,通常是一个具有特定生成规则的字符串,用于在系统中唯一区分不同的订单记录,便于订单的查找、管理等操作。
private String order_id;
// 用于存储下此订单的用户在用户表中的编号,通过该编号可以关联到具体是哪位用户创建的订单,方便后续查询用户相关信息、处理与用户相关的业务逻辑(如退票涉及用户权益等情况)。
private long user_id; //所属用户编号
// 存储该订单对应的电影场次在场次表中的编号,借助这个编号可以进一步获取场次相关的详细信息(如放映时间、所在放映厅、放映的电影等),从而完整地呈现订单对应的观影场次情况。
private long schedule_id; //所属场次编号,通过schedule_id-》场次信息-》放映厅信息+电影信息
// 用于记录购买电影票的座位信息,比如具体的排数和座位号等内容,明确用户所预订的观影座位位置。
private String order_position; //电影票座位信息
// 用于标记订单的当前状态,不同的数值代表不同的状态含义,例如 0 表示正在退票中,-1 表示无法退票1 表示已支付2 表示退票成功,方便系统根据订单状态进行相应的业务处理和展示给用户不同的提示信息等操作。
private int order_state; //订单状态 0退票中 -1无法退票 1已支付 2退票成功
// 表示该订单对应的电影票价格,以整数形式记录金额,用于统计订单金额、计算用户消费等业务逻辑处理。
private int order_price; //订单价格
// 记录订单的支付时间,以 Date 类型存储具体的时间点,可用于查询特定时间段内的订单、判断订单时效性等相关操作。
private Date order_time; //订单支付时间
// 用于存储下此订单的用户对象,通过关联用户实体类,可以更方便地获取用户的详细信息(如用户名、联系方式等),在涉及用户相关业务逻辑时无需再次查询用户表获取信息,提高操作效率,但可能涉及对象关联加载等性能方面的考虑,具体取决于业务场景和实现方式。
private User order_user; //所属用户对象
// 用于存储该订单对应的电影场次对象,通过关联场次实体类,可以便捷地获取场次相关的详细信息(如放映厅信息、放映的电影信息等),有助于在处理订单相关业务(如退票影响场次剩余座位等情况)时获取完整的关联数据进行操作。
private Schedule order_schedule; //所属电影场次
/**
* ID
* @return String order_idID
*/
public String getOrder_id() {
return order_id;
}
/**
* ID
* @param order_id String ID
*/
public void setOrder_id(String order_id) {
this.order_id = order_id;
}
/**
*
* @return Date order_time
*/
public Date getOrder_time() {
return order_time;
}
/**
*
* @param order_time Date
*/
public void setOrder_time(Date order_time) {
this.order_time = order_time;
}
/**
*
* @return int order_price
*/
public int getOrder_price() {
return order_price;
}
/**
*
* @param order_price int
*/
public void setOrder_price(int order_price) {
this.order_price = order_price;
}
/**
*
* @return long user_id
*/
public long getUser_id() {
return user_id;
}
/**
*
* @param user_id long
*/
public void setUser_id(long user_id) {
this.user_id = user_id;
}
/**
*
* @return long schedule_id
*/
public long getSchedule_id() {
return schedule_id;
}
/**
*
* @param schedule_id long
*/
public void setSchedule_id(long schedule_id) {
this.schedule_id = schedule_id;
}
/**
*
* @return String order_position
*/
public String getOrder_position() {
return order_position;
}
/**
*
* @param order_position String
*/
public void setOrder_position(String order_position) {
this.order_position = order_position;
}
/**
*
* @return User order_user
*/
public User getOrder_user() {
return order_user;
}
/**
*
* @param order_user User
*/
public void setOrder_user(User order_user) {
this.order_user = order_user;
}
/**
*
* @return int order_state
*/
public int getOrder_state() {
return order_state;
}
/**
*
* @param order_state int 0-112
*/
public void setOrder_state(int order_state) {
this.order_state = order_state;
}
/**
*
* @return Schedule order_schedule
*/
public Schedule getOrder_schedule() {
return order_schedule;
}
/**
*
* @param order_schedule Schedule
*/
public void setOrder_schedule(Schedule order_schedule) {
this.order_schedule = order_schedule;
}
}

@ -6,112 +6,200 @@ import java.util.List;
import org.springframework.format.annotation.DateTimeFormat;
/**
*
*
*
*
* @author Wxj
*/
public class Schedule {
// 场次的唯一标识符
// 场次在数据库中的唯一标识,用于区分不同的电影放映场次记录,方便在系统中对各个场次进行准确指代和相关操作,如查询、修改场次信息等。
private long schedule_id;
// 所属放映厅的编号,通过该编号可以关联到对应的放映厅信息,比如放映厅的位置、座位布局等情况。
private long hall_id;
// 放映的电影编号,用于确定具体放映的是哪一部电影,可通过该编号关联到电影的详细信息,如电影名称、类型等。
private long movie_id;
// 电影放映时间,这里目前是字符串类型存储,格式可能需要按照一定规则来解析,若要进行日期格式化操作,可启用下面被注释掉的注解配置。
// 用于存储该场次所属放映厅在放映厅表中的编号,通过这个编号可以关联到具体的放映厅信息,明确该场次在哪个放映厅进行放映,便于后续涉及放映厅相关的业务逻辑处理(如座位管理等)。
private long hall_id; //所属放映厅
// 用于存储该场次放映的电影在电影表中的编号,借助这个编号可以关联到具体的电影信息,确定该场次放映的是哪部电影,方便查询电影详情、根据电影进行场次筛选等操作。
private long movie_id; //放映的电影编号
// 用于存储电影的放映时间信息,虽然此处定义为字符串类型,但可能需要按照特定格式(原注释中提到的 "yyyy-MM-dd" 格式,不过目前未启用 `@DateTimeFormat` 注解生效的功能)来存储和解析日期数据,用于展示给用户场次的放映时间以及在业务逻辑中判断场次是否已到放映时间等操作。
// @DateTimeFormat(pattern="yyyy-MM-dd")
private String schedule_startTime;
// 该场次电影的售价,单位可能是具体业务规定的货币单位,比如元。
private int schedule_price;
// 该场次剩余的座位数量,用于判断是否还有足够座位可供售卖等业务逻辑。
private int schedule_remain;
// 场次状态1表示上映中0表示下架通过该状态可以控制场次在业务系统中的展示和操作逻辑。
private int schedule_state;
// 所属放映厅对象通过该对象可以更方便地获取放映厅的详细属性和执行相关操作是与Hall类的关联对象。
private Hall schedule_hall;
// 放映的电影对象用于获取电影更全面的详细信息是与Movie类的关联对象。
private Movie schedule_movie;
// 所有的订单集合,包含购买该场次电影票的所有订单信息,可用于查询、统计等业务操作。
private List<Order> orderList;
// 获取场次的唯一标识符
private String schedule_startTime; //电影放映时间
// 表示该场次电影票的售价,以整数形式记录价格信息,用于向用户展示票价、计算场次的收入等业务逻辑处理。
private int schedule_price; //售价
// 用于记录该场次当前剩余的座位数量,可根据购票、退票等操作动态更新这个数值,方便判断场次是否还有余票可供销售以及进行座位相关的管理操作。
private int schedule_remain; //剩余座位数
// 用于标记场次的状态,例如 1 表示上映中即该场次正常对外售票并即将放映0 表示下架,意味着该场次不再对外展示和售票,方便系统对场次的展示和管理进行控制。
private int schedule_state; //场次状态 1上映中 0下架
// 用于存储该场次所属的放映厅对象,通过关联放映厅实体类,可以更便捷地获取放映厅的详细信息(如放映厅名称、容量等),在涉及放映厅相关业务逻辑(如根据放映厅剩余座位调整场次剩余座位数等)时无需再次查询数据库获取信息,提高操作效率。
private Hall schedule_hall; //所属放映厅对象
// 用于存储该场次放映的电影对象,通过关联电影实体类,可以方便地获取电影的详细信息(如电影名称、类型、评分等),便于在展示场次信息时一同展示电影相关内容,以及进行与电影相关的业务逻辑处理(如票房统计等与场次相关的部分)。
private Movie schedule_movie; //放映的电影
// 用于存储该场次下所有的订单集合,通过这个属性可以获取购买了该场次电影票的所有订单信息,方便进行订单相关的统计、查询以及根据订单状态对场次进行相应调整(如退票后更新剩余座位数等)操作。
private List<Order> orderList; //所有的订单集合
/**
* ID
* @return long schedule_idID
*/
public long getSchedule_id() {
return schedule_id;
}
// 设置场次的唯一标识符
/**
* ID
* @param schedule_id long ID
*/
public void setSchedule_id(long schedule_id) {
this.schedule_id = schedule_id;
}
// 获取场次状态
/**
*
* @return int schedule_state1 0
*/
public int getSchedule_state() {
return schedule_state;
}
// 设置场次状态
/**
*
* @param schedule_state int 1 0
*/
public void setSchedule_state(int schedule_state) {
this.schedule_state = schedule_state;
}
// 获取放映的电影对象
/**
*
* @return Movie schedule_movie
*/
public Movie getSchedule_movie() {
return schedule_movie;
}
// 设置放映的电影对象
/**
*
* @param schedule_movie Movie
*/
public void setSchedule_movie(Movie schedule_movie) {
this.schedule_movie = schedule_movie;
}
// 获取所属放映厅的编号
/**
*
* @return long hall_id
*/
public long getHall_id() {
return hall_id;
}
// 设置所属放映厅的编号
/**
*
* @param hall_id long
*/
public void setHall_id(long hall_id) {
this.hall_id = hall_id;
}
// 获取放映的电影编号
/**
*
* @return long movie_id
*/
public long getMovie_id() {
return movie_id;
}
// 设置放映的电影编号
/**
*
* @param movie_id long
*/
public void setMovie_id(long movie_id) {
this.movie_id = movie_id;
}
// 获取电影放映时间
/**
*
* @return String schedule_startTime
*/
public String getSchedule_startTime() {
return schedule_startTime;
}
// 设置电影放映时间
/**
*
* @param schedule_startTime String
*/
public void setSchedule_startTime(String schedule_startTime) {
this.schedule_startTime = schedule_startTime;
}
// 获取该场次电影的售价
/**
*
* @return int schedule_price
*/
public int getSchedule_price() {
return schedule_price;
}
// 设置该场次电影的售价
/**
*
* @param schedule_price int
*/
public void setSchedule_price(int schedule_price) {
this.schedule_price = schedule_price;
}
// 获取该场次剩余的座位数量
/**
*
* @return int schedule_remain
*/
public int getSchedule_remain() {
return schedule_remain;
}
// 设置该场次剩余的座位数量
/**
*
* @param schedule_remain int
*/
public void setSchedule_remain(int schedule_remain) {
this.schedule_remain = schedule_remain;
}
// 获取所属放映厅对象
/**
*
* @return Hall schedule_hall
*/
public Hall getSchedule_hall() {
return schedule_hall;
}
// 设置所属放映厅对象
/**
*
* @param schedule_hall Hall
*/
public void setSchedule_hall(Hall schedule_hall) {
this.schedule_hall = schedule_hall;
}
// 获取所有的订单集合
/**
*
* @return List<Order> orderList
*/
public List<Order> getOrderList() {
return orderList;
}
// 设置所有的订单集合
/**
*
* @param orderList List<Order>
*/
public void setOrderList(List<Order> orderList) {
this.orderList = orderList;
}
}

@ -1,51 +1,123 @@
package com.entity;
/**
*
*
* @author Wxj
*/
public class User {
private long user_id;
private String user_name; //用户账号
private String user_pwd; //用户密码
private String user_email; //用户邮箱
private int user_role; //用户权限 0普通会员 1管理员
private String user_headImg; //用户头像地址
public long getUser_id() {
return user_id;
}
public void setUser_id(long user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getUser_pwd() {
return user_pwd;
}
public void setUser_pwd(String user_pwd) {
this.user_pwd = user_pwd;
}
public String getUser_email() {
return user_email;
}
public void setUser_email(String user_email) {
this.user_email = user_email;
}
public int getUser_role() {
return user_role;
}
public void setUser_role(int user_role) {
this.user_role = user_role;
}
public String getUser_headImg() {
return user_headImg;
}
public void setUser_headImg(String user_headImg) {
this.user_headImg = user_headImg;
}
}
// 用户在数据库中的唯一标识用于区分不同的用户记录在整个系统中可通过该ID准确地指代某一个具体用户方便进行各种与用户相关的操作例如查询用户信息、更新用户资料等。
private long user_id;
// 用于存储用户登录系统所使用的账号信息,通常是用户自定义的具有唯一性(在系统限定规则内)的字符串,作为用户身份验证的重要依据之一,方便用户登录操作以及在系统中识别不同用户。
private String user_name; //用户账号
// 用于存储用户登录系统时需要输入的密码信息,一般以加密后的字符串形式存储(具体加密方式取决于系统安全设置),用于验证用户身份的合法性,保障用户账号的安全性。
private String user_pwd; //用户密码
// 用于存储用户的电子邮箱地址,可用于找回密码、接收系统通知等功能,方便与用户进行信息沟通以及一些需要验证邮箱的业务操作(如注册验证等情况)。
private String user_email; //用户邮箱
// 用于标记用户在系统中的权限等级,不同的数值代表不同的权限角色,例如 0 表示普通会员具有普通用户的操作权限1 表示管理员,拥有更多的系统管理权限,便于系统根据用户权限进行功能访问控制和不同操作的授权管理。
private int user_role; //用户权限 0普通会员 1管理员
// 用于存储用户头像图片的地址信息,该地址指向存储用户头像图片文件的位置(可能是服务器上的相对或绝对路径等),用于在前端页面展示用户头像,个性化展示用户信息。
private String user_headImg; //用户头像地址
/**
* ID
* @return long user_idID
*/
public long getUser_id() {
return user_id;
}
/**
* ID
* @param user_id long ID
*/
public void setUser_id(long user_id) {
this.user_id = user_id;
}
/**
*
* @return String user_name
*/
public String getUser_name() {
return user_name;
}
/**
*
* @param user_name String
*/
public void setUser_name(String user_name) {
this.user_name = user_name;
}
/**
*
* @return String user_pwd
*/
public String getUser_pwd() {
return user_pwd;
}
/**
*
* @param user_pwd String
*/
public void setUser_pwd(String user_pwd) {
this.user_pwd = user_pwd;
}
/**
*
* @return String user_email
*/
public String getUser_email() {
return user_email;
}
/**
*
* @param user_email String
*/
public void setUser_email(String user_email) {
this.user_email = user_email;
}
/**
*
* @return int user_role01
*/
public int getUser_role() {
return user_role;
}
/**
*
* @param user_role int 01
*/
public void setUser_role(int user_role) {
this.user_role = user_role;
}
/**
*
* @return String user_headImg
*/
public String getUser_headImg() {
return user_headImg;
}
/**
*
* @param user_headImg String
*/
public void setUser_headImg(String user_headImg) {
this.user_headImg = user_headImg;
}
}

@ -1,149 +1,90 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 此 XML 文件为 MyBatis 的映射文件,用于定义与数据库交互的 SQL 语句以及结果集映射关系等配置内容,其对应的接口是 com.mapper.MovieMapper主要负责处理电影Movie相关的数据操作。 -->
<mapper namespace="com.mapper.MovieMapper">
<!-- 定义名为 BaseResultMap 的结果集映射,用于将从数据库查询返回的结果(按照列的形式)映射到 com.entity.Movie 实体类对应的属性上,方便 MyBatis 将数据库记录转换为 Java 对象,便于后续在程序中使用。 -->
<resultMap type="com.entity.Movie" id="BaseResultMap">
<!-- 将数据库表 movie 中的 movie_id 列的值映射到 Movie 实体类的 movie_id 属性上,属性类型为 long -->
<id property="movie_id" column="movie_id" javaType="long"/>
<!-- 将数据库表 movie 中的 movie_actor 列的值映射到 Movie 实体类的 movie_actor 属性上,属性类型为 java.lang.String -->
<result property="movie_actor" column="movie_actor" javaType="java.lang.String"/>
<!-- 将数据库表 movie 中的 movie_boxOffice 列的值映射到 Movie 实体类的 movie_boxOffice 属性上,属性类型为 float -->
<result property="movie_boxOffice" column="movie_boxOffice" javaType="float"/>
<!-- 将数据库表 movie 中的 movie_cn_name 列的值映射到 Movie 实体类的 movie_cn_name 属性上,属性类型为 java.lang.String -->
<result property="movie_cn_name" column="movie_cn_name" javaType="java.lang.String"/>
<!-- 将数据库表 movie 中的 movie_commentCount 列的值映射到 Movie 实体类的 movie_commentCount 属性上,属性类型为 long -->
<result property="movie_commentCount" column="movie_commentCount" javaType="long"/>
<!-- 将数据库表 movie 中的 movie_country 列的值映射到 Movie 实体类的 movie_country 属性上,属性类型为 java.lang.String -->
<result property="movie_country" column="movie_country" javaType="java.lang.String"/>
<!-- 将数据库表 movie 中的 movie_detail 列的值映射到 Movie 实体类的 movie_detail 属性上,属性类型为 java.lang.String -->
<result property="movie_detail" column="movie_detail" javaType="java.lang.String"/>
<!-- 将数据库表 movie 中的 movie_director 列的值映射到 Movie 实体类的 movie_director 属性上,属性类型为 java.lang.String -->
<result property="movie_director" column="movie_director" javaType="java.lang.String"/>
<!-- 将数据库表 movie 中的 movie_duration 列的值映射到 Movie 实体类的 movie_duration 属性上,属性类型为 java.lang.String -->
<result property="movie_duration" column="movie_duration" javaType="java.lang.String"/>
<!-- 将数据库表 movie 中的 movie_fg_name 列的值映射到 Movie 实体类的 movie_fg_name 属性上,属性类型为 java.lang.String -->
<result property="movie_fg_name" column="movie_fg_name" javaType="java.lang.String"/>
<!-- 将数据库表 movie 中的 movie_picture 列的值映射到 Movie 实体类的 movie_picture 属性上,属性类型为 java.lang.String -->
<result property="movie_picture" column="movie_picture" javaType="java.lang.String"/>
<!-- 将数据库表 movie 中的 movie_score 列的值映射到 Movie 实体类的 movie_score 属性上,属性类型为 float -->
<result property="movie_score" column="movie_score" javaType="float"/>
<!-- 将数据库表 movie 中的 movie_type 列的值映射到 Movie 实体类的 movie_type 属性上,属性类型为 java.lang.String -->
<result property="movie_type" column="movie_type" javaType="java.lang.String"/>
<!-- 将数据库表 movie 中的 movie_releaseDate 列的值映射到 Movie 实体类的 movie_releaseDate 属性上,属性类型为 java.sql.Date -->
<result property="movie_releaseDate" column="movie_releaseDate" javaType="java.sql.Date"/>
<!-- 将数据库表 movie 中的 movie_state 列的值映射到 Movie 实体类的 movie_state 属性上,属性类型为 java.lang.Integer -->
<result property="movie_state" column="movie_state" javaType="java.lang.Integer"/>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.HallMapper">
<!--
定义一个结果映射,用于将查询结果集中的列映射到 Java 对象 "Hall" 的属性。
这个 resultMap 将被下面的 select 语句引用,以确保查询结果能够正确地转换为 Java 对象。
-->
<resultMap type="com.entity.Hall" id="BaseResultMap">
<!-- 唯一标识符,对应数据库表中的主键 -->
<id property="hall_id" column="hall_id" javaType="long"/>
<!-- 普通字段,对应数据库表中的非主键列 -->
<result property="hall_name" column="hall_name" javaType="java.lang.String"/>
<result property="cinema_id" column="cinema_id" javaType="long"/>
</resultMap>
<!-- 定义名为 findMovieById 的查询语句用于根据电影的唯一标识ID从 movie 表中查询对应的电影信息。
参数类型为 long表示传入的参数是一个长整型的电影 ID查询结果通过 BaseResultMap 定义的映射关系转换为 Movie 实体对象返回。 -->
<select id="findMovieById" parameterType="long" resultMap="BaseResultMap">
select * from movie where movie_id = #{movie_id}
<!--
根据影厅ID查询影厅信息。
参数类型为 long表示影厅的唯一标识符。
使用 BaseResultMap 将查询结果映射为 Hall 对象。
-->
<select id="findHallById" parameterType="long" resultMap="BaseResultMap">
select * from hall where hall_id = #{hall_id}
</select>
<!-- 定义名为 findMovieByName 的查询语句,用于根据电影的中文名称从 movie 表中查询对应的电影信息。
参数类型为 java.lang.String表示传入的参数是一个字符串类型的电影中文名称查询结果通过 BaseResultMap 定义的映射关系转换为 Movie 实体对象返回。 -->
<select id="findMovieByName" parameterType="java.lang.String" resultMap="BaseResultMap">
select * from movie where movie_cn_name = #{movie_cn_name}
<!--
根据影院名称和影厅名称查询影厅信息。
该查询涉及两个表hall 和 cinema通过影院ID关联。
使用 BaseResultMap 将查询结果映射为 Hall 对象。
需要提供影院名称和影厅名称作为参数。
-->
<select id="findHallByCinemaAndHallName" resultMap="BaseResultMap">
select hall.* from hall, cinema
where hall.cinema_id = cinema.cinema_id
and cinema_name = #{cinema_name} and hall_name= #{hall_name}
</select>
<!-- 定义名为 addMovie 的插入语句,用于向 movie 表中插入一条新的电影记录。
参数类型为 com.entity.Movie表示传入的参数是一个 Movie 实体对象,从该对象中获取 movie_cn_name、movie_fg_name、movie_actor、movie_director、movie_detail、movie_duration、movie_type、movie_score、movie_releaseDate、movie_country 和 movie_picture 等属性值,插入到 movie 表对应的列中,实现新增电影记录的操作。 -->
<insert id="addMovie" parameterType="com.entity.Movie">
insert into movie(movie_cn_name,movie_fg_name,movie_actor,movie_director,movie_detail,movie_duration,movie_type,movie_score,movie_releaseDate,movie_country,movie_picture)
values(#{movie_cn_name},#{movie_fg_name},#{movie_actor},#{movie_director},#{movie_detail},#{movie_duration},#{movie_type},#{movie_score},#{movie_releaseDate},#{movie_country},#{movie_picture})
</insert>
<!--
根据影院ID查询所有属于该影院的影厅信息。
参数类型为 long表示影院的唯一标识符。
使用 BaseResultMap 将查询结果映射为 Hall 对象。
-->
<select id="findHallByCinemaId" parameterType="long" resultMap="BaseResultMap">
select * from hall where cinema_id = #{cinema_id}
</select>
<!-- 定义名为 deleteMovie 的更新语句,用于将指定电影记录的状态标记为下架(这里将 movie_state 设置为 0通常表示下架状态
参数类型为 long表示传入的参数是一个长整型的电影 ID根据该 ID 更新 movie 表中对应电影记录的 movie_state 字段值,以此实现电影下架的逻辑操作。 -->
<update id="deleteMovie" parameterType="long">
update movie
<set>
movie_state = 0
</set>
where movie_id = #{movie_id}
</update>
<!--
查询所有影厅信息。
不需要参数,返回所有的影厅记录。
使用 BaseResultMap 将查询结果映射为 Hall 对象。
-->
<select id="findAllHalls" resultMap="BaseResultMap">
select * from hall
</select>
<!-- 定义名为 changeMovieBoxOffice 的更新语句,用于更新指定电影的票房数据,将原票房数值加上传入的票房增量值。
这里通过 SQL 语句中的 movie_boxOffice = movie_boxOffice + #{movie_boxOffice} 实现票房的累加更新操作,更新条件是 movie_id 列的值与传入的电影 ID 参数值相等,用于在电影有新的票房收入时更新数据库中的票房数据。 -->
<update id="changeMovieBoxOffice">
update movie set movie_boxOffice = movie_boxOffice + #{movie_boxOffice} where movie_id = #{movie_id}
</update>
<!--
添加新的影厅信息。
参数类型为 com.entity.Hall表示要插入的新影厅对象。
注意这里有一个错误SQL 中的 movie_id 应该是 cinema_id 或者是其他与影厅相关的字段,根据实际情况修改。
-->
<insert id="addHall" parameterType="com.entity.Hall">
insert into hall(hall_name, cinema_id) -- 修改了 movie_id 为 cinema_id假设这是正确的字段名
values(#{hall_name}, #{cinema_id}) -- 同上
</insert>
<!-- 定义名为 updateMovie 的更新语句,用于更新 movie 表中指定电影记录的部分信息(除了 movie_id、movie_state 等未在 <set> 标签内列出的字段,通常这些字段在更新时可能有特殊逻辑或不常变动)。
参数类型为 com.entity.Movie表示传入的参数是一个 Movie 实体对象,根据该对象中的 movie_cn_name、movie_fg_name、movie_actor、movie_director、movie_detail、movie_duration、movie_type、movie_country 和 movie_picture 等属性值来更新对应电影记录的相应列的值,更新条件是 movie_id 列的值与传入对象的 movie_id 属性值相等,通过 <set> 标签来动态生成需要更新的列,避免不必要的列更新为空值等情况。 -->
<update id="updateMovie" parameterType="com.entity.Movie">
update movie
<!--
更新现有的影厅信息。
参数类型为 com.entity.Hall表示包含更新信息的影厅对象。
只有在提供了有效的 hall_id 时,才会执行更新操作。
-->
<update id="updateHall" parameterType="com.entity.Hall">
update hall
<set>
movie_cn_name = #{movie_cn_name},
movie_fg_name = #{movie_fg_name},
movie_actor = #{movie_actor},
movie_director = #{movie_director},
movie_detail = #{movie_detail},
movie_duration = #{movie_duration},
movie_type = #{movie_type},
movie_country = #{movie_country},
movie_picture = #{movie_picture}
hall_name = #{hall_name},
cinema_id = #{cinema_id} -- 假设这是要更新的字段,如果实际不是,请根据需要更改
</set>
where movie_id = #{movie_id}
</update>
<!-- 定义名为 deleteMovieCommentCount 的更新语句用于将指定电影的评论人数movie_commentCount 字段)减 1通常用于在有用户删除对应电影的评论等情况下更新评论人数统计数据。
参数类型为 long表示传入的参数是一个长整型的电影 ID根据该 ID 更新 movie 表中对应电影记录的 movie_commentCount 字段值,实现评论人数的递减操作。 -->
<update id="deleteMovieCommentCount" parameterType="long">
update movie set movie_commentCount = movie_commentCount - 1 where movie_id = #{movie_id}
</update>
<!-- 定义名为 addMovieCommentCount 的更新语句用于将指定电影的评论人数movie_commentCount 字段)加 1比如在有新用户对该电影发表评论时调用此方法来更新评论人数统计数据。
参数类型为 long表示传入的参数是一个长整型的电影 ID根据该 ID 更新 movie 表中对应电影记录的 movie_commentCount 字段值,实现评论人数的递增操作。 -->
<update id="addMovieCommentCount" parameterType="long">
update movie set movie_commentCount = movie_commentCount + 1 where movie_id = #{movie_id}
where hall_id = #{hall_id}
</update>
<!-- 定义名为 findAllMovies 的查询语句,用于根据电影的状态查询所有符合该状态的电影信息。
参数类型为 java.lang.Integer表示传入的参数是一个整数类型的电影状态值查询结果通过 BaseResultMap 定义的映射关系转换为 Movie 实体对象,并以列表形式返回所有符合该状态的电影记录对应的 Movie 对象集合,方便按状态获取电影列表,例如获取所有在线(状态值表示在线的情况)的电影信息等。 -->
<select id="findAllMovies" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select * from movie where movie_state = #{movie_state}
</select>
<!-- 定义名为 findMoviesLikeName 的查询语句用于根据电影的中文名称进行模糊查询并且只查询处于在线状态movie_state = 1通常 1 表示在线)的电影信息。
参数类型为 java.lang.String表示传入的参数是一个字符串类型的电影中文名称通过使用 LIKE 关键字结合通配符 '%${value}%'(此处使用 ${} 是为了直接将传入的字符串拼接进 SQL 语句实现模糊匹配,需注意防止 SQL 注入问题),在 movie 表中查找名称符合模糊匹配条件且状态为在线的电影记录,查询结果通过 BaseResultMap 映射为 Movie 实体对象并返回对应的电影集合,常用于电影搜索功能实现。 -->
<select id="findMoviesLikeName" parameterType="java.lang.String" resultMap="BaseResultMap">
select * from movie where movie_cn_name like '%${value}%' and movie_state = 1
</select>
<!-- 定义名为 findMoviesLikeType 的查询语句用于根据电影类型进行模糊查询并且只查询处于在线状态movie_state = 1的电影信息。
参数类型为 java.lang.String表示传入的参数是一个字符串类型的电影类型通过使用 LIKE 关键字结合通配符 '%${value}%' 在 movie 表中查找类型符合模糊匹配条件且状态为在线的电影记录,查询结果通过 BaseResultMap 映射为 Movie 实体对象并返回对应的电影集合,便于用户按类型查找感兴趣的电影。 -->
<select id="findMoviesLikeType" parameterType="java.lang.String" resultMap="BaseResultMap">
select * from movie where movie_type like '%${value}%' and movie_state = 1
</select>
<!-- 定义名为 sortMovieByDate 的查询语句用于按照电影的上映时间movie_releaseDate 字段对所有处于在线状态movie_state = 1的电影进行降序排序并返回排序后的电影信息列表。
查询结果通过 BaseResultMap 定义的映射关系转换为 Movie 实体对象,并以列表形式返回排序后的电影记录对应的 Movie 对象集合,方便按照上映时间展示电影,例如展示新上映电影在前的列表等情况。 -->
<select id="sortMovieByDate" resultMap="BaseResultMap">
select * from movie where movie_state = 1 order by movie_releaseDate DESC
</select>
<!-- 定义名为 sortMovieByCount 的查询语句用于按照电影的评论人数movie_commentCount 字段对所有处于在线状态movie_state = 1的电影进行降序排序并返回排序后的电影信息列表。
查询结果通过 BaseResultMap 定义的映射关系转换为 Movie 实体对象,并以列表形式返回排序后的电影记录对应的 Movie 对象集合,可用于展示热门评论电影等相关业务场景,例如评论数多的电影排在前面。 -->
<select id="sortMovieByCount" resultMap="BaseResultMap">
select * from movie where movie_state = 1 order by movie_commentCount DESC
</select>
<!-- 定义名为 sortMovieByScore 的查询语句用于按照电影的评分movie_score 字段对所有处于在线状态movie_state = 1的电影进行降序排序并返回排序后的电影信息列表。
查询结果通过 BaseResultMap 定义的映射关系转换为 Movie 实体对象,并以列表形式返回排序后的电影记录对应的 Movie 对象集合,有助于展示高分电影在前等排序结果给用户查看,方便用户选择评分较高的电影。 -->
<select id="sortMovieByScore" resultMap="BaseResultMap">
select * from movie where movie_state = 1 order by movie_score DESC
</select>
<!-- 定义名为 sortMovieByBoxOffice 的查询语句用于按照电影的票房movie_boxOffice 字段对所有处于在线状态movie_state = 1的电影进行降序排序并返回排序后的电影信息列表。
查询结果通过 BaseResultMap 定义的映射关系转换为 Movie 实体对象,并以列表形式返回排序后的电影记录对应的 Movie 对象集合,方便展示票房排名情况等业务场景,例如票房排行榜等,让用户可以看到票房较高的电影。 -->
<select id="sortMovieByBoxOffice" resultMap="BaseResultMap">
select * from movie where movie_state = 1 order by movie_boxOffice desc
</select>
<!--
删除指定 ID 的影厅信息。
参数类型为 long表示要删除的影厅的唯一标识符。
-->
<delete id="deleteHall" parameterType="long">
delete from hall where hall_id = #{hall_id}
</delete>
</mapper>

@ -9,171 +9,131 @@ import java.util.Random;
import com.alibaba.fastjson.JSONObject;
// 定义名为test的公共类属于com.util包
public class test {
// Java程序的入口方法程序从这里开始执行
public static void main(String[] args) {
// 创建一个Date对象表示当前日期和时间
// Date date = new Date();
// 使用Date对象的年、月、日信息创建一个java.sql.Date对象此处代码存在问题构造方法参数已过时推荐使用 Calendar 或者直接传入毫秒值等方式来正确创建 java.sql.Date这里暂按原代码注释逻辑说明
// java.sql.Date zdate = new java.sql.Date(date.getYear(), date.getMonth(), date.getDay());
// 输出原始的Date对象展示完整日期时间信息
// System.out.println(date);
// 输出转换后的java.sql.Date对象按照上述有问题的方式构造出来的
// System.out.println(zdate);
// 循环20次生成并格式化随机数
// for(int i = 0;i<20;i++) {
// 生成一个范围在5到9包含5不包含9之间的随机浮点数
// float random = 5 + (new Random().nextFloat() * 4);
// 创建一个DecimalFormat对象用于格式化数字格式化为保留一位小数的形式
// DecimalFormat fnum = new DecimalFormat("##0.0");
// 使用DecimalFormat对象将随机数格式化为字符串
// String score = fnum.format(random);
// 下面这行被注释掉了,原本功能是将随机数直接转换为字符串(与上面格式化后转字符串的方式不同)
// String rs = String.valueOf(random);
// 输出格式化后的随机数字符串,前面添加了"score:"标识
// System.out.println("score:" + score);
// }
// 创建一个空的JSONObject对象用于存储和操作JSON格式的数据
// JSONObject obj = new JSONObject();
// 创建另一个空的JSONObject对象可能用于存储影院相关信息从后续代码推测
// JSONObject hallobj = new JSONObject();
// 下面这行被注释掉了原本是想创建一个用于存储影院名称列表的ArrayList但是由于后续在循环内又重复创建同名变量所以这里可以考虑删除或者调整使用方式
// ArrayList<String> cinemalist= new ArrayList<String>();
// 外层循环循环2次可能用于模拟2个不同的情况从代码推测可能与影院相关
// for(int i = 0; i < 2;i++) {
// 在每次外层循环中重新创建一个ArrayList用于存储影院的厅信息这里重新创建可能不太合理除非每次循环都需要全新的列表否则可以考虑移到循环外创建一次即可
ArrayList<String> cinemalist= new ArrayList<String>();
// 内层循环循环2次用于向当前影院的厅信息列表中添加厅名称格式为"X号厅"
for(int j=0;j<2;j++) {
cinemalist.add(String.valueOf(j+1)+"号厅");
// 以下代码被注释掉了,原本用于测试 Date 和 java.sql.Date 的转换
/*
Date date = new Date();
java.sql.Date zdate = new java.sql.Date(date.getYear(), date.getMonth(), date.getDay());
System.out.println(date);
System.out.println(zdate);
*/
// 生成20个5到9之间的随机浮点数并格式化为一位小数后输出
/*
for(int i = 0; i < 20; i++) {
float random = 5 + (new Random().nextFloat() * 4);
DecimalFormat fnum = new DecimalFormat("##0.0");
String score = fnum.format(random);
System.out.println("score:" + score);
}
*/
// 构建一个包含两个影院信息的 JSON 对象每个影院有2个影厅
/*
JSONObject obj = new JSONObject();
JSONObject hallobj = new JSONObject();
for(int i = 0; i < 2; i++) {
ArrayList<String> cinemalist = new ArrayList<String>();
for(int j = 0; j < 2; j++) {
cinemalist.add(String.valueOf(j + 1) + "号厅");
}
// 将当前影院的厅信息列表添加到hallobj这个JSONObject中键为"影院X"X为当前外层循环的索引值
hallobj.put("影院"+String.valueOf(i),cinemalist);
// }
// 将包含影院厅信息的hallobj对象添加到obj这个总的JSONObject中键为"cinema"
obj.put(" cinema ", hallobj);
// 输出整个JSON对象查看构建好的包含影院信息的JSON结构
hallobj.put("影院" + String.valueOf(i), cinemalist);
}
obj.put("cinema", hallobj);
System.out.println(obj);
// 从obj中获取键为"cinema"的JSONObject对象也就是前面存放影院厅信息的那个对象
// 解析一级 JSON 对象
JSONObject obj2 = obj.getJSONObject("cinema");
// 输出获取到的二级JSONObject对象主要是为了查看解析一层后的内容可能用于调试等目的
System.out.println(obj2);
// 解析二级创建一个新的ArrayList用于存储从JSON中获取的具体影院的厅信息从后续代码看是获取"影院0"对应的厅列表)
ArrayList<String> halllist= new ArrayList<String>();
// 从obj2中获取键为"影院0"的值是一个ArrayList<String>类型并赋值给halllist然后可以进一步操作这个列表
halllist = (ArrayList<String>)obj2.get("影院0");
// 输出获取到的厅列表中的第一个元素(主要是示例如何获取具体的厅名称信息)
// 解析二级 JSON 对象
ArrayList<String> halllist = (ArrayList<String>)obj2.get("影院0");
System.out.println(halllist.get(0));
*/
// 创建一个用于存储整数的ArrayList对象
// 创建一个整数列表并添加5个元素然后打印最后一个元素
/*
ArrayList<Integer> arr = new ArrayList<Integer>();
// 循环5次向ArrayList中添加从0到4的整数
for(int i = 0;i < 5;i++) {
for(int i = 0; i < 5; i++) {
arr.add(i);
}
// 输出ArrayList中索引为4的元素也就是最后一个添加进去的元素值为4
System.out.println(arr.get(4));
*/
// 创建一个Date对象表示当前日期和时间
// 格式化当前日期为 YYYYMMdd 格式的字符串
/*
Date date = new Date();
// 创建一个SimpleDateFormat对象用于格式化日期格式为"YYYYMMdd"(注:这里格式应该是"yyyyMMdd",大写的"YYYY"表示周年,不符合常规日期格式化需求,不过先按原代码注释逻辑说明)
SimpleDateFormat dateFormat = new SimpleDateFormat("YYYYMMdd");
// 创建一个空字符串,用于后续拼接格式化后的日期字符串
String str = "";
// 将格式化后的日期字符串拼接到str上
str += dateFormat.format(date);
// 输出拼接后的日期字符串
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); // 注意:使用小写的 'y' 表示年份
String str = dateFormat.format(date);
System.out.println(str);
*/
// 定义一个字符串数组,里面存放了一些座位相关的字符串信息(格式类似"X排X座"
String [] str = {"3排4座","10排1座","5排12座","11排12座"};
// 创建一个ArrayList用于存储处理后的座位索引相关字符串从后续代码看是对座位字符串进行格式化转换后的结果
// 将座位字符串数组转换为标准化的索引形式例如“3排4座” -> "0304"
/*
String[] seats = {"3排4座", "10排1座", "5排12座", "11排12座"};
ArrayList<String> arr = new ArrayList<String>();
// 循环遍历座位字符串数组
for(int i = 0;i < str.length;i++) {
// 下面这行被注释掉了,原本可能是想输出每个座位字符串的长度,用于调试查看情况
// System.out.println(str[i].length());
// 创建一个空字符串,用于后续构建处理后的座位索引字符串
for (String seat : seats) {
String index = "";
// 根据座位字符串的长度进行不同的处理(目的可能是将座位信息转换为统一格式的索引字符串)
switch(str[i].length()) {
// 如果座位字符串长度为4进行如下处理替换"排"为"0",去掉"座"字符等操作来构建索引字符串)
case 4:
index = "0" + str[i].replaceAll("排", "0");
index = index.replaceAll("座", "");
switch (seat.length()) {
case 4:
index = "0" + seat.replaceAll("排", "0").replaceAll("座", "");
break;
// 如果座位字符串长度为5再根据中间字符是否是数字进行不同的替换操作来构建索引字符串
case 5:
if(str[i].charAt(2) >= 48 && str[i].charAt(2) <= 57) {
index = "0" + str[i].replaceAll("排", "");
index = index.replaceAll("座", "");
}else {
index = str[i].replaceAll("排", "0");
index = index.replaceAll("座", "");
if (Character.isDigit(seat.charAt(2))) {
index = "0" + seat.replaceAll("排", "").replaceAll("座", "");
} else {
index = seat.replaceAll("排", "0").replaceAll("座", "");
}
break;
// 如果座位字符串长度为6进行简单的替换操作构建索引字符串去掉"排"和"座"字符)
case 6:
index = str[i].replaceAll("排", "");
index = index.replaceAll("座", "");
index = seat.replaceAll("排", "").replaceAll("座", "");
break;
}
// 将处理好的索引字符串添加到ArrayList中
arr.add(index);
}
// 输出存储处理后座位索引字符串的ArrayList
System.out.println(arr);
*/
// 将价格转换为万元单位并格式化为四位小数
/*
int price = 29;
float box = (float) price / 10000;
System.out.println(box);
*/
// 下面这行被注释掉了定义一个整数变量表示价格值为29可能是用于后续价格相关计算等用途
// int price = 29;
// 下面这行被注释掉了将价格除以10000转换为以万为单位的浮点数可能是用于统计价格相关数据等情况
// float box = (float)price /10000;
// 下面这行被注释掉了,输出以万为单位的价格浮点数(同样是和价格转换相关的输出操作)
// System.out.println((float)price /10000);;
// 创建一个DecimalFormat对象用于格式化数字格式化为保留四位小数的形式不过从前面代码看这里的random变量未定义应该是代码编写遗漏或者错误暂按格式相关功能注释
// DecimalFormat fnum = new DecimalFormat("##0.0000");
// 使用DecimalFormat对象将随机数格式化为字符串同样由于random未定义这行实际无法正确执行仅按功能意图注释
// String score = fnum.format(random);
// 创建一个空的用于存储整数的ArrayList对象
// 使用 DecimalFormat 格式化数字为四位小数
/*
float random = (float) Math.random(); // 假设这里有一个随机数
DecimalFormat fnum = new DecimalFormat("##0.0000");
String score = fnum.format(random);
System.out.println(score);
*/
// 创建一个整数列表,将数组中的非零元素添加到列表中,并记录零元素的位置
ArrayList<Integer> arr = new ArrayList<>();
// 创建另一个空的用于存储整数索引的ArrayList对象从后续代码看是用于记录值为0的元素索引
ArrayList<Integer> indexz = new ArrayList<>();
// 定义一个整数数组包含了一些整数值包含0元素
int num[] = {1,2,3,0,5,0,6};
// 循环将整数数组中的元素添加到arr这个ArrayList中
for(int i = 0;i<num.length;i++) {
int num[] = {1, 2, 3, 0, 5, 0, 6};
for (int i = 0; i < num.length; i++) {
arr.add(num[i]);
}
// 循环遍历arr这个ArrayList查找值为0的元素并将其索引添加到indexz这个ArrayList中
for(int z = 0;z<arr.size();z++) {
if(arr.get(z) == 0) {
// 找出所有值为0的元素的索引位置
for (int z = 0; z < arr.size(); z++) {
if (arr.get(z) == 0) {
indexz.add(z);
}
}
// 输出存储了所有元素的arr这个ArrayList
System.out.println(arr);
// 输出存储了值为0的元素索引的indexz这个ArrayList
System.out.println(indexz);
// 下面这行被注释掉了如果取消注释会移除arr中索引为3的元素可能是一种操作元素的尝试暂被注释掉了
// arr.remove(3);
// 循环遍历indexz这个存储了值为0元素索引的ArrayList
for(int y =0;y<indexz.size();y++) {
// 定义一个临时变量初始值为0从后续代码看可能用于调整移除元素时的索引计算不过代码逻辑有点复杂且可能不太准确暂按原代码注释逻辑说明
int test = 0;
// 计算要移除元素的实际索引用indexz中获取的索引减去test的值这里test的使用方式有点奇怪可能导致索引计算错误等问题
int index = (indexz.get(y))-test;
// 输出要移除元素的索引(可能用于调试查看计算的索引是否正确)
System.out.println(arr); // 打印原始列表
System.out.println(indexz); // 打印零元素的索引
// 移除所有值为0的元素注意移除时需要调整索引因为每次移除后列表大小会变化
for (int y = 0; y < indexz.size(); y++) {
int index = indexz.get(y) - y; // 调整索引以适应列表大小的变化
System.out.println(index);
// 根据计算出的索引移除arr中的元素
arr.remove(index);
// 将test的值增加2同样这个操作的目的不太明确可能会导致后续索引计算混乱等问题代码逻辑可能需要调整
test = test + 2;
arr.remove((int)index); // 移除对应索引的元素
}
// 输出经过移除操作后的arr这个ArrayList查看最终的元素情况
System.out.println(arr);
System.out.println(arr); // 打印移除后的列表
}
}

@ -3,26 +3,16 @@
<!DOCTYPE html>
<html>
<head>
<!-- 设置页面的字符编码为UTF-8 -->
<meta charset="UTF-8">
<!-- 确保页面在移动设备上正确显示初始缩放比例为1.0 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- 兼容IE浏览器的特定模式 -->
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<!-- 引入Bootstrap的最小化样式文件 -->
<link href="../static/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- 引入Bootstrap的样式文件可能用于开发调试等一般生产环境用.min版本 -->
<link href="../static/bootstrap/css/bootstrap.css" rel="stylesheet">
<!-- 引入jQuery库的最小化版本用于操作DOM等功能 -->
<script src="../static/bootstrap/js/jquery-3.3.1.min.js"></script>
<!-- 引入Bootstrap的最小化JavaScript文件用于实现Bootstrap相关组件功能 -->
<script src="../static/bootstrap/js/bootstrap.min.js"></script>
<!-- 引入自定义的Api.js文件可能包含项目相关的接口调用等功能 -->
<script src="../static/js/Api.js"></script>
<!-- 设置页面的图标 -->
<link rel="icon" type="image/x-icon" href="../static/images/logo.ico"/>
<!-- 引入自定义的登录页面样式文件 -->
<link href="../static/css/login.css" rel="stylesheet">
<script></script>
@ -30,22 +20,21 @@
</head>
<body>
<!-- 页面中的一个区域用于展示一些宣传性的元素如logo、标题等 -->
<!-- ------------------------------------------------------------------- -->
<div class="screen">
<img class="big_logo"><br/>
<label class="title">鹰 眼 电 影</label><br/>
<label class="ineer_one">回首向来风雨茶香里</label><br/>
<label class="ineer_two">眸中一点可是思念谁</label>
</div>
<!-- 登录页的整体内容区域 -->
<!-- 登录页 -->
<div class="content" style="float: left;">
<!-- 用于切换登录和注册的tab栏 -->
<ul class="tab">
<li class="login">登录</li>
<li class="register">注册</li>
</ul>
<div class="page">
<!-- 登录界面的具体内容 -->
<!-- 登录界面 -->
<div class="childpage" style="display: block">
<div>
<label class="login_title">用户登录</label><br/>
@ -70,7 +59,7 @@
<label class="login_version">@版权所有</label>
</div>
</div>
<!-- 注册界面的具体内容 -->
<!-- 注册界面 -->
<div class="childpage" style="display: none">
<div>
<label class="register_title">用户注册</label><br/>
@ -108,14 +97,15 @@
</div>
<!-- ------------------------------------------------------------------- -->
<script>
// 页面加载完成后执行的初始化函数
//初始化
window.onload = function(){
initWindow(); // 初始化登录框位置
initLogin(); // 初始化登录界面
initWindow(); //初始化登录框位置
initLogin(); //初始化登录界面
  };
// 初始化登录框位置(使其垂直居中、水平处于页面特定位置
//初始化登录框位置垂直居中、水平4/7
function initWindow(){
var middle = 3;
var colorNum = 200;
@ -125,17 +115,13 @@
var screen = document.getElementsByClassName('screen')[0];
var title = document.getElementsByClassName('title')[0];
var bodys = document.getElementsByTagName('body')[0];
// 设置页面背景大小适应页面宽度
bodys.style.cssText = "background-size: " + clientWidth + "px auto;";
// 设置登录内容区域的外边距,使其垂直居中、水平处于页面特定位置
content.style.cssText = "margin:" + (clientHeight - content.clientHeight)/2 +"px " +
clientWidth*4/7 + "px " +
(clientHeight - content.clientHeight)/2 + "px;";
// 设置宣传元素区域的外边距,使其在登录内容区域内相对居中
screen.style.cssText = "margin:" + (content.clientHeight - screen.clientHeight)/2 +"px " +
(clientWidth*4/7 - screen.clientWidth)/2 + "px " +
(content.clientHeight - screen.clientHeight)/2 + "px;";
// 通过定时器改变标题颜色,实现颜色动态变化效果
setInterval(function(){
colorNum += middle;
if(colorNum>185){
@ -147,33 +133,29 @@
},30);
}
// 初始化登录界面主要处理tab切换等相关操作
//初始化登录界面
function initLogin(){
var textNum = document.getElementById('TestNum');
var liArr = document.getElementsByTagName('li');
var divArr = document.getElementsByClassName("page")[0].getElementsByClassName("childpage");
// 点击验证码按钮时更新验证码显示的值
var divArr = document.getElementsByClassName("page")[0].getElementsByClassName("childpage");
textNum.onclick = function(){
textNum.value = TestNum();
}
// 遍历tab栏的li元素添加点击事件处理函数
for(var i=0;i<liArr.length;i++){
liArr[i].index = i;
liArr[i].onclick = function(){
for(var i=0;i<liArr.length;i++){
liArr[i].index = i;
liArr[i].onclick = function(){
textNum.value = TestNum();
// 遍历页面中的子页面(登录和注册页面),先隐藏所有页面
for(var j=0;j<divArr.length;j++){
for(var j=0;j<divArr.length;j++){
liArr[j].style.cssText = "background-color:rgba(255, 255, 255, 0.2);";
divArr[j].style.display = "none";
}
// 设置当前点击的tab对应的页面显示并改变其背景色
divArr[j].style.display = "none";
}
liArr[this.index].style.cssText = "background-color:rgba(255, 255, 255, 0);";
divArr[this.index].style.display = "block";
}
}
divArr[this.index].style.display = "block";
}
}
}
// 生成一个随机的验证码字符串(由数字和字母组成)
//更新验证码
function TestNum(){
var testNum = "";
var selectChar = new Array(0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f','g','h','i','j','k','l',
@ -185,12 +167,11 @@
return testNum;
}
// 登录按钮点击时执行的函数,用于验证登录账号和密码信息
//登录账号和密码信息验证
function loginbtn(){
var user_name = $(".login_page").find("#UserName").val();
var user_pwd = $(".login_page").find("#PassWord").val();
var login_error = $(".login_error");
// 检查账号和密码是否为空,为空则显示相应提示
if((user_name == "") || (user_pwd == "")){
login_error.text("账号和密码不能为空");
}
@ -222,7 +203,7 @@
}
}
// 注册按钮点击时执行的函数,用于验证注册账号、密码、邮箱以及验证码等信息
//注册账号和密码逻信息验证
function registerbtn(){
var textNum = document.getElementById('TestNum');
var user_name = $(".register_page").find("#UserName").val();
@ -231,7 +212,6 @@
var register_error = $(".register_error");
var test = $("#Test").val();
var testbtn = $("#TestNum").val();
// 检查账号、密码、邮箱是否为空,为空则显示相应提示并更新验证码
if((user_name == "") || (user_pwd == "") || (user_email == "")){
register_error.text("账号和密码和邮箱不能为空");
textNum.value = TestNum();
@ -265,5 +245,6 @@
}
</script>
<!-- ------------------------------------------------------------------- -->
</body>
</html>
Loading…
Cancel
Save