From e97ba470983f8156909f9c7241abb6980ae4f135 Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Thu, 19 Jun 2025 11:49:20 +0800 Subject: [PATCH] [Pick Order] Add Pick Order Search by Page --- .../pickOrder/entity/PickOrderRepository.kt | 34 ++++++++++++++++++- .../pickOrder/service/PickOrderService.kt | 32 +++++++++++++++++ .../pickOrder/web/PickOrderController.kt | 18 ++++++++++ .../web/models/SearchPickOrderRequest.kt | 14 ++++++++ 4 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SearchPickOrderRequest.kt 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 80f3634..644ce9c 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 @@ -2,10 +2,42 @@ package com.ffii.fpsms.modules.pickOrder.entity import com.ffii.core.support.AbstractRepository import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo +import com.ffii.fpsms.modules.pickOrder.web.models.SearchPickOrderRequest +import org.springframework.data.domain.Page +import org.springframework.data.domain.Pageable import org.springframework.data.jpa.repository.Query +import org.springframework.data.repository.query.Param import org.springframework.stereotype.Repository +import java.time.LocalDateTime @Repository -interface PickOrderRepository: AbstractRepository { +interface PickOrderRepository : AbstractRepository { fun findPickOrderInfoByDeletedIsFalse(): List + + @Query( + """ + select po from PickOrder po + where (lower(:code) = 'all' or lower(po.code) like concat('%',lower(:code),'%')) + and (:targetDateFrom is null or po.targetDate >= :targetDateFrom) + and (:targetDateTo is null or po.targetDate <= :targetDateTo) + and (lower(:type) = 'all' or lower(po.type) like concat('%',lower(:type),'%')) + and (lower(:status) = 'all' or lower(po.status) like concat('%',lower(:status),'%')) + and (lower(:items) = 'all' or exists ( + select 1 from PickOrderLine pol + where pol.pickOrder = po + and (lower(:items) = 'all' or lower(pol.item.name) like concat('%',lower(:items),'%')) + ) + ) + and po.deleted = false + """ + ) + fun findPickOrderInfoByConditionsAndPageable( + code: String, + targetDateFrom: LocalDateTime?, + targetDateTo: LocalDateTime?, + type: String, + status: String, + items: String, + pageable: Pageable, + ): Page } \ 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 13f08b8..d376063 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,17 +1,49 @@ package com.ffii.fpsms.modules.pickOrder.service +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.web.models.SearchPickOrderRequest +import org.springframework.data.domain.PageRequest import org.springframework.stereotype.Service +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter @Service open class PickOrderService( val pickOrderRepository: PickOrderRepository, ) { + open fun LocalDateTimeParse(dateTime: String?, pattern: String? = "YYYY-MM-DD hh:mm:ss"): LocalDateTime? { + try { + val formatter = DateTimeFormatter.ofPattern(pattern) + return LocalDateTime.parse(dateTime, formatter) + } catch (e: Exception) { + return null + } + } + open fun allPickOrders(): List { return pickOrderRepository.findPickOrderInfoByDeletedIsFalse() } + open fun allPickOrdersByPage(request: SearchPickOrderRequest): RecordsRes { + val pageable = PageRequest.of(request.pageNum ?: 1, request.pageSize ?: 10); + + val response = pickOrderRepository.findPickOrderInfoByConditionsAndPageable( + code = request.code ?: "all", + targetDateFrom = LocalDateTimeParse(request.targetDateFrom), + targetDateTo = LocalDateTimeParse(request.targetDateTo), + type = request.type ?: "all", + status = request.status ?: "all", + items = request.items ?: "all", + pageable = pageable + ) + + val records = response.content + val total = response.totalElements + return RecordsRes(records, total.toInt()) + } + // Consolidating Pick Orders open fun consoPickOrders() { 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 b12fd9d..c7839c4 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 @@ -1,18 +1,36 @@ package com.ffii.fpsms.modules.pickOrder.web +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.SearchPickOrderRequest +import jakarta.validation.Valid +import org.springframework.data.domain.Page +import org.springframework.data.domain.PageRequest +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.RequestMapping +import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController +import java.time.DateTimeException +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter @RestController @RequestMapping("/pickOrder") class PickOrderController( private val pickOrderService: PickOrderService, + private val pickOrderRepository: PickOrderRepository, ) { @GetMapping("/list") fun allPickOrders(): List { return pickOrderService.allPickOrders(); } + + @GetMapping("/listByPage") + fun test(@ModelAttribute request: SearchPickOrderRequest): RecordsRes { + return pickOrderService.allPickOrdersByPage(request); + } } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SearchPickOrderRequest.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SearchPickOrderRequest.kt new file mode 100644 index 0000000..75a890d --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SearchPickOrderRequest.kt @@ -0,0 +1,14 @@ +package com.ffii.fpsms.modules.pickOrder.web.models + +import org.springframework.web.bind.annotation.RequestParam + +data class SearchPickOrderRequest ( + val code: String?, + val targetDateFrom: String?, + val targetDateTo: String?, + val type: String?, + val status: String?, + val items: String?, + val pageSize: Int?, + val pageNum: Int?, +) \ No newline at end of file