|
@@ -1,5 +1,5 @@
|
|
|
import { join } from 'path'
|
|
import { join } from 'path'
|
|
|
-import { Injectable } from '@nestjs/common'
|
|
|
|
|
|
|
+import { Inject, Injectable, forwardRef } from '@nestjs/common'
|
|
|
import { InjectRepository } from '@nestjs/typeorm'
|
|
import { InjectRepository } from '@nestjs/typeorm'
|
|
|
import { CommissionConfig } from './entities/commission-config.entity'
|
|
import { CommissionConfig } from './entities/commission-config.entity'
|
|
|
import { Repository } from 'typeorm'
|
|
import { Repository } from 'typeorm'
|
|
@@ -10,6 +10,7 @@ import { BalanceType as BalanceType } from 'src/user-balance/entities/balance-re
|
|
|
import { BigNumber } from 'bignumber.js'
|
|
import { BigNumber } from 'bignumber.js'
|
|
|
import { CommissionRecordDto } from './dto/commission-record.dto'
|
|
import { CommissionRecordDto } from './dto/commission-record.dto'
|
|
|
import { hideSensitiveData } from 'src/utils/common'
|
|
import { hideSensitiveData } from 'src/utils/common'
|
|
|
|
|
+import { MembershipService } from 'src/membership/membership.service'
|
|
|
|
|
|
|
|
@Injectable()
|
|
@Injectable()
|
|
|
export class CommissionService {
|
|
export class CommissionService {
|
|
@@ -20,7 +21,9 @@ export class CommissionService {
|
|
|
private readonly commissionRecordRepository: Repository<CommissionRecord>,
|
|
private readonly commissionRecordRepository: Repository<CommissionRecord>,
|
|
|
@InjectRepository(Users)
|
|
@InjectRepository(Users)
|
|
|
private readonly usersRepository: Repository<Users>,
|
|
private readonly usersRepository: Repository<Users>,
|
|
|
- private readonly userBalanceService: UserBalanceService
|
|
|
|
|
|
|
+ private readonly userBalanceService: UserBalanceService,
|
|
|
|
|
+ @Inject(forwardRef(() => MembershipService))
|
|
|
|
|
+ private readonly membershipService: MembershipService
|
|
|
) {}
|
|
) {}
|
|
|
|
|
|
|
|
async saveConfig(config: Partial<CommissionConfig>) {
|
|
async saveConfig(config: Partial<CommissionConfig>) {
|
|
@@ -34,6 +37,7 @@ export class CommissionService {
|
|
|
})
|
|
})
|
|
|
if (!user || !user.invitor) return
|
|
if (!user || !user.invitor) return
|
|
|
|
|
|
|
|
|
|
+ const plans = await this.membershipService.getPlans()
|
|
|
const configs = await this.commissionConfigRepository.find()
|
|
const configs = await this.commissionConfigRepository.find()
|
|
|
const maxLevel = configs.map((config) => config.level).sort((a, b) => b - a)[0] || 0
|
|
const maxLevel = configs.map((config) => config.level).sort((a, b) => b - a)[0] || 0
|
|
|
|
|
|
|
@@ -43,20 +47,25 @@ export class CommissionService {
|
|
|
id: invitorId
|
|
id: invitorId
|
|
|
})
|
|
})
|
|
|
if (!invitor) return
|
|
if (!invitor) return
|
|
|
- const config = configs.find((config) => config.level === i + 1)
|
|
|
|
|
- if (config) {
|
|
|
|
|
- const commission = amount.times(config.ratio)
|
|
|
|
|
- await this.userBalanceService.modifyBalance(invitorId, commission, BalanceType.COMMISSION)
|
|
|
|
|
- await this.commissionRecordRepository.save(
|
|
|
|
|
- new CommissionRecord({
|
|
|
|
|
- userId: invitorId,
|
|
|
|
|
- fromUserId: userId,
|
|
|
|
|
- amount: commission,
|
|
|
|
|
- level: configs[i].level,
|
|
|
|
|
- ratio: configs[i].ratio
|
|
|
|
|
- })
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ const membership = await this.membershipService.getMembership(invitorId)
|
|
|
|
|
+ const plan = plans.find((plan) => plan.id === membership.planId)
|
|
|
|
|
+ if (plan?.commissionable) {
|
|
|
|
|
+ const config = configs.find((config) => config.level === i + 1)
|
|
|
|
|
+ if (config) {
|
|
|
|
|
+ const commission = amount.times(config.ratio)
|
|
|
|
|
+ await this.userBalanceService.modifyBalance(invitorId, commission, BalanceType.COMMISSION)
|
|
|
|
|
+ await this.commissionRecordRepository.save(
|
|
|
|
|
+ new CommissionRecord({
|
|
|
|
|
+ userId: invitorId,
|
|
|
|
|
+ fromUserId: userId,
|
|
|
|
|
+ amount: commission,
|
|
|
|
|
+ level: configs[i].level,
|
|
|
|
|
+ ratio: configs[i].ratio
|
|
|
|
|
+ })
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
if (!invitor.invitor) return
|
|
if (!invitor.invitor) return
|
|
|
invitorId = invitor.invitor
|
|
invitorId = invitor.invitor
|
|
|
}
|
|
}
|