diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/projections/JobOrderInfo.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/projections/JobOrderInfo.kt index 3fe29c8..fb62ac9 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/projections/JobOrderInfo.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/projections/JobOrderInfo.kt @@ -3,6 +3,7 @@ package com.ffii.fpsms.modules.jobOrder.entity.projections import com.ffii.fpsms.modules.master.entity.* import org.springframework.beans.factory.annotation.Value import java.math.BigDecimal +import java.time.LocalDateTime // Job Orders interface JobOrderInfo { @@ -30,8 +31,7 @@ interface JobOrderInfo { @get:Value("#{target.stockInLines?.size() > 0 ? target.stockInLines[0].escalationLog.^[status.value == 'pending']?.handler?.id : null}") val silHandlerId: Long?; - @get:Value("#{target.planStart}") - val planStart: java.time.LocalDateTime?; + val planStart: LocalDateTime?; // @get:Value("#{target.bom.item.itemUoms.^[salesUnit == true && deleted == false]?.uom}") //// @get:Value("#{target.bom.item.itemUoms.^[salesUnit == true && deleted == false]?.uom.udfudesc}") // val uom: UomConversion; diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt index eb72933..63b2f37 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt @@ -29,7 +29,6 @@ import java.time.LocalDateTime import java.time.format.DateTimeFormatter import kotlin.jvm.optionals.getOrNull -import com.ffii.fpsms.modules.jobOrder.service.JoPickOrderService import com.ffii.fpsms.modules.jobOrder.web.model.* import com.ffii.fpsms.modules.jobOrder.web.model.ExportPickRecordRequest import com.ffii.fpsms.modules.jobOrder.web.model.PrintPickRecordRequest @@ -81,7 +80,16 @@ open class JobOrderService( pageable = pageable ) + val planStartFrom = request.planStart + val planStartTo = request.planStartTo val records = response.content + .filter { +// println("from ($planStartFrom):" +(planStartFrom == null || (it.planStart != null && (planStartFrom.isEqual(it.planStart) || planStartFrom.isBefore(it.planStart))))) +// println("to: ($planStartTo)" +(planStartTo == null || (it.planStart != null && (planStartTo.isEqual(it.planStart) || planStartTo.isAfter(it.planStart))))) + (planStartFrom == null || (it.planStart != null && (planStartFrom.isEqual(it.planStart) || planStartFrom.isBefore(it.planStart)))) && + (planStartTo == null || (it.planStart != null && (planStartTo.isEqual(it.planStart) || planStartTo.isAfter(it.planStart)))) + } + val total = response.totalElements return RecordsRes(records, total.toInt()); } @@ -103,10 +111,10 @@ open class JobOrderService( shortUom = sqlResult.shortUom ) } - + open fun jobOrderDetailByCode(code: String): JobOrderDetail { val sqlResult = jobOrderRepository.findJobOrderDetailByCode(code) ?: throw NoSuchElementException("Job Order not found: $code"); - + val type = object : TypeToken>() {}.type val jsonResult = sqlResult.pickLines?.let { GsonUtils.stringToJson>(it, type) } return JobOrderDetail( @@ -121,7 +129,7 @@ open class JobOrderService( shortUom = sqlResult.shortUom ) } - + open fun assignJobNo(): String { val suffixFormat = "%03d" val pattern = "yyyyMMdd" @@ -230,37 +238,37 @@ open class JobOrderService( val createdPickOrder = pickOrderService.create(po) val consoCode = pickOrderService.assignConsoCode() val pickOrderEntity = pickOrderRepository.findById(createdPickOrder.id!!).orElse(null) - + if (pickOrderEntity != null) { pickOrderEntity.consoCode = consoCode pickOrderEntity.status = com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus.RELEASED pickOrderRepository.saveAndFlush(pickOrderEntity) - + // ✅ 添加 suggested pick lots 创建逻辑 val lines = pickOrderLineRepository.findAllByPickOrderId(pickOrderEntity.id!!) if (lines.isNotEmpty()) { val suggestions = suggestedPickLotService.suggestionForPickOrderLines( SuggestedPickLotForPolRequest(pickOrderLines = lines) ) - + val saveSuggestedPickLots = suggestedPickLotService.saveAll(suggestions.suggestedList) - + // ✅ Hold inventory quantities val inventoryLotLines = inventoryLotLineRepository.findAllByIdIn( saveSuggestedPickLots.mapNotNull { it.suggestedLotLine?.id } ) - + saveSuggestedPickLots.forEach { lot -> if (lot.suggestedLotLine != null && lot.suggestedLotLine?.id != null && lot.suggestedLotLine!!.id!! > 0) { val lineIndex = inventoryLotLines.indexOf(lot.suggestedLotLine) if (lineIndex >= 0) { - inventoryLotLines[lineIndex].holdQty = + inventoryLotLines[lineIndex].holdQty = (inventoryLotLines[lineIndex].holdQty ?: BigDecimal.ZERO).plus(lot.qty ?: BigDecimal.ZERO) } } } inventoryLotLineRepository.saveAll(inventoryLotLines) - + // ✅ Create stock out record and pre-create stock out lines val stockOut = StockOut().apply { this.type = "job" @@ -269,7 +277,7 @@ open class JobOrderService( this.handler = SecurityUtils.getUser().getOrNull()?.id } val savedStockOut = stockOutRepository.saveAndFlush(stockOut) - + // ✅ Pre-create stock out lines for suggested lots saveSuggestedPickLots.forEach { lot -> val polId = lot.pickOrderLine?.id @@ -279,7 +287,7 @@ open class JobOrderService( if (existingLines.isEmpty()) { val pickOrderLine = pickOrderLineRepository.findById(polId).orElse(null) val inventoryLotLine = inventoryLotLineRepository.findById(illId).orElse(null) - + if (pickOrderLine != null && inventoryLotLine != null) { val line = StockOutLine().apply { this.stockOut = savedStockOut diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/SearchJobOrderInfoRequest.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/SearchJobOrderInfoRequest.kt index 0a944cf..6bdb75e 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/SearchJobOrderInfoRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/SearchJobOrderInfoRequest.kt @@ -1,8 +1,12 @@ package com.ffii.fpsms.modules.jobOrder.web.model +import java.time.LocalDateTime + data class SearchJobOrderInfoRequest( val code: String?, val itemName: String?, + val planStart: LocalDateTime?, + val planStartTo: LocalDateTime?, val pageSize: Int?, val pageNum: Int?, )