|
|
@@ -11,6 +11,7 @@ import (
|
|
|
"git.sxidc.com/go-framework/baize/framwork/infrastructure/database/sql"
|
|
|
"git.sxidc.com/go-tools/utils/strutils"
|
|
|
"git.sxidc.com/service-supports/fserr"
|
|
|
+ "reflect"
|
|
|
)
|
|
|
|
|
|
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存在性校验
|
|
|
- fromExist, err := database.CheckExist(i.DBExecutor(), &sql.CheckExistExecuteParams{
|
|
|
+ fromResult, err := database.QueryOne(i.DBExecutor(), &sql.QueryOneExecuteParams{
|
|
|
TableName: fromTableName,
|
|
|
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 {
|
|
|
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 {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
- if strutils.IsStringNotEmpty(toID) {
|
|
|
+ if strutils.IsStringNotEmpty(newToID) {
|
|
|
// to存在性校验
|
|
|
toExist, err := database.CheckExist(i.DBExecutor(), &sql.CheckExistExecuteParams{
|
|
|
TableName: toTableName,
|
|
|
- Conditions: sql.NewConditions().Equal(domain.ColumnID, toID),
|
|
|
+ Conditions: sql.NewConditions().Equal(domain.ColumnID, newToID),
|
|
|
})
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
@@ -72,7 +84,7 @@ func Update(fromTableName string, fromRelationFieldName string, fromRelationColu
|
|
|
if strutils.IsStringNotEmpty(fromTableName) {
|
|
|
err := database.Update(tx, &sql.UpdateExecuteParams{
|
|
|
TableName: fromTableName,
|
|
|
- TableRow: sql.NewTableRow().Add(fromRelationColumnName, toID),
|
|
|
+ TableRow: sql.NewTableRow().Add(fromRelationColumnName, newToID),
|
|
|
Conditions: sql.NewConditions().Equal(domain.ColumnID, fromEntity.GetID()),
|
|
|
})
|
|
|
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{
|
|
|
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 {
|
|
|
return err
|