目录
一、摘要
1.1 项目介绍
基于JAVA+Vue+SpringBoot+MySQL的天沐瑜伽馆管理系统,包含了瑜伽课程、课程预约、课程安排、课程评价、瑜伽器械、系统公告模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,天沐瑜伽馆管理系统基于角色的访问控制,给瑜伽学员、瑜伽教练、瑜伽管理员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。
1.2 项目录屏
二、功能模块
本文设计的天沐瑜伽馆管理系统的包括了系统数据中心模块,用来存放管理系统通用的模块,另外分别设计了瑜伽课程模块、课程预约模块、系统公告模块、课程评价模块和瑜伽器械模块这五大模块,用于存放系统的核心业务逻辑。
2.1 数据中心模块
数据中心模块包含了对天沐瑜伽馆管理系统的基础模块,比如管理谁可以登录这套系统,记录这些人登录系统做了什么,不同的人拥有不同权限的管理。
2.2 瑜伽课程模块
瑜伽课程模块用于对瑜伽课程的数据进行管理,其中包括课程名称、课程介绍、课程类型、讲师ID、讲师、课程图片、课程价格、创建人等,可以通过此模块对瑜伽课程数据进行添加、编辑更新、删除、查询操作。
2.3 课程预约模块
课程预约模块是学生对课程的预约信息进行管理,学生可以对喜欢的瑜伽课程进行预约操作,包括团课和私教课程,瑜伽课程预约的字段包括课程ID、课程名称、课程介绍、课程类型、课程图片、课程价格、预约人、预约时间等,学生可以对管理员发布的瑜伽课程进行预约,也可以查询自己的历史预约情况,管理员可以维护学生的预约记录。
2.4 系统公告模块
系统公告模块用于管理员对系统公告的维护,系统公告的作用就是通知相关信息给学员,比如瑜伽课程的停课、调课信息等。系统公告字段其中包括公告标题、公告内容、图片、状态、排序值、发布人、创建人、创建时间等,瑜伽管理员可以增加、删除、编辑和条件查询系统公告,瑜伽学生可以查询系统公告。
2.5 课程评价模块
课程评价模块是维护学生的瑜伽课程的评价,当学生完成对某个瑜伽课程的学习后,有权对该瑜伽课程进行评价,以便于改善该课程的质量,瑜伽评价字段包括课程ID、课程名称、评价等级、评语、学生ID、学生、评价时间、创建人等。
2.6 瑜伽器械模块
瑜伽器械模块是维护瑜伽课程中所需要的器械数据,瑜伽机械是学生学习瑜伽课程的必备条件,所以系统设计了这个模块,瑜伽器械字段包括器械名称、品牌、功能用途、厂商、采购价、图片、备注、创建人等,瑜伽管理员可以新增、删除、修改瑜伽机械信息,瑜伽学员可以查询管理员发布的瑜伽器械明细。
三、系统设计
3.1 实体类设计
3.1.1 瑜伽课程
3.1.2 瑜伽课程预约
3.1.3 系统公告
3.1.4 瑜伽课程评价
3.2 数据库设计
3.2.1 瑜伽课程表
3.2.2 瑜伽课程预约表
3.2.3 系统公告表
3.2.4 瑜伽课程选课表
3.2.5 学生成绩表
本章是对天沐瑜伽馆管理系统的设计部分。这个章节介绍了天沐瑜伽馆管理系统的设计基本思想,和各个模块的设计思想,设计了瑜伽课程模块、课程预约模块、系统公告模块、课程评价模块、瑜伽器械模块和数据中心模块。
四、系统展示
五、核心代码
5.1 查询瑜伽课程
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询瑜伽课程")
public Result<IPage<YogaCurriculum>> getByPage(@ModelAttribute YogaCurriculum yogaCurriculum ,@ModelAttribute PageVo page){
QueryWrapper<YogaCurriculum> qw = new QueryWrapper<>();
if(!ZwzNullUtils.isNull(yogaCurriculum.getTitle())) {
qw.like("title",yogaCurriculum.getTitle());
}
if(!ZwzNullUtils.isNull(yogaCurriculum.getType())) {
qw.eq("type",yogaCurriculum.getType());
}
if(!ZwzNullUtils.isNull(yogaCurriculum.getUserName())) {
qw.like("user_name",yogaCurriculum.getUserName());
}
User currUser = securityUtil.getCurrUser();
IPage<YogaCurriculum> data = iYogaCurriculumService.page(PageUtil.initMpPage(page),qw);
for (YogaCurriculum vo : data.getRecords()) {
QueryWrapper<YogaOrder> orderQw = new QueryWrapper<>();
orderQw.eq("curriculum_id",vo.getId());
orderQw.eq("order_id",currUser.getId());
vo.setOrderFlag(iYogaOrderService.count(orderQw));
}
return new ResultUtil<IPage<YogaCurriculum>>().setData(data);
}
5.2 瑜伽课程预约
@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "新增预约")
public Result<Object> addOne(@RequestParam String id){
YogaCurriculum c = iYogaCurriculumService.getById(id);
if(c == null) {
return ResultUtil.error("瑜伽课程不存在");
}
YogaOrder o = new YogaOrder();
o.setCurriculumId(c.getId());
o.setCurriculumName(c.getTitle());
o.setContent(c.getContent());
o.setType(c.getType());
o.setUserId(c.getUserId());
o.setUserName(c.getUserName());
o.setImage(c.getImage());
o.setPrice(c.getPrice());
User currUser = securityUtil.getCurrUser();
o.setOrderId(currUser.getId());
o.setOrderName(currUser.getNickname());
o.setOrderTime(DateUtil.now());
// 扣除费用
User user = iUserService.getById(currUser.getId());
if(o.getPrice().compareTo(user.getMoney()) > 0) {
return ResultUtil.error("余额不足");
}
user.setMoney(user.getMoney().subtract(o.getPrice()));
iUserService.saveOrUpdate(user);
iYogaOrderService.saveOrUpdate(o);
return ResultUtil.success();
}
5.3 瑜伽课程评价
@RequestMapping(value = "/addAppraise", method = RequestMethod.GET)
@ApiOperation(value = "新增评价")
public Result<YogaArrange> addAppraise(@RequestParam String id,@RequestParam String level,@RequestParam String content){
YogaCurriculum c = iYogaCurriculumService.getById(id);
if(c == null) {
return ResultUtil.error("瑜伽课程不存在");
}
User currUser = securityUtil.getCurrUser();
YogaAppraise a = new YogaAppraise();
a.setCurriculumId(c.getId());
a.setCurriculumName(c.getTitle());
a.setLevel(level);
a.setContent(content);
a.setOrderId(currUser.getId());
a.setOrderName(currUser.getNickname());
a.setOrderTime(DateUtil.now());
iYogaAppraiseService.saveOrUpdate(a);
return ResultUtil.success();
}
5.4 查询瑜伽器械
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询瑜伽器械")
public Result<IPage<YogaApparatus>> getByPage(@ModelAttribute YogaApparatus yogaApparatus ,@ModelAttribute PageVo page){
QueryWrapper<YogaApparatus> qw = new QueryWrapper<>();
if(!ZwzNullUtils.isNull(yogaApparatus.getTitle())) {
qw.like("title",yogaApparatus.getTitle());
}
if(!ZwzNullUtils.isNull(yogaApparatus.getBrand())) {
qw.like("brand",yogaApparatus.getBrand());
}
if(!ZwzNullUtils.isNull(yogaApparatus.getPurpose())) {
qw.like("purpose",yogaApparatus.getPurpose());
}
IPage<YogaApparatus> data = iYogaApparatusService.page(PageUtil.initMpPage(page),qw);
return new ResultUtil<IPage<YogaApparatus>>().setData(data);
}
5.5 新增公告
@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增公告")
public Result<Announcement> insert(Announcement announcement){
if(Objects.equals(0,announcement.getSortOrder().compareTo(BigDecimal.ZERO))) {
announcement.setSortOrder(BigDecimal.valueOf(iAnnouncementService.count() + 1L));
}
User currUser = securityUtil.getCurrUser();
announcement.setPublisher(currUser.getNickname());
iAnnouncementService.saveOrUpdate(announcement);
return new ResultUtil<Announcement>().setData(announcement);
}
六、免责说明
- 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
- 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
- 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。
下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!
- 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
- 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
- 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
- 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。