\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,ShangpinxinxiEntity

shangpinxinxi,

HttpServletRequest request){

EntityWrapper ew = new

EntityWrapper();

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 ew = new EntityWrapper();

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()+new

Double(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, HttpServletRequest

request){

//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()+new

Double(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 ew = new EntityWrapper();

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,ChongwujiyangEntity

chongwujiyang,

HttpServletRequest request){

EntityWrapper ew = new

EntityWrapper();

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")
@RestController
public 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();
}
}

论文参考:

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

  1. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

  2. eclipse导入java和android sdk源码,帮助文档

    eclipse导入java和android sdk源码,帮助文档 http://blog.csdn.net/ashelyhss/article/details/37993261 JavaDoc集成到E ...

  3. 基于SpringBoot的药店管理系统java药房管理系统(源码+数据库文件+文档)

    注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台框架:SpringBoot 前端技术:HTML+CSS+JavaScript+Bootstrap+jQue ...

  4. 基于java开发jsp+ssm+mysql实现的在线考试系统 源码下载

    实现的关于在线考试的功能有:用户前台:用户注册登录.查看考试信息.进行考试.查看考试成绩.查看历史考试记录.回顾已考试卷.修改密码.修改个人信息等,后台管理功能(脚手架功能不在这里列出),科目专业管理 ...

  5. 基于综合服务平台浅谈Sass应用

    一.       前言 CSS不是一种编程语言,只是单纯的一行行的描述,没有逻辑没有变量,因此写CSS对于习惯于运用逻辑思维编码的程序员来说是一件很头疼的事.于是勤奋的程序员就开始运转他们敏捷的大脑, ...

  6. Java生鲜电商平台-电商会员体系系统的架构设计与源码解析

    Java生鲜电商平台-电商会员体系系统的架构设计与源码解析 说明:Java生鲜电商平台中会员体系作为电商平台的基础设施,重要性不容忽视.我去年整理过生鲜电商中的会员系统,但是比较粗,现在做一个最好的整 ...

  7. 点菜网---Java开源生鲜电商平台-技术选型(源码可下载)

    点菜网---Java开源生鲜电商平台-技术选型(源码可下载) 1.内容简介 点菜网目前选用的是最流行的微服务架构模式,采用前后端分离的开发模式,具备高可用,高负载,支持千万级别的数据量的请求. 2. ...

  8. 【一起学源码-微服务】Nexflix Eureka 源码十:服务下线及实例摘除,一个client下线到底多久才会被其他实例感知?

    前言 前情回顾 上一讲我们讲了 client端向server端发送心跳检查,也是默认每30钟发送一次,server端接收后会更新注册表的一个时间戳属性,然后一次心跳(续约)也就完成了. 本讲目录 这一 ...

  9. 原创:用python把链接指向的网页直接生成图片的http服务及网站(含源码及思想)

    原创:用python把链接指向的网页直接生成图片的http服务及网站(含源码及思想) 总体思想:     希望让调用方通过 http调用传入一个需要生成图片的网页链接生成一个网页的图片并返回图片链接 ...

  10. DotNetOpenAuth Part 1 : Authorization 验证服务实现及关键源码解析

    DotNetOpenAuth 是 .Net 环境下OAuth 开源实现框架.基于此,可以方便的实现 OAuth 验证(Authorization)服务.资源(Resource)服务.针对 DotNet ...

随机推荐

  1. Spring IoC注解式开发无敌详细(细节丰富)

    1. Spring IoC注解式开发无敌详细(细节丰富) @ 目录 1. Spring IoC注解式开发无敌详细(细节丰富) 每博一文案 2. 注解回顾 3. Spring 声明Bean的注解 3.1 ...

  2. sass 混合指令 (Mixin Directives)详解

    ​ 混合指令(Mixin)用于定义可重复使用的样式,避免了使用无语意的 class,比如 .float-left.混合指令可以包含所有的 CSS 规则,绝大部分 Sass 规则,甚至通过参数功能引入变 ...

  3. centos7下xfs文件系统的备份和恢复:完全备份,增量备份,差异备份

    目录 一.关于xfs文件系统 二.xfsdump的备份级别和注意事项 三.完全备份整个目录/分区,然后恢复数据 四.完全备份分区中某个目录,然后恢复某个文件/文件夹 五.增量备份 一.关于xfs文件系 ...

  4. 联网安装与源码安装mysql

    一.卸载mariadb的rpm包 1.首先,你需要找出已安装的MariaDB包的具体名称.可以使用以下命令列出所有已安装的MariaDB包: rpm -qa | grep mariadb 2.删除命令 ...

  5. Android Media Framework(一)OpenMAX框架简介

    学习开源代码最快的方式是先阅读它的文档,再查看它的头文件,最后研读代码实现并进行编译调试.Android早期引入OpenMAX IL作为使用音视频编解码器的标准接口,了解Android Media框架 ...

  6. 电源电路E24系列反馈电阻计算表格

    可调电源,包括DCDC.LDO电路的设计中,经常需要计算反馈电阻进行选型.为了提高效率,优化选型采购,抽空做了个表格进行快速计算. 1.一般反馈电阻电路如下. 输出电压公式为:Vout=Vfb*(Rh ...

  7. itestwork(爱测试)开源一站式接口测试&敏捷测试工作站 9.0.0 RC2 发布,重大升级

    (一)itest 简介 itest work (爱测试)  一站式工作站让测试变得简单.敏捷.itest work 包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1 ...

  8. Java编码规范-字符串与Integer的比较,BigDecimal非空参数

    Java编码规范-字符串与Integer的比较,BigDecimal非空参数 package com.example.core.mydemo; import java.math.BigDecimal; ...

  9. Task - lmdeploy

    基础作业: 使用 LMDeploy 以本地对话.网页Gradio.API服务中的一种方式部署 InternLM-Chat-7B 模型,生成 300 字的小故事(需截图

  10. 17-Docker镜像和容器操作

    镜像 拉取镜像(下载镜像) 镜像是层次型的,拉取的时候会按照各层分别拉取. 每一个镜像都有自己的散列值,用来唯一标记一层镜像,可以用来判断本地是否已经拉取过此镜像层,如果已经拉取,则直接使用. doc ...