cyril.tsui 2 месяцев назад
Родитель
Сommit
837b75d4e2
2 измененных файлов: 66 добавлений и 7 удалений
  1. +44
    -7
      src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt
  2. +22
    -0
      src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/ConsoPickOrderResponse.kt

+ 44
- 7
src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt Просмотреть файл

@@ -253,20 +253,56 @@ open class PickOrderService(
open fun releaseConsoPickOrderInfo(consoCode: String): ReleasePickOrderInfoResponse {
val zero = BigDecimal.ZERO
val pos = pickOrderRepository.findAllByConsoCodeAndStatus(consoCode, PickOrderStatus.CONSOLIDATED)

// Get Inventory Data
val requiredItems = pos
.flatMap { it.pickOrderLines }
.groupBy { it.item?.id }
.map { (key, value) -> key to object : CurrentInventoryItemInfo {
override val id: Long? = value[0].item?.id
override val code: String? = value[0].item?.code
override val name: String? = value[0].item?.name
override var availableQty: BigDecimal? = zero
override val requiredQty: BigDecimal = value.sumOf { it.qty ?: zero }
}} // itemId - requiredQty
.map { (key, value) ->
key to object : CurrentInventoryItemInfo {
override val id: Long? = value[0].item?.id
override val code: String? = value[0].item?.code
override val name: String? = value[0].item?.name
override var availableQty: BigDecimal? = zero
override val requiredQty: BigDecimal = value.sumOf { it.qty ?: zero }
}
} // itemId - requiredQty

val itemIds = requiredItems.mapNotNull { it.first }
// val inventories = inventoryLotLineRepository.findCurrentInventoryByItems(itemIds)
val inventories = inventoryService.allInventoriesByItemIds(itemIds)

// Pick Orders
val releasePickOrderInfos = pos
.map { po ->
val releasePickOrderLineInfos = po.pickOrderLines.map { pol ->
val inventory = inventories.find { it.itemId == pol.item?.id }

// Return
ReleasePickOrderLineInfo(
id = pol.id,
itemId = pol.item?.id,
itemCode = pol.item?.code,
itemName = pol.item?.name,
availableQty = inventory?.availableQty,
requiredQty = pol.qty,
uomCode = pol.uom?.code,
uomDesc = pol.uom?.udfudesc,
)
}

// Return
ReleasePickOrderInfo(
id = po.id,
code = po.code,
targetDate = po.targetDate,
type = po.type?.value,
status = po.status?.value,
pickOrderLines = releasePickOrderLineInfos
)
}

// Items
val currentInventoryInfos = requiredItems.map { item ->
val inventory = inventories.find { it.itemId == item.first }

@@ -280,6 +316,7 @@ open class PickOrderService(

return ReleasePickOrderInfoResponse(
consoCode = consoCode,
pickOrders = releasePickOrderInfos,
items = currentInventoryInfos,
)
}


+ 22
- 0
src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/ConsoPickOrderResponse.kt Просмотреть файл

@@ -7,9 +7,31 @@ import java.time.LocalDateTime
// Final Response - Release Conso Pick Order Page
data class ReleasePickOrderInfoResponse(
val consoCode: String,
val pickOrders: List<ReleasePickOrderInfo>,
val items: List<CurrentInventoryItemInfo>
)

// Components
data class ReleasePickOrderInfo(
val id: Long?,
val code: String?,
val targetDate: LocalDateTime?,
val type: String?,
val status: String?,
val pickOrderLines: List<ReleasePickOrderLineInfo>
)

data class ReleasePickOrderLineInfo(
val id: Long?,
val itemId: Long?,
val itemCode: String?,
val itemName: String?,
val availableQty: BigDecimal?,
val requiredQty: BigDecimal?,
val uomCode: String?,
val uomDesc: String?,
)

// Final Response - Conso Pick Order Detail
data class ConsoPickOrderResponse(
val consoCode: String,


Загрузка…
Отмена
Сохранить