yunzer_go/server/models/task.go
2025-11-13 11:28:00 +08:00

139 lines
5.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package models
import (
"time"
"github.com/beego/beego/v2/client/orm"
)
// Task 任务模型(对应表 yz_tenant_tasks
type Task struct {
Id int `orm:"auto" json:"id"`
TenantId int `orm:"column(tenant_id)" json:"tenant_id"`
TaskNo string `orm:"column(task_no);size(64)" json:"task_no"`
TaskName string `orm:"column(task_name);size(255)" json:"task_name"`
TaskDesc string `orm:"column(task_desc);type(text);null" json:"task_desc"`
TaskType string `orm:"column(task_type);size(32);null" json:"task_type"`
BusinessTag string `orm:"column(business_tag);size(64);null" json:"business_tag"`
ParentTaskId int `orm:"column(parent_task_id);null" json:"parent_task_id"`
ProjectId int `orm:"column(project_id);null" json:"project_id"`
RelatedId int `orm:"column(related_id);null" json:"related_id"`
RelatedType string `orm:"column(related_type);size(32);null" json:"related_type"`
TeamEmployeeIds string `orm:"column(team_employee_ids);size(512);null" json:"team_employee_ids"`
CreatorId int `orm:"column(creator_id)" json:"creator_id"`
CreatorName string `orm:"column(creator_name);size(64)" json:"creator_name"`
PrincipalId int `orm:"column(principal_id)" json:"principal_id"`
PrincipalName string `orm:"column(principal_name);size(64)" json:"principal_name"`
ParticipantIds string `orm:"column(participant_ids);size(512);null" json:"participant_ids"`
ParticipantNames string `orm:"column(participant_names);size(512);null" json:"participant_names"`
CcIds string `orm:"column(cc_ids);size(512);null" json:"cc_ids"`
CcNames string `orm:"column(cc_names);size(512);null" json:"cc_names"`
PlanStartTime *time.Time `orm:"column(plan_start_time);null;type(datetime)" json:"plan_start_time"`
PlanEndTime time.Time `orm:"column(plan_end_time);type(datetime)" json:"plan_end_time"`
ActualStartTime *time.Time `orm:"column(actual_start_time);null;type(datetime)" json:"actual_start_time"`
ActualEndTime *time.Time `orm:"column(actual_end_time);null;type(datetime)" json:"actual_end_time"`
EstimatedHours float64 `orm:"column(estimated_hours);null;digits(10);decimals(2)" json:"estimated_hours"`
ActualHours float64 `orm:"column(actual_hours);null;digits(10);decimals(2)" json:"actual_hours"`
TaskStatus string `orm:"column(task_status);size(32)" json:"task_status"`
Priority string `orm:"column(priority);size(16)" json:"priority"`
Progress int8 `orm:"column(progress)" json:"progress"`
NeedApproval int8 `orm:"column(need_approval)" json:"need_approval"`
ApprovalId int `orm:"column(approval_id);null" json:"approval_id"`
DelayApproved int8 `orm:"column(delay_approved)" json:"delay_approved"`
OldPlanEndTime *time.Time `orm:"column(old_plan_end_time);null;type(datetime)" json:"old_plan_end_time"`
RepeatType string `orm:"column(repeat_type);size(16);null" json:"repeat_type"`
RepeatCycle int `orm:"column(repeat_cycle);null" json:"repeat_cycle"`
RepeatEndTime *time.Time `orm:"column(repeat_end_time);null;type(datetime)" json:"repeat_end_time"`
AttachmentIds string `orm:"column(attachment_ids);size(1024);null" json:"attachment_ids"`
Remark string `orm:"column(remark);size(512);null" json:"remark"`
IsArchived int8 `orm:"column(is_archived)" json:"is_archived"`
ArchiveTime *time.Time `orm:"column(archive_time);null;type(datetime)" json:"archive_time"`
CreatedTime time.Time `orm:"column(created_time);type(datetime);auto_now_add" json:"created_time"`
UpdatedTime time.Time `orm:"column(updated_time);type(datetime);auto_now" json:"updated_time"`
DeletedTime *time.Time `orm:"column(deleted_time);null;type(datetime)" json:"deleted_time"`
OperatorId int `orm:"column(operator_id);null" json:"operator_id"`
OperatorName string `orm:"column(operator_name);size(64);null" json:"operator_name"`
}
func (t *Task) TableName() string {
return "yz_tenant_tasks"
}
func init() {
orm.RegisterModel(new(Task))
}
// -------- 数据访问函数 ---------
// ListTasks 分页查询任务
func ListTasks(tenantId int, keyword, status, priority string, page, pageSize int) (tasks []*Task, total int64, err error) {
o := orm.NewOrm()
qs := o.QueryTable(new(Task)).Filter("tenant_id", tenantId).Filter("deleted_time__isnull", true)
if keyword != "" {
cond := orm.NewCondition()
cond1 := cond.Or("task_name__icontains", keyword).Or("task_no__icontains", keyword).Or("principal_name__icontains", keyword)
qs = qs.SetCond(cond1)
}
if status != "" {
qs = qs.Filter("task_status", status)
}
if priority != "" {
qs = qs.Filter("priority", priority)
}
total, err = qs.Count()
if err != nil {
return
}
if page <= 0 {
page = 1
}
if pageSize <= 0 {
pageSize = 10
}
offset := (page - 1) * pageSize
_, err = qs.OrderBy("-id").Limit(pageSize, offset).All(&tasks)
return
}
// GetTaskById 获取单个任务
func GetTaskById(id int) (*Task, error) {
o := orm.NewOrm()
t := Task{Id: id}
err := o.Read(&t)
if err != nil {
return nil, err
}
return &t, nil
}
// CreateTask 新建任务
func CreateTask(t *Task) error {
o := orm.NewOrm()
_, err := o.Insert(t)
return err
}
// UpdateTask 更新任务
func UpdateTask(t *Task, cols ...string) error {
o := orm.NewOrm()
_, err := o.Update(t, cols...)
return err
}
// GetTodoTasks 获取待办任务列表
func GetTodoTasks(tenantId int, id int, limit int) (tasks []*Task, err error) {
o := orm.NewOrm()
qs := o.QueryTable(new(Task)).Filter("tenant_id", tenantId).Filter("deleted_time__isnull", true)
// 如果传了用户,则筛选负责人为该用户的任务
if id > 0 {
qs = qs.Filter("principal_id", id)
}
if limit <= 0 {
limit = 10
}
_, err = qs.OrderBy("-id").Limit(limit).All(&tasks)
return
}