|
|
|
@@ -77,7 +77,7 @@ open class JoPickOrderService( |
|
|
|
} |
|
|
|
|
|
|
|
// Update JoPickOrder status to released |
|
|
|
open fun updateHandledByForPickOrder(pickOrderId: Long, userId: Long): List<JoPickOrder> { |
|
|
|
open fun updateHandledByForPickOrder(pickOrderId: Long, userId: Long?): List<JoPickOrder> { |
|
|
|
val joPickOrders = joPickOrderRepository.findByPickOrderId(pickOrderId) |
|
|
|
|
|
|
|
// Get pick order details to populate new fields |
|
|
|
@@ -111,7 +111,7 @@ open class JoPickOrderService( |
|
|
|
} |
|
|
|
|
|
|
|
// Update JoPickOrderRecord status to released |
|
|
|
open fun updateRecordHandledByForPickOrder(pickOrderId: Long, userId: Long): List<JoPickOrderRecord> { |
|
|
|
open fun updateRecordHandledByForPickOrder(pickOrderId: Long, userId: Long?): List<JoPickOrderRecord> { |
|
|
|
val joPickOrderRecords = joPickOrderRecordRepository.findByPickOrderId(pickOrderId) |
|
|
|
|
|
|
|
// Get pick order details to populate new fields |
|
|
|
@@ -957,6 +957,47 @@ open fun assignJobOrderPickOrderToUser(pickOrderId: Long, userId: Long): Message |
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
open fun unAssignJobOrderPickOrderToUser(pickOrderId: Long): MessageResponse { |
|
|
|
println("=== unAssignJobOrderPickOrderToUser ===") |
|
|
|
println("pickOrderId: $pickOrderId") |
|
|
|
|
|
|
|
return try { |
|
|
|
val pickOrder = pickOrderRepository.findById(pickOrderId).orElse(null) |
|
|
|
if (pickOrder == null) { |
|
|
|
return MessageResponse( |
|
|
|
id = null, |
|
|
|
code = null, |
|
|
|
name = null, |
|
|
|
type = null, |
|
|
|
message = "Pick order not found", |
|
|
|
errorPosition = null |
|
|
|
) |
|
|
|
} |
|
|
|
pickOrder.assignTo = null |
|
|
|
pickOrderRepository.save(pickOrder) |
|
|
|
this.updateHandledByForPickOrder(pickOrderId, null) |
|
|
|
this.updateRecordHandledByForPickOrder(pickOrderId, null) |
|
|
|
MessageResponse( |
|
|
|
id = pickOrder.id, |
|
|
|
code = pickOrder.code, |
|
|
|
name = pickOrder.jobOrder?.bom?.name, |
|
|
|
type = null, |
|
|
|
message = "Successfully unassigned", |
|
|
|
errorPosition = null |
|
|
|
) |
|
|
|
} catch (e: Exception) { |
|
|
|
println("❌ Error in unAssignJobOrderPickOrderToUser: ${e.message}") |
|
|
|
e.printStackTrace() |
|
|
|
MessageResponse( |
|
|
|
id = null, |
|
|
|
code = null, |
|
|
|
name = null, |
|
|
|
type = null, |
|
|
|
message = "Error occurred: ${e.message}", |
|
|
|
errorPosition = null |
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
// Fix the updateMatchStatus method |
|
|
|
open fun updateMatchStatus(pickOrderId: Long, itemId: Long, userId: Long, qty: Int): MessageResponse { |
|
|
|
try { |
|
|
|
@@ -1494,66 +1535,70 @@ open fun getCompletedJobOrderPickOrderLotDetails(pickOrderId: Long): List<Map<St |
|
|
|
} |
|
|
|
// ... existing code ... |
|
|
|
|
|
|
|
open fun getCompletedJobOrderPickOrders(userId: Long): List<Map<String, Any?>> { |
|
|
|
println("=== getCompletedJobOrderPickOrders ===") |
|
|
|
println("userId: $userId") |
|
|
|
|
|
|
|
return try { |
|
|
|
// Get all completed pick orders assigned to user that have joId |
|
|
|
val completedPickOrders = pickOrderRepository.findAllByAssignToIdAndStatusIn( |
|
|
|
userId, |
|
|
|
listOf(PickOrderStatus.COMPLETED) |
|
|
|
).filter { it.jobOrder != null } // Only pick orders with joId |
|
|
|
open fun getCompletedJobOrderPickOrders(userId: Long): List<Map<String, Any?>> { |
|
|
|
println("=== getCompletedJobOrderPickOrders ===") |
|
|
|
println("userId: $userId") |
|
|
|
|
|
|
|
println("Found ${completedPickOrders.size} completed job order pick orders for user $userId") |
|
|
|
return try { |
|
|
|
// 修复:先查找所有 COMPLETED 状态的 job order pick orders(不限制 assignTo) |
|
|
|
val allCompletedPickOrders = pickOrderRepository.findAllByStatusIn( |
|
|
|
listOf(PickOrderStatus.COMPLETED) |
|
|
|
).filter { |
|
|
|
it.jobOrder != null && // 只查找有 job order 的 |
|
|
|
(it.assignTo?.id == userId || it.assignTo == null) // 分配给当前用户或未分配 |
|
|
|
} |
|
|
|
|
|
|
|
println("Found ${allCompletedPickOrders.size} completed job order pick orders (including unassigned)") |
|
|
|
|
|
|
|
val completedJobOrderPickOrders = completedPickOrders.mapNotNull { pickOrder -> |
|
|
|
val jobOrder = pickOrder.jobOrder |
|
|
|
if (jobOrder != null) { |
|
|
|
// Get JoPickOrder records for this pick order |
|
|
|
val joPickOrders = findByPickOrderId(pickOrder.id!!) |
|
|
|
val completedJobOrderPickOrders = allCompletedPickOrders.mapNotNull { pickOrder -> |
|
|
|
val jobOrder = pickOrder.jobOrder |
|
|
|
if (jobOrder != null) { |
|
|
|
// Get JoPickOrder records for this pick order |
|
|
|
val joPickOrders = findByPickOrderId(pickOrder.id!!) |
|
|
|
|
|
|
|
println("Pick Order ${pickOrder.code}: joPickOrders.size=${joPickOrders.size}") |
|
|
|
|
|
|
|
// Calculate second scan completion status |
|
|
|
val secondScanCompleted = joPickOrders.isNotEmpty() && |
|
|
|
joPickOrders.all { it.matchStatus == JoPickOrderStatus.completed } |
|
|
|
// Calculate second scan completion status |
|
|
|
val secondScanCompleted = joPickOrders.isNotEmpty() && |
|
|
|
joPickOrders.all { it.matchStatus == JoPickOrderStatus.completed } |
|
|
|
|
|
|
|
mapOf( |
|
|
|
"id" to pickOrder.id, |
|
|
|
"pickOrderId" to pickOrder.id, |
|
|
|
"pickOrderCode" to pickOrder.code, |
|
|
|
"pickOrderConsoCode" to pickOrder.consoCode, |
|
|
|
"pickOrderTargetDate" to pickOrder.targetDate?.let { |
|
|
|
"${it.year}-${String.format("%02d", it.monthValue)}-${String.format("%02d", it.dayOfMonth)}" |
|
|
|
}, |
|
|
|
"pickOrderStatus" to pickOrder.status, |
|
|
|
"completedDate" to pickOrder.completeDate?.let { |
|
|
|
"${it.year}-${String.format("%02d", it.monthValue)}-${String.format("%02d", it.dayOfMonth)}" |
|
|
|
}, |
|
|
|
"jobOrderId" to jobOrder.id, |
|
|
|
"jobOrderCode" to jobOrder.code, |
|
|
|
"jobOrderName" to jobOrder.bom?.name, |
|
|
|
"reqQty" to jobOrder.reqQty, |
|
|
|
"uom" to jobOrder.bom?.uom?.code, |
|
|
|
"planStart" to jobOrder.planStart, |
|
|
|
"planEnd" to jobOrder.planEnd, |
|
|
|
"secondScanCompleted" to secondScanCompleted, |
|
|
|
"totalItems" to joPickOrders.size, |
|
|
|
"completedItems" to joPickOrders.count { it.matchStatus == JoPickOrderStatus.completed } |
|
|
|
) |
|
|
|
} else { |
|
|
|
println("❌ Pick order ${pickOrder.id} has no job order, skipping.") |
|
|
|
null |
|
|
|
} |
|
|
|
mapOf( |
|
|
|
"id" to pickOrder.id, |
|
|
|
"pickOrderId" to pickOrder.id, |
|
|
|
"pickOrderCode" to pickOrder.code, |
|
|
|
"pickOrderConsoCode" to pickOrder.consoCode, |
|
|
|
"pickOrderTargetDate" to pickOrder.targetDate?.let { |
|
|
|
"${it.year}-${String.format("%02d", it.monthValue)}-${String.format("%02d", it.dayOfMonth)}" |
|
|
|
}, |
|
|
|
"pickOrderStatus" to pickOrder.status, |
|
|
|
"completedDate" to pickOrder.completeDate?.let { |
|
|
|
"${it.year}-${String.format("%02d", it.monthValue)}-${String.format("%02d", it.dayOfMonth)}" |
|
|
|
}, |
|
|
|
"jobOrderId" to jobOrder.id, |
|
|
|
"jobOrderCode" to jobOrder.code, |
|
|
|
"jobOrderName" to jobOrder.bom?.name, |
|
|
|
"reqQty" to jobOrder.reqQty, |
|
|
|
"uom" to jobOrder.bom?.uom?.code, |
|
|
|
"planStart" to jobOrder.planStart, |
|
|
|
"planEnd" to jobOrder.planEnd, |
|
|
|
"secondScanCompleted" to secondScanCompleted, |
|
|
|
"totalItems" to joPickOrders.size, |
|
|
|
"completedItems" to joPickOrders.count { it.matchStatus == JoPickOrderStatus.completed } |
|
|
|
) |
|
|
|
} else { |
|
|
|
println("❌ Pick order ${pickOrder.id} has no job order, skipping.") |
|
|
|
null |
|
|
|
} |
|
|
|
|
|
|
|
println("Returning ${completedJobOrderPickOrders.size} completed job order pick orders") |
|
|
|
completedJobOrderPickOrders |
|
|
|
} catch (e: Exception) { |
|
|
|
println("❌ Error in getCompletedJobOrderPickOrders: ${e.message}") |
|
|
|
e.printStackTrace() |
|
|
|
emptyList() |
|
|
|
} |
|
|
|
|
|
|
|
println("Returning ${completedJobOrderPickOrders.size} completed job order pick orders") |
|
|
|
completedJobOrderPickOrders |
|
|
|
} catch (e: Exception) { |
|
|
|
println("❌ Error in getCompletedJobOrderPickOrders: ${e.message}") |
|
|
|
e.printStackTrace() |
|
|
|
emptyList() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// ... rest of the code ... |
|
|
|
|
|
|
|
|