func()

in pkg/rm/tcc/tcc_service.go [186:228]


func (t *TCCServiceProxy) getOrCreateBusinessActionContext(params interface{}) *tm.BusinessActionContext {
	if params == nil {
		return &tm.BusinessActionContext{}
	}

	switch params.(type) {
	case tm.BusinessActionContext:
		v := params.(tm.BusinessActionContext)
		return &v
	case *tm.BusinessActionContext:
		v := params.(*tm.BusinessActionContext)
		if v != nil {
			return v
		}
		return &tm.BusinessActionContext{}
	default:
		break
	}

	var (
		typ      reflect.Type
		val      reflect.Value
		isStruct bool
	)
	if isStruct, val, typ = obtainStructValueType(params); !isStruct {
		return &tm.BusinessActionContext{}
	}
	n := typ.NumField()
	for i := 0; i < n; i++ {
		sf := typ.Field(i)
		if sf.Type == rm.TypBusinessContextInterface {
			v := val.Field(i).Interface()
			if v != nil {
				return v.(*tm.BusinessActionContext)
			}
		}
		if sf.Type == reflect.TypeOf(tm.BusinessActionContext{}) && val.Field(i).CanInterface() {
			v := val.Field(i).Interface().(tm.BusinessActionContext)
			return &v
		}
	}
	return &tm.BusinessActionContext{}
}