table_dto.go 2.1 KB
package dto

import (
	"strings"

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

type TableDto struct {
	// 表Id
	TableId int `json:"tableId"`
	// 表类型 MainTable:主表 SideTable:副表 SubTable:分表  ExcelTable:Excel表
	TableType string `json:"tableType"`
	// 名称
	Name string `json:"name"`
	// 对应数据库名称
	SQLName string `json:"sqlName,omitempty"`
	// 父级ID
	ParentId int `json:"parentId"`
	// 模块 应用于模块 1:数控中心 2:拆解模块 4:计算模块
	//Module int `json:"module"`
	// 模块 应用于模块 1:数控中心 2:拆解模块 4:计算模块
	Modules []int `json:"modules"`
	// 标识
	Flag string `json:"flag,omitempty"`
	// 表字段
	Fields []*domain.Field `json:"fields"`
}

func (d *TableDto) Load(m *domain.Table) *TableDto {
	d.TableId = m.TableId
	d.TableType = m.TableType
	d.Name = m.Name
	d.ParentId = m.ParentId
	d.Modules = make([]int, 0)
	if m.TableInfo != nil {
		//d.Module = m.TableInfo.ApplyOnModule
		for i := 1; i <= 4; i++ {
			if m.TableInfo.ApplyOnModule&(1<<(i-1)) > 0 {
				d.Modules = append(d.Modules, 1<<(i-1))
			}
		}
	}
	d.Fields = make([]*domain.Field, 0)
	return d
}

func (d *TableDto) SetDetailStructInfo(m *domain.Table) *TableDto {
	d.Fields = append(d.Fields, m.DataFields...)
	d.Fields = append(d.Fields, m.ManualFields...)

	d.SQLName = m.SQLName
	return d
}

func SuitTableByView(tables []*TableDto, view string, name string) []*TableDto {
	var mainTables = make(map[int]*TableDto)
	var res = make([]*TableDto, 0)
	if view == "main" {
		for i := range tables {
			t := tables[i]
			if t.ParentId == 0 && t.TableType == domain.MainTable.ToString() {
				mainTables[t.TableId] = t
				res = append(res, t)
			}
		}
		for i := range tables {
			t := tables[i]
			if t.TableType == domain.SubTable.ToString() {
				if _, ok := mainTables[t.ParentId]; ok {
					res = append(res, t)
				}
			}
		}
	} else {
		res = tables
	}
	var matchName = make([]*TableDto, 0)
	if len(name) > 0 {
		for i := range res {
			t := res[i]
			if strings.Contains(t.Name, name) {
				matchName = append(matchName, t)
			}
		}
		res = matchName
	}
	return res
}