基于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 {@Autowiredprivate JiaolianService jiaolianService;@Autowiredprivate 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")@Transactionalpublic 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{@Autowiredprivate UsersService userService;@Autowiredprivate 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 {@Autowiredprivate 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")@Transactionalpublic 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