yjp 1 gadu atpakaļ
vecāks
revīzija
101d9de0da
1 mainītis faili ar 24 papildinājumiem un 11 dzēšanām
  1. 24 11
      framework/core/tag/sql/sql_result/usage.go

+ 24 - 11
framework/core/tag/sql/sql_result/usage.go

@@ -51,21 +51,29 @@ func defaultCallback(result map[string]any, columnName string) OnParsedFieldTagF
 		case reflect.Bool:
 			return reflectutils.AssignBoolValue(resultValue, entityFieldElemValue)
 		case reflect.String:
-			strValue := resultValue.(string)
+			strValue, ok := resultValue.(string)
+			if ok {
+				// 实体字段是字符串类型,接收到的是数据库时间格式
+				parsedTime, err := parseTimeStringResult(strValue)
+				if err == nil {
+					// 转换成功说明是时间字符串
+					strValue = parsedTime.Format(tag.ParseTime)
+				}
+
+				parsedValue, err := dealStringResultValue(strValue, tag)
+				if err != nil {
+					return err
+				}
 
-			// 实体字段是字符串类型,接收到的是数据库时间格式
-			parsedTime, err := parseTimeStringResult(strValue)
-			if err == nil {
-				// 转换成功说明是时间字符串
-				strValue = parsedTime.Format(tag.ParseTime)
+				return reflectutils.AssignStringValue(parsedValue, entityFieldElemValue)
 			}
 
-			parsedValue, err := dealStringResultValue(strValue, tag)
-			if err != nil {
-				return err
+			timeResult, ok := resultValue.(time.Time)
+			if ok {
+				return reflectutils.AssignStringValue(timeResult.Format(tag.ParseTime), entityFieldElemValue)
 			}
 
-			return reflectutils.AssignStringValue(parsedValue, entityFieldElemValue)
+			return errors.New("查询到的值无法赋值为string类型")
 		case reflect.Int64:
 			return reflectutils.AssignInt64Value(resultValue, entityFieldElemValue)
 		case reflect.Uint64:
@@ -75,7 +83,12 @@ func defaultCallback(result map[string]any, columnName string) OnParsedFieldTagF
 		case reflect.Struct:
 			// 实体字段是time.Time,接收到的是数据库时间格式
 			if reflectutils.IsValueTime(entityFieldElemValue) {
-				parsedTime, err := parseTimeStringResult(resultValue.(string))
+				timeStr, ok := resultValue.(string)
+				if !ok {
+					return errors.New("数据库查询类型不是时间字符串")
+				}
+
+				parsedTime, err := parseTimeStringResult(timeStr)
 				if err != nil {
 					return err
 				}