|
|
|
@@ -80,7 +80,9 @@ open class PickOrderService( |
|
|
|
private val doPickOrderService: DoPickOrderService, |
|
|
|
private val routerRepository: RouterRepository, |
|
|
|
private val doPickOrderRecordRepository: DoPickOrderRecordRepository, |
|
|
|
private val doPickOrderRepository: DoPickOrderRepository |
|
|
|
private val doPickOrderRepository: DoPickOrderRepository, |
|
|
|
private val userRepository: UserRepository |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
) : AbstractBaseEntityService<PickOrder, Long, PickOrderRepository>(jdbcDao, pickOrderRepository) { |
|
|
|
@@ -2765,15 +2767,18 @@ if (existingRecords.isNotEmpty()) { |
|
|
|
println("❌ Pick order not found with ID: $pickOrderId") |
|
|
|
return emptyList() |
|
|
|
} |
|
|
|
|
|
|
|
if (doPickOrderRepository.findByPickOrderId(pickOrderId).firstOrNull()?.hide == true) { |
|
|
|
println("🔍 Pick order $pickOrderId is hidden, returning empty list") |
|
|
|
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")) { |
|
|
|
val allowedstatuses= listOf("assigned", "released", "picking", "completed") |
|
|
|
if (pickOrder.status?.value !in allowedstatuses) { |
|
|
|
println("❌ Pick order status is not in allowed states: ${pickOrder.status?.value}") |
|
|
|
return emptyList() |
|
|
|
} |
|
|
|
@@ -3164,19 +3169,21 @@ open fun getAllPickOrderLotsWithDetailsHierarchical(userId: Long): Map<String, A |
|
|
|
println("❌ User not found: $userId") |
|
|
|
return emptyMap() |
|
|
|
} |
|
|
|
val statusList = listOf(PickOrderStatus.PENDING, PickOrderStatus.RELEASED, PickOrderStatus.COMPLETED) |
|
|
|
|
|
|
|
// Get all pick orders assigned to user with PENDING or RELEASED status that have doId |
|
|
|
val allAssignedPickOrders = pickOrderRepository.findAllByAssignToAndStatusIn( |
|
|
|
user, |
|
|
|
listOf(PickOrderStatus.PENDING, PickOrderStatus.RELEASED |
|
|
|
// , PickOrderStatus.COMPLETED |
|
|
|
) |
|
|
|
statusList |
|
|
|
).filter { it.deliveryOrder != null } // Only pick orders with doId |
|
|
|
|
|
|
|
println("🔍 DEBUG: Found ${allAssignedPickOrders.size} pick orders assigned to user $userId") |
|
|
|
|
|
|
|
val visiblePickOrders = allAssignedPickOrders.filter { pickOrder -> |
|
|
|
val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrder.id!!) |
|
|
|
doPickOrders.none { it.hide } // 只显示 hide = false 的订单 |
|
|
|
} |
|
|
|
// ✅ NEW LOGIC: Filter based on assignment and status |
|
|
|
val filteredPickOrders = if (allAssignedPickOrders.isNotEmpty()) { |
|
|
|
val filteredPickOrders = if (visiblePickOrders.isNotEmpty()) { |
|
|
|
// Check if there are any RELEASED orders assigned to this user (active work) |
|
|
|
val assignedReleasedOrders = allAssignedPickOrders.filter { |
|
|
|
it.status == PickOrderStatus.RELEASED && it.assignTo?.id == userId |
|
|
|
@@ -3666,4 +3673,132 @@ open fun confirmLotSubstitution(req: LotSubstitutionConfirmRequest): MessageResp |
|
|
|
errorPosition = null |
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
open fun updateDoPickOrderHideStatus(pickOrderId: Long, hide: Boolean): MessageResponse { |
|
|
|
return try { |
|
|
|
// ✅ 修复:根据 pickOrderId 查找 do_pick_order 记录 |
|
|
|
val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrderId) |
|
|
|
if (doPickOrders.isEmpty()) { |
|
|
|
MessageResponse( |
|
|
|
id = null, |
|
|
|
name = "Pick order not found", |
|
|
|
code = "ERROR", |
|
|
|
type = "pickorder", |
|
|
|
message = "No do_pick_order found for pickOrderId $pickOrderId", |
|
|
|
errorPosition = "pickOrderId" |
|
|
|
) |
|
|
|
} else { |
|
|
|
// ✅ 更新所有相关的 do_pick_order 记录 |
|
|
|
doPickOrders.forEach { doPickOrder -> |
|
|
|
doPickOrder.hide = hide |
|
|
|
doPickOrderRepository.save(doPickOrder) |
|
|
|
} |
|
|
|
|
|
|
|
MessageResponse( |
|
|
|
id = null, |
|
|
|
name = "Hide status updated", |
|
|
|
code = "SUCCESS", |
|
|
|
type = "pickorder", |
|
|
|
message = "Updated hide status for ${doPickOrders.size} do_pick_order records to $hide", |
|
|
|
errorPosition = null |
|
|
|
) |
|
|
|
} |
|
|
|
} catch (e: Exception) { |
|
|
|
println("❌ Error in updateDoPickOrderHideStatus: ${e.message}") |
|
|
|
e.printStackTrace() |
|
|
|
MessageResponse( |
|
|
|
id = null, |
|
|
|
name = "Failed to update hide status", |
|
|
|
code = "ERROR", |
|
|
|
type = "pickorder", |
|
|
|
message = "Failed to update hide status: ${e.message}", |
|
|
|
errorPosition = null |
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
open fun getCompletedDoPickOrders( |
|
|
|
userId: Long, |
|
|
|
pickOrderCode: String?, |
|
|
|
shopName: String?, |
|
|
|
deliveryNo: String?, |
|
|
|
ticketNo: String? |
|
|
|
): List<Map<String, Any?>> { |
|
|
|
return try { |
|
|
|
println("=== getCompletedDoPickOrders ===") |
|
|
|
println("userId: $userId") |
|
|
|
println("pickOrderCode: $pickOrderCode") |
|
|
|
println("shopName: $shopName") |
|
|
|
println("deliveryNo: $deliveryNo") |
|
|
|
println("ticketNo: $ticketNo") |
|
|
|
|
|
|
|
// ✅ 修复:使用正确的方法获取已完成的 pick orders |
|
|
|
val user = userRepository.findById(userId).orElse(null) |
|
|
|
if (user == null) { |
|
|
|
println("User not found: $userId") |
|
|
|
return emptyList() |
|
|
|
} |
|
|
|
|
|
|
|
// ✅ 修复:使用正确的方法获取已完成的 pick orders |
|
|
|
val completedPickOrders = pickOrderRepository.findAllByAssignToIdAndStatusIn( |
|
|
|
userId, |
|
|
|
listOf(PickOrderStatus.COMPLETED) |
|
|
|
) |
|
|
|
|
|
|
|
println("Found ${completedPickOrders.size} completed pick orders for user $userId") |
|
|
|
|
|
|
|
val result = mutableListOf<Map<String, Any?>>() |
|
|
|
|
|
|
|
for (pickOrder in completedPickOrders) { |
|
|
|
// 获取该 pick order 的 FG pick orders |
|
|
|
val fgPickOrders = getFgPickOrdersByPickOrderId(pickOrder.id!!) |
|
|
|
|
|
|
|
if (fgPickOrders.isNotEmpty()) { |
|
|
|
val firstFgOrder = fgPickOrders[0] as Map<String, Any?> // ✅ 修复:转换为 Map |
|
|
|
|
|
|
|
// ✅ 修复:使用正确的属性名进行搜索过滤,并处理空值 |
|
|
|
val matchesSearch = when { |
|
|
|
pickOrderCode != null && !(pickOrder.code?.contains(pickOrderCode, ignoreCase = true) ?: false) -> false |
|
|
|
shopName != null && !((firstFgOrder["shopName"] as? String)?.contains(shopName, ignoreCase = true) ?: false) -> false |
|
|
|
deliveryNo != null && !((firstFgOrder["deliveryNo"] as? String)?.contains(deliveryNo, ignoreCase = true) ?: false) -> false |
|
|
|
ticketNo != null && !((firstFgOrder["ticketNo"] as? String)?.contains(ticketNo, ignoreCase = true) ?: false) -> false |
|
|
|
else -> true |
|
|
|
} |
|
|
|
|
|
|
|
if (matchesSearch) { |
|
|
|
result.add(mapOf( |
|
|
|
"id" to pickOrder.id, |
|
|
|
"pickOrderId" to pickOrder.id, |
|
|
|
"pickOrderCode" to pickOrder.code, |
|
|
|
"pickOrderConsoCode" to pickOrder.consoCode, |
|
|
|
"pickOrderStatus" to pickOrder.status.toString(), |
|
|
|
"deliveryOrderId" to firstFgOrder["deliveryOrderId"], |
|
|
|
"deliveryNo" to firstFgOrder["deliveryNo"], |
|
|
|
"deliveryDate" to firstFgOrder["deliveryDate"], |
|
|
|
"shopId" to firstFgOrder["shopId"], |
|
|
|
"shopCode" to firstFgOrder["shopCode"], |
|
|
|
"shopName" to firstFgOrder["shopName"], |
|
|
|
"shopAddress" to firstFgOrder["shopAddress"], |
|
|
|
"ticketNo" to firstFgOrder["ticketNo"], |
|
|
|
"shopPoNo" to firstFgOrder["shopPoNo"], |
|
|
|
"numberOfCartons" to firstFgOrder["numberOfCartons"], |
|
|
|
"truckNo" to firstFgOrder["truckNo"], |
|
|
|
"storeId" to firstFgOrder["storeId"], |
|
|
|
"completedDate" to (pickOrder.completeDate?.toString() ?: pickOrder.modified?.toString()), |
|
|
|
"fgPickOrders" to fgPickOrders |
|
|
|
)) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 按完成时间倒序排列 |
|
|
|
result.sortByDescending { it["completedDate"] as String? } |
|
|
|
|
|
|
|
println("Returning ${result.size} completed DO pick orders") |
|
|
|
result |
|
|
|
|
|
|
|
} catch (e: Exception) { |
|
|
|
println("❌ Error in getCompletedDoPickOrders: ${e.message}") |
|
|
|
e.printStackTrace() |
|
|
|
emptyList() |
|
|
|
} |
|
|
|
} |
|
|
|
} |