|
|
|
@@ -48,7 +48,9 @@ import java.time.format.DateTimeFormatter |
|
|
|
import kotlin.jvm.optionals.getOrNull |
|
|
|
import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderGroupInfo |
|
|
|
import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrderRepository |
|
|
|
@Service |
|
|
|
import com.ffii.fpsms.modules.pickOrder.entity.TruckRepository |
|
|
|
import com.ffii.fpsms.modules.pickOrder.entity.RouterRepository |
|
|
|
@Service |
|
|
|
open class PickOrderService( |
|
|
|
private val jdbcDao: JdbcDao, |
|
|
|
private val pickOrderRepository: PickOrderRepository, |
|
|
|
@@ -66,6 +68,8 @@ open class PickOrderService( |
|
|
|
private val jobOrderRepository: JobOrderRepository, |
|
|
|
private val itemUomService: ItemUomService, |
|
|
|
private val deliveryOrderRepository: DeliveryOrderRepository, |
|
|
|
private val truckRepository: TruckRepository, |
|
|
|
private val routerRepository: RouterRepository, |
|
|
|
) : AbstractBaseEntityService<PickOrder, Long, PickOrderRepository>(jdbcDao, pickOrderRepository) { |
|
|
|
open fun create(request: SavePickOrderRequest): MessageResponse { |
|
|
|
val code = assignPickCode() |
|
|
|
@@ -2220,6 +2224,234 @@ open class PickOrderService( |
|
|
|
|
|
|
|
println("✅ Filtered result count: ${filteredResults.size}") |
|
|
|
|
|
|
|
return filteredResults |
|
|
|
// ✅ Add router information for each lot |
|
|
|
val enrichedResults = filteredResults.map { row -> |
|
|
|
val inventoryLotId = row["debugInventoryLotId"] as? Number |
|
|
|
|
|
|
|
// Get router information for this inventory lot |
|
|
|
val routerInfo = if (inventoryLotId != null) { |
|
|
|
try { |
|
|
|
val router = routerRepository.findFirstByInventoryLotIdAndDeletedFalse(inventoryLotId.toInt()) |
|
|
|
if (router != null) { |
|
|
|
mapOf( |
|
|
|
"routerIndex" to (router.index ?: 0), |
|
|
|
"routerRoute" to (router.route ?: ""), |
|
|
|
"routerArea" to (router.area ?: ""), |
|
|
|
"routerItemCode" to (router.itemCode ?: 0), |
|
|
|
"routerItemName" to (router.itemName ?: ""), |
|
|
|
"routerUomId" to (router.uomId ?: 0), |
|
|
|
"routerNoofCarton" to (router.noofCarton ?: 0) |
|
|
|
) |
|
|
|
} else { |
|
|
|
mapOf( |
|
|
|
"routerIndex" to 0, |
|
|
|
"routerRoute" to "", |
|
|
|
"routerArea" to "", |
|
|
|
"routerItemCode" to 0, |
|
|
|
"routerItemName" to "", |
|
|
|
"routerUomId" to 0, |
|
|
|
"routerNoofCarton" to 0 |
|
|
|
) |
|
|
|
} |
|
|
|
} catch (e: Exception) { |
|
|
|
println("⚠️ Error getting router info for inventoryLotId $inventoryLotId: ${e.message}") |
|
|
|
mapOf( |
|
|
|
"routerIndex" to 0, |
|
|
|
"routerRoute" to "", |
|
|
|
"routerArea" to "", |
|
|
|
"routerItemCode" to 0, |
|
|
|
"routerItemName" to "", |
|
|
|
"routerUomId" to 0, |
|
|
|
"routerNoofCarton" to 0 |
|
|
|
) |
|
|
|
} |
|
|
|
} else { |
|
|
|
mapOf( |
|
|
|
"routerIndex" to 0, |
|
|
|
"routerRoute" to "", |
|
|
|
"routerArea" to "", |
|
|
|
"routerItemCode" to 0, |
|
|
|
"routerItemName" to "", |
|
|
|
"routerUomId" to 0, |
|
|
|
"routerNoofCarton" to 0 |
|
|
|
) |
|
|
|
} |
|
|
|
|
|
|
|
// Combine original row with router information |
|
|
|
row.toMutableMap().apply { |
|
|
|
putAll(routerInfo) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return enrichedResults |
|
|
|
} |
|
|
|
|
|
|
|
open fun getFgPickOrders(): List<Map<String, Any?>> { |
|
|
|
try { |
|
|
|
println("🔍 Starting getFgPickOrders method - using repository") |
|
|
|
|
|
|
|
// Use repository to find pick orders with type 'do' |
|
|
|
val pickOrders = pickOrderRepository.findAll().filter { |
|
|
|
it.type?.value == "do" && |
|
|
|
it.status?.value in listOf("assigned", "released", "picking") |
|
|
|
} |
|
|
|
|
|
|
|
println("🔍 Found ${pickOrders.size} FG pick orders using repository") |
|
|
|
|
|
|
|
val results = pickOrders.map { po -> |
|
|
|
val deliveryOrder = po.deliveryOrder |
|
|
|
val shop = deliveryOrder?.shop |
|
|
|
val supplier = deliveryOrder?.supplier |
|
|
|
|
|
|
|
// ✅ Get truck information for this shop - handle Optional properly |
|
|
|
val truckInfo = if (shop?.id != null) { |
|
|
|
try { |
|
|
|
jdbcDao.queryForMap(""" |
|
|
|
SELECT truckNo, DepartureTime |
|
|
|
FROM truck |
|
|
|
WHERE shopId = :shopId AND deleted = false |
|
|
|
LIMIT 1 |
|
|
|
""", mapOf("shopId" to shop.id)).orElse(null) |
|
|
|
} catch (e: Exception) { |
|
|
|
println("⚠️ No truck found for shop ${shop.id}: ${e.message}") |
|
|
|
null |
|
|
|
} |
|
|
|
} else null |
|
|
|
|
|
|
|
mapOf( |
|
|
|
"pickOrderId" to (po.id ?: 0L), |
|
|
|
"pickOrderCode" to (po.code ?: ""), |
|
|
|
"pickOrderConsoCode" to (po.consoCode ?: ""), |
|
|
|
"pickOrderTargetDate" to (po.targetDate?.toString() ?: ""), |
|
|
|
"pickOrderStatus" to (po.status?.value ?: ""), |
|
|
|
"deliveryOrderId" to (deliveryOrder?.id ?: 0L), |
|
|
|
"deliveryNo" to (deliveryOrder?.code ?: ""), |
|
|
|
"deliveryDate" to (deliveryOrder?.orderDate?.toString() ?: ""), |
|
|
|
"shopId" to (shop?.id ?: 0L), |
|
|
|
"shopCode" to (shop?.code ?: ""), |
|
|
|
"shopName" to (shop?.name ?: ""), |
|
|
|
"shopAddress" to buildShopAddress(shop), |
|
|
|
"shopPoNo" to (supplier?.code ?: ""), |
|
|
|
"numberOfCartons" to (po.pickOrderLines.size), |
|
|
|
"truckNo" to (truckInfo?.get("truckNo") ?: ""), // ✅ Add truck number |
|
|
|
"DepartureTime" to (truckInfo?.get("DepartureTime") ?: ""), // ✅ Add departure time |
|
|
|
"qrCodeData" to (po.id ?: 0L) |
|
|
|
) |
|
|
|
} |
|
|
|
|
|
|
|
println("✅ FG Pick Orders result count: ${results.size}") |
|
|
|
return results |
|
|
|
|
|
|
|
} catch (e: Exception) { |
|
|
|
println("❌ Error in getFgPickOrders: ${e.message}") |
|
|
|
e.printStackTrace() |
|
|
|
return emptyList() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
open fun getFgPickOrdersByPickOrderId(pickOrderId: Long): List<Map<String, Any?>> { |
|
|
|
try { |
|
|
|
println("🔍 Starting getFgPickOrdersByPickOrderId method with pickOrderId: $pickOrderId") |
|
|
|
|
|
|
|
val pickOrder = pickOrderRepository.findById(pickOrderId).orElse(null) |
|
|
|
|
|
|
|
if (pickOrder == null) { |
|
|
|
println("❌ Pick order not found with ID: $pickOrderId") |
|
|
|
return emptyList() |
|
|
|
} |
|
|
|
|
|
|
|
println("🔍 Found pick order: ${pickOrder.code}, type: ${pickOrder.type?.value}, status: ${pickOrder.status?.value}") |
|
|
|
|
|
|
|
if (pickOrder.type?.value != "do") { |
|
|
|
println("❌ Pick order is not of type 'do': ${pickOrder.type?.value}") |
|
|
|
return emptyList() |
|
|
|
} |
|
|
|
|
|
|
|
if (pickOrder.status?.value !in listOf("assigned", "released", "picking")) { |
|
|
|
println("❌ Pick order status is not in allowed states: ${pickOrder.status?.value}") |
|
|
|
return emptyList() |
|
|
|
} |
|
|
|
|
|
|
|
val deliveryOrder = pickOrder.deliveryOrder |
|
|
|
val shop = deliveryOrder?.shop |
|
|
|
val supplier = deliveryOrder?.supplier |
|
|
|
|
|
|
|
println(" Delivery order: ${deliveryOrder?.code}, Shop: ${shop?.name}, Supplier: ${supplier?.code}") |
|
|
|
println("🔍 Shop ID: ${shop?.id}") |
|
|
|
|
|
|
|
// ✅ Get truck information using repository with detailed debugging |
|
|
|
val truck = if (shop?.id != null) { |
|
|
|
try { |
|
|
|
println("🔍 Querying truck repository for shopId: ${shop.id}") |
|
|
|
|
|
|
|
// Get all trucks for this shop |
|
|
|
val trucksForShop = truckRepository.findByShopIdAndDeletedFalse(shop.id) |
|
|
|
println("🔍 Trucks for shop ${shop.id}: ${trucksForShop.size}") |
|
|
|
trucksForShop.forEach { t -> |
|
|
|
println(" - Truck ID: ${t.id}, TruckNo: ${t.truckNo}, ShopId: ${t.shop?.id}, Deleted: ${t.deleted}") |
|
|
|
} |
|
|
|
|
|
|
|
// Take the first truck (or null if none found) |
|
|
|
val selectedTruck = trucksForShop.firstOrNull() |
|
|
|
|
|
|
|
if (selectedTruck != null) { |
|
|
|
println("✅ Selected truck: ID=${selectedTruck.id}, TruckNo=${selectedTruck.truckNo}, DepartureTime=${selectedTruck.departureTime}") |
|
|
|
} else { |
|
|
|
println("❌ No truck found for shopId ${shop.id}") |
|
|
|
} |
|
|
|
|
|
|
|
selectedTruck |
|
|
|
} catch (e: Exception) { |
|
|
|
println("⚠️ Error querying truck repository for shop ${shop.id}: ${e.message}") |
|
|
|
e.printStackTrace() |
|
|
|
null |
|
|
|
} |
|
|
|
} else { |
|
|
|
println("⚠️ Shop ID is null") |
|
|
|
null |
|
|
|
} |
|
|
|
|
|
|
|
val result = mapOf( |
|
|
|
"pickOrderId" to (pickOrder.id ?: 0L), |
|
|
|
"pickOrderCode" to (pickOrder.code ?: ""), |
|
|
|
"pickOrderConsoCode" to (pickOrder.consoCode ?: ""), |
|
|
|
"pickOrderTargetDate" to (pickOrder.targetDate?.toString() ?: ""), |
|
|
|
"pickOrderStatus" to (pickOrder.status?.value ?: ""), |
|
|
|
"deliveryOrderId" to (deliveryOrder?.id ?: 0L), |
|
|
|
"deliveryNo" to (deliveryOrder?.code ?: ""), |
|
|
|
"deliveryDate" to (deliveryOrder?.orderDate?.toString() ?: ""), |
|
|
|
"shopId" to (shop?.id ?: 0L), |
|
|
|
"shopCode" to (shop?.code ?: ""), |
|
|
|
"shopName" to (shop?.name ?: ""), |
|
|
|
"shopAddress" to buildShopAddress(shop), |
|
|
|
"shopPoNo" to (supplier?.code ?: ""), |
|
|
|
"numberOfCartons" to (pickOrder.pickOrderLines.size), |
|
|
|
"truckNo" to (truck?.truckNo ?: ""), // ✅ Use entity property |
|
|
|
"DepartureTime" to (truck?.departureTime?.toString() ?: ""), |
|
|
|
"qrCodeData" to (pickOrder.id ?: 0L) |
|
|
|
) |
|
|
|
|
|
|
|
println("✅ FG Pick Orders by ID result count: 1") |
|
|
|
return listOf(result) |
|
|
|
|
|
|
|
} catch (e: Exception) { |
|
|
|
println("❌ Error in getFgPickOrdersByPickOrderId: ${e.message}") |
|
|
|
e.printStackTrace() |
|
|
|
return emptyList() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private fun buildShopAddress(shop: com.ffii.fpsms.modules.master.entity.Shop?): String { |
|
|
|
if (shop == null) return "" |
|
|
|
|
|
|
|
val addressParts = mutableListOf<String>() |
|
|
|
|
|
|
|
shop.addr1?.let { if (it.isNotBlank()) addressParts.add(it) } |
|
|
|
shop.addr2?.let { if (it.isNotBlank()) addressParts.add(it) } |
|
|
|
shop.addr3?.let { if (it.isNotBlank()) addressParts.add(it) } |
|
|
|
shop.addr4?.let { if (it.isNotBlank()) addressParts.add(it) } |
|
|
|
shop.district?.let { if (it.isNotBlank()) addressParts.add(it) } |
|
|
|
|
|
|
|
return addressParts.joinToString(", ") |
|
|
|
} |
|
|
|
} |
|
|
|
} |