diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoPickOrderRepository.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoPickOrderRepository.kt index ebc8eb9..b60f038 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoPickOrderRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoPickOrderRepository.kt @@ -7,6 +7,7 @@ import com.ffii.fpsms.modules.deliveryOrder.enums.DoPickOrderStatus import com.ffii.fpsms.modules.master.entity.projections.SearchId import org.springframework.data.jpa.repository.JpaRepository import org.springframework.data.jpa.repository.Query +import org.springframework.data.repository.query.Param import org.springframework.stereotype.Repository import java.io.Serializable import java.time.LocalDateTime @@ -29,4 +30,5 @@ fun findByStoreIdAndRequiredDeliveryDateAndTicketStatusIn( requiredDeliveryDate: LocalDate, status: List ): List + } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt index 6e0aeb3..1216d58 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt @@ -58,8 +58,10 @@ import org.springframework.core.io.ClassPathResource import java.io.File import java.io.FileNotFoundException import com.ffii.core.support.JdbcDao; +import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderLineRepository import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderRecord import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderRecordRepository +import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderRepository import com.ffii.fpsms.modules.deliveryOrder.web.models.ExportDNLabelsRequest import com.ffii.fpsms.modules.deliveryOrder.web.models.PrintDNLabelsRequest import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderRepository @@ -100,6 +102,8 @@ open class DeliveryOrderService( private val inventoryLotRepository: InventoryLotRepository, private val jdbcDao: JdbcDao, private val pickExecutionIssueRepository: PickExecutionIssueRepository, + private val doPickOrderRepository: DoPickOrderRepository, + private val doPickOrderLineRepository: DoPickOrderLineRepository, ) { open fun findByM18DataLogId(m18DataLogId: Long): DeliveryOrder? { @@ -673,63 +677,104 @@ open class DeliveryOrderService( if (!resource.exists()) { throw FileNotFoundException("Report file not fount: $DELIVERYNOTE_PDF") } - val inputStream = resource.inputStream - val deliveryNote = JasperCompileManager.compileReport(inputStream) - val deliveryNoteInfo = - deliveryOrderRepository.findDeliveryOrderInfoById(request.deliveryOrderIds).toMutableList() + val doPickOrder = doPickOrderRepository.findById(request.doPickOrderId).orElseThrow { + NoSuchElementException("DoPickOrder not found with ID: ${request.doPickOrderId}") + } + val pickOrderIds = if (doPickOrder.pickOrderId != null) { + // Single pick order case + listOf(doPickOrder.pickOrderId!!) + } else { + // Merged pick orders case - get from DoPickOrderLine + val doPickOrderLines = doPickOrderLineRepository.findByDoPickOrderIdAndDeletedFalse(doPickOrder.id!!) + val orderIds = doPickOrderLines.mapNotNull { it.pickOrderId }.distinct() - val fields = mutableListOf>() - val params = mutableMapOf() + if (orderIds.isEmpty()) { + throw IllegalStateException("DoPickOrder ${request.doPickOrderId} has no associated pick orders") + } + orderIds + } - val deliveryOrderEntity = deliveryOrderRepository.findByIdAndDeletedIsFalse(request.deliveryOrderIds) - val selectedTruckNo = deliveryOrderEntity?.shop?.id?.let { shopId -> - val trucks = truckRepository.findByShopIdAndDeletedFalse(shopId) - trucks.firstOrNull()?.truckLanceCode - } ?: "" + val deliveryOrderIds = if (doPickOrder.doOrderId != null) { + // Single delivery order case + listOf(doPickOrder.doOrderId!!) + } else { + // Merged delivery orders case - get from DoPickOrderLine + val doPickOrderLines = doPickOrderLineRepository.findByDoPickOrderIdAndDeletedFalse(doPickOrder.id!!) + val orderIds = doPickOrderLines.mapNotNull { it.doOrderId }.distinct() - val selectedPickOrder = pickOrderRepository.findById(request.pickOrderIds).orElse(null) + if (orderIds.isEmpty()) { + throw IllegalStateException("DoPickOrder ${request.doPickOrderId} has no associated delivery orders") + } + orderIds + } + val deliveryNoteInfo = deliveryOrderIds.flatMap { deliveryOrderId -> + deliveryOrderRepository.findDeliveryOrderInfoById(deliveryOrderId) + }.toMutableList() - for (info in deliveryNoteInfo) { - val sortedLines = info.deliveryOrderLines.sortedBy { line -> - line.itemId?.let { itemId -> - getWarehouseOrderByItemId(itemId) // ✅ 改用 warehouse order - } ?: Int.MAX_VALUE - } + if (deliveryNoteInfo.isEmpty()) { + throw NoSuchElementException("Delivery orders not found for IDs: $deliveryOrderIds") + } - sortedLines.forEachIndexed { index, line -> + val pickOrderId = pickOrderIds.first() - val field = mutableMapOf() + val inputStream = resource.inputStream + val deliveryNote = JasperCompileManager.compileReport(inputStream) - field["sequenceNumber"] = (index + 1).toString() - field["itemNo"] = line.itemNo - field["itemName"] = line.itemName ?: "" - field["uom"] = line.uom ?: "" - field["qty"] = line.qty.toString() - field["shortName"] = line.uomShortDesc ?: "" + val fields = mutableListOf>() + val params = mutableMapOf() - val route = line.itemId?.let { itemId -> - getWarehouseCodeByItemId(itemId) // ✅ 使用新方法 - } ?: "" - field["route"] = route + val truckNo = doPickOrder.truckLanceCode ?: "" + val selectedPickOrder = pickOrderRepository.findById(pickOrderId).orElse(null) - val lotNo = line.itemId?.let { itemId -> - getLotNumbersForPickOrderByItemId(itemId, request.pickOrderIds) - } ?: "" - field["lotNo"] = lotNo + val allLines = deliveryNoteInfo.flatMap { info -> + info.deliveryOrderLines.map { line -> line } + } - fields.add(field) - } + val sortedLines = allLines.sortedBy { line -> + line.itemId?.let { itemId -> + getWarehouseOrderByItemId(itemId) + } ?: Int.MAX_VALUE + } + + sortedLines.forEach { line -> + val field = mutableMapOf() + + field["sequenceNumber"] = (fields.size + 1).toString() + field["itemNo"] = line.itemNo + field["itemName"] = line.itemName ?: "" + field["uom"] = line.uom ?: "" + field["qty"] = line.qty.toString() + field["shortName"] = line.uomShortDesc ?: "" + + val route = line.itemId?.let { itemId -> + getWarehouseCodeByItemId(itemId) + } ?: "" + field["route"] = route + + val lotNo = line.itemId?.let { itemId -> + pickOrderIds.mapNotNull { pickOrderId -> + val lots = getLotNumbersForPickOrderByItemId(itemId, pickOrderId) + if (lots.isNotBlank()) lots else null + }.distinct().joinToString(", ") + } ?: "" + field["lotNo"] = lotNo + + fields.add(field) } if (request.isDraft) { params["dnTitle"] = "送貨單(初稿)" params["colQty"] = "所需數量" params["totalCartonTitle"] = "" + params["deliveryOrderCodeTitle"] = "" + params["deliveryOrderCode"] = "" } else { params["dnTitle"] = "送貨單" - params["colQty"] = "數量" + params["colQty"] = "已提數量" params["totalCartonTitle"] = "總箱數:" + params["deliveryOrderCodeTitle"] = "送貨單編號:" + params["deliveryOrderCode"] = "GEN FROM CODE GENERATOR (NEED FIND TIMING)" } params["numOfCarton"] = request.numOfCarton.toString() @@ -737,23 +782,20 @@ open class DeliveryOrderService( params["numOfCarton"] = "" } - params["deliveryOrderCode"] = deliveryNoteInfo[0].code - params["shopName"] = deliveryNoteInfo[0].shopName ?: "" + params["shopName"] = doPickOrder.shopName ?: deliveryNoteInfo[0].shopName ?:"" params["shopAddress"] = deliveryNoteInfo[0].shopAddress ?: "" - params["deliveryDate"] = - deliveryNoteInfo[0].estimatedArrivalDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" - params["truckNo"] = selectedTruckNo - params["ShopPurchaseOrderNo"] = deliveryNoteInfo[0].code - params["FGPickOrderNo"] = selectedPickOrder?.code ?: "" + params["deliveryDate"] = deliveryNoteInfo[0].estimatedArrivalDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" + params["truckNo"] = truckNo + params["ShopPurchaseOrderNo"] = doPickOrder.deliveryOrderCode ?: deliveryNoteInfo.joinToString(", ") { it.code } + params["FGPickOrderNo"] = doPickOrder.pickOrderCode ?: selectedPickOrder?.code ?: "" return mapOf( "report" to PdfUtils.fillReport(deliveryNote, fields, params), - "filename" to deliveryNoteInfo[0].code + "filename" to deliveryNoteInfo.joinToString("_") { it.code } ) } - //Print Delivery Note @Transactional open fun printDeliveryNote(request: PrintDeliveryNoteRequest) { @@ -761,10 +803,9 @@ open class DeliveryOrderService( val pdf = exportDeliveryNote( ExportDeliveryNoteRequest( - deliveryOrderIds = request.deliveryOrderId, + doPickOrderId = request.doPickOrderId, numOfCarton = request.numOfCarton, - isDraft = request.isDraft, - pickOrderIds = request.pickOrderId + isDraft = request.isDraft ) ) @@ -792,20 +833,30 @@ open class DeliveryOrderService( if (!resource.exists()) { throw FileNotFoundException("Label file not found: $DNLABELS_PDF") } + + val doPickOrder = doPickOrderRepository.findById(request.doPickOrderId).orElseThrow { + NoSuchElementException("DoPickOrder not found with ID: ${request.doPickOrderId}") + } + + val deliveryOrderId = doPickOrder.doOrderId + ?: throw IllegalStateException("DoPickOrder has no associated delivery order") + val inputStream = resource.inputStream val cartonLabel = JasperCompileManager.compileReport(inputStream) val cartonLabelInfo = - deliveryOrderRepository.findDeliveryOrderInfoById(request.deliveryOrderIds).toMutableList() + deliveryOrderRepository.findDeliveryOrderInfoById(request.doPickOrderId).toMutableList() + val params = mutableMapOf() val fields = mutableListOf>() + for (info in cartonLabelInfo) { val field = mutableMapOf() } - params["shopPurchaseOrderNo"] = cartonLabelInfo[0].code - params["deliveryOrderCode"] = cartonLabelInfo[0].code + params["shopPurchaseOrderNo"] = doPickOrder.deliveryOrderCode ?: cartonLabelInfo[0].code + params["deliveryOrderCode"] = "GEN FROM CODE GENERATOR (NEED FIND TIMING)" params["shopAddress"] = cartonLabelInfo[0].shopAddress ?: "" - params["shopName"] = cartonLabelInfo[0].shopName ?: "" + params["shopName"] = doPickOrder.shopName ?: cartonLabelInfo[0].shopName ?: "" for (cartonNumber in 1..request.numOfCarton) { val field = mutableMapOf() @@ -828,7 +879,7 @@ open class DeliveryOrderService( val pdf = exportDNLabels( ExportDNLabelsRequest( - deliveryOrderIds = request.deliveryOrderId, + doPickOrderId = request.doPickOrderId, numOfCarton = request.numOfCarton ) ) diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoPickOrderService.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoPickOrderService.kt index 6634ae5..36cab53 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoPickOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoPickOrderService.kt @@ -64,7 +64,7 @@ open class DoPickOrderService( ) } - fun getNextTicketNumber(datePrefix: String, storeId: String): String { + open fun getNextTicketNumber(datePrefix: String, storeId: String): String { println("🔍 DEBUG: Getting next ticket number for date prefix: $datePrefix, store: $storeId") try { val sanitizedStoreId = storeId.replace("/", "") @@ -92,18 +92,18 @@ open class DoPickOrderService( } } - fun save(record: DoPickOrder): DoPickOrder { + open fun save(record: DoPickOrder): DoPickOrder { return doPickOrderRepository.save(record) } - fun findByStoreIdOrderByTruckDepartureTime(storeId: String): List { + open fun findByStoreIdOrderByTruckDepartureTime(storeId: String): List { return doPickOrderRepository.findByStoreIdAndTicketStatusOrderByTruckDepartureTimeAsc( storeId, DoPickOrderStatus.pending ) } // Add these missing methods - fun assignByStore(request: AssignByStoreRequest): MessageResponse { + open fun assignByStore(request: AssignByStoreRequest): MessageResponse { // TODO: Implement store-based assignment logic return MessageResponse( id = null, @@ -116,7 +116,7 @@ open class DoPickOrderService( ) } - fun releaseAssignedByStore(request: AssignByStoreRequest): MessageResponse { + open fun releaseAssignedByStore(request: AssignByStoreRequest): MessageResponse { // TODO: Implement store-based release logic return MessageResponse( id = null, @@ -130,7 +130,7 @@ open class DoPickOrderService( } // ✅ Updated method to set ticketReleaseTime when assigning order to user - fun updateHandledByForPickOrder(pickOrderId: Long, userId: Long): List { + open fun updateHandledByForPickOrder(pickOrderId: Long, userId: Long): List { val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrderId) val user = userRepository.findById(userId).orElse(null) // ✅ 改用 orElse(null) val handlerName = user?.name ?: "Unknown" @@ -143,7 +143,7 @@ open class DoPickOrderService( return doPickOrderRepository.saveAll(doPickOrders) } - fun completeDoPickOrdersForPickOrder(pickOrderId: Long): List { + open fun completeDoPickOrdersForPickOrder(pickOrderId: Long): List { val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrderId) doPickOrders.forEach { it.ticketStatus = DoPickOrderStatus.completed @@ -169,7 +169,7 @@ open class DoPickOrderService( // ✅ New method to remove do_pick_order records when auto-assigning by store // ✅ 修改方法:先复制记录到record表,再删除原记录 @Transactional - fun removeDoPickOrdersForPickOrder(pickOrderId: Long): Int { + open fun removeDoPickOrdersForPickOrder(pickOrderId: Long): Int { val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrderId) var deletedCount = 0 @@ -229,12 +229,12 @@ open class DoPickOrderService( return deletedCount } - fun saveRecord(record: DoPickOrderRecord): DoPickOrderRecord { + open fun saveRecord(record: DoPickOrderRecord): DoPickOrderRecord { return doPickOrderRecordRepository.save(record) } // ✅ Add method to update DoPickOrderRecord status - fun updateRecordHandledByForPickOrder(pickOrderId: Long, userId: Long): List { + open fun updateRecordHandledByForPickOrder(pickOrderId: Long, userId: Long): List { val doPickOrderRecords = doPickOrderRecordRepository.findByPickOrderId(pickOrderId) val user = userRepository.findById(userId).orElse(null) // ✅ 改用 orElse(null) val handlerName = user?.name ?: "Unknown" @@ -248,7 +248,7 @@ open class DoPickOrderService( } // ✅ Add method to complete DoPickOrderRecord - fun completeDoPickOrderRecordsForPickOrder(pickOrderId: Long): List { + open fun completeDoPickOrderRecordsForPickOrder(pickOrderId: Long): List { val doPickOrderRecords = doPickOrderRecordRepository.findByPickOrderId(pickOrderId) doPickOrderRecords.forEach { it.ticketStatus = DoPickOrderStatus.completed @@ -258,18 +258,18 @@ open class DoPickOrderService( } // Add method to find do_pick_order records by pick order ID - fun findByPickOrderId(pickOrderId: Long): List { + open fun findByPickOrderId(pickOrderId: Long): List { return doPickOrderRepository.findByPickOrderId(pickOrderId) } - fun updateDoOrderIdForPickOrder(pickOrderId: Long, doOrderId: Long): List { + open fun updateDoOrderIdForPickOrder(pickOrderId: Long, doOrderId: Long): List { val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrderId) doPickOrders.forEach { it.doOrderId = doOrderId } return doPickOrderRepository.saveAll(doPickOrders) } - fun getSummaryByStore(storeId: String, requiredDate: LocalDate?): StoreLaneSummary { + open fun getSummaryByStore(storeId: String, requiredDate: LocalDate?): StoreLaneSummary { val targetDate = requiredDate ?: LocalDate.now() println("🔍 DEBUG: Getting summary for store=$storeId, date=$targetDate") @@ -372,7 +372,7 @@ open class DoPickOrderService( } } // ✅ 修复:把 assignByLane 移到类里面 - fun assignByLane(request: AssignByLaneRequest): MessageResponse { + open fun assignByLane(request: AssignByLaneRequest): MessageResponse { val user = userRepository.findById(request.userId).orElse(null) ?: return MessageResponse( id = null, code = "USER_NOT_FOUND", name = null, type = null, diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoReleaseCoordinatorService.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoReleaseCoordinatorService.kt index fb42cbd..60f02bf 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoReleaseCoordinatorService.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoReleaseCoordinatorService.kt @@ -41,6 +41,7 @@ class DoReleaseCoordinatorService( private val poolSize = Runtime.getRuntime().availableProcessors() private val executor = Executors.newFixedThreadPool(min(poolSize, 4)) private val jobs = ConcurrentHashMap() + private fun updateBatchTicketNumbers() { try { val updateSql = """ @@ -188,6 +189,7 @@ class DoReleaseCoordinatorService( e.printStackTrace() } } + private fun getOrderedDeliveryOrderIds(ids: List): List { try { println("🔍 DEBUG: Getting ordered IDs for ${ids.size} orders") @@ -492,7 +494,7 @@ class DoReleaseCoordinatorService( "4F" -> "4/F" else -> "2/F" } - + val doPickOrder = DoPickOrder( storeId = storeId, ticketNo = "TEMP-${System.currentTimeMillis()}", diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ExportDNLabelsRequest.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ExportDNLabelsRequest.kt index 4114f59..0e108bb 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ExportDNLabelsRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ExportDNLabelsRequest.kt @@ -1,6 +1,6 @@ package com.ffii.fpsms.modules.deliveryOrder.web.models data class ExportDNLabelsRequest ( - val deliveryOrderIds: Long, + val doPickOrderId: Long, val numOfCarton: Int, ) diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ExportDeliveryNoteRequest.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ExportDeliveryNoteRequest.kt index e99dc7e..ea092c0 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ExportDeliveryNoteRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ExportDeliveryNoteRequest.kt @@ -2,8 +2,7 @@ package com.ffii.fpsms.modules.deliveryOrder.web.models import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderRepository data class ExportDeliveryNoteRequest ( - val deliveryOrderIds: Long, + val doPickOrderId: Long, val numOfCarton: Int, val isDraft: Boolean, - val pickOrderIds: Long, ) diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/PrintDNLabelsRequest.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/PrintDNLabelsRequest.kt index 970ce1f..276e903 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/PrintDNLabelsRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/PrintDNLabelsRequest.kt @@ -1,8 +1,8 @@ package com.ffii.fpsms.modules.deliveryOrder.web.models data class PrintDNLabelsRequest ( - val deliveryOrderId: Long, + val doPickOrderId: Long, val printerId: Long, val printQty: Int?, - val numOfCarton: Int, + val numOfCarton: Int ) \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/PrintDeliveryNoteRequest.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/PrintDeliveryNoteRequest.kt index 22380c0..a0ee91f 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/PrintDeliveryNoteRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/PrintDeliveryNoteRequest.kt @@ -1,10 +1,9 @@ package com.ffii.fpsms.modules.deliveryOrder.web.models data class PrintDeliveryNoteRequest( - val deliveryOrderId: Long, + val doPickOrderId: Long, val printerId: Long, val printQty: Int?, val numOfCarton: Int, val isDraft: Boolean, - val pickOrderId: Long, ) \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt index 42fd4ae..92340b9 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt @@ -713,6 +713,8 @@ open fun createBatchReleaseIssue( FROM fpsmsdb.delivery_order_line dol INNER JOIN fpsmsdb.items i ON i.id = dol.itemId WHERE dol.deliveryOrderId = :deliveryOrderId + INNER JOIN fpsmsdb.items i ON i.id = dol.itemId + WHERE dol.doId = :deliveryOrderId AND dol.deleted = 0 """.trimIndent() @@ -736,11 +738,11 @@ open fun createBatchReleaseIssue( val issue = PickExecutionIssue( id = null, - pickOrderId = null, // batch release 失败时可能还没有 pick order + pickOrderId = 0L, // batch release 失败时可能还没有 pick order pickOrderCode = deliveryOrder["code"] as? String ?: "", pickOrderCreateDate = LocalDate.now(), pickExecutionDate = LocalDate.now(), - pickOrderLineId = null, // batch release 失败时可能还没有 pick order line + pickOrderLineId = 0L, // batch release 失败时可能还没有 pick order line issueNo = issueNo, joPickOrderId = null, doPickOrderId = null, diff --git a/src/main/resources/DeliveryNote/DeliveryNotePDF.jrxml b/src/main/resources/DeliveryNote/DeliveryNotePDF.jrxml index 8852a12..429d54f 100644 --- a/src/main/resources/DeliveryNote/DeliveryNotePDF.jrxml +++ b/src/main/resources/DeliveryNote/DeliveryNotePDF.jrxml @@ -1,15 +1,6 @@ - - - - - - - - - - + @@ -159,17 +150,7 @@ - - - - - - - - - - - + @@ -179,7 +160,7 @@ - + @@ -193,20 +174,11 @@ - + - - - - - - - - - @@ -217,7 +189,7 @@ - + @@ -226,7 +198,7 @@ - + @@ -235,7 +207,7 @@ - + @@ -244,7 +216,7 @@ - + @@ -252,12 +224,30 @@ + + + + + + + + + + + + + + + + + + - + @@ -268,7 +258,7 @@ - + @@ -279,7 +269,7 @@ - + @@ -289,7 +279,7 @@ - + @@ -325,28 +315,28 @@ - + - + - + - + - + - + @@ -355,16 +345,16 @@ - + - + - + @@ -375,10 +365,10 @@ - + - +