From c2899ae64d5ae8ee759ca1b2c62172b5055cbe93 Mon Sep 17 00:00:00 2001 From: BBIT-Kai <2911862937@qq.com> Date: Mon, 25 May 2026 09:30:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8D=95=E8=AF=8D=E8=93=9D?= =?UTF-8?q?=E7=A5=A8=E5=8F=AF=E9=87=8D=E5=A4=8D=E5=BC=80=E7=A5=A8=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/openapi/OpenBlueInvoiceService.kt | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/server/src/main/kotlin/com/bbit/ticket/service/openapi/OpenBlueInvoiceService.kt b/server/src/main/kotlin/com/bbit/ticket/service/openapi/OpenBlueInvoiceService.kt index ca44fa5..9039b84 100644 --- a/server/src/main/kotlin/com/bbit/ticket/service/openapi/OpenBlueInvoiceService.kt +++ b/server/src/main/kotlin/com/bbit/ticket/service/openapi/OpenBlueInvoiceService.kt @@ -42,7 +42,7 @@ object OpenBlueInvoiceService { request: OpenBlueInvoiceCreateRequest, ): OpenBlueInvoiceCreateResponse { validateCreateRequest(request) - val createRequest = request.withGeneratedInvoiceReqSerialNo(principal.userId) + val createRequest = request.withPreparedInvoiceReqSerialNo() PTBlueService.createBlueInvoice( createRequest.toAskInvoiceRequest(principal), @@ -119,7 +119,7 @@ object OpenBlueInvoiceService { val reservedSerialNos = mutableSetOf() val createRequests = request.items.map { - it.withGeneratedInvoiceReqSerialNo(principal.userId, reservedSerialNos) + it.withPreparedInvoiceReqSerialNo(reservedSerialNos) } val now = OffsetDateTime.now() @@ -356,16 +356,30 @@ object OpenBlueInvoiceService { } } - private suspend fun OpenBlueInvoiceCreateRequest.withGeneratedInvoiceReqSerialNo( - userId: Uuid, + private suspend fun OpenBlueInvoiceCreateRequest.withPreparedInvoiceReqSerialNo( reservedSerialNos: MutableSet = mutableSetOf(), ): OpenBlueInvoiceCreateRequest { + val providedInvoiceReqSerialNo = invoiceReqSerialNo?.trim() + if (!providedInvoiceReqSerialNo.isNullOrEmpty()) { + if (providedInvoiceReqSerialNo.length > 20) { + throw BizException(ErrorCode.BAD_REQUEST.code, "invoiceReqSerialNo 长度不能超过 20") + } + if ( + providedInvoiceReqSerialNo in reservedSerialNos || + findUsedInvoiceReqSerialNos(listOf(providedInvoiceReqSerialNo)).isNotEmpty() + ) { + throw BizException(ErrorCode.BAD_REQUEST.code, "invoiceReqSerialNo 已存在,请勿重复开票") + } + reservedSerialNos.add(providedInvoiceReqSerialNo) + return copy(invoiceReqSerialNo = providedInvoiceReqSerialNo) + } + var invoiceReqSerialNo: String do { invoiceReqSerialNo = PTClient.ptDate() } while ( invoiceReqSerialNo in reservedSerialNos || - findUsedInvoiceReqSerialNos(userId, listOf(invoiceReqSerialNo)).isNotEmpty() + findUsedInvoiceReqSerialNos(listOf(invoiceReqSerialNo)).isNotEmpty() ) reservedSerialNos.add(invoiceReqSerialNo) return copy(invoiceReqSerialNo = invoiceReqSerialNo) @@ -375,25 +389,19 @@ object OpenBlueInvoiceService { invoiceReqSerialNo ?: throw BizException(ErrorCode.INTERNAL_SERVER_ERROR.code, "invoiceReqSerialNo 生成失败") - private suspend fun findUsedInvoiceReqSerialNos(userId: Uuid, invoiceReqSerialNos: List): Set { + private suspend fun findUsedInvoiceReqSerialNos(invoiceReqSerialNos: List): Set { val serialNos = invoiceReqSerialNos.distinct() if (serialNos.isEmpty()) { return emptySet() } return dbQuery { val historySerialNos = HistoryInvoiceBasicTable.selectAll() - .where { - (HistoryInvoiceBasicTable.userId eq userId) and - (HistoryInvoiceBasicTable.invoiceReqSerialNo inList serialNos) - } + .where { HistoryInvoiceBasicTable.invoiceReqSerialNo inList serialNos } .map { it[HistoryInvoiceBasicTable.invoiceReqSerialNo] } - val batchSerialNos = (OpenInvoiceBatchItemTable innerJoin OpenInvoiceBatchTable) + val batchSerialNos = OpenInvoiceBatchItemTable .selectAll() - .where { - (OpenInvoiceBatchTable.userId eq userId) and - (OpenInvoiceBatchItemTable.invoiceReqSerialNo inList serialNos) - } + .where { OpenInvoiceBatchItemTable.invoiceReqSerialNo inList serialNos } .map { it[OpenInvoiceBatchItemTable.invoiceReqSerialNo] } (historySerialNos + batchSerialNos).toSet()