|
|
@@ -3,6 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm'
|
|
|
import { CommissionConfig } from './entities/commission-config.entity'
|
|
|
import { Repository } from 'typeorm'
|
|
|
import { CommissionRecord } from './entities/commission-record.entity'
|
|
|
+import { Users } from 'src/users/entities/users.entity'
|
|
|
|
|
|
@Injectable()
|
|
|
export class CommissionService {
|
|
|
@@ -10,10 +11,42 @@ export class CommissionService {
|
|
|
@InjectRepository(CommissionConfig)
|
|
|
private readonly commissionConfigRepository: Repository<CommissionConfig>,
|
|
|
@InjectRepository(CommissionRecord)
|
|
|
- private readonly commissionRecordRepository: Repository<CommissionRecord>
|
|
|
+ private readonly commissionRecordRepository: Repository<CommissionRecord>,
|
|
|
+ @InjectRepository(Users)
|
|
|
+ private readonly usersRepository: Repository<Users>
|
|
|
) {}
|
|
|
|
|
|
async saveConfig(config: Partial<CommissionConfig>) {
|
|
|
return await this.commissionConfigRepository.save(config)
|
|
|
}
|
|
|
+
|
|
|
+ async doCommission(userId: number, amount: number) {
|
|
|
+ const user = await this.usersRepository.findOneBy({
|
|
|
+ id: userId
|
|
|
+ })
|
|
|
+ if (!user || !user.invitor) return
|
|
|
+
|
|
|
+ const configs = await this.commissionConfigRepository.find()
|
|
|
+ const maxLevel = configs.map((config) => config.level).sort((a, b) => b - a)[0] || 0
|
|
|
+
|
|
|
+ let invitorId = user.invitor
|
|
|
+ for (let i = 0; i < maxLevel; i++) {
|
|
|
+ const invitor = await this.usersRepository.findOneBy({
|
|
|
+ id: invitorId
|
|
|
+ })
|
|
|
+ if (!invitor) return
|
|
|
+ const config = configs.find((config) => config.level === i + 1)
|
|
|
+ if (config) {
|
|
|
+ const commission = Number((amount * config.ratio).toFixed(2))
|
|
|
+ await this.commissionRecordRepository.save({
|
|
|
+ userId: invitorId,
|
|
|
+ amount,
|
|
|
+ commission,
|
|
|
+ level: configs[i].level
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (!invitor.invitor) return
|
|
|
+ invitorId = invitor.invitor
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|