Java编写的大中型企业人力资源管理信息系统设计和开发
前言
????博主介绍:✌全网粉丝10W+,特邀作者、博客专家、新星计划导师、全栈领域优质创作者,博客之星、/华为云/阿里云/等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌????
系统功能设计
具体实现
管理员功能模块实现
系统管理员登录,登录时输入用户名和密码,如图5-1所示。
图5-1 管理员登录界面图
在该系统的管理员登录页面中,关键代码会判断当管理员输入的用户名和密码不为空时,会在用户信息表中进行查找。如果该用户名和密码之前没有被注册过,则注册成功。但如果该用户名之前已经被注册过,那么注册将会失败。可以说,该系统在管理员登录时,会检查用户名和密码是否已被注册,并做出相应的处理。登录主要代码如下:
注册主要代码如下:
部门信息管理的具体操作。具体操作按照实际需求执行,修改或删除,如图5-2所示。
图5-2 部门管理界面图
该功能通过mybatisplus提供的CRUD接口可以去操控数据库中的单个表格,具体流程如下:
(1) 建立表格中对应实体类
(2) 建立实体类对应的DAO
(3) 业务类service
(4) 控制类controller
查询主要代码如下:
@RequestMapping(“/query”)
public R query(PeixunEntity peixun){
EntityWrapper< PeixunEntity> ew = new EntityWrapper< PeixunEntity>();
ew.allEq(MPUtil.allEQMapPre( peixun, “peixun”));
PeixunView peixunView = peixunService.selectView(ew);
return R.ok(“查询培训成功”).put(“data”, peixunView);}
修改主要代码如下:
删除主要代码如下:
在该页面上,您可以填写新员工的各种个人信息,如员工工号、姓名、性别、头像、所属部门、职务、手机号码、个人网址和身份证号码等。另外,如果您需要对现有员工的信息进行修改或删除,也可以在该页面上完成相关操作。如图5-3所示。
图5-3 员工管理界面图
该模块通过调用Mybatis-Plus框架提供的API接口,对数据库进行增删改查操作。这些操作可以让用户方便地管理和操作数据库中的员工信息,提高管理效率和数据操作的准确性。
后端详情主要代码如下:
管理员根据需要对已有员工的工资信息进行修改或删除操作。该页面提供了一个方便的平台,让管理员可以轻松管理公司员工的薪资信息。如图5-4所示。
图5-4 员工工资管理界面图
对于薪酬模块,本质是通过MybatisPlus框架提供的BaseMapper直接操作薪酬表进行CRUD。
对于薪酬的查询主要代码如下:
对于薪酬的删除主要代码如下:
管理员还可以对已有员工的培训信息进行修改或删除操作。该模块为管理员提供了一个方便的平台,可以轻松管理公司员工的培训信息。如图5-5。
图5-5 员工培训管理界面图
员工培训模块同上,本质也是对数据库的增加、修改、删除。这里的实现也是通过持久层框架mybatisplus来实现的。
修改主要代码如下:
删除主要代码如下:
@RequestMapping(“/delete”)
public R delete(@RequestBody Long[] ids){
zhaopinxinxiService.deleteBatchIds(Arrays.asList(ids));return R.ok();}
招聘信息是企业吸引人才和招聘合适人选的重要手段,也是求职者了解和选择职位的重要参考。招聘信息的简述通常是指对招聘信息进行简要概括和描述,以便于求职者快速了解职位的基本信息和要求。如图5-6。
图5-6 招聘信息管理界面图
对于招聘信息的展示,有图片的形式,有对招聘信息的搜索,除此之外还有最常见的增加,修改,删除这里的实现也是通过持久层框架mybatisplus来实现的。
查询主要代码如下:
删除主要代码如下:
员工功能模块实现
员工功能模块的具体代码实现和管理员所拥有的部分功能的代码实现一样,所以其中的具体代码实现逻辑可以参考管理员功能模块实现代码。
工作人员可以根据公告的标题或类别进行快速查询。该页面提供了一个方便的平台,让工作人员可以方便地查看公司发布的公告信息,如图5-7所示。
图5-7 公告信息管理界面图
员工培训管理根据需要对已有员工培训管理进行修改或删除等其他详细操作,如图5-8所示。
图5-8员工培训管理界面图
员工工资管理模块提供了对员工工资进行修改和删除的功能。管理员可以在该模块中输入相应的员工信息和工资信息,进行工资的修改和删除操作。这些操作功能可以帮助管理员更方便地管理公司员工的工资情况,进一步提高管理效率,如图5-9所示。
图5-9 员工工资管理界面图
代码参考
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().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);
}
@Override
public String generateToken(Long userid,String username, String tableName, String role) {
TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
String token = CommonUtil.getRandomString(32);
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.HOUR_OF_DAY, 1);
if(tokenEntity!=null) {
tokenEntity.setToken(token);
tokenEntity.setExpiratedtime(cal.getTime());
this.updateById(tokenEntity);
} else {
this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
}
return token;
}
/**
* 权限(Token)验证
*/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {
public static final String LOGIN_TOKEN_KEY = "Token";
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//支持跨域请求
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
// 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态
if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {
response.setStatus(HttpStatus.OK.value());
return false;
}
IgnoreAuth annotation;
if (handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
} else {
return true;
}
//从header中获取token
String token = request.getHeader(LOGIN_TOKEN_KEY);
/**
* 不需要验证权限的方法直接放过
*/
if(annotation!=null) {
return true;
}
TokenEntity tokenEntity = null;
if(StringUtils.isNotBlank(token)) {
tokenEntity = tokenService.getTokenEntity(token);
}
if(tokenEntity != null) {
request.getSession().setAttribute("userId", tokenEntity.getUserid());
request.getSession().setAttribute("role", tokenEntity.getRole());
request.getSession().setAttribute("tableName", tokenEntity.getTablename());
request.getSession().setAttribute("username", tokenEntity.getUsername());
return true;
}
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
try {
writer = response.getWriter();
writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));
} finally {
if(writer != null){
writer.close();
}
}
// throw new EIException("请先登录", 401);
return false;
}
}
论文参考
推荐阅读
-
35 岁实现财务*,腾讯程序员手握2300万提前退休?-1000万房产、1000万腾讯股票、加上300万的现金,一共2300万的财产。有网友算了一笔账,假设1000万的房产用于自住,剩下1300万资产按照平均税后20-50万不等进行计算,大约花上26-60年左右的时间才能赚到这笔钱。也就是说,普通人可能奋斗一辈子,才能赚到这笔钱。在很多人还在为中年危机而惶惶不可终日的时候,有的人的35岁,就已经安全着陆,试问哪个打工人不羡慕?但问题是有这样财富积累必然有像样的实力做靠山。没有人可以不劳而获。 看到这里,肯定有人说,那么对于普通人来说,卷可能真就成了唯一的出路。但是卷也有轻松的卷,“偷懒”的卷法,对于程序员而言,刨除掉一时无法改掉的开会传统占用的大部分时间,如何把有限的时间和精力放在真正重要的架构设计、需求设计上,而不是重复的造*,编码、改bug、手动测试。因此在科技改变生活的今天,学会使用AI工具成为程序员们的必备技能。 以全栈式全自动的软件开发工具飞算SoFlu软件机器人为例,作为全球首款面向微服务架构设计和最佳实践的软件机器人,SoFlu软件机器人改变了原来手工编码的作业模式,通过可视化拖拽方式以及参数配置就能实现等同于编写复杂代码的业务逻辑,在设计业务逻辑时就完成了微服务应用开发,做到“业务即图,图即代码”,实现“软件开发,十倍提效”。 而作为飞算SoFlu软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述Java函数需求,实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA,或一键导入Java全自动开发工具函数库。 FuncGPT(慧函数)具有五大核心能力: ● 自然语言:通过自然语言即可生成函数,降低软件开发门槛。 ● 秒级函数开发:全自动秒级开发函数,秒级完成,效率千倍提升。 ● 一站式函数开发应用:函数生成即可直接应用,效率、安全有保障。 ● 质量可靠:生成的函数代码符合业界规范、具备良好的可读性,符合最优解。 ● 灵活生成:可以根据开发人员的具体需求生成并支持调整和修改。 以“将文件流转换为File对象”这个需求为例,以下是FuncGPT(慧函数)秒级生成的代码: / 类名:FileConverter // 函数名:convertStreamToFile // 函数功能:将文件流转换为File对象 // POM依赖包:无 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class FileConverter { /** * 将文件流转换为File对象 * @param inputStream 文件流 * @param filePath 文件路径 * @param fileName 文件名 * @return 转换后的File对象 * @throws IOException 如果发生I/O异常 */ public static File convertStreamToFile(InputStream inputStream, String filePath, String fileName) throws IOException { File file = new File(filePath + File.separator + fileName); // 创建File对象 try (FileOutputStream outputStream = new FileOutputStream(file)) { // 创建文件输出流 byte buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { // 从文件流读取数据并写入文件 outputStream.write(buffer, 0, bytesRead); } } return file; // 返回转换后的File对象 } } // 函数示例 // 将文件流转换为File对象示例 // 入参:inputStream,文件流 // 入参:filePath,文件路径 // 入参:fileName,文件名 // 出参:file,转换后的File对象 // 调用示例: // InputStream inputStream = new FileInputStream("example.txt"); // String filePath = "C:\\Users\\User\\Documents"; // String fileName = "example.txt"; // File file = FileConverter.convertStreamToFile(inputStream, filePath, fileName); // System.out.println(file.getAbsolutePath); // 输出结果:例如,将文件流转换为File对象后,文件的绝对路径为:C:\Users\User\Documents\example.txt // 则输出结果为:C:\Users\User\Documents\example.txt 通过分析,不难发现以上代码:
-
网络魔术的设计机制和原理 - 如何开发 Java 爬虫
-
玩转Java底层:JMX详解 - jconsole与自定义MBean监控工具的实际应用与区别" 在日常JVM调优中,我们熟知的jconsole工具通过JMX包装的bean以图形化形式展示管理数据,而像jstat和jmap这类内建监控工具则由JVM直接支持。本文将以jconsole为例,深入讲解其实质——基于JMX的MBean功能,包括可视化界面上的bean属性查看和操作调用。 MBeans在jconsole中的体现是那些可观察的组件属性和方法,如上图所示,通过名为"Verbose"的属性能看到其值为false,同时还能直接操作该bean的方法,例如"closeJerryMBean"。 尽管jconsole给我们提供了直观的可视化界面,但请注意,这里的MBean并非固定不变,开发者可根据JMX提供的接口将自己的自定义bean展示到jconsole。以下步骤展示了如何创建并注册一个名为"StudyJavaMBean"的自定义MBean: 1. 首先定义接口`StudyJavaMBean`,接口需遵循MBean规范,即后缀为"MBean"且包含getter方法代表属性,如`getApplicationName`,和无返回值的setter方法代表操作,如`closeJerryMBean`。 ```java public interface StudyJavaMBean { String getApplicationName(); void closeJerryMBean(); } ``` 2. 编写接口的实现类`StudyJavaMBeanImpl`,实现接口中的方法: ```java public class StudyJavaMBeanImpl implements StudyJavaMBean { @Override public String getApplicationName() { return "每天学Java"; } @Override public void closeJerryMBean() { System.out.println("关闭Jerry应用"); } } ``` 3. 在代码中注册自定义MBean,涉及的关键步骤包括: - 获取平台MBeanServer - 定义ObjectName,指定唯一的MBean标识符 - 注册MBean到服务器 - 启动RMI连接器服务,以便jconsole能够访问 ```java public void registerMBean() throws Exception { // ... 具体实现省略 ... } ``` 实际运行注册后的MBean,您将在jconsole中发现并查看自定义bean的属性和调用相关方法。然而,这种方式相较于传统的属性/日志查看和HTTP接口,实用性相对有限,可能存在潜在的安全风险。但不可否认的是,JMX及其MBean机制对于获取操作系统信息、内存状态等关键性能指标仍然具有重要价值。例如: 1. **获取操作系统信息**:通过JMX MBean,可以直接获取到诸如CPU使用率、操作系统版本等系统级信息,这对于资源管理和优化工作具有显著帮助。
-
老年人公寓管理系统的开发(2024年毕业设计) - 使用SSM、Java、Node.js、Python和PHP
-
使用JAVA和SSM开发在线报名系统的详细设计与实现,附带源代码
-
使用JAVA和SSM开发智能旅行路线规划系统的设计与实现(附带源代码)
-
Java编写的大中型企业人力资源管理信息系统设计和开发