package dto import ( "case-admin-api/api/model" "case-admin-api/utils" "fmt" "time" ) type ProjectDto struct { ProjectId string `json:"project_id"` // 主键id ProjectName string `json:"project_name"` // 项目名称 ProjectStatus int `json:"project_status"` // 项目状态(0:无效 1:正常) ProjectImage string `json:"project_image"` // 项目背景图 CreatedAt model.LocalTime `json:"created_at"` // 创建时间 UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 CaseCount int `json:"case_count"` // 关联病例数量 ProjectPlatform int `json:"project_platform"` // 关联平台数量 LastCaseUpdatedAt model.LocalTime `json:"last_case_updated_at"` // 最后病例修改时间 } // GetProjectListDto 列表 func GetProjectListDto(m []*model.Project) []*ProjectDto { // 处理返回值 responses := make([]*ProjectDto, len(m)) if len(m) > 0 { for i, v := range m { response := &ProjectDto{ ProjectId: fmt.Sprintf("%d", v.ProjectId), ProjectName: v.ProjectName, ProjectStatus: v.ProjectStatus, ProjectImage: utils.AddOssDomain(v.ProjectImage), CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, } // 加载关联病例数量 response = response.LoadCaseCount(v.Case) // 加载关联平台数量 response = response.LoadProjectPlatform(v.ProjectPlatform) // 加载最后病例修改时间 response = response.LoadLastCaseUpdatedAt(v.ProjectPlatform) // 将转换后的结构体添加到新切片中 responses[i] = response } } return responses } // GetProjectDto 详情 func GetProjectDto(m *model.Project) *ProjectDto { return &ProjectDto{ ProjectId: fmt.Sprintf("%d", m.ProjectId), ProjectName: m.ProjectName, ProjectStatus: m.ProjectStatus, ProjectImage: utils.AddOssDomain(m.ProjectImage), CreatedAt: m.CreatedAt, UpdatedAt: m.UpdatedAt, } } // LoadCaseCount 加载关联病例数量 func (r *ProjectDto) LoadCaseCount(m []*model.Case) *ProjectDto { if len(m) > 0 { r.CaseCount = len(m) } return r } // LoadProjectPlatform 加载关联平台数量 func (r *ProjectDto) LoadProjectPlatform(m []*model.ProjectPlatform) *ProjectDto { if len(m) > 0 { r.ProjectPlatform = len(m) } return r } // LoadLastCaseUpdatedAt 加载最后病例修改时间 func (r *ProjectDto) LoadLastCaseUpdatedAt(m []*model.ProjectPlatform) *ProjectDto { if len(m) > 0 { // 初始化最新时间为第一条记录的时间 latestTime := m[0].UpdatedAt // 遍历所有记录找出最新的更新时间 for _, v := range m { if time.Time(v.UpdatedAt).After(time.Time(latestTime)) { latestTime = v.UpdatedAt } } r.LastCaseUpdatedAt = latestTime } return r }