更新若干事项
This commit is contained in:
1 parent
68cdaf38fa
commit
9898962836
30 files changed
+7715
No files matched your search
@@ -190,6 +190,14 @@ func Init(_ string) {
|
||||
new(BackendScheduleReminderSendLog),
|
||||
|
||||
new(OaSchedule),
|
||||
// 平台端排班模板(docs/sql/create_platform_sched_template.sql)
|
||||
new(PlatformSchedTpl),
|
||||
new(PlatformSchedTplDay),
|
||||
// 工作排班(docs/sql/create_oa_scheduling.sql)
|
||||
new(OaShift),
|
||||
new(OaSchedulePlan),
|
||||
new(OaScheduleEntry),
|
||||
new(OaScheduleChange),
|
||||
new(OaHoliday),
|
||||
new(OaNotice),
|
||||
// 工作日报(docs/sql/create_oa_dailyreport.sql)
|
||||
|
||||
@@ -0,0 +1,176 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// OaShift OA 工作排班-班次定义表 yz_backend_oa_shift
|
||||
//
|
||||
// 班次是排班的最小单位,描述一段可被复用的工作时间(如早班 09:00-18:00)。
|
||||
// 字段中的时间均为 "HH:mm" 字符串,休息时段可为空表示不区分午休。
|
||||
type OaShift struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
Tid int `orm:"column(tid)" json:"tid"`
|
||||
Name string `orm:"column(name);size(50)" json:"name"`
|
||||
ShortName string `orm:"column(short_name);size(20);default()" json:"short_name"`
|
||||
Color string `orm:"column(color);size(20);default(#409EFF)" json:"color"`
|
||||
WorkStart string `orm:"column(work_start);size(8);default()" json:"work_start"`
|
||||
WorkEnd string `orm:"column(work_end);size(8);default()" json:"work_end"`
|
||||
RestStart string `orm:"column(rest_start);size(8);default()" json:"rest_start"`
|
||||
RestEnd string `orm:"column(rest_end);size(8);default()" json:"rest_end"`
|
||||
WorkHours float64 `orm:"column(work_hours);type(decimal);digits(5);decimals(2);default(0)" json:"work_hours"`
|
||||
IsDefault int8 `orm:"column(is_default);default(0)" json:"is_default"`
|
||||
Status int8 `orm:"column(status);default(1)" json:"status"`
|
||||
Sort int `orm:"column(sort);default(0)" json:"sort"`
|
||||
Remark *string `orm:"column(remark);size(255);null" json:"remark"`
|
||||
IsDeleted int8 `orm:"column(is_deleted);default(0)" json:"is_deleted"`
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
UpdateTime *time.Time `orm:"column(update_time);auto_now;type(datetime);null" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||||
}
|
||||
|
||||
func (m *OaShift) TableName() string {
|
||||
return "yz_backend_oa_shift"
|
||||
}
|
||||
|
||||
// 排班方案类型(plan_type)
|
||||
const (
|
||||
OaPlanTypeRegular int8 = 1 // 常规排班:按组织范围周期性下发
|
||||
OaPlanTypeTemp int8 = 2 // 临时方案:针对单个/多个员工的短期安排
|
||||
)
|
||||
|
||||
// 排班作用范围(scope_type)
|
||||
const (
|
||||
OaScopeCompany int8 = 1 // 整个公司
|
||||
OaScopeOrg int8 = 2 // 部门 / 小组(可含下级组织)
|
||||
OaScopeEmployees int8 = 3 // 指定员工(一人或多人)
|
||||
)
|
||||
|
||||
// OaSchedulePlan 排班方案 yz_backend_oa_schedule_plan
|
||||
//
|
||||
// 方案只描述“谁、在什么时间、上什么班”的规则,发布后由后端展开成
|
||||
// yz_backend_oa_schedule_entry 明细(每人每天一条),这样看板查询与
|
||||
// 临时调配都只操作明细表,方案本身可以随时停用而不影响已下发的排班。
|
||||
//
|
||||
// 两种排班方式:
|
||||
// - 按星期(AlignMode=0):Weekdays + ShiftID,一人一天一个固定班次;
|
||||
// - 按模板(AlignMode=1/2/3):Pattern 存周期的每日规则快照,
|
||||
// 发布时按自然周 / 开始日滚动 / 自然月推算每天是否上班、上哪个班次。
|
||||
// 模板来自平台端(yz_platform_sched_tpl),调用后即固化到本方案,
|
||||
// 之后模板调整与方案无关。
|
||||
type OaSchedulePlan struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
Tid int `orm:"column(tid)" json:"tid"`
|
||||
PlanName string `orm:"column(plan_name);size(100)" json:"plan_name"`
|
||||
PlanType int8 `orm:"column(plan_type);default(1)" json:"plan_type"`
|
||||
ScopeType int8 `orm:"column(scope_type);default(2)" json:"scope_type"`
|
||||
OrgID uint64 `orm:"column(org_id);default(0)" json:"org_id"`
|
||||
OrgName string `orm:"column(org_name);size(128);default()" json:"org_name"`
|
||||
IncludeChild int8 `orm:"column(include_child);default(1)" json:"include_child"`
|
||||
EmployeeIDs string `orm:"column(employee_ids);type(text);null" json:"employee_ids"`
|
||||
EmployeeNames string `orm:"column(employee_names);type(text);null" json:"employee_names"`
|
||||
StartDate string `orm:"column(start_date);type(date)" json:"start_date"`
|
||||
EndDate string `orm:"column(end_date);type(date)" json:"end_date"`
|
||||
Weekdays string `orm:"column(weekdays);size(32);default()" json:"weekdays"`
|
||||
ShiftID uint64 `orm:"column(shift_id);default(0)" json:"shift_id"`
|
||||
// 模板快照与周期规则(平台模板调用后固化到方案,见 models/sched_template.go)
|
||||
TemplateID uint64 `orm:"column(template_id);default(0)" json:"template_id"`
|
||||
TemplateCode string `orm:"column(template_code);size(50);default()" json:"template_code"`
|
||||
TemplateName string `orm:"column(template_name);size(50);default()" json:"template_name"`
|
||||
AlignMode int8 `orm:"column(align_mode);default(0)" json:"align_mode"`
|
||||
CycleDays int `orm:"column(cycle_days);default(0)" json:"cycle_days"`
|
||||
WeekOffset int8 `orm:"column(week_offset);default(0)" json:"week_offset"`
|
||||
MonthRestDays int8 `orm:"column(month_rest_days);default(0)" json:"month_rest_days"`
|
||||
MonthRestWeekday int8 `orm:"column(month_rest_weekday);default(0)" json:"month_rest_weekday"`
|
||||
Pattern string `orm:"column(pattern);type(text);null" json:"pattern"`
|
||||
ShiftName string `orm:"column(shift_name);size(50);default()" json:"shift_name"`
|
||||
Color string `orm:"column(color);size(20);default(#409EFF)" json:"color"`
|
||||
Note string `orm:"column(note);size(500);default()" json:"note"`
|
||||
Status int8 `orm:"column(status);default(1)" json:"status"`
|
||||
PublishStatus int8 `orm:"column(publish_status);default(0)" json:"publish_status"`
|
||||
EntryCount int `orm:"column(entry_count);default(0)" json:"entry_count"`
|
||||
CreatedBy uint64 `orm:"column(created_by);default(0)" json:"created_by"`
|
||||
CreatedByName string `orm:"column(created_by_name);size(64);default()" json:"created_by_name"`
|
||||
IsDeleted int8 `orm:"column(is_deleted);default(0)" json:"is_deleted"`
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
UpdateTime *time.Time `orm:"column(update_time);auto_now;type(datetime);null" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||||
}
|
||||
|
||||
func (m *OaSchedulePlan) TableName() string {
|
||||
return "yz_backend_oa_schedule_plan"
|
||||
}
|
||||
|
||||
// 排班明细来源(source)
|
||||
const (
|
||||
OaEntrySourcePlan int8 = 1 // 由排班方案发布生成
|
||||
OaEntrySourceTemp int8 = 2 // 临时调配 / 单人多人手工安排
|
||||
)
|
||||
|
||||
// OaScheduleEntry 排班明细 yz_backend_oa_schedule_entry
|
||||
//
|
||||
// 一人一天一条有效记录:唯一键 (tid, employee_id, schedule_date, is_deleted)。
|
||||
// 删除时把 is_deleted 写成记录 ID,既保留历史痕迹,又避免同一天重新排班
|
||||
// 与软删记录冲突(与 OA 工作日报的处理方式一致)。
|
||||
type OaScheduleEntry struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
Tid int `orm:"column(tid)" json:"tid"`
|
||||
PlanID uint64 `orm:"column(plan_id);default(0)" json:"plan_id"`
|
||||
EmployeeID uint `orm:"column(employee_id)" json:"employee_id"`
|
||||
EmployeeName string `orm:"column(employee_name);size(50);default()" json:"employee_name"`
|
||||
EmployeeAccount string `orm:"column(employee_account);size(50);default()" json:"employee_account"`
|
||||
OrgID uint64 `orm:"column(org_id);default(0)" json:"org_id"`
|
||||
OrgName string `orm:"column(org_name);size(128);default()" json:"org_name"`
|
||||
Position string `orm:"column(position);size(50);default()" json:"position"`
|
||||
ScheduleDate string `orm:"column(schedule_date);type(date)" json:"schedule_date"`
|
||||
ShiftID uint64 `orm:"column(shift_id);default(0)" json:"shift_id"`
|
||||
ShiftName string `orm:"column(shift_name);size(50);default()" json:"shift_name"`
|
||||
ShortName string `orm:"column(short_name);size(20);default()" json:"short_name"`
|
||||
Color string `orm:"column(color);size(20);default(#409EFF)" json:"color"`
|
||||
WorkStart string `orm:"column(work_start);size(8);default()" json:"work_start"`
|
||||
WorkEnd string `orm:"column(work_end);size(8);default()" json:"work_end"`
|
||||
Source int8 `orm:"column(source);default(1)" json:"source"`
|
||||
Note string `orm:"column(note);size(255);default()" json:"note"`
|
||||
CreatedBy uint64 `orm:"column(created_by);default(0)" json:"created_by"`
|
||||
CreatedByName string `orm:"column(created_by_name);size(64);default()" json:"created_by_name"`
|
||||
IsDeleted uint64 `orm:"column(is_deleted);default(0)" json:"is_deleted"`
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
UpdateTime *time.Time `orm:"column(update_time);auto_now;type(datetime);null" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||||
}
|
||||
|
||||
func (m *OaScheduleEntry) TableName() string {
|
||||
return "yz_backend_oa_schedule_entry"
|
||||
}
|
||||
|
||||
// 排班变更类型(change_type)
|
||||
const (
|
||||
OaChangeShift int8 = 1 // 调班:换班次
|
||||
OaChangeClear int8 = 2 // 清除排班
|
||||
OaChangeManual int8 = 3 // 手工新增排班
|
||||
OaChangePublish int8 = 4 // 方案发布覆盖
|
||||
)
|
||||
|
||||
// OaScheduleChange 排班变更留痕 yz_backend_oa_schedule_change
|
||||
//
|
||||
// 只记录“人 + 日期 + 原班次 -> 新班次”的关键信息,用于回答
|
||||
// “这天谁被临时调班了、为什么调”,不做完整审计日志。
|
||||
type OaScheduleChange struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
Tid int `orm:"column(tid)" json:"tid"`
|
||||
EntryID uint64 `orm:"column(entry_id);default(0)" json:"entry_id"`
|
||||
EmployeeID uint `orm:"column(employee_id)" json:"employee_id"`
|
||||
EmployeeName string `orm:"column(employee_name);size(50);default()" json:"employee_name"`
|
||||
ScheduleDate string `orm:"column(schedule_date);type(date)" json:"schedule_date"`
|
||||
ChangeType int8 `orm:"column(change_type);default(1)" json:"change_type"`
|
||||
OldShiftID uint64 `orm:"column(old_shift_id);default(0)" json:"old_shift_id"`
|
||||
OldShiftName string `orm:"column(old_shift_name);size(50);default()" json:"old_shift_name"`
|
||||
NewShiftID uint64 `orm:"column(new_shift_id);default(0)" json:"new_shift_id"`
|
||||
NewShiftName string `orm:"column(new_shift_name);size(50);default()" json:"new_shift_name"`
|
||||
Reason string `orm:"column(reason);size(255);default()" json:"reason"`
|
||||
OperatorID uint64 `orm:"column(operator_id);default(0)" json:"operator_id"`
|
||||
OperatorName string `orm:"column(operator_name);size(64);default()" json:"operator_name"`
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
}
|
||||
|
||||
func (m *OaScheduleChange) TableName() string {
|
||||
return "yz_backend_oa_schedule_change"
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// 排班模板对齐方式(align_mode)
|
||||
//
|
||||
// 1 按自然周:双休 / 单休 / 大小周,day_index 0=周一 ... 6=周日
|
||||
// 2 按开始日滚动:三班倒 / 做一休一,从方案开始日期起按周期顺延
|
||||
// 3 按自然月:月休,按月计算休息日
|
||||
const (
|
||||
SchedTplAlignWeek int8 = 1
|
||||
SchedTplAlignRoll int8 = 2
|
||||
SchedTplAlignMonth int8 = 3
|
||||
)
|
||||
|
||||
// 排班模板每天类型(day_type)
|
||||
const (
|
||||
SchedTplDayWork int8 = 1 // 上班
|
||||
SchedTplDayRest int8 = 2 // 休息
|
||||
)
|
||||
|
||||
// 排班模板类型(template_type)
|
||||
const (
|
||||
SchedTplTypeDoubleWeekend int8 = 1 // 双休
|
||||
SchedTplTypeSingleWeekend int8 = 2 // 单休
|
||||
SchedTplTypeBigSmallWeek int8 = 3 // 大小周
|
||||
SchedTplTypeMonthRest int8 = 4 // 月休
|
||||
SchedTplTypeThreeShift int8 = 5 // 三班倒
|
||||
SchedTplTypeWorkRestOne int8 = 6 // 做一休一
|
||||
SchedTplTypeCustom int8 = 9 // 自定义
|
||||
)
|
||||
|
||||
// PlatformSchedTpl 平台端排班模板 yz_platform_sched_tpl
|
||||
//
|
||||
// 模板是全局数据(不按租户隔离),只有平台端可维护;系统预置模板
|
||||
// (is_system=1)由平台锁定,禁止编辑 / 删除 / 停用。租户端调用模板时
|
||||
// 会把规则快照进自己的排班方案(OaSchedulePlan.Pattern),之后互不影响。
|
||||
type PlatformSchedTpl struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
Code string `orm:"column(code);size(50);default()" json:"code"`
|
||||
Name string `orm:"column(name);size(50)" json:"name"`
|
||||
TemplateType int8 `orm:"column(template_type);default(9)" json:"template_type"`
|
||||
AlignMode int8 `orm:"column(align_mode);default(1)" json:"align_mode"`
|
||||
CycleDays int `orm:"column(cycle_days);default(7)" json:"cycle_days"`
|
||||
WeekOffset int8 `orm:"column(week_offset);default(0)" json:"week_offset"`
|
||||
MonthRestDays int8 `orm:"column(month_rest_days);default(0)" json:"month_rest_days"`
|
||||
MonthRestWeekday int8 `orm:"column(month_rest_weekday);default(0)" json:"month_rest_weekday"`
|
||||
Summary string `orm:"column(summary);size(255);default()" json:"summary"`
|
||||
IsSystem int8 `orm:"column(is_system);default(0)" json:"is_system"`
|
||||
Status int8 `orm:"column(status);default(1)" json:"status"`
|
||||
Sort int `orm:"column(sort);default(0)" json:"sort"`
|
||||
Creater string `orm:"column(creater);size(50);default()" json:"creater"`
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
UpdateTime *time.Time `orm:"column(update_time);auto_now;type(datetime);null" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||||
}
|
||||
|
||||
func (m *PlatformSchedTpl) TableName() string {
|
||||
return "yz_platform_sched_tpl"
|
||||
}
|
||||
|
||||
// PlatformSchedTplDay 平台端排班模板的周期每日规则 yz_platform_sched_tpl_day
|
||||
//
|
||||
// day_index 为周期内第几天(从 0 开始)。day_type=2 表示休息,
|
||||
// 此时班次字段为空;day_type=1 时填写班次名称与上下班时间。
|
||||
type PlatformSchedTplDay struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
TemplateID uint64 `orm:"column(template_id);default(0)" json:"template_id"`
|
||||
DayIndex int `orm:"column(day_index);default(0)" json:"day_index"`
|
||||
DayType int8 `orm:"column(day_type);default(1)" json:"day_type"`
|
||||
ShiftName string `orm:"column(shift_name);size(50);default()" json:"shift_name"`
|
||||
ShiftShort string `orm:"column(shift_short);size(20);default()" json:"shift_short"`
|
||||
Color string `orm:"column(color);size(20);default(#409EFF)" json:"color"`
|
||||
WorkStart string `orm:"column(work_start);size(8);default()" json:"work_start"`
|
||||
WorkEnd string `orm:"column(work_end);size(8);default()" json:"work_end"`
|
||||
RestStart string `orm:"column(rest_start);size(8);default()" json:"rest_start"`
|
||||
RestEnd string `orm:"column(rest_end);size(8);default()" json:"rest_end"`
|
||||
WorkHours float64 `orm:"column(work_hours);type(decimal);digits(5);decimals(2);default(0)" json:"work_hours"`
|
||||
Remark string `orm:"column(remark);size(100);default()" json:"remark"`
|
||||
}
|
||||
|
||||
func (m *PlatformSchedTplDay) TableName() string {
|
||||
return "yz_platform_sched_tpl_day"
|
||||
}
|
||||
Reference in new issue
Block a user