100 lines
2.8 KiB
Go
100 lines
2.8 KiB
Go
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
|
||
}
|