From f76017b10ea079dc3f820659f2d4faff51b9efae Mon Sep 17 00:00:00 2001 From: MaysWind Date: Thu, 10 Dec 2020 23:52:54 +0800 Subject: [PATCH] code refactor --- pkg/services/accounts.go | 2 +- pkg/services/transactions.go | 24 ++++++++++++------------ pkg/utils/datetimes.go | 10 +++++++++- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/pkg/services/accounts.go b/pkg/services/accounts.go index 1e5528ec..2843c9e4 100644 --- a/pkg/services/accounts.go +++ b/pkg/services/accounts.go @@ -121,7 +121,7 @@ func (s *AccountService) CreateAccounts(mainAccount *models.Account, childrenAcc } } - transactionTime := utils.GetTransactionTimeFromUnixTime(now) + transactionTime := utils.GetMinTransactionTimeFromUnixTime(now) for i := 0; i < len(allAccounts); i++ { allAccounts[i].Deleted = false diff --git a/pkg/services/transactions.go b/pkg/services/transactions.go index be32847e..d73751f1 100644 --- a/pkg/services/transactions.go +++ b/pkg/services/transactions.go @@ -144,7 +144,7 @@ func (s *TransactionService) CreateTransaction(transaction *models.Transaction) } transaction.TransactionId = s.GenerateUuid(uuid.UUID_TYPE_TRANSACTION) - transaction.TransactionTime = (transaction.TransactionTime / 1000) * 1000 + transaction.TransactionTime = utils.GetMinTransactionTimeFromUnixTime(utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime)) transaction.CreatedUnixTime = time.Now().Unix() transaction.UpdatedUnixTime = time.Now().Unix() @@ -222,16 +222,16 @@ func (s *TransactionService) CreateTransaction(transaction *models.Transaction) if err != nil || createdRows < 1 { // maybe another transaction has same time sameSecondLatestTransaction := &models.Transaction{} - currentSecondUnixtime := (transaction.TransactionTime / 1000) * 1000 - nextSecondUnixtime := currentSecondUnixtime + 1000 + minTransactionTime := utils.GetMinTransactionTimeFromUnixTime(utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime)) + maxTransactionTime := utils.GetMaxTransactionTimeFromUnixTime(utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime)) - has, err = sess.Where("uid=? AND deleted=? AND transaction_time>=? AND transaction_time=? AND transaction_time<=?", transaction.Uid, false, minTransactionTime, maxTransactionTime).OrderBy("transaction_time desc").Limit(1).Get(sameSecondLatestTransaction) if err != nil { return err } else if !has { return errs.ErrDatabaseOperationFailed - } else if sameSecondLatestTransaction.TransactionTime == nextSecondUnixtime - 1 { + } else if sameSecondLatestTransaction.TransactionTime == maxTransactionTime - 1 { return errs.ErrTooMuchTransactionInOneSecond } @@ -306,7 +306,7 @@ func (s *TransactionService) ModifyTransaction(transaction *models.Transaction) now := time.Now().Unix() - transaction.TransactionTime = (transaction.TransactionTime / 1000) * 1000 + transaction.TransactionTime = utils.GetMinTransactionTimeFromUnixTime(utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime)) transaction.UpdatedUnixTime = now updateCols = append(updateCols, "updated_unix_time") @@ -394,16 +394,16 @@ func (s *TransactionService) ModifyTransaction(transaction *models.Transaction) updateCols = append(updateCols, "category_id") } - if transaction.TransactionTime / 1000 != oldTransaction.TransactionTime / 1000 { + if utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime) != utils.GetUnixTimeFromTransactionTime(oldTransaction.TransactionTime) { sameSecondLatestTransaction := &models.Transaction{} - currentSecondUnixtime := (transaction.TransactionTime / 1000) * 1000 - nextSecondUnixtime := currentSecondUnixtime + 1000 + minTransactionTime := utils.GetMinTransactionTimeFromUnixTime(utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime)) + maxTransactionTime := utils.GetMaxTransactionTimeFromUnixTime(utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime)) - has, err = sess.Where("uid=? AND deleted=? AND transaction_time>=? AND transaction_time=? AND transaction_time<=?", transaction.Uid, false, minTransactionTime, maxTransactionTime).OrderBy("transaction_time desc").Limit(1).Get(sameSecondLatestTransaction) - if has && sameSecondLatestTransaction.TransactionTime < nextSecondUnixtime - 1 { + if has && sameSecondLatestTransaction.TransactionTime < maxTransactionTime - 1 { transaction.TransactionTime = sameSecondLatestTransaction.TransactionTime + 1 - } else if has && sameSecondLatestTransaction.TransactionTime == nextSecondUnixtime - 1 { + } else if has && sameSecondLatestTransaction.TransactionTime == maxTransactionTime - 1 { return errs.ErrTooMuchTransactionInOneSecond } diff --git a/pkg/utils/datetimes.go b/pkg/utils/datetimes.go index 927f7ae3..718b75c2 100644 --- a/pkg/utils/datetimes.go +++ b/pkg/utils/datetimes.go @@ -12,6 +12,14 @@ func ParseFromLongDateTime(t string) (time.Time, error) { return time.Parse(LongDateTimeFormat, t) } -func GetTransactionTimeFromUnixTime(unixTime int64) int64 { +func GetMinTransactionTimeFromUnixTime(unixTime int64) int64 { return unixTime * 1000 } + +func GetMaxTransactionTimeFromUnixTime(unixTime int64) int64 { + return unixTime * 1000 + 999 +} + +func GetUnixTimeFromTransactionTime(transactionTime int64) int64 { + return transactionTime / 1000 +}