mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-18 16:54:25 +08:00
improve performance
This commit is contained in:
@@ -1092,54 +1092,64 @@ func (s *TransactionService) DeleteTransaction(c core.Context, uid int64, transa
|
|||||||
|
|
||||||
// Update account table
|
// Update account table
|
||||||
if oldTransaction.Type == models.TRANSACTION_DB_TYPE_MODIFY_BALANCE {
|
if oldTransaction.Type == models.TRANSACTION_DB_TYPE_MODIFY_BALANCE {
|
||||||
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
if oldTransaction.RelatedAccountAmount != 0 {
|
||||||
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)", oldTransaction.RelatedAccountAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)", oldTransaction.RelatedAccountAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
} else if updatedRows < 1 {
|
} else if updatedRows < 1 {
|
||||||
log.Errorf(c, "[transactions.DeleteTransaction] failed to update account balance")
|
log.Errorf(c, "[transactions.DeleteTransaction] failed to update account balance")
|
||||||
return errs.ErrDatabaseOperationFailed
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if oldTransaction.Type == models.TRANSACTION_DB_TYPE_INCOME {
|
} else if oldTransaction.Type == models.TRANSACTION_DB_TYPE_INCOME {
|
||||||
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
if oldTransaction.Amount != 0 {
|
||||||
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)", oldTransaction.Amount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)", oldTransaction.Amount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
} else if updatedRows < 1 {
|
} else if updatedRows < 1 {
|
||||||
log.Errorf(c, "[transactions.DeleteTransaction] failed to update account balance")
|
log.Errorf(c, "[transactions.DeleteTransaction] failed to update account balance")
|
||||||
return errs.ErrDatabaseOperationFailed
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if oldTransaction.Type == models.TRANSACTION_DB_TYPE_EXPENSE {
|
} else if oldTransaction.Type == models.TRANSACTION_DB_TYPE_EXPENSE {
|
||||||
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
if oldTransaction.Amount != 0 {
|
||||||
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)", oldTransaction.Amount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)", oldTransaction.Amount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
} else if updatedRows < 1 {
|
} else if updatedRows < 1 {
|
||||||
log.Errorf(c, "[transactions.DeleteTransaction] failed to update account balance")
|
log.Errorf(c, "[transactions.DeleteTransaction] failed to update account balance")
|
||||||
return errs.ErrDatabaseOperationFailed
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if oldTransaction.Type == models.TRANSACTION_DB_TYPE_TRANSFER_OUT {
|
} else if oldTransaction.Type == models.TRANSACTION_DB_TYPE_TRANSFER_OUT {
|
||||||
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
if oldTransaction.Amount != 0 {
|
||||||
updatedSourceRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)", oldTransaction.Amount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedSourceRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)", oldTransaction.Amount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
} else if updatedSourceRows < 1 {
|
} else if updatedSourceRows < 1 {
|
||||||
log.Errorf(c, "[transactions.DeleteTransaction] failed to update account balance")
|
log.Errorf(c, "[transactions.DeleteTransaction] failed to update account balance")
|
||||||
return errs.ErrDatabaseOperationFailed
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
destinationAccount.UpdatedUnixTime = time.Now().Unix()
|
if oldTransaction.RelatedAccountAmount != 0 {
|
||||||
updatedDestinationRows, err := sess.ID(destinationAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)", oldTransaction.RelatedAccountAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", destinationAccount.Uid, false).Update(destinationAccount)
|
destinationAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedDestinationRows, err := sess.ID(destinationAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)", oldTransaction.RelatedAccountAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", destinationAccount.Uid, false).Update(destinationAccount)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
} else if updatedDestinationRows < 1 {
|
} else if updatedDestinationRows < 1 {
|
||||||
log.Errorf(c, "[transactions.DeleteTransaction] failed to update account balance")
|
log.Errorf(c, "[transactions.DeleteTransaction] failed to update related account balance")
|
||||||
return errs.ErrDatabaseOperationFailed
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if oldTransaction.Type == models.TRANSACTION_DB_TYPE_TRANSFER_IN {
|
} else if oldTransaction.Type == models.TRANSACTION_DB_TYPE_TRANSFER_IN {
|
||||||
return errs.ErrTransactionTypeInvalid
|
return errs.ErrTransactionTypeInvalid
|
||||||
@@ -1777,59 +1787,69 @@ func (s *TransactionService) doCreateTransaction(c core.Context, database *datas
|
|||||||
|
|
||||||
// Update account table
|
// Update account table
|
||||||
if transaction.Type == models.TRANSACTION_DB_TYPE_MODIFY_BALANCE {
|
if transaction.Type == models.TRANSACTION_DB_TYPE_MODIFY_BALANCE {
|
||||||
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
if transaction.RelatedAccountAmount != 0 {
|
||||||
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)", transaction.RelatedAccountAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)", transaction.RelatedAccountAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance, because %s", err.Error())
|
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance, because %s", err.Error())
|
||||||
return err
|
return err
|
||||||
} else if updatedRows < 1 {
|
} else if updatedRows < 1 {
|
||||||
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance")
|
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance")
|
||||||
return errs.ErrDatabaseOperationFailed
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if transaction.Type == models.TRANSACTION_DB_TYPE_INCOME {
|
} else if transaction.Type == models.TRANSACTION_DB_TYPE_INCOME {
|
||||||
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
if transaction.Amount != 0 {
|
||||||
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)", transaction.Amount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)", transaction.Amount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance, because %s", err.Error())
|
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance, because %s", err.Error())
|
||||||
return err
|
return err
|
||||||
} else if updatedRows < 1 {
|
} else if updatedRows < 1 {
|
||||||
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance")
|
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance")
|
||||||
return errs.ErrDatabaseOperationFailed
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if transaction.Type == models.TRANSACTION_DB_TYPE_EXPENSE {
|
} else if transaction.Type == models.TRANSACTION_DB_TYPE_EXPENSE {
|
||||||
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
if transaction.Amount != 0 {
|
||||||
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)", transaction.Amount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)", transaction.Amount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance, because %s", err.Error())
|
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance, because %s", err.Error())
|
||||||
return err
|
return err
|
||||||
} else if updatedRows < 1 {
|
} else if updatedRows < 1 {
|
||||||
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance")
|
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance")
|
||||||
return errs.ErrDatabaseOperationFailed
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if transaction.Type == models.TRANSACTION_DB_TYPE_TRANSFER_OUT {
|
} else if transaction.Type == models.TRANSACTION_DB_TYPE_TRANSFER_OUT {
|
||||||
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
if transaction.Amount != 0 {
|
||||||
updatedSourceRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)", transaction.Amount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedSourceRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)", transaction.Amount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance, because %s", err.Error())
|
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance, because %s", err.Error())
|
||||||
return err
|
return err
|
||||||
} else if updatedSourceRows < 1 {
|
} else if updatedSourceRows < 1 {
|
||||||
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance")
|
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance")
|
||||||
return errs.ErrDatabaseOperationFailed
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
destinationAccount.UpdatedUnixTime = time.Now().Unix()
|
if transaction.RelatedAccountAmount != 0 {
|
||||||
updatedDestinationRows, err := sess.ID(destinationAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)", transaction.RelatedAccountAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", destinationAccount.Uid, false).Update(destinationAccount)
|
destinationAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedDestinationRows, err := sess.ID(destinationAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)", transaction.RelatedAccountAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", destinationAccount.Uid, false).Update(destinationAccount)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance, because %s", err.Error())
|
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance, because %s", err.Error())
|
||||||
return err
|
return err
|
||||||
} else if updatedDestinationRows < 1 {
|
} else if updatedDestinationRows < 1 {
|
||||||
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance")
|
log.Errorf(c, "[transactions.doCreateTransaction] failed to update account balance")
|
||||||
return errs.ErrDatabaseOperationFailed
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if transaction.Type == models.TRANSACTION_DB_TYPE_TRANSFER_IN {
|
} else if transaction.Type == models.TRANSACTION_DB_TYPE_TRANSFER_IN {
|
||||||
return errs.ErrTransactionTypeInvalid
|
return errs.ErrTransactionTypeInvalid
|
||||||
|
|||||||
Reference in New Issue
Block a user