CANCERYS\kw093 2 недель назад
Родитель
Сommit
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 minPriority: Int,
val ready: Boolean 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 qcKeys = candidateAggregates.mapNotNull { agg ->
val jobOrderId = agg.jobOrderId val jobOrderId = agg.jobOrderId
val stockInLine = stockInLineByJobOrderId[jobOrderId] val stockInLine = stockInLineByJobOrderId[jobOrderId]
@@ -1586,10 +1600,21 @@ open class ProductProcessService(


val lineAggregate = lineStatusByJobOrderId[jobOrderId] val lineAggregate = lineStatusByJobOrderId[jobOrderId]
val totalLines = lineAggregate?.totalLines ?: 0L 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( JobOrderQcKey(
jobOrderId = jobOrderId, jobOrderId = jobOrderId,
maxDate = agg.maxDate ?: LocalDate.MIN, maxDate = agg.maxDate ?: LocalDate.MIN,
@@ -1691,7 +1716,10 @@ open class ProductProcessService(
val joPickOrdersList = if (pickOrderId != null) joPickOrdersByPickOrderId[pickOrderId].orEmpty() else emptyList() val joPickOrdersList = if (pickOrderId != null) joPickOrdersByPickOrderId[pickOrderId].orEmpty() else emptyList()


val productProcessLines = linesByProcessId[productProcess.id ?: 0L].orEmpty() 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 bomIsDrink = productProcess.bom?.isDrink
val matchStatus = if (joPickOrdersList.isNotEmpty() && 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 java.time.LocalDateTime
import org.springframework.data.repository.query.Param import org.springframework.data.repository.query.Param


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



@Repository @Repository
interface StockInLineRepository : AbstractRepository<StockInLine, Long> { 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> 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>
} }

Загрузка…
Отмена
Сохранить