Explorar el Código

補貨 FIX

production
CANCERYS\kw093 hace 1 día
padre
commit
8ff5c9e902
Se han modificado 4 ficheros con 45 adiciones y 9 borrados
  1. +9
    -4
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoReplenishmentRepository.kt
  2. +33
    -5
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoReplenishmentService.kt
  3. +2
    -0
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoWorkbenchMainService.kt
  4. +1
    -0
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/DoReplenishmentModels.kt

+ 9
- 4
src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoReplenishmentRepository.kt Ver fichero

@@ -25,19 +25,24 @@ interface DoReplenishmentRepository : AbstractRepository<DoReplenishment, Long>
status: String,
): DoReplenishment?

fun findByDeliveryOrderPickOrderIdAndStatusAndDeletedIsFalse(
deliveryOrderPickOrderId: Long,
status: String,
): List<DoReplenishment>

@Query(
"""
SELECT r FROM DoReplenishment r
LEFT JOIN DeliveryOrder targetDo ON targetDo.id = r.targetDoId AND targetDo.deleted = false
LEFT JOIN DeliveryOrderPickOrder dopo ON dopo.id = r.deliveryOrderPickOrderId AND dopo.deleted = false
WHERE r.deleted = false
AND (
:deliveryDate IS NULL
OR (
targetDo.id IS NOT NULL
AND DATE(targetDo.estimatedArrivalDate) = :deliveryDate
dopo.id IS NOT NULL
AND dopo.requiredDeliveryDate = :deliveryDate
)
OR (
targetDo.id IS NULL
dopo.id IS NULL
AND r.deliveryDate = :deliveryDate
)
)


+ 33
- 5
src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoReplenishmentService.kt Ver fichero

@@ -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.DeliveryOrder
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.enums.DeliveryOrderStatus
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.PickOrderRepository
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 org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
@@ -31,6 +33,7 @@ import java.time.format.DateTimeFormatter
open class DoReplenishmentService(
private val doReplenishmentRepository: DoReplenishmentRepository,
private val deliveryOrderRepository: DeliveryOrderRepository,
private val deliveryOrderPickOrderRepository: DeliveryOrderPickOrderRepository,
private val deliveryOrderLineRepository: DeliveryOrderLineRepository,
private val doPickOrderRepository: DoPickOrderRepository,
private val doPickOrderLineRepository: DoPickOrderLineRepository,
@@ -207,6 +210,18 @@ open class DoReplenishmentService(
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
* (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()
} 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,
)

val polIds = entities.mapNotNull { it.pickOrderLineId }.distinct()
val stockOutLinesByPolId = if (polIds.isEmpty()) {
emptyMap()
} else {
stockOutLIneRepository.findAllInfoByPickOrderLineIdInAndDeletedFalse(polIds)
.groupBy { it.pickOrderLineId }
}

return entities.map { row ->
DoReplenishmentResponse(
id = row.id!!,
@@ -537,6 +560,11 @@ open class DoReplenishmentService(
itemNo = row.itemNo,
itemName = row.itemName,
originalQty = actualShippedQtyBySourceKey[row.sourceDoId!! to row.itemId!!],
actualPickQty = row.pickOrderLineId?.let { polId ->
WorkbenchStockOutLinePickProgress.sumPickedQty(
stockOutLinesByPolId[polId].orEmpty(),
)
},
replenishQty = row.replenishQty!!,
shortUom = row.uomId?.let { shortUomById[it] },
shopCode = row.shopCode,
@@ -544,7 +572,7 @@ open class DoReplenishmentService(
truckLaneCode = row.truckLaneCode,
targetDoId = row.targetDoId,
targetDoCode = row.targetDoCode,
targetDoEstimatedArrivalDate = row.targetDoId?.let { targetDoEtaById[it] },
targetDoEstimatedArrivalDate = row.deliveryOrderPickOrderId?.let { targetDoRequiredDateByDopoId[it] },
pickOrderLineId = row.pickOrderLineId,
deliveryOrderPickOrderId = row.deliveryOrderPickOrderId,
status = row.status,


+ 2
- 0
src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoWorkbenchMainService.kt Ver fichero

@@ -1554,6 +1554,7 @@ return MessageResponse(
deliveryOrderPickOrderRepository.save(dop)
}
markDeliveryOrdersCompletedForDeliveryOrderPickOrder(deliveryOrderPickOrderId)
doReplenishmentService.completeProcessingByDeliveryOrderPickOrderId(deliveryOrderPickOrderId)
return MessageResponse(
id = dop.id,
code = "SUCCESS",
@@ -2482,6 +2483,7 @@ return MessageResponse(
mapOf("dopId" to dopId, "deliveryNoteCode" to newDeliveryNoteCode),
)
markDeliveryOrdersCompletedForDeliveryOrderPickOrder(dopId)
doReplenishmentService.completeProcessingByDeliveryOrderPickOrderId(dopId)
}
/**
* When a workbench ticket ([delivery_order_pick_order]) is completed, align linked [delivery_order] headers.


+ 1
- 0
src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/DoReplenishmentModels.kt Ver fichero

@@ -42,6 +42,7 @@ data class DoReplenishmentResponse(
val itemNo: String?,
val itemName: String?,
val originalQty: BigDecimal?,
val actualPickQty: BigDecimal?,
val replenishQty: BigDecimal,
val shortUom: String?,
val shopCode: String?,


Cargando…
Cancelar
Guardar