Java-基于SSM的人事管理系统

2023-11-04

项目背景

在高速发展的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,人们对人事管理系统越来越重视,更好的实现人事管理系统的有效发挥,本文将通过人事管理系统的信息,分析在日常生活中对人事管理系统信息存在哪些问题探讨出进一步提升工作效率,管理能力的对策。
系统采用了jsp技术,将所有模块采用以浏览器交互的模式,选择MySQL作为系统的数据库,开发工具选择Myeclipse来进行系统的设计。基本实现了人事管理系统应有的主要功能模块,本系统有管理员、员工与部门经理,管理员:个人中心、员工管理、部门经理管理、部门信息管理、员工考勤管理、签到管理、请假申请管理、工资查询管理、部门类型管理,部门经理;个人中心、员工管理、部门信息管理、员工考勤管理、签到管理、请假申请管理、工资查询管理,员工;个人中心、部门信息管理、员工考勤管理、签到管理、请假申请管理、工资查询管理等功能。
对系统进行测试后,改善了程序逻辑和代码。同时确保系统中所有的程序都能正常运行,所有的功能都能操作,本系统的开发获取人事管理系统信息能够更加方便快捷,同时也使人事管理系统信息变的更加系统化、有序化。系统界面较友好,易于操作。

功能设计

功能模块图

登录系统结构图
在这里插入图片描述
系统结构图
在这里插入图片描述

功能截图

管理员输入个人的用户名、密码登录系统,这时候系统的数据库就会在进行查找相关的信息,如果我们输入的用户名、密码不正确,数据库就会提示出错误的信息提示,同时会提示管理员重新输入自己的用户名、密码,直到账号密码输入成功后,会提登录成功的信息。
在这里插入图片描述
管理员对部门类型管理进行获取类型等信息进行删除、修改等操作。
在这里插入图片描述
管理员对员工管理进行获取员工工号、姓名、部门、性别、手机、邮箱、身份证、照片进行删除、修改以及查看等操作。
在这里插入图片描述
管理员对部门经理管理进行获取经理工号、经理姓名、性别、部门名称、职务、邮箱、联系电话、身份证、照片、是否审核、审核回复等信息查看、修改以及删除等操作。
在这里插入图片描述
管理员可以对工资查询管理进行获取员工工号、姓名、部门、工资月份、基本工资、绩效工资、加班工资、全勤、迟到早退、请假、个税、社保代缴、实发工资、登记时间、是否审核、审核回复等信息进行修改、删除等操作。
在这里插入图片描述
管理员可以对部门信息管理进行获取经理工号、部门名称、经理姓名、联系电话、办公区域、办公人数等信息进行查看、修改、删除等操作。
在这里插入图片描述
员工进入人事管理系统可以对个人中心、部门信息管理、员工考勤管理、签到管理、请假申请管理、工资查询管理进行查看等操作。
在这里插入图片描述
在个人信息页面可以查看员工工号、姓名、部门、性别、手机、邮箱、身份证、照片等内容,并进行修改等操作。
在这里插入图片描述
在工资查询管理页面可以查看员工工号、姓名、部门、工资月份、基本工资、绩效工资、加班工资、全勤、迟到早退、请假、个税、社保代缴、实发工资、登记时间、是否审核、审核回复等内容,并进行修改等操作。
在这里插入图片描述

相关代码

数据库配置

# Tomcat
server:
    tomcat:
        uri-encoding: UTF-8
    port: 8080
    servlet:
        context-path: /springbootr1tjf

spring:
    datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/springbootr1tjf?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
        username: root
        password: 123456

#        driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
#        url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=springbootr1tjf
#        username: sa
#        password: 123456

    servlet:
      multipart:
        max-file-size: 10MB
        max-request-size: 10MB
    resources:
      static-locations: classpath:static/,file:static/

#mybatis
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.entity
  global-config:
    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 1
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 2
    #驼峰下划线转换
    db-column-underline: true
    #刷新mapper 调试神器
    refresh-mapper: true
    #逻辑删除配置
    logic-delete-value: -1
    logic-not-delete-value: 0
    #自定义SQL注入器
    sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    call-setters-on-nulls: true
    #springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)
    jdbc-type-for-null: 'null' 

控制层(controller)

package com.controller;


import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@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 captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		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);
	}
	
	/**
	 * 注册
	 */
	@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("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /**
     * 信息
     */
    @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){
    	Long id = (Long)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);
    	UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
    	if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
    		return R.error("用户名已存在。");
    	}
        userService.updateById(user);//全部更新
        return R.ok();
    }

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

业务层(Service)


package com.service;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.IService;
import com.entity.UserEntity;
import com.utils.PageUtils;


/**
 * 系统用户
 */
public interface UserService extends IService<UserEntity> {
 	PageUtils queryPage(Map<String, Object> params);
    
   	List<UserEntity> selectListView(Wrapper<UserEntity> wrapper);
   	
   	PageUtils queryPage(Map<String, Object> params,Wrapper<UserEntity> wrapper);
	   	
}

数据访问层(Dao)

package com.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.entity.UserEntity;

/**
 * 用户
 */
public interface UserDao extends BaseMapper<UserEntity> {
	
	List<UserEntity> selectListView(@Param("ew") Wrapper<UserEntity> wrapper);

	List<UserEntity> selectListView(Pagination page,@Param("ew") Wrapper<UserEntity> wrapper);
	
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java-基于SSM的人事管理系统 的相关文章

随机推荐

  • 如何根据芯片手册时序图编写驱动程序

    如何根据芯片手册时序图编写驱动程序 对于电子开发者来说 刚刚拿到一个芯片 常用的芯片可以参考网上的例程来做深入了解 对于一个不常用的芯片来说 Datasheet几乎是使用芯片的唯一的资料 所以根据Datasheet时序图写出对应的驱动程序就
  • vue样式穿透(::v-deep,/deep/的使用)

    在 vue 项目的开发过程 使用了vant ElementUI antdui等组件且样式 style 使用了 scoped 属性 当想要修改组件样式 发现直接修改不了 需去掉 scoped 属性或者使用深度选择器才能修改成功 去掉scope
  • GD32F190 ADC多通道DMA自动接收踩坑指南

    如果条件允许的话 请不要用GD32F1x0系列 题记 这个系列的芯片官方连个库函数指南都没有你敢信 我都不要求中文版的了 起码英文版的得有吧 以往stm32的ADC工作模式 一般都是配置成多个通道自动连续切换 然后通过DMA把数据读走 这次
  • Vue和React的区别和优势对比

    相同点 1 都使用了 Virtual DOM 虚拟DOM 2 都支持服务器端渲染 3 提供了响应式 Reactive 和组件化 Composable 的视图组件 4 都有 props 的概念 这是properties的简写 props在组件
  • 办公室共享打印机怎么连接?

    每个办公室内 必不可少的就是打印机 但是也不可能给每个人都配备一台打印机吧 为了方便打印 可以局域网设置让多台电脑共享一台打印机 下面就来看看连接办公室共享打印机的方法 1 在桌面上打开我的电脑 2 打开控制面板 找到查看和打印机 打开 3
  • MTF浅谈概论,SFR原理,CTF,各自优缺点

    MTF浅谈概论 SFR原理 CTF 各自优缺点 好像很多人很多地方 不管什么样的清晰度测试都通通叫MTF 比如用线对的方式测的对比度也叫MTF SFR 也叫MTF 其实如果将MTF作为一个统称概念不是不行 但容易造成很多人混淆 概念模糊 尤
  • Unity动画系统简单介绍

    Unity动画系统知识点简单介绍 简易 本文是学习文 其中转载某些文章 如有侵权 联系删除 学习要点 1 动画的分类 游戏物体的基础动画设置 UGUI设置的按钮状态 2D游戏Sprite动画 Root Motion设置 人物模型动画设置 1
  • Opencv中的轮廓检测及应用

    在openCV中 我们可以对图片的轮廓进行检测 虽然轮廓的检测看起来很简单 只是对一个图形的边框进行描绘 但是 它在很多领域上都应用到了 例如 人脸识别 车辆检测 视频采集等 下面我会通过人脸识别和车辆检测两部分为大家展示 1 轮廓的概述
  • linux中gcc指令,Linux GCC命令备忘

    简介 gcc GNU C Compiler 但不局限于c语言 还支持C JAVA OBJECIVE C PASCAL等 变成了GNU Complier Collection 即GNU编译器家族 几个简单的指令 gcc hello c o h
  • pytorch如何计算平方_如何使用pytorch自动求梯度

    构建深度学习模型的基本流程就是 搭建计算图 求得损失函数 然后计算损失函数对模型参数的导数 再利用梯度下降法等方法来更新参数 搭建计算图的过程 称为 正向传播 这个是需要我们自己动手的 因为我们需要设计我们模型的结构 由损失函数求导的过程
  • 关于ICMP简介

    ICMP 简介 ICMP是 Internet Control Message Protocol Internet控制报文协议 ICMP协议是一种面向无连接的协议 它是TCP IP协议族的一个子协议 用于在IP主机 路由器之间传递控制消息 I
  • 不作35岁的程序员

    http blog chinaunix net uid 28647963 id 3540115 html 在中国 程序员不能超过35岁 似乎已经是不争的事实 软件开发工作就是青春饭 顶多靠毕业这十年的时间 超过这个年龄 要不成功跃身成为管理
  • UE4对象类类型引用和类默认对象(Class Default Object,简称CDO)

    官方介绍https docs unrealengine com en us Programming UnrealArchitecture Objects The UCLASS macro gives the UObject a refere
  • python3中使用pip3错误syn_python-pip3错误-'_NamespacePath'对象没有属性'sort'

    python pip3错误 NamespacePath 对象没有属性 sort 我尝试通过pip3安装软件包 但出现此错误 我运行的每个pip pip3命令都会给我这个错误 alexg hitbox pip3 V Traceback mos
  • 2021全国计算机3月试题,2021年3月全国计算机等级考试二级MS Office高级应用历年真题与模拟试题答案分析_圣考资料网...

    部分 历年真题及详解 2016年3月全国计算机等级考试 二级MS Office高级应用 真题及详解 考试时间120分钟 满分100分 一 单选题 每小题1分 共20分 1 软件按功能可以分为应用软件 系统软件和支撑软件 工具软件 下面属于应
  • 周末用Python兼职赚了5000,分享一些接单技巧

    大家最近过得开心吗 元旦假日将至 Python副业圈子里的朋友们一定很开心 每年年末都是Python技术变现旺季 尤其是在目前这种大厂都缺人的特殊时期 私活订单多到接不完 很多人都在接单 近两年开辟副业兼职赚钱的人越来越多 我们似乎进入了一
  • vscode统计代码行数,前端开发配置、快捷键使用

    1 统计代码行数 使用场景是项目年终统计行数 实现 在需要统计得文件夹右键 在文件夹中查找 后输入筛选得正则表达式 b b 注意右边小图标都点亮 这里顺便将自己使用vscode进行前端开发环境配置归纳一下 便于自己以后快速搭建 vscode
  • 稳健回归(Robustness regression)

    稳健回归 Robustness regression 标签 空格分隔 监督学习 author duanxxnj 163 com time 2016 07 08 稳健回归Robustness regression 最小二乘法的弊端 稳健回归
  • PHP 垃圾回收机制(GC)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 前言 一 GC回收机制是什么 二 引用技术的知识 三 GC垃圾回收机制的使用 四 CISCN 2022 初赛 ezpentest 五 NSSCTF prize p1 前
  • Java-基于SSM的人事管理系统

    项目背景 在高速发展的时代 众多的软件被开发出来 给用户带来了很大的选择余地 而且人们越来越追求更个性的需求 在这种时代背景下 人们对人事管理系统越来越重视 更好的实现人事管理系统的有效发挥 本文将通过人事管理系统的信息 分析在日常生活中对