|
|
|
@@ -300,71 +300,65 @@ open class DeliveryOrderService( |
|
|
|
} else { |
|
|
|
emptyList() |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return RecordsRes(paginatedRecords, totalCount) |
|
|
|
} else { |
|
|
|
// 如果没有提供 truckLanceCode,使用分页查询 |
|
|
|
val result = deliveryOrderRepository.searchDoLitePage( |
|
|
|
// 未提供 truckLanceCode:在 DB 層依允許的供應商分頁,避免先取 10 筆再過濾導致每頁顯示少於 pageSize |
|
|
|
val allowedSupplierCodes = listOf("P06B", "P07", "P06D") |
|
|
|
val result = deliveryOrderRepository.searchDoLitePageWithSupplierCodes( |
|
|
|
code = code?.ifBlank { null }, |
|
|
|
shopName = shopName?.ifBlank { null }, |
|
|
|
status = statusEnum, |
|
|
|
etaStart = etaStart, |
|
|
|
etaEnd = etaEnd, |
|
|
|
pageable = PageRequest.of(page.coerceAtLeast(0), size) |
|
|
|
allowedSupplierCodes = allowedSupplierCodes, |
|
|
|
pageable = PageRequest.of(page.coerceAtLeast(0), size), |
|
|
|
) |
|
|
|
|
|
|
|
val allowedSuppliers = setOf("P06B", "P07", "P06D") |
|
|
|
|
|
|
|
// 处理当前页的记录,只保留这三个 supplier |
|
|
|
val records = result.content.mapNotNull { info -> |
|
|
|
val records = result.content.map { info -> |
|
|
|
val deliveryOrder = deliveryOrderRepository.findByIdAndDeletedIsFalse(info.id) |
|
|
|
val supplierCode = deliveryOrder?.supplier?.code |
|
|
|
if (supplierCode !in allowedSuppliers) { |
|
|
|
null // 过滤掉其他 supplier |
|
|
|
} else { |
|
|
|
val preferredFloor = when (supplierCode) { |
|
|
|
"P06B" -> "4F" |
|
|
|
"P07", "P06D" -> "2F" |
|
|
|
else -> "2F" |
|
|
|
} |
|
|
|
val shop = deliveryOrder?.shop |
|
|
|
val shopId = shop?.id |
|
|
|
val estimatedArrivalDate = info.estimatedArrivalDate |
|
|
|
|
|
|
|
val calculatedTruckLanceCode = |
|
|
|
if (deliveryOrder != null && shopId != null && estimatedArrivalDate != null) { |
|
|
|
val targetDate = estimatedArrivalDate.toLocalDate() |
|
|
|
val dayAbbr = getDayOfWeekAbbr(targetDate) |
|
|
|
val trucks = truckRepository.findByShopIdAndStoreIdAndDayOfWeek(shopId, preferredFloor, dayAbbr) |
|
|
|
|
|
|
|
val matchedTruck = if (trucks.isEmpty()) { |
|
|
|
truckRepository.findByShopIdAndDeletedFalse(shopId) |
|
|
|
.filter { it.storeId == preferredFloor } |
|
|
|
.minByOrNull { it.departureTime ?: LocalTime.of(23, 59, 59) } |
|
|
|
} else { |
|
|
|
trucks.minByOrNull { it.departureTime ?: LocalTime.of(23, 59, 59) } |
|
|
|
} |
|
|
|
val preferredFloor = when (supplierCode) { |
|
|
|
"P06B" -> "4F" |
|
|
|
"P07", "P06D" -> "2F" |
|
|
|
else -> "2F" |
|
|
|
} |
|
|
|
val shop = deliveryOrder?.shop |
|
|
|
val shopId = shop?.id |
|
|
|
val estimatedArrivalDate = info.estimatedArrivalDate |
|
|
|
|
|
|
|
val calculatedTruckLanceCode = |
|
|
|
if (deliveryOrder != null && shopId != null && estimatedArrivalDate != null) { |
|
|
|
val targetDate = estimatedArrivalDate.toLocalDate() |
|
|
|
val dayAbbr = getDayOfWeekAbbr(targetDate) |
|
|
|
val trucks = truckRepository.findByShopIdAndStoreIdAndDayOfWeek(shopId, preferredFloor, dayAbbr) |
|
|
|
|
|
|
|
matchedTruck?.truckLanceCode |
|
|
|
val matchedTruck = if (trucks.isEmpty()) { |
|
|
|
truckRepository.findByShopIdAndDeletedFalse(shopId) |
|
|
|
.filter { it.storeId == preferredFloor } |
|
|
|
.minByOrNull { it.departureTime ?: LocalTime.of(23, 59, 59) } |
|
|
|
} else { |
|
|
|
null |
|
|
|
trucks.minByOrNull { it.departureTime ?: LocalTime.of(23, 59, 59) } |
|
|
|
} |
|
|
|
|
|
|
|
DeliveryOrderInfoLiteDto( |
|
|
|
id = info.id, |
|
|
|
code = info.code, |
|
|
|
orderDate = info.orderDate, |
|
|
|
estimatedArrivalDate = info.estimatedArrivalDate, |
|
|
|
status = info.status, |
|
|
|
shopName = info.shopName, |
|
|
|
supplierName = info.supplierName, |
|
|
|
shopAddress = info.shopAddress, |
|
|
|
truckLanceCode = calculatedTruckLanceCode |
|
|
|
) |
|
|
|
} |
|
|
|
matchedTruck?.truckLanceCode |
|
|
|
} else { |
|
|
|
null |
|
|
|
} |
|
|
|
|
|
|
|
DeliveryOrderInfoLiteDto( |
|
|
|
id = info.id, |
|
|
|
code = info.code, |
|
|
|
orderDate = info.orderDate, |
|
|
|
estimatedArrivalDate = info.estimatedArrivalDate, |
|
|
|
status = info.status, |
|
|
|
shopName = info.shopName, |
|
|
|
supplierName = info.supplierName, |
|
|
|
shopAddress = info.shopAddress, |
|
|
|
truckLanceCode = calculatedTruckLanceCode, |
|
|
|
) |
|
|
|
} |
|
|
|
|
|
|
|
// 函数自己的返回 |
|
|
|
return RecordsRes(records, result.totalElements.toInt()) |
|
|
|
} |
|
|
|
|
|
|
|
|