CANCERYS\kw093 преди 2 дни
родител
ревизия
cd035b439f
променени са 6 файла, в които са добавени 44 реда и са изтрити 32 реда
  1. +9
    -9
      src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt
  2. +1
    -1
      src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt
  3. +18
    -17
      src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt
  4. +1
    -0
      src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutRepository.kt
  5. +2
    -1
      src/main/java/com/ffii/fpsms/modules/stock/service/StockOutLineService.kt
  6. +13
    -4
      src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt

+ 9
- 9
src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt Целия файл

@@ -607,6 +607,14 @@ open class JobOrderService(
pickOrderEntity.consoCode = consoCode
pickOrderEntity.status = com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus.RELEASED
pickOrderRepository.saveAndFlush(pickOrderEntity)
// Create stock out record and pre-create stock out lines
val stockOut = StockOut().apply {
this.type = "job"
this.consoPickOrderCode = consoCode
this.status = StockOutStatus.PENDING.status
this.handler = SecurityUtils.getUser().getOrNull()?.id
}
val savedStockOut = stockOutRepository.saveAndFlush(stockOut)

// 添加 suggested pick lots 创建逻辑
val lines = pickOrderLineRepository.findAllByPickOrderId(pickOrderEntity.id!!)
@@ -646,15 +654,7 @@ open class JobOrderService(
}
inventoryLotLineRepository.saveAll(inventoryLotLines)

// Create stock out record and pre-create stock out lines
val stockOut = StockOut().apply {
this.type = "job"
this.consoPickOrderCode = consoCode
this.status = StockOutStatus.PENDING.status
this.handler = SecurityUtils.getUser().getOrNull()?.id
}
val savedStockOut = stockOutRepository.saveAndFlush(stockOut)

// Pre-create stock out lines for suggested lots
saveSuggestedPickLots.forEach { lot ->
val polId = lot.pickOrderLine?.id


+ 1
- 1
src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt Целия файл

@@ -400,7 +400,7 @@ private fun checkAndCompletePickOrder(consoCode: String) {
println("consoCode: $consoCode")
// 1. 查找 StockOut
val stockOut = stockOutRepository.findByConsoPickOrderCode(consoCode).orElse(null)
val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(consoCode)
if (stockOut == null) {
println("❌ No stock_out found for consoCode: $consoCode")
return


+ 18
- 17
src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt Целия файл

@@ -1192,7 +1192,8 @@ open class PickOrderService(
println("=== DEBUG: completeStockOut ===")
println("consoCode: $consoCode")

val stockOut = stockOutRepository.findByConsoPickOrderCode(consoCode).orElseThrow()
val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(consoCode)
?: throw NoSuchElementException("No stock_out found for consoCode: $consoCode")
println("StockOut ID: ${stockOut.id}")

// FIXED: 直接通过 consoCode 查找相关的 stock out lines,而不依赖 stockOutId 关联
@@ -1307,7 +1308,7 @@ open class PickOrderService(
doPickOrderIds.forEach { doPickOrderId ->
val dpo = doPickOrderRepository.findById(doPickOrderId).orElse(null)
if (dpo == null) {
println("⚠️ WARNING: do_pick_order $doPickOrderId not found, skipping")
println(" WARNING: do_pick_order $doPickOrderId not found, skipping")
return@forEach
}
@@ -2401,14 +2402,14 @@ open class PickOrderService(
val consoCode = pickOrder.consoCode
if (consoCode == null) {
println(" Checking pick order ${pickOrder.code} (consoCode: null)")
println(" ⚠️ No consoCode - considering as active")
println(" No consoCode - considering as active")
true // No consoCode means not completed
} else {
val stockOut = stockOutRepository.findByConsoPickOrderCode(consoCode).orElse(null)
println("�� Checking pick order ${pickOrder.code} (consoCode: $consoCode)")
val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(consoCode)
println(" Checking pick order ${pickOrder.code} (consoCode: $consoCode)")

if (stockOut == null) {
println(" ⚠️ No stock_out record found - considering as active")
println(" No stock_out record found - considering as active")
true // No stock_out record means not completed
} else {
println(" 📦 Stock_out status: ${stockOut.status}")
@@ -2835,7 +2836,7 @@ open class PickOrderService(
""", mapOf("shopId" to shop.id)
).orElse(null)
} catch (e: Exception) {
println("⚠️ No truck found for shop ${shop.id}: ${e.message}")
println(" No truck found for shop ${shop.id}: ${e.message}")
null
}
} else null
@@ -3047,12 +3048,12 @@ open class PickOrderService(

selectedTruck
} catch (e: Exception) {
println("⚠️ Error querying truck repository for shop ${shop.id}: ${e.message}")
println(" Error querying truck repository for shop ${shop.id}: ${e.message}")
e.printStackTrace()
null
}
} else {
println("⚠️ Shop ID is null")
println(" Shop ID is null")
null
}
val ticketNo = try {
@@ -3061,14 +3062,14 @@ open class PickOrderService(
println(" Found ticket number: $ticketNo for pick order $pickOrderId")
ticketNo
} catch (e: Exception) {
println("⚠️ Error getting ticket number for pick order $pickOrderId: ${e.message}")
println(" Error getting ticket number for pick order $pickOrderId: ${e.message}")
""
}
val dpoStoreId = try {
val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrderId)
doPickOrders.firstOrNull()?.storeId ?: ""
} catch (e: Exception) {
println("⚠️ Error getting storeId for pick order $pickOrderId: ${e.message}")
println(" Error getting storeId for pick order $pickOrderId: ${e.message}")
""
}
val result = mapOf(
@@ -3159,12 +3160,12 @@ open class PickOrderService(

selectedTruck
} catch (e: Exception) {
println("⚠️ Error querying truck repository for shop ${shop.id}: ${e.message}")
println(" Error querying truck repository for shop ${shop.id}: ${e.message}")
e.printStackTrace()
null
}
} else {
println("⚠️ Shop ID is null")
println(" Shop ID is null")
null
}
val ticketNo = try {
@@ -3173,14 +3174,14 @@ open class PickOrderService(
println(" Found ticket number: $ticketNo for pick order $pickOrderId")
ticketNo
} catch (e: Exception) {
println("⚠️ Error getting ticket number for pick order $pickOrderId: ${e.message}")
println(" Error getting ticket number for pick order $pickOrderId: ${e.message}")
""
}
val dpoStoreId = try {
val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrderId)
doPickOrders.firstOrNull()?.storeId ?: ""
} catch (e: Exception) {
println("⚠️ Error getting storeId for pick order $pickOrderId: ${e.message}")
println(" Error getting storeId for pick order $pickOrderId: ${e.message}")
""
}
val result = mapOf(
@@ -3478,7 +3479,7 @@ ORDER BY
)
}
} catch (e: Exception) {
println("⚠️ Error getting router info for inventoryLotId $inventoryLotId: ${e.message}")
println(" Error getting router info for inventoryLotId $inventoryLotId: ${e.message}")
mapOf(
"routerIndex" to 0,
"routerRoute" to "",
@@ -4422,7 +4423,7 @@ println("DEBUG sol polIds in linesResults: " + linesResults.mapNotNull { it["sto
// 备用方案:如果 lineRecords 中没有 pickOrderId,尝试使用 DoPickOrderRecord.pickOrderId
if (pickOrderIds.isEmpty() && dpor.pickOrderId != null) {
println("⚠️ WARNING: No pickOrderIds in lineRecords, using DoPickOrderRecord.pickOrderId=${dpor.pickOrderId}")
println(" WARNING: No pickOrderIds in lineRecords, using DoPickOrderRecord.pickOrderId=${dpor.pickOrderId}")
pickOrderIds = listOf(dpor.pickOrderId!!)
}


+ 1
- 0
src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutRepository.kt Целия файл

@@ -10,4 +10,5 @@ interface StockOutRepository: AbstractRepository<StockOut, Long> {
// consoPickOrderCode 可能在 DB 中存在重复,避免 single-result exception
fun findFirstByConsoPickOrderCodeOrderByIdDesc(consoPickOrderCode: String): StockOut?
fun findByStockTakeIdAndDeletedFalse(stockTakeId: Long): StockOut?

}

+ 2
- 1
src/main/java/com/ffii/fpsms/modules/stock/service/StockOutLineService.kt Целия файл

@@ -166,7 +166,8 @@ val existingStockOutLine = stockOutLineRepository.findByPickOrderLineIdAndInvent
allStockOuts.forEach { stockOut ->
println("StockOut ID: ${stockOut.id}, consoPickOrderCode: ${stockOut.consoPickOrderCode}")
}
val stockOut = stockOutRepository.findByConsoPickOrderCode(request.consoCode).orElseThrow()
val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(request.consoCode)
?: throw NoSuchElementException("StockOut not found for consoCode: ${request.consoCode}")
println("Found stockOut: ${stockOut.id} with consoCode: ${stockOut.consoPickOrderCode}")
val pickOrderLine = pickOrderLineRepository.saveAndFlush(
pickOrderLineRepository.findById(request.pickOrderLineId).orElseThrow()


+ 13
- 4
src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt Целия файл

@@ -470,7 +470,8 @@ open class SuggestedPickLotService(
}
// Get or create StockOut
val stockOut = stockOutRepository.findByConsoPickOrderCode(pickOrder.consoCode ?: "")
/*
val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(pickOrder.consoCode ?: "")
.orElseGet {
val handlerId = pickOrder.assignTo?.id ?: SecurityUtils.getUser().orElse(null)?.id
require(handlerId != null) { "Cannot create StockOut: handlerId is null" }
@@ -482,6 +483,8 @@ open class SuggestedPickLotService(
}
stockOutRepository.save(newStockOut)
}
*/
val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(pickOrder.consoCode ?: "")
val item = pickOrderLine.item ?: itemRepository.findById(pickOrderLine.item!!.id!!).orElseThrow()
// Create stock out line with inventoryLotLineId = null
val stockOutLine = StockOutLine().apply {
@@ -512,9 +515,9 @@ open class SuggestedPickLotService(
println("Stock out line already exists for pickOrderLineId: ${pickOrderLine.id}, inventoryLotLineId: ${suggestedLotLine.id}")
return existingStockOutLine.first()
}
/*
// Get or create StockOut
val stockOut = stockOutRepository.findByConsoPickOrderCode(pickOrder.consoCode ?: "")
val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(pickOrder.consoCode ?: "")
.orElseGet {
// Create new StockOut if it doesn't exist
val newStockOut = StockOut().apply {
@@ -524,7 +527,13 @@ open class SuggestedPickLotService(
}
stockOutRepository.save(newStockOut)
}
*/
val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(pickOrder.consoCode ?: "")
if (stockOut == null) {
println("⚠️ StockOut not found for consoCode=${pickOrder.consoCode}, skip creating stockOutLine")
return null
}

// Update pick order line status to PICKING
val updatedPickOrderLine = pickOrderLineRepository.saveAndFlush(
pickOrderLine.apply {


Зареждане…
Отказ
Запис