| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package request
- import (
- "git.sxidc.com/go-framework/baize/domain"
- "git.sxidc.com/go-framework/baize/tag/assign"
- "git.sxidc.com/go-tools/utils/reflectutils"
- "git.sxidc.com/service-supports/fserr"
- "reflect"
- )
- type DTO interface{}
- func AssignDTOToDomainObject(dto DTO, domainObject domain.Object) error {
- return assign.DefaultUsage(dto, domainObject)
- }
- func Field[T any](dto DTO, fieldName string) (T, error) {
- var zero T
- if dto == nil {
- return zero, fserr.New("DTO为nil")
- }
- fieldValue, err := getDTOFieldValue(dto, fieldName)
- if err != nil {
- return zero, err
- }
- if !fieldValue.IsValid() {
- return zero, fserr.New("dto" + fieldValue.Type().String() + "的字段" + fieldName + "无法赋值")
- }
- retValue, ok := fieldValue.Interface().(T)
- if !ok {
- return zero, fserr.New("dto" + fieldValue.Type().String() + "的字段" + fieldName + "无法转换类型")
- }
- return retValue, nil
- }
- func ToConcrete[T DTO](dto DTO) (T, error) {
- var zero T
- if dto == nil {
- return zero, fserr.New("DTO为nil")
- }
- concrete, ok := dto.(T)
- if !ok {
- return zero, fserr.New("DTO转化失败")
- }
- return concrete, nil
- }
- func getDTOFieldValue(dto DTO, fieldName string) (*reflect.Value, error) {
- if dto == nil {
- return nil, fserr.New("DTO为nil")
- }
- dtoValue := reflect.ValueOf(dto)
- if reflectutils.IsValueStructOrStructPointer(dtoValue) {
- return nil, fserr.New("dto必须是结构或结构指针")
- }
- fieldValue := reflectutils.PointerValueElem(dtoValue).FieldByName(fieldName)
- return &fieldValue, nil
- }
|