package dao import ( "errors" "gorm.io/gorm" "time" "youngee_b_api/app/entity" "youngee_b_api/app/vo" ) type ProjectDAO struct{} func (d ProjectDAO) GetProjectById(ProjectId string) (*entity.Project, error) { var Project entity.Project err := Db.Where("project_id = ?", ProjectId).First(&Project).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } else { return nil, err } } return &Project, err } // 根据enterpriseId查询指定某天的所有带货数据 func (d ProjectDAO) GetProjectListOfDay(enterpriseId string, date time.Time) ([]entity.Project, error) { var Projects []entity.Project // 构建查询 query := Db.Model(&entity.Project{}) if enterpriseId != "" { query = query.Where("enterprise_id = ?", enterpriseId) } // 将日期部分提取出来进行匹配 query = query.Where("DATE(created_at) = ?", date.Format("2006-01-02")) err := query.Find(&Projects).Error return Projects, err } // 创建种草任务 func (d ProjectDAO) CreateProject(project entity.Project) error { err := Db.Omit("recruit_ddl", "auto_fail_at", "auto_script_break_at", "auto_sketch_break_at", "pay_at", "pass_at", "finish_at", "submit_at").Create(&project).Error if err != nil { return err } return nil } // 更新种草任务 func (d ProjectDAO) UpdateProject(project entity.Project) error { err := Db.Model(&entity.Project{}).Where("project_id = ?", project.ProjectId).Updates(project).Error if err != nil { return err } return nil } // 获取种草任务列表 func (d ProjectDAO) GetProjectPreviews(param *vo.ProjectSearchParam) ([]vo.ReProjectTaskPreview, int64, error) { var reProjectTaskPreviews []vo.ReProjectTaskPreview var projects []entity.Project var total int64 query := Db.Model(&entity.Project{}) // 动态添加查询条件 if param.SubAccountId == 0 { if param.EnterpriseId == "" { return reProjectTaskPreviews, 0, errors.New("enterpriseId is empty") } query = query.Where("enterprise_id = ?", param.EnterpriseId) } else { query = query.Where("sub_account_id = ?", param.SubAccountId) } if param.ProjectType != 0 { query = query.Where("project_type = ?", param.ProjectType) } if param.ProjectPlatform != 0 { query = query.Where("project_platform = ?", param.ProjectPlatform) } if param.ProjectStatus != 0 { query = query.Where("project_status = ?", param.ProjectStatus) } if param.ProjectForm != 0 { query = query.Where("project_form = ?", param.ProjectForm) } if param.ContentType != 0 { query = query.Where("content_type = ?", param.ContentType) } query.Count(&total) query = query.Select("enterprise_id, sub_account_id, project_id, project_platform, project_status, estimated_cost, project_form, content_type, need_review, need_quality, need_calculate, product_id") offset := (param.Page - 1) * param.PageSize if err := query.Order("created_at asc").Offset(offset).Limit(param.PageSize).Find(&projects).Error; err != nil { return nil, 0, err } for _, project := range projects { reProjectTaskPreview := vo.ReProjectTaskPreview{ EnterpriseId: project.EnterpriseID, SubAccountId: project.SubAccountId, ProjectId: project.ProjectId, ProjectPlatform: project.ProjectPlatform, ProjectStatus: project.ProjectStatus, EstimatedCost: project.EstimatedCost, ProjectForm: project.ProjectForm, ContentType: project.ContentType, NeedReview: project.NeedReview, NeedQuality: project.NeedQuality, NeedCalculate: project.NeedCalculate, ProductId: project.ProductID, } reProjectTaskPreviews = append(reProjectTaskPreviews, reProjectTaskPreview) } return reProjectTaskPreviews, total, nil } // 删除种草任务 func (d ProjectDAO) DeleteProject(projectId string) (*string, error) { if projectId == "" { return &projectId, nil } err := Db.Where("project_id = ?", projectId).Delete(&entity.Project{}).Error if err != nil { return nil, err } return &projectId, nil }