CANCERYS\kw093 2 тижднів тому
джерело
коміт
a5fd5464ce
2 змінених файлів з 56 додано та 5 видалено
  1. +33
    -5
      src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt
  2. +23
    -0
      src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLineRepository.kt

+ 33
- 5
src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt Переглянути файл

@@ -1564,7 +1564,21 @@ open class ProductProcessService(
val minPriority: Int,
val ready: Boolean
)

val candidateProcesses = productProcessRepository
.findByJobOrder_IdInAndDeletedIsFalse(candidateJobOrderIds)
val candidateProcessIds = candidateProcesses.mapNotNull { it.id }
val candidateLines = if (candidateProcessIds.isNotEmpty()) {
productProcessLineRepository.findByProductProcess_IdInWithOperatorAndEquipment(candidateProcessIds)
} else emptyList()
val linesByJobOrder = candidateLines.groupBy { it.productProcess.jobOrder?.id ?: 0L }
val done = { s: String? ->
val x = s?.trim()?.lowercase()
x == "completed" || x == "pass"
}
val qcKeys = candidateAggregates.mapNotNull { agg ->
val jobOrderId = agg.jobOrderId
val stockInLine = stockInLineByJobOrderId[jobOrderId]
@@ -1586,10 +1600,21 @@ open class ProductProcessService(

val lineAggregate = lineStatusByJobOrderId[jobOrderId]
val totalLines = lineAggregate?.totalLines ?: 0L
val doneLines = lineAggregate?.doneLines ?: 0L
val allLinesDone = totalLines > 0 && doneLines == totalLines
val ready = includedInList && allLinesDone && stockInLine != null
val done = { s: String? ->
val x = s?.trim()?.lowercase()
x == "completed" || x == "pass"
}
val jobLines = linesByJobOrder[jobOrderId].orEmpty()
val packing = jobLines.filter { (it.name ?: "").trim() == "包裝" }
val nonPacking = jobLines.filter { (it.name ?: "").trim() != "包裝" }

val nonPackingOk = nonPacking.isEmpty() || nonPacking.all { done(it.status) }
val packingOk = packing.isEmpty() || packing.any { done(it.status) }

val ready = includedInList && stockInLine != null && nonPackingOk && packingOk
JobOrderQcKey(
jobOrderId = jobOrderId,
maxDate = agg.maxDate ?: LocalDate.MIN,
@@ -1691,7 +1716,10 @@ open class ProductProcessService(
val joPickOrdersList = if (pickOrderId != null) joPickOrdersByPickOrderId[pickOrderId].orEmpty() else emptyList()

val productProcessLines = linesByProcessId[productProcess.id ?: 0L].orEmpty()
val finishedCount = productProcessLines.count { it.status == "Completed" }
val finishedCount = productProcessLines.count {
val s = it.status?.trim()?.lowercase()
s == "completed" || s == "pass"
}

val bomIsDrink = productProcess.bom?.isDrink
val matchStatus = if (joPickOrdersList.isNotEmpty() &&


+ 23
- 0
src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLineRepository.kt Переглянути файл

@@ -12,6 +12,11 @@ import java.time.LocalDate
import java.time.LocalDateTime
import org.springframework.data.repository.query.Param

interface JobOrderFirstLotNoProjection {
val jobOrderId: Long
val lotNo: String?
}


@Repository
interface StockInLineRepository : AbstractRepository<StockInLine, Long> {
@@ -164,4 +169,22 @@ fun findLatestLotNoByPrefix(@Param("prefix") prefix: String): String?
"""
)
fun findAllByJobOrder_IdInAndDeletedFalse(@Param("jobOrderIds") jobOrderIds: List<Long>): List<StockInLine>

@Query(
"""
SELECT sil.jobOrderId AS jobOrderId, sil.lotNo AS lotNo
FROM fpsmsdb.stock_in_line sil
WHERE sil.deleted = 0
AND sil.jobOrderId IN (:jobOrderIds)
AND sil.id IN (
SELECT MIN(s2.id)
FROM fpsmsdb.stock_in_line s2
WHERE s2.deleted = 0
AND s2.jobOrderId IN (:jobOrderIds)
GROUP BY s2.jobOrderId
)
""",
nativeQuery = true
)
fun findFirstLotNoByJobOrderIds(@Param("jobOrderIds") jobOrderIds: List<Long>): List<JobOrderFirstLotNoProjection>
}

Завантаження…
Відмінити
Зберегти