|
|
|
@@ -36,6 +36,8 @@ import com.ffii.fpsms.modules.stock.entity.enum.InventoryLotLineStatus |
|
|
|
import com.ffii.fpsms.modules.jobOrder.enums.JobOrderStatus |
|
|
|
import com.ffii.fpsms.modules.stock.service.StockInLineService |
|
|
|
import com.ffii.fpsms.modules.stock.web.model.SaveStockInLineRequest |
|
|
|
import com.ffii.fpsms.modules.master.entity.BomProcessMaterialRepository |
|
|
|
import com.ffii.fpsms.modules.master.entity.BomMaterialRepository |
|
|
|
@Service |
|
|
|
@Transactional |
|
|
|
open class ProductProcessService( |
|
|
|
@@ -53,6 +55,8 @@ open class ProductProcessService( |
|
|
|
private val inventoryLotLineRepository: InventoryLotLineRepository, |
|
|
|
private val productionScheduleLineRepository: ProductionScheduleLineRepository, |
|
|
|
private val stockInLineService: StockInLineService, |
|
|
|
private val bomProcessMaterialRepository: BomProcessMaterialRepository, |
|
|
|
private val bomMaterialRepository: BomMaterialRepository, |
|
|
|
) { |
|
|
|
|
|
|
|
open fun findAll(pageable: Pageable): Page<ProductProcess> { |
|
|
|
@@ -473,6 +477,7 @@ open class ProductProcessService( |
|
|
|
val bomProcess = bomProcessRepository.findByBomId(jobOrder?.bom?.id?:0L) |
|
|
|
// get bom materials |
|
|
|
val bomMaterials = jobOrderBomMaterialRepository.findAllByJobOrderId(jobOrder?.id?:0) |
|
|
|
val bomProcessIds = bomProcess.mapNotNull { it.id } |
|
|
|
val itemIds = bomMaterials.mapNotNull { it.item?.id } |
|
|
|
|
|
|
|
// calculate each item's available stock |
|
|
|
@@ -591,6 +596,7 @@ open class ProductProcessService( |
|
|
|
outputFromProcessUom = line.outputFromProcessUom?:"", |
|
|
|
startTime = line.startTime, |
|
|
|
endTime = line.endTime |
|
|
|
|
|
|
|
) |
|
|
|
}, |
|
|
|
jobOrderLines = bomMaterials.map { line -> |
|
|
|
@@ -598,7 +604,16 @@ open class ProductProcessService( |
|
|
|
val stockQty = stockQtyMap[itemId]?.toInt() ?: 0 |
|
|
|
val uom = line.uom |
|
|
|
val shortUom = uom?.udfShortDesc ?: uom?.udfudesc ?: "" |
|
|
|
|
|
|
|
// 首先通过 bomId 和 itemId 找到 BomMaterial |
|
|
|
val bomMaterial = bom?.id?.let { bomId -> |
|
|
|
bomMaterialRepository.findByBomIdAndItemId(bomId, itemId) |
|
|
|
} |
|
|
|
// 然后遍历 bomProcessIds 找到第一个匹配的 BomProcessMaterial |
|
|
|
val bomProcessMaterial = bomMaterial?.id?.let { bomMaterialId -> |
|
|
|
bomProcessIds.firstNotNullOfOrNull { bomProcessId -> |
|
|
|
bomProcessMaterialRepository.findByBomProcessIdAndBomMaterialId(bomProcessId, bomMaterialId) |
|
|
|
} |
|
|
|
} |
|
|
|
// 计算 availableStatus |
|
|
|
val availableStatus = if (stockQty >= (line.reqQty?.toInt() ?: 0)) { |
|
|
|
"available" |
|
|
|
@@ -615,7 +630,9 @@ open class ProductProcessService( |
|
|
|
stockQty = stockQty, |
|
|
|
uom = uom?.udfudesc ?: "", |
|
|
|
shortUom = shortUom, |
|
|
|
availableStatus = availableStatus |
|
|
|
availableStatus = availableStatus, |
|
|
|
bomProcessId = bomProcessMaterial?.bomProcess?.id?:0, |
|
|
|
bomProcessSeqNo = bomProcessMaterial?.bomProcess?.seqNo?:0 |
|
|
|
) |
|
|
|
} |
|
|
|
) |
|
|
|
@@ -750,6 +767,7 @@ open class ProductProcessService( |
|
|
|
operatorId = productProcessLine.operator?.id?:0, |
|
|
|
operatorName = productProcessLine.operator?.name?:"", |
|
|
|
handlerId = productProcessLine.handler?.id?:0, |
|
|
|
durationInMinutes = productProcessLine.bomProcess?.durationInMinute?:0, |
|
|
|
seqNo = productProcessLine.seqNo?:0, |
|
|
|
name = productProcessLine.name?:"", |
|
|
|
description = productProcessLine.description?:"", |
|
|
|
@@ -883,6 +901,7 @@ open fun updateProductProcessLineQty(request: UpdateProductProcessLineQtyRequest |
|
|
|
status = productProcesses.status.value, |
|
|
|
startTime = productProcesses.startTime, |
|
|
|
endTime = productProcesses.endTime, |
|
|
|
RequiredQty = jobOrder?.reqQty?.toInt() ?: 0, |
|
|
|
date = productProcesses.date, |
|
|
|
bomId = productProcesses.bom?.id, |
|
|
|
itemName = productProcesses.item?.name, |
|
|
|
|