欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vhr——先跑起来再说

程序员文章站 2022-05-29 10:32:30
vhr面向的群体范围并不大,并非属于互联网应用,所以市面上鼓吹的高并发,高性能对于这个项目来说并不适用。 盲目上微服务只会徒增成本。 ......

一,vhr项目宏观分析

目的:实现机关和事业单位的人事管理信息系统

软件使用的对象:面向机关和事业单位内人事信息管理人员和在职开发人员。

【架构选型】

vhr面向的群体范围并不大,并非属于互联网应用,所以市面上鼓吹的高并发,高性能对于这个项目来说并不适用。

盲目上微服务只会徒增成本。


系统业务流程设计


1.管理员对员工信息的操作

首先,管理人员登陆进入系统,对员工信息进行增删改查,进而对奖罚、工资、考评等信息进行增删改查,然后实现对部门员工部分信息的统计及修改


2.操作员对自己信息的操作

可对自己的信息进行操作

vhr——先跑起来再说


系统功能设计

vhr——先跑起来再说

员工资料

员工资料包括基本资料和高级资料。

  • 基本资料

    员工编号、员工姓名、性别、出生日期、身份证号、婚姻状况、名族、机关、政治面貌、电子邮箱、联系电话、联系地址、部门、职位、职称、基本工资、聘用形式、最高学历、所属专业、毕业院校、入职日期、在职状态、工号、合同期限。

  • 高级资料

    (1). 奖惩资料:奖惩日期、奖惩分数、奖惩原因。

    (2). 培训资料:培训日期、培训内容。

    (3). 考评资料:考评日期、考评内容、考评结果。

    (4). 调薪资料:调薪日期、调前薪资、调后薪资、调薪原因。

    (5). 调动资料:调动日期、调前部门、调前职位、调动原因、调后部门、调后职位、备注。

    (6). 工资信息:账套名称、工资月份、应发工资、备注。

    (7). 其他信息:管理员可任意备注其他信息。

人事管理

主要用于对员工奖惩、培训、考评、调薪、调动、工资信息的管理。


1.员工资料

即员工的基本资料,显示员工资料,并且可对员工进行模糊查询,即实现员工资料的增删改查。


2.员工奖惩

对员工奖励模块的增删改查的实现。


3.员工培训

对员工培训模块的增删改查的实现。


4.员工好评

对员工好评模块的增删改查的实现。


5.员工调薪

对员工调薪模块的增删改查的实现。


6.员工调动

对员工调动模块的增删改查的实现。


工资管理

实现对员工工资账套管理、员工账套设置、工资表管理、月末处理、工资表查询一系列对员工工资管理的功能。


1 工资账套管理

对员工奖金、基本工资、提成等各项的增删改查。


2 员工账套设置

根据公司账套(即各部门),查看相应的员工的工资信息,并实现其增删功能。


3 工资表管理

集中对同一部门员工工资进行增删改查的功能。


4 月末处理

对该月该部门员工工资进行增删改查的功能。


5 工资表查询

是一种历史记录查询,可查询某员工在某月的工资情况。


统计管理

对员工资料的统一查询管理,包括综合信息统计、员工积分统计、人事信息统、人事记录统计。


1 综合信息统计

根据员工出生月份、转正信息等统一管理。


2 员工积分统计

根据日期查找员工的积分情况。


3 人事信息统计

对员工进行的同一查询管理,可根据性别、工资、职称等查询员工的信息。


4 人事记录统计

对员工积分的统一管理,可根据部门、月份等查询其积分信息。


系统管理

对系统、管理员等一些操作,包括基础信息设置、系统管理、操作员管理、备份恢复数据、初始化数据库。


1 基础信息设置

对部门、职位、职称、奖惩规则和权限组的设置管理,及其个项目的增删改查。


2 系统管理

对系统本身的一些设置。


3 操作日志管理

记录管理员对数据的操作信息。


4 操作员管理

管理员基本信息的管理,及其增删改功能。


5 备份恢复数据

可对员工资料数据进行备份,并在适当的时候还原。


6 初始化数据库

对整个数据库资料初始化的操作。


二,数据库表设计

vhr系统使用者大致可分为两类,一种是系统管理员,另外一种是拥有各种权限的hr员工。

vhr一共有21张表,其中核心的五张表:

hr表

vhr——先跑起来再说

role角色表

vhr——先跑起来再说

用户角色关联表【hr_role】

vhr——先跑起来再说

前面三张表定义了vhr使用的对象及所拥有的权限,

比如hr中第一个id为3的系统管理员对于用户角色关联表中rid为6,而6在role表中对应的是系统管理员权限。


下面两张菜单表和菜单角色关联表定义了角色具体拥有的权限。

vhr——先跑起来再说

vhr——先跑起来再说

这两张表需要结合role表来分析,还是以hr表中id为3的用户举例,在menu_role中rid为3对应的mid为7,7在menu表中的访问内容只有基本资料,那么这个用户可能是个普通员工。以此类推,作者在文档里画了一个图非常形象生动的诠释了这五张表的关系:

vhr——先跑起来再说

剩下的表在往下看功能的时候再慢慢了解吧。

三,拆解项目

登录模块

不知道面对整个项目该如何下手,还好在图书馆借了springboot+vue的书,实战介绍完数据库就到登录模块了。

在没有思路的时候,姑且先从这里开始吧。


在研究登录模块之前,当然是先把程序跑起来先。

clone,然后用idea打开。


第一步就是修改数据库相关配置

首先建库,把vhr.sql在mysql里创建出来。【mysql版本:8.0】

出于个人习惯,

将properties改为yaml,

springboot版本换到了2.1.8,

druid版本换到了1.1.20,顺带配置druid监控。

  • 关于application.yaml
spring:
  datasource:
    #   数据源基本配置
    username: noneplus
    password: noneplus564925080!
    driver-class-name: com.mysql.cj.jdbc.driver
    url: jdbc:mysql://xx.xxx.xxx.xx:3306/vhr?servertimezone=utc
    type: com.alibaba.druid.pool.druiddatasource
    #   druid数据源配置
    initialsize: 5
    minidle: 5
    maxactive: 20
    maxwait: 60000
    timebetweenevictionrunsmillis: 60000
    minevictableidletimemillis: 300000
    validationquery: select 1 from dual
    testwhileidle: true
    testonborrow: false
    testonreturn: false
    poolpreparedstatements: true
    #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,log4j
    maxpoolpreparedstatementperconnectionsize: 20
    useglobaldatasourcestat: true
    connectionproperties: druid.stat.mergesql=true;druid.stat.slowsqlmillis=500
  mail:
    host: smtp.qq.com
    port: 465
    username: 1510161612@qq.com
    password: fhmvfkwxjwmzhhjd
    default-encoding: utf-8
    properties:
      mail:
        debug: true
      stmp:
        socketfactory:
          class: javax.net.ssl.sslsocketfactory
pagehelper:
  helperdialect: mysql
  reasonable: true
  supportmethodsarguments: true
  pagesizezero: false 

server:
  port: 8082

######################################################################################
# 原application.properties
##mysql配置
#  spring.datasource.type=com.alibaba.druid.pool.druiddatasource
#  spring.datasource.url=jdbc:mysql://47.103.6.247:3306/vhr?useunicode=true&characterencoding=utf-8
#  spring.datasource.username=noneplus
#  spring.datasource.password=noneplus564925080!
#  #mybatis日志配置
#  mybatis.config-location=classpath:/mybatis-config.xml
#  #redis配置
#  spring.redis.database=0
#  spring.redis.host=192.168.66.130
#  spring.redis.port=6379
#  spring.redis.password=123@456
#  spring.redis.jedis.pool.max-active=8
#  spring.redis.jedis.pool.max-idle=8
#  spring.redis.jedis.pool.max-wait=-1ms
#  spring.redis.jedis.pool.min-idle=0
#  #缓存配置
#  spring.cache.cache-names=menus_cache
#  spring.cache.redis.time-to-live=1800s
#  #端口配置
#  server.port=8082
#
#  spring.mail.host=smtp.qq.com
#  spring.mail.port=465
#  spring.mail.username=1510161612@qq.com
#  spring.mail.password=fhmvfkwxjwmzhhjd
#  spring.mail.default-encoding=utf-8
#  spring.mail.properties.mail.smtp.socketfactory.class=javax.net.ssl.sslsocketfactory
#  spring.mail.properties.mail.debug=true
  • pom修改的部分
<parent>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-parent</artifactid>
        <version>2.1.8.release</version>
        <relativepath/> <!-- lookup parent from repository -->
    </parent>
    
    <dependency>
            <groupid>com.alibaba</groupid>
            <artifactid>druid</artifactid>
            <version>1.1.20</version>
        </dependency>
  • 配置druidconfig监控

    在config包下新增一个druidconfig

    vhr——先跑起来再说

    package org.sang.config;
    
    
    import com.alibaba.druid.pool.druiddatasource;
    import com.alibaba.druid.support.http.statviewservlet;
    import com.alibaba.druid.support.http.webstatfilter;
    import org.springframework.boot.context.properties.configurationproperties;
    import org.springframework.boot.web.servlet.filterregistrationbean;
    import org.springframework.boot.web.servlet.servletregistrationbean;
    import org.springframework.context.annotation.bean;
    import org.springframework.context.annotation.configuration;
    
    import javax.sql.datasource;
    import java.util.arrays;
    import java.util.hashmap;
    import java.util.map;
    
    @configuration
    public class druidconfig {
    
        //加载application.yaml中的druid配置
        @configurationproperties(prefix = "spring.datasource")
        @bean
        public datasource druid(){
            return  new druiddatasource();
        }
    
        //配置druid的监控
        //1、配置一个管理后台的servlet
        @bean
        public servletregistrationbean statviewservlet(){
            servletregistrationbean bean = new servletregistrationbean(new statviewservlet(), "/druid/*");
            map<string,string> initparams = new hashmap<>();
    
            initparams.put("loginusername","hq");
            initparams.put("loginpassword","564925080");
            initparams.put("allow","");//默认就是允许所有访问
            initparams.put("deny","192.168.15.21");
    
            bean.setinitparameters(initparams);
            return bean;
        }
    
    
        //2、配置一个web监控的filter
        @bean
        public filterregistrationbean webstatfilter(){
            filterregistrationbean bean = new filterregistrationbean();
            bean.setfilter(new webstatfilter());
    
            map<string,string> initparams = new hashmap<>();
            initparams.put("exclusions","*.js,*.css,/druid/*");
    
            bean.setinitparameters(initparams);
    
            bean.seturlpatterns(arrays.aslist("/*"));
    
            return  bean;
        }
    }
  • 配置druid监控,还需要配置log4j依赖

    <dependency>
                <groupid>log4j</groupid>
                <artifactid>log4j</artifactid>
                <version>1.2.17</version>
            </dependency>

    log4j.properties【配置在resource路径下】

    # configure logging for testing: optionally with log file
    log4j.rootlogger=warn, stdout
    # log4j.rootlogger=warn, stdout, logfile
    
    log4j.appender.stdout=org.apache.log4j.consoleappender
    log4j.appender.stdout.layout=org.apache.log4j.patternlayout
    log4j.appender.stdout.layout.conversionpattern=%d %p [%c] - %m%n
    
    log4j.appender.logfile=org.apache.log4j.fileappender
    log4j.appender.logfile.file=target/spring.log
    log4j.appender.logfile.layout=org.apache.log4j.patternlayout
    log4j.appender.logfile.layout.conversionpattern=%d %p [%c] - %m%n

启动项目测试

访问:http://localhost:8082/index.html#/

vhr——先跑起来再说

测试druid监控,访问:http://localhost:8082/druid/

【注:访问druid监控之前需要先登录获取权限,之后再访问druid】

vhr——先跑起来再说


代码参考

【tips:后续会更新代码,为了方便测试,会打下不同的节点】

https://github.com/noneplus/vhr/releases/tag/v1.0

vhr——先跑起来再说