|
|
|
@@ -2108,7 +2108,15 @@ open fun getCompletedJobOrderPickOrders(completedDate: LocalDate?): List<Map<Str |
|
|
|
return if (num.isNotEmpty()) "${num}F" else cleaned |
|
|
|
} |
|
|
|
|
|
|
|
open fun getAllJoPickOrders(bomType: String?, floor: String?): List<AllJoPickOrderResponse> { |
|
|
|
open fun getAllJoPickOrders( |
|
|
|
bomType: String?, |
|
|
|
floor: String?, |
|
|
|
jobOrderCode: String? = null, |
|
|
|
pickOrderCode: String? = null, |
|
|
|
itemName: String? = null, |
|
|
|
bomDescription: String? = null, |
|
|
|
planStart: LocalDate? = null, |
|
|
|
): List<AllJoPickOrderResponse> { |
|
|
|
println("=== getAllJoPickOrders ===") |
|
|
|
val wallStartNs = System.nanoTime() |
|
|
|
val timing = linkedMapOf<String, Long>() |
|
|
|
@@ -2130,7 +2138,9 @@ open fun getCompletedJobOrderPickOrders(completedDate: LocalDate?): List<Map<Str |
|
|
|
// println("Found ${releasedPickOrders.size} released job order pick orders") |
|
|
|
val pickOrderIds = releasedPickOrders.mapNotNull { it.id } |
|
|
|
|
|
|
|
val normalizedFloorFilter = floor?.let { normalizeFloor(it) }?.takeIf { it.isNotBlank() } |
|
|
|
val normalizedFloorFilter = floor |
|
|
|
?.let { normalizeFloor(it) } |
|
|
|
?.takeIf { it.isNotBlank() && it != "ALL" } |
|
|
|
|
|
|
|
// 2. 批量查询每个 pick order 的按楼层统计(若没有则跳过) |
|
|
|
val floorCountsByPickOrderId: Map<Long, List<Map<String, Any?>>> = timed("queryFloorCountsMs") { |
|
|
|
@@ -2266,7 +2276,10 @@ open fun getCompletedJobOrderPickOrders(completedDate: LocalDate?): List<Map<Str |
|
|
|
val bom = jobOrder.bom |
|
|
|
|
|
|
|
// 按 bom.type 过滤:null / blank 表示不过滤(全部) |
|
|
|
val normalizedType = bomType?.trim()?.lowercase()?.takeIf { it.isNotBlank() } |
|
|
|
val normalizedType = bomType |
|
|
|
?.trim() |
|
|
|
?.lowercase() |
|
|
|
?.takeIf { it.isNotBlank() && it != "all" } |
|
|
|
if (normalizedType != null) { |
|
|
|
val currentType = bom?.type?.trim()?.lowercase() |
|
|
|
if (currentType != normalizedType) return@mapNotNull null |
|
|
|
@@ -2339,11 +2352,13 @@ open fun getCompletedJobOrderPickOrders(completedDate: LocalDate?): List<Map<Str |
|
|
|
jobOrderType = jobOrderType?.name, |
|
|
|
itemId = item.id ?: 0L, |
|
|
|
itemName = item.name ?: "", |
|
|
|
bomDescription = bom?.description, |
|
|
|
reqQty = jobOrder.reqQty ?: BigDecimal.ZERO, |
|
|
|
//uomId = bom.outputQtyUom?.id : 0L, |
|
|
|
uomId = 0, |
|
|
|
uomName = bom?.outputQtyUom ?: "", |
|
|
|
lotNo = lotNo, |
|
|
|
planStart = jobOrder.planStart, |
|
|
|
jobOrderStatus = jobOrder.status?.value ?: "", |
|
|
|
finishedPickOLineCount = finishedLines, |
|
|
|
floorPickCounts = floorPickCounts, |
|
|
|
@@ -2355,13 +2370,32 @@ open fun getCompletedJobOrderPickOrders(completedDate: LocalDate?): List<Map<Str |
|
|
|
val sorted = timed("sortResponseMs") { |
|
|
|
jobOrderPickOrders.sortedByDescending { it.id } |
|
|
|
} |
|
|
|
val normalizedJobOrderCode = jobOrderCode?.trim()?.lowercase()?.takeIf { it.isNotBlank() } |
|
|
|
val normalizedPickOrderCode = pickOrderCode?.trim()?.lowercase()?.takeIf { it.isNotBlank() } |
|
|
|
val normalizedItemName = itemName?.trim()?.lowercase()?.takeIf { it.isNotBlank() } |
|
|
|
val normalizedBomDescription = bomDescription?.trim()?.lowercase()?.takeIf { it.isNotBlank() } |
|
|
|
val dateFilter = planStart |
|
|
|
val filtered = timed("applySearchFilterMs") { |
|
|
|
sorted.filter { row -> |
|
|
|
val jobCodeMatch = normalizedJobOrderCode == null || |
|
|
|
(row.jobOrderCode?.lowercase()?.contains(normalizedJobOrderCode) == true) |
|
|
|
val pickCodeMatch = normalizedPickOrderCode == null || |
|
|
|
(row.pickOrderCode?.lowercase()?.contains(normalizedPickOrderCode) == true) |
|
|
|
val itemNameMatch = normalizedItemName == null || |
|
|
|
row.itemName.lowercase().contains(normalizedItemName) |
|
|
|
val bomDescriptionMatch = normalizedBomDescription == null || |
|
|
|
(row.bomDescription?.lowercase()?.contains(normalizedBomDescription) == true) |
|
|
|
val planStartMatch = dateFilter == null || row.planStart?.toLocalDate() == dateFilter |
|
|
|
jobCodeMatch && pickCodeMatch && itemNameMatch && bomDescriptionMatch && planStartMatch |
|
|
|
} |
|
|
|
} |
|
|
|
val totalMs = (System.nanoTime() - wallStartNs) / 1_000_000 |
|
|
|
println( |
|
|
|
"JO_ALL_PICK_ORDERS_TIMING totalMs=$totalMs released=${releasedPickOrders.size} " + |
|
|
|
timing.entries.joinToString(" ") { "${it.key}=${it.value}" }, |
|
|
|
) |
|
|
|
// println("Returning ${jobOrderPickOrders.size} released job order pick orders") |
|
|
|
sorted |
|
|
|
filtered |
|
|
|
} catch (e: Exception) { |
|
|
|
val totalMs = (System.nanoTime() - wallStartNs) / 1_000_000 |
|
|
|
println( |
|
|
|
|