From 87115f4a71d58af8cf5e6dbe08837e470498067a Mon Sep 17 00:00:00 2001 From: "MSI\\derek" Date: Thu, 19 Jun 2025 11:21:54 +0800 Subject: [PATCH 1/7] update --- .../entity/PurchaseOrderLineRepository.kt | 1 + .../entity/PurchaseOrderRepository.kt | 5 +- .../entity/projections/PurchaseOrderInfo.kt | 2 +- .../service/PurchaseOrderService.kt | 88 ++++++++++++++----- .../web/PurchaseOrderController.kt | 24 +++-- .../stock/entity/StockInLineRepository.kt | 1 + .../stock/service/StockInLineService.kt | 12 ++- 7 files changed, 99 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLineRepository.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLineRepository.kt index 3421b5d..4de0519 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLineRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLineRepository.kt @@ -12,5 +12,6 @@ interface PurchaseOrderLineRepository : AbstractRepository fun findAllByPurchaseOrderIdAndDeletedIsFalse(purchaseOrderId: Long): List fun findAllByPurchaseOrderIdAndStatusNotAndDeletedIsFalse(purchaseOrderId: Long, status: PurchaseOrderLineStatus): List +// fun findAllByPurchaseOrderIdAndDeletedIsFalse(purchaseOrderId: Long): List // fun find } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderRepository.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderRepository.kt index 4ba3434..db24189 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderRepository.kt @@ -1,19 +1,20 @@ package com.ffii.fpsms.modules.purchaseOrder.entity import com.ffii.core.support.AbstractRepository +import com.ffii.fpsms.modules.purchaseOrder.entity.projections.PurchaseOrderDataClass import com.ffii.fpsms.modules.purchaseOrder.entity.projections.PurchaseOrderInfo import org.springframework.data.domain.Page import org.springframework.stereotype.Repository import java.io.Serializable import java.util.Optional import org.springframework.data.domain.Pageable +import org.springframework.data.jpa.repository.Query +import org.springframework.data.repository.query.Param @Repository interface PurchaseOrderRepository : AbstractRepository { fun findTopByM18DataLogIdAndDeletedIsFalseOrderByModifiedDesc(m18datalogId: Serializable): PurchaseOrder? - fun findPurchaseOrderInfoByDeletedIsFalse(): List - fun findPurchaseOrderInfoByDeletedIsFalse(pageable: Pageable): Page fun findPurchaseOrderInfoByIdAndDeletedIsFalse(id: Long): PurchaseOrderInfo fun findByIdAndDeletedFalse(id: Long): Optional diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/projections/PurchaseOrderInfo.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/projections/PurchaseOrderInfo.kt index afa2f7a..6f19647 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/projections/PurchaseOrderInfo.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/projections/PurchaseOrderInfo.kt @@ -14,7 +14,7 @@ interface PurchaseOrderInfo { val status: String @get:Value("#{target.supplier?.name}") val supplier: String? -// var escalated: Boolean? + var escalated: Boolean? } data class PurchaseOrderDataClass( diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt index b3507ce..8ce04b3 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt @@ -30,6 +30,7 @@ import org.springframework.data.domain.Pageable import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import java.io.IOException +import java.time.LocalDateTime import java.util.HashMap import java.util.Objects import kotlin.jvm.optionals.getOrDefault @@ -47,33 +48,69 @@ open class PurchaseOrderService( private val currencyService: CurrencyService, private val shopService: ShopService, ) : AbstractBaseEntityService(jdbcDao, purchaseOrderRepository) { - - open fun getPoList(request: PagingRequest): RecordsRes { - println(request) - val totalCount = purchaseOrderRepository.count().toInt() - val list: List = if (request.pageNum != null && request.pageSize != null) { - val pageable = PageRequest.of(request.pageNum!!, request.pageSize!!) - purchaseOrderRepository.findPurchaseOrderInfoByDeletedIsFalse(pageable).content - } else { - purchaseOrderRepository.findPurchaseOrderInfoByDeletedIsFalse() +// open fun getPurchaseOrderInfo(args: Map): List> { +// val sql = StringBuilder( +// "SELECT " + +// "po.* " + +// "FROM purchase_order po " + +// "WHERE po.deleted = FALSE" +// ); +// if (args.containsKey("name")){ +// sql.append(" AND i.name like :name "); +// } +// } + open fun getPoList(args: MutableMap): List { + val sql = StringBuilder( + " select " + + " po.*, " + + " s.name as supplier, " + + " CASE " + + " WHEN sil.purchaseOrderId IS NOT NULL THEN 1 " + + " ELSE 0 " + + " END AS escalated " + + " from purchase_order po " + + " left join shop s on s.id = po.supplierId " + + " left join ( " + + " select " + + " sil.purchaseOrderId " + + " from stock_in_line sil " + + " where sil.status like 'determine%' " + + " ) sil on sil.purchaseOrderId = po.id " + + " where po.deleted = false " + ) + if (args.containsKey("code")){ + sql.append(" AND po.code like :code "); + } + if (args.containsKey("status")){ + sql.append(" AND po.status = :status "); } + if (args.containsKey("escalated")) { + if (args["escalated"] == true) { + sql.append(" and sil.purchaseOrderId IS NOT NULL "); + } else { + sql.append(" and sil.purchaseOrderId IS NULL "); + } + } + val list = jdbcDao.queryForList(sql.toString(), args); + println(list) + val mappedList = list.map { - val escalated = stockInLineRepository.findAllStockInLineInfoByPurchaseOrderIdAndStatusStartsWithAndDeletedFalse( - purchaseOrderId = it.id, - status = "determine" - ) PurchaseOrderDataClass( - id = it.id, - code = it.code, - orderDate = it.orderDate, - estimatedArrivalDate = it.estimatedArrivalDate, - completeDate = it.completeDate, - status = it.status, - supplier = it.supplier, - escalated = escalated.isNotEmpty(), + id = (it["id"] as Int).toLong(), + code = it["code"] as String, + orderDate = it["orderDate"] as LocalDateTime?, + estimatedArrivalDate = it["estimatedArrivalDate"] as LocalDateTime?, + completeDate = it["completeDate"] as LocalDateTime?, + status = it["status"] as String, + supplier = it["supplier"] as String?, + escalated = it["escalated"] == 1L, ) } - return RecordsRes(mappedList, totalCount) +// println(value1) +// println(value1 == 1L) +// println(value2) + println(mappedList) + return mappedList } open fun allPurchaseOrder(): List { @@ -188,6 +225,13 @@ open class PurchaseOrderService( @Transactional open fun checkPolAndCompletePo(id: Long): MessageResponse { val unfinishedLines = polRepository.findAllByPurchaseOrderIdAndStatusNotAndDeletedIsFalse(purchaseOrderId = id, status = PurchaseOrderLineStatus.COMPLETED) +// val unfinishedLines = polRepository.findAllByPurchaseOrderIdAndDeletedIsFalse(purchaseOrderId = id) +// .filter { +// it.status != PurchaseOrderLineStatus.COMPLETED | +// it.status != PurchaseOrderLineStatus. +// } + println("unfinishedLines") + println(unfinishedLines) val po = purchaseOrderRepository.findById(id).orElseThrow() if (unfinishedLines.isEmpty()) { po.apply { diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/PurchaseOrderController.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/PurchaseOrderController.kt index 1d63978..5f1f59d 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/PurchaseOrderController.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/PurchaseOrderController.kt @@ -3,6 +3,7 @@ package com.ffii.fpsms.modules.purchaseOrder.web import com.ffii.core.response.RecordsRes import com.ffii.core.support.JdbcDao import com.ffii.core.utils.CriteriaArgsBuilder +import com.ffii.core.utils.PagingUtils import com.ffii.fpsms.modules.master.entity.Items import com.ffii.fpsms.modules.master.service.ItemsService import com.ffii.fpsms.modules.master.web.models.MessageResponse @@ -24,16 +25,24 @@ class PurchaseOrderController( ) { @GetMapping("/list") fun getPoList( + request: HttpServletRequest // @RequestParam(required = false) pageNum: Int, // @RequestParam(required = false) pageSize: Int ): RecordsRes { -// println("request") -// println(pageSize) -// println(pageNum - 1) - // request pageNum starts from 1, but pagingRequest starts with 0 -// val pageRequest = PagingRequest(pageSize = pageSize, pageNum = pageNum - 1,) // not start from 0 - val pageRequest = PagingRequest(pageSize = null, pageNum = null) // not start from 0 - return purchaseOrderService.getPoList(pageRequest) + println("request") + println(request) + val criteriaArgs = CriteriaArgsBuilder.withRequest(request) + .addStringLike("code") + .addString("status") + .addBoolean("escalated") + .build() + println(criteriaArgs) + val pageSize = request.getParameter("pageSize")?.toIntOrNull() ?: 10 // Default to 10 if not provided + val pageNum = request.getParameter("pageNum")?.toIntOrNull() ?: 1 // Default to 1 if not provided + + val fullList = purchaseOrderService.getPoList(criteriaArgs) + val paginatedList = PagingUtils.getPaginatedList(fullList,pageSize, pageNum) + return RecordsRes(paginatedList, fullList.size) } @GetMapping("/testing") @@ -41,6 +50,7 @@ class PurchaseOrderController( val criteriaArgs = CriteriaArgsBuilder.withRequest(request) .addStringLike("code") .addStringLike("name") + .addBoolean("escalated") .build() println("criteriaArgs") println(criteriaArgs) diff --git a/src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLineRepository.kt b/src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLineRepository.kt index 8759bff..104e430 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLineRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLineRepository.kt @@ -13,6 +13,7 @@ interface StockInLineRepository : AbstractRepository { fun findStockInLineInfoByIdAndDeletedFalse(id: Long): StockInLineInfo fun findStockInLineInfoByIdInAndDeletedFalse(id: List): List fun findStockInLineInfoByPurchaseOrderLineIdAndStatusNotAndDeletedFalse(purchaseOrderLineId: Long, status: String): List + fun findStockInLineInfoByPurchaseOrderLineIdAndDeletedFalse(purchaseOrderLineId: Long): List fun findStockInLineInfoByIdAndStatusAndDeletedFalse(id: Long, status: String): Optional fun findAllStockInLineInfoByPurchaseOrderIdAndStatusStartsWithAndDeletedFalse(purchaseOrderId: Long, status: String): List> } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt index 94c1db8..4fd6e6f 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt @@ -191,8 +191,16 @@ open class StockInLineService( @Throws(IOException::class) @Transactional fun updatePurchaseOrderLineStatus(request: SaveStockInLineRequest) { - if (request.status == StockInLineStatus.COMPLETE.status) { - val unfinishedLines = stockInLineRepository.findStockInLineInfoByPurchaseOrderLineIdAndStatusNotAndDeletedFalse(purchaseOrderLineId = request.purchaseOrderLineId, status = request.status!!) + println(request.status) + if (request.status == StockInLineStatus.COMPLETE.status || request.status == StockInLineStatus.REJECT.status) { +// val unfinishedLines = stockInLineRepository.findStockInLineInfoByPurchaseOrderLineIdAndStatusNotAndDeletedFalse(purchaseOrderLineId = request.purchaseOrderLineId, status = request.status!!) + val unfinishedLines = stockInLineRepository.findStockInLineInfoByPurchaseOrderLineIdAndDeletedFalse(purchaseOrderLineId = request.purchaseOrderLineId) + .filter { + it.status != StockInLineStatus.COMPLETE.status + && it.status != StockInLineStatus.REJECT.status + } + println("unfinishedLines") + println(unfinishedLines) if (unfinishedLines.isEmpty()) { // all stock in lines finished // change status of purchase order line From e97ba470983f8156909f9c7241abb6980ae4f135 Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Thu, 19 Jun 2025 11:49:20 +0800 Subject: [PATCH 2/7] [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 From 7436516d0b76a970a22bb3d82a3e75d562a0b738 Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Thu, 19 Jun 2025 11:53:08 +0800 Subject: [PATCH 3/7] update --- .../com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c7839c4..9e75471 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 @@ -29,7 +29,7 @@ class PickOrderController( return pickOrderService.allPickOrders(); } - @GetMapping("/listByPage") + @GetMapping("/getRecordByPage") fun test(@ModelAttribute request: SearchPickOrderRequest): RecordsRes { return pickOrderService.allPickOrdersByPage(request); } From 29258549f6762e809c3d2f566efc0136427ca9c1 Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Thu, 19 Jun 2025 11:54:10 +0800 Subject: [PATCH 4/7] update --- .../ffii/fpsms/modules/pickOrder/web/PickOrderController.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 9e75471..1b83860 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 @@ -11,6 +11,7 @@ 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.PostMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController @@ -30,7 +31,7 @@ class PickOrderController( } @GetMapping("/getRecordByPage") - fun test(@ModelAttribute request: SearchPickOrderRequest): RecordsRes { + fun allPickOrdersByPage(@ModelAttribute request: SearchPickOrderRequest): RecordsRes { return pickOrderService.allPickOrdersByPage(request); } } \ No newline at end of file From 7ab88bd04e211fdda26b7b5300569e75ab11f5e4 Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Thu, 19 Jun 2025 12:34:14 +0800 Subject: [PATCH 5/7] update --- .../pickOrder/entity/PickOrderRepository.kt | 13 +++++++--- .../pickOrder/service/PickOrderService.kt | 25 ++++++++++++++++++- .../web/models/ConsoPickOrderRequest.kt | 5 ++++ .../web/models/SearchPickOrderRequest.kt | 2 +- 4 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/ConsoPickOrderRequest.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 644ce9c..b9b15ff 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 @@ -8,6 +8,7 @@ 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.io.Serializable import java.time.LocalDateTime @Repository @@ -22,10 +23,10 @@ interface PickOrderRepository : AbstractRepository { 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 ( + and (lower(:itemName) = '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 (lower(:itemName) = 'all' or lower(pol.item.name) like concat('%',lower(:itemName),'%')) ) ) and po.deleted = false @@ -37,7 +38,13 @@ interface PickOrderRepository : AbstractRepository { targetDateTo: LocalDateTime?, type: String, status: String, - items: String, + itemName: String, pageable: Pageable, ): Page + + @Query(""" + select po.consoCode from PickOrder po where po.consoCode like :prefix% order by po.consoCode desc limit 1 + """) + fun findLatestConsoCodeByPrefix(prefix: String): String? + fun findAllByIdIn(id: List): 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 d376063..0145d6f 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 @@ -6,6 +6,7 @@ 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.LocalDate import java.time.LocalDateTime import java.time.format.DateTimeFormatter @@ -35,7 +36,7 @@ open class PickOrderService( targetDateTo = LocalDateTimeParse(request.targetDateTo), type = request.type ?: "all", status = request.status ?: "all", - items = request.items ?: "all", + itemName = request.itemName ?: "all", pageable = pageable ) @@ -45,6 +46,28 @@ open class PickOrderService( } // Consolidating Pick Orders + open fun assignConsoCode(): String { + val suffixFormat = "%03d" + val pattern = "YYYYMMDD" + val formatter = DateTimeFormatter.ofPattern(pattern) + + val prefix = "PICK" + val midfix = LocalDate.now().format(formatter) + val suffix = String.format(suffixFormat, 1) + + val latestConsoCode = pickOrderRepository.findLatestConsoCodeByPrefix("${prefix}-${midfix}") + + if (latestConsoCode != null) { + val splitLatestConsoCode = latestConsoCode.split("-") + if (splitLatestConsoCode.size > 2) { + val latestNo = splitLatestConsoCode[2].toInt() + return listOf(prefix, midfix, String.format(suffixFormat, latestNo + 1)).joinToString("-") + } + } + + return listOf(prefix, midfix, suffix).joinToString("-") + } + open fun consoPickOrders() { } diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/ConsoPickOrderRequest.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/ConsoPickOrderRequest.kt new file mode 100644 index 0000000..41d6a7c --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/ConsoPickOrderRequest.kt @@ -0,0 +1,5 @@ +package com.ffii.fpsms.modules.pickOrder.web.models + +data class ConsoPickOrderRequest ( + val ids: List +) \ 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 index 75a890d..98fe005 100644 --- 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 @@ -8,7 +8,7 @@ data class SearchPickOrderRequest ( val targetDateTo: String?, val type: String?, val status: String?, - val items: String?, + val itemName: String?, val pageSize: Int?, val pageNum: Int?, ) \ No newline at end of file From a93bfb93a313cb4752f8dc494421ca5406036d3d Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Thu, 19 Jun 2025 12:39:14 +0800 Subject: [PATCH 6/7] update --- .../ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt | 1 + 1 file changed, 1 insertion(+) 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 b9b15ff..e99b908 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 @@ -29,6 +29,7 @@ interface PickOrderRepository : AbstractRepository { and (lower(:itemName) = 'all' or lower(pol.item.name) like concat('%',lower(:itemName),'%')) ) ) + and po.consoCode = null and po.deleted = false """ ) From 15ee7fe18ee89e2d3165ac7c28bd9316616b9c99 Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Thu, 19 Jun 2025 12:47:22 +0800 Subject: [PATCH 7/7] default 0 --- .../modules/pickOrder/service/PickOrderService.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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 0145d6f..154d44b 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 @@ -3,6 +3,7 @@ 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.ConsoPickOrderRequest import com.ffii.fpsms.modules.pickOrder.web.models.SearchPickOrderRequest import org.springframework.data.domain.PageRequest import org.springframework.stereotype.Service @@ -28,7 +29,7 @@ open class PickOrderService( } open fun allPickOrdersByPage(request: SearchPickOrderRequest): RecordsRes { - val pageable = PageRequest.of(request.pageNum ?: 1, request.pageSize ?: 10); + val pageable = PageRequest.of(request.pageNum ?: 0, request.pageSize ?: 10); val response = pickOrderRepository.findPickOrderInfoByConditionsAndPageable( code = request.code ?: "all", @@ -56,7 +57,6 @@ open class PickOrderService( val suffix = String.format(suffixFormat, 1) val latestConsoCode = pickOrderRepository.findLatestConsoCodeByPrefix("${prefix}-${midfix}") - if (latestConsoCode != null) { val splitLatestConsoCode = latestConsoCode.split("-") if (splitLatestConsoCode.size > 2) { @@ -68,7 +68,9 @@ open class PickOrderService( return listOf(prefix, midfix, suffix).joinToString("-") } - open fun consoPickOrders() { - - } +// open fun consoPickOrders(request: ConsoPickOrderRequest) { +// val assignConsoCode = assignConsoCode() +// val pickOrders = pickOrderRepository.findAllByIdIn(request.ids) +// pickOrders. +// } } \ No newline at end of file