package entity import ( "admin/apps/game/model" "admin/apps/game/model/dto" "math/rand" "reflect" ) var ProjectDtoFieldsDescInfo = DefaultProject().GetDtoFieldsDescInfo() type Project struct { Id int po *model.Project } func DefaultProject() *Project { return &Project{ po: &model.Project{}, } } func FromProjectPo(po *model.Project) *Project { return &Project{ Id: po.ID, po: po, } } func FromProjectDto(dto dto.CommonDtoValues) *Project { et := DefaultProject() po := et.po //to := reflect.TypeOf(po) vo := reflect.ValueOf(po).Elem() to := reflect.TypeOf(po).Elem() for k, v := range dto { fo := vo.FieldByName(k) ft, _ := to.FieldByName(k) fo.Set(parseStr2FieldValue(ft, v)) } et.Id = po.ID return et } func (et *Project) ToPo() *model.Project { return et.po } func (et *Project) ToCommonDto() dto.CommonDtoValues { obj := make(dto.CommonDtoValues) to := reflect.TypeOf(et.po).Elem() vo := reflect.ValueOf(et.po).Elem() for i := 0; i < vo.NumField(); i++ { ft := to.Field(i) fo := vo.Field(i) obj[ft.Name] = fo.Interface() } return obj } func (et *Project) GetDtoFieldsDescInfo() []*dto.CommonDtoFieldDesc { to := reflect.TypeOf(et.po).Elem() vo := reflect.ValueOf(et.po).Elem() obj := make([]*dto.CommonDtoFieldDesc, 0, to.NumField()) for i := 0; i < vo.NumField(); i++ { ft := to.Field(i) //fo := vo.Field(i) f1 := &dto.CommonDtoFieldDesc{ Name: ft.Name, Key: ft.Name, Type: ft.Type.Name(), HelpText: ft.Tag.Get("desc"), Editable: true, Require: rand.Int()%2 == 0, Choices: make([]*dto.CommonDtoFieldChoice, 0), MultiChoice: false, } obj = append(obj, f1) } return obj }