Przeglądaj źródła

update job order list part , can use record part again. and updated but not yet finish consuble pick order

master
CANCERYS\kw093 1 tydzień temu
rodzic
commit
c68bdda366
4 zmienionych plików z 84 dodań i 25 usunięć
  1. +4
    -4
      src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt
  2. +61
    -21
      src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderWorkbenchService.kt
  3. +18
    -0
      src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt
  4. +1
    -0
      src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/ConsoPickOrderResponse.kt

+ 4
- 4
src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt Wyświetl plik

@@ -269,7 +269,7 @@ open class ItemsService(
open fun getPickOrderItemsByPage(args: Map<String, Any>): List<Map<String, Any>> {
try {
println("=== Debug: getPickOrderItemsByPage in ItemsService ===")
println("Args: $args")
//println("Args: $args")

val sql = StringBuilder(
"""
@@ -333,11 +333,11 @@ open class ItemsService(
sql.append(" ORDER BY po.targetDate DESC, i.name ASC ")

val finalSql = sql.toString()
println("Final SQL: $finalSql")
println("SQL args: $args")
// println("Final SQL: $finalSql")
//println("SQL args: $args")

val result = jdbcDao.queryForList(finalSql, args)
println("Query result size: ${result.size}")
//println("Query result size: ${result.size}")
result.forEach { row -> println("Result row: $row") }
return result
} catch (e: Exception) {


+ 61
- 21
src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderWorkbenchService.kt Wyświetl plik

@@ -50,7 +50,7 @@ open class PickOrderWorkbenchService(
/**
* Workbench assign V2 for consumable pick orders:
* - Assign selected pick orders to user and mark ASSIGNED.
* - Build no-hold suggestions + ensure stock_out_line for each pick order.
* - Do NOT create suggestion/stock_out_line here (created on Tab3 line select).
*/
@Transactional(rollbackFor = [Exception::class])
open fun assignPickOrdersV2(pickOrderIds: List<Long>, assignTo: Long): MessageResponse {
@@ -73,34 +73,17 @@ open class PickOrderWorkbenchService(
pickOrder.status = PickOrderStatus.ASSIGNED
}
pickOrderRepository.saveAll(pickOrders)

val assignedIds = mutableListOf<Long>()
var suggestionRows = 0
var stockOutLines = 0
pickOrders.forEach { po ->
val poId = po.id ?: return@forEach
val suggestSummary = suggestedPickLotWorkbenchService.primeNextSingleLotSuggestionsForPickOrder(
pickOrderId = poId,
storeId = null,
excludeWarehouseCodes = null,
)
val solSummary = stockOutLineWorkbenchService.ensureStockOutLinesForPickOrderNoHold(poId, assignTo)
assignedIds.add(poId)
suggestionRows += suggestSummary.created
stockOutLines += solSummary.created
}
val assignedIds = pickOrders.mapNotNull { it.id }

return MessageResponse(
id = null,
name = "Workbench assign v2 success",
code = "SUCCESS",
type = "pickorder_workbench",
message = "Assigned and initialized no-hold suggestion/stock-out for workbench",
message = "Assigned pick orders for workbench (no suggestion/stock-out at assign stage)",
errorPosition = null,
entity = mapOf(
"pickOrderIds" to assignedIds,
"suggestionRowsCreated" to suggestionRows,
"stockOutLinesCreated" to stockOutLines
"pickOrderIds" to assignedIds
)
)
} catch (e: Exception) {
@@ -342,6 +325,7 @@ open class PickOrderWorkbenchService(
lotNo = r["lotNo"]?.toString(),
expiryDate = toLocalDate(r["expiryDate"]),
location = r["location"]?.toString(),
itemId = pol.item?.id,
stockUnit = uomDesc,
availableQty = availableQty,
requiredQty = toBigDecimal(r["suggestedQty"]) ?: pol.qty ?: zero,
@@ -379,6 +363,7 @@ open class PickOrderWorkbenchService(
lotNo = null,
expiryDate = null,
location = null,
itemId = pol.item?.id,
stockUnit = uomDesc,
availableQty = null,
requiredQty = pol.qty ?: zero,
@@ -400,5 +385,60 @@ open class PickOrderWorkbenchService(

return withLot + noLot
}

/**
* Workbench suggest V2 for consumable pick orders (first-time suggestion path):
* - Create/rebuild no-hold suggestions for this pick order.
* - Ensure stock_out_line rows exist for created/reused suggestions.
*/
@Transactional(rollbackFor = [Exception::class])
open fun suggestPickOrderV2(pickOrderId: Long, userId: Long): MessageResponse {
return try {
val pickOrder = pickOrderRepository.findById(pickOrderId).orElse(null)
?: return MessageResponse(
id = pickOrderId,
name = "Workbench suggest v2 failed",
code = "ERROR",
type = "pickorder_workbench",
message = "Pick order not found",
errorPosition = null
)

val suggestSummary = suggestedPickLotWorkbenchService.primeNextSingleLotSuggestionsForPickOrder(
pickOrderId = pickOrderId,
storeId = null,
excludeWarehouseCodes = null,
)
val stockOutSummary = stockOutLineWorkbenchService.ensureStockOutLinesForPickOrderNoHold(
pickOrderId = pickOrderId,
userId = userId,
)

MessageResponse(
id = pickOrder.id,
name = "Workbench suggest v2 success",
code = "SUCCESS",
type = "pickorder_workbench",
message = "Workbench suggestion prepared",
errorPosition = null,
entity = mapOf(
"pickOrderId" to pickOrderId,
"suggestionRowsCreated" to suggestSummary.created,
"suggestionRowsSkippedExisting" to suggestSummary.skippedExisting,
"stockOutLinesCreated" to stockOutSummary.created,
"stockOutLinesReused" to stockOutSummary.reused,
)
)
} catch (e: Exception) {
MessageResponse(
id = pickOrderId,
name = "Workbench suggest v2 failed",
code = "ERROR",
type = "pickorder_workbench",
message = "Failed to prepare workbench suggestion: ${e.message}",
errorPosition = null
)
}
}
}


+ 18
- 0
src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt Wyświetl plik

@@ -105,6 +105,24 @@ class PickOrderController(
return pickOrderWorkbenchService.getWorkbenchPickOrderLineLotDetailsV2(pickOrderLineId)
}

@PostMapping("/workbench/suggest-v2/{pickOrderId}")
fun suggestPickOrderWorkbenchV2(
@PathVariable pickOrderId: Long,
@RequestBody request: Map<String, Any>,
): MessageResponse {
val userId = request["userId"]?.toString()?.toLongOrNull()
?: request["assignTo"]?.toString()?.toLongOrNull()
?: return MessageResponse(
id = pickOrderId,
name = "Workbench suggest v2 failed",
code = "ERROR",
type = "pickorder_workbench",
message = "userId is required",
errorPosition = null
)
return pickOrderWorkbenchService.suggestPickOrderV2(pickOrderId, userId)
}

// Release Pick Orders (without consoCode)
@PostMapping("/release")
fun releasePickOrders(@RequestBody request: Map<String, Any>): MessageResponse {


+ 1
- 0
src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/ConsoPickOrderResponse.kt Wyświetl plik

@@ -162,6 +162,7 @@ data class PickOrderLineLotDetailResponse(
val lotNo: String?,
val expiryDate: LocalDate?,
val location: String?,
val itemId: Long? = null,
val stockUnit: String?,
val availableQty: BigDecimal?,
val requiredQty: BigDecimal?,


Ładowanie…
Anuluj
Zapisz