# 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后端接口

##### 客户端

可选择多个座位,并会根据用户的VIP级别计算折扣

支持支付宝沙箱支付,并显示详细的订单内容

##### 管理端
超方便的设置场次

支持多条件模糊查询取交集或并集

#### 软件架构
软件架构说明
#### 安装教程
1. 创建对应的数据库,sql语句在doc文件夹下
2. 配置admin下的yml文件中的mysql数据库和redis库
3. 运行amdin下的启动器即可
4. 如果需要使用支付宝支付,请自行修改core中config目录下的AlipayConfig中的参数,对应的客户端请求的支付宝路径也要改
#### 使用说明
1. cinemasyss-web暂时没有用,客户端接口也写在了admin中
2. 如果是在本地跑是不能直接调支付宝接口的,支付宝回调需要项目能够被外网访问,解决方法是使用内网穿透,这里推荐使用natapp,参考[natapp官网](https://natapp.cn/)