基于Java+SpringBoot+Vue的时间管理系统设计与实现(源码+LW+部署文档等)

news2024/12/26 9:31:21

博主介绍:   

大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。
我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下进行项目开发,具有丰富的项目经验和开发技能。我的代码风格规范、优美、易读性强,同时也注重性能优化、代码重构等方面的实践和经验总结。
我有丰富的成品Java毕设项目经验,能够为学生提供各类个性化的开题框架和实际运作方案。同时我也提供相关的学习资料、程序开发、技术解答、代码讲解、文档报告等专业服务。

🍅技术交流和部署相关看文章末尾!🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

Java项目精品实战案例(300套)

时间管理系统源码下载地址:

https://download.csdn.net/download/weixin_54828627/87798345

一、效果演示

基于springboot+vue的时间管理系统演示视频

二、前言介绍

在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括时间管理系统的网络应用,在外国时间管理系统已经是很普遍的方式,不过国内的管理系统可能还处于起步阶段。时间管理系统具有时间管理功能的选择。时间管理系统采用java技术,基于springboot框架,mysql数据库进行开发,实现了首页,个人中心,系统公告管理,用户管理,时间分类管理,事件数据管理,目标数据管理,用户日记管理等内容进行管理,本系统具有良好的兼容性和适应性,为用户提供更多的时间管理信息,也提供了良好的平台,从而提高系统的核心竞争力。

本文首先介绍了设计的背景与研究目的,其次介绍系统相关技术,重点叙述了系统功能分析以及详细设计,最后总结了系统的开发心得。

三、主要技术

技术名作用
SpringBoot后端框架
Vue前端框架
MySQL数据库

四、系统设计(部分)

4.1、主要功能模块设计         

4.2、系统操作流程设计 

五、功能截图

5.1、管理员功能模块

管理员登录系统后,可以对首页,个人中心,系统公告管理,用户管理,时间分类管理,事件数据管理,目标数据管理,用户日记管理等功能模块进行相应操作,如图5-1所示。

图5-1管理员功能界面图

系统管理

图5-2系统管理界面图

用户管理

图5-3用户管理界面图

时间分类管理

图5-4时间分类管理界面图

事件数据管理

图5-5事件数据管理界面图

目标数据管理

图5-6目标数据管理界面 

用户日记管理

图5-7用户日记管理界面图

5.2、用户功能模块

用户注册

图5-8用户注册界面图 

用户登录进入时间管理系统,可以对首页,个人中心,系统公告管理,事件数据管理,目标数据管理,用户日记管理等功能进行相应操作,如图5-9所示。

图5-9用户功能界面图

个人中心管理

图5-10个人中心管理界面图

系统公告管理

图5-11系统公告管理界面图

事件数据管理

图5-12事件数据管理界面图 

用户日记管理

图5-13用户日记管理界面图 

这里功能太多,就不一一展示啦~

六、数据库设计(部分)

数据库设计一般包括如下几个步骤:

(1)根据用户需求,确定数据库信息进行保存

对用户的需求分析是数据库设计的第一阶段,用户的需求调研,熟悉时间管理运作流程,系统要求,这些都是以概念模型为基础的。

(2)设计数据的概念模型

概念模型与数据建模用户的观点一致,用于信息世界的建模工具。通过E-R图可以清楚地描述系统涉及到的实体之间的相互关系。

用户注册实体图如图6-1所示:

图6-1用户注册实体图

用户管理实体图如图6-2所示:

图6-2用户管理实体图

七、代码参考

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.MubiaoshujuEntity;
import com.entity.view.MubiaoshujuView;

import com.service.MubiaoshujuService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;

/**
 * 目标数据
 * 后端接口
 * @author 
 * @email 
 * @date 2022-03-04 15:54:43
 */
@RestController
@RequestMapping("/mubiaoshuju")
public class MubiaoshujuController {
    @Autowired
    private MubiaoshujuService mubiaoshujuService;


    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,MubiaoshujuEntity mubiaoshuju,
                @RequestParam(required = false) @DateTimeFormat(pattern="yyyy-MM-dd") Date tianjiariqistart,
                @RequestParam(required = false) @DateTimeFormat(pattern="yyyy-MM-dd") Date tianjiariqiend,
		HttpServletRequest request){
		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) {
			mubiaoshuju.setYonghuming((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<MubiaoshujuEntity> ew = new EntityWrapper<MubiaoshujuEntity>();
                if(tianjiariqistart!=null) ew.ge("tianjiariqi", tianjiariqistart);
                if(tianjiariqiend!=null) ew.le("tianjiariqi", tianjiariqiend);
		PageUtils page = mubiaoshujuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, mubiaoshuju), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,MubiaoshujuEntity mubiaoshuju, 
                @RequestParam(required = false) @DateTimeFormat(pattern="yyyy-MM-dd") Date tianjiariqistart,
                @RequestParam(required = false) @DateTimeFormat(pattern="yyyy-MM-dd") Date tianjiariqiend,
		HttpServletRequest request){
        EntityWrapper<MubiaoshujuEntity> ew = new EntityWrapper<MubiaoshujuEntity>();
                if(tianjiariqistart!=null) ew.ge("tianjiariqi", tianjiariqistart);
                if(tianjiariqiend!=null) ew.le("tianjiariqi", tianjiariqiend);
		PageUtils page = mubiaoshujuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, mubiaoshuju), params), params));
        return R.ok().put("data", page);
    }

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(MubiaoshujuEntity mubiaoshuju){
        EntityWrapper< MubiaoshujuEntity> ew = new EntityWrapper< MubiaoshujuEntity>();
 		ew.allEq(MPUtil.allEQMapPre( mubiaoshuju, "mubiaoshuju")); 
		MubiaoshujuView mubiaoshujuView =  mubiaoshujuService.selectView(ew);
		return R.ok("查询目标数据成功").put("data", mubiaoshujuView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        MubiaoshujuEntity mubiaoshuju = mubiaoshujuService.selectById(id);
        return R.ok().put("data", mubiaoshuju);
    }

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



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

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

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        mubiaoshujuService.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<MubiaoshujuEntity> wrapper = new EntityWrapper<MubiaoshujuEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) {
			wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username"));
		}

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






    /**
     * (按值统计)
     */
    @RequestMapping("/value/{xColumnName}/{yColumnName}")
    public R value(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("xColumn", xColumnName);
        params.put("yColumn", yColumnName);
        EntityWrapper<MubiaoshujuEntity> ew = new EntityWrapper<MubiaoshujuEntity>();
		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) {
            ew.eq("yonghuming", (String)request.getSession().getAttribute("username"));
		}
        List<Map<String, Object>> result = mubiaoshujuService.selectValue(params, ew);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for(Map<String, Object> m : result) {
            for(String k : m.keySet()) {
                if(m.get(k) instanceof Date) {
                    m.put(k, sdf.format((Date)m.get(k)));
                }
            }
        }
        return R.ok().put("data", result);
    }

    /**
     * (按值统计)时间统计类型
     */
    @RequestMapping("/value/{xColumnName}/{yColumnName}/{timeStatType}")
    public R valueDay(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("xColumn", xColumnName);
        params.put("yColumn", yColumnName);
        params.put("timeStatType", timeStatType);
        EntityWrapper<MubiaoshujuEntity> ew = new EntityWrapper<MubiaoshujuEntity>();
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("yonghu")) {
            ew.eq("yonghuming", (String)request.getSession().getAttribute("username"));
        }
        List<Map<String, Object>> result = mubiaoshujuService.selectTimeStatValue(params, ew);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for(Map<String, Object> m : result) {
            for(String k : m.keySet()) {
                if(m.get(k) instanceof Date) {
                    m.put(k, sdf.format((Date)m.get(k)));
                }
            }
        }
        return R.ok().put("data", result);
    }

    /**
     * 分组统计
     */
    @RequestMapping("/group/{columnName}")
    public R group(@PathVariable("columnName") String columnName,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("column", columnName);
        EntityWrapper<MubiaoshujuEntity> ew = new EntityWrapper<MubiaoshujuEntity>();
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("yonghu")) {
            ew.eq("yonghuming", (String)request.getSession().getAttribute("username"));
        }
        List<Map<String, Object>> result = mubiaoshujuService.selectGroup(params, ew);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for(Map<String, Object> m : result) {
            for(String k : m.keySet()) {
                if(m.get(k) instanceof Date) {
                    m.put(k, sdf.format((Date)m.get(k)));
                }
            }
        }
        return R.ok().put("data", result);
    }

}

八、技术交流

大家点赞、收藏、关注、评论啦 、查看文章结尾👇🏻获取联系方式👇🏻

精彩专栏推荐订阅:在下方专栏👇🏻👇🏻👇🏻👇🏻

Java项目精品实战案例(300套)

 ​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/846961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache Paimon 学习笔记

本博客对应于 B 站尚硅谷教学视频 尚硅谷大数据Apache Paimon教程&#xff08;流式数据湖平台&#xff09;&#xff0c;为视频对应笔记的相关整理。 1 概述 1.1 简介 Flink 社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合&#xff0c;推…

《深度探索c++对象模型》第七章笔记

非原创&#xff0c;在学习 7 站在对象模型的尖端 On the Cusp of the Object Model 这一章讨论三个著名的C语言扩充性质&#xff0c;它们都会影响CH对象。它们分别是 template、exception handling (EH&#xff09;和runtime type identification (RTTI) 模版、异常、通过运行…

vite项目中使用@代表根路径

1.配置vite.config.ts import { defineConfig } from vite import vue from vitejs/plugin-vue import path from pathexport default defineConfig({plugins: [vue()],resolve: {alias:{: path.resolve(__dirname, src) }} })2.报错path和__dirname 找不到模块“path”或其相…

K8S系列文章 之 编写自动化部署K8S脚本

介绍 通过ansible脚本shell实现自动化部署k8s基础集群(v1.25.0) 部署结构 1. 通过二进制部署包镜像安装k8s集群、目录etcd节点只支持1-3个节点、最多三个etcd节点 2. 因k8s版本相对较新、需要升级内核来支持后台程序、当前版本只支持Cento7&#xff0c;内核版本(5.19.4-1.el7…

本地构建包含java和maven的镜像

目录 1.前提条件 2.下载 2.1.创建Dockerfile 3.构建镜像 参考文章 1.前提条件 本地环境需要的系统和软件 win10 Docker Desktop Powershell 图1 Win10安装Docker后&#xff0c;直接在Powershell使用Docker命令 有些Developer不习惯win10系统&#xff0c;却想要使用Lin…

使用ResponseBodyAdvice封装统一返回值

目录 ResponseBodyAdvice 接口概述 ResponseBodyAdvice 快速使用 父pom文件 pom文件 ResponseDto MyResponseBodyAdvice DemoController 结果展示 ResponseBodyAdvice 接口概述 在实际项目中&#xff0c;我们经常需要在请求前后进行一些操作&#xff0c;比如&#xf…

Cesium 实战教程 - 三种方式(CZML、nodeTransformations)修改模型节点组件属性(比例、旋转、移动等)

Cesium 实战教程 - 三种方式&#xff08;CZML、nodeTransformations&#xff09;修改模型节点组件属性&#xff08;比例、旋转、移动等&#xff09; 核心代码完整代码在线示例 关于 Cesium 设置模型组件的动作&#xff0c;之前是通过 CZML articulations 来实现的&#xff0c;…

xAI与GPT-4:探索宇宙真实本质的AI之战

xAI与GPT-4&#xff1a;AI之战 写在前面第一部分推动科学研究提升人机交互引发伦理和社会问题 第二部分模型的进一步优化跨领域合作人机融合 反AI斗士 马斯克进军AI中国的AI产业怎么样AI这把火&#xff0c;还能怎么烧&#xff1f;最后总结 北京时间7月13日凌晨&#xff0c;马斯…

加速手机充电,打开这个小技巧,让充电速度翻倍,快速充满电量

加速手机充电&#xff0c;打开这个小技巧&#xff0c;让充电速度翻倍&#xff0c;快速充满电量 通过打开这个小技巧&#xff0c;我们可以在有限的时间内快速充满手机电量&#xff0c;解决了电量不足的困扰。不再需要长时间等待充电&#xff0c;让我们能够更加便捷地使用手机&a…

微服务监控技术skywalking的部署与使用(亲测无坑)

微服务监控技术skywalking的部署与使用 1. 前期准备2. skywalking安装部署2.1 Java Agent2.2 apache/skywalking-oap-server2.3 apache/skywalking-ui 3. 项目启动4.效果展示 1. 前期准备 注&#xff1a;本篇文章采用docker部署&#xff0c;采用8.2.0版本&#xff0c;版本一定…

vue+Highcharts绘制3D饼图

效果图 一、下载highcharts插件 npm install highcharts 二、main.js全局配置插件 import Highcharts from "highcharts/highcharts"; import highcharts3d from "highcharts/highcharts-3d"; highcharts3d(Highcharts); 三、封装highcharts.vue组件 …

FreeFileSync 12.5 正式发布,文件夹比较与同步软件

导读FreeFileSync 是一款开源软件&#xff0c;适用于 Windows、macOS 和 Linux。FreeFileSync 本质是一个用于文件夹对比和同步的软件&#xff0c;它可以创建和管理所有重要文件的备份副本。FreeFileSync 不是每次都复制每个文件&#xff0c;而是确定源文件夹和目标文件夹之间的…

vue-baidu-map-3x 使用记录

在 Vue3 TypeScript 项目中&#xff0c;为了采用 标签组件 的方式&#xff0c;使用百度地图组件&#xff0c;冲浪发现了一个开源库 ovo&#xff0c;很方便&#xff01;喜欢的朋友记得帮 原作者 点下 star ~ vue-baidu-map-3xbaidu-map的vue3/vue2版本&#xff08;支持v2.0、v…

海外ASO优化之如何给应用选择正确的类别

将我们的应用程序放在Apple App Store和Google Play正确的类别中&#xff0c;不仅对按类别浏览应用的用户有帮助&#xff0c;而且能够帮助我们的应用程序获得良好排名。 1、应用程序属于多个类别的解决方案。 需要选择最能描述我们应用程序的类别&#xff0c;检查一下每个类别…

.net几行代码音乐API各排行榜 热搜 入库

对比了几家大厂的音乐API的接口 这家相对规范些 现在开始从零开始 net6敏捷开发对接 入库吧 关键技术工具和思维 1 json 生成类 2 分析类 规划表设计3 sqlsuger codefirst 生成表 4 封装get post 连接5 类映射automapper6 sqlsuger 插入数据 1 json 生成类 宇宙 第 一的…

轻量级低代码平台,快速生成应用程序及不同类型的CRM系统

私有化部署的低代码快速开发平台 无需代码或通过少量代码就可以快速生成应用程序的开发平台。 这套低代码管理后台平台可以支持多种企业应用场景&#xff0c;包括但不限于 OA系统、 CRM系统、 ERP系统、项目管理系统、进销存系统等。无论是懂技术的开发人员还是不懂技术的业务…

多通道振弦数据记录仪应用于桥梁监测

随着城市化进程的加快&#xff0c;城市桥梁的数量不断增加。对于城市交通的保障作用&#xff0c;桥梁的重要性不言而喻。而为了保障桥梁的安全&#xff0c;桥梁监测的重要性也越来越受到人们的重视。在桥梁监测中&#xff0c;多通道振弦数据记录仪的应用得到了广泛的认可和应用…

算法通关村第五关——n数之和问题解析

1. 两数之和问题 力扣第1题就是两数之和问题&#xff0c;给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那两个整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一…

聚观早报|美团创始人王慧文退出;马斯克将直播与扎克伯格笼斗

【聚观365】8月8日消息 美团创始人王慧文退出马斯克将在X上直播与扎克伯格笼斗蚂蚁微尘故事余承东微博透露鸿蒙4新进展华为出资15亿成立地产公司 美团创始人王慧文退出 据国家企业信用信息公示系统显示&#xff0c;北京光年之外科技有限公司在近期完成工商变更&#xff0c;创…

Hadoop理论及实践-HDFS读写数据流程(参考Hadoop官网)

NameNode与DataNode回顾 主节点和副本节点通常指的是Hadoop分布式文件系统&#xff08;HDFS&#xff09;中的NameNode和DataNode。 NameNode&#xff08;主节点&#xff09;&#xff1a;NameNode是Hadoop集群中的一个核心组件&#xff0c;它负责管理文件系统的命名空间和元数据…