From 7b327899dc4107d9b1f856969865fe7993dbba73 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Sat, 21 Mar 2026 22:42:25 +0800 Subject: [PATCH] update jo saerch and cancel job order --- .../fpsms/modules/jobOrder/entity/JobOrder.kt | 2 + .../jobOrder/entity/JobOrderRepository.kt | 87 ++++++++++++++++++- .../jobOrder/service/JoPickOrderService.kt | 3 + .../jobOrder/service/JobOrderService.kt | 38 ++++++-- .../jobOrder/web/JobOrderController.kt | 5 ++ .../web/model/JobOrderActionRequest.kt | 5 ++ .../web/model/SearchJobOrderInfoRequest.kt | 1 + .../service/ProductProcessService.kt | 1 + .../01_alter_stock_in_line.sql | 5 ++ 9 files changed, 137 insertions(+), 10 deletions(-) create mode 100644 src/main/resources/db/changelog/changes/20260321_01_Enson/01_alter_stock_in_line.sql diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrder.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrder.kt index ca745c1..f0522e1 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrder.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrder.kt @@ -26,6 +26,8 @@ open class JobOrder : BaseEntity() { @ManyToOne @JoinColumn(name = "bomId", nullable = false) open var bom: Bom? = null + @Column(name = "isHidden", nullable = false) + open var isHidden: Boolean? = null @Column(name = "planStart") open var planStart: LocalDateTime? = null diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt index 28b1b6e..8bc7d13 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt @@ -7,6 +7,7 @@ import com.ffii.fpsms.modules.jobOrder.enums.JobOrderStatus 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 import com.ffii.fpsms.modules.jobOrder.enums.JobOrderStatus.* @@ -161,13 +162,91 @@ interface JobOrderRepository : AbstractRepository { AND (:bomName IS NULL OR jo.bom.name LIKE CONCAT('%', :bomName, '%')) AND (:planStartFrom IS NULL OR jo.planStart >= :planStartFrom) AND (:planStartTo IS NULL OR jo.planStart <= :planStartTo) + AND ( + (:joSearchStatus = 'cancel' AND jo.isHidden = true) + OR + (:joSearchStatus = 'putawayed' + AND (jo.isHidden = false OR jo.isHidden IS NULL) + AND EXISTS ( + SELECT 1 FROM StockInLine sil + WHERE sil.jobOrder = jo + AND sil.deleted = false + AND LOWER(sil.status) = 'completed' + ) + ) + OR + ((:joSearchStatus = 'all' OR :joSearchStatus = '') + AND (jo.isHidden = false OR jo.isHidden IS NULL) + AND NOT EXISTS ( + SELECT 1 FROM StockInLine sil + WHERE sil.jobOrder = jo + AND sil.deleted = false + AND LOWER(sil.status) = 'completed' + ) + ) + OR + (:joSearchStatus NOT IN ('all', '', 'cancel', 'putawayed') + AND (jo.isHidden = false OR jo.isHidden IS NULL) + AND ( + ( + :joSearchStatus = 'processing' + AND ( + LOWER(jo.status) = 'processing' + OR EXISTS ( + SELECT 1 FROM ProductProcess pp + WHERE pp.jobOrder = jo + AND pp.deleted = false + AND (LOWER(pp.status) = 'in_progress' OR LOWER(pp.status) = 'processing') + ) + ) + ) + OR + ( + :joSearchStatus = 'pending' + AND LOWER(jo.status) = 'pending' + AND NOT EXISTS ( + SELECT 1 FROM ProductProcess pp + WHERE pp.jobOrder = jo + AND pp.deleted = false + AND (LOWER(pp.status) = 'in_progress' OR LOWER(pp.status) = 'processing') + ) + ) + OR + ( + :joSearchStatus = 'packaging' + AND EXISTS ( + SELECT 1 FROM PickOrder po + JOIN po.pickOrderLines pol + JOIN pol.stockOutLines sol + WHERE po.jobOrder = jo + AND po.deleted = false + AND pol.deleted = false + AND sol.deleted = false + AND LOWER(sol.status) IN ('completed', 'partially_completed', 'partly_completed') + ) + ) + OR + ( + :joSearchStatus NOT IN ('processing', 'pending') + AND LOWER(jo.status) = :joSearchStatus + ) + ) + AND NOT EXISTS ( + SELECT 1 FROM StockInLine sil + WHERE sil.jobOrder = jo + AND sil.deleted = false + AND LOWER(sil.status) = 'completed' + ) + ) + ) ORDER BY jo.id DESC """) fun findJobOrderInfoWithDateFilter( - code: String?, - bomName: String?, - planStartFrom: LocalDateTime?, - planStartTo: LocalDateTime?, + @Param("code") code: String?, + @Param("bomName") bomName: String?, + @Param("planStartFrom") planStartFrom: LocalDateTime?, + @Param("planStartTo") planStartTo: LocalDateTime?, + @Param("joSearchStatus") joSearchStatus: String, pageable: Pageable ): Page diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt index 1da5327..ede0ae2 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt @@ -1868,6 +1868,9 @@ open fun getAllJoPickOrders(isDrink: Boolean?, floor: String?): List + if (p.jobOrder?.isHidden == true) return@filter false if (isDrink != null) { val bomIsDrink = p.bom?.isDrink if (bomIsDrink != isDrink) return@filter false diff --git a/src/main/resources/db/changelog/changes/20260321_01_Enson/01_alter_stock_in_line.sql b/src/main/resources/db/changelog/changes/20260321_01_Enson/01_alter_stock_in_line.sql new file mode 100644 index 0000000..aed81fd --- /dev/null +++ b/src/main/resources/db/changelog/changes/20260321_01_Enson/01_alter_stock_in_line.sql @@ -0,0 +1,5 @@ +-- liquibase formatted sql +-- changeset Enson:alter_job_order_is_hidden + +ALTER TABLE `fpsmsdb`.`job_order` +ADD COLUMN `isHidden` TINYINT(1) NULL DEFAULT 0 AFTER `deleted`; \ No newline at end of file