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{}
}