From 92ffc4716960cd3accd333fc083e70eddcca7537 Mon Sep 17 00:00:00 2001 From: SOR <3272194354@qq.com> Date: Tue, 18 Aug 2026 14:06:49 +0800 Subject: [PATCH] refactor: wrong position of query functions --- .../itmanager/service/AccountService.kt | 7 ++-- .../itmanager/service/AttachmentService.kt | 1 + .../itmanager/service/BorrowRecordService.kt | 2 + .../itmanager/service/FinanceRecordService.kt | 10 +++++ .../service/impl/AccountServiceImpl.kt | 12 ++++++ .../service/impl/AttachmentServiceImpl.kt | 6 +++ .../service/impl/BorrowRecordServiceImpl.kt | 19 +++++++++ .../service/impl/FinanceRecordServiceImpl.kt | 39 +++++++++++++++++ .../service/v1/AuthorizationService.kt | 2 +- .../itmanager/service/v1/FinanceApiService.kt | 42 +------------------ .../itmanager/service/v1/ItemsApiService.kt | 3 +- .../service/v1/ProofImagesApiService.kt | 3 +- .../itmanager/service/v1/UsagesApiService.kt | 16 +------ 13 files changed, 99 insertions(+), 63 deletions(-) diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/AccountService.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/AccountService.kt index 1bb3a0f..e71ae1b 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/AccountService.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/AccountService.kt @@ -1,20 +1,19 @@ package club.itstudio.itmanager.service -import com.baomidou.mybatisplus.extension.service.IService import club.itstudio.itmanager.entity.dto.Account -import club.itstudio.itmanager.entity.vo.request.EmailRegisterVO -import club.itstudio.itmanager.entity.vo.request.PasswordResetVO -import club.itstudio.itmanager.entity.vo.response.ReloginVO +import com.baomidou.mybatisplus.extension.service.IService import org.springframework.security.core.userdetails.ReactiveUserDetailsService import reactor.core.publisher.Mono interface AccountService : IService, ReactiveUserDetailsService { + fun findAccountById(id: Long): Mono fun findAccountByNameOrEmail(text: String): Mono fun findAccountByName(username: String): Mono fun findAccountByEmail(email: String): Mono fun existAccountByName(username: String): Mono fun existAccountByEmail(email: String): Mono fun resetPasswordByEmail(email: String, encodedPassword: String): Mono + fun createAccount(account: Account): Mono // fun batchInsert(accounts: List): Mono // fun replaceAll(accounts: List): Mono diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/AttachmentService.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/AttachmentService.kt index 0282736..5a29461 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/AttachmentService.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/AttachmentService.kt @@ -9,6 +9,7 @@ interface AttachmentService : IService { fun listByRelated(relatedTable: String, relatedId: Long): Mono> fun listByUploader(uploadedBy: Long): Mono> fun createAttachment(attachment: Attachment): Mono + fun updateAttachment(attachment: Attachment): Mono fun deleteAttachment(id: Long): Mono fun deleteByRelated(relatedTable: String, relatedId: Long): Mono fun exportAllAttachments(): Mono> diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/BorrowRecordService.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/BorrowRecordService.kt index b980aa7..1d1e817 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/BorrowRecordService.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/BorrowRecordService.kt @@ -2,10 +2,12 @@ package club.itstudio.itmanager.service import com.baomidou.mybatisplus.extension.service.IService import club.itstudio.itmanager.entity.dto.BorrowRecord +import com.baomidou.mybatisplus.extension.plugins.pagination.Page import reactor.core.publisher.Mono interface BorrowRecordService : IService { fun getBorrowRecordById(id: Long): Mono + fun pageUsages(page: Page, keyword: String?, status: String?): Mono> fun listByItem(itemId: Long): Mono> fun listByBorrower(borrower: String): Mono> fun listByStatus(status: String): Mono> diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/FinanceRecordService.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/FinanceRecordService.kt index eca6510..5c19350 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/FinanceRecordService.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/FinanceRecordService.kt @@ -2,10 +2,20 @@ package club.itstudio.itmanager.service import com.baomidou.mybatisplus.extension.service.IService import club.itstudio.itmanager.entity.dto.FinanceRecord +import com.baomidou.mybatisplus.extension.plugins.pagination.Page import reactor.core.publisher.Mono interface FinanceRecordService : IService { fun getFinanceRecordById(id: Long): Mono + fun pageFinanceRecords( + page: Page, + keyword: String?, + type: String?, + start: String?, + end: String?, + vendor: String?, + itemId: Long? + ): Mono> fun listByType(type: String): Mono> fun listByDateRange(start: String, end: String): Mono> fun listByVendor(vendor: String): Mono> diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/AccountServiceImpl.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/AccountServiceImpl.kt index 4f1f762..76beadc 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/AccountServiceImpl.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/AccountServiceImpl.kt @@ -47,6 +47,12 @@ class AccountServiceImpl : ServiceImpl(), AccountService .one() } + override fun findAccountById(id: Long): Mono = + blockingCall { + logger.info("Searching account by id") + ktQuery().eq(Account::id, id).one() + } + override fun findAccountByEmail(email: String): Mono = findAccount("email") { ktQuery() @@ -141,4 +147,10 @@ class AccountServiceImpl : ServiceImpl(), AccountService } } } + + override fun createAccount(account: Account): Mono = + blockingCall { + logger.info("Creating account") + save(account) + } } \ No newline at end of file diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/AttachmentServiceImpl.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/AttachmentServiceImpl.kt index d4cd02e..718093d 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/AttachmentServiceImpl.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/AttachmentServiceImpl.kt @@ -42,6 +42,12 @@ class AttachmentServiceImpl : ServiceImpl(), Attac save(attachment) } + override fun updateAttachment(attachment: Attachment): Mono = + blockingCall { + logger.info("Updating attachment") + updateById(attachment) + } + override fun deleteAttachment(id: Long): Mono = blockingCall { logger.info("Deleting attachment by id") diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/BorrowRecordServiceImpl.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/BorrowRecordServiceImpl.kt index 5871a1a..f88cbb4 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/BorrowRecordServiceImpl.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/BorrowRecordServiceImpl.kt @@ -3,6 +3,7 @@ package club.itstudio.itmanager.service.impl import club.itstudio.itmanager.entity.dto.BorrowRecord import club.itstudio.itmanager.mapper.BorrowRecordMapper import club.itstudio.itmanager.service.BorrowRecordService +import com.baomidou.mybatisplus.extension.plugins.pagination.Page import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl import org.slf4j.LoggerFactory import org.springframework.stereotype.Service @@ -24,6 +25,24 @@ class BorrowRecordServiceImpl : ServiceImpl(), ktQuery().eq(BorrowRecord::id, id).one() }.switchIfEmpty(Mono.error(NoSuchElementException("BorrowRecord not found"))) + override fun pageUsages( + page: Page, + keyword: String?, + status: String? + ): Mono> = + blockingCall { + logger.info("Paging borrow records") + val wrapper = ktQuery() + if (!keyword.isNullOrBlank()) { + wrapper.like(BorrowRecord::borrower, keyword) + } + if (!status.isNullOrBlank()) { + wrapper.eq(BorrowRecord::status, status) + } + wrapper.orderByDesc(BorrowRecord::createdAt) + page(page, wrapper) + } + override fun listByItem(itemId: Long): Mono> = blockingCall { logger.info("Searching borrow records by item id") diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/FinanceRecordServiceImpl.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/FinanceRecordServiceImpl.kt index 438e3d7..22863bd 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/FinanceRecordServiceImpl.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/impl/FinanceRecordServiceImpl.kt @@ -3,6 +3,7 @@ package club.itstudio.itmanager.service.impl import club.itstudio.itmanager.entity.dto.FinanceRecord import club.itstudio.itmanager.mapper.FinanceRecordMapper import club.itstudio.itmanager.service.FinanceRecordService +import com.baomidou.mybatisplus.extension.plugins.pagination.Page import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl import org.slf4j.LoggerFactory import org.springframework.stereotype.Service @@ -24,6 +25,44 @@ class FinanceRecordServiceImpl : ServiceImpl ktQuery().eq(FinanceRecord::id, id).one() }.switchIfEmpty(Mono.error(NoSuchElementException("FinanceRecord not found"))) + override fun pageFinanceRecords( + page: Page, + keyword: String?, + type: String?, + start: String?, + end: String?, + vendor: String?, + itemId: Long? + ): Mono> = + blockingCall { + logger.info("Paging finance records") + val wrapper = ktQuery() + if (!keyword.isNullOrBlank()) { + wrapper.and { + it.like(FinanceRecord::recordNo, keyword) + .or().like(FinanceRecord::vendor, keyword) + .or().like(FinanceRecord::note, keyword) + } + } + if (!type.isNullOrBlank()) { + wrapper.eq(FinanceRecord::type, type) + } + if (!start.isNullOrBlank() && !end.isNullOrBlank()) { + wrapper.apply("occurred_at BETWEEN {0} AND {1}", start, end) + } else if (!start.isNullOrBlank()) { + wrapper.ge(FinanceRecord::occurredAt, start) + } else if (!end.isNullOrBlank()) { + wrapper.le(FinanceRecord::occurredAt, end) + } + if (!vendor.isNullOrBlank()) { + wrapper.eq(FinanceRecord::vendor, vendor) + } + if (itemId != null) { + wrapper.eq(FinanceRecord::relatedItemId, itemId) + } + page(page, wrapper) + } + override fun listByType(type: String): Mono> = blockingCall { logger.info("Searching finance records by type") diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/AuthorizationService.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/AuthorizationService.kt index 5c44d94..5e64242 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/AuthorizationService.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/AuthorizationService.kt @@ -77,7 +77,7 @@ class AuthorizationService( isStaff = false, createdAt = getCurrentDateTime() ) - Mono.fromCallable { accountService.save(account) } + accountService.createAccount(account) .flatMap { success -> if (success) { stringRedisTemplate.delete(Const.VERIFY_EMAIL_DATA + email) diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/FinanceApiService.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/FinanceApiService.kt index d297d2d..d46bc55 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/FinanceApiService.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/FinanceApiService.kt @@ -49,46 +49,9 @@ class FinanceApiService( itemId: Long? ): Mono> { logger.info("Listing finance records") - return pageFinanceRecords(page, keyword, type, start, end, vendor, itemId) + return financeRecordService.pageFinanceRecords(page, keyword, type, start, end, vendor, itemId) } - private fun pageFinanceRecords( - page: Page, - keyword: String?, - type: String?, - start: String?, - end: String?, - vendor: String?, - itemId: Long? - ): Mono> = - Mono.fromCallable { - val wrapper = financeRecordService.ktQuery() - if (!keyword.isNullOrBlank()) { - wrapper.and { - it.like(FinanceRecord::recordNo, keyword) - .or().like(FinanceRecord::vendor, keyword) - .or().like(FinanceRecord::note, keyword) - } - } - if (!type.isNullOrBlank()) { - wrapper.eq(FinanceRecord::type, type) - } - if (!start.isNullOrBlank() && !end.isNullOrBlank()) { - wrapper.apply("occurred_at BETWEEN {0} AND {1}", start, end) - } else if (!start.isNullOrBlank()) { - wrapper.ge(FinanceRecord::occurredAt, start) - } else if (!end.isNullOrBlank()) { - wrapper.le(FinanceRecord::occurredAt, end) - } - if (!vendor.isNullOrBlank()) { - wrapper.eq(FinanceRecord::vendor, vendor) - } - if (itemId != null) { - wrapper.eq(FinanceRecord::relatedItemId, itemId) - } - financeRecordService.page(page, wrapper) - }.subscribeOn(Schedulers.boundedElastic()) - fun createFinanceRecord(record: FinanceRecord): Mono { logger.info("Creating finance record") val rightNow = getCurrentDateTime() @@ -253,8 +216,7 @@ class FinanceApiService( private fun sendFinanceDeleteNotification(record: FinanceRecord): Mono { val recordedBy = record.recordedBy ?: return Mono.empty() - return Mono.fromCallable { accountService.getById(recordedBy) } - .subscribeOn(Schedulers.boundedElastic()) + return accountService.findAccountById(recordedBy) .flatMap { account -> val email = account.email if (email.isNullOrBlank()) { diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/ItemsApiService.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/ItemsApiService.kt index 6d3bdd4..ce157f5 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/ItemsApiService.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/ItemsApiService.kt @@ -262,8 +262,7 @@ class ItemsApiService( fun updateItemImage(attachment: Attachment): Mono { logger.info("Updating item image") if (attachment.id == null) return Mono.just("item image id is required.") - return Mono.fromCallable { attachmentService.updateById(attachment) } - .subscribeOn(Schedulers.boundedElastic()) + return attachmentService.updateAttachment(attachment) .flatMap { success -> if (success) Mono.just("") else Mono.just("item image update failed.") diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/ProofImagesApiService.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/ProofImagesApiService.kt index 32235d1..bb586b1 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/ProofImagesApiService.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/ProofImagesApiService.kt @@ -41,8 +41,7 @@ class ProofImagesApiService( fun updateProofImage(attachment: Attachment): Mono { logger.info("Updating proof image") if (attachment.id == null) return Mono.just("proof image id is required.") - return Mono.fromCallable { attachmentService.updateById(attachment) } - .subscribeOn(Schedulers.boundedElastic()) + return attachmentService.updateAttachment(attachment) .flatMap { success -> if (success) Mono.just("") else Mono.just("proof image update failed.") diff --git a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/UsagesApiService.kt b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/UsagesApiService.kt index 817f0a9..d6aa810 100644 --- a/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/UsagesApiService.kt +++ b/src/backend/src/main/kotlin/club/itstudio/itmanager/service/v1/UsagesApiService.kt @@ -6,7 +6,6 @@ import club.itstudio.itmanager.service.AttachmentService import club.itstudio.itmanager.service.BorrowRecordService import club.itstudio.itmanager.utils.Const import club.itstudio.itmanager.utils.DateUtils.getCurrentDateTime -import com.baomidou.mybatisplus.core.toolkit.Wrappers import com.baomidou.mybatisplus.extension.plugins.pagination.Page import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Value @@ -33,17 +32,7 @@ class UsagesApiService( fun getUsages(page: Page, keyword: String?, status: String?): Mono> { logger.info("Paging usages with keyword and status") - return Mono.fromCallable { - val wrapper = Wrappers.lambdaQuery() - if (!keyword.isNullOrBlank()) { - wrapper.like(BorrowRecord::borrower, keyword) - } - if (!status.isNullOrBlank()) { - wrapper.eq(BorrowRecord::status, status) - } - wrapper.orderByDesc(BorrowRecord::createdAt) - borrowRecordService.page(page, wrapper) - }.subscribeOn(Schedulers.boundedElastic()) + return borrowRecordService.pageUsages(page, keyword, status) } fun createUsage(record: BorrowRecord): Mono { @@ -145,8 +134,7 @@ class UsagesApiService( fun updateUsageImage(attachment: Attachment): Mono { logger.info("Updating usage image") if (attachment.id == null) return Mono.just("usage image id is required.") - return Mono.fromCallable { attachmentService.updateById(attachment) } - .subscribeOn(Schedulers.boundedElastic()) + return attachmentService.updateAttachment(attachment) .flatMap { success -> if (success) Mono.just("") else Mono.just("usage image update failed.") -- 2.47.3