写点什么

基于 Java“萌宠之家”宠物综合服务平台设计实现 (源码 +lw+ 部署文档 + 讲解等)

作者:hunter_coder
  • 2024-06-25
    陕西
  • 本文字数:6775 字

    阅读完需:约 22 分钟

\n 文末获取源码联系


感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询

系统介绍:

互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对宠物服务信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用“萌宠之家”宠物综合服务平台可以有效管理,使信息管理能够更加科学和规范。


“萌宠之家”宠物综合服务平台在 Eclipse 环境中,使用 Java 语言进行编码,使用 Mysql 创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,系统可以实现宠物信息管理,宠物寄养管理,在线挂号管理,宠物诊疗管理,商品信息管理,订单管理等功能。


总之,“萌宠之家”宠物综合服务平台集中管理信息,有着保密性强,效率高,存储空间大,成本低等诸多优点。它可以降低信息管理成本,实现信息管理计算机化。


在前面分析的管理员功能的基础上,进行接下来的设计工作,最终展示设计的管理员结构图(见下图)。管理员管理商品和订单,管理门诊,挂号,宠物诊疗信息,管理留言,宠物信息以及宠物寄养信息。



图 4.1 管理员功能结构图


在前面分析的医生功能的基础上,进行接下来的设计工作,最终展示设计的医生结构图(见下图)。医生审核挂号信息,对宠物进行诊断并开具药方。



图 4.2 医生功能结构图


在前面分析的用户功能的基础上,进行接下来的设计工作,最终展示设计的用户结构图(见下图)。用户查看宠物寄养信息,可以对医生进行挂号,可以查看宠物诊疗信息,可以购买商品。



图 4.3 用户功能结构图


程序上交给用户进行使用时,需要提供程序的操作流程图,这样便于用户容易理解程序的具体工作步骤,现如今程序的操作流程都有一个大致的标准,即先通过登录页面提交登录数据,通过程序验证正确之后,用户才能在程序功能操作区页面操作对应的功能。




程序操作流程图

功能截图:

5.1 管理员功能实现

5.1.1 商品信息管理

管理员进入指定功能操作区之后可以管理商品信息。其页面见下图。管理员对商品信息进行增删改查操作。



图 5.1 商品信息管理页面


管理员可以查询商品的信息列表,实现代码如下所示:


/**


  • 后端列表


*/


@RequestMapping("/page")


public R page(@RequestParam Map<String, Object> params,ShangpinxinxiEntityshangpinxinxi,


HttpServletRequest request){


EntityWrapper<ShangpinxinxiEntity> ew = newEntityWrapper<ShangpinxinxiEntity>();


PageUtils page = shangpinxinxiService.queryPage(params,MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params),params));


return R.ok().put("data", page);


}


前端页面向后台控制器发送了一个查询商品信息的 ajax 的 GET 请求,请求的名为/shangpinxinxi/page,并传输过来要查询的条件,封装到后台中定义的 params 中,params 中的 key 就是字段名,value 就是条件,之后调用 shangpinxinxiService 类中的 queryPage 方法,查询出来数据返回给前端

5.1.2 已支付订单

管理员进入指定功能操作区之后可以管理已支付订单。其页面见下图。管理员查看用户已支付订单的收货地址并安排发货。



图 5.2 已支付订单页面


管理员查询已支付订单:


/**


  • 后端列表


*/


@RequestMapping("/page")


public R page(@RequestParam Map<String, Object> params,OrdersEntity orders,


HttpServletRequest request){


if(!request.getSession().getAttribute("role").toString().equals("管理员")) {


orders.setUserid((Long)request.getSession().getAttribute("userId"));


}


EntityWrapper<OrdersEntity> ew = new EntityWrapper<OrdersEntity>();


PageUtils page = ordersService.queryPage(params,MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, orders), params), params));


return R.ok().put("data", page);


}


前端页面向后台控制器发送了一个查询已支付订单的 ajax 的 GET 请求,请求的名为/orders/page,并传输过来要查询的条件,封装到后台中定义的 params 中,params 中的 key 就是字段名,value 就是条件,里面条件有页数,条数,状态为已支付和其他。从 web 服务的 request 作用域中取出当前用户的权限,如果是用户就把用户的 id 塞入查询条件中,之后调用 ordersService 类中的 queryPage 方法查询数据,查询出来数据返回给前端

5.1.3 在线门诊管理

管理员进入指定功能操作区之后可以管理门诊信息。其页面见下图。管理员对门诊信息进行增删改查操作。



图 5.3 在线门诊管理页面


新增在线门诊:


/**


  • 后端保存


*/


@RequestMapping("/save")


public R save(@RequestBody ZaixianmenzhenEntity zaixianmenzhen,HttpServletRequest request){


zaixianmenzhen.setId(new Date().getTime()+newDouble(Math.floor(Math.random()*1000)).longValue());


//ValidatorUtils.validateEntity(zaixianmenzhen);


zaixianmenzhenService.insert(zaixianmenzhen);


return R.ok();


}


前端页面向后台控制器发送了一个新增在线门诊的 POST 请求,请求的名为/zaixianmenzhen/save,把在线门诊信息封装在后台定义的 zaixianmenzhen 对象中,由于 id 是唯一的,不允许重复,所以取当前时间的毫秒数加上随机出来的整数作为 id,保证唯一性,然后调用 mybatis-plus 的 insert 方法,把数据新增到数据库中。

5.1.4 留言板管理

管理员进入指定功能操作区之后可以管理留言信息。其页面见下图。管理员点击回复按钮可以回复用户的留言。



图 5.4 留言板管理页面


回复留言:


/**


  • 修改


*/


@RequestMapping("/update")


public R update(@RequestBody MessagesEntity messages, HttpServletRequestrequest){


//ValidatorUtils.validateEntity(messages);


messagesService.updateById(messages);//全部更新


return R.ok();


}


前端页面向后台控制器发送了一个回复留言的 POST 请求,请求的名为/messages/update,把回复的留言封装在后台定义的 messages 对象中,通过 mybatis-plus 的 updateById 方法通过 id 把回复的留言修改上去,然后返回给前台修改成功。

5.2 医生功能实现

5.2.1 在线挂号管理

医生进入指定功能操作区之后可以管理挂号信息。其页面见下图。医生负责审核用户提交的挂号信息,然后对宠物进行诊疗。



图 5.5 在线挂号管理页面


在线挂号详情查询:


/**


  • 后端详情


*/


@RequestMapping("/info/{id}")


public R info(@PathVariable("id") Long id){


ZaixianguahaoEntity zaixianguahao = zaixianguahaoService.selectById(id);


return R.ok().put("data", zaixianguahao);


}


前端页面向后台控制器发送了一个查看挂号详情的 ajax 的 GET 请求,请求的名为/zaixianguahao//info/{id},把要查询的数据的 id 传到后台,后台用 id 进行接收,然后用 mybatis-plus 的 selectById 方法通过 id 把当前挂号的详情查询出来,封装到 zaixianguahao 对象中,再把挂号对象封装到 R 中,返回给前台,进行展示。

5.2.2 宠物诊疗管理

医生进入指定功能操作区之后可以管理宠物诊疗信息。其页面见下图。医生查询宠物诊疗信息,查看宠物诊疗的详情,包括宠物症状描述,诊断以及药方等信息。



图 5.6 宠物诊疗管理页面


宠物诊疗详情查询:


/**


  • 后端详情


*/


@RequestMapping("/info/{id}")


public R info(@PathVariable("id") Long id){


ChongwuzhenliaoEntity chongwuzhenliao = chongwuzhenliaoService.selectById(id);


return R.ok().put("data", chongwuzhenliao);


}


前端页面向后台控制器发送了一个查看宠物诊疗详情的 ajax 的 GET 请求,请求的名为/chongwuzhenliao//info/{id},把要查询的数据的 id 传到后台,后台用 id 进行接收,然后用 mybatis-plus 的 selectById 方法通过 id 把当前挂号的详情查询出来,封装到 chongwuzhenliao 对象中,再把宠物诊疗对象封装到 R 中,返回给前台,进行展示。

5.3 用户功能实现

5.3.1 在线门诊

用户进入指定功能操作区之后可以查看门诊信息。其页面见下图。用户在本页面可以对医生进行挂号。



图 5.8 在线门诊页面


用户在线挂号:


/**


  • 前端保存


*/


@RequestMapping("/add")


public R add(@RequestBody ZaixianguahaoEntity zaixianguahao,HttpServletRequest request){


zaixianguahao.setId(new Date().getTime()+newDouble(Math.floor(Math.random()*1000)).longValue());


//ValidatorUtils.validateEntity(zaixianguahao);


zaixianguahaoService.insert(zaixianguahao);


return R.ok();


}


前端页面向后台控制器发送了一个新增挂号的的 ajax 的 POST 请求,请求的名为/zaixianguahao/add,把当前登录的用户和挂号原因和宠物信息等字段封装到后台定义的 zaixianguahao 对象中,由于 id 是唯一的,不能重复,所以取当前时间的毫秒数加上随机整数,保证 id 唯一性,然后用 mybatis-plus 的 insert 方法把当前挂号对象封装到数据库中,返回给前端新增成功。

5.3.2 商品信息

用户进入指定功能操作区之后可以查看商品信息。其页面见下图。用户在本页面可以购买商品,收藏商品。



图 5.9 商品信息页面


用户查询商品详情:


/**


  • 前端详情


*/


@IgnoreAuth


@RequestMapping("/detail/{id}")


public R detail(@PathVariable("id") Long id){


ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);


shangpinxinxi.setClicknum(shangpinxinxi.getClicknum()+1);


shangpinxinxi.setClicktime(new Date());


shangpinxinxiService.updateById(shangpinxinxi);


return R.ok().put("data", shangpinxinxi);


}


前端页面向后台控制器发送了一个查看商品详情的 ajax 的 GET 请求,请求的名为/shangpinxinxi/detail/{id},把要查询的数据的 id 传到后台,后台用 id 进行接收,然后用 mybatis-plus 的 selectById 方法通过 id 把当前商品的详情查询出来,封装到 shangpinxinxi 对象中,再把商品信息封装到 R 中,返回给前台,进行展示。

5.3.3 购物车

用户进入指定功能操作区之后可以管理购物车信息。其页面见下图。用户对购物车商品进行筛选,对需要购买的商品进行下单支付。



图 5.10 购物车页面


购物车列表:


/**


  • 前端列表


*/


@RequestMapping("/list")


public R list(@RequestParam Map<String, Object> params,CartEntity cart,


HttpServletRequest request){


EntityWrapper<CartEntity> ew = new EntityWrapper<CartEntity>();


PageUtils page = cartService.queryPage(params,MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, cart), params), params));


return R.ok().put("data", page);


}


前端页面向后台控制器发送了一个查询购物车的 ajax 的 GET 请求,请求的名为/cart/list,并传输过来要查询的条件,封装到后台中定义的 params 中,params 中的 key 就是字段名,value 就是条件,里面条件有页数,条数和其他。之后调用 cartService 类中的 queryPage 方法查询数据,由于 cartService 是抽象类,所以在调用 cartService 的时候会自动调用 cartServiceImpl 类,调用其中的 queryPage 方法,查询出来数据,把查询出来数据返回给前端,进行展示。

5.3.4 宠物寄养

用户进入指定功能操作区之后可以查看宠物寄养信息。其页面见下图。用户查看宠物寄养详情,收藏宠物寄养信息。



图 5.11 宠物寄养页面


宠物寄养列表:


/**


  • 前端列表


*/


@IgnoreAuth


@RequestMapping("/list")


public R list(@RequestParam Map<String, Object> params,ChongwujiyangEntitychongwujiyang,


HttpServletRequest request){


EntityWrapper<ChongwujiyangEntity> ew = newEntityWrapper<ChongwujiyangEntity>();


PageUtils page = chongwujiyangService.queryPage(params,MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, chongwujiyang), params),params));


return R.ok().put("data", page);


}


前端页面向后台控制器发送了一个查询宠物寄养列表的 ajax 的 GET 请求,请求的名为/chongwujiyang/list,并传输过来要查询的条件,封装到后台中定义的 params 中,params 中的 key 就是字段名,value 就是条件,里面条件有页数,条数和其他。之后调用 chongwujiyangService 类中的 queryPage 方法查询数据,由于 chongwujiyangService 是抽象类,所以在调用 chongwujiyangService 的时候会自动调用 chongwujiyangServiceImpl 类,调用其中的 queryPage 方法,查询出来数据,把查询出来数据返回给前端,进行展示。

代码实现:

/** * 登录相关 */@RequestMapping("users")@RestControllerpublic class UserController{        @Autowired    private UserService userService;        @Autowired    private TokenService tokenService;
/** * 登录 */ @IgnoreAuth @PostMapping(value = "/login") public R login(String username, String password, String role, HttpServletRequest request) { UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username)); if(user != null){ if(!user.getRole().equals(role)){ return R.error("权限不正常"); } 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); }else{ return R.error("账号或密码或权限不对"); }
} /** * 注册 */ @IgnoreAuth @PostMapping(value = "/register") public R register(@RequestBody UserEntity user){// ValidatorUtils.validateEntity(user); if(userService.selectOne(new EntityWrapper<UserEntity>().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){ UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().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,UserEntity user){ EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>(); PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params)); return R.ok().put("data", page); }
/** * 信息 */ @RequestMapping("/info/{id}") public R info(@PathVariable("id") String id){ UserEntity user = userService.selectById(id); return R.ok().put("data", user); } /** * 获取用户的session用户信息 */ @RequestMapping("/session") public R getCurrUser(HttpServletRequest request){ Integer id = (Integer)request.getSession().getAttribute("userId"); UserEntity user = userService.selectById(id); return R.ok().put("data", user); }
/** * 保存 */ @PostMapping("/save") public R save(@RequestBody UserEntity user){// ValidatorUtils.validateEntity(user); if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) { return R.error("用户已存在"); } userService.insert(user); return R.ok(); }
/** * 修改 */ @RequestMapping("/update") public R update(@RequestBody UserEntity user){// ValidatorUtils.validateEntity(user); userService.updateById(user);//全部更新 return R.ok(); }
/** * 删除 */ @RequestMapping("/delete") public R delete(@RequestBody Integer[] ids){ userService.deleteBatchIds(Arrays.asList(ids)); return R.ok(); }}
复制代码

论文参考:


开源地址:可以——【戳一戳】即可免费获取!

用户头像

hunter_coder

关注

还未添加个人签名 2024-05-24 加入

还未添加个人简介

评论

发布
暂无评论
基于Java“萌宠之家”宠物综合服务平台设计实现(源码+lw+部署文档+讲解等)_后端开发_hunter_coder_InfoQ写作社区