Ver código fonte

update

reset-do-picking-order
CANCERYS\kw093 5 dias atrás
pai
commit
3b2cde0247
2 arquivos alterados com 60 adições e 11 exclusões
  1. +41
    -11
      src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt
  2. +19
    -0
      src/main/java/com/ffii/fpsms/modules/stock/service/StockOutLineService.kt

+ 41
- 11
src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt Ver arquivo

@@ -4,7 +4,7 @@ import com.ffii.core.response.RecordsRes
import com.ffii.core.support.AbstractBaseEntityService
import com.ffii.core.support.JdbcDao
import com.ffii.fpsms.modules.common.SecurityUtils
import com.ffii.fpsms.modules.common.CodeGenerator
import com.ffii.fpsms.modules.jobOrder.entity.JobOrderRepository
import com.ffii.fpsms.modules.master.entity.ItemsRepository
import com.ffii.fpsms.modules.master.entity.UomConversionRepository
@@ -1234,9 +1234,14 @@ open class PickOrderService(
println("Stock out line ${line.id}: status=${line.status}, qty=${line.qty}")
}

val unfinishedLines = stockOutLines.filter {
it.status != StockOutLineStatus.COMPLETE.status
&& it.status != StockOutLineStatus.REJECTED.status
val unfinishedLines = stockOutLines.filter { sol ->
val status = sol.status?.trim()?.lowercase()
val isComplete = status == "completed" || status == StockOutLineStatus.COMPLETE.status.lowercase()
val isRejected = status == "rejected" || status == StockOutLineStatus.REJECTED.status.lowercase()
val isPartiallyComplete = status == "partially_completed" || status == StockOutLineStatus.PARTIALLY_COMPLETE.status.lowercase()
// 只要是“结束态”(你认可的状态),就不算 unfinished
!(isComplete || isRejected || isPartiallyComplete)
}

println("Unfinished lines: ${unfinishedLines.size}")
@@ -1334,7 +1339,11 @@ open class PickOrderService(
}
println(" All pick orders in this do_pick_order are completed, moving to record table")

val prefix = "DN"
val midfix = CodeGenerator.DEFAULT_MIDFIX
val latestCode = doPickOrderRecordRepository.findLatestDeliveryNoteCodeByPrefix("${prefix}-${midfix}")
val deliveryNoteCode = CodeGenerator.generateNo(prefix = prefix, midfix = midfix, latestCode = latestCode)
// 2) 先复制 do_pick_order -> do_pick_order_record
val dpoRecord = DoPickOrderRecord(
recordId =dpo.id,
@@ -1350,6 +1359,7 @@ open class PickOrderService(
doOrderId = dpo.doOrderId,
pickOrderCode = dpo.pickOrderCode,
deliveryOrderCode = dpo.deliveryOrderCode,
deliveryNoteCode = deliveryNoteCode,
loadingSequence = dpo.loadingSequence,
ticketReleaseTime = dpo.ticketReleaseTime,
ticketCompleteDateTime = java.time.LocalDateTime.now(),
@@ -1365,7 +1375,7 @@ open class PickOrderService(
val lineRecords = lines.map { l: DoPickOrderLine ->
DoPickOrderLineRecord().apply {
this.recordId=l.id
this.doPickOrderId = savedHeader.id
this.doPickOrderId = savedHeader.recordId
this.pickOrderId = l.pickOrderId
this.doOrderId = l.doOrderId
this.pickOrderCode = l.pickOrderCode
@@ -1483,9 +1493,18 @@ open class PickOrderService(
} else {
emptyList()
}
val unfinishedLines = stockOutLines.filter {
it.status != StockOutLineStatus.COMPLETE.status
&& it.status != StockOutLineStatus.REJECTED.status
val unfinishedLines = stockOutLines.filter { sol ->
val status = sol.status?.trim()?.lowercase()
val isComplete =
status == "completed" || status == StockOutLineStatus.COMPLETE.status.lowercase()
val isRejected =
status == "rejected" || status == StockOutLineStatus.REJECTED.status.lowercase()
val isPartiallyComplete =
status == "partially_completed" || status == StockOutLineStatus.PARTIALLY_COMPLETE.status.lowercase()
// 只要是你认可的“结束态”,就不算 unfinished
!(isComplete || isRejected || isPartiallyComplete)
}

println("📊 Stock out lines: ${stockOutLines.size}, Unfinished: ${unfinishedLines.size}")
@@ -2403,9 +2422,20 @@ open class PickOrderService(
emptyList()
}

val unfinishedLines = stockOutLines.filter {
it.status != StockOutLineStatus.COMPLETE.status && it.status != StockOutLineStatus.REJECTED.status
val unfinishedLines = stockOutLines.filter { sol ->
val status = sol.status?.trim()?.lowercase()
val isComplete =
status == "completed" || status == StockOutLineStatus.COMPLETE.status.lowercase()
val isRejected =
status == "rejected" || status == StockOutLineStatus.REJECTED.status.lowercase()
val isPartiallyComplete =
status == "partially_completed" || status == StockOutLineStatus.PARTIALLY_COMPLETE.status.lowercase()
// 只要是结束态,就不算 unfinished
!(isComplete || isRejected || isPartiallyComplete)
}
println("📊 Stock out lines: ${stockOutLines.size}, Unfinished: ${unfinishedLines.size}")

mapOf(
"pickOrderId" to pickOrder.id,


+ 19
- 0
src/main/java/com/ffii/fpsms/modules/stock/service/StockOutLineService.kt Ver arquivo

@@ -37,6 +37,7 @@ import com.ffii.fpsms.modules.bag.web.model.CreateBagLotLineRequest
import com.ffii.fpsms.modules.common.CodeGenerator
import org.springframework.context.annotation.Lazy
import com.ffii.fpsms.modules.bag.service.BagService
import com.ffii.fpsms.modules.pickOrder.service.PickOrderService
import com.ffii.fpsms.modules.common.SecurityUtils
import com.ffii.fpsms.modules.stock.entity.StockLedgerRepository
import com.ffii.fpsms.modules.stock.entity.InventoryRepository
@@ -62,6 +63,7 @@ private val doPickOrderLineRepository: DoPickOrderLineRepository,
private val doPickOrderLineRecordRepository: DoPickOrderLineRecordRepository,
private val inventoryLotLineService: InventoryLotLineService,
private val bagService: BagService,
private val pickOrderService: PickOrderService,
private val stockLedgerRepository: StockLedgerRepository,
private val inventoryRepository: InventoryRepository,
private val pickExecutionIssueRepository: PickExecutionIssueRepository
@@ -1318,7 +1320,24 @@ if (submitQty > BigDecimal.ZERO && actualInventoryLotLineId != null) {
println(" ✗ Error checking pick order line $pickOrderLineId: ${e.message}")
}
}
val affectedConsoCodes = affectedPickOrderIds
.mapNotNull { pickOrderId ->
val po = pickOrderRepository.findById(pickOrderId).orElse(null)
po?.consoCode
}
.filter { !it.isNullOrBlank() }
.distinct()

println("=== Checking completion by consoCode for ${affectedConsoCodes.size} affected consoCodes after batch submit ===")
affectedConsoCodes.forEach { consoCode ->
try {
val result = pickOrderService.checkAndCompletePickOrderByConsoCode(consoCode)
println(" -> checkAndCompletePickOrderByConsoCode($consoCode) result: code=${result.code}, message=${result.message}")
} catch (e: Exception) {
println(" ✗ Error checking completion for consoCode=$consoCode: ${e.message}")
e.printStackTrace()
}
}
val msg = if (errors.isEmpty()) {
"Batch submit success (${processedIds.size} lines)."
} else {


Carregando…
Cancelar
Salvar