一、个人简介
- 💖💖作者:计算机编程果茶熊
- 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
- 💛💛想说的话:感谢大家的关注与支持!
- 💜💜
- 网站实战项目
- 安卓/小程序实战项目
- 大数据实战项目
- 计算机毕业设计选题
- 💕💕文末获取源码联系计算机编程果茶熊
二、系统介绍
- 开发语言:Java+Python
- 数据库:MySQL
- 系统架构:B/S
- 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django
- 前端:Vue+HTML+CSS+JavaScript+jQuery
- 基于SpringBoot的计算机教育培训公司管理系统是一套完整的企业级管理解决方案,采用当前主流的Java开发技术栈,包括Spring Boot框架整合Spring、SpringMVC和Mybatis实现后端业务逻辑处理,前端采用Vue.js结合ElementUI组件库构建现代化的用户界面,数据存储使用MySQL数据库,整体采用B/S架构模式确保系统的跨平台兼容性和易维护性。系统功能涵盖了教育培训公司运营管理的各个核心环节,包括用户管理模块负责系统用户权限控制,员工管理和部门信息管理实现人力资源基础数据维护,员工考勤管理、考勤统计管理、绩效评估管理和员工薪资管理构成完整的人力资源管理体系,员工请假管理提供便捷的审批流程,培训类型管理、培训信息管理和培训反馈管理形成培训业务的闭环管理,岗位类型管理、招聘信息管理和简历投递管理支撑人才招聘业务,同时配备系统管理、系统首页和个人中心等基础功能模块,整个系统设计合理、功能完善,能够有效提升教育培训公司的管理效率和服务质量,为企业数字化转型提供强有力的技术支撑。
三、基于SpringBoot的计算机教育培训公司管理系统-视频解说
毕设不知道怎么选题?这套SpringBoot计算机教育培训公司管理系统帮你解决
四、基于SpringBoot的计算机教育培训公司管理系统-功能展示
五、基于SpringBoot的计算机教育培训公司管理系统-代码展示
// 1. 员工考勤管理核心业务处理
@Service
public class AttendanceService {
@Autowired
private AttendanceMapper attendanceMapper;
@Autowired
private EmployeeMapper employeeMapper;
// 员工打卡签到/签退核心业务逻辑
public Result clockInOut(Long employeeId, String clockType) {
Employee employee = employeeMapper.selectById(employeeId);
if (employee == null) {
return Result.error("员工不存在");
}
Date currentTime = new Date();
String today = new SimpleDateFormat("yyyy-MM-dd").format(currentTime);
// 查询当日考勤记录
QueryWrapper<Attendance> wrapper = new QueryWrapper<>();
wrapper.eq("employee_id", employeeId)
.eq("attendance_date", today);
Attendance attendance = attendanceMapper.selectOne(wrapper);
if (attendance == null) {
// 首次打卡,创建新记录
attendance = new Attendance();
attendance.setEmployeeId(employeeId);
attendance.setEmployeeName(employee.getName());
attendance.setDepartmentId(employee.getDepartmentId());
attendance.setAttendanceDate(today);
}
if ("IN".equals(clockType)) {
if (attendance.getClockInTime() != null) {
return Result.error("今日已签到,请勿重复操作");
}
attendance.setClockInTime(new SimpleDateFormat("HH:mm:ss").format(currentTime));
// 判断是否迟到(以9:00为准时标准)
Calendar standardTime = Calendar.getInstance();
standardTime.set(Calendar.HOUR_OF_DAY, 9);
standardTime.set(Calendar.MINUTE, 0);
standardTime.set(Calendar.SECOND, 0);
if (currentTime.after(standardTime.getTime())) {
attendance.setLateMinutes((int)((currentTime.getTime() - standardTime.getTimeInMillis()) / 60000));
attendance.setStatus("迟到");
} else {
attendance.setLateMinutes(0);
attendance.setStatus("正常");
}
} else if ("OUT".equals(clockType)) {
if (attendance.getClockOutTime() != null) {
return Result.error("今日已签退,请勿重复操作");
}
if (attendance.getClockInTime() == null) {
return Result.error("请先签到再签退");
}
attendance.setClockOutTime(new SimpleDateFormat("HH:mm:ss").format(currentTime));
// 计算工作时长
try {
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
Date clockIn = timeFormat.parse(attendance.getClockInTime());
Date clockOut = timeFormat.parse(attendance.getClockOutTime());
long workMinutes = (clockOut.getTime() - clockIn.getTime()) / 60000;
attendance.setWorkHours(workMinutes / 60.0);
// 判断是否早退(以18:00为下班标准)
Calendar endTime = Calendar.getInstance();
endTime.set(Calendar.HOUR_OF_DAY, 18);
endTime.set(Calendar.MINUTE, 0);
endTime.set(Calendar.SECOND, 0);
if (currentTime.before(endTime.getTime())) {
attendance.setEarlyMinutes((int)((endTime.getTimeInMillis() - currentTime.getTime()) / 60000));
attendance.setStatus("早退");
}
} catch (ParseException e) {
return Result.error("时间计算异常");
}
}
if (attendance.getId() == null) {
attendanceMapper.insert(attendance);
} else {
attendanceMapper.updateById(attendance);
}
return Result.success("打卡成功");
}
// 2. 绩效评估管理核心业务处理
@Service
public class PerformanceService {
@Autowired
private PerformanceMapper performanceMapper;
@Autowired
private EmployeeMapper employeeMapper;
@Autowired
private AttendanceMapper attendanceMapper;
// 绩效评估计算和保存核心业务逻辑
public Result calculatePerformance(Long employeeId, String evaluationPeriod, Double workQuality,
Double workEfficiency, Double teamwork, Double innovation) {
Employee employee = employeeMapper.selectById(employeeId);
if (employee == null) {
return Result.error("员工不存在");
}
// 检查是否已存在该期间的绩效评估
QueryWrapper<Performance> wrapper = new QueryWrapper<>();
wrapper.eq("employee_id", employeeId)
.eq("evaluation_period", evaluationPeriod);
Performance existPerformance = performanceMapper.selectOne(wrapper);
if (existPerformance != null) {
return Result.error("该评估期间已存在绩效记录,请修改而非新增");
}
Performance performance = new Performance();
performance.setEmployeeId(employeeId);
performance.setEmployeeName(employee.getName());
performance.setDepartmentId(employee.getDepartmentId());
performance.setEvaluationPeriod(evaluationPeriod);
performance.setWorkQuality(workQuality);
performance.setWorkEfficiency(workEfficiency);
performance.setTeamwork(teamwork);
performance.setInnovation(innovation);
// 计算考勤得分(基于该期间的出勤情况)
String[] periods = evaluationPeriod.split("_");
String startDate = periods[0];
String endDate = periods[1];
QueryWrapper<Attendance> attendanceWrapper = new QueryWrapper<>();
attendanceWrapper.eq("employee_id", employeeId)
.between("attendance_date", startDate, endDate);
List<Attendance> attendanceList = attendanceMapper.selectList(attendanceWrapper);
double attendanceScore = 100.0;
int totalLateMinutes = 0;
int totalEarlyMinutes = 0;
int absentDays = 0;
for (Attendance att : attendanceList) {
if (att.getStatus() != null) {
if ("迟到".equals(att.getStatus())) {
totalLateMinutes += att.getLateMinutes();
} else if ("早退".equals(att.getStatus())) {
totalEarlyMinutes += att.getEarlyMinutes();
} else if ("缺勤".equals(att.getStatus())) {
absentDays++;
}
}
}
// 考勤扣分规则:迟到每分钟扣0.5分,早退每分钟扣0.8分,缺勤每天扣5分
attendanceScore = attendanceScore - (totalLateMinutes * 0.5) - (totalEarlyMinutes * 0.8) - (absentDays * 5);
attendanceScore = Math.max(attendanceScore, 0);
performance.setAttendanceScore(attendanceScore);
// 计算综合得分(各项权重:工作质量30%,工作效率25%,团队合作20%,创新能力15%,考勤10%)
double totalScore = workQuality * 0.3 + workEfficiency * 0.25 + teamwork * 0.2 +
innovation * 0.15 + attendanceScore * 0.1;
performance.setTotalScore(totalScore);
// 根据总分确定绩效等级
String performanceLevel;
if (totalScore >= 90) {
performanceLevel = "优秀";
} else if (totalScore >= 80) {
performanceLevel = "良好";
} else if (totalScore >= 70) {
performanceLevel = "合格";
} else if (totalScore >= 60) {
performanceLevel = "待改进";
} else {
performanceLevel = "不合格";
}
performance.setPerformanceLevel(performanceLevel);
// 生成评估建议
StringBuilder suggestions = new StringBuilder();
if (workQuality < 80) {
suggestions.append("建议加强工作质量管控,提升专业技能水平;");
}
if (workEfficiency < 80) {
suggestions.append("建议优化工作流程,提高工作效率;");
}
if (teamwork < 80) {
suggestions.append("建议加强团队协作意识,提升沟通能力;");
}
if (innovation < 80) {
suggestions.append("建议培养创新思维,主动提出改进建议;");
}
if (attendanceScore < 90) {
suggestions.append("建议严格遵守考勤制度,提高出勤质量;");
}
if (suggestions.length() == 0) {
suggestions.append("表现优异,继续保持!");
}
performance.setSuggestions(suggestions.toString());
performance.setCreateTime(new Date());
performanceMapper.insert(performance);
return Result.success("绩效评估完成");
}
// 3. 培训信息管理核心业务处理
@Service
public class TrainingService {
@Autowired
private TrainingMapper trainingMapper;
@Autowired
private TrainingRegistrationMapper registrationMapper;
@Autowired
private EmployeeMapper employeeMapper;
// 培训报名和名额管理核心业务逻辑
public Result registerTraining(Long trainingId, Long employeeId) {
Training training = trainingMapper.selectById(trainingId);
if (training == null) {
return Result.error("培训信息不存在");
}
Employee employee = employeeMapper.selectById(employeeId);
if (employee == null) {
return Result.error("员工信息不存在");
}
// 检查培训状态
Date currentDate = new Date();
if (training.getRegistrationEndDate().before(currentDate)) {
return Result.error("培训报名已截止");
}
if (training.getStartDate().before(currentDate)) {
return Result.error("培训已开始,无法报名");
}
if (!"招生中".equals(training.getStatus())) {
return Result.error("培训状态异常,暂不接受报名");
}
// 检查是否已报名
QueryWrapper<TrainingRegistration> wrapper = new QueryWrapper<>();
wrapper.eq("training_id", trainingId)
.eq("employee_id", employeeId);
TrainingRegistration existRegistration = registrationMapper.selectOne(wrapper);
if (existRegistration != null) {
return Result.error("您已报名该培训,请勿重复报名");
}
// 检查名额限制
QueryWrapper<TrainingRegistration> countWrapper = new QueryWrapper<>();
countWrapper.eq("training_id", trainingId);
int currentRegistrations = registrationMapper.selectCount(countWrapper);
if (currentRegistrations >= training.getMaxParticipants()) {
return Result.error("培训名额已满,报名失败");
}
// 检查部门限制(如果有)
if (training.getDepartmentLimit() != null && !training.getDepartmentLimit().isEmpty()) {
String[] allowedDepts = training.getDepartmentLimit().split(",");
boolean deptAllowed = false;
for (String dept : allowedDepts) {
if (dept.trim().equals(employee.getDepartmentId().toString())) {
deptAllowed = true;
break;
}
}
if (!deptAllowed) {
return Result.error("您所在部门不在此培训的参与范围内");
}
}
// 检查职级要求(如果有)
if (training.getPositionRequirement() != null && !training.getPositionRequirement().isEmpty()) {
if (!training.getPositionRequirement().contains(employee.getPosition())) {
return Result.error("您的职级不符合此培训的参与要求");
}
}
// 创建报名记录
TrainingRegistration registration = new TrainingRegistration();
registration.setTrainingId(trainingId);
registration.setEmployeeId(employeeId);
registration.setEmployeeName(employee.getName());
registration.setDepartmentId(employee.getDepartmentId());
registration.setPosition(employee.getPosition());
registration.setRegistrationTime(currentDate);
registration.setStatus("已报名");
registrationMapper.insert(registration);
// 更新培训的当前报名人数
training.setCurrentParticipants(currentRegistrations + 1);
// 检查是否已满员,如果满员则更新培训状态
if (training.getCurrentParticipants() >= training.getMaxParticipants()) {
training.setStatus("名额已满");
}
trainingMapper.updateById(training);
// 发送报名成功通知(这里可以集成消息推送或邮件通知)
String message = String.format("恭喜您成功报名培训《%s》,培训时间:%s至%s,培训地点:%s,请准时参加!",
training.getTrainingName(),
new SimpleDateFormat("yyyy-MM-dd HH:mm").format(training.getStartDate()),
new SimpleDateFormat("yyyy-MM-dd HH:mm").format(training.getEndDate()),
training.getTrainingLocation());
return Result.success("报名成功!" + message);
}
}
六、基于SpringBoot的计算机教育培训公司管理系统-文档展示
七、END
💕💕文末获取源码联系计算机编程果茶熊