|
|
|
@@ -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<JobOrderInfo>(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<List<JobOrderDetailPickLine>>() {}.type |
|
|
|
val jsonResult = sqlResult.pickLines?.let { GsonUtils.stringToJson<List<JobOrderDetailPickLine>>(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 |
|
|
|
|