# cinemasys **Repository Path**: longzipeng/cinemasys ## Basic Information - **Project Name**: cinemasys - **Description**: 前后端分离的影院系统 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-04-08 - **Last Updated**: 2022-06-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # cinemasys #### 介绍 该系统是我的毕设项目,还有许多不足的地方需要完善
客户端git地址: [https://gitee.com/longzipeng/cinemasys-front](https://gitee.com/longzipeng/cinemasys-front) 管理端git地址: [https://gitee.com/longzipeng/cinemasys_back](https://gitee.com/longzipeng/cinemasys_back) vue-element-template地址:[https://gitee.com/panjiachen/vue-admin-template](https://gitee.com/panjiachen/vue-admin-template) #### 演示网址 客户端:[http://www.longzipeng.online:9997](http://www.longzipeng.online:9997) *移动端显示风格,最好在浏览器移动端调试窗口下浏览体验最佳*
管理端:[http://www.longzipeng.online:9998](http://www.longzipeng.online:9998)
后端swagger生成接口文档:[http://www.longzipeng.online:9999/doc.html](http://www.longzipeng.online:9999/doc.html) #### 主要实现功能 *客户端:*
1.登录、注册、通过邮箱找回密码
2.选座、支付宝沙箱支付 *管理端:*
1.对系统用户、影院相关、客户端客户等数据进行增删改查
2.修改个人密码、头像等信息
3.创建影厅时设置座位数量,系统会自动生成相应数量的座位并排号,新建场次时,系统会根据所选电影自动设置结束时间,根据所选影厅将影厅中的座位集合作为值,“session_”+“场次id”作为键存储在redis缓存之中,用于维护场次座位关系用于购票。 **关于场次座位,用redis缓存维护我想说:** 首先我们要知道一个影厅对应上百个座位,一天有很多个场次,多个场次可能对应不同时间段的同一个影厅,那么按常规的想法我们就需要在座位表中加一个场次的外键,每多一个场次就需要遍历影厅中的座位插入进去设置外键为场次ID,这样每天的数据量就相当大。所以在这里我用了另一个设计,在创建场次的同时查询对应影厅的所有座位,将“session+场次ID”作为key,座位作为值存储在缓存中,场次的创建时间到影片的结束时间作为过期时间,在缓存中维护场次座位信息,即使后期我们需要统计某个场次中的购买情况,我们也能够通过用户的订单去获取相关座位,同时过滤出未购买的座位的信息,这样的设计不仅提高了用户体验(缓存请求快),还节省了数据存储空间(省去了数据库中的存储,座位表只需要存储对应影厅的座位即可)
**影院系统前后端分离**
**后端技术:**
1.SpringBoot集成SSM、MybatisPlus、druid等
2.使用阿里云oss服务存储系统中的图片,支付宝沙箱完成支付
3.使用redis缓存维护场次座位关系,swagger生成接口文档 **前端技术**:
1.全部基于vue,axous发送请求,使用vuex存储登录token
2.客户端使用VantUI,管理端基于vue-element-template二次开发
**部署技术**:
参考项目dock文件夹中的reids和web目录中的docker-compose.yaml文件
1.后端使用SpringBoot打包成jar包,在服务器上使用nohup java -jar的方式在后端运行,并接上remote参数方便idea远程调试
2.客户端使用docker-compose编排了两个nginx容器映映射服务器的back和front两个目录,分别放置webPacket打包后前端的静态文件
3.docker-compose编排redis, **注意:** 需要设置redis密码!【不设密码会被别人攻击,然后数据的key就变成bacxx了,redis会自动恢复然后无限失败.....】 + 设置密码只需在docker-compose文件中设置添加密码配置即可: ~~~cmd version: '3.1' services: redis: image: daocloud.io/library/redis:5.0.7 restart: always container_name: redis command: redis-server --requirepass lzpis666 # 配置密码 environment: - TZ=Asia/Shanghai ports: - 6379:6379 volumes: - ./data:/data #挂载/docker-compose/redis/data至容器 ~~~ + 注意,如果用的是redis6.x就需要配置 用户名+密码,建议用5.x,因为我用的redis客户端工具 another redis desktop manager 没有输入用户名的输入框【笑哭】 #### 效果 ##### swagger后端接口 ![Swagger生成后端接口](https://images.gitee.com/uploads/images/2021/0606/110549_6a2ed7af_7723050.png "swagger生成后端接口.png") ##### 客户端 ![电影列表](https://images.gitee.com/uploads/images/2021/0605/153652_42ef496e_7723050.png "电影列表.png") 可选择多个座位,并会根据用户的VIP级别计算折扣 ![多个座位购票](https://images.gitee.com/uploads/images/2021/0605/153752_095f822e_7723050.png "多个座位购票.png") 支持支付宝沙箱支付,并显示详细的订单内容 ![沙箱支付](https://images.gitee.com/uploads/images/2021/0605/153948_a1f8d2fd_7723050.png "沙箱支付.png") ##### 管理端 超方便的设置场次 ![添加场次](https://images.gitee.com/uploads/images/2021/0605/153226_6111c0df_7723050.png "添加场次.png") 支持多条件模糊查询取交集或并集 ![多条件组合查询](https://images.gitee.com/uploads/images/2021/0605/153512_b504a9fd_7723050.png "多条件组合查询.png") #### 软件架构 软件架构说明 #### 安装教程 1. 创建对应的数据库,sql语句在doc文件夹下 2. 配置admin下的yml文件中的mysql数据库和redis库 3. 运行amdin下的启动器即可 4. 如果需要使用支付宝支付,请自行修改core中config目录下的AlipayConfig中的参数,对应的客户端请求的支付宝路径也要改 #### 使用说明 1. cinemasyss-web暂时没有用,客户端接口也写在了admin中 2. 如果是在本地跑是不能直接调支付宝接口的,支付宝回调需要项目能够被外网访问,解决方法是使用内网穿透,这里推荐使用natapp,参考[natapp官网](https://natapp.cn/)