package entity import ( "admin/apps/game/model" "admin/apps/game/model/dto" "reflect" ) var ServerDtoFieldsDescInfo = DefaultServer().GetDtoFieldsDescInfo() type Server struct { Id int po *model.Server } func DefaultServer() *Server { return &Server{ po: &model.Server{}, } } func FromServerPo(po *model.Server) *Server { return &Server{ Id: po.ID, po: po, } } func FromServerDto(dto *dto.CommonDtoValues) *Server { et := DefaultServer() po := et.po //to := reflect.TypeOf(po) vo := reflect.ValueOf(po) for _, f := range dto.Values { fo := vo.FieldByName(f.FieldName) fo.Set(reflect.ValueOf(f.Value)) } return et } func (et *Server) ToPo() *model.Server { return et.po } func (et *Server) ToCommonDto() *dto.CommonDtoValues { obj := &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) f1 := &dto.CommonDtoValue{ FieldName: ft.Name, Value: fo.Interface(), } obj.Values = append(obj.Values, f1) } return obj } func (et *Server) 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: true, Choices: make([]*dto.CommonDtoFieldChoice, 0), MultiChoice: false, } obj = append(obj, f1) } return obj }