query_set_detail_dto.go 1.6 KB
package dto

import "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain"

type QuerySetDetailDto struct {
	// 查询集合ID
	QuerySetId int `json:"querySetId"`
	// Schema:方案  SubProcess:子过程
	Type string `json:"type"`
	// 标识 分组:Group 子过程/方案:Set
	Flag string `json:"flag"`
	// 名称
	Name string `json:"name"`
	// 查询组件
	QueryComponents []*domain.QueryComponent `json:"queryComponents"`
	// 查询集绑定的表
	TableId int `json:"tableId"`
	// 在冲突状态 true:冲突异常 false:正常
	InConflict bool `json:"inConflict"`
}

func (d *QuerySetDetailDto) Load(m *domain.QuerySet, mapTables map[int]*domain.Table) *QuerySetDetailDto {
	d.QuerySetId = m.QuerySetId
	d.Type = m.Type
	d.Flag = m.Flag
	d.Name = m.Name
	d.QueryComponents = m.QueryComponents
	if m.QuerySetInfo != nil {
		d.TableId = m.QuerySetInfo.BindTableId
	}
	hasUpdateTable := false
	for i, q := range d.QueryComponents {
		if q.MasterTable != nil && q.MasterTable.TableId != 0 {
			if t, ok := mapTables[q.MasterTable.TableId]; ok {
				d.QueryComponents[i].MasterTable = domain.NewQueryComponentTable(t)
				d.QueryComponents[i].UpdateTables(t)
				hasUpdateTable = true
			}
		}
		if d.QueryComponents[i].Aggregation != nil {
			d.QueryComponents[i].Aggregation.Aggregation.AllFields = d.QueryComponents[i].Aggregation.AggregationFields()
		}
		if !hasUpdateTable && len(mapTables) == 1 {
			for _, t := range mapTables {
				d.QueryComponents[i].UpdateTables(t)
				hasUpdateTable = true
				break
			}
		}
	}
	d.InConflict = false
	if m.QuerySetInfo != nil {
		if m.QuerySetInfo.ReadyStatus == 1 {
			d.InConflict = true
		}
	}
	return d
}