335 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			335 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package udunservice
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"encoding/json"
							 | 
						||
| 
								 | 
							
									log "github.com/go-admin-team/go-admin-core/logger"
							 | 
						||
| 
								 | 
							
									"github.com/shopspring/decimal"
							 | 
						||
| 
								 | 
							
									"go-admin/app/admin/models"
							 | 
						||
| 
								 | 
							
									"go-admin/pkg/timehelper"
							 | 
						||
| 
								 | 
							
									"go-admin/pkg/udunhelper"
							 | 
						||
| 
								 | 
							
									"go-admin/pkg/utility"
							 | 
						||
| 
								 | 
							
									"go.uber.org/zap"
							 | 
						||
| 
								 | 
							
									"gorm.io/gorm"
							 | 
						||
| 
								 | 
							
									"math"
							 | 
						||
| 
								 | 
							
									"strconv"
							 | 
						||
| 
								 | 
							
									"strings"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// TradeCallback 充值,提币回调
							 | 
						||
| 
								 | 
							
								func TradeCallback(orm *gorm.DB, timestamp, nonce, body, sign string) string {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									log.Error("充值,提币回调返回值", zap.String("body", body), zap.String("timestamp", timestamp), zap.String("nonce", nonce),
							 | 
						||
| 
								 | 
							
										zap.String("sign", sign))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									//验证签名
							 | 
						||
| 
								 | 
							
									sign1 := udunhelper.CheckCallBackSign(timestamp, nonce, body)
							 | 
						||
| 
								 | 
							
									//udunhelper.CheckCallBackSign()
							 | 
						||
| 
								 | 
							
									if sign != sign1 {
							 | 
						||
| 
								 | 
							
										log.Error("充值,提币回调返回值 签名不正确", zap.String("body", body), zap.String("timestamp", timestamp), zap.String("nonce", nonce),
							 | 
						||
| 
								 | 
							
											zap.String("sign", sign))
							 | 
						||
| 
								 | 
							
										return "error"
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// 反序列化
							 | 
						||
| 
								 | 
							
									var trade udunhelper.CallBackRes
							 | 
						||
| 
								 | 
							
									if err := json.Unmarshal([]byte(body), &trade); err != nil {
							 | 
						||
| 
								 | 
							
										return "error"
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									// 充值
							 | 
						||
| 
								 | 
							
									if trade.TradeType == 1 {
							 | 
						||
| 
								 | 
							
										//
							 | 
						||
| 
								 | 
							
										return handleRecharge(orm, trade, timestamp)
							 | 
						||
| 
								 | 
							
									} else if trade.TradeType == 2 {
							 | 
						||
| 
								 | 
							
										//提币
							 | 
						||
| 
								 | 
							
										//return handleWithdraw(trade)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return "success"
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 充值回调处理
							 | 
						||
| 
								 | 
							
								func handleRecharge(orm *gorm.DB, trade udunhelper.CallBackRes, timestamp string) string {
							 | 
						||
| 
								 | 
							
									// 检测是否已经写入,根据交易Hash判断是否已经存在充值记录
							 | 
						||
| 
								 | 
							
									var charge models.LineRecharge
							 | 
						||
| 
								 | 
							
									err := orm.Model(&models.LineRecharge{}).Where("txid = ?", trade.TxId).Find(&charge).Error
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										log.Error("GetVtsRechargeByOrderNo", zap.Error(err))
							 | 
						||
| 
								 | 
							
										return "error"
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if charge.Status == "2" {
							 | 
						||
| 
								 | 
							
										// 已经成功,则不继续写入
							 | 
						||
| 
								 | 
							
										log.Error("已经成功,则不继续写入", zap.String("txId", trade.TxId))
							 | 
						||
| 
								 | 
							
										return "error"
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// 充币通知
							 | 
						||
| 
								 | 
							
									amount := getBalance(trade.Amount, trade.Decimals)
							 | 
						||
| 
								 | 
							
									fee := getBalance(trade.Fee, trade.Decimals)
							 | 
						||
| 
								 | 
							
									// 查询钱包信息
							 | 
						||
| 
								 | 
							
									var wallet models.LineWallet
							 | 
						||
| 
								 | 
							
									err = orm.Model(&models.LineWallet{}).Where("address = ?", trade.Address).Find(&wallet).Error
							 | 
						||
| 
								 | 
							
									//wallet, err := walletdb.GetVtsWalletByAddress(trade.Address)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										log.Error("GetVtsWalletByAddress", zap.Error(err), zap.String("address", trade.Address))
							 | 
						||
| 
								 | 
							
										return "error"
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									// 加载币种信息
							 | 
						||
| 
								 | 
							
									var udCoin models.LineUduncoin
							 | 
						||
| 
								 | 
							
									err = orm.Model(&models.LineUduncoin{}).Where("main_coin_type = ? AND coin_type = ?", trade.MainCoinType, trade.CoinType).Find(&udCoin).Error
							 | 
						||
| 
								 | 
							
									//udCoin, err := uduncoindb.GetVtsUduncoinItemByCoinType(trade.MainCoinType, trade.CoinType)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										log.Error("GetVtsUduncoinItemByCoinType", zap.Error(err), zap.String("MainCoinType", trade.MainCoinType),
							 | 
						||
| 
								 | 
							
											zap.String("CoinType", trade.CoinType))
							 | 
						||
| 
								 | 
							
										return "error"
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									height := utility.StringAsInteger(trade.BlockHigh)
							 | 
						||
| 
								 | 
							
									//currTime := time.Now()
							 | 
						||
| 
								 | 
							
									status := 1
							 | 
						||
| 
								 | 
							
									switch trade.Status {
							 | 
						||
| 
								 | 
							
									case 0:
							 | 
						||
| 
								 | 
							
										status = 1
							 | 
						||
| 
								 | 
							
									case 1:
							 | 
						||
| 
								 | 
							
										status = 1
							 | 
						||
| 
								 | 
							
									case 2:
							 | 
						||
| 
								 | 
							
										status = 3 // 失败
							 | 
						||
| 
								 | 
							
									case 3:
							 | 
						||
| 
								 | 
							
										status = 2 // 成功
							 | 
						||
| 
								 | 
							
									case 4:
							 | 
						||
| 
								 | 
							
										status = 3 // 失败
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									coinCode := udCoin.Symbol
							 | 
						||
| 
								 | 
							
									if strings.EqualFold(coinCode, "TRCUSDT") {
							 | 
						||
| 
								 | 
							
										coinCode = "USDT"
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									//coin := coinservice.CoinCache.GetByCode(coinCode)
							 | 
						||
| 
								 | 
							
									//if coin.Id == 0 {
							 | 
						||
| 
								 | 
							
									//	loghelper.Error("TradeCallback 充值,提币回调 未找到系统对应的币种Id", zap.String("udCoin.Symbol", udCoin.Symbol))
							 | 
						||
| 
								 | 
							
									//	return "error"
							 | 
						||
| 
								 | 
							
									//}
							 | 
						||
| 
								 | 
							
									t1 := timehelper.IntToTime(utility.StringAsInt64(timestamp))
							 | 
						||
| 
								 | 
							
									//timehelper.IntToTime()
							 | 
						||
| 
								 | 
							
									// 充值
							 | 
						||
| 
								 | 
							
									recharge := models.LineRecharge{
							 | 
						||
| 
								 | 
							
										UserId:       wallet.UserId,
							 | 
						||
| 
								 | 
							
										Confirms:     strconv.Itoa(0),
							 | 
						||
| 
								 | 
							
										TranType:     strconv.Itoa(1),
							 | 
						||
| 
								 | 
							
										BlockIndex:   strconv.Itoa(height),
							 | 
						||
| 
								 | 
							
										Amount:       utility.FloatToStr(amount),
							 | 
						||
| 
								 | 
							
										Fee:          utility.FloatToStr(fee),
							 | 
						||
| 
								 | 
							
										Account:      "",
							 | 
						||
| 
								 | 
							
										Address:      trade.Address,
							 | 
						||
| 
								 | 
							
										Txid:         trade.TxId,
							 | 
						||
| 
								 | 
							
										BlockTime:    t1,
							 | 
						||
| 
								 | 
							
										TimeReceived: t1,
							 | 
						||
| 
								 | 
							
										MainCoin:     udCoin.MainSymbol,
							 | 
						||
| 
								 | 
							
										OrderNo:      trade.TradeId, // 流水号
							 | 
						||
| 
								 | 
							
										Status:       strconv.Itoa(status),
							 | 
						||
| 
								 | 
							
										State:        strconv.Itoa(trade.Status),
							 | 
						||
| 
								 | 
							
										AddressFrom:  "",
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									// 加载账户信息
							 | 
						||
| 
								 | 
							
									//beforeAmount := float64(0)
							 | 
						||
| 
								 | 
							
									//afterAmount := float64(0)
							 | 
						||
| 
								 | 
							
									if trade.Status == 3 {
							 | 
						||
| 
								 | 
							
										tx := orm.Begin()
							 | 
						||
| 
								 | 
							
										err := tx.Model(&models.LineRecharge{}).Create(&recharge).Error
							 | 
						||
| 
								 | 
							
										if err != nil {
							 | 
						||
| 
								 | 
							
											tx.Rollback()
							 | 
						||
| 
								 | 
							
											log.Error("create LineRecharge err", zap.Error(err), zap.String("wallet.UserId", strconv.FormatInt(wallet.UserId, 10)),
							 | 
						||
| 
								 | 
							
												zap.String("money", utility.FloatToStr(amount)))
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										err = tx.Model(&models.LineUser{}).Where("id = ?", wallet.UserId).Update("money", gorm.Expr("money + ?", amount)).Error
							 | 
						||
| 
								 | 
							
										if err != nil {
							 | 
						||
| 
								 | 
							
											tx.Rollback()
							 | 
						||
| 
								 | 
							
											log.Error("update user money err", zap.Error(err), zap.String("wallet.UserId", strconv.FormatInt(wallet.UserId, 10)),
							 | 
						||
| 
								 | 
							
												zap.String("money", utility.FloatToStr(amount)))
							 | 
						||
| 
								 | 
							
											return "error"
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										tx.Commit()
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									//hold := holddb.GetUserHold(wallet.UserId, recharge.CoinId)
							 | 
						||
| 
								 | 
							
									//if hold.Id == 0 {
							 | 
						||
| 
								 | 
							
									//	hold = dbmodel.VtsHold{
							 | 
						||
| 
								 | 
							
									//		Id:         0,
							 | 
						||
| 
								 | 
							
									//		CoinId:     recharge.CoinId,
							 | 
						||
| 
								 | 
							
									//		UserId:     wallet.UserId,
							 | 
						||
| 
								 | 
							
									//		Num:        0,
							 | 
						||
| 
								 | 
							
									//		UseNum:     amount,
							 | 
						||
| 
								 | 
							
									//		FreezeNum:  0,
							 | 
						||
| 
								 | 
							
									//		CreateTime: currTime,
							 | 
						||
| 
								 | 
							
									//		UpdateTime: currTime,
							 | 
						||
| 
								 | 
							
									//	}
							 | 
						||
| 
								 | 
							
									//	beforeAmount = 0
							 | 
						||
| 
								 | 
							
									//	afterAmount = amount
							 | 
						||
| 
								 | 
							
									//} else {
							 | 
						||
| 
								 | 
							
									//	beforeAmount = hold.UseNum
							 | 
						||
| 
								 | 
							
									//	afterAmount = utility.FloatAdd(hold.UseNum, amount)
							 | 
						||
| 
								 | 
							
									//	hold.UseNum = amount
							 | 
						||
| 
								 | 
							
									//	hold.UpdateTime = currTime
							 | 
						||
| 
								 | 
							
									//}
							 | 
						||
| 
								 | 
							
									//// 流水
							 | 
						||
| 
								 | 
							
									//log := dbmodel.VtsCurrentHoldLog{
							 | 
						||
| 
								 | 
							
									//	ID:            0,
							 | 
						||
| 
								 | 
							
									//	UserID:        wallet.UserId,
							 | 
						||
| 
								 | 
							
									//	CoinID:        recharge.CoinId,
							 | 
						||
| 
								 | 
							
									//	UseFree:       1,
							 | 
						||
| 
								 | 
							
									//	DealType:      5,
							 | 
						||
| 
								 | 
							
									//	Remarks:       "优顿充值",
							 | 
						||
| 
								 | 
							
									//	RelateOrderNo: trade.TradeId,
							 | 
						||
| 
								 | 
							
									//	Amount:        amount,
							 | 
						||
| 
								 | 
							
									//	BeforeAmount:  beforeAmount,
							 | 
						||
| 
								 | 
							
									//	AfterAmount:   afterAmount,
							 | 
						||
| 
								 | 
							
									//	Poundage:      fee,
							 | 
						||
| 
								 | 
							
									//	CreateTime:    currTime,
							 | 
						||
| 
								 | 
							
									//}
							 | 
						||
| 
								 | 
							
									//
							 | 
						||
| 
								 | 
							
									//// 开启事务
							 | 
						||
| 
								 | 
							
									//tx, err := dbhelper.MasterPgdb.Beginx()
							 | 
						||
| 
								 | 
							
									//if err != nil {
							 | 
						||
| 
								 | 
							
									//	loghelper.Error("Begin", zap.Error(err))
							 | 
						||
| 
								 | 
							
									//	return "error"
							 | 
						||
| 
								 | 
							
									//}
							 | 
						||
| 
								 | 
							
									//if err = walletdb.RechargeInsert(recharge, tx); err != nil {
							 | 
						||
| 
								 | 
							
									//	_ = tx.Rollback()
							 | 
						||
| 
								 | 
							
									//	return "error"
							 | 
						||
| 
								 | 
							
									//}
							 | 
						||
| 
								 | 
							
									//// 账户写入
							 | 
						||
| 
								 | 
							
									//if trade.Status == 3 {
							 | 
						||
| 
								 | 
							
									//	if err = holddb.UpdateHoldUseNum(hold, tx); err != nil {
							 | 
						||
| 
								 | 
							
									//		_ = tx.Rollback()
							 | 
						||
| 
								 | 
							
									//		return "error"
							 | 
						||
| 
								 | 
							
									//	}
							 | 
						||
| 
								 | 
							
									//	// 流水
							 | 
						||
| 
								 | 
							
									//	if err = holddb.AddCurrentHoldLog(log, tx); err != nil {
							 | 
						||
| 
								 | 
							
									//		_ = tx.Rollback()
							 | 
						||
| 
								 | 
							
									//		loghelper.Error("handleRecharge", zap.Error(err))
							 | 
						||
| 
								 | 
							
									//		return "error"
							 | 
						||
| 
								 | 
							
									//	}
							 | 
						||
| 
								 | 
							
									//}
							 | 
						||
| 
								 | 
							
									//// 提交
							 | 
						||
| 
								 | 
							
									//if err = tx.Commit(); err != nil {
							 | 
						||
| 
								 | 
							
									//	loghelper.Error("Commit", zap.Error(err))
							 | 
						||
| 
								 | 
							
									//	return "error"
							 | 
						||
| 
								 | 
							
									//}
							 | 
						||
| 
								 | 
							
									////保存消息日志
							 | 
						||
| 
								 | 
							
									//templates := cmsdb.GetTempContent(3, 3) //充币通知
							 | 
						||
| 
								 | 
							
									//var template adminmodel.CmsTemplateContentDb
							 | 
						||
| 
								 | 
							
									//if len(templates) > 0 {
							 | 
						||
| 
								 | 
							
									//	template = templates[0]
							 | 
						||
| 
								 | 
							
									//}
							 | 
						||
| 
								 | 
							
									//if template.TemplateId > 0 {
							 | 
						||
| 
								 | 
							
									//	// 写入站内信
							 | 
						||
| 
								 | 
							
									//	store := dbmodel.CmsMessageUserDB{
							 | 
						||
| 
								 | 
							
									//		UserId:      recharge.UserId,
							 | 
						||
| 
								 | 
							
									//		MessageId:   template.TemplateId,
							 | 
						||
| 
								 | 
							
									//		IsRead:      1,
							 | 
						||
| 
								 | 
							
									//		Type:        1,
							 | 
						||
| 
								 | 
							
									//		CreateTime:  time.Now(),
							 | 
						||
| 
								 | 
							
									//		CategoryId:  template.CategoryId,
							 | 
						||
| 
								 | 
							
									//		Content:     strings.ReplaceAll(template.Content, "{num}", " "+utility.FloatToStr(amount)+" "+coinCode),
							 | 
						||
| 
								 | 
							
									//		LittleTitle: template.LittleTitle,
							 | 
						||
| 
								 | 
							
									//	}
							 | 
						||
| 
								 | 
							
									//	err = cmsdb.AddMessageUserItem(store)
							 | 
						||
| 
								 | 
							
									//	if err != nil {
							 | 
						||
| 
								 | 
							
									//		loghelper.Error("AddCmsMessageUser Error:", zap.Error(err))
							 | 
						||
| 
								 | 
							
									//	}
							 | 
						||
| 
								 | 
							
									//}
							 | 
						||
| 
								 | 
							
									return "success"
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 提币回调处理
							 | 
						||
| 
								 | 
							
								//func handleWithdraw(trade udunhelper.CallBackRes) string {
							 | 
						||
| 
								 | 
							
								//	// 提币通知
							 | 
						||
| 
								 | 
							
								//	status := 7
							 | 
						||
| 
								 | 
							
								//	switch trade.Status {
							 | 
						||
| 
								 | 
							
								//	case 0:
							 | 
						||
| 
								 | 
							
								//		status = 7
							 | 
						||
| 
								 | 
							
								//	case 1:
							 | 
						||
| 
								 | 
							
								//		status = 7
							 | 
						||
| 
								 | 
							
								//	case 2:
							 | 
						||
| 
								 | 
							
								//		status = 9
							 | 
						||
| 
								 | 
							
								//	case 3:
							 | 
						||
| 
								 | 
							
								//		status = 8
							 | 
						||
| 
								 | 
							
								//	case 4:
							 | 
						||
| 
								 | 
							
								//		status = 9
							 | 
						||
| 
								 | 
							
								//	}
							 | 
						||
| 
								 | 
							
								//	if status < 8 {
							 | 
						||
| 
								 | 
							
								//		return "success"
							 | 
						||
| 
								 | 
							
								//	}
							 | 
						||
| 
								 | 
							
								//	// 加载
							 | 
						||
| 
								 | 
							
								//	data, err := walletdb.GetWithdrawItemByOrderNo(trade.BusinessId)
							 | 
						||
| 
								 | 
							
								//	if err != nil {
							 | 
						||
| 
								 | 
							
								//		return "error"
							 | 
						||
| 
								 | 
							
								//	}
							 | 
						||
| 
								 | 
							
								//	data.Status = status
							 | 
						||
| 
								 | 
							
								//	data.State = trade.Status
							 | 
						||
| 
								 | 
							
								//	data.TxId = trade.TxId
							 | 
						||
| 
								 | 
							
								//	if status == 9 {
							 | 
						||
| 
								 | 
							
								//		data.Remark = "未知原因"
							 | 
						||
| 
								 | 
							
								//	}
							 | 
						||
| 
								 | 
							
								//	num := data.SumNum //utility.FloatAddCut(data.Num, data.NumFee, 8)
							 | 
						||
| 
								 | 
							
								//	// 更新这个表的状态
							 | 
						||
| 
								 | 
							
								//	tx, err := dbhelper.MasterPgdb.Beginx()
							 | 
						||
| 
								 | 
							
								//	if err != nil {
							 | 
						||
| 
								 | 
							
								//		loghelper.Error("Begin", zap.Error(err))
							 | 
						||
| 
								 | 
							
								//		return "error"
							 | 
						||
| 
								 | 
							
								//	}
							 | 
						||
| 
								 | 
							
								//	err = walletdb.WithdrawStatusByUd(data, tx)
							 | 
						||
| 
								 | 
							
								//	if err != nil {
							 | 
						||
| 
								 | 
							
								//		_ = tx.Rollback()
							 | 
						||
| 
								 | 
							
								//		return "error"
							 | 
						||
| 
								 | 
							
								//	}
							 | 
						||
| 
								 | 
							
								//	if status == 9 {
							 | 
						||
| 
								 | 
							
								//		//如果失败则把资金重新返回给用户,减去相应的冻结资金
							 | 
						||
| 
								 | 
							
								//		err = holddb.UpdateHoldWithdraw(num, -num, data.UserId, data.CoinId, tx)
							 | 
						||
| 
								 | 
							
								//		if err != nil {
							 | 
						||
| 
								 | 
							
								//			_ = tx.Rollback()
							 | 
						||
| 
								 | 
							
								//			return "error"
							 | 
						||
| 
								 | 
							
								//		}
							 | 
						||
| 
								 | 
							
								//	} else {
							 | 
						||
| 
								 | 
							
								//		//成功的话则减去相应的冻结资金
							 | 
						||
| 
								 | 
							
								//		err = holddb.UpdateHoldWithdraw(0, -num, data.UserId, data.CoinId, tx)
							 | 
						||
| 
								 | 
							
								//		if err != nil {
							 | 
						||
| 
								 | 
							
								//			_ = tx.Rollback()
							 | 
						||
| 
								 | 
							
								//			return "error"
							 | 
						||
| 
								 | 
							
								//		}
							 | 
						||
| 
								 | 
							
								//	}
							 | 
						||
| 
								 | 
							
								//	_ = tx.Commit()
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//	//保存消息日志
							 | 
						||
| 
								 | 
							
								//	templates := cmsdb.GetTempContent(4, 3) // 提币通知
							 | 
						||
| 
								 | 
							
								//	var template adminmodel.CmsTemplateContentDb
							 | 
						||
| 
								 | 
							
								//	if len(templates) > 0 {
							 | 
						||
| 
								 | 
							
								//		template = templates[0]
							 | 
						||
| 
								 | 
							
								//	}
							 | 
						||
| 
								 | 
							
								//	if template.TemplateId > 0 {
							 | 
						||
| 
								 | 
							
								//		coin := coinservice.CoinCache.GetById(data.CoinId)
							 | 
						||
| 
								 | 
							
								//		// 写入站内信
							 | 
						||
| 
								 | 
							
								//		store := dbmodel.CmsMessageUserDB{
							 | 
						||
| 
								 | 
							
								//			UserId:      data.UserId,
							 | 
						||
| 
								 | 
							
								//			MessageId:   template.TemplateId,
							 | 
						||
| 
								 | 
							
								//			IsRead:      1,
							 | 
						||
| 
								 | 
							
								//			Type:        1,
							 | 
						||
| 
								 | 
							
								//			CreateTime:  time.Now(),
							 | 
						||
| 
								 | 
							
								//			CategoryId:  template.CategoryId,
							 | 
						||
| 
								 | 
							
								//			Content:     strings.ReplaceAll(template.Content, "{num}", " "+utility.FloatToStr(data.Num)+" "+coin.CoinCode),
							 | 
						||
| 
								 | 
							
								//			LittleTitle: template.LittleTitle,
							 | 
						||
| 
								 | 
							
								//		}
							 | 
						||
| 
								 | 
							
								//		err = cmsdb.AddMessageUserItem(store)
							 | 
						||
| 
								 | 
							
								//		if err != nil {
							 | 
						||
| 
								 | 
							
								//			loghelper.Error("AddCmsMessageUser Error:", zap.Error(err))
							 | 
						||
| 
								 | 
							
								//		}
							 | 
						||
| 
								 | 
							
								//	}
							 | 
						||
| 
								 | 
							
								//	return "success"
							 | 
						||
| 
								 | 
							
								//}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// getBalance 获取金额
							 | 
						||
| 
								 | 
							
								func getBalance(balance, decimals string) float64 {
							 | 
						||
| 
								 | 
							
									am, _ := strconv.ParseFloat(balance, 64)
							 | 
						||
| 
								 | 
							
									dec, _ := strconv.ParseFloat(decimals, 64)
							 | 
						||
| 
								 | 
							
									res := decimal.NewFromFloat(am / math.Pow(10, dec))
							 | 
						||
| 
								 | 
							
									amount, _ := res.Truncate(8).Float64()
							 | 
						||
| 
								 | 
							
									return amount
							 | 
						||
| 
								 | 
							
								}
							 |