Procházet zdrojové kódy

Merge branch 'develop' of k.zhang/duoduo into master

k.zhang před 1 rokem
rodič
revize
729577be55
3 změnil soubory, kde provedl 73 přidání a 45 odebrání
  1. 14 0
      models/shanghu/client.user.go
  2. 44 43
      models/shanghu/pay.go
  3. 15 2
      report/shang.hu.ka.go

+ 14 - 0
models/shanghu/client.user.go

@@ -56,6 +56,20 @@ func (m *MerchantClientUser) GetUserInfo() (MerchantClientUser, error) {
 
 }
 
+func (m *MerchantClientUser) GetUserInfoByCode() (MerchantClientUser, error) {
+	var doc MerchantClientUser
+
+	table := orm.ShMysql.Table(m.TableName())
+	table = table.Where("code = ?  ", m.Code)
+
+	if err := table.Select("*").First(&doc).Error; err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+
+}
+
 func (u *MerchantClientUser) Create() (MerchantClientUser, error) {
 	var doc MerchantClientUser
 	var err error

+ 44 - 43
models/shanghu/pay.go

@@ -216,24 +216,56 @@ func (m *ClientPayTrans) SettleAdd(merchantAmount, clientAmount decimal.Decimal,
 	}
 	amountPreMerchant = merchantAccount.Amount
 
-	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 clientOpenId != "" { //原始码不抽佣金
+		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 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(clientAmount)
+		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 = clientAmount
+		clientAccountLog.PayTransId = payTransId
+
+		err = tx.Table("merchant_client_account_log").Create(&clientAccountLog).Error
 		if err != nil {
 			return err
 		}
 	}
 
-	amountPreClient = clientAccount.Amount
-
 	//做金额加减操作并且入日志库
 	merchantAmountAdd := merchantAccount.Amount.Add(merchantAmount)
 	result := tx.Table("merchant_account").Model(&merchantAccount).Where("merchant_open_id = ? and version = ?", merchantOpenId, merchantAccount.Version).Updates(
@@ -268,37 +300,6 @@ func (m *ClientPayTrans) SettleAdd(merchantAmount, clientAmount decimal.Decimal,
 		return err
 	}
 
-	clientAmountAdd := clientAccount.Amount.Add(clientAmount)
-	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 = clientAmount
-	clientAccountLog.PayTransId = payTransId
-
-	err = tx.Table("merchant_client_account_log").Create(&clientAccountLog).Error
-	if err != nil {
-		return err
-	}
-
 	return nil
 
 }

+ 15 - 2
report/shang.hu.ka.go

@@ -18,6 +18,7 @@ func ClientAccount() {
 	for true {
 		//查询订单信息
 		var account shanghu.ClientPayTrans
+		var saleOpenid string     //分销人员id
 		account.AccountStatus = 1 //未分账
 		account.Status = 2        //支付成功
 		clientTrans, err := account.GetPayTransByStatus()
@@ -58,15 +59,27 @@ func ClientAccount() {
 		var clientAmount decimal.Decimal
 		if clientTrans.InvitationCode == "yuanshima" {
 			clientAmount = decimal.NewFromInt(0)
+			saleOpenid = ""
 		} else {
 			clientAmount = clientTrans.Amount.Mul(decimal.NewFromInt(merchantCard.RebateRate)).Div(decimal.NewFromInt(100)).Round(2)
-
+			var accountByCode shanghu.MerchantClientUser
+			accountByCode.Code = clientTrans.InvitationCode
+			codeInfo, err := accountByCode.GetUserInfoByCode()
+			if err != nil {
+				dataErr := make(map[string]interface{})
+				dataErr["account_status"] = 2            //分账失败
+				dataErr["account_err_log"] = err.Error() //分账失败日志
+				dataErr["updated_at"] = time.Now()
+				err = clientTrans.UpdateById(dataErr)
+			}
+			saleOpenid = codeInfo.ClientOpenID
 		}
 		fmt.Println(clientAmount)
 		merchantAmount := clientTrans.Amount.Sub(clientAmount).Round(2)
 		fmt.Println(merchantAmount)
+
 		//乐观锁
-		err = account.SettleAdd(merchantAmount, clientAmount, merchantCard.MerchantOpenID, clientTrans.ClientOpenID, clientTrans.ID)
+		err = account.SettleAdd(merchantAmount, clientAmount, merchantCard.MerchantOpenID, saleOpenid, clientTrans.ID)
 		if err != nil {
 			dataErr := make(map[string]interface{})
 			dataErr["account_status"] = 2            //分账失败