Java毕业设计-基于springboot开发的江理工文档管理系统设计与实现-毕业论文(附毕设源代码)


Java毕业设计-基于springboot开发的江理工文档管理系统设计与实现-毕业论文(附毕设源代码)

逃逸的卡路里
博主介绍:✌️码农一枚 | 毕设布道师,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。✌️

主要项目:小程序、SpringBoot、SSM、Vue、Java、Jsp等设计与开发。

🍅文末获取源码联系🍅

如需其他项目或毕设源码,可进主页看下往期的毕设资源分享哦,希望对您有帮助!

前言

随着信息技术的飞速发展,Java语言作为一种成熟、稳定且功能强大的编程语言,已经广泛应用于企业级应用、移动开发、大数据处理等多个领域。作为本科大学生,我们在学习Java编程语言的过程中,不仅掌握了其语法规则和编程技巧,更重要的是学会了如何利用Java解决实际问题,实现软件系统的设计与开发。

本次毕业设计旨在通过实际项目的开发,将我们在大学期间所学的Java编程语言知识与实践相结合,进一步加深对Java语言的理解和应用。毕业设计的宗旨在于培养我们的独立思考能力、团队协作精神和创新能力,提升我们解决实际问题的能力,为未来的职业发展打下坚实的基础。

在毕业设计中,我们将综合运用Java编程语言、数据库技术、前端开发技术等,设计并实现一个具有实际应用价值的软件系统。通过需求分析、系统设计、编码实现、测试维护等阶段的实践,我们将全面提升自己的软件开发能力,为未来的学习和工作积累宝贵的经验。


一、毕设成果演示(源代码在文末)

在这里插入图片描述
在这里插入图片描述

二、毕设摘要展示

1、开发说明

开发语言:Java
框架:springboot
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7(一定要5.7版本)
数据库工具:Navicat11
开发软件:eclipse/myeclipse/idea
Maven包:Maven3.3.9
浏览器:谷歌浏览器

推荐使用:谷歌浏览器

前台登录页面
http://localhost:8080/wendangguanli/front/index.html

后台登录页面
http://localhost:8080/wendangguanli/admin/dist/index.html

管理员 账户:admin 密码:admin
用户 账户:a1 密码:123456
用户 账户:a2 密码:123456
用户 账户:a3 密码:123456

在src\main\resources\application.yml中编辑

url: jdbc:mysql://127.0.0.1:3306/wendangguanli?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
username: root	    数据库用户名 root
password: 123456	用户密码    123456

图片存放路径: src\main\webapp\upload 里面上传图片名里面不能有中文

2、需求/流程分析

本次开发的文档管理系统有管理员和用户两个角色。管理员功能有论坛管理,公告管理,资料管理,用户管理等。用户可以注册登录,可以上传资料信息,管理员审核后其他用户就可以进行下载,还可以在论坛里面发信息以及查看相关公告信息。

开发本程序后台用到了Spring Boot开发技术,页面设计采用VUE框架和layui样式。数据库采用关系数据库市场占有率最高的MySQL作为本程序使用的数据库,完全符合程序使用并且有丰富的拓展余地。程序从需求到设计,从开发到测试,都在功能上和性能上都不断的进行了调试,让开发的程序在使用上用户体验更美好。

关键词:文档管理系统;Spring Boot;MySQL;VUE;Layui

在这里插入图片描述

3、系统功能结构

在这里插入图片描述


package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 字典表
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/dictionary")
public class DictionaryController {
    private static final Logger logger = LoggerFactory.getLogger(DictionaryController.class);

    @Autowired
    private DictionaryService dictionaryService;


    @Autowired
    private TokenService tokenService;

    //级联表service

    @Autowired
    private YonghuService yonghuService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    @IgnoreAuth
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = dictionaryService.queryPage(params);

        //字典表数据转换
        List<DictionaryView> list =(List<DictionaryView>)page.getList();
        for(DictionaryView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        DictionaryEntity dictionary = dictionaryService.selectById(id);
        if(dictionary !=null){
            //entity转view
            DictionaryView view = new DictionaryView();
            BeanUtils.copyProperties( dictionary , view );//把实体数据重构到view中

            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody DictionaryEntity dictionary, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,dictionary:{}",this.getClass().getName(),dictionary.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");

        Wrapper<DictionaryEntity> queryWrapper = new EntityWrapper<DictionaryEntity>()
            .eq("dic_code", dictionary.getDicCode())
            .eq("index_name", dictionary.getIndexName())
            ;
        if(dictionary.getDicCode().contains("_erji_types")){
            queryWrapper.eq("super_id",dictionary.getSuperId());
        }

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        DictionaryEntity dictionaryEntity = dictionaryService.selectOne(queryWrapper);
        if(dictionaryEntity==null){
            dictionary.setCreateTime(new Date());
            dictionaryService.insert(dictionary);
            //字典表新增数据,把数据再重新查出,放入监听器中
            List<DictionaryEntity> dictionaryEntities = dictionaryService.selectList(new EntityWrapper<DictionaryEntity>());
            ServletContext servletContext = request.getServletContext();
            Map<String, Map<Integer,String>> map = new HashMap<>();
            for(DictionaryEntity d :dictionaryEntities){
                Map<Integer, String> m = map.get(d.getDicCode());
                if(m ==null || m.isEmpty()){
                    m = new HashMap<>();
                }
                m.put(d.getCodeIndex(),d.getIndexName());
                map.put(d.getDicCode(),m);
            }
            servletContext.setAttribute("dictionaryMap",map);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody DictionaryEntity dictionary, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,dictionary:{}",this.getClass().getName(),dictionary.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(StringUtil.isEmpty(role))
//            return R.error(511,"权限为空");
        //根据字段查询是否有相同数据
        Wrapper<DictionaryEntity> queryWrapper = new EntityWrapper<DictionaryEntity>()
            .notIn("id",dictionary.getId())
            .eq("dic_code", dictionary.getDicCode())
            .eq("index_name", dictionary.getIndexName())
            ;

        if(dictionary.getDicCode().contains("_erji_types")){
            queryWrapper.eq("super_id",dictionary.getSuperId());
        }
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        DictionaryEntity dictionaryEntity = dictionaryService.selectOne(queryWrapper);
        if(dictionaryEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      dictionary.set
            //  }
            dictionaryService.updateById(dictionary);//根据id更新
            //如果字典表修改数据的话,把数据再重新查出,放入监听器中
            List<DictionaryEntity> dictionaryEntities = dictionaryService.selectList(new EntityWrapper<DictionaryEntity>());
            ServletContext servletContext = request.getServletContext();
            Map<String, Map<Integer,String>> map = new HashMap<>();
            for(DictionaryEntity d :dictionaryEntities){
                Map<Integer, String> m = map.get(d.getDicCode());
                if(m ==null || m.isEmpty()){
                    m = new HashMap<>();
                }
                m.put(d.getCodeIndex(),d.getIndexName());
                map.put(d.getDicCode(),m);
            }
            servletContext.setAttribute("dictionaryMap",map);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        dictionaryService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }

    /**
     * 最大值
     */
    @RequestMapping("/maxCodeIndex")
    public R maxCodeIndex(@RequestBody DictionaryEntity dictionary){
        logger.debug("maxCodeIndex:,,Controller:{},,dictionary:{}",this.getClass().getName(),dictionary.toString());
        List<String> descs = new ArrayList<>();
        descs.add("code_index");
        Wrapper<DictionaryEntity> queryWrapper = new EntityWrapper<DictionaryEntity>()
                .eq("dic_code", dictionary.getDicCode())
                .orderDesc(descs);
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        List<DictionaryEntity> dictionaryEntityList = dictionaryService.selectList(queryWrapper);
        if(dictionaryEntityList != null ){
            return R.ok().put("maxCodeIndex",dictionaryEntityList.get(0).getCodeIndex()+1);
        }else{
            return R.ok().put("maxCodeIndex",1);
        }
    }

    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        try {
            List<DictionaryEntity> dictionaryList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            DictionaryEntity dictionaryEntity = new DictionaryEntity();
//                            dictionaryEntity.setDicCode(data.get(0));                    //字段 要改的
//                            dictionaryEntity.setDicName(data.get(0));                    //字段名 要改的
//                            dictionaryEntity.setCodeIndex(Integer.valueOf(data.get(0)));   //编码 要改的
//                            dictionaryEntity.setIndexName(data.get(0));                    //编码名字 要改的
//                            dictionaryEntity.setSuperId(Integer.valueOf(data.get(0)));   //父字段id 要改的
//                            dictionaryEntity.setBeizhu(data.get(0));                    //备注 要改的
//                            dictionaryEntity.setCreateTime(date);//时间
                            dictionaryList.add(dictionaryEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        dictionaryService.insertBatch(dictionaryList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }






}

三、系统实现展示

1、管理员功能实现

1.1 用户管理

管理员可以对用户信息进行添加,修改,删除,查询操作。

图5.1 用户管理页面

1.2 资料类型管理

管理员可以对资料类型信息进行添加,修改,删除,查询操作。

图5.2 资料类型管理页面

1.3 公告信息管理

管理员可以对公告信息进行添加,修改,删除,查询操作。

图5.3 公告信息管理页面

1.4 管理员管理

管理员可以对管理员信息进行添加,修改,删除,查询操作。

图5.4 管理员信息管理页面

2、用户功能实现

2.1 资料信息添加

用户登录后可以在资料管理里面添加资料信息。

图5.5 资料信息添加页面

2.2 资料信息管理

用户可以看到自己添加的资料信息,包含是否审核状态以及可以对自己添加的资料信息进行添加,修改,删除,查询操作。

图5.6 资料信息管理页面

2.3 论坛管理

用户可以在论坛管理里面查和回复相关论坛信息。

图5.7 论坛管理页面

2.4 资料信息

用户可以在首页的资料信息里面查看和下载资料信息。

图5.8 资料信息页面

四、毕设内容和源代码获取

Java毕业设计-基于springboot开发的江理工文档管理系统设计与实现-毕业论文(附毕设源代码):https://download.csdn.net/download/u014740628/88921818

如需其他项目或毕设源码,可进主页看下往期的毕设资源分享哦,希望对您有帮助!

逃逸的卡路里


总结

通过本次毕业设计,我们不仅巩固了所学的Java编程语言知识,还学会了如何将理论知识应用于实际项目中。我们设计的软件系统具有一定的实际应用价值,这让我们对自己的能力充满了信心,也为未来的职业发展打下了坚实的基础。

参考文献
[1]张园园.基于Web的网上购物系统研究[J].计算机光盘软件与应用,2017,17(11):44+46.
[2]张思亮,王晓峰,靳瑞勇.网上购物系统的研发[J].商场现代化,2016(13):67.
[3]包浩含.网上购物系统的设计与开发探析[J].智能城市,2016,2(03):89-90.
[4]廖彦华,罗小亮.基于Spring Boot技术的网上购物系统[J].电脑知识与技术(学术交流),2017(23):1276-1279.
[5]刘姗.一种改进的MySQL数据库访问控制的设计与实现[D].华中科技大学,2011.DOI:10.7666/d.d190978.
[6]陈芳.MySQL数据库在自动测试系统中的应用[J].无线互联科技,2017(20):142-143.
[7]石坤泉,杨震伦.基于MySQL数据库的数据隐私与安全策略研究[J].网络安全技术与应用,2017(01):79+81.
[8]刘建宏.MySQL数据库优化与集群[J].数字通信世界,2017(07):47.
[9]孔璐.软件开发中数据库设计理论与实践分析[J].南方农机,2019(04):135.
[10]李宏远.基于Java应用程序的安全性探析[J].信息通信,2015(01):101.
[11]惠强.计算机软件开发中JAVA编程的应用[J].电子技术与软件工程,2018(06):35.
[12]孙术超.基于JAVA的数据库开发和应用[J].计算机产品与流通,2018(06):22.
[13]魏强.Java技术的安全问题探讨[J].电脑迷,2018(12):62.
[14]罗勇.移动应用软件性能测试技术[J].电子技术与软件工程,2019(03):51.
[15]王一帆.软件测试在软件开发中应用的探讨[J].电子世界,2019(01):54+56.
[16]Konstantins Gusarovs. An Analysis on Java Programming Language Decompiler Capabilities[J]. Applied Computer Systems,2018,23(2).
[17]Tan Yiyu. A Hardware-oriented Object Model for Java in an Embedded Processor[J]. Microprocessors and Microsystems,2018.

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逃逸的卡路里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值