From 7ac98d950be3c7c3d2a98a0eae3784fb34fc51bc Mon Sep 17 00:00:00 2001 From: tommy Date: Tue, 23 Jun 2026 15:41:32 +0800 Subject: [PATCH] =?UTF-8?q?DN=20PDF=20=E5=96=AE=E8=99=9F=E9=A1=AF=E7=A4=BA?= =?UTF-8?q?=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DoWorkbenchMainService.kt | 57 ++++++++++++++++++- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoWorkbenchMainService.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoWorkbenchMainService.kt index 8662d78..a593d2d 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoWorkbenchMainService.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoWorkbenchMainService.kt @@ -7,6 +7,7 @@ import com.ffii.fpsms.modules.bag.service.BagService import com.ffii.fpsms.modules.bag.web.model.CreateBagLotLineRequest import com.ffii.fpsms.modules.common.CodeGenerator import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrderRepository +import com.ffii.fpsms.modules.deliveryOrder.entity.DoReplenishment import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderLineRecord import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderLineRecordRepository import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderLineRepository @@ -130,6 +131,7 @@ open class DoWorkbenchMainService( private val printerService: PrinterService, private val itemsRepository: ItemsRepository, private val transactionManager: PlatformTransactionManager, + private val doReplenishmentService: DoReplenishmentService, ) { @PersistenceContext private lateinit var entityManager: EntityManager @@ -2681,6 +2683,21 @@ return MessageResponse( ) } + private fun buildDeliveryOrderCodeAll(deliveryNoteCode: String): String { + val sql = """ + SELECT DISTINCT do.code AS code + FROM delivery_order_pick_order dop + JOIN pick_order po ON po.deliveryOrderPickOrderId = dop.id AND po.deleted = 0 + JOIN delivery_order do ON do.id = po.doId + WHERE dop.deliveryNoteCode = :deliveryNoteCode + AND dop.deleted = 0 + ORDER BY do.code + """.trimIndent() + val codes = jdbcDao.queryForList(sql, mapOf("deliveryNoteCode" to deliveryNoteCode)) + .mapNotNull { row -> row["code"]?.toString() } + return deliveryOrderService.formatDoCodesPlain(codes) + } + open fun exportDeliveryNoteWorkbench(request: ExportDeliveryNoteRequest): Map { val DELIVERYNOTE_PDF = "DeliveryNote/DeliveryNotePDF.jrxml" val resource = ClassPathResource(DELIVERYNOTE_PDF) @@ -2746,6 +2763,13 @@ return MessageResponse( emptyMap() } + val deliveryOrders = deliveryOrderRepository.findAllById(ctx.deliveryOrderIds) + val deliveryOrderCodeById = deliveryOrders.associate { it.id!! to (it.code ?: "") } + val isExtraByDoId = deliveryOrders.associate { it.id!! to it.isExtra } + val headerIsMerge = ctx.header.ticketNo?.startsWith("TI-M-") == true + val headerTicketNo = ctx.header.ticketNo + val replenishPdfIndex = doReplenishmentService.buildReplenishPdfIndex(ctx.deliveryOrderIds) + sortedLines.forEach { row -> fields.add( deliveryOrderService.buildDeliveryNotePdfLineField( @@ -2757,24 +2781,51 @@ return MessageResponse( stockOutLinesByPickOrderLineId = stockOutLinesByPickOrderLineId, illById = illById, itemsById = itemsById, + deliveryOrderCodeById = deliveryOrderCodeById, + isExtraByDoId = isExtraByDoId, + headerTicketNo = headerTicketNo, + headerIsMerge = headerIsMerge, + replenishPdfIndex = replenishPdfIndex, ), ) } + doReplenishmentService.replenishmentsWithoutDeliveryOrderLine(ctx.deliveryOrderIds, exportLines) + .sortedWith(compareBy({ it.targetDoId }, { it.itemNo }, { it.code })) + .forEach { replenishment -> + fields.add( + deliveryOrderService.buildDeliveryNotePdfLineFieldForReplenishment( + replenishment = replenishment, + sequenceNumber = fields.size + 1, + pickOrderLines = pickOrderLines, + stockOutLinesByPickOrderLineId = stockOutLinesByPickOrderLineId, + illById = illById, + itemsById = itemsById, + deliveryOrderCodeById = deliveryOrderCodeById, + isExtraByDoId = isExtraByDoId, + headerTicketNo = headerTicketNo, + headerIsMerge = headerIsMerge, + ), + ) + } + params["dnTitle"] = "送貨單" params["colQty"] = "已提數量" params["totalCartonTitle"] = "總箱數:" params["deliveryNoteCodeTitle"] = "送貨單編號:" params["deliveryNoteCode"] = ctx.header.deliveryNoteCode ?: "" params["numOfCarton"] = request.numOfCarton.toString().takeUnless { it == "0" } ?: "" - params["shopName"] = ctx.header.shopName ?: deliveryNoteInfo[0].shopName ?: "" + params["shopName"] = deliveryOrderService.formatShopNameForDeliveryNote( + ctx.header.shopName ?: deliveryNoteInfo[0].shopName ?: "", + ) params["shopAddress"] = deliveryNoteInfo[0].shopAddress ?: "" params["deliveryDate"] = ctx.header.requiredDeliveryDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: deliveryNoteInfo[0].estimatedArrivalDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" params["truckNo"] = ctx.header.truckLanceCode ?: "" - params["ShopPurchaseOrderNo"] = deliveryNoteInfo.joinToString(", ") { it.code } - params["FGPickOrderNo"] = ctx.pickOrderCodes.joinToString(", ") + params["deliveryOrderCodeAll"] = ctx.header.deliveryNoteCode?.let(::buildDeliveryOrderCodeAll) + ?.takeIf { it.isNotBlank() } + ?: deliveryOrderService.formatDoCodesPlain(deliveryNoteInfo.map { it.code }) params["loadingSequence"] = "" return mapOf(