申请人字段改为经办人,新增字段:经办人部门、人员编码,申请人、当前部门,当前职务,类型(下拉选择:转正、定级、调岗、调级),变更后部门,变更后职务,级别(下拉选择:一至四级),转正日期(date,通过入职时间和试用期计算出转正日期) 在输入人员编码后,根据人员档案自动带出申请人、当前部门、当前职务信息; 通过类型选择: ① 选择“转正”时,表单上调出“试用期(月),转正日期”字段,保存时其字段为必填字段; ② 选择“定级”时,表单上调出“变更后职务,级别”字段,保存时其字段为必填字段; ③ 选择“调级”时,表单上调出“级别”字段,保存时其字段为必填字段; ④ 选择“调岗”时,表单上调出“变更后部门,变更后职务,级别”字段,保存时其字段为必填字段; 通过审批后,变更后的信息回写到人员档案
时间: 2023-11-24 17:05:59 浏览: 39
好的,根据您提供的需求,我编写了以下的存储过程,希望能够帮到您:
```
CREATE PROCEDURE [dbo].[usp_UpdateEmployeeInfo]
@EmpCode VARCHAR(20), -- 输入人员编码
@Handler VARCHAR(20), -- 经办人
@HandlerDept VARCHAR(50), -- 经办人部门
@HandlerCode VARCHAR(20), -- 经办人人员编码
@Type VARCHAR(10), -- 类型
@AfterDept VARCHAR(50) = NULL, -- 变更后部门
@AfterPosition VARCHAR(50) = NULL, -- 变更后职务
@Level INT = NULL, -- 级别
@ProbationMonths INT = NULL, -- 试用期(月)
@ConfirmDate DATE = NULL, -- 转正日期
@PositionLevel INT = NULL -- 职务级别
AS
BEGIN
DECLARE @EmpID INT, @CurDept VARCHAR(50), @CurPosition VARCHAR(50), @CurLevel INT
-- 获取当前员工信息
SELECT @EmpID = EmpID, @CurDept = Department, @CurPosition = Position, @CurLevel = Level
FROM Employee
WHERE EmpCode = @EmpCode
IF @EmpID IS NULL
BEGIN
RAISERROR('员工不存在!', 16, 1)
RETURN
END
-- 更新员工信息
UPDATE Employee
SET Handler = @Handler,
HandlerDept = @HandlerDept,
HandlerCode = @HandlerCode,
Type = @Type,
AfterDept = @AfterDept,
AfterPosition = @AfterPosition,
Level = @Level,
ProbationMonths = @ProbationMonths,
ConfirmDate = @ConfirmDate,
PositionLevel = @PositionLevel
WHERE EmpCode = @EmpCode
-- 回写员工档案
UPDATE EmployeeArchive
SET Department = @AfterDept,
Position = @AfterPosition,
Level = @Level
WHERE EmpID = @EmpID
-- 记录员工变更历史
INSERT INTO EmployeeHistory (EmpID, Handler, HandlerDept, HandlerCode, Type, CurDept, CurPosition, CurLevel, AfterDept, AfterPosition, AfterLevel, ProbationMonths, ConfirmDate, PositionLevel, CreateTime)
VALUES (@EmpID, @Handler, @HandlerDept, @HandlerCode, @Type, @CurDept, @CurPosition, @CurLevel, @AfterDept, @AfterPosition, @Level, @ProbationMonths, @ConfirmDate, @PositionLevel, GETDATE())
-- 审批通过时才更新员工信息
IF @Type = '转正' AND @ConfirmDate IS NOT NULL AND DATEDIFF(MONTH, GETDATE(), @ConfirmDate) >= @ProbationMonths
BEGIN
UPDATE Employee
SET Department = @AfterDept,
Position = @AfterPosition,
Level = @Level
WHERE EmpCode = @EmpCode
-- 回写员工档案
UPDATE EmployeeArchive
SET Department = @AfterDept,
Position = @AfterPosition,
Level = @Level
WHERE EmpID = @EmpID
END
END
```
该存储过程的主要功能是更新员工信息,并在审批通过时更新员工档案和员工变更历史。具体实现如下:
1. 首先根据输入的人员编码查询员工信息,如果员工不存在则返回错误信息;
2. 根据输入的参数更新员工信息,并回写员工档案;
3. 插入员工变更历史记录;
4. 如果申请类型为“转正”,并且转正日期不为空且试用期满,则更新员工信息和员工档案。
您可以根据实际情况进行修改和完善。希望对您有所帮助。