• 基于Java+SpringBoot+vue新冠疫情物资管理系统(毕业设计参考)


    前言介绍: 

            随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。新冠物资管理,主要的模块包括首页、个人中心、用户管理、员工管理、物资信息管理、物资申请管理、物资捐献管理、物资资料管理、入库记录管理、发放记录管理、物资库存管理、留言板管理、疫情论坛、系统管理等功能。系统中管理员主要是为了安全有效地存储和管理各类信息,还可以对系统进行管理与更新维护等操作,并且对后台有相应的操作权限。要想实现新冠物资管理的各项功能,需要后台数据库的大力支持。管理员验证注册信息,收集的信息,并由此分析得出的关联信息等大量的数据都由数据库管理。本文中数据库服务器端采用了Mysql作为后台数据库,使Web与数据库紧密联系起来。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

          本系统的开发使获取新冠物资管理信息能够更加方便快捷,同时也使新冠物资管理管理信息变的更加系统化、有序化。系统界面较友好,易于操作。

    功能设计:

     新冠物资管理基于Web服务模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在不受时间、地点的限制来使用这个系统。新冠物资管理工作原理图,如图所示:

    系统结构

    功能截图:

    登录注册:用户填写账号密码和选择角色进行登录、需要注册的用户在用户注册页面通过填写账号、密码、姓名、身份证、年龄、手机、邮箱等信息完成用户注册

    系统首页:在系统的首页可以查看首页、物资信息、物资申请、物资捐献、疫情论坛、疫情资讯、留言反馈、个人中心、后台管理等信息进行详细操作,如图所示

    物资信息:在物资信息页面中可以查看物资编号、物资名称、发布时间、图片、简介、申请条件等信息,根据需要进行申请操作

    点击查看疫情物资详情并可以进行申请、

    物资申请:物资申请,在物资申请页面中可以查看物资编号、物资名称、数量、账号、姓名、申请理由、申请附件、申请时间、图片等信息

    物资捐赠:用户在后台填写捐赠信息和物资、管理员审核后可以在前端看见。

    疫情论坛:在疫情论坛页面输入标题、类型、内容等信息进行发布帖子或重置操作,如图所示

     点击查看详情以及评论操作

    用户输入疫情评论评论信息; 

     

    疫情资讯

     资讯详情

    留言反馈:

    个人中心

    普通用户后台管理:

    管理员后台管理:

    管理员登录进入系统之后,就可以对所有的信息进行查看,可以查看到首页、个人中心、用户管理、员工管理、物资信息管理、物资申请管理、物资捐献管理、物资资料管理、入库记录管理、发放记录管理、物资库存管理、留言板管理、疫情论坛、系统管理等,并且还可以对其进行相应的操作管理。

    用户管理:

    物资信息管理:物资信息管理,在物资信息管理页面中可以对索引、物资编号、物资名称、发布时间、图片等信息进行详情,申请,修改或删除等操作

    物资申请审核:物资申请管理,在物资申请管理页面中可以对索引、物资编号、物资名称、数量、账号、姓名、申请理由、申请附件、申请时间、图片、审核回复、审核状态、审核等信息进行详情,修改或删除等操作

     审核

    物资捐献审核:物资捐献管理,在物资捐献管理页面中可以对物资名称、简介、数量、账号、姓名、捐献日期、图片、审核回复、审核状态、审核等信息进行详情,修改或删除等操作

    物资入库管理:入库记录管理,在入库记录管理页面中可以对索引、物资编号、物资名称、物资提供单位、联系人、联系电话、库存、入库日期、经办人、图片等信息进行详情,修改或删除等操作

    物资发放管理:发放记录管理,在发放记录管理页面中可以对索引、物资编号、物资名称、库存、账号、姓名、发放时间、经办人、图片等信息进行详情,修改或删除等操作

    物资库存管理:物资库存管理,在物资库存管理页面中可以对索引、物资编号、物资名称、状态、库存、更新日期、图片等信息进行详情,生成可申请物资,减少库存,加入库存,修改或删除等操作

    留言板回复:在留言板管理页面中可以对索引、用户名、留言内容、回复内容等信息进行详情,回复,修改或删除等操作

    疫情资讯和轮播图:在疫情资讯页面中可以对索引、标题、图片等信息进行详情,修改或删除等操作,还可对轮播图管理进行详细操作

    数据设计:

     数据库实体:管理员信息结构图,如图所示

     物资信息实体属性图,如图所示:

     物资申请实体属性图如图所示

    部分源码:

    1. /**
    2. * 上传文件映射表
    3. */
    4. @RestController
    5. @RequestMapping("file")
    6. @SuppressWarnings({"unchecked","rawtypes"})
    7. public class FileController{
    8. @Autowired
    9. private ConfigService configService;
    10. /**
    11. * 下载文件
    12. */
    13. @IgnoreAuth
    14. @RequestMapping("/download")
    15. public ResponseEntity<byte[]> download(@RequestParam String fileName) {
    16. try {
    17. File path = new File(ResourceUtils.getURL("classpath:static").getPath());
    18. if(!path.exists()) {
    19. path = new File("");
    20. }
    21. File upload = new File(path.getAbsolutePath(),"/upload/");
    22. if(!upload.exists()) {
    23. upload.mkdirs();
    24. }
    25. File file = new File(upload.getAbsolutePath()+"/"+fileName);
    26. if(file.exists()){
    27. /*if(!fileService.canRead(file, SessionManager.getSessionUser())){
    28. getResponse().sendError(403);
    29. }*/
    30. HttpHeaders headers = new HttpHeaders();
    31. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    32. headers.setContentDispositionFormData("attachment", fileName);
    33. return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
    34. }
    35. } catch (IOException e) {
    36. e.printStackTrace();
    37. }
    38. return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
    39. }
    40. /**
    41. * 上传文件
    42. */
    43. @RequestMapping("/upload")
    44. public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
    45. if (file.isEmpty()) {
    46. throw new EIException("上传文件不能为空");
    47. }
    48. String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
    49. File path = new File(ResourceUtils.getURL("classpath:static").getPath());
    50. if(!path.exists()) {
    51. path = new File("");
    52. }
    53. File upload = new File(path.getAbsolutePath(),"/upload/");
    54. if(!upload.exists()) {
    55. upload.mkdirs();
    56. }
    57. String fileName = new Date().getTime()+"."+fileExt;
    58. File dest = new File(upload.getAbsolutePath()+"/"+fileName);
    59. file.transferTo(dest);
    60. if(StringUtils.isNotBlank(type) && type.equals("1")) {
    61. ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
    62. if(configEntity==null) {
    63. configEntity = new ConfigEntity();
    64. configEntity.setName("faceFile");
    65. configEntity.setValue(fileName);
    66. } else {
    67. configEntity.setValue(fileName);
    68. }
    69. configService.insertOrUpdate(configEntity);
    70. }
    71. return R.ok().put("file", fileName);
    72. }
    73. }
    1. /**
    2. * 物资申请
    3. * 后端接口
    4. * @author
    5. * @email
    6. * @date 2022-03-12 17:03:55
    7. */
    8. @RestController
    9. @RequestMapping("/wuzishenqing")
    10. public class WuzishenqingController {
    11. @Autowired
    12. private WuzishenqingService wuzishenqingService;
    13. /**
    14. * 后端列表
    15. */
    16. @RequestMapping("/page")
    17. public R page(@RequestParam Map<String, Object> params,WuzishenqingEntity wuzishenqing,
    18. HttpServletRequest request){
    19. String tableName = request.getSession().getAttribute("tableName").toString();
    20. if(tableName.equals("yonghu")) {
    21. wuzishenqing.setZhanghao((String)request.getSession().getAttribute("username"));
    22. }
    23. EntityWrapper<WuzishenqingEntity> ew = new EntityWrapper<WuzishenqingEntity>();
    24. PageUtils page = wuzishenqingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wuzishenqing), params), params));
    25. return R.ok().put("data", page);
    26. }
    27. /**
    28. * 前端列表
    29. */
    30. @IgnoreAuth
    31. @RequestMapping("/list")
    32. public R list(@RequestParam Map<String, Object> params,WuzishenqingEntity wuzishenqing, HttpServletRequest request){
    33. String tableName = request.getSession().getAttribute("tableName").toString();
    34. if(tableName.equals("yonghu")) {
    35. wuzishenqing.setZhanghao((String)request.getSession().getAttribute("username"));
    36. }
    37. EntityWrapper<WuzishenqingEntity> ew = new EntityWrapper<WuzishenqingEntity>();
    38. PageUtils page = wuzishenqingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wuzishenqing), params), params));
    39. return R.ok().put("data", page);
    40. }
    41. /**
    42. * 列表
    43. */
    44. @RequestMapping("/lists")
    45. public R list( WuzishenqingEntity wuzishenqing){
    46. EntityWrapper<WuzishenqingEntity> ew = new EntityWrapper<WuzishenqingEntity>();
    47. ew.allEq(MPUtil.allEQMapPre( wuzishenqing, "wuzishenqing"));
    48. return R.ok().put("data", wuzishenqingService.selectListView(ew));
    49. }
    50. /**
    51. * 查询
    52. */
    53. @RequestMapping("/query")
    54. public R query(WuzishenqingEntity wuzishenqing){
    55. EntityWrapper< WuzishenqingEntity> ew = new EntityWrapper< WuzishenqingEntity>();
    56. ew.allEq(MPUtil.allEQMapPre( wuzishenqing, "wuzishenqing"));
    57. WuzishenqingView wuzishenqingView = wuzishenqingService.selectView(ew);
    58. return R.ok("查询物资申请成功").put("data", wuzishenqingView);
    59. }
    60. /**
    61. * 后端详情
    62. */
    63. @RequestMapping("/info/{id}")
    64. public R info(@PathVariable("id") Long id){
    65. WuzishenqingEntity wuzishenqing = wuzishenqingService.selectById(id);
    66. return R.ok().put("data", wuzishenqing);
    67. }
    68. /**
    69. * 前端详情
    70. */
    71. @IgnoreAuth
    72. @RequestMapping("/detail/{id}")
    73. public R detail(@PathVariable("id") Long id){
    74. WuzishenqingEntity wuzishenqing = wuzishenqingService.selectById(id);
    75. return R.ok().put("data", wuzishenqing);
    76. }
    77. /**
    78. * 后端保存
    79. */
    80. @RequestMapping("/save")
    81. public R save(@RequestBody WuzishenqingEntity wuzishenqing, HttpServletRequest request){
    82. wuzishenqing.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    83. //ValidatorUtils.validateEntity(wuzishenqing);
    84. wuzishenqingService.insert(wuzishenqing);
    85. return R.ok();
    86. }
    87. /**
    88. * 前端保存
    89. */
    90. @IgnoreAuth
    91. @RequestMapping("/add")
    92. public R add(@RequestBody WuzishenqingEntity wuzishenqing, HttpServletRequest request){
    93. wuzishenqing.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    94. //ValidatorUtils.validateEntity(wuzishenqing);
    95. wuzishenqing.setUserid((Long)request.getSession().getAttribute("userId"));
    96. wuzishenqingService.insert(wuzishenqing);
    97. return R.ok();
    98. }
    99. /**
    100. * 修改
    101. */
    102. @RequestMapping("/update")
    103. public R update(@RequestBody WuzishenqingEntity wuzishenqing, HttpServletRequest request){
    104. //ValidatorUtils.validateEntity(wuzishenqing);
    105. wuzishenqingService.updateById(wuzishenqing);//全部更新
    106. return R.ok();
    107. }
    108. /**
    109. * 删除
    110. */
    111. @RequestMapping("/delete")
    112. public R delete(@RequestBody Long[] ids){
    113. wuzishenqingService.deleteBatchIds(Arrays.asList(ids));
    114. return R.ok();
    115. }
    116. /**
    117. * 提醒接口
    118. */
    119. @RequestMapping("/remind/{columnName}/{type}")
    120. public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
    121. @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
    122. map.put("column", columnName);
    123. map.put("type", type);
    124. if(type.equals("2")) {
    125. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    126. Calendar c = Calendar.getInstance();
    127. Date remindStartDate = null;
    128. Date remindEndDate = null;
    129. if(map.get("remindstart")!=null) {
    130. Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
    131. c.setTime(new Date());
    132. c.add(Calendar.DAY_OF_MONTH,remindStart);
    133. remindStartDate = c.getTime();
    134. map.put("remindstart", sdf.format(remindStartDate));
    135. }
    136. if(map.get("remindend")!=null) {
    137. Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
    138. c.setTime(new Date());
    139. c.add(Calendar.DAY_OF_MONTH,remindEnd);
    140. remindEndDate = c.getTime();
    141. map.put("remindend", sdf.format(remindEndDate));
    142. }
    143. }
    144. Wrapper<WuzishenqingEntity> wrapper = new EntityWrapper<WuzishenqingEntity>();
    145. if(map.get("remindstart")!=null) {
    146. wrapper.ge(columnName, map.get("remindstart"));
    147. }
    148. if(map.get("remindend")!=null) {
    149. wrapper.le(columnName, map.get("remindend"));
    150. }
    151. String tableName = request.getSession().getAttribute("tableName").toString();
    152. if(tableName.equals("yonghu")) {
    153. wrapper.eq("zhanghao", (String)request.getSession().getAttribute("username"));
    154. }
    155. int count = wuzishenqingService.selectCount(wrapper);
    156. return R.ok().put("count", count);
    157. }
    158. }

    论文参考:

      

    1 系统概述

    1.1 概述

    1.2课题意义

    1.3 主要内容

    2 系统开发环境

    2.1 Spring Boot框架

    2.2 JAVA简介

    2.3访问数据库实现方法

    2.4系统对MySQL数据库的两种连接方式

    2.5 MySql数据库

    3 需求分析

    3.1技术可行性:技术背景

    3.2经济可行性

    3.3操作可行性

    3.4系统设计规则

    3.5系统流程和逻辑

    4系统概要设计

    4.1 概述

    4.2 系统结构

    4.3. 数据库设计

    4.3.1 数据库实体

    4.3.2 数据库设计表

    5 系统详细设计

    5.1系统功能模块

    5.2 管理员功能模块

    5.3 员工功能模块

    6 系统测试

    6.1系统测试的目的

    6.2系统测试方法

    6.3 测试结果

    结论

    致 谢

    参考文献

    获取源码:

    大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信获取联系方式👇🏻👇🏻👇🏻

    打卡 文章 更新 241/  365天

  • 相关阅读:
    DBeaver Ultimate Edtion 22.1 Multilingual (macOS, Linux, Windows) - 通用数据库工具
    Day5:写前端项目(html+css+js)-导航部分p1
    Golang 中的匿名变量详解
    GO面试一定要看看这些面试题
    Unity3D教程:布娃娃系统
    第3章 【MySQL】字符集和比较规则
    HTML网页设计结课作业——11张精美网页 html+css+javascript+bootstarp
    面试:封装DOM
    【配置vscode编写python代码并输出到外部控制台】
    【Linux】进程信号
  • 原文地址:https://blog.csdn.net/chengyang_java/article/details/125455820