基于SpringBoot+Vue的瑜伽课体验课预约系统
- 一、系统技术说明
- 二、运行说明
- 三、系统的演示
- 四、系统的核心代码演示
一、系统技术说明
框架:Springboot+Vue
数据库:mysql 5.7(一定要5.7版本)
数据库工具:Navicat11
开发软件:idea
Maven包:Maven3.3.9
浏览器:谷歌浏览器/IE浏览器
二、运行说明
- 本系统分为两个管理系统,一个前台,一个后台。前台主要用于学员查看课程,预约课程,查看个人信息以及交友的目的;后台主要用于管理教练与课程的信息。
- 开发环境下后端用idea启动,前端采用node 14启动。
- 后端:处理逻辑; 前端:前后台画面。
启动后端的方式:
1. 把项目导入idea中
2. 找到SpringbootSchemaApplication.java
3. 点击绿色箭头启动
启动前端的方式:
1. 在前端admin的目录下进入命令行
2. 安装包依赖:npm install vite
3. 运行项目:npm run serve
4. 前端front同理
- 前台访问地址:http://localhost:8082/#/index/home
- 后台访问地址:http://localhost:8081/#/login
- 登录的用户名和密码
后台:
管理员用户:admin
管理员密码:admin
前台和后台:
教练用户:教练工号1
教练密码:123456
前台:
学员用户:用户账号1
学员密码:123456
三、系统的演示
四、系统的核心代码演示
给大家看下系统的核心代码,若想学习的,可以借鉴下
/**
* 教练
* 后端接口
* @author
* @email
* @date 2023-12-24 18:07:02
*/
@RestController
@RequestMapping("/jiaolian")
public class JiaolianController {
@Autowired
private JiaolianService jiaolianService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
JiaolianEntity u = jiaolianService.selectOne(new EntityWrapper<JiaolianEntity>().eq("jiaoliangonghao", username));
if(u!=null && u.getStatus().intValue()==1) {
return R.error("账号已锁定,请联系管理员。");
}
if(u==null || !u.getMima().equals(password)) {
if(u!=null) {
u.setPasswordwrongnum(u.getPasswordwrongnum()+1);
if(u.getPasswordwrongnum()>=3) {
u.setStatus(1);
}
jiaolianService.updateById(u);
}
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(u.getId(), username,"jiaolian", "教练" );
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody JiaolianEntity jiaolian){
//ValidatorUtils.validateEntity(jiaolian);
JiaolianEntity u = jiaolianService.selectOne(new EntityWrapper<JiaolianEntity>().eq("jiaoliangonghao", jiaolian.getJiaoliangonghao()));
if(u!=null) {
return R.error("注册用户已存在");
}
Long uId = new Date().getTime();
jiaolian.setId(uId);
jiaolianService.insert(jiaolian);
return R.ok();
}
/**
* 退出
*/
@RequestMapping("/logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
JiaolianEntity u = jiaolianService.selectById(id);
return R.ok().put("data", u);
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
JiaolianEntity u = jiaolianService.selectOne(new EntityWrapper<JiaolianEntity>().eq("jiaoliangonghao", username));
if(u==null) {
return R.error("账号不存在");
}
u.setMima("123456");
jiaolianService.updateById(u);
return R.ok("密码已重置为:123456");
}
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,JiaolianEntity jiaolian,
HttpServletRequest request){
EntityWrapper<JiaolianEntity> ew = new EntityWrapper<JiaolianEntity>();
PageUtils page = jiaolianService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiaolian), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,JiaolianEntity jiaolian,
HttpServletRequest request){
EntityWrapper<JiaolianEntity> ew = new EntityWrapper<JiaolianEntity>();
PageUtils page = jiaolianService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiaolian), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( JiaolianEntity jiaolian){
EntityWrapper<JiaolianEntity> ew = new EntityWrapper<JiaolianEntity>();
ew.allEq(MPUtil.allEQMapPre( jiaolian, "jiaolian"));
return R.ok().put("data", jiaolianService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(JiaolianEntity jiaolian){
EntityWrapper< JiaolianEntity> ew = new EntityWrapper< JiaolianEntity>();
ew.allEq(MPUtil.allEQMapPre( jiaolian, "jiaolian"));
JiaolianView jiaolianView = jiaolianService.selectView(ew);
return R.ok("查询教练成功").put("data", jiaolianView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
JiaolianEntity jiaolian = jiaolianService.selectById(id);
return R.ok().put("data", jiaolian);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
JiaolianEntity jiaolian = jiaolianService.selectById(id);
return R.ok().put("data", jiaolian);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody JiaolianEntity jiaolian, HttpServletRequest request){
jiaolian.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(jiaolian);
JiaolianEntity u = jiaolianService.selectOne(new EntityWrapper<JiaolianEntity>().eq("jiaoliangonghao", jiaolian.getJiaoliangonghao()));
if(u!=null) {
return R.error("用户已存在");
}
jiaolian.setId(new Date().getTime());
jiaolianService.insert(jiaolian);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody JiaolianEntity jiaolian, HttpServletRequest request){
jiaolian.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(jiaolian);
JiaolianEntity u = jiaolianService.selectOne(new EntityWrapper<JiaolianEntity>().eq("jiaoliangonghao", jiaolian.getJiaoliangonghao()));
if(u!=null) {
return R.error("用户已存在");
}
jiaolian.setId(new Date().getTime());
jiaolianService.insert(jiaolian);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
public R update(@RequestBody JiaolianEntity jiaolian, HttpServletRequest request){
//ValidatorUtils.validateEntity(jiaolian);
jiaolianService.updateById(jiaolian);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
jiaolianService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UsersController{
@Autowired
private UsersService userService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UsersEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UsersEntity user){
EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UsersEntity user){
EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UsersEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UsersEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UsersEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UsersEntity user){
// ValidatorUtils.validateEntity(user);
UsersEntity u = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
/**
* 预约查询
* 后端接口
* @author
* @email
* @date 2023-12-24 18:07:02
*/
@RestController
@RequestMapping("/yuyuechaxun")
public class YuyuechaxunController {
@Autowired
private YuyuechaxunService yuyuechaxunService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,YuyuechaxunEntity yuyuechaxun,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaolian")) {
yuyuechaxun.setJiaoliangonghao((String)request.getSession().getAttribute("username"));
}
if(tableName.equals("yonghu")) {
yuyuechaxun.setYonghuzhanghao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<YuyuechaxunEntity> ew = new EntityWrapper<YuyuechaxunEntity>();
PageUtils page = yuyuechaxunService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yuyuechaxun), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,YuyuechaxunEntity yuyuechaxun,
HttpServletRequest request){
EntityWrapper<YuyuechaxunEntity> ew = new EntityWrapper<YuyuechaxunEntity>();
PageUtils page = yuyuechaxunService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yuyuechaxun), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( YuyuechaxunEntity yuyuechaxun){
EntityWrapper<YuyuechaxunEntity> ew = new EntityWrapper<YuyuechaxunEntity>();
ew.allEq(MPUtil.allEQMapPre( yuyuechaxun, "yuyuechaxun"));
return R.ok().put("data", yuyuechaxunService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(YuyuechaxunEntity yuyuechaxun){
EntityWrapper< YuyuechaxunEntity> ew = new EntityWrapper< YuyuechaxunEntity>();
ew.allEq(MPUtil.allEQMapPre( yuyuechaxun, "yuyuechaxun"));
YuyuechaxunView yuyuechaxunView = yuyuechaxunService.selectView(ew);
return R.ok("查询预约查询成功").put("data", yuyuechaxunView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
YuyuechaxunEntity yuyuechaxun = yuyuechaxunService.selectById(id);
return R.ok().put("data", yuyuechaxun);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
YuyuechaxunEntity yuyuechaxun = yuyuechaxunService.selectById(id);
return R.ok().put("data", yuyuechaxun);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody YuyuechaxunEntity yuyuechaxun, HttpServletRequest request){
//ValidatorUtils.validateEntity(yuyuechaxun);
yuyuechaxunService.insert(yuyuechaxun);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody YuyuechaxunEntity yuyuechaxun, HttpServletRequest request){
//ValidatorUtils.validateEntity(yuyuechaxun);
yuyuechaxunService.insert(yuyuechaxun);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
public R update(@RequestBody YuyuechaxunEntity yuyuechaxun, HttpServletRequest request){
//ValidatorUtils.validateEntity(yuyuechaxun);
yuyuechaxunService.updateById(yuyuechaxun);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
yuyuechaxunService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* (按值统计)
*/
@RequestMapping("/value/{xColumnName}/{yColumnName}")
public R value(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName,HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("xColumn", xColumnName);
params.put("yColumn", yColumnName);
EntityWrapper<YuyuechaxunEntity> ew = new EntityWrapper<YuyuechaxunEntity>();
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaolian")) {
ew.eq("jiaoliangonghao", (String)request.getSession().getAttribute("username"));
}
if(tableName.equals("yonghu")) {
ew.eq("yonghuzhanghao", (String)request.getSession().getAttribute("username"));
}
List<Map<String, Object>> result = yuyuechaxunService.selectValue(params, ew);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
return R.ok().put("data", result);
}
/**
* (按值统计(多))
*/
@RequestMapping("/valueMul/{xColumnName}")
public R valueMul(@PathVariable("xColumnName") String xColumnName,@RequestParam String yColumnNameMul, HttpServletRequest request) {
String[] yColumnNames = yColumnNameMul.split(",");
Map<String, Object> params = new HashMap<String, Object>();
params.put("xColumn", xColumnName);
List<List<Map<String, Object>>> result2 = new ArrayList<List<Map<String,Object>>>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
EntityWrapper<YuyuechaxunEntity> ew = new EntityWrapper<YuyuechaxunEntity>();
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaolian")) {
ew.eq("jiaoliangonghao", (String)request.getSession().getAttribute("username"));
}
if(tableName.equals("yonghu")) {
ew.eq("yonghuzhanghao", (String)request.getSession().getAttribute("username"));
}
for(int i=0;i<yColumnNames.length;i++) {
params.put("yColumn", yColumnNames[i]);
List<Map<String, Object>> result = yuyuechaxunService.selectValue(params, ew);
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
result2.add(result);
}
return R.ok().put("data", result2);
}
/**
* (按值统计)时间统计类型
*/
@RequestMapping("/value/{xColumnName}/{yColumnName}/{timeStatType}")
public R valueDay(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType,HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("xColumn", xColumnName);
params.put("yColumn", yColumnName);
params.put("timeStatType", timeStatType);
EntityWrapper<YuyuechaxunEntity> ew = new EntityWrapper<YuyuechaxunEntity>();
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaolian")) {
ew.eq("jiaoliangonghao", (String)request.getSession().getAttribute("username"));
}
if(tableName.equals("yonghu")) {
ew.eq("yonghuzhanghao", (String)request.getSession().getAttribute("username"));
}
List<Map<String, Object>> result = yuyuechaxunService.selectTimeStatValue(params, ew);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
return R.ok().put("data", result);
}
/**
* (按值统计)时间统计类型(多)
*/
@RequestMapping("/valueMul/{xColumnName}/{timeStatType}")
public R valueMulDay(@PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType,@RequestParam String yColumnNameMul,HttpServletRequest request) {
String[] yColumnNames = yColumnNameMul.split(",");
Map<String, Object> params = new HashMap<String, Object>();
params.put("xColumn", xColumnName);
params.put("timeStatType", timeStatType);
List<List<Map<String, Object>>> result2 = new ArrayList<List<Map<String,Object>>>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
EntityWrapper<YuyuechaxunEntity> ew = new EntityWrapper<YuyuechaxunEntity>();
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaolian")) {
ew.eq("jiaoliangonghao", (String)request.getSession().getAttribute("username"));
}
if(tableName.equals("yonghu")) {
ew.eq("yonghuzhanghao", (String)request.getSession().getAttribute("username"));
}
for(int i=0;i<yColumnNames.length;i++) {
params.put("yColumn", yColumnNames[i]);
List<Map<String, Object>> result = yuyuechaxunService.selectTimeStatValue(params, ew);
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
result2.add(result);
}
return R.ok().put("data", result2);
}
/**
* 分组统计
*/
@RequestMapping("/group/{columnName}")
public R group(@PathVariable("columnName") String columnName,HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("column", columnName);
EntityWrapper<YuyuechaxunEntity> ew = new EntityWrapper<YuyuechaxunEntity>();
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaolian")) {
ew.eq("jiaoliangonghao", (String)request.getSession().getAttribute("username"));
}
if(tableName.equals("yonghu")) {
ew.eq("yonghuzhanghao", (String)request.getSession().getAttribute("username"));
}
List<Map<String, Object>> result = yuyuechaxunService.selectGroup(params, ew);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
return R.ok().put("data", result);
}
}
如果觉得系统不错,欢迎点赞关注收藏。
源码链接:(夸克网盘)
链接:https://pan.quark.cn/s/093cbd886c8a
提取码:DWQD