ssm人事管理信息系统源码和文档

news2024/10/7 8:28:07

ssm人事管理信息系统源码和文档046

 开发工具:idea 
 数据库mysql5.7+
 数据库链接工具:navcat,小海豚等
  技术:ssm

(一)课题目的及意义(含国内外的研究现状分析)

(1)人事管理系统的国外的发展

人事管理系统的发展经过三个阶段的发展。 

人事管理系统的发展历史可以追溯到20世纪60年代末期。由于当时计算机技术已经进入实用阶段,同时大型企业用手工来计算和发放薪资既费时费力又容易出差错,为了解决这个矛盾,第一代人事管理系统应运而生。 

第二代的人事管理系统出现于20世纪70年代末。由于计算机技术的飞速发展,无论是计算机的普及性,还是计算机系统工具和数据库技术的发展,都为HRMS的阶段性发展提供了可能[2]。 

人事管理系统的革命性变革出现在20世纪90年代末。第三代HRMS的特点是从人力资源管理的角度出发,用集中的数据库将几乎所有与人力资源相关的数据统一管理起来。友好的用户界面,强有力的报表生成工具、分析工具和信息的共享使得人力资源管理人员得以摆脱繁重的日常工作。

(2)人事管理系统的国内的发展

随着我国企业的规模不断扩大,员工数量急剧增加,有员工的各种信息也成倍增长。面对庞大的信息量,有必要开发人事管理信息系统来进行满足用户和管理员的需求。通过这样的系统,可以做到信息的规范管理、科学统计和快速查询,从而减少管理方面的工作量。

中国是世界上人口最多的国家,目前有近14亿人口,劳动力人口有近8亿,约占界劳动人口的25%(《中国统计年鉴》2008数据)。而对于如此庞大的劳动力人口,企业人事管理信息数字化已经成为趋势。

我国的管理信息系统大发展是在80年代末90年代初,国家相继建立起了“金卡”、“金关”、“金桥”工程,多数企事业单位建立了局域网和广域网管理信息系统。随着世界经济和我国经济逐步向知识经济迈进,无论是基于工业经济的管理信息系统,还有面向少数专家和管理人员的专家系统(ES)或决策支持系统(SS),其处理对象、服务对象、自身的系统结构及处理能力都有了进一步的发展[3]。

(3)人事管理系统的研究现状

人事管理信息系统是进行信息的采集、存储、加工、维护和使用的系统。它是随着管理科学和技术科学的发展而形成的。人事管理信息系统的发展与计算机网络技术的发展是紧密相关的,随着Internet/Intranet技术的广泛应用,人事管理信息系统的体系结构也发生很大的变化,从以往基于数据访问及安全体系发展到当前的人事管理信息系统,其系统开发主要包括数据库的规划设计与维护和网站首页应用程序的开发两个方面。对于前者要求建立起的数据库具有完整性和一致性,且具有一定的数据安全性,而对于后者则要求程序界面友好、功能完备,容易使用,具有流行软件的操作习惯等特点。

进入21世纪,伴随着信息化的普及和互联网的快速发展,IT技术更广泛的应用于企业人事管理,如何提高人事部门的效率,降低人工成本,成为企业管理者重点关心的问题。目前,国内人事管理系统的开发技术相当成熟,主要原因在于人事管理系统本身具有业务清晰、数据处理规范等许多优点,为其实现计算机信息化提供了必要的优越条件。加上近十年来计算机技术的飞跃发展,以及国内各企业的高度重视,人事管理系统在国内基本上已进入了普及应用的阶段。国内近90%以上的公司和单位均开发并运行了人事管理信息系统,其他没有和正准备开发计算机应用或开发管理信息系统的公司和单位,也把人事管理系统作为其应用与开发的首要目标[4]。加上国家人事主管部门及国内计算机应用开发商的共同努力,国内目前己有多种通用的人事管理系统软件供企业单位选择使用。应该说,人事管理信息系统的开发与应用在国内已经进入了相对成熟期。

(4)研究目的意义

社会经济的迅速发展和科学技术的全面进步,计算机技术的飞速发展,以及计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。在信息技术快速发展的时代,企业发展与信息技术的关系日益密切,企业创新日益加快,信息化规划无疑将成为企业创新和发展过程中最重要的工作,也是企业发展的助推剂。各种信息化管理层出不穷,以前全是由人工管理的方法管理企业人事信息,这样存在很多缺点,和漏洞。随着企业的不断发展,企业员工数量大大的增加,为了很方便的管理好人才信息,使用人事管理软件来规范管理人事信息,大大提高了工作效率,节约了企业管理成本。

随着我们改革开发的不断深入,经济的飞速发展,企业要想生存发展,想在激烈的市场竞争中立于不败之地,没有现代化的管理万万不行的,人事管理信息系统的全面自动化、信息化,则是其中最重要的部分。为了加快企业信息化管理的步伐,提高内部人事管理的处理效率,建立人事管理信息系统已经变得十分必要。因此,有必要建立一个人事管理信息系统,使企业人事管理工作更规范,系统化,程序化,提高信息处理的速度,能够及时,准确,有效的管理人才信息。

本人事管理信息系统作为本次毕业设计的选题,在开发过程中可以提高本人的程序开发的实践能力,将理论知识运用到实践当中,掌握大学所学专业知识,为以后踏入社会做准备。

 

package com.controller;


import java.text.DateFormat;
import java.text.ParseException;
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.StringUtil;
import java.lang.reflect.InvocationTargetException;

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.QingjiaEntity;

import com.service.QingjiaService;
import com.entity.view.QingjiaView;
import com.service.YonghuService;
import com.entity.YonghuEntity;
import com.utils.PageUtils;
import com.utils.R;

/**
 * 请假
 * 后端接口
 * @author
 * @email
 * @date 2023-03-01
 */
@RestController
@Controller
@RequestMapping("/qingjia")
public class QingjiaController {
    private static final Logger logger = LoggerFactory.getLogger(QingjiaController.class);

    @Autowired
    private QingjiaService qingjiaService;


    @Autowired
    private TokenService tokenService;


    //级联表service
    @Autowired
    private YonghuService yonghuService;

    //字典表map
    Map<String, Map<Integer, String>> dictionaryMap;

    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isNotEmpty(role) && "用户".equals(role)){
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        }
        PageUtils page = qingjiaService.queryPage(params);

        //字典表数据转换
        List<QingjiaView> list =(List<QingjiaView>)page.getList();
        ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
        dictionaryMap = (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");
        for(QingjiaView c:list){
            this.dictionaryConvert(c);
        }
        return R.ok().put("data", page);
    }
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        QingjiaEntity qingjia = qingjiaService.selectById(id);
        if(qingjia !=null){
            //entity转view
            QingjiaView view = new QingjiaView();
            BeanUtils.copyProperties( qingjia , view );//把实体数据重构到view中
            //级联表
            YonghuEntity yonghu = yonghuService.selectById(qingjia.getYonghuId());
            if(yonghu != null){
                BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                view.setYonghuId(yonghu.getId());
            }
            //字典表字典转换
            ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
            dictionaryMap = (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");
            this.dictionaryConvert(view);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody QingjiaEntity qingjia, HttpServletRequest request) {
        try {
            logger.debug("save方法:,,Controller:{},,qingjia:{}", this.getClass().getName(), qingjia.toString());
            qingjia.setCreateTime(new Date());
            String role = String.valueOf(request.getSession().getAttribute("role"));
            if ("用户".equals(role)) {
                Integer userId = (Integer) request.getSession().getAttribute("userId");
                qingjia.setYonghuId(userId);
                qingjia.setQingjiaTypes(1);
            }else if("管理员".equals(role)){
                if(qingjia.getQingjiaTypes().intValue()!=1){
                    qingjia.setUpdateTime(new Date());
                }
            }
            // 获取相差的天数
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(format.parse(qingjia.getOnday()));
            long timeInMillis1 = calendar.getTimeInMillis();
            calendar.setTime(format.parse(qingjia.getDownday()));
            long timeInMillis2 = calendar.getTimeInMillis();
            if (timeInMillis2 < timeInMillis1) {
                return R.error("请假结束时间不得小于开始时间");
            }
            qingjia.setCreateTime(new Date());
            Long betweenDays = (timeInMillis2 - timeInMillis1) / (1000L * 3600L * 24L);
            qingjia.setQingjiaNumber(betweenDays.intValue());
            qingjiaService.insert(qingjia);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody QingjiaEntity qingjia, HttpServletRequest request) {
        try {
            logger.debug("update方法:,,Controller:{},,qingjia:{}", this.getClass().getName(), qingjia.toString());
            String role = String.valueOf(request.getSession().getAttribute("role"));
            if ("用户".equals(role)) {
                qingjia.setYonghuId((Integer) request.getSession().getAttribute("userId"));
            }else{
                qingjia.setUpdateTime(new Date());
            }
            // 获取相差的天数
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(format.parse(qingjia.getOnday()));
            long timeInMillis1 = calendar.getTimeInMillis();
            calendar.setTime(format.parse(qingjia.getDownday()));
            long timeInMillis2 = calendar.getTimeInMillis();
            if (timeInMillis2 < timeInMillis1) {
                return R.error("请假结束时间不得小于开始时间");
            }
            Long betweenDays = (timeInMillis2 - timeInMillis1) / (1000L * 3600L * 24L);
            qingjia.setQingjiaNumber(betweenDays.intValue());

            qingjiaService.updateById(qingjia);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return R.ok();
    }


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

    /**
    *字典表数据转换
    */
    public void dictionaryConvert(QingjiaView qingjiaView){
        //当前表的字典字段
        if(StringUtil.isNotEmpty(String.valueOf(qingjiaView.getQingjiaTypes()))){
            qingjiaView.setQingjiaValue(dictionaryMap.get("qingjia_types").get(qingjiaView.getQingjiaTypes()));
        }

        //级联表的字典字段
        if(StringUtil.isNotEmpty(String.valueOf(qingjiaView.getBumenTypes()))){
            qingjiaView.setBumenValue(dictionaryMap.get("bumen_types").get(qingjiaView.getBumenTypes()));
        }
        if(StringUtil.isNotEmpty(String.valueOf(qingjiaView.getZhiweiTypes()))){
            qingjiaView.setZhiweiValue(dictionaryMap.get("zhiwei_types").get(qingjiaView.getZhiweiTypes()));
        }
        if(StringUtil.isNotEmpty(String.valueOf(qingjiaView.getSexTypes()))){
            qingjiaView.setSexValue(dictionaryMap.get("sex_types").get(qingjiaView.getSexTypes()));
        }
        if(StringUtil.isNotEmpty(String.valueOf(qingjiaView.getPoliticsTypes()))){
            qingjiaView.setPoliticsValue(dictionaryMap.get("politics_types").get(qingjiaView.getPoliticsTypes()));
        }
    }


}

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

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

相关文章

SAP 如何创建Company-公司

目录 什么是公司 一、创建/定义公司的意义&#xff1f; 二、创建公司的案例分析 1.定义Company-公司 2.详细处理介绍 总结 什么是公司 SAP FICO解决方案中使用了某些术语来定义分类账的输入。其中一个术语是公司&#xff0c;一种SAP FI企业结构&#xff0c;任何SAP会计人…

linux下系统问题排查基本套路

文章目录 总结常用命令原文GC相关网络TIME_WAITCLOSE_WAIT 总结常用命令 top 查找cpu占用高的进程ps 找到对应进程的pidtop -H -p pid 查找cpu利用率较高的线程printf ‘%x\n’ pid 将线程pid转换为16进制得到 nidjstack pid |grep ‘nid’ -C5 –color 在jstack中找到对应堆栈…

无线上网连接及配置

目录 1. 无线上网连接及配置 1.1 无线路由器连接方式 ​编辑 1.2 无线路由器的基本配置 1.配置用户计算机上的IP地址 2.访问无线路由Web管理界面 1.3 WAN 口设置 1.动态 IP 2.静态 IP 1. 无线上网连接及配置 一小型公司共有20名员工。由于公司业务需要访问Internet&…

Jacoco XML 解析

1 XML解析器对比 1. DOM解析器&#xff1a; ○ 优点&#xff1a;易于使用&#xff0c;提供完整的文档树&#xff0c;可以方便地修改和遍历XML文档。 ○ 缺点&#xff1a;对大型文档消耗内存较多&#xff0c;加载整个文档可能会变慢。 ○ 适用场景&#xff1a;适合小型XML文档…

解决OpenFOAM颗粒计算输出文件Paraview无法打开问题(一)

长话短说&#xff0c;关于这个问题&#xff0c;有两个解决方案&#xff0c;一是将文件类型转换为VTK格式&#xff0c;二是采用github上的脚本&#xff0c;将OpenFOAM输出的位置文件转换成真实的颗粒的真实位置文件。 1. 转换为VTK格式 在OF中&#xff0c;将输出结果转变为VTK…

自动化测试平台seldom-platform部署及使用

介绍 seldom-platform是一个基于seldom测试框架的测试平台 项目地址&#xff1a;https://github.com/SeldomQA 文档&#xff1a;seldom 语雀 首先&#xff0c;专门为seldom测试框架提供平台化支持。其次&#xff0c;只负责自动化测试项目的解析、执行用例&#xff0c;当然…

HTML-常见标签、HTML5新特性

HTML 软件架构 1.C/S架构 (1) C/S架构即Client/Server&#xff08;客户机/服务器&#xff09;结构。 (2) C/S 架构特点 ​ C/S结构在技术上很成熟&#xff0c;它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。但是该结构的程序是…

发布完体验版以后,出现接口调用失败,但是在本地开发环境中可以正常访问的情况,解决办法

1.一般解决办法 通过打开微信小程序调试模式 进行调用&#xff0c;但这会有些许问题&#xff0c;出现vConsole按钮**&#xff0c;影响美观** 如图所示&#xff1a; 1.1.进入小程序 点击右上角的3个点儿 1.2.点击开发调试 1.3.点击打开调试 1.4.显示出vconsole按钮&#xf…

皕杰报表(BIOS Report)中设置序号的方法之一

皕杰报表软件是一款应用广泛的Java报表工具&#xff0c;使用简单、制表效率高&#xff0c;可以轻松制作出各种各样的报表&#xff0c;是一个不错的Web报表软件。在报表设计过程中&#xff0c;经常要用到各种序号&#xff0c;那么该如何实现这样的报表呢&#xff1f;下面根据需求…

taro h5 formData上传图片的坑-Required request part ‘file‘ is not present

描述&#xff1a;用formData上传图片 1、生成formData const formData new FormData() formData.append(file, data) // data是file formData.append(xxx, xxx) // 添加其他参数2、用taro.request请求 Taro.request({url: xxxx,data: formData,header: {Content-Type: mult…

LeetCode--HOT100题(39)

目录 题目描述&#xff1a;101. 对称二叉树&#xff08;简单&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;101. 对称二叉树&#xff08;简单&#xff09; 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 LeetCode做题链接&#xff1a;LeetCode-…

B. Fancy Coins - 思维

分析&#xff1a; 赛事思路总是wa&#xff0c;看完题解发现思维要打开&#xff0c;思维还是要练啊。换个思路就会清晰很多&#xff0c;可以根据m 和 k先统计出需要多少k面值的和多少1面值的&#xff0c;然后分别对两种面值不够的补神奇的硬币&#xff0c;这样可能会导致不是最小…

前端处理图片文件的方法

在项目开发过程中&#xff0c;有一个需求&#xff0c;需要前端对上传的图片进行处理&#xff0c;以字符串的形式传给后端&#xff0c;实现效果如下&#xff1a; 1.上传图片的组件 在该项目中&#xff0c;使用了element plus组件库 <el-uploadv-model:file-list"fileL…

根据源码,模拟实现 RabbitMQ - 网络通讯设计,自定义应用层协议,实现 BrokerServer (8)

目录 一、网络通讯协议设计 1.1、交互模型 1.2、自定义应用层协议 1.2.1、请求和响应格式约定 ​编辑 1.2.2、参数说明 1.2.3、具体例子 1.2.4、特殊栗子 1.3、实现 BrokerServer 1.3.1、属性和构造 1.3.2、启动 BrokerServer 1.3.3、停止 BrokerServer 1.3.4、处…

android framework-Pixel3真机制作开机动画实战

第一步、制作bootanimation.zip 1.1、图片格式 推荐使用jpg或者png格式的图片 1.2、图片命名规则 多张图片时&#xff0c;Android显示logo是按照图片名称数值的大小顺序来显示的&#xff1b;图片命名需要注意名称后面要以数字结尾&#xff0c;并且按图片总张数的位数来补齐…

行为型(五) - 迭代器模式

一、概念 迭代器模式&#xff08;Iterator Pattern&#xff09;&#xff1a;迭代器模式将集合对象的遍历操作从集合类中拆分出来&#xff0c;放到迭代器类中&#xff0c;让两者的职责更加单一。 通俗的讲&#xff1a;迭代器模式就是提供一种遍历的方法&#xff0c;这种方法有…

卡马A1/B1和VEAZEN费森S88怎么样?有什么优缺点?综合对比评测哪一款更适合初学者/进阶者购买?

每个吉他爱好者应该都想拥有一把全单吉他&#xff0c;毕竟全实木的民谣吉他会有更好的声音爆发力和更细腻的音色&#xff0c;在入门和进阶全单吉他中&#xff0c;经常收到私信询问这两款VEAZEN费森S88系列和KEPMA卡马A1系列这两款全单吉他怎么样&#xff1f; 卡马A1/B1和VEAZE…

【LangChain系列 1】 LangChain初探

原文链接&#xff1a;【LangChain系列 1】LangChain初探https://mp.weixin.qq.com/s/9UpbM84LlsHOaMS7cbRfeQ 本文速读&#xff1a; LangChain是什么 LangChain初探 环境准备 LLMs Prompt Templates Output Parser 第一个LLMChain应用 01 LangChain是什么 LangChain是一…

Linux socket网络编程

一、主机字节序列和网络字节序列 主机字节序列分为大端字节序列和小端字节序列&#xff0c;不同的主机采用的字节序列可能不同。大端字节序列是指一个整数的高位字节存储在内存的低地址处&#xff0c;低位字节存储在内存的高地址处。小端字节序列是指整数的高位字节存储在内存…

Prometheus+Grafana+AlertManager监控Linux主机状态

文章目录 PrometheusGrafanaAlertManager监控平台搭建开始监控Grafana连接Prometheus数据源导入Grafana模板监控Linux主机状态 同系列文章 PrometheusGrafanaAlertManager监控平台搭建 Docker搭建并配置Prometheus Docker拉取并配置Grafana Docker安装并配置Node-Exporter …