Selaa lähdekoodia

refactor:
- 直接使用Decimal作为数据类型
- 使用decorator过滤权限

xiongzhu 1 vuosi sitten
vanhempi
commit
9a8f4d27f5

+ 22 - 22
src/balance/balance.controller.ts

@@ -1,11 +1,12 @@
 import { Body, Controller, Get, Param, Post, Req } from '@nestjs/common'
 import { BalanceService } from './balance.service'
 import { PageRequest } from '../common/dto/page-request'
-import { BalanceRecord } from './entities/balance-record.entities'
-import { HasRoles } from '../auth/roles.decorator'
+import { BalanceRecord } from './entities/balance-record.entity'
+import { HasAnyRoles, HasRoles } from '../auth/roles.decorator'
 import { Role } from '../model/role.enum'
 import { OperationLogService } from '../operation-log/operation-log.service'
 import { OperationType } from '../operation-log/entities/operation-log.entity'
+import Decimal from 'decimal.js'
 
 @Controller('balance')
 export class BalanceController {
@@ -20,24 +21,25 @@ export class BalanceController {
     }
 
     @Get('/recharge/:id/:amount')
-    async recharge(@Req() req, @Param('id') id: string, @Param('amount') amount: number) {
-        if (req.user.roles.includes('user') || req.user.roles.includes('api')) {
-            return
-        }
-        const balanceRecord = await this.balanceService.rechargeBalance(req.user.userId, parseInt(id), amount)
+    @HasAnyRoles(Role.Admin, Role.SuperApi)
+    async recharge(@Req() req, @Param('id') id: string, @Param('amount') amount: string) {
+        const balanceRecord = await this.balanceService.rechargeBalance(
+            req.user.userId,
+            parseInt(id),
+            new Decimal(amount)
+        )
         await this.operationLogService.create(req, balanceRecord, 'BalanceRecord', OperationType.INSERT, '余额充值')
         return 'Recharge success!'
     }
 
     @Get('/transfer/:id/:amount')
-    async transfer(@Req() req, @Param('id') id: string, @Param('amount') amount: number) {
-        if (req.user.roles.includes('user')) {
-            return
-        }
-        if (amount <= 0) {
-            return
-        }
-        const balanceRecord = await this.balanceService.transferBalance(req.user.userId, parseInt(id), amount)
+    @HasAnyRoles(Role.Admin, Role.SuperApi, Role.Api)
+    async transfer(@Req() req, @Param('id') id: string, @Param('amount') amount: string) {
+        const balanceRecord = await this.balanceService.transferBalance(
+            req.user.userId,
+            parseInt(id),
+            new Decimal(amount)
+        )
         if (balanceRecord) {
             await this.operationLogService.create(req, balanceRecord, 'BalanceRecord', OperationType.INSERT, '余额划转')
             return 'Transfer success!'
@@ -47,11 +49,9 @@ export class BalanceController {
     }
 
     @Get('/screenRecharge/:id/:amount')
-    async screenRecharge(@Req() req, @Param('id') id: string, @Param('amount') amount: number) {
-        if (req.user.roles.includes('user')) {
-            return
-        }
-        const users = await this.balanceService.screenRecharge(parseInt(id), amount)
+    @HasAnyRoles(Role.Admin, Role.SuperApi, Role.Api)
+    async screenRecharge(@Req() req, @Param('id') id: string, @Param('amount') amount: string) {
+        const users = await this.balanceService.screenRecharge(parseInt(id), new Decimal(amount))
         await this.operationLogService.create(req, users, 'User', OperationType.INSERT, '筛号余额充值', amount)
         return 'ScreenRecharge success!'
     }
@@ -65,8 +65,8 @@ export class BalanceController {
     }
 
     @Get('/updateRate/:id/:rate')
-    async updateRate(@Req() req, @Param('id') id: string, @Param('rate') rate: number) {
-        const users = await this.balanceService.updateRate(parseInt(id), rate)
+    async updateRate(@Req() req, @Param('id') id: string, @Param('rate') rate: string) {
+        const users = await this.balanceService.updateRate(parseInt(id), new Decimal(rate))
         if (users) {
             await this.operationLogService.create(req, users, 'Users', OperationType.UPDATE, '修改费率', users.rate)
             return 'update rate success!'

+ 2 - 2
src/balance/balance.module.ts

@@ -1,7 +1,7 @@
 import { Module } from '@nestjs/common'
 import { TypeOrmModule } from '@nestjs/typeorm'
-import { Balance } from './entities/balance.entities'
-import { BalanceRecord } from './entities/balance-record.entities'
+import { Balance } from './entities/balance.entity'
+import { BalanceRecord } from './entities/balance-record.entity'
 import { BalanceController } from './balance.controller'
 import { BalanceService } from './balance.service'
 import { UsersModule } from '../users/users.module'

+ 95 - 126
src/balance/balance.service.ts

@@ -1,8 +1,8 @@
-import { Injectable, Logger } from '@nestjs/common'
+import { Injectable, InternalServerErrorException, Logger } from '@nestjs/common'
 import { Between, In, Repository } from 'typeorm'
-import { Balance } from './entities/balance.entities'
+import { Balance } from './entities/balance.entity'
 import { InjectRepository } from '@nestjs/typeorm'
-import { BalanceRecord, BalanceType } from './entities/balance-record.entities'
+import { BalanceRecord, BalanceType } from './entities/balance-record.entity'
 import { UsersService } from '../users/users.service'
 import { Users } from '../users/entities/users.entity'
 import { PageRequest } from '../common/dto/page-request'
@@ -29,22 +29,18 @@ export class BalanceService {
         private readonly usersService: UsersService,
         private readonly sysConfigService: SysConfigService,
         private readonly operationLogService: OperationLogService
-    ) {
-    }
+    ) {}
 
     async findBalanceByUserId(userId: number): Promise<Balance> {
         return await this.balanceRepository.findOne({
-            select: {
-                userId: true,
-                currentBalance: true
-            },
+            select: ['userId', 'currentBalance'],
             where: {
                 userId: userId
             }
         })
     }
 
-    async rechargeBalance(supervisorId: number, userId: number, amount: number) {
+    async rechargeBalance(supervisorId: number, userId: number, amount: Decimal) {
         try {
             // 获取余额
             let balance = await this.balanceRepository.findOne({
@@ -57,18 +53,14 @@ export class BalanceService {
             if (!balance) {
                 balance = new Balance()
                 balance.userId = userId
-                balance.currentBalance = 0.0
-                balance.totalBalance = 0.0
+                balance.currentBalance = new Decimal(0)
+                balance.totalBalance = new Decimal(0)
             }
 
-            const currentBalanceDecimal = new Decimal(String(balance.currentBalance))
-            const amountDecimal = new Decimal(amount)
             const totalBalanceDecimal = new Decimal(String(balance.totalBalance))
-            const newBalanceDecimal = currentBalanceDecimal.plus(amountDecimal)
-            const newTotalBalanceDecimal = totalBalanceDecimal.plus(amountDecimal)
 
-            balance.currentBalance = newBalanceDecimal.toNumber()
-            balance.totalBalance = newTotalBalanceDecimal.toNumber()
+            balance.currentBalance = balance.currentBalance.plus(amount)
+            balance.totalBalance = totalBalanceDecimal.plus(amount)
 
             await this.balanceRepository.save(balance)
 
@@ -83,13 +75,11 @@ export class BalanceService {
 
             // user
             const users = await this.usersService.findById(userId)
-            if (amount > 0) {
+            if (amount.comparedTo(new Decimal(0)) > 0) {
                 // 筛号数量比 5
                 const ratio = await this.sysConfigService.getNumber('screen_number_ratio', 1)
-                const newScreenBalance = new Decimal(String(users.screenBalance)).plus(
-                    amountDecimal.mul(new Decimal(ratio))
-                )
-                users.screenBalance = newScreenBalance.toNumber()
+                const newScreenBalance = new Decimal(String(users.screenBalance)).plus(amount.mul(new Decimal(ratio)))
+                users.screenBalance = newScreenBalance
             }
             users.balance = balance.currentBalance
             await this.userRepository.save(users)
@@ -101,108 +91,90 @@ export class BalanceService {
         }
     }
 
-    async transferBalance(userId: number, targetUserId: number, amount: number) {
-        try {
-            // 获取余额
-            let balance = await this.balanceRepository.findOne({
-                where: {
-                    userId: userId
-                }
-            })
-            // 获取目标用户余额
-            let targetBalance = await this.balanceRepository.findOne({
-                where: {
-                    userId: targetUserId
-                }
-            })
-            // 如果余额不存在
-            if (!targetBalance) {
-                targetBalance = new Balance()
-                targetBalance.userId = targetUserId
-                targetBalance.currentBalance = 0.0
-                targetBalance.totalBalance = 0.0
+    async transferBalance(userId: number, targetUserId: number, amount: Decimal) {
+        if (amount.comparedTo(new Decimal(0)) <= 0) {
+            throw new InternalServerErrorException('划转金额必须大于0')
+        }
+        // 获取余额
+        let balance = await this.balanceRepository.findOne({
+            where: {
+                userId: userId
             }
-            // 将余额划转目标用户
-            if (balance.currentBalance >= amount) {
-                const amountDecimal = new Decimal(amount)
-
-                const balanceDecimal = new Decimal(String(balance.currentBalance))
-                const newBalanceDecimal = balanceDecimal.minus(amountDecimal)
-                balance.currentBalance = newBalanceDecimal.toNumber()
-
-                const targetBalanceDecimal = new Decimal(String(targetBalance.currentBalance))
-                const targetTotalBalanceDecimal = new Decimal(String(targetBalance.totalBalance))
-                const newTargetBalanceDecimal = targetBalanceDecimal.plus(amountDecimal)
-                const newTargetTotalBalanceDecimal = targetTotalBalanceDecimal.plus(amountDecimal)
-                targetBalance.currentBalance = newTargetBalanceDecimal.toNumber()
-                targetBalance.totalBalance = newTargetTotalBalanceDecimal.toNumber()
-
-                await this.balanceRepository.save(balance)
-                await this.balanceRepository.save(targetBalance)
-
-                // 划转记录
-                const record = new BalanceRecord()
-                record.userId = userId
-                record.targetId = targetUserId
-                record.balanceId = balance.id
-                record.amount = amount
-                record.type = BalanceType.TRANSFER
-                await this.recordRepository.save(record)
-
-                const tarRecord = new BalanceRecord()
-                tarRecord.userId = targetUserId
-                tarRecord.supervisorId = userId
-                tarRecord.balanceId = targetBalance.id
-                tarRecord.amount = amount
-                tarRecord.type = BalanceType.RECHARGE
-                await this.recordRepository.save(tarRecord)
-
-                const users = await this.usersService.findById(userId)
-                users.balance = balance.currentBalance
-                await this.userRepository.save(users)
-
-                const targetUsers = await this.usersService.findById(targetUserId)
-                if (amount > 0) {
-                    // 筛号数量比 5
-                    const ratio = await this.sysConfigService.getNumber('screen_number_ratio', 1)
-                    const newScreenBalance = new Decimal(String(targetUsers.screenBalance)).plus(
-                        amountDecimal.mul(new Decimal(ratio))
-                    )
-                    targetUsers.screenBalance = newScreenBalance.toNumber()
-                }
-                targetUsers.balance = targetBalance.currentBalance
-                await this.userRepository.save(targetUsers)
-                return record
-            } else {
-                return null
+        })
+        // 获取目标用户余额
+        let targetBalance = await this.balanceRepository.findOne({
+            where: {
+                userId: targetUserId
             }
-        } catch (e) {
-            Logger.error('Error transfer ', e, 'BalanceService')
-            throw e
+        })
+        // 如果余额不存在
+        if (!targetBalance) {
+            targetBalance = new Balance()
+            targetBalance.userId = targetUserId
+            targetBalance.currentBalance = new Decimal(0)
+            targetBalance.totalBalance = new Decimal(0)
+        }
+        // 将余额划转目标用户
+        if (balance.currentBalance.comparedTo(amount) < 0) {
+            throw new InternalServerErrorException('余额不足')
         }
-    }
 
-    async screenRecharge(userId: number, amount: number) {
+        balance.currentBalance = balance.currentBalance.minus(amount)
+        targetBalance.currentBalance = targetBalance.currentBalance.plus(amount)
+        targetBalance.totalBalance = targetBalance.totalBalance.plus(amount)
+
+        await this.balanceRepository.save(balance)
+        await this.balanceRepository.save(targetBalance)
+
+        // 划转记录
+        const record = new BalanceRecord()
+        record.userId = userId
+        record.targetId = targetUserId
+        record.balanceId = balance.id
+        record.amount = amount
+        record.type = BalanceType.TRANSFER
+        await this.recordRepository.save(record)
+
+        const tarRecord = new BalanceRecord()
+        tarRecord.userId = targetUserId
+        tarRecord.supervisorId = userId
+        tarRecord.balanceId = targetBalance.id
+        tarRecord.amount = amount
+        tarRecord.type = BalanceType.RECHARGE
+        await this.recordRepository.save(tarRecord)
+
         const users = await this.usersService.findById(userId)
-        const screenBalance = new Decimal(users.screenBalance)
-        users.screenBalance = screenBalance.plus(amount).toNumber()
+        users.balance = balance.currentBalance
+        await this.userRepository.save(users)
 
+        const targetUsers = await this.usersService.findById(targetUserId)
+        if (amount.comparedTo(new Decimal(0)) > 0) {
+            // 筛号数量比 5
+            const ratio = await this.sysConfigService.getNumber('screen_number_ratio', 1)
+            targetUsers.screenBalance = targetUsers.screenBalance.plus(amount.mul(new Decimal(ratio)))
+        }
+        targetUsers.balance = targetBalance.currentBalance
+        await this.userRepository.save(targetUsers)
+        return record
+    }
+
+    async screenRecharge(userId: number, amount: Decimal) {
+        const users = await this.usersService.findById(userId)
+        users.screenBalance = users.screenBalance.plus(amount)
         return await this.userRepository.save(users)
     }
 
-    async changeScreenBalance(userId: number, amount: number) {
-        const amountDecimal = new Decimal(amount)
+    async changeScreenBalance(userId: number, amount: Decimal) {
         const users = await this.usersService.findById(userId)
-        if (users.screenBalance < amountDecimal.toNumber()) {
+        if (users.screenBalance.comparedTo(amount) < 0) {
             return false
         }
-        const newScreenBalance = new Decimal(String(users.screenBalance)).sub(amountDecimal)
-        users.screenBalance = newScreenBalance.toNumber()
+        users.screenBalance = users.screenBalance.sub(amount)
         await this.userRepository.save(users)
         return true
     }
 
-    async feeDeduction(userId: number, cost: number, taskId: number) {
+    async feeDeduction(userId: number, cost: Decimal, taskId: number) {
         try {
             const user = await this.usersService.findById(userId)
             // 获取余额
@@ -212,11 +184,7 @@ export class BalanceService {
                 }
             })
 
-            const currentBalanceDecimal = new Decimal(String(balance.currentBalance))
-            const costDecimal = new Decimal(cost)
-            const newBalanceDecimal = currentBalanceDecimal.minus(costDecimal)
-
-            balance.currentBalance = newBalanceDecimal.toNumber()
+            balance.currentBalance = balance.currentBalance.minus(cost)
 
             await this.balanceRepository.save(balance)
 
@@ -247,7 +215,7 @@ export class BalanceService {
         }
     }
 
-    async feeRefund(userId: number, amount: number, taskId: number) {
+    async feeRefund(userId: number, amount: Decimal, taskId: number) {
         try {
             const user = await this.usersService.findById(userId)
             // 获取余额
@@ -257,11 +225,7 @@ export class BalanceService {
                 }
             })
 
-            const currentBalanceDecimal = new Decimal(String(balance.currentBalance))
-            const amountDecimal = new Decimal(amount)
-            const newBalanceDecimal = currentBalanceDecimal.plus(amountDecimal)
-
-            balance.currentBalance = newBalanceDecimal.toNumber()
+            balance.currentBalance = balance.currentBalance.plus(amount)
 
             await this.balanceRepository.save(balance)
 
@@ -323,7 +287,7 @@ export class BalanceService {
         return page
     }
 
-    async updateRate(userId: number, rate: number) {
+    async updateRate(userId: number, rate: Decimal) {
         try {
             let balance = await this.balanceRepository.findOne({
                 where: {
@@ -335,8 +299,8 @@ export class BalanceService {
             if (!balance) {
                 balance = new Balance()
                 balance.userId = userId
-                balance.currentBalance = 0.0
-                balance.totalBalance = 0.0
+                balance.currentBalance = new Decimal(0)
+                balance.totalBalance = new Decimal(0)
             }
 
             balance.rate = rate
@@ -402,7 +366,14 @@ export class BalanceService {
                 worksheet.addRow({
                     id: record.id,
                     amount: record.amount,
-                    type: record.type === BalanceType.RECHARGE ? '充值' : (record.type === BalanceType.CONSUMPTION ? '消费' : (record.type === BalanceType.TRANSFER ? '划转' : '其他')),
+                    type:
+                        record.type === BalanceType.RECHARGE
+                            ? '充值'
+                            : record.type === BalanceType.CONSUMPTION
+                            ? '消费'
+                            : record.type === BalanceType.TRANSFER
+                            ? '划转'
+                            : '其他',
                     taskId: task ? task.id : '-',
                     taskName: task ? task.name : '-',
                     createdAt: record.createdAt ? moment(record.createdAt).format('YYYY-MM-DD HH:mm:ss') : ''
@@ -410,10 +381,8 @@ export class BalanceService {
             })
 
             return await workbook.xlsx.writeBuffer()
-
         } else {
             throw new Error('Permission denied!')
         }
     }
-
 }

+ 6 - 5
src/balance/entities/balance-record.entities.ts → src/balance/entities/balance-record.entity.ts

@@ -1,6 +1,8 @@
 import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm'
 import { number } from 'yup'
 import { Exclude } from 'class-transformer'
+import Decimal from 'decimal.js'
+import { DecimalTransformer } from '../../transformers/decimal.transformer'
 
 export enum BalanceType {
     RECHARGE = 'recharge',
@@ -12,7 +14,6 @@ export enum BalanceType {
 
 @Entity()
 export class BalanceRecord {
-
     @PrimaryGeneratedColumn()
     id: number
 
@@ -37,14 +38,14 @@ export class BalanceRecord {
     @Column('decimal', {
         precision: 15,
         scale: 2,
-        default: 0.00
+        default: 0.0,
+        transformer: new DecimalTransformer()
     })
-    amount: number
+    amount: Decimal
 
     @CreateDateColumn()
     createdAt: Date
 
     @Exclude()
     userName: string
-
-}
+}

+ 12 - 9
src/balance/entities/balance.entities.ts → src/balance/entities/balance.entity.ts

@@ -1,9 +1,10 @@
 import { Column, Entity, OneToOne, PrimaryGeneratedColumn } from 'typeorm'
 import { Users } from '../../users/entities/users.entity'
+import Decimal from 'decimal.js'
+import { DecimalTransformer } from '../../transformers/decimal.transformer'
 
 @Entity()
 export class Balance {
-
     @PrimaryGeneratedColumn()
     id: number
 
@@ -13,22 +14,24 @@ export class Balance {
     @Column('decimal', {
         precision: 15,
         scale: 2,
-        default: 0.00
+        default: 0.0,
+        transformer: new DecimalTransformer()
     })
-    currentBalance: number
+    currentBalance: Decimal
 
     @Column('decimal', {
         precision: 15,
         scale: 2,
-        default: 0.00
+        default: 0.0,
+        transformer: new DecimalTransformer()
     })
-    totalBalance: number
+    totalBalance: Decimal
 
     @Column('decimal', {
         precision: 5,
         scale: 2,
-        default: 1.00
+        default: 1.0,
+        transformer: new DecimalTransformer()
     })
-    rate: number
-
-}
+    rate: Decimal
+}

+ 8 - 7
src/pay-order/entities/pay-order.entiy.ts

@@ -1,5 +1,7 @@
 import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm'
 import { Exclude } from 'class-transformer'
+import { DecimalTransformer } from '../../transformers/decimal.transformer'
+import Decimal from 'decimal.js'
 
 export enum PayOrderStatus {
     PENDING = 'pending',
@@ -12,7 +14,6 @@ export enum PayOrderStatus {
 
 @Entity()
 export class PayOrder {
-
     @PrimaryGeneratedColumn()
     id: number
 
@@ -34,16 +35,17 @@ export class PayOrder {
     @Column('decimal', {
         precision: 15,
         scale: 3,
-        default: 0.000
+        default: 0.0
     })
-    amount: number
+    amount: Decimal
 
     @Column('decimal', {
         precision: 15,
         scale: 3,
-        default: 0.000
+        default: 0.0,
+        transformer: new DecimalTransformer()
     })
-    rechargeAmount: number
+    rechargeAmount: Decimal
 
     @Column()
     address: string
@@ -53,5 +55,4 @@ export class PayOrder {
 
     @Column({ nullable: true })
     hash: string
-
-}
+}

+ 4 - 7
src/pay-order/pay-order.service.ts

@@ -26,8 +26,7 @@ export class PayOrderService {
         private userRepository: Repository<Users>,
         private readonly sysConfigService: SysConfigService,
         private readonly balanceService: BalanceService
-    ) {
-    }
+    ) {}
 
     public async findAll(page: PageRequest<PayOrder>) {
         return await paginate<PayOrder>(this.payOrderRepository, page.page, page.search)
@@ -39,7 +38,7 @@ export class PayOrderService {
         order.address = address
         const amount = new Decimal(order.amount)
 
-        let rechargeAmount = 0
+        let rechargeAmount = new Decimal(0)
         let isUnique = false
         const maxAttempts = 100
         let attemptCount = 0
@@ -48,7 +47,7 @@ export class PayOrderService {
             attemptCount++
             // 生成随机的小数部分
             const randomDecimal = await this.generateRandomDecimal()
-            rechargeAmount = amount.plus(new Decimal(randomDecimal)).toNumber()
+            rechargeAmount = amount.plus(new Decimal(randomDecimal))
 
             const existingOrders = await this.payOrderRepository.find({
                 where: {
@@ -73,7 +72,7 @@ export class PayOrderService {
             randomDigits.push(digit)
         }
         if (randomDigits.includes(0)) {
-            randomDigits.sort((a, b) => a === 0 ? -1 : 1)
+            randomDigits.sort((a, b) => (a === 0 ? -1 : 1))
         }
         return `0.${randomDigits.join('')}`
     }
@@ -152,7 +151,6 @@ export class PayOrderService {
         return await this.payOrderRepository.save(payOrders)
     }
 
-
     @Cron('*/10 * * * *')
     async scheduledTaskQueryPaymentOrders() {
         const orders = await this.payOrderRepository.find({
@@ -197,5 +195,4 @@ export class PayOrderService {
             await this.payOrderRepository.save(expiredOrders)
         }
     }
-
 }

+ 1 - 1
src/statistics/statistics.module.ts

@@ -9,7 +9,7 @@ import { PhoneListModule } from '../phone-list/phone-list.module'
 import { DeviceModule } from '../device/device.module'
 import { BalanceModule } from '../balance/balance.module'
 import { UsersModule } from '../users/users.module'
-import { Balance } from '../balance/entities/balance.entities'
+import { Balance } from '../balance/entities/balance.entity'
 import { Users } from '../users/entities/users.entity'
 
 @Module({

+ 1 - 1
src/statistics/statistics.service.ts

@@ -3,7 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm'
 import { TaskItem } from '../task/entities/task-item.entity'
 import { Repository } from 'typeorm'
 import { Task } from '../task/entities/task.entity'
-import { Balance } from '../balance/entities/balance.entities'
+import { Balance } from '../balance/entities/balance.entity'
 import { Users } from '../users/entities/users.entity'
 
 @Injectable()

+ 2 - 2
src/task/task.module.ts

@@ -10,11 +10,11 @@ import { PhoneListModule } from '../phone-list/phone-list.module'
 import { SysConfigModule } from 'src/sys-config/sys-config.module'
 import { Users } from '../users/entities/users.entity'
 import { UsersModule } from '../users/users.module'
-import { Balance } from '../balance/entities/balance.entities'
+import { Balance } from '../balance/entities/balance.entity'
 import { BalanceModule } from '../balance/balance.module'
 import { Phone } from '../phone-list/entities/phone.entity'
 import { RcsNumber } from '../rcs-number/entities/rcs-number.entity'
-import { BalanceRecord } from '../balance/entities/balance-record.entities'
+import { BalanceRecord } from '../balance/entities/balance-record.entity'
 import { OperaterConfigModule } from '../operator_config/operator_config.module'
 import { OperationLogModule } from '../operation-log/operation-log.module'
 

+ 1 - 1
src/task/task.service.ts

@@ -34,7 +34,7 @@ import { SysConfig } from '../sys-config/entities/sys-config.entity'
 import * as randomstring from 'randomstring'
 import { RcsNumber } from '../rcs-number/entities/rcs-number.entity'
 import axios from 'axios'
-import { BalanceRecord, BalanceType } from '../balance/entities/balance-record.entities'
+import { BalanceRecord, BalanceType } from '../balance/entities/balance-record.entity'
 import { Device } from '../device/entities/device.entity'
 
 @Injectable()

+ 4 - 4
src/transformers/decimal.transformer.ts

@@ -1,11 +1,11 @@
 import { ValueTransformer } from 'typeorm'
-import BigNumber from "bignumber.js";
+import Decimal  from 'decimal.js';
 
 export class DecimalTransformer implements ValueTransformer {
-    to(value: BigNumber): string {
+    to(value: Decimal): string {
         return value?.toString()
     }
-    from(value: string): BigNumber {
-        return new BigNumber(value)
+    from(value: string): Decimal {
+        return new Decimal(value)
     }
 }

+ 11 - 7
src/users/entities/users.entity.ts

@@ -1,6 +1,8 @@
 import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn } from 'typeorm'
 import { Role } from '../../model/role.enum'
 import { Exclude } from 'class-transformer'
+import { DecimalTransformer } from '../../transformers/decimal.transformer'
+import Decimal from 'decimal.js'
 
 @Entity()
 export class Users {
@@ -44,23 +46,26 @@ export class Users {
     @Column('decimal', {
         precision: 15,
         scale: 2,
-        default: 0.00
+        default: 0.0,
+        transformer: new DecimalTransformer()
     })
-    balance: number
+    balance: Decimal
 
     @Column('decimal', {
         precision: 15,
         scale: 2,
-        default: 0.00
+        default: 0.0,
+        transformer: new DecimalTransformer()
     })
-    screenBalance: number
+    screenBalance: Decimal
 
     @Column('decimal', {
         precision: 5,
         scale: 2,
-        default: 1.00
+        default: 1.0,
+        transformer: new DecimalTransformer()
     })
-    rate: number
+    rate: Decimal
 
     @Column({ default: 0 })
     send: number
@@ -70,5 +75,4 @@ export class Users {
 
     @Column({ nullable: true })
     twoFactorCode: string
-
 }

+ 1 - 1
src/users/users.service.ts

@@ -23,7 +23,7 @@ import { paginate, Pagination } from 'nestjs-typeorm-paginate'
 import { Role } from 'src/model/role.enum'
 import { PageRequest } from '../common/dto/page-request'
 import { endOfDay, startOfDay } from 'date-fns'
-import { BalanceRecord, BalanceType } from '../balance/entities/balance-record.entities'
+import { BalanceRecord, BalanceType } from '../balance/entities/balance-record.entity'
 import { generateKey, generatePasscodes, verifyPasscode } from '../utils/authenticator'
 import { string } from 'yup'