yjp 1 рік тому
батько
коміт
79f3242f9f
5 змінених файлів з 88 додано та 33 видалено
  1. 36 0
      sdk/crud.go
  2. 0 2
      sdk/sdk.go
  3. 13 3
      sdk/tag/sql_mapping.go
  4. 13 3
      sdk/tag/sql_result.go
  5. 26 25
      test/sdk_test.go

+ 36 - 0
sdk/crud.go

@@ -0,0 +1,36 @@
+package sdk
+
+import (
+	"git.sxidc.com/service-supports/ds-sdk/sdk/raw_sql_tpl"
+	"git.sxidc.com/service-supports/ds-sdk/sdk/tag"
+)
+
+type InsertCallback[T any] func(e T)
+
+func Insert[T any](sdk *SDK, tableName string, e T, callback InsertCallback[T]) error {
+	sqlMapping, err := tag.ParseSqlMapping(e)
+	if err != nil {
+		return err
+	}
+
+	executeParams := raw_sql_tpl.InsertExecuteParams{
+		TableName: tableName,
+	}
+
+	for column, sqlMappingColumn := range sqlMapping.ColumnMap {
+		if sqlMappingColumn.InsertCallback {
+			if callback != nil {
+				//callback(column)
+			}
+		}
+
+		executeParams.TableRows = append(executeParams.TableRows, raw_sql_tpl.TableRow{
+			Column: column,
+			Value:  "",
+		})
+	}
+
+	//sdk.ExecuteRawSql(raw_sql_tpl.InsertTpl, executeParams)
+
+	return nil
+}

+ 0 - 2
sdk/sdk.go

@@ -13,8 +13,6 @@ type SDK struct {
 	options    *Options
 	client     *client.Client
 	grpcClient *grpc_client.Client
-
-	// TODO 加SqlMapping的Map,动态增减值
 }
 
 func (s *SDK) ExecuteRawSql(sql string, executeParams map[string]any) ([]map[string]any, error) {

+ 13 - 3
sdk/tag/sql_mapping.go

@@ -43,12 +43,20 @@ func ParseSqlMapping(e any) (*SqlMapping, error) {
 		return nil, errors.New("传递的不是实体结构")
 	}
 
+	entityValue := reflect.ValueOf(e)
+	if entityValue.Kind() == reflect.Ptr {
+		entityValue = entityValue.Elem()
+	}
+
 	sqlMapping := new(SqlMapping)
 	sqlMapping.ColumnMap = make(map[string]SqlMappingColumn)
 
 	fieldNum := entityType.NumField()
 	for i := 0; i < fieldNum; i++ {
-		column, err := parseSqlMappingColumn(entityType.Field(i))
+		field := entityType.Field(i)
+		fieldValue := entityValue.Field(i)
+
+		column, err := parseSqlMappingColumn(field, fieldValue)
 		if err != nil {
 			return nil, err
 		}
@@ -57,7 +65,7 @@ func ParseSqlMapping(e any) (*SqlMapping, error) {
 			continue
 		}
 
-		sqlMapping.ColumnMap[column.Name] = *column
+		sqlMapping.ColumnMap[field.Name] = *column
 	}
 
 	return sqlMapping, nil
@@ -65,6 +73,7 @@ func ParseSqlMapping(e any) (*SqlMapping, error) {
 
 type SqlMappingColumn struct {
 	Name           string
+	Value          any
 	IsKey          bool
 	CanUpdate      bool
 	CanUpdateClear bool
@@ -74,9 +83,10 @@ type SqlMappingColumn struct {
 	QueryCallback  bool
 }
 
-func parseSqlMappingColumn(field reflect.StructField) (*SqlMappingColumn, error) {
+func parseSqlMappingColumn(field reflect.StructField, fieldValue reflect.Value) (*SqlMappingColumn, error) {
 	sqlColumn := &SqlMappingColumn{
 		Name:           strcase.ToSnake(field.Name),
+		Value:          fieldValue.Interface(),
 		IsKey:          false,
 		CanUpdate:      true,
 		CanUpdateClear: false,

+ 13 - 3
sdk/tag/sql_result.go

@@ -37,12 +37,20 @@ func ParseSqlResult(e any) (*SqlResult, error) {
 		return nil, errors.New("传递的不是实体结构")
 	}
 
+	entityValue := reflect.ValueOf(e)
+	if entityValue.Kind() == reflect.Ptr {
+		entityValue = entityValue.Elem()
+	}
+
 	sqlResult := new(SqlResult)
 	sqlResult.ColumnMap = make(map[string]SqlResultColumn)
 
 	fieldNum := entityType.NumField()
 	for i := 0; i < fieldNum; i++ {
-		column, err := parseSqlResultColumn(entityType.Field(i))
+		field := entityType.Field(i)
+		fieldValue := entityValue.Field(i)
+
+		column, err := parseSqlResultColumn(field, fieldValue)
 		if err != nil {
 			return nil, err
 		}
@@ -51,7 +59,7 @@ func ParseSqlResult(e any) (*SqlResult, error) {
 			continue
 		}
 
-		sqlResult.ColumnMap[column.Name] = *column
+		sqlResult.ColumnMap[field.Name] = *column
 	}
 
 	return sqlResult, nil
@@ -59,13 +67,15 @@ func ParseSqlResult(e any) (*SqlResult, error) {
 
 type SqlResultColumn struct {
 	Name             string
+	Value            any
 	ResultColumnName string
 	Callback         bool
 }
 
-func parseSqlResultColumn(field reflect.StructField) (*SqlResultColumn, error) {
+func parseSqlResultColumn(field reflect.StructField, fieldValue reflect.Value) (*SqlResultColumn, error) {
 	sqlColumn := &SqlResultColumn{
 		Name:             strcase.ToSnake(field.Name),
+		Value:            fieldValue.Interface(),
 		ResultColumnName: strcase.ToSnake(field.Name),
 		Callback:         false,
 	}

+ 26 - 25
test/sdk_test.go

@@ -6,6 +6,7 @@ import (
 	"git.sxidc.com/service-supports/ds-sdk/sdk"
 	"git.sxidc.com/service-supports/ds-sdk/sdk/raw_sql_tpl"
 	"git.sxidc.com/service-supports/ds-sdk/sdk/tag"
+	"github.com/iancoleman/strcase"
 	"math/rand"
 	"strconv"
 	"sync"
@@ -398,48 +399,48 @@ func TestSqlMapping(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	for columnName, sqlColumn := range sqlMapping.ColumnMap {
-		if columnName != "id" && columnName != "name" &&
-			columnName != "student_num" && columnName != "graduated_time" &&
-			columnName != "created_time" && columnName != "last_updated_time" {
-			t.Fatal("名不正确")
+	for fieldName, sqlColumn := range sqlMapping.ColumnMap {
+		if fieldName != "ID" && fieldName != "Name" &&
+			fieldName != "StudentNum" && fieldName != "GraduatedTime" &&
+			fieldName != "CreatedTime" && fieldName != "LastUpdatedTime" {
+			t.Fatal("字段名不正确")
 		}
 
 		if sqlColumn.Name != "id" && sqlColumn.Name != "name" &&
-			sqlColumn.Name != "student_num" && columnName != "graduated_time" &&
-			columnName != "created_time" && columnName != "last_updated_time" {
+			sqlColumn.Name != "student_num" && sqlColumn.Name != "graduated_time" &&
+			sqlColumn.Name != "created_time" && sqlColumn.Name != "last_updated_time" {
 			t.Fatal("列名不正确")
 		}
 
-		if sqlColumn.Name != columnName {
+		if sqlColumn.Name != strcase.ToSnake(fieldName) {
 			t.Fatal("列名不正确")
 		}
 
-		if sqlColumn.IsKey && columnName != "id" {
+		if sqlColumn.IsKey && sqlColumn.Name != "id" {
 			t.Fatal("键字段不正确")
 		}
 
-		if !sqlColumn.CanUpdate && (columnName != "id" && columnName != "student_num") {
+		if !sqlColumn.CanUpdate && (sqlColumn.Name != "id" && sqlColumn.Name != "student_num") {
 			t.Fatal("不可更新字段不正确")
 		}
 
-		if sqlColumn.CanUpdateClear && columnName != "name" {
+		if sqlColumn.CanUpdateClear && sqlColumn.Name != "name" {
 			t.Fatal("可清除字段不正确")
 		}
 
-		if !sqlColumn.CanQuery && columnName != "name" {
+		if !sqlColumn.CanQuery && sqlColumn.Name != "name" {
 			t.Fatal("可清除字段不正确")
 		}
 
-		if sqlColumn.InsertCallback && columnName != "name" {
+		if sqlColumn.InsertCallback && sqlColumn.Name != "name" {
 			t.Fatal("插入回调不正确")
 		}
 
-		if sqlColumn.UpdateCallback && columnName != "name" {
+		if sqlColumn.UpdateCallback && sqlColumn.Name != "name" {
 			t.Fatal("更新回调不正确")
 		}
 
-		if sqlColumn.QueryCallback && columnName != "student_num" {
+		if sqlColumn.QueryCallback && sqlColumn.Name != "student_num" {
 			t.Fatal("查询回调不正确")
 		}
 	}
@@ -451,30 +452,30 @@ func TestSqlResult(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	for columnName, sqlColumn := range sqlResult.ColumnMap {
-		if columnName != "id" && columnName != "name" &&
-			columnName != "student_num" && columnName != "graduated_time" &&
-			columnName != "created_time" && columnName != "last_updated_time" {
-			t.Fatal("名不正确")
+	for fieldName, sqlColumn := range sqlResult.ColumnMap {
+		if fieldName != "ID" && fieldName != "Name" &&
+			fieldName != "StudentNum" && fieldName != "GraduatedTime" &&
+			fieldName != "CreatedTime" && fieldName != "LastUpdatedTime" {
+			t.Fatal("字段名不正确")
 		}
 
 		if sqlColumn.Name != "id" && sqlColumn.Name != "name" &&
-			sqlColumn.Name != "student_num" && columnName != "graduated_time" &&
-			columnName != "created_time" && columnName != "last_updated_time" {
+			sqlColumn.Name != "student_num" && sqlColumn.Name != "graduated_time" &&
+			sqlColumn.Name != "created_time" && sqlColumn.Name != "last_updated_time" {
 			t.Fatal("列名不正确")
 		}
 
-		if sqlColumn.Name != columnName {
+		if sqlColumn.Name != strcase.ToSnake(fieldName) {
 			t.Fatal("列名不正确")
 		}
 
-		if columnName == "student_num" {
+		if sqlColumn.Name == "student_num" {
 			if sqlColumn.ResultColumnName != "student_num_alias" {
 				t.Fatal("结果列名不正确")
 			}
 		}
 
-		if sqlColumn.Callback && columnName != "graduated_time" {
+		if sqlColumn.Callback && sqlColumn.Name != "graduated_time" {
 			t.Fatal("回调不正确")
 		}
 	}