|
|
@@ -8,6 +8,7 @@ import com.ffii.fpsms.modules.deliveryOrder.entity.DoReplenishment |
|
|
import com.ffii.fpsms.modules.deliveryOrder.entity.DoReplenishmentRepository |
|
|
import com.ffii.fpsms.modules.deliveryOrder.entity.DoReplenishmentRepository |
|
|
import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrder |
|
|
import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrder |
|
|
import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrderLineRepository |
|
|
import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrderLineRepository |
|
|
|
|
|
import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrderPickOrderRepository |
|
|
import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrderRepository |
|
|
import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrderRepository |
|
|
import com.ffii.fpsms.modules.deliveryOrder.enums.DeliveryOrderStatus |
|
|
import com.ffii.fpsms.modules.deliveryOrder.enums.DeliveryOrderStatus |
|
|
import com.ffii.fpsms.modules.deliveryOrder.web.models.DoReplenishmentResponse |
|
|
import com.ffii.fpsms.modules.deliveryOrder.web.models.DoReplenishmentResponse |
|
|
@@ -20,6 +21,7 @@ import com.ffii.fpsms.modules.pickOrder.entity.PickOrderLine |
|
|
import com.ffii.fpsms.modules.pickOrder.entity.PickOrderLineRepository |
|
|
import com.ffii.fpsms.modules.pickOrder.entity.PickOrderLineRepository |
|
|
import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository |
|
|
import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository |
|
|
import com.ffii.fpsms.modules.stock.entity.StockOutLIneRepository |
|
|
import com.ffii.fpsms.modules.stock.entity.StockOutLIneRepository |
|
|
|
|
|
import com.ffii.fpsms.modules.stock.service.WorkbenchStockOutLinePickProgress |
|
|
import com.ffii.fpsms.modules.pickOrder.enums.PickOrderLineStatus |
|
|
import com.ffii.fpsms.modules.pickOrder.enums.PickOrderLineStatus |
|
|
import org.springframework.stereotype.Service |
|
|
import org.springframework.stereotype.Service |
|
|
import org.springframework.transaction.annotation.Transactional |
|
|
import org.springframework.transaction.annotation.Transactional |
|
|
@@ -31,6 +33,7 @@ import java.time.format.DateTimeFormatter |
|
|
open class DoReplenishmentService( |
|
|
open class DoReplenishmentService( |
|
|
private val doReplenishmentRepository: DoReplenishmentRepository, |
|
|
private val doReplenishmentRepository: DoReplenishmentRepository, |
|
|
private val deliveryOrderRepository: DeliveryOrderRepository, |
|
|
private val deliveryOrderRepository: DeliveryOrderRepository, |
|
|
|
|
|
private val deliveryOrderPickOrderRepository: DeliveryOrderPickOrderRepository, |
|
|
private val deliveryOrderLineRepository: DeliveryOrderLineRepository, |
|
|
private val deliveryOrderLineRepository: DeliveryOrderLineRepository, |
|
|
private val doPickOrderRepository: DoPickOrderRepository, |
|
|
private val doPickOrderRepository: DoPickOrderRepository, |
|
|
private val doPickOrderLineRepository: DoPickOrderLineRepository, |
|
|
private val doPickOrderLineRepository: DoPickOrderLineRepository, |
|
|
@@ -207,6 +210,18 @@ open class DoReplenishmentService( |
|
|
doReplenishmentRepository.save(row) |
|
|
doReplenishmentRepository.save(row) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Transactional |
|
|
|
|
|
open fun completeProcessingByDeliveryOrderPickOrderId(deliveryOrderPickOrderId: Long) { |
|
|
|
|
|
if (deliveryOrderPickOrderId <= 0L) return |
|
|
|
|
|
val rows = doReplenishmentRepository.findByDeliveryOrderPickOrderIdAndStatusAndDeletedIsFalse( |
|
|
|
|
|
deliveryOrderPickOrderId, |
|
|
|
|
|
DoReplenishment.STATUS_PROCESSING, |
|
|
|
|
|
) |
|
|
|
|
|
for (row in rows) { |
|
|
|
|
|
row.pickOrderLineId?.let { completeByPickOrderLineId(it) } |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* After workbench batch release links pick orders to a ticket, create replenishment POL rows |
|
|
* After workbench batch release links pick orders to a ticket, create replenishment POL rows |
|
|
* (no DOL), assign target DO / ticket FKs, and move status pending → processing. |
|
|
* (no DOL), assign target DO / ticket FKs, and move status pending → processing. |
|
|
@@ -505,12 +520,12 @@ open class DoReplenishmentService( |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
val targetDoIds = entities.mapNotNull { it.targetDoId }.distinct() |
|
|
|
|
|
val targetDoEtaById = if (targetDoIds.isEmpty()) { |
|
|
|
|
|
|
|
|
val dopoIds = entities.mapNotNull { it.deliveryOrderPickOrderId }.distinct() |
|
|
|
|
|
val targetDoRequiredDateByDopoId = if (dopoIds.isEmpty()) { |
|
|
emptyMap() |
|
|
emptyMap() |
|
|
} else { |
|
|
} else { |
|
|
deliveryOrderRepository.findAllById(targetDoIds).associate { deliveryOrder -> |
|
|
|
|
|
deliveryOrder.id!! to deliveryOrder.estimatedArrivalDate?.toLocalDate() |
|
|
|
|
|
|
|
|
deliveryOrderPickOrderRepository.findAllById(dopoIds).associate { dopo -> |
|
|
|
|
|
dopo.id!! to dopo.requiredDeliveryDate |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@@ -525,6 +540,14 @@ open class DoReplenishmentService( |
|
|
fallbackQtyByKey = fallbackQtyBySourceKey, |
|
|
fallbackQtyByKey = fallbackQtyBySourceKey, |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
val polIds = entities.mapNotNull { it.pickOrderLineId }.distinct() |
|
|
|
|
|
val stockOutLinesByPolId = if (polIds.isEmpty()) { |
|
|
|
|
|
emptyMap() |
|
|
|
|
|
} else { |
|
|
|
|
|
stockOutLIneRepository.findAllInfoByPickOrderLineIdInAndDeletedFalse(polIds) |
|
|
|
|
|
.groupBy { it.pickOrderLineId } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return entities.map { row -> |
|
|
return entities.map { row -> |
|
|
DoReplenishmentResponse( |
|
|
DoReplenishmentResponse( |
|
|
id = row.id!!, |
|
|
id = row.id!!, |
|
|
@@ -537,6 +560,11 @@ open class DoReplenishmentService( |
|
|
itemNo = row.itemNo, |
|
|
itemNo = row.itemNo, |
|
|
itemName = row.itemName, |
|
|
itemName = row.itemName, |
|
|
originalQty = actualShippedQtyBySourceKey[row.sourceDoId!! to row.itemId!!], |
|
|
originalQty = actualShippedQtyBySourceKey[row.sourceDoId!! to row.itemId!!], |
|
|
|
|
|
actualPickQty = row.pickOrderLineId?.let { polId -> |
|
|
|
|
|
WorkbenchStockOutLinePickProgress.sumPickedQty( |
|
|
|
|
|
stockOutLinesByPolId[polId].orEmpty(), |
|
|
|
|
|
) |
|
|
|
|
|
}, |
|
|
replenishQty = row.replenishQty!!, |
|
|
replenishQty = row.replenishQty!!, |
|
|
shortUom = row.uomId?.let { shortUomById[it] }, |
|
|
shortUom = row.uomId?.let { shortUomById[it] }, |
|
|
shopCode = row.shopCode, |
|
|
shopCode = row.shopCode, |
|
|
@@ -544,7 +572,7 @@ open class DoReplenishmentService( |
|
|
truckLaneCode = row.truckLaneCode, |
|
|
truckLaneCode = row.truckLaneCode, |
|
|
targetDoId = row.targetDoId, |
|
|
targetDoId = row.targetDoId, |
|
|
targetDoCode = row.targetDoCode, |
|
|
targetDoCode = row.targetDoCode, |
|
|
targetDoEstimatedArrivalDate = row.targetDoId?.let { targetDoEtaById[it] }, |
|
|
|
|
|
|
|
|
targetDoEstimatedArrivalDate = row.deliveryOrderPickOrderId?.let { targetDoRequiredDateByDopoId[it] }, |
|
|
pickOrderLineId = row.pickOrderLineId, |
|
|
pickOrderLineId = row.pickOrderLineId, |
|
|
deliveryOrderPickOrderId = row.deliveryOrderPickOrderId, |
|
|
deliveryOrderPickOrderId = row.deliveryOrderPickOrderId, |
|
|
status = row.status, |
|
|
status = row.status, |
|
|
|