基于java+springboot+vue的在线文档管理系统

项目介绍

随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,在线文档管理当然也不能排除在外。在线文档管理系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用springboot框架构建的一个管理系统。整个开发过程首先对软件系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计等;详细设计主要包括系统数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对系统进行功能测试,并对测试结果进行分析总结,得出系统中存在的不足及需要改进的地方,为以后的系统维护提供了方便,同时也为今后开发类似系统提供了借鉴和帮助。这种个性化的在线文档管理特别注重交互协调与管理的相互配合,激发了管理人员的创造性与主动性,对在线文档管理而言非常有利。

本在线文档管理系统采用的数据库是Mysql,使用springboot框架开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

在这里插入图片描述

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SpringBoot
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net

系统实现

5.1管理员功能模块
管理员登录,通过填写注册时输入的用户名、密码、角色进行登录,如图5-1所示。
在这里插入图片描述

图5-1管理员登录界面图

管理员登录进入在线文档管理系统可以查看首页、个人中心、公告信息管理、部门信息管理、岗位管理、员工管理、文档信息管理等信息。如图5-2所示。

公告信息管理,管理员在公告信息管理页面中通过查看公告标题、图片、发布日期、内容等信息进行详情、修改、删除操作,如图5-3所示。
在这里插入图片描述

图5-2首页界面图

在这里插入图片描述

图5-3公告信息管理界面图

部门信息管理,管理员在部门信息管理页面中可以查看部门、人数、等信息,并可根据需要对部门信息进行详情、修改或删除等操作,如图5-4所示。
在这里插入图片描述

图5-4部门信息管理界面图

员工管理,管理员在员工管理页面中可以查看员工工号、员工姓名、性别、头像、姓名、部门、岗位、年龄、手机、邮箱、身份证等信息,并可根据需要对员工信息进行详情、修改或删除等详细操作,如图5-5所示。
在这里插入图片描述

图5-5员工管理界面图

文档信息管理,管理员在文档信息管理页面中可以查看文档名称、类型、文档介绍、附件、发布日期等内容,并且根据需要对文档信息进行详情、修改或删除等详细操作,如图5-6所示。
在这里插入图片描述

图5-6文档信息管理界面图

5.2员工功能模块
登录,员工登录,员工通过登陆页面填写员工工号、密码进行登陆,如图5-7所示。
员工登录进入在线文档管理系统可以查看首页、个人中心、公告信息管理、文档信息管理等内容。如图5-8所示。

个人中心,员工在个人信息页面中进行查看编辑员工工号、员工姓名、性别、头像、姓名、部门、岗位、年龄、手机、邮箱、身份证,进行修改操作,如图5-9所示。

在这里插入图片描述

图5-7登陆界面图

在这里插入图片描述

图5-8首页界面图
在这里插入图片描述

图5-9个人信息界面图

文档信息管理,员工在文档信息管理页面中可以查看文档名称、类型、文档介绍、附件、发布日期等信息内容,并且根据需要对文档信息进行下载、详情查看,如图5-10所示。
在这里插入图片描述

图5-10文档信息管理界面图

核心代码

package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.WendangxinxiEntity;
import com.entity.view.WendangxinxiView;

import com.service.WendangxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 文档信息
 * 后端接口
 * @author
 * @email
 * @date
 */
@RestController
@RequestMapping("/wendangxinxi")
public class WendangxinxiController {
    @Autowired
    private WendangxinxiService wendangxinxiService;



    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,WendangxinxiEntity wendangxinxi,
		HttpServletRequest request){
        EntityWrapper<WendangxinxiEntity> ew = new EntityWrapper<WendangxinxiEntity>();
		PageUtils page = wendangxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wendangxinxi), params), params));

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

    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,WendangxinxiEntity wendangxinxi, HttpServletRequest request){
        EntityWrapper<WendangxinxiEntity> ew = new EntityWrapper<WendangxinxiEntity>();
		PageUtils page = wendangxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wendangxinxi), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( WendangxinxiEntity wendangxinxi){
       	EntityWrapper<WendangxinxiEntity> ew = new EntityWrapper<WendangxinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( wendangxinxi, "wendangxinxi"));
        return R.ok().put("data", wendangxinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(WendangxinxiEntity wendangxinxi){
        EntityWrapper< WendangxinxiEntity> ew = new EntityWrapper< WendangxinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( wendangxinxi, "wendangxinxi"));
		WendangxinxiView wendangxinxiView =  wendangxinxiService.selectView(ew);
		return R.ok("查询文档信息成功").put("data", wendangxinxiView);
    }

    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        WendangxinxiEntity wendangxinxi = wendangxinxiService.selectById(id);
        return R.ok().put("data", wendangxinxi);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        WendangxinxiEntity wendangxinxi = wendangxinxiService.selectById(id);
        return R.ok().put("data", wendangxinxi);
    }




    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody WendangxinxiEntity wendangxinxi, HttpServletRequest request){
    	wendangxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(wendangxinxi);
        wendangxinxiService.insert(wendangxinxi);
        return R.ok();
    }

    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody WendangxinxiEntity wendangxinxi, HttpServletRequest request){
    	wendangxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(wendangxinxi);
        wendangxinxiService.insert(wendangxinxi);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody WendangxinxiEntity wendangxinxi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(wendangxinxi);
        wendangxinxiService.updateById(wendangxinxi);//全部更新
        return R.ok();
    }


    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        wendangxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }

    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);

		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}

		Wrapper<WendangxinxiEntity> wrapper = new EntityWrapper<WendangxinxiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = wendangxinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}



}

论文参考

在这里插入图片描述

目 录
摘 要 I
ABSTRACT II
目 录 II
第1章 绪论 1
1.1背景及意义 1
1.2 国内外研究概况 1
1.3 研究的内容 1
第2章 相关技术 3
2.1 Java技术介绍 4
2.2 mysql数据库介绍 5
2.3 springboot框架 6
第3章 系统分析 7
3.1 需求分析 8
3.2 系统可行性分析 9
3.2.1技术可行性:技术背景 10
3.2.2经济可行性 11
3.2.3操作可行性: 12
3.3 项目设计目标与原则 13
3.4系统流程分析 14
3.4.1操作流程 15
3.4.2添加信息流程 16
3.4.3删除信息流程 17
第4章 系统设计 18
4.1 系统体系结构 19
4.2开发流程设计系统 19
4.3 数据库设计原则 19
4.4 数据表 19
第5章 系统详细设计 20
5.1管理员功能模块 20
5.2员工功能模块 20
第6章 系统测试 21
6.1系统测试的目的 21
6.2系统测试方法 21
6.3功能测试 21
结 论 22
致 谢 23
参考文献 34

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
BookStack是一个基于MinDoc,使用Beego开发的在线文档管理系统,功能类似Gitbook和看云。 在开发的过程中,增加和移除了一些东西,目前已经不兼容MinDoc了(毕竟数据表结构、字段、索引都有了一些不同),同时只支持markdown编辑器。BookStack在线文档管理系统功能与亮点:1、书籍分类(V1.2 +) 用户就像你的老板,他不知道自己需要什么,但是他知道自己不需要什么... 2、用户主页(V1.2 +) 在用户主页,展示用户分享的书籍、粉丝、关注和手册,增加用户间的互动 3、一键导入markdown项目 这个功能,相信是很多人的最爱了。目前这个功能仅对管理员开放。 经实测,目前已完美支持各种姿势写作的markdown项目的文档导入,能很好地处理文档间的链接以及文档中的图片链接 4、一键拉取markdown项目 看到GitHub、Gitee等有很多开源文档的项目,但是一个一个去拷贝粘贴里面的markdown内容不现实。于是,做了这个一键拉取的功能。 目前只有管理员才有权限拉取,并没有对普通用户开放。要体验这个功能,请用管理员账号登录演示站点体验。 用法很简单,比如我们拉取beego的文档项目,在创建项目后,直接点击"拉取项目",粘贴如" https://github.com/beego/beedoc/archive/master.zip ",然后就会自动帮你拉取上面的所有markdown文档并录入数据库,同时图片也会自动帮你更新到OSS。 拉取项目 经实测,目前已完美支持各种姿势写作的markdown项目的拉取,能很好地处理文档间的链接以及文档中的图片链接 目前已支持Git Clone导入项目 5、生成和导出PDF、epub、mobi等离线文档 这个需要安装和配置calibre。 我将calibre的使用专门封装成了一个工具,并编译成了二进制,源码、程序和使用说地址:https://github.com/TruthHun/converter 在BookStack中,已经引入这个包了。使用的时候,点击"生成下载文档"即可 6、文档排序和批量创建文档 很多时候,我们在写作文档项目的时候,会习惯地先把文档项目的章节目录结构创建出来,然后再慢慢写内容。 但是,文档项目中的文档少的时候,一个个去创建倒没什么,但是文档数量多了之后,简直就是虐待自己,排序的时候还要一个一个去拖拽进行排序,很麻烦。现在,这个问题已经解决了。 7、文档间的跳转你在一个文档项目中会有很多文档,其中一个文档文档标识叫readme.md,另外一个文档文档标识叫quickstart.md,两个文档间如何跳转呢? 如果你知道站点的路由规则,倒是可以轻松链过去,但是,每次都要这样写,真的很麻烦。自己也经常写文档,简直受够了,然后想到了一个办法。如下: 我从readme.md跳转到quickstart.md,在readme.md中的内容这样写: [快速开始]($quickstart.md) 如果跳转到quickstart.md的某个锚点呢?那就像下面这样写: [快速开始-步骤三]($quickstart.md#step3) 好了,在发布文档的时候,文档就会根据路由规则以及你的文档标识去生成链接了(由于是后端去处理,所以在编辑文档的时候,前端展示的预览内容,暂时是无法跳转的)。 那么,问题就来了,我文档项目里面的文档越来越多,我怎么知道我要链接的那个文档文档标识呢?不用担心,在markdown编辑器的左侧,括号里面的红色文字显示的就是你的文档标识。 8、采集功能 看到一篇很好的文章,但是文章里面有代码段、有图片,手工复制过来,格式全乱了,所以,相信采集功能,会是你需要的。采集功能,在markdown编辑器的功能栏上面,对,就是那个瓢虫图标,就是那个Bug,因为我找不到蜘蛛的图标... 9、SEO 后台管理,个性化定制你的SEO关键字;并且在SEO管理这里,可以更新站点sitemap(暂时没做程序定时自动更新sitemap) 10、版本控制 MinDoc之前本身就有版本控制的,但是版本控制的文档内容全都存在数据库中,如果修改频繁而导致修改历史过多的话,数据库可能会被撑爆。当时没有好的解决办法,所以将该功能移除了。 目前加上该功能,是因为这个功能呼声很高,所以加回来了。但是版本控制的内容不再存储到数据库中,而是以文件的形式存储到本地或者是云存储上。 功能在管理后台->配置管理中进行开启 11、更美观、简洁的页面布局和更为完善的移动端兼容 这是个看脸的时代...升级日志管理后台,恢复和优化附件管理功能,以便管理音频和视频 内容编辑器支持上传音频和视频(如果开启了阿里云OSS云存储,则将音视

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_3306428634

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

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

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

打赏作者

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

抵扣说明:

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

余额充值