申请人字段改为经办人,新增字段:经办人部门、人员编码,申请人、当前部门,当前职务,类型(下拉选择:转正、定级、调岗、调级),变更后部门,变更后职务,级别(下拉选择:一至四级),转正日期(date,通过入职时间和试用期计算出转正日期) 在输入人员编码后,根据人员档案自动带出申请人、当前部门、当前职务信息; 通过类型选择: ① 选择“转正”时,表单上调出“试用期(月),转正日期”字段,保存时其字段为必填字段; ② 选择“定级”时,表单上调出“变更后职务,级别”字段,保存时其字段为必填字段; ③ 选择“调级”时,表单上调出“级别”字段,保存时其字段为必填字段; ④ 选择“调岗”时,表单上调出“变更后部门,变更后职务,级别”字段,保存时其字段为必填字段; 通过审批后,变更后的信息回写到人员档案
时间: 2023-11-24 18:05:59 浏览: 101
好的,根据你的要求,我给你提供一个 SQL Server 的表结构设计方案,包含了人员档案表、人员变更请求表和审批记录表,以及一些 INSERT、UPDATE 和 DELETE 语句的示例。具体实现可能还需要根据你的具体情况进行调整。
人员档案表:
```
CREATE TABLE Employee (
EmployeeCode varchar(20) PRIMARY KEY,
EmployeeName varchar(50),
Department varchar(50),
Position varchar(50),
HireDate date
)
```
人员变更请求表:
```
CREATE TABLE ChangeRequest (
RequestId int PRIMARY KEY IDENTITY,
EmployeeCode varchar(20) REFERENCES Employee(EmployeeCode),
Agent varchar(50),
AgentDepartment varchar(50),
RequestType varchar(50),
AfterDepartment varchar(50),
AfterPosition varchar(50),
Level int,
ProbationMonths int,
RegularDate date,
AfterJobCode varchar(50),
AfterJobLevel int,
Status varchar(50) DEFAULT 'Pending'
)
```
审批记录表:
```
CREATE TABLE Approval (
ApprovalId int PRIMARY KEY IDENTITY,
RequestId int REFERENCES ChangeRequest(RequestId),
Approver varchar(50),
ApprovalTime datetime,
Comment varchar(500)
)
```
具体实现中,你可以在人员变更请求表中新增申请人部门、人员编码等字段,并将“申请人”改为“经办人”;新增“当前部门”和“当前职务”字段,用于存储人员档案中的信息;新增“试用期月数”和“转正日期”字段,用于转正类型的请求;新增“变更后职务”和“级别”字段,用于定级类型的请求;新增“变更后部门”,“变更后职务”和“级别”字段,用于调岗类型的请求;新增“级别”字段,用于调级类型的请求。
在输入人员编码后,你可以使用以下 SQL 语句自动填充经办人、当前部门和当前职务:
```
UPDATE ChangeRequest
SET Agent = e.EmployeeName, AgentDepartment = e.Department, AfterPosition = e.Position
FROM ChangeRequest cr
INNER JOIN Employee e ON cr.EmployeeCode = e.EmployeeCode
WHERE cr.EmployeeCode = @employeeCode
```
关于“转正日期”的计算,你可以使用以下 SQL 语句:
```
UPDATE ChangeRequest
SET RegularDate = DATEADD(month, ProbationMonths, HireDate)
FROM ChangeRequest cr
INNER JOIN Employee e ON cr.EmployeeCode = e.EmployeeCode
WHERE cr.RequestType = 'Regular' AND cr.EmployeeCode = @employeeCode
```
在保存请求时,你可以根据请求类型选择必填字段:
```
IF @requestType = 'Regular'
BEGIN
ALTER TABLE ChangeRequest ALTER COLUMN ProbationMonths int NOT NULL
ALTER TABLE ChangeRequest ALTER COLUMN RegularDate date NOT NULL
END
ELSE IF @requestType = 'LevelUp'
BEGIN
ALTER TABLE ChangeRequest ALTER COLUMN AfterPosition varchar(50) NOT NULL
ALTER TABLE ChangeRequest ALTER COLUMN JobLevel int NOT NULL
END
ELSE IF @requestType = 'Transfer'
BEGIN
ALTER TABLE ChangeRequest ALTER COLUMN AfterDepartment varchar(50) NOT NULL
ALTER TABLE ChangeRequest ALTER COLUMN AfterPosition varchar(50) NOT NULL
ALTER TABLE ChangeRequest ALTER COLUMN JobLevel int NOT NULL
END
ELSE IF @requestType = 'PositionChange'
BEGIN
ALTER TABLE ChangeRequest ALTER COLUMN AfterDepartment varchar(50) NOT NULL
ALTER TABLE ChangeRequest ALTER COLUMN AfterPosition varchar(50) NOT NULL
ALTER TABLE ChangeRequest ALTER COLUMN JobLevel int NOT NULL
END
```
当审批通过后,你可以使用以下 SQL 语句将变更后的信息回写到人员档案表中:
```
UPDATE Employee
SET Department = cr.AfterDepartment, Position = cr.AfterPosition
FROM Employee e
INNER JOIN ChangeRequest cr ON e.EmployeeCode = cr.EmployeeCode
WHERE cr.RequestId = @requestId
```
阅读全文