package dao import ( "youngee_b_api/app/entity" "youngee_b_api/app/vo" ) type ProjectTaskInfoDao struct{} // 获取指定违约类型的种草子任务数量 func (d ProjectTaskInfoDao) CountByDefaultType(projectId string, defaultType int64) int64 { var total int64 Db.Model(&entity.ProjectTaskInfo{}).Where("project_id = ? AND cur_default_type = ?", projectId, defaultType).Count(&total) return total } // 获取指定任务阶段的种草子任务数量 func (d ProjectTaskInfoDao) CountByTaskStage(projectId string, taskStage int64) int64 { var total int64 Db.Model(&entity.ProjectTaskInfo{}).Where("project_id = ? AND task_stage = ?", projectId, taskStage).Count(&total) return total } // 根据openid获取报名的种草子任务阶段 func (d ProjectTaskInfoDao) CountAllByOpenid(openid string) int64 { var total int64 Db.Model(&entity.ProjectTaskInfo{}).Where("open_id = ?", openid).Count(&total) return total } // 根据openid获取指定任务阶段的种草子任务阶段 func (d ProjectTaskInfoDao) CountByOpenid(openid string, taskStage int) int64 { var total int64 Db.Model(&entity.ProjectTaskInfo{}).Where("open_id = ? AND task_stage = ?", openid, taskStage).Count(&total) return total } // 根据openid获取执行中的种草子任务阶段 func (d ProjectTaskInfoDao) CountExcuteNumByOpenid(openid string) int64 { var total int64 Db.Model(&entity.ProjectTaskInfo{}). Where("open_id = ? AND task_stage NOT IN (?)", openid, []int{1, 3, 15, 16, 17}). Count(&total) return total } // 获取指定任务阶段的种草子任务(包含时间限制) func (d ProjectTaskInfoDao) GetListByTaskStage(projectId string, taskStage int64, time string, page int, pageSize int, talentNickname string) ([]*entity.ProjectTaskInfo, int64, error) { var taskInfos []*entity.ProjectTaskInfo var total int64 query := Db.Model(&entity.ProjectTaskInfo{}) if taskStage == 6 { query = query.Where("project_id = ? AND task_stage >= ?", projectId, taskStage) } else { query = query.Where("project_id = ? AND task_stage = ?", projectId, taskStage) } if talentNickname != "" { var talentInfos []entity.PlatformKuaishouUserInfo err1 := Db.Model(&entity.PlatformKuaishouUserInfo{}).Where("nick_name = ?", talentNickname).Find(&talentInfos).Error if err1 != nil { return nil, 0, err1 } var openIds []string for _, talentInfo := range talentInfos { openIds = append(openIds, talentInfo.OpenID) } query = query.Where("open_id in ?", openIds) } // 计算偏移量 offset := (page - 1) * pageSize var err error if taskStage == 4 { query.Count(&total) err = query.Order("create_date desc").Offset(offset).Limit(pageSize).Find(&taskInfos).Error } else if taskStage == 5 { if time != "" { query = query.Where("DATE(delivery_date) = ?", time) } query.Count(&total) err = query.Order("delivery_date desc").Offset(offset).Limit(pageSize).Find(&taskInfos).Error } else if taskStage == 6 { query.Count(&total) err = query.Order("signed_time desc").Offset(offset).Limit(pageSize).Find(&taskInfos).Error } if err != nil { return nil, 0, err } return taskInfos, total, nil } // 获取未传初稿的种草子任务数据 func (d ProjectTaskInfoDao) GetListBySketchDefault(param *vo.DefaultSearchParam) ([]entity.ProjectTaskInfo, int64, error) { projectTaskInfos := []entity.ProjectTaskInfo{} var total int64 query := Db.Model(&entity.ProjectTaskInfo{}).Where("project_id = ? AND cur_default_type = ?", param.TaskId, 4) query.Count(&total) query = query.Select("task_id, talent_id, settle_amount, draft_fee, sketch_missing_time, open_id") offset := (param.Page - 1) * param.PageSize if err := query.Order("sketch_missing_time desc").Offset(offset).Limit(param.PageSize).Find(&projectTaskInfos).Error; err != nil { return nil, 0, err } return projectTaskInfos, total, nil } // 获取未发作品的种草子任务数据 func (d ProjectTaskInfoDao) GetListByLinkDefault(param *vo.DefaultSearchParam) ([]entity.ProjectTaskInfo, int64, error) { projectTaskInfos := []entity.ProjectTaskInfo{} var total int64 query := Db.Model(&entity.ProjectTaskInfo{}).Where("project_id = ? AND cur_default_type = ?", param.TaskId, 6) query.Count(&total) query = query.Select("task_id, talent_id, settle_amount, draft_fee, link_missing_time, open_id") offset := (param.Page - 1) * param.PageSize if err := query.Order("link_missing_time desc").Offset(offset).Limit(param.PageSize).Find(&projectTaskInfos).Error; err != nil { return nil, 0, err } return projectTaskInfos, total, nil } // 获取未传数据的种草子任务数据 func (d ProjectTaskInfoDao) GetListByDataDefault(param *vo.DefaultSearchParam) ([]entity.ProjectTaskInfo, int64, error) { projectTaskInfos := []entity.ProjectTaskInfo{} var total int64 query := Db.Model(&entity.ProjectTaskInfo{}).Where("project_id = ? AND cur_default_type = ?", param.TaskId, 8) query.Count(&total) query = query.Select("task_id, talent_id, settle_amount, draft_fee, data_missing_time, open_id") offset := (param.Page - 1) * param.PageSize if err := query.Order("data_missing_time desc").Offset(offset).Limit(param.PageSize).Find(&projectTaskInfos).Error; err != nil { return nil, 0, err } return projectTaskInfos, total, nil } // 获取终止合作的种草子任务数据 func (d ProjectTaskInfoDao) GetListByTerminateDefault(param *vo.DefaultSearchParam) ([]entity.ProjectTaskInfo, int64, error) { projectTaskInfos := []entity.ProjectTaskInfo{} var total int64 query := Db.Debug().Model(&entity.ProjectTaskInfo{}).Where("project_id = ? AND task_stage = ?", param.TaskId, 17) query.Count(&total) query = query.Select("task_id, talent_id, settle_amount, draft_fee, terminate_time, terminate_reason, terminate_operator_type, terminate_operator, open_id") offset := (param.Page - 1) * param.PageSize if err := query.Order("terminate_time desc").Offset(offset).Limit(param.PageSize).Find(&projectTaskInfos).Error; err != nil { return nil, 0, err } return projectTaskInfos, total, nil } // 获取已解约的种草子任务数据 func (d ProjectTaskInfoDao) GetListByCancelDefault(param *vo.DefaultSearchParam) ([]entity.ProjectTaskInfo, int64, error) { projectTaskInfos := []entity.ProjectTaskInfo{} var total int64 query := Db.Debug().Model(&entity.ProjectTaskInfo{}).Where("project_id = ? AND task_stage = ?", param.TaskId, 16) query.Count(&total) query = query.Select("task_id, talent_id, settle_amount, draft_fee, cancel_time, cancel_reason, cancel_operator_type, cancel_operator, open_id") offset := (param.Page - 1) * param.PageSize if err := query.Order("cancel_time desc").Offset(offset).Limit(param.PageSize).Find(&projectTaskInfos).Error; err != nil { return nil, 0, err } return projectTaskInfos, total, nil } // 更新字段 func (d ProjectTaskInfoDao) UpdateField(taskId string, updateData map[string]interface{}) error { err := Db.Model(&entity.ProjectTaskInfo{}).Where("task_id = ?", taskId).Updates(updateData).Error if err != nil { return err } return nil } // 批量更新字段 func (d ProjectTaskInfoDao) UpdateFieldBatch(taskIds []string, updateData map[string]interface{}) error { err := Db.Model(&entity.ProjectTaskInfo{}).Where("task_id IN ?", taskIds).Updates(updateData).Error if err != nil { return err } return nil } func (d ProjectTaskInfoDao) GetProjectInfoByTalentId(talentid string, others string, sortField []string, sortOrder []string, page int, pageSize int, reltype int, enterpriseid string, platform int) ([]*entity.ProjectTaskInfo, int64, error) { projectTaskInfos := []*entity.ProjectTaskInfo{} var total int64 query := Db.Model(&entity.ProjectTaskInfo{}). Joins("JOIN project_info pi ON pi.project_id = youngee_task_info.project_id"). Where("youngee_task_info.talent_id = ? AND youngee_task_info.task_stage = ? AND youngee_task_info.platform_id = ?", talentid, 15, platform) // 搜索条件(针对project_name) if others != "" { query = query.Where("pi.project_name LIKE ?", "%"+others+"%") } if reltype == 2 { query = query.Where("pi.enterprise_id = ?", enterpriseid) } // 排序处理 if len(sortField) > 0 && len(sortOrder) > 0 && len(sortField) == len(sortOrder) { for i := 0; i < len(sortField); i++ { sortfield := sortField[i] sortorder := sortOrder[i] switch sortfield { case "commit_avg": if sortorder == "asc" { query = query.Order("youngee_task_info.commit_avg asc") } else { query = query.Order("youngee_task_info.commit_avg desc") } case "collect_num": if sortorder == "asc" { query = query.Order("youngee_task_info.collect_num asc") } else { query = query.Order("youngee_task_info.collect_num desc") } case "vote_avg": if sortorder == "asc" { query = query.Order("youngee_task_info.vote_avg asc") } else { query = query.Order("youngee_task_info.vote_avg desc") } case "view_num": if sortorder == "asc" { query = query.Order("youngee_task_info.view_num asc") } else { query = query.Order("youngee_task_info.view_num desc") } } } } // 获取总数 if err := query.Count(&total).Error; err != nil { return nil, 0, err } // 选择字段(明确指定表名) query = query.Select(` youngee_task_info.project_id, youngee_task_info.task_id, pi.project_name, youngee_task_info.commit_avg, youngee_task_info.collect_num, youngee_task_info.vote_avg, youngee_task_info.view_num `) // 分页查询 offset := (page - 1) * pageSize err := query.Offset(offset).Limit(pageSize).Find(&projectTaskInfos).Error if err != nil { return nil, 0, err } return projectTaskInfos, total, nil } // 获取指定任务阶段的种草子任务 func (d ProjectTaskInfoDao) GetListByTaskStage2(projectId string, taskStage int64, page int, pageSize int, talentNickname string) ([]*entity.ProjectTaskInfo, int64, error) { var taskInfos []*entity.ProjectTaskInfo var total int64 query := Db.Model(&entity.ProjectTaskInfo{}) query = query.Where("project_id = ? AND task_stage = ?", projectId, taskStage) if talentNickname != "" { //var talentInfos []entity.PlatformKuaishouUserInfo //err1 := Db.Model(&entity.PlatformKuaishouUserInfo{}).Where("nick_name = ?", talentNickname).Find(&talentInfos).Error //if err1 != nil { // return nil, 0, err1 //} //var openIds []string //for _, talentInfo := range talentInfos { // openIds = append(openIds, talentInfo.OpenID) //} query = query.Where("talent_name = ?", talentNickname) } // 计算偏移量 offset := (page - 1) * pageSize var err error query.Count(&total) err = query.Order("complete_date desc").Offset(offset).Limit(pageSize).Find(&taskInfos).Error if err != nil { return nil, 0, err } return taskInfos, total, nil }