|
@@ -5,6 +5,8 @@ import (
|
|
|
"github.com/suyuan32/simple-admin-common/msg/errormsg"
|
|
|
"github.com/suyuan32/simple-admin-core/rpc/types/core"
|
|
|
"github.com/zeromicro/go-zero/core/errorx"
|
|
|
+ "math"
|
|
|
+ "wechat-api/ent"
|
|
|
"wechat-api/ent/creditbalance"
|
|
|
|
|
|
"wechat-api/internal/svc"
|
|
@@ -43,9 +45,11 @@ func (l *OperateCreditBalanceLogic) OperateCreditBalance(req *types.CreditBalanc
|
|
|
}
|
|
|
|
|
|
creditBalance, err := l.svcCtx.DB.CreditBalance.Query().Where(creditbalance.OrganizationID(*req.OrganizationId)).Only(l.ctx)
|
|
|
- if err != nil {
|
|
|
- l.Logger.Errorf("query credit_balance error:%v\n", err)
|
|
|
- return nil, errorx.NewInvalidArgumentError(err.Error())
|
|
|
+ if err != nil && ent.IsNotFound(err) {
|
|
|
+ creditBalance, err = l.svcCtx.DB.CreditBalance.Create().
|
|
|
+ SetOrganizationID(*req.OrganizationId).
|
|
|
+ SetBalance(*req.Number).
|
|
|
+ Save(l.ctx)
|
|
|
}
|
|
|
|
|
|
var ntype int
|
|
@@ -61,16 +65,23 @@ func (l *OperateCreditBalanceLogic) OperateCreditBalance(req *types.CreditBalanc
|
|
|
var beforeNumber, afterNumber float64
|
|
|
if creditBalance == nil {
|
|
|
beforeNumber = 0
|
|
|
- afterNumber = *req.Number
|
|
|
+ afterNumber = roundTo(*req.Number, 6)
|
|
|
} else {
|
|
|
- beforeNumber = creditBalance.Balance
|
|
|
- afterNumber = beforeNumber + *req.Number
|
|
|
+ beforeNumber = roundTo(creditBalance.Balance, 6)
|
|
|
+ afterNumber = roundTo(beforeNumber, 6) + roundTo(*req.Number, 6)
|
|
|
}
|
|
|
|
|
|
+ l.Logger.Infof("number=%v beforeNumber=%v afterNumber=%v payNumber=%v\n",
|
|
|
+ roundTo(*req.Number, 6),
|
|
|
+ roundTo(beforeNumber, 6),
|
|
|
+ roundTo(afterNumber, 6),
|
|
|
+ roundTo(*req.PayNumber, 2),
|
|
|
+ )
|
|
|
+
|
|
|
_, err = tx.CreditUsage.Create().
|
|
|
- SetNumber(*req.Number).
|
|
|
- SetNotNilPayMethod(req.PayMethod). //支付方式
|
|
|
- SetNotNilPayNumber(req.PayNumber). //支付金额
|
|
|
+ SetNumber(roundTo(*req.Number, 6)).
|
|
|
+ SetNotNilPayMethod(req.PayMethod). //支付方式
|
|
|
+ SetPayNumber(roundTo(*req.PayNumber, 2)). //支付金额
|
|
|
SetNtype(ntype).
|
|
|
SetNid(0).
|
|
|
SetTable("").
|
|
@@ -90,7 +101,7 @@ func (l *OperateCreditBalanceLogic) OperateCreditBalance(req *types.CreditBalanc
|
|
|
if creditBalance == nil {
|
|
|
_, err = l.svcCtx.DB.CreditBalance.Create().
|
|
|
SetOrganizationID(*req.OrganizationId).
|
|
|
- SetBalance(*req.Number).
|
|
|
+ SetBalance(roundTo(*req.Number, 6)).
|
|
|
Save(l.ctx)
|
|
|
if err != nil {
|
|
|
l.Logger.Errorf("create credit_balance error:%v\n", err)
|
|
@@ -98,7 +109,7 @@ func (l *OperateCreditBalanceLogic) OperateCreditBalance(req *types.CreditBalanc
|
|
|
return nil, errorx.NewInvalidArgumentError("创建租户积分余额失败,请重试")
|
|
|
}
|
|
|
} else {
|
|
|
- _, err = l.svcCtx.DB.CreditBalance.Update().Where(creditbalance.OrganizationID(*req.OrganizationId)).SetBalance(creditBalance.Balance + *req.Number).Save(l.ctx)
|
|
|
+ _, err = l.svcCtx.DB.CreditBalance.Update().Where(creditbalance.OrganizationID(*req.OrganizationId)).SetBalance(creditBalance.Balance + roundTo(*req.Number, 6)).Save(l.ctx)
|
|
|
if err != nil {
|
|
|
l.Logger.Errorf("update credit_balance error:%v\n", err)
|
|
|
_ = tx.Rollback()
|
|
@@ -120,3 +131,10 @@ func (l *OperateCreditBalanceLogic) OperateCreditBalance(req *types.CreditBalanc
|
|
|
Msg: errormsg.Success,
|
|
|
}, nil
|
|
|
}
|
|
|
+
|
|
|
+func roundTo(num float64, precision int) float64 {
|
|
|
+ scale := math.Pow(10, float64(precision))
|
|
|
+ result := math.Round(num*scale) / scale
|
|
|
+
|
|
|
+ return result
|
|
|
+}
|