|
@@ -2,6 +2,7 @@ package shanghu
|
|
|
|
|
|
import (
|
|
|
orm "duoduo/database"
|
|
|
+ "errors"
|
|
|
"fmt"
|
|
|
"github.com/shopspring/decimal"
|
|
|
"time"
|
|
@@ -235,12 +236,17 @@ func (m *ClientPayTrans) SettleAdd(merchantAmount, clientAmount decimal.Decimal,
|
|
|
|
|
|
//做金额加减操作并且入日志库
|
|
|
merchantAmountAdd := merchantAccount.Amount.Add(merchantAmount)
|
|
|
- err = tx.Table("merchant_account").Model(&merchantAccount).Where("merchant_open_id = ? and version = ?", merchantOpenId, merchantAccount.Version).Updates(
|
|
|
+ result := tx.Table("merchant_account").Model(&merchantAccount).Where("merchant_open_id = ? and version = ?", merchantOpenId, merchantAccount.Version).Updates(
|
|
|
map[string]interface{}{
|
|
|
"amount": merchantAmountAdd,
|
|
|
"version": merchantAccount.Version + 1,
|
|
|
- "updated_at": time.Now()}).Error
|
|
|
- if err != nil {
|
|
|
+ "updated_at": time.Now()})
|
|
|
+
|
|
|
+ if result.Error != nil {
|
|
|
+ return result.Error
|
|
|
+ }
|
|
|
+ if result.RowsAffected <= 0 {
|
|
|
+ err = errors.New("rows is zero")
|
|
|
return err
|
|
|
}
|
|
|
|
|
@@ -263,12 +269,17 @@ func (m *ClientPayTrans) SettleAdd(merchantAmount, clientAmount decimal.Decimal,
|
|
|
}
|
|
|
|
|
|
clientAmountAdd := clientAccount.Amount.Add(clientAmount)
|
|
|
- err = tx.Table("merchant_client_account").Model(&clientAccount).Where("client_open_id = ? and version = ?", clientOpenId, clientAccount.Version).Updates(
|
|
|
+ result = tx.Table("merchant_client_account").Model(&clientAccount).Where("client_open_id = ? and version = ?", clientOpenId, clientAccount.Version).Updates(
|
|
|
map[string]interface{}{
|
|
|
"amount": clientAmountAdd,
|
|
|
"version": clientAccount.Version + 1,
|
|
|
- "updated_at": time.Now()}).Error
|
|
|
- if err != nil {
|
|
|
+ "updated_at": time.Now()})
|
|
|
+ if result.Error != nil {
|
|
|
+ return result.Error
|
|
|
+ }
|
|
|
+
|
|
|
+ if result.RowsAffected <= 0 {
|
|
|
+ err = errors.New("rows is zero")
|
|
|
return err
|
|
|
}
|
|
|
|
|
@@ -291,3 +302,157 @@ func (m *ClientPayTrans) SettleAdd(merchantAmount, clientAmount decimal.Decimal,
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+func (m *ClientPayTrans) SettleSubClient(clientAmount decimal.Decimal, clientOpenId string, cashOutId int64) error {
|
|
|
+ // 使用事务 添加
|
|
|
+ var err error
|
|
|
+ var clientAccount MerchantClientAccount
|
|
|
+ var cashOut CashOut
|
|
|
+ var amountPreClient decimal.Decimal
|
|
|
+ tx := orm.ShMysql.Begin()
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ } else {
|
|
|
+ tx.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ err = tx.Table("merchant_client_account").Select("*").Where("client_open_id = ?", clientOpenId).Find(&clientAccount).Error
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ amountPreClient = clientAccount.Amount
|
|
|
+
|
|
|
+ if clientAccount.Amount.Cmp(clientAmount) < 0 {
|
|
|
+ err = errors.New("账户金额不够")
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ clientAmountSub := clientAccount.Amount.Sub(clientAmount)
|
|
|
+ result := tx.Table("merchant_client_account").Model(&clientAccount).Where("client_open_id = ? and version = ?", clientOpenId, clientAccount.Version).Updates(
|
|
|
+ map[string]interface{}{
|
|
|
+ "amount": clientAmountSub,
|
|
|
+ "version": clientAccount.Version + 1,
|
|
|
+ "updated_at": time.Now()})
|
|
|
+ if result.Error != nil {
|
|
|
+ return result.Error
|
|
|
+ }
|
|
|
+
|
|
|
+ if result.RowsAffected <= 0 {
|
|
|
+ err = errors.New("rows is zero")
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ var clientAccountLog MerchantClientAccountLog
|
|
|
+
|
|
|
+ clientAccountLog.ClientOpenID = clientOpenId
|
|
|
+ clientAccountLog.UpdatedAt = time.Now()
|
|
|
+ clientAccountLog.AmountPre = amountPreClient
|
|
|
+ clientAccountLog.AmountAfter = clientAmountSub
|
|
|
+ clientAccountLog.ReviewAmountAfter = clientAccount.ReviewAmount
|
|
|
+ clientAccountLog.ReviewAmountPre = clientAccount.ReviewAmount
|
|
|
+ clientAccountLog.Amount = clientAmount
|
|
|
+ clientAccountLog.PayTransId = cashOutId
|
|
|
+ clientAccountLog.TransType = 2
|
|
|
+
|
|
|
+ err = tx.Table("merchant_client_account_log").Create(&clientAccountLog).Error
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ result = tx.Table("cash_out").Model(&cashOut).Where("id = ? ", cashOutId).Updates(
|
|
|
+ map[string]interface{}{
|
|
|
+ "status": 99, //体现成功
|
|
|
+ "account_status": 99, //分账成功
|
|
|
+ "updated_at": time.Now()})
|
|
|
+ if result.Error != nil {
|
|
|
+ return result.Error
|
|
|
+ }
|
|
|
+
|
|
|
+ if result.RowsAffected <= 0 {
|
|
|
+ err = errors.New("rows is zero")
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+func (m *ClientPayTrans) SettleSubMerchant(merchantAmount decimal.Decimal, merchantOpenId string, cashOutId int64) error {
|
|
|
+ // 使用事务 添加
|
|
|
+ var err error
|
|
|
+ var merchantAccount MerchantAccount
|
|
|
+ var cashOut CashOut
|
|
|
+ var amountPreMerchant decimal.Decimal
|
|
|
+ tx := orm.ShMysql.Begin()
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ } else {
|
|
|
+ tx.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ err = tx.Table("merchant_account").Select("*").Where("merchant_open_id = ?", merchantOpenId).Find(&merchantAccount).Error
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ amountPreMerchant = merchantAccount.Amount
|
|
|
+
|
|
|
+ if merchantAccount.Amount.Cmp(merchantAmount) < 0 {
|
|
|
+ err = errors.New("账户金额不够")
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ merchantAmountSub := merchantAccount.Amount.Sub(merchantAmount)
|
|
|
+ result := tx.Table("merchant_account").Model(&merchantAccount).Where("merchant_open_id = ? and version = ?", merchantOpenId, merchantAccount.Version).Updates(
|
|
|
+ map[string]interface{}{
|
|
|
+ "amount": merchantAmountSub,
|
|
|
+ "version": merchantAccount.Version + 1,
|
|
|
+ "updated_at": time.Now()})
|
|
|
+ if result.Error != nil {
|
|
|
+ return result.Error
|
|
|
+ }
|
|
|
+
|
|
|
+ if result.RowsAffected <= 0 {
|
|
|
+ err = errors.New("rows is zero")
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ var merchantAccountLog MerchantAccountLog
|
|
|
+
|
|
|
+ merchantAccountLog.MerchantOpenID = merchantOpenId
|
|
|
+ merchantAccountLog.UpdatedAt = time.Now()
|
|
|
+ merchantAccountLog.AmountPre = amountPreMerchant
|
|
|
+ merchantAccountLog.AmountAfter = merchantAmountSub
|
|
|
+ merchantAccountLog.ReviewAmountAfter = merchantAccount.ReviewAmount
|
|
|
+ merchantAccountLog.ReviewAmountPre = merchantAccount.ReviewAmount
|
|
|
+ merchantAccountLog.Amount = merchantAmount
|
|
|
+ merchantAccountLog.PayTransId = cashOutId
|
|
|
+ merchantAccountLog.TransType = 2
|
|
|
+
|
|
|
+ err = tx.Table("merchant_account_log").Create(&merchantAccountLog).Error
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ result = tx.Table("cash_out").Model(&cashOut).Where("id = ? ", cashOutId).Updates(
|
|
|
+ map[string]interface{}{
|
|
|
+ "status": 99, //体现成功
|
|
|
+ "account_status": 99, //分账成功
|
|
|
+ "updated_at": time.Now()})
|
|
|
+ if result.Error != nil {
|
|
|
+ return result.Error
|
|
|
+ }
|
|
|
+
|
|
|
+ if result.RowsAffected <= 0 {
|
|
|
+ err = errors.New("rows is zero")
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+
|
|
|
+}
|