Browse Source

修改bug

yjp 1 year ago
parent
commit
d4f8124e9e
1 changed files with 33 additions and 10 deletions
  1. 33 10
      convenient/relation/one2one/service.go

+ 33 - 10
convenient/relation/one2one/service.go

@@ -11,6 +11,7 @@ import (
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure/database/sql"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure/database/sql"
 	"git.sxidc.com/go-tools/utils/strutils"
 	"git.sxidc.com/go-tools/utils/strutils"
 	"git.sxidc.com/service-supports/fserr"
 	"git.sxidc.com/service-supports/fserr"
+	"reflect"
 )
 )
 
 
 func Update(fromTableName string, fromRelationFieldName string, fromRelationColumnName string, toTableName string, toDomainCNName string, toRelationColumnName string) binding.ServiceFunc[any] {
 func Update(fromTableName string, fromRelationFieldName string, fromRelationColumnName string, toTableName string, toDomainCNName string, toRelationColumnName string) binding.ServiceFunc[any] {
@@ -36,28 +37,39 @@ func Update(fromTableName string, fromRelationFieldName string, fromRelationColu
 		}
 		}
 
 
 		// from存在性校验
 		// from存在性校验
-		fromExist, err := database.CheckExist(i.DBExecutor(), &sql.CheckExistExecuteParams{
+		fromResult, err := database.QueryOne(i.DBExecutor(), &sql.QueryOneExecuteParams{
 			TableName:  fromTableName,
 			TableName:  fromTableName,
 			Conditions: sql.NewConditions().Equal(domain.ColumnID, fromEntity.GetID()),
 			Conditions: sql.NewConditions().Equal(domain.ColumnID, fromEntity.GetID()),
 		})
 		})
+		if err != nil {
+			if database.IsErrorDBRecordNotExist(err) {
+				return nil, fserr.New(fromEntity.DomainCNName() + "不存在")
+			}
+
+			return nil, err
+		}
+
+		existFrom := reflect.New(reflect.TypeOf(object).Elem()).Interface()
+		err = sql.ParseSqlResult(fromResult, existFrom)
 		if err != nil {
 		if err != nil {
 			return nil, err
 			return nil, err
 		}
 		}
 
 
-		if !fromExist {
-			return nil, fserr.New(fromEntity.DomainCNName() + "不存在")
+		currentToID, err := domain.Field[string](existFrom, fromRelationFieldName)
+		if err != nil {
+			return nil, err
 		}
 		}
 
 
-		toID, err := domain.Field[string](object, fromRelationFieldName)
+		newToID, err := domain.Field[string](object, fromRelationFieldName)
 		if err != nil {
 		if err != nil {
 			return nil, err
 			return nil, err
 		}
 		}
 
 
-		if strutils.IsStringNotEmpty(toID) {
+		if strutils.IsStringNotEmpty(newToID) {
 			// to存在性校验
 			// to存在性校验
 			toExist, err := database.CheckExist(i.DBExecutor(), &sql.CheckExistExecuteParams{
 			toExist, err := database.CheckExist(i.DBExecutor(), &sql.CheckExistExecuteParams{
 				TableName:  toTableName,
 				TableName:  toTableName,
-				Conditions: sql.NewConditions().Equal(domain.ColumnID, toID),
+				Conditions: sql.NewConditions().Equal(domain.ColumnID, newToID),
 			})
 			})
 			if err != nil {
 			if err != nil {
 				return nil, err
 				return nil, err
@@ -72,7 +84,7 @@ func Update(fromTableName string, fromRelationFieldName string, fromRelationColu
 			if strutils.IsStringNotEmpty(fromTableName) {
 			if strutils.IsStringNotEmpty(fromTableName) {
 				err := database.Update(tx, &sql.UpdateExecuteParams{
 				err := database.Update(tx, &sql.UpdateExecuteParams{
 					TableName:  fromTableName,
 					TableName:  fromTableName,
-					TableRow:   sql.NewTableRow().Add(fromRelationColumnName, toID),
+					TableRow:   sql.NewTableRow().Add(fromRelationColumnName, newToID),
 					Conditions: sql.NewConditions().Equal(domain.ColumnID, fromEntity.GetID()),
 					Conditions: sql.NewConditions().Equal(domain.ColumnID, fromEntity.GetID()),
 				})
 				})
 				if err != nil {
 				if err != nil {
@@ -80,11 +92,22 @@ func Update(fromTableName string, fromRelationFieldName string, fromRelationColu
 				}
 				}
 			}
 			}
 
 
-			if strutils.IsStringNotEmpty(toTableName) {
+			if strutils.IsStringNotEmpty(toTableName) &&
+				(strutils.IsStringNotEmpty(currentToID) || strutils.IsStringNotEmpty(newToID)) {
+				familyID := fromEntity.GetID()
+				if strutils.IsStringEmpty(newToID) {
+					familyID = ""
+				}
+
+				updateToID := currentToID
+				if strutils.IsStringEmpty(currentToID) {
+					updateToID = newToID
+				}
+
 				err := database.Update(tx, &sql.UpdateExecuteParams{
 				err := database.Update(tx, &sql.UpdateExecuteParams{
 					TableName:  toTableName,
 					TableName:  toTableName,
-					TableRow:   sql.NewTableRow().Add(toRelationColumnName, fromEntity.GetID()),
-					Conditions: sql.NewConditions().Equal(domain.ColumnID, toID),
+					TableRow:   sql.NewTableRow().Add(toRelationColumnName, familyID),
+					Conditions: sql.NewConditions().Equal(domain.ColumnID, updateToID),
 				})
 				})
 				if err != nil {
 				if err != nil {
 					return err
 					return err