Java项目:40 springboot月度员工绩效考核管理系统009

news2025/1/13 15:41:26
作者主页:舒克日记

简介:Java领域优质创作者、Java项目、学习资料、技术互助

文中获取源码

项目介绍

本系统的功能分为管理员和员工两个角色

管理员的功能有:

(1)个人中心管理功能,添加管理员账号和修改登录密码;

(2)部门信息管理功能,对企业中的部门进行合理安排;

(3)员工信息管理功能,对企业中的员工的基本资料进行维护;

(4)绩效考核管理功能,发布员工的绩效考核,修改和删除不正确的绩效考核;

(5)岗位信息管理功能,对员工的岗位进行分配;

(6)公告信息管理功能,发布公告和管理公告;

(7)绩效绩效指标管理功能,需要考核的指标进行设置。

员工的功能有:

(1)个人资料管理功能,对本人基本信息进行维护;

(2)公告信息管理功能,实现在线查询公告;

(3)绩效考核管理功能,查询自己的考核信息;

(4)绩效指标管理功能,查询考核的指标。

环境要求

1.运行环境:最好是java jdk1.8,我们在这个平台上运行的。其他版本理论上也可以。

2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;

3.tomcat环境:Tomcat7.x,8.X,9.x版本均可

4.硬件环境:windows7/8/10 4G内存以上;或者Mac OS;

5.是否Maven项目:是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven.项目

6.数据库:MySql5.7/8.0等版本均可;

技术栈

运行环境:jdk8 + tomcat9 + mysql5.7 + windows10

服务端技术:Spring Boot+ Mybatis +VUE

使用说明

1.使用Navicati或者其它工具,在mysql中创建对应sq文件名称的数据库,并导入项目的sql文件;

2.使用IDEA/Eclipse/MyEclipse导入项目,修改配置,运行项目;

3.将项目中config-propertiesi配置文件中的数据库配置改为自己的配置,然后运行;

运行指导

idea导入源码空间站顶目教程说明(Vindows版)-ssm篇:

http://mtw.so/5MHvZq

源码地址:http://codegym.top

运行截图

文档截图

image-20240305230741306

项目截图

1

6

5

4

3

2

8

代码

package com.controller;


import com.alibaba.fastjson.JSONObject;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.FuzerenEntity;
import com.entity.view.FuzerenView;
import com.service.DictionaryService;
import com.service.FuzerenService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 负责人
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/fuzeren")
public class FuzerenController {
    private static final Logger logger = LoggerFactory.getLogger(FuzerenController.class);

    @Autowired
    private FuzerenService fuzerenService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;



    //级联表service


    /**
    * 后端列表
    */
    @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"));
        }
        params.put("orderBy","id");
        PageUtils page = fuzerenService.queryPage(params);

        //字典表数据转换
        List<FuzerenView> list =(List<FuzerenView>)page.getList();
        for(FuzerenView c:list){
            //修改对应字典表字段
            dictionaryService.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);
        FuzerenEntity fuzeren = fuzerenService.selectById(id);
        if(fuzeren !=null){
            //entity转view
            FuzerenView view = new FuzerenView();
            BeanUtils.copyProperties( fuzeren , view );//把实体数据重构到view中

            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody FuzerenEntity fuzeren, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,fuzeren:{}",this.getClass().getName(),fuzeren.toString());
        Wrapper<FuzerenEntity> queryWrapper = new EntityWrapper<FuzerenEntity>()
            .eq("username", fuzeren.getUsername())
            .or()
            .eq("fuzeren_phone", fuzeren.getFuzerenPhone())
            .or()
            .eq("fuzeren_id_number", fuzeren.getFuzerenIdNumber());
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        FuzerenEntity fuzerenEntity = fuzerenService.selectOne(queryWrapper);
        if(fuzerenEntity==null){
            fuzeren.setCreateTime(new Date());
            fuzeren.setPassword("123456");
        //  String role = String.valueOf(request.getSession().getAttribute("role"));
        //  if("".equals(role)){
        //      fuzeren.set
        //  }
            fuzerenService.insert(fuzeren);
            return R.ok();
        }else {
            return R.error(511,"账户或者身份证号或者手机号已经被使用");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody FuzerenEntity fuzeren, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,fuzeren:{}",this.getClass().getName(),fuzeren.toString());
        //根据字段查询是否有相同数据
        Wrapper<FuzerenEntity> queryWrapper = new EntityWrapper<FuzerenEntity>()
            .notIn("id",fuzeren.getId())
            .andNew()
            .eq("username", fuzeren.getUsername())
            .or()
            .eq("fuzeren_phone", fuzeren.getFuzerenPhone())
            .or()
            .eq("fuzeren_id_number", fuzeren.getFuzerenIdNumber());
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        FuzerenEntity fuzerenEntity = fuzerenService.selectOne(queryWrapper);
        if("".equals(fuzeren.getFuzerenPhoto()) || "null".equals(fuzeren.getFuzerenPhoto())){
                fuzeren.setFuzerenPhoto(null);
        }
        if(fuzerenEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      fuzeren.set
            //  }
            fuzerenService.updateById(fuzeren);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"账户或者身份证号或者手机号已经被使用");
        }
    }



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

    /**
    * 登录
    */
    @IgnoreAuth
    @RequestMapping(value = "/login")
    public R login(String username, String password, String captcha, HttpServletRequest request) {
        FuzerenEntity fuzeren = fuzerenService.selectOne(new EntityWrapper<FuzerenEntity>().eq("username", username));
        if(fuzeren==null || !fuzeren.getPassword().equals(password)) {
            return R.error("账号或密码不正确");
        }
        //  // 获取监听器中的字典表
        // ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
        // Map<String, Map<Integer, String>> dictionaryMap= (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");
        // Map<Integer, String> role_types = dictionaryMap.get("role_types");
        // role_types.get(yonghu.getRoleTypes());
        String token = tokenService.generateToken(fuzeren.getId(),username, "fuzeren", "负责人");
        R r = R.ok();
        r.put("token", token);
        r.put("role","负责人");
        r.put("username",fuzeren.getFuzerenName());
        r.put("tableName","fuzeren");
        r.put("userId",fuzeren.getId());
        return r;
    }

    /**
    * 注册
    */
    @IgnoreAuth
    @PostMapping(value = "/register")
    public R register(@RequestBody FuzerenEntity fuzeren){
    //    	ValidatorUtils.validateEntity(user);
        if(fuzerenService.selectOne(new EntityWrapper<FuzerenEntity>().eq("username", fuzeren.getUsername()).orNew().eq("fuzeren_phone",fuzeren.getFuzerenPhone()).orNew().eq("fuzeren_id_number",fuzeren.getFuzerenIdNumber())) !=null) {
            return R.error("账户已存在或手机号或身份证号已经被使用");
        }
        fuzeren.setCreateTime(new Date());
        fuzerenService.insert(fuzeren);
        return R.ok();
    }

    /**
     * 重置密码
     */
    @GetMapping(value = "/resetPassword")
    public R resetPassword(Integer  id){
        FuzerenEntity fuzeren = new FuzerenEntity();
        fuzeren.setPassword("123456");
        fuzeren.setId(id);
        fuzerenService.updateById(fuzeren);
        return R.ok();
    }

    /**
    * 获取用户的session用户信息
    */
    @RequestMapping("/session")
    public R getCurrFuzeren(HttpServletRequest request){
        Integer id = (Integer)request.getSession().getAttribute("userId");
        FuzerenEntity fuzeren = fuzerenService.selectById(id);
        return R.ok().put("data", fuzeren);
    }


    /**
    * 退出
    */
    @GetMapping(value = "logout")
    public R logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return R.ok("退出成功");
    }






}


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

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

相关文章

【JavaEE初阶 -- 计算机核心工作机制】

这里写目录标题 1.冯诺依曼体系2.CPU是怎么构成的3.指令表4.CPU执行代码的方式5.CPU小结&#xff1a;6.编程语言和操作系统7. 进程/任务&#xff08;Process/Task&#xff09;8.进程在系统中是如何管理的9. CPU分配 -- 进程调度10.内存分配 -- 内存管理11.进程间通信 1.冯诺依曼…

WordPress建站入门教程:phpMyAdmin4.8.5出现Fatal error: Unparenthesized错误怎么办?

我们在本地电脑使用小皮面板phpstudy安装phpMyAdmin4.8.5成功后&#xff0c;但是点击【管理】功能打开时却出现如下错误&#xff1a; Fatal error: Unparenthesized a ? b : c ? d : e is not supported. Use either (a ? b : c) ? d : e or a ? b : (c ? d : e) in D:\…

SD-WAN专线对本地网络有哪些要求?

SD-WAN&#xff08;软件定义广域网&#xff09;是一种新型的网络架构&#xff0c;通过软件定义的方式&#xff0c;将网络控制平面和数据转发平面进行分离&#xff0c;从而实现网络的灵活性、可编程性和自动化管理。在部署SD-WAN专线时&#xff0c;本地网络需要满足一些要求&…

M2TS转MP4怎么转?超快的方法~

M2TS格式的优点主要体现在对高清视频的完美支持&#xff0c;能够提供极致的视觉体验。然而&#xff0c;由于其相对较大的文件大小&#xff0c;有时可能不太适合网络传输。此外&#xff0c;部分不支持M2TS的播放设备可能导致一定的兼容性问题。 想要播放m2ts视频&#xff0c;可…

C语言内存优化实用指南

一、引言 在C语言编程中&#xff0c;内存管理是一项至关重要的任务。有效的内存优化可以提升程序的性能&#xff0c;减少资源消耗&#xff0c;并防止可能出现的内存泄漏和溢出问题。以下是一些关于C语言内存优化的实用指南。 二、理解内存管理 在C语言中&#xff0c;程序员需…

【思考】crud接口命名规范

写代码时取名字真的是痛苦。 方法命名 1、阿里命名规范 Service/Dao 层命名规约 1&#xff09; 获取单个对象的方法用 get 做前缀。 2&#xff09; 获取多个对象的方法用 list 做前缀。 3&#xff09; 获取统计值的方法用 count 做前缀。 4&#xff09; 插入的方法用 save&am…

如何快速接入 使用Claude 3 opus和Claude 3 sonnet?最简单的Claude 3接入方法

3 月 4 日&#xff0c;被称为 OpenAI 最强竞争对手的大模型公司 Anthropic 宣布推出 Claude3 系列模型&#xff0c;与 Gemini 类似&#xff0c;模型按照大小分为三个&#xff1a;Claude 3 Haiku、Claude 3 Sonnet 和 Claude 3 Opus。Opus 目前在官方发布的测试成绩中全方位超越…

航芯1-Wire安全认证新品上市,防抄板和耗材认证高性价比之选

随着用户产品附加值提升带来的对防抄板的需求&#xff0c;以及电池、医疗耗材、电子配件、IOT领域中对设备认证的需求&#xff0c;上海航芯经过多年的技术积累和对市场的理解&#xff0c;推出了高性价比的ACL16_Axx系列。 1-Wire单总线&#xff1a;小尺寸实现高效传输 ACL16_…

python_读取txt文件绘制多条曲线III

先把文件中指定列&#xff0c;去重提取出来&#xff0c;然后根据指定列去匹配数据&#xff0c;最后完成多条数据的绘图&#xff1b; import matplotlib.pyplot as plt import re from datetime import datetime from pylab import mplmpl.rcParams["font.sans-serif"…

算法沉淀——动态规划之其它背包问题与卡特兰数(leetcode真题剖析)

算法沉淀——动态规划之其它背包问题与卡特兰数 二维费用的背包问题01.一和零02.盈利计划 似包非包组合总和 Ⅳ 卡特兰数不同的二叉搜索树 二维费用的背包问题 01.一和零 题目链接&#xff1a;https://leetcode.cn/problems/ones-and-zeroes/ 给你一个二进制字符串数组 strs…

selenium中ChromeDriver配置,一把过,并且教你伪装

最近正值毕业季&#xff0c;我之前不是写了个问卷星代码嘛&#xff0c;昨晚上有人凌晨1点加我&#xff0c;问我相关内容。 由于我之前C盘重装了一下&#xff0c;导致我很多东西空有其表&#xff0c;实际不能用&#xff0c;借此机会&#xff0c;向大家编写ChromeDriver配置&…

Nginx启动服务

Nginx启动服务 一、启动前置 下载地址 如已安装Docker&#xff0c;下一步拉取Nginx最新的Docker镜像&#xff1a; docker pull nginx:latest查看拉取下来的镜像&#xff1a; docker images二、启动服务 创建Docker容器&#xff1a; docker run --name {projectname} -p 80…

开发充电桩APP提高管理效能

随着社会的发展&#xff0c;电动车已经成为城市交通的重要组成部分&#xff0c;用户所下载的充电类的APP也非常大&#xff0c;而充电桩的建设和利用效率成为了一个亟待解决的问题。在这个背景下&#xff0c;物联网技术的应用成为了提高充电桩效能的关键。虎克技术公司在此领域提…

3Dmax中VR渲染太阳光渲染参数怎么设置?渲染100云渲染助力

我们用3Dmax建模时一些场景会用到太阳光&#xff0c;那么渲染参数是如何设置的呢&#xff1f; 我们一起来看看&#xff0c;直接上图 以上就是详细的参数设置&#xff0c;大家可以用做参考&#xff0c;如果本地渲染慢的朋友可以考虑使用云渲染100 机器多&#xff0c;渲染稳定不…

Qt6.6搭建WebAssembly

1.首先安装python &#xff0c; 链接&#xff1a;https://www.python.org/ 2.下载并安装qt6. 3.克隆emsdk工程 3.1 进入emsdk目录&#xff0c;然后更新emsdk代码 3.2 下载并安装最新的SDK工具。&#xff08;C:\Qt\emsdk>emsdk install --global latest&#xff09; 3.3…

收银系统源码-智慧新零售2.0小助手全新升级!

欢迎后台私信&#xff0c;测试体验&#xff01; 新零售助手是智慧新零售系统的移动管理端&#xff0c;尤其针对商户/门店日常经营必不可少的一环。智慧新零售2.0版小助手也进行了全新升级&#xff0c;使用起来更简单&#xff0c;页面更美观。小助手采用微信小程序登陆&#xf…

QEMU调试——通过获取设备树(dtb文件)查询开发板的外设地址信息

1、适用场景 使用qemu时&#xff0c;想快速知道开发板的地址空间映射情况&#xff0c;特别是某些外设控制器的寄存器基地址 2、查询QEMU支持的开发板 qemu-system-riscv32.exe -M ? 3、获取开发板对应的dtb文件 1、qemu-system-riscv32.exe -M nuclei_evalsoc 2、dumpdtb nucl…

【linuxC语言】系统调用IO文件操作

文章目录 前言一、文件描述符介绍二、系统调用IO API介绍2.1 open函数2.2 close函数2.3 read函数2.4 write函数2.5 lseek函数 三、示例代码总结 前言 在Linux系统中&#xff0c;C语言通过系统调用实现对文件的输入输出&#xff08;I/O&#xff09;操作。系统调用提供了访问操作…

Windows下JDK下载、配置Java环境变量配置及多个JDK使用

Windows下JDK下载、配置Java环境变量配置及多个JDK使用 1. Windows下配置Java-JDK环境变量 1.1 下载Windows版本JDK 下载地址&#xff1a;(https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) 1.2 Windows下安装JDK 双击进行安装 下一步&#xf…

SpringCloud 服务的注册与发现

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第二篇&#xff0c;即使用服务注册和发现的组件&#xff0c;此篇文章会介绍 Eureka、Zookeeper 和 Consu…