|
@@ -304,6 +304,73 @@ func (m *ClientPayTrans) SettleAdd(merchantAmount, clientAmount decimal.Decimal,
|
|
|
|
|
|
}
|
|
|
|
|
|
+func (m *ClientPayTrans) SettleAddCashOutFee(amount decimal.Decimal, clientOpenId string, cashOutId int64) error {
|
|
|
+ // 使用事务 添加
|
|
|
+ var err error
|
|
|
+ var clientAccount MerchantClientAccount
|
|
|
+ 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 && err.Error() != "record not found" {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ if clientAccount.ID == 0 {
|
|
|
+ clientAccount.ClientOpenID = clientOpenId
|
|
|
+ clientAccount.Version = 1
|
|
|
+ clientAccount.UpdatedAt = time.Now()
|
|
|
+ clientAccount.CreatedAt = time.Now()
|
|
|
+ err = tx.Table("merchant_client_account").Create(&clientAccount).Error
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ amountPreClient = clientAccount.Amount
|
|
|
+
|
|
|
+ clientAmountAdd := clientAccount.Amount.Add(amount)
|
|
|
+ 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()})
|
|
|
+ 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 = clientAmountAdd
|
|
|
+ clientAccountLog.ReviewAmountAfter = clientAccount.ReviewAmount
|
|
|
+ clientAccountLog.ReviewAmountPre = clientAccount.ReviewAmount
|
|
|
+ clientAccountLog.Amount = amount
|
|
|
+ clientAccountLog.PayTransId = cashOutId
|
|
|
+ clientAccountLog.TransType = 3 //服务费
|
|
|
+
|
|
|
+ err = tx.Table("merchant_client_account_log").Create(&clientAccountLog).Error
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
func (m *ClientPayTrans) SettleSubClient(clientAmount decimal.Decimal, clientOpenId string, cashOutId int64) error {
|
|
|
// 使用事务 添加
|
|
|
var err error
|