Procházet zdrojové kódy

update import bom function

master
CANCERYS\kw093 před 3 týdny
rodič
revize
319755746e
4 změnil soubory, kde provedl 60 přidání a 16 odebrání
  1. +13
    -10
      src/main/java/com/ffii/fpsms/modules/master/service/BomService.kt
  2. +1
    -0
      src/main/java/com/ffii/fpsms/modules/master/web/models/SaveBomRequest.kt
  3. +43
    -6
      src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt
  4. +3
    -0
      src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt

+ 13
- 10
src/main/java/com/ffii/fpsms/modules/master/service/BomService.kt Zobrazit soubor

@@ -129,7 +129,7 @@ open class BomService(
this.isConsumable = req.isConsumable
this.qty = req.qty
this.salesUnit = req.salesUnit
this.salesUnitCode = req.salesUnit?.code
this.salesUnitCode = req.salesUnitCode
this.uom = req.uom
this.uomName = req.uomName
this.bom = req.bom
@@ -197,23 +197,26 @@ open class BomService(
// println(item)
bomMatRequest.item = item
}
2-> {
bomMatRequest.qty = tempCell.numericCellValue.toBigDecimal()
}
3 -> {
bomMatRequest.uomName = tempCell.stringCellValue.trim()
val salesUnit = uomConversionRepository.findByCodeAndDeletedFalse(tempCell.stringCellValue.trim())
bomMatRequest.salesUnit = salesUnit
val uom = uomConversionRepository.findByCodeAndDeletedFalse(tempCell.stringCellValue.trim())
bomMatRequest.uom = uom
bomMatRequest.uomName = uom?.udfudesc
}
/*
6 -> {
bomMatRequest.qty = tempCell.numericCellValue.toBigDecimal()
}
*/
7 -> {
val salesUnit = uomConversionRepository.findByCodeAndDeletedFalse(tempCell.stringCellValue.trim())
bomMatRequest.salesUnit = salesUnit
bomMatRequest.salesUnitCode = salesUnit?.udfudesc
}
*/
2-> {
bomMatRequest.qty = tempCell.numericCellValue.toBigDecimal()
}
/*
2 -> {
val salesUnit = uomConversionRepository.findByCodeAndDeletedFalse(tempCell.stringCellValue.trim())
@@ -633,8 +636,8 @@ open class BomService(
val resolver = PathMatchingResourcePatternResolver()
// val excels = resolver.getResources("bomImport/*.xlsx")
//val excels = resolver.getResources("file:C:/Users/Kelvin YAU/Downloads/bom/*.xlsx")
val excels = resolver.getResources("file:C:/Users/Kelvin YAU/Downloads/bom/*.xlsx")
//val excels = resolver.getResources("file:C:/Users/kw093/Downloads/bom/bom/*.xlsx")
//val excels = resolver.getResources("file:C:/Users/Kelvin YAU/Downloads/bom/*.xlsx")
val excels = resolver.getResources("file:C:/Users/kw093/Downloads/bom/bom/*.xlsx")
// val excels = resolver.getResources("file:C:/Users/2Fi/Desktop/Third Wave of BOM Excel/*.xlsx")
println("size: ${excels.size}")
val logExcel = ClassPathResource("excelTemplate/bom_excel_issue_log.xlsx")


+ 1
- 0
src/main/java/com/ffii/fpsms/modules/master/web/models/SaveBomRequest.kt Zobrazit soubor

@@ -50,6 +50,7 @@ data class ImportBomMatRequest (
var qty: BigDecimal? = null,
var uom: UomConversion? = null,
var salesUnit: UomConversion? = null,
var salesUnitCode: String? = null,
var uomName: String? = null,
var bom: Bom? = null,
)


+ 43
- 6
src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt Zobrazit soubor

@@ -485,7 +485,7 @@ open class ProductProcessService(
println(" Service: Found ${lines.size} pending lines")
return lines
}
open fun productProcessDetailfindbyjoid(joid: Long): List<ProductProcessInfo> {
val productProcesses = productProcessRepository.findByJobOrder_Id(joid)
val jobOrder = jobOrderRepository.findById(joid).orElse(null)
@@ -674,7 +674,9 @@ open class ProductProcessService(
itemCode = line.item?.code?:"",
itemName = line.item?.name?:"",
reqQty = line.reqQty?.toInt() ?: 0,

stockQty = stockQty,

uom = uomName?:"",
shortUom = shortUom?:"",
type = line.item?.type?: "",
@@ -1321,7 +1323,10 @@ open class ProductProcessService(
val productProcessLine = productProcessLineRepository.findById(productProcessLineId).orElse(null)
val productProcessId = productProcessLine?.productProcess?.id ?: 0L
val allproductProcessLines=productProcessLineRepository.findByProductProcess_Id(productProcessId)
if(productProcessLine.startTime == null) {
productProcessLine.startTime = LocalDateTime.now()
productProcessLineRepository.save(productProcessLine)
}
if(allproductProcessLines.all { it.status == "Completed" }) {
updateProductProcessEndTime(productProcessId)
updateProductProcessStatus(productProcessId, ProductProcessStatus.COMPLETED)
@@ -1330,6 +1335,7 @@ open class ProductProcessService(
if(jobOrder != null) {
jobOrder.status = JobOrderStatus.PENDING_QC
jobOrderRepository.save(jobOrder)
stockInLineService.create(
SaveStockInLineRequest(
itemId = productProcess?.item?.id?:0L,
@@ -1339,9 +1345,10 @@ open class ProductProcessService(
jobOrderId = jobOrder.id,
acceptQty =jobOrder?.reqQty?:BigDecimal.ZERO ,
expiryDate=null,
status="",
status="pending",
)
)
}
}
return MessageResponse(
@@ -1598,26 +1605,56 @@ open fun getJobProcessStatus(): List<JobProcessStatusResponse> {
val lines = productProcessLineRepository.findByProductProcess_Id(process.id ?: 0L)
.sortedBy { it.seqNo }
val bom=bomRepository.findById(process.bom?.id ?: 0L).orElse(null)
val bomProcesses = bomProcessRepository.findByBomId(bom?.id ?: 0L).sortedBy { it.seqNo }

//val equipmentDetail = equipmentDetailRepository.findById(equipmentDetailId).orElse(null)
// Calculate planEndTime based on first start time + remaining processing time
val firstStartTime = lines.firstOrNull { it.startTime != null }?.startTime
val calculatedPlanEndTime = if (firstStartTime != null) {
// Calculate total remaining processing time (in minutes) for unfinished processes
var totalRemainingMinutes = 0L
lines.forEach { line ->
if (line.endTime == null) {
// Process is not finished, add its processing time
totalRemainingMinutes += (line.processingTime ?: 0).toLong()
totalRemainingMinutes += (line.setupTime ?: 0).toLong()
totalRemainingMinutes += (line.changeoverTime ?: 0).toLong()
}
}
// Add remaining time to first start time
firstStartTime.plusMinutes(totalRemainingMinutes)
} else {
// No process has started yet, use original planEndTime
jobOrder?.planEnd
}
JobProcessStatusResponse(
jobOrderId = jobOrder?.id ?: 0L,
jobOrderCode = jobOrder?.code ?: "",
itemCode = process.item?.code ?: "",
itemName = process.item?.name ?: "",
planEndTime = jobOrder?.planEnd,
planEndTime = calculatedPlanEndTime,
processes = (0 until 6).map { index ->
if (index < lines.size) {
val line = lines[index]
val bomProcesses = bomProcessRepository.findByBomId(bom?.id ?: 0L).sortedBy { it.seqNo }
val equipmentDetailId = line.equipmentDetailId
ProcessStatusInfo(
equipmentCode = bomProcesses[index].equipment?.code ?: "",

equipmentCode = if(equipmentDetailId != null) equipmentDetailRepository.findById(equipmentDetailId).orElse(null)?.code ?: "" else bomProcesses[index].equipment?.code ?: "",
startTime = line.startTime,
endTime = line.endTime,
processingTime = line.processingTime,
setupTime = line.setupTime,
changeoverTime = line.changeoverTime,
isRequired = true
)
} else {
ProcessStatusInfo(
startTime = null,
endTime = null,
processingTime = null,
setupTime = null,
changeoverTime = null,
isRequired = false,
equipmentCode = null,
)


+ 3
- 0
src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt Zobrazit soubor

@@ -223,6 +223,9 @@ data class ProcessStatusInfo(
val equipmentCode: String?,
val startTime: LocalDateTime?,
val endTime: LocalDateTime?,
val processingTime: Int?,
val setupTime: Int?,
val changeoverTime: Int?,
val isRequired: Boolean
)



Načítá se…
Zrušit
Uložit