数据模型

User

文件:models/user.go

字段类型说明
IDuint主键,自增
Usernamestring用户名,非空,唯一索引
Passwordstring密码(bcrypt 哈希),JSON 不输出
Statusstring状态,非空,默认 "active",最长 20:active/disabled
Roles[]Role角色,多对多 user_roles
CreatedAttime.Time创建时间
UpdatedAttime.Time更新时间

Role

文件:models/role.go

字段类型说明
IDuint主键,自增
Namestring角色名,唯一索引
Descriptionstring角色描述

Department

文件:models/department.go

字段类型说明
IDuint主键,自增
Namestring部门名称,非空,唯一
Descriptionstring部门描述,最长 500
LeaderID*uint部门负责人 Employee ID,索引,null 表示暂无负责人
Leader*Employee关联的负责人员工对象(外键 LeaderID)
ParentID*uint父部门 ID,索引,null 表示顶级部门
Parent*Department关联的父部门对象(外键 ParentID)
Children[]Department关联的子部门列表(外键 ParentID)
CreatedAttime.Time创建时间
UpdatedAttime.Time更新时间
CreatedBystring创建人,最长 100
UpdatedBystring更新人,最长 100

DeptTreeNode(树形响应结构):

字段类型说明
IDuint部门 ID
Namestring部门名称
Descriptionstring部门描述
LeaderID*uint部门负责人 Employee ID
LeaderNamestring负责人姓名(仅树形响应)
ParentID*uint父部门 ID
Children[]DeptTreeNode子部门列表

Employee

文件:models/employee.go

字段类型说明
IDuint主键,自增
UserID*uint关联用户 ID,唯一索引,null 表示未关联登录账号
User*User关联的用户对象(外键 UserID)
Namestring姓名,非空
Emailstring邮箱,非空,唯一
Phonestring手机号,最长 20
IDNumberstring身份证号,最长 18,数据库列名 id_number
DeptIDuint所属部门 ID,外键
DepartmentDepartment关联的部门对象
Statusstring状态,默认 "active"
WorkStartTimestring上班时间,默认 "09:00",最长 5
WorkEndTimestring下班时间,默认 "18:00",最长 5
CreatedAttime.Time创建时间
UpdatedAttime.Time更新时间
CreatedBystring创建人,最长 100
UpdatedBystring更新人,最长 100

表关系

Department 1 ←→ N Department(自引用,parent_id 外键)
Department 1 ←→ N Employee
User 1 ←→ 0..1 Employee(user_id 外键)
Employee 1 ←→ 1 SalaryStructure
Employee 1 ←→ N SalaryRecord
Employee 1 ←→ N AttendanceRecord
Employee 1 ←→ N AttendanceSummary
Employee 1 ←→ N LeaveRequest

Department 通过 ParentID 自引用建立层级树。Employee 通过 DeptID 外键关联 Department,GORM 查询时用 Preload 预加载。

SalaryStructure

文件:models/salary.go

字段类型说明
IDuint主键,自增
EmployeeIDuint员工 ID,非空,唯一索引
BaseSalaryfloat64基本工资,非空,默认 0
PositionAllowancefloat64岗位津贴,非空,默认 0
PerformanceFactorfloat64绩效系数,非空,默认 1
CreatedAttime.Time创建时间
UpdatedAttime.Time更新时间
CreatedBystring创建人,最长 100
UpdatedBystring更新人,最长 100

SalaryRecord

文件:models/salary.go

字段类型说明
IDuint主键,自增
EmployeeIDuint员工 ID,非空,索引
StructureIDuint薪资结构 ID(快照),非空
Yearint年份,非空
Monthint月份,非空
BaseSalaryfloat64生成时的基本工资(快照)
PositionAllowancefloat64生成时的岗位津贴(快照)
PerformanceFactorfloat64本月绩效系数
ActualSalaryfloat64实发薪资 = (基本工资 + 岗位津贴) × 绩效系数
Statusstring状态,非空,默认 draft:draft/pending/approved/rejected/paid
ReviewedBystring审核人,最长 100
ReviewedAt*time.Time审核时间
PaidBystring发放人,最长 100
PaidAt*time.Time发放时间
CreatedAttime.Time创建时间
CreatedBystring创建人,最长 100

AttendanceRecord

文件:models/attendance.go

字段类型说明
IDuint主键,自增
EmployeeIDuint员工 ID,非空,索引
Datetime.Time日期(date 类型)
ClockIn*time.Time上班打卡时间
ClockOut*time.Time下班打卡时间
CreatedBystring创建人,最长 100
CreatedAttime.Time创建时间

AttendanceSummary

文件:models/attendance.go

字段类型说明
IDuint主键,自增
EmployeeIDuint员工 ID,非空,索引
Yearint年份,非空
Monthint月份,非空
NormalDaysint正常天数,默认 0
LateDaysint迟到天数,默认 0
EarlyDaysint早退天数,默认 0
AbsentDaysint缺勤天数,默认 0
CreatedAttime.Time创建时间

LeaveRequest

文件:models/leave.go

字段类型说明
IDuint主键,自增
EmployeeIDuint员工 ID,非空,索引
Typestring请假类型,最长 20:annual/sick/personal
StartDatetime.Time开始日期(date 类型)
EndDatetime.Time结束日期(date 类型)
Reasonstring请假原因,最长 500
Statusstring状态,默认 pending:pending/approved/rejected
ReviewedBystring审批人,最长 100
ReviewedAt*time.Time审批时间
CreatedBystring创建人,最长 100
CreatedAttime.Time创建时间

AuditLog

文件:models/audit_log.go

字段类型说明
IDuint主键,自增
Operatorstring操作人,最长 64,索引
Actionstring操作类型,最长 32,索引
EntityTypestring实体类型,最长 64,索引
EntityIDuint实体 ID,索引
Changesstring变更内容,jsonb
IPAddressstring操作 IP,最长 45
CreatedAttime.Time操作时间,索引