一、技术路线:
开发语言:Java
使用框架:spring boot
前端技术:JavaScript、VUE.js(2.X)、css3
数据库:MySQL 5.7
数据库管理工具:Navicat或sqlyog
开发工具:IDEA或Ecplise
二、项目介绍:
https://www.bilibili.com/video/BV16F411k7wb?t=0.4
三、运行截图:
编程人员在搭建的开发环境中,运用编程技术实现本系统设计的各个操作权限的功能。在本节中,就展示部分操作权限的功能与界面。
3.1 管理员后台功能实现
3.1.1 论坛管理
图3.1 即为编码实现的论坛管理界面,管理员在该界面中查看论坛回复信息,修改论坛帖子内容,可以删除论坛帖子。论坛信息包含帖子标题,用户姓名,用户手机号,用户身份证,查询的时候可以通过这些信息查询出来结果,添加内容的时候需要输入帖子类型,帖子标题,发布内容。
图3.1 论坛管理界面
管理员添加论坛:
@RequestMapping("/save")
public R save(@RequestBody ForumEntity forum, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,forum:{}",this.getClass().getName(),forum.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(StringUtil.isEmpty(role))
return R.error(511,"权限为空");
else if("用户".equals(role))
forum.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
else if("管理员".equals(role))
forum.setUsersId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
Wrapper<ForumEntity> queryWrapper = new EntityWrapper<ForumEntity>()
.eq("forum_name", forum.getForumName())
.eq("yonghu_id", forum.getYonghuId())
.eq("users_id", forum.getUsersId())
.eq("super_ids", forum.getSuperIds())
.eq("forum_types", forum.getForumTypes())
.eq("forum_state_types", forum.getForumStateTypes())
;
logger.info("sql语句:"+
queryWrapper.getSqlSegment());
ForumEntity forumEntity = forumService.selectOne(queryWrapper);
if(forumEntity==null){
forum.setInsertTime(new Date());
forum.setCreateTime(new Date());
forumService.insert(forum);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
3.1.2 用户管理
图3.2 即为编码实现的用户管理界面,管理员在该界面中为注册系统的用户重置密码,更改用户的头像,电子邮箱等基础信息,删除需要删除的用户。用户信息包含账号,密码,手机号,身份证,头像,性别,电子信箱,余额等。查询的时候只需要提供用户姓名,手机号,身份证就可以查询。
图3.2 用户管理界面
用户添加:
@RequestMapping("/save")
public R save(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(StringUtil.isEmpty(role))
return R.error(511,"权限为空");
Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>()
.eq("username", yonghu.getUsername())
.or()
.eq("yonghu_phone", yonghu.getYonghuPhone())
.or()
.eq("yonghu_id_number", yonghu.getYonghuIdNumber())
;
logger.info("sql语句:"+
queryWrapper.getSqlSegment());
YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);
if(yonghuEntity==null){
yonghu.setCreateTime(new Date());
yonghu.setPassword("123456");
yonghuService.insert(yonghu);
return R.ok();
}else {
return R.error(511,"账户或者用户手机号或者用户身份证号已经被使用");
}
}
3.1.3 场地管理
图3.3 即为编码实现的场地管理界面,管理员在该界面中可以更改场地信息,新增新的场地信息,删除需要删除的场地资料。场地搜索只需要输入场地名称,场地类型就可以查到结果。新增场地则需要输入场地编号,场地名称,照片,类型,原价,现价,时间段,半全场,推荐吃饭地点,场地介绍等。
图3.3 场地管理界面
场地修改:
@RequestMapping("/update")
public R update(@RequestBody ChangdiEntity changdi, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,changdi:{}",this.getClass().getName(),changdi.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
Wrapper<ChangdiEntity> queryWrapper = new EntityWrapper<ChangdiEntity>()
.notIn("id",changdi.getId())
.andNew()
.eq("changdi_uuid_number",
changdi.getChangdiUuidNumber())
.eq("changdi_name", changdi.getChangdiName())
.eq("changdi_types", changdi.getChangdiTypes())
.eq("shijianduan", changdi.getShijianduan())
.eq("shijianduan_ren", changdi.getShijianduanRen())
.eq("changdi_clicknum",
changdi.getChangdiClicknum())
.eq("banquan_types", changdi.getBanquanTypes())
.eq("shangxia_types", changdi.getShangxiaTypes())
.eq("tuijian", changdi.getTuijian())
.eq("changdi_delete", changdi.getChangdiDelete())
;
logger.info("sql语句:"+
queryWrapper.getSqlSegment());
ChangdiEntity changdiEntity = changdiService.selectOne(queryWrapper);
if("".equals(changdi.getChangdiPhoto()) || "null".equals(changdi.getChangdiPhoto())){
changdi.setChangdiPhoto(null);
}
if(changdiEntity==null){
changdiService.updateById(changdi);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
3.1.4 场地订单管理
图3.4 即为编码实现的场地订单管理界面,管理员在该界面中对用户预约的场地订单进行查询,更改等,查看场地预约订单的预约时间段信息以及订单类型等信息。可以通过输入场地名称,类型,用户姓名,用户手机号,用户身份证号来进行查询场地预约信息。
图3.4 场地订单管理界面
场地订单列表:
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(StringUtil.isEmpty(role))
return R.error(511,"权限为空");
else if("用户".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = changdiOrderService.queryPage(params);
//字典表数据转换
List<ChangdiOrderView> list =(List<ChangdiOrderView>)page.getList();
for(ChangdiOrderView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
3.1.5 公告信息管理
图3.5 即为编码实现的公告信息管理界面,管理员在该界面中负责发布公告信息,更改公告信息的部分信息,删除需要删除的公告。
图3.5 公告信息管理界面
3.2 用户前台功能实现
3.2.1 场地信息
图3.6 即为编码实现的场地信息界面,用户在该界面中对场地进行预定,或收藏场地方便下次查看场地信息。可以看到的场地名称,类型,原价,现价,人数,点击次数,半全场,推荐吃饭地点,订购日期,订购时间段详情介绍。
图3.6 场地信息界面
场地预约:
@RequestMapping("/add")
public R add(@RequestBody ChangdiOrderEntity changdiOrder, HttpServletRequest request){
logger.debug("add方法:,,Controller:{},,changdiOrder:{}",this.getClass().getName(),changdiOrder.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if("用户".equals(role)){
ChangdiEntity changdiEntity = changdiService.selectById(changdiOrder.getChangdiId());
if(changdiEntity == null){
return R.error(511,"查不到该场地");
}
if(
changdiEntity.getChangdiNewMoney() == null){
return R.error(511,"场地价格不能为空");
}
Integer userId = (Integer) request.getSession().getAttribute("userId");
YonghuEntity yonghuEntity = yonghuService.selectById(userId);
if(yonghuEntity == null)
return R.error(511,"用户不能为空");
if(yonghuEntity.getNewMoney() == null)
return R.error(511,"用户金额不能为空");
double balance = yonghuEntity.getNewMoney() -
changdiEntity.getChangdiNewMoney();//余额
if(balance<0)
return R.error(511,"余额不够支付");
List<Integer> changdiOrderTypes = new ArrayList<>();
changdiOrderTypes.add(2);
String buyTime = new SimpleDateFormat("yyyy-MM-dd").format(changdiOrder.getBuyTime());
List<ChangdiOrderEntity> changdiOrderEntities = changdiOrderService.selectList(new EntityWrapper<ChangdiOrderEntity>().notIn("changdi_order_types", changdiOrderTypes).eq("shijianduan",
changdiOrder.getShijianduan()).eq("buy_time",buyTime));
if(changdiOrderEntities != null && changdiOrderEntities.size()>0)
return R.error(511,buyTime+" 那天的 "+
changdiOrder.getShijianduan()+" 的时间段已经被预约了");
changdiOrder.setYonghuId(userId); //设置订单支付人id
changdiOrder.setInsertTime(new Date());
changdiOrder.setCreateTime(new Date());
changdiOrder.setChangdiOrderTypes(1);
changdiOrder.setChangdiOrderTruePrice(changdiEntity.getChangdiNewMoney());
changdiOrder.setChangdiOrderUuidNumber(String.valueOf(new Date().getTime()));
changdiOrderService.insert(changdiOrder);//新增订单
yonghuEntity.setNewMoney(balance);//设置金额
yonghuService.updateById(yonghuEntity);
return R.ok();
}else{
return R.error(511,"您没有权限支付订单");
}
}
3.2.2 在线论坛
图3.7 即为编码实现的在线论坛界面,用户在该界面中对论坛所有帖子进行查看,查看帖子之后可以发布帖子评论,用户也能点击发布帖子链接进入新界面发布自己的帖子。主要可以看到帖子标题,发布人权限,发布时间,可以对这些帖子进行回复操作。
图3.7 在线论坛界面
3.2.3 场地预约
图3.8 即为编码实现的场地预约界面,用户在该界面中浏览已经预约的场地。如果存在误操作,用户可以取消预约的场地。在个人中心我的场地预约里面,有全部场地预约,已使用,取消预约,已预约这几个状态的预约信息,已经取消预约的不能再取消,已预约尚未取消预约的才可以取消预约。
图3.8 场地预约界面
我的预约:
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
// 没有指定排序字段就默认id倒序
if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
params.put("orderBy","id");
}
PageUtils page = changdiOrderService.queryPage(params);
//字典表数据转换
List<ChangdiOrderView> list =(List<ChangdiOrderView>)page.getList();
for(ChangdiOrderView c:list)
dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
return R.ok().put("data", page);
}