|
|
-- 文件名:stored_procedures.sql
|
|
|
-- 这是为员工考勤管理系统编写的存储过程创建脚本
|
|
|
|
|
|
DELIMITER //
|
|
|
|
|
|
-- 1. 存储过程:sp_add_attendance_record
|
|
|
-- 需求:添加员工考勤记录
|
|
|
CREATE PROCEDURE sp_add_attendance_record(
|
|
|
IN p_employee_id VARCHAR(50),
|
|
|
IN p_attendance_date DATE,
|
|
|
IN p_check_in_time DATETIME,
|
|
|
IN p_check_out_time DATETIME,
|
|
|
IN p_working_hours INT,
|
|
|
IN p_overtime_hours INT,
|
|
|
IN p_attendance_status VARCHAR(20)
|
|
|
)
|
|
|
BEGIN
|
|
|
-- 开始事务
|
|
|
START TRANSACTION;
|
|
|
BEGIN
|
|
|
-- 插入考勤记录
|
|
|
INSERT INTO Attendance (EmployeeID, AttendanceDate, CheckInTime, CheckOutTime, WorkingHours, OvertimeHours, AttendanceStatus)
|
|
|
VALUES (p_employee_id, p_attendance_date, p_check_in_time, p_check_out_time, p_working_hours, p_overtime_hours, p_attendance_status);
|
|
|
|
|
|
-- 提交事务
|
|
|
COMMIT;
|
|
|
EXCEPTION
|
|
|
WHEN OTHERS THEN
|
|
|
-- 回滚事务
|
|
|
ROLLBACK;
|
|
|
-- 可以记录日志或返回错误信息
|
|
|
END;
|
|
|
END //
|
|
|
|
|
|
-- 2. 存储过程:sp_approve_leave_request
|
|
|
-- 需求:批准假期申请,修改状态为“已批准”
|
|
|
CREATE PROCEDURE sp_approve_leave_request(
|
|
|
IN p_request_id VARCHAR(50),
|
|
|
IN p_approver_id VARCHAR(50)
|
|
|
)
|
|
|
BEGIN
|
|
|
-- 开始事务
|
|
|
START TRANSACTION;
|
|
|
BEGIN
|
|
|
-- 更新假期申请状态为“已批准”
|
|
|
UPDATE LeaveRequest
|
|
|
SET RequestStatus = '已批准', ApproverID = p_approver_id
|
|
|
WHERE RequestID = p_request_id;
|
|
|
|
|
|
-- 提交事务
|
|
|
COMMIT;
|
|
|
EXCEPTION
|
|
|
WHEN OTHERS THEN
|
|
|
-- 回滚事务
|
|
|
ROLLBACK;
|
|
|
-- 可以记录日志或返回错误信息
|
|
|
END;
|
|
|
END //
|
|
|
|
|
|
-- 3. 存储过程:sp_reject_leave_request
|
|
|
-- 需求:拒绝假期申请,修改状态为“已拒绝”
|
|
|
CREATE PROCEDURE sp_reject_leave_request(
|
|
|
IN p_request_id VARCHAR(50),
|
|
|
IN p_approver_id VARCHAR(50)
|
|
|
)
|
|
|
BEGIN
|
|
|
-- 开始事务
|
|
|
START TRANSACTION;
|
|
|
BEGIN
|
|
|
-- 更新假期申请状态为“已拒绝”
|
|
|
UPDATE LeaveRequest
|
|
|
SET RequestStatus = '已拒绝', ApproverID = p_approver_id
|
|
|
WHERE RequestID = p_request_id;
|
|
|
|
|
|
-- 提交事务
|
|
|
COMMIT;
|
|
|
EXCEPTION
|
|
|
WHEN OTHERS THEN
|
|
|
-- 回滚事务
|
|
|
ROLLBACK;
|
|
|
-- 可以记录日志或返回错误信息
|
|
|
END;
|
|
|
END //
|
|
|
|
|
|
-- 4. 存储过程:sp_update_performance_score
|
|
|
-- 需求:更新员工的绩效考核评分和等级
|
|
|
CREATE PROCEDURE sp_update_performance_score(
|
|
|
IN p_review_id VARCHAR(50),
|
|
|
IN p_review_score INT,
|
|
|
IN p_review_grade VARCHAR(10)
|
|
|
)
|
|
|
BEGIN
|
|
|
-- 开始事务
|
|
|
START TRANSACTION;
|
|
|
BEGIN
|
|
|
-- 更新绩效评分和等级
|
|
|
UPDATE PerformanceAppraisal
|
|
|
SET ReviewScore = p_review_score, ReviewGrade = p_review_grade
|
|
|
WHERE ReviewID = p_review_id;
|
|
|
|
|
|
-- 提交事务
|
|
|
COMMIT;
|
|
|
EXCEPTION
|
|
|
WHEN OTHERS THEN
|
|
|
-- 回滚事务
|
|
|
ROLLBACK;
|
|
|
-- 可以记录日志或返回错误信息
|
|
|
END;
|
|
|
END //
|
|
|
|
|
|
-- 5. 存储过程:sp_generate_monthly_attendance_summary
|
|
|
-- 需求:生成每月考勤总结
|
|
|
CREATE PROCEDURE sp_generate_monthly_attendance_summary(
|
|
|
IN p_month DATE
|
|
|
)
|
|
|
BEGIN
|
|
|
-- 开始事务
|
|
|
START TRANSACTION;
|
|
|
BEGIN
|
|
|
-- 将每月的考勤数据汇总插入考勤总结表
|
|
|
INSERT INTO AttendanceSummary (EmployeeID, Month, PresentDays, LateCount, EarlyLeaveCount, AbsentDays, TotalOvertimeHours)
|
|
|
SELECT
|
|
|
E.EmployeeID,
|
|
|
p_month AS StatisticMonth,
|
|
|
SUM(CASE WHEN A.AttendanceStatus = '正常' THEN 1 ELSE 0 END) AS PresentDays,
|
|
|
SUM(CASE WHEN A.AttendanceStatus = '迟到' THEN 1 ELSE 0 END) AS LateCount,
|
|
|
SUM(CASE WHEN A.AttendanceStatus = '早退' THEN 1 ELSE 0 END) AS EarlyLeaveCount,
|
|
|
SUM(CASE WHEN A.AttendanceStatus = '缺勤' THEN 1 ELSE 0 END) AS AbsentDays,
|
|
|
SUM(A.OvertimeHours) AS TotalOvertimeHours
|
|
|
FROM
|
|
|
Employee E
|
|
|
LEFT JOIN
|
|
|
Attendance A ON E.EmployeeID = A.EmployeeID AND A.AttendanceDate >= DATE_FORMAT(p_month, '%Y-%m-01')
|
|
|
AND A.AttendanceDate < DATE_ADD(DATE_FORMAT(p_month, '%Y-%m-01'), INTERVAL 1 MONTH)
|
|
|
GROUP BY
|
|
|
E.EmployeeID;
|
|
|
|
|
|
-- 提交事务
|
|
|
COMMIT;
|
|
|
EXCEPTION
|
|
|
WHEN OTHERS THEN
|
|
|
-- 回滚事务
|
|
|
ROLLBACK;
|
|
|
-- 可以记录日志或返回错误信息
|
|
|
END;
|
|
|
END //
|
|
|
|
|
|
-- 6. 存储过程:sp_add_employee
|
|
|
-- 需求:新增员工信息
|
|
|
CREATE PROCEDURE sp_add_employee(
|
|
|
IN p_employee_id VARCHAR(50),
|
|
|
IN p_name VARCHAR(100),
|
|
|
IN p_gender VARCHAR(10),
|
|
|
IN p_date_of_birth DATE,
|
|
|
IN p_position VARCHAR(50),
|
|
|
IN p_department_id VARCHAR(50),
|
|
|
IN p_contact_info VARCHAR(20),
|
|
|
IN p_hire_date DATE,
|
|
|
IN p_employment_status VARCHAR(20)
|
|
|
)
|
|
|
BEGIN
|
|
|
-- 开始事务
|
|
|
START TRANSACTION;
|
|
|
BEGIN
|
|
|
-- 向员工表插入新员工记录
|
|
|
INSERT INTO Employee (EmployeeID, Name, Gender, DateOfBirth, Position, DepartmentID, ContactInfo, HireDate, EmploymentStatus)
|
|
|
VALUES (p_employee_id, p_name, p_gender, p_date_of_birth, p_position, p_department_id, p_contact_info, p_hire_date, p_employment_status);
|
|
|
|
|
|
-- 提交事务
|
|
|
COMMIT;
|
|
|
EXCEPTION
|
|
|
WHEN OTHERS THEN
|
|
|
-- 回滚事务
|
|
|
ROLLBACK;
|
|
|
-- 可以记录日志或返回错误信息
|
|
|
END;
|
|
|
END //
|
|
|
|
|
|
DELIMITER ;
|