From b538ee2b16d6c4bbc33adc62318acb2dbe4d2a28 Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Thu, 19 Jun 2025 16:09:22 +0800 Subject: [PATCH] Add consolidate pick order code --- .../pickOrder/entity/PickOrderRepository.kt | 2 ++ .../entity/projection/PickOrderInfo.kt | 6 ++--- .../pickOrder/service/PickOrderService.kt | 25 ++++++++++++++----- .../pickOrder/web/PickOrderController.kt | 8 ++++++ 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt index e99b908..0053b23 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt @@ -48,4 +48,6 @@ interface PickOrderRepository : AbstractRepository { """) fun findLatestConsoCodeByPrefix(prefix: String): String? fun findAllByIdIn(id: List): List + + fun findPickOrderInfoByIdIn(id: List): List } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/projection/PickOrderInfo.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/projection/PickOrderInfo.kt index 0e76a7a..c05485f 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/projection/PickOrderInfo.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/projection/PickOrderInfo.kt @@ -3,7 +3,7 @@ package com.ffii.fpsms.modules.pickOrder.entity.projection import org.springframework.beans.factory.annotation.Value import java.time.LocalDateTime -data class PickOrderItemInfo( +data class PickOrderLineInfo( val name: String?, val type: String?, ) @@ -19,6 +19,6 @@ interface PickOrderInfo { @get:Value("#{target.releasedBy?.name}") val releasedBy: String? - @get:Value("#{target.pickOrderLines?.size() > 0 ? target.pickOrderLines.![new com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderItemInfo(item.name, item.type)] : null}") - val items: List? + @get:Value("#{target.pickOrderLines?.size() > 0 ? target.pickOrderLines.![new com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderLineInfo(item.name, item.type)] : null}") + val items: List? } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt index 154d44b..6fa16e7 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt @@ -1,12 +1,16 @@ package com.ffii.fpsms.modules.pickOrder.service import com.ffii.core.response.RecordsRes +import com.ffii.fpsms.modules.pickOrder.entity.PickOrder import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo +import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderLineInfo import com.ffii.fpsms.modules.pickOrder.web.models.ConsoPickOrderRequest import com.ffii.fpsms.modules.pickOrder.web.models.SearchPickOrderRequest +import org.springframework.context.annotation.Lazy import org.springframework.data.domain.PageRequest import org.springframework.stereotype.Service +import java.io.Serializable import java.time.LocalDate import java.time.LocalDateTime import java.time.format.DateTimeFormatter @@ -49,11 +53,12 @@ open class PickOrderService( // Consolidating Pick Orders open fun assignConsoCode(): String { val suffixFormat = "%03d" - val pattern = "YYYYMMDD" + val pattern = "yyyyMMdd" val formatter = DateTimeFormatter.ofPattern(pattern) val prefix = "PICK" val midfix = LocalDate.now().format(formatter) + println(midfix) val suffix = String.format(suffixFormat, 1) val latestConsoCode = pickOrderRepository.findLatestConsoCodeByPrefix("${prefix}-${midfix}") @@ -68,9 +73,17 @@ open class PickOrderService( return listOf(prefix, midfix, suffix).joinToString("-") } -// open fun consoPickOrders(request: ConsoPickOrderRequest) { -// val assignConsoCode = assignConsoCode() -// val pickOrders = pickOrderRepository.findAllByIdIn(request.ids) -// pickOrders. -// } + open fun consoPickOrders(request: ConsoPickOrderRequest): List { + val newConsoCode = assignConsoCode() + val pickOrders = pickOrderRepository.findAllByIdIn(request.ids) + val pickOrderInfos = mutableListOf() + pickOrders.forEach { + it.consoCode = newConsoCode + } + + val updatedPickOrders = pickOrderRepository.saveAll(pickOrders) + val updatedPickOrderInfos = updatedPickOrders.map { po -> po.id as Serializable }.let { pickOrderRepository.findPickOrderInfoByIdIn(it) } + + return updatedPickOrderInfos + } } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt index 1b83860..66ce960 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt @@ -4,6 +4,7 @@ import com.ffii.core.response.RecordsRes import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo import com.ffii.fpsms.modules.pickOrder.service.PickOrderService +import com.ffii.fpsms.modules.pickOrder.web.models.ConsoPickOrderRequest import com.ffii.fpsms.modules.pickOrder.web.models.SearchPickOrderRequest import jakarta.validation.Valid import org.springframework.data.domain.Page @@ -12,6 +13,7 @@ import org.springframework.data.domain.Pageable import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.ModelAttribute import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController @@ -34,4 +36,10 @@ class PickOrderController( fun allPickOrdersByPage(@ModelAttribute request: SearchPickOrderRequest): RecordsRes { return pickOrderService.allPickOrdersByPage(request); } + + // Consolidating Pick Orders + @PostMapping("/conso") + fun consoPickOrders(@Valid @RequestBody request: ConsoPickOrderRequest): List { + return pickOrderService.consoPickOrders(request) + } } \ No newline at end of file